Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

bike dash logo

Welcome to Bike Dash!

A Python Django web app that allows users to track their bike inventory, todo checklist, and profit from sales.


As a hobby, my dad buys bikes from pawn shops in Salt Lake City, Utah and then he rebuilds/upgrades the bikes to sell online. I asked him how he tracks his inventory and his sales and his response was, "I start with money in an envelope, and I hope that I end up with more money in the envelope at the end of the year than what I started with". That's when I decided to build him this app.

App Screenshots


Bike List

Users can view bikes based on status: all, in process, listed for sale, sold


Bike Details

Also on the detail page, users can add labor to the bike if they did work on the bike, or they can move the bike's status (in process --> listed for sale, listed --> sold)

homepage homepage homepage

Listing a bike for sale

Users can easily see the $ amount invested (purchase price + labor + parts added) in the bike to price the bike accordingly.



Users can see quick facts about their inventory, sales, and labor

homepage homepage homepage

To Dos

Users often have a long list of things they need to do for each bike, whether it's bike updates or maintenance. This is a list of to dos for each bike, along with the due date for it to be completed.


Labor List

An optional add-on to the to do items is the ability to add labor for the to do items. If it's just a small change, users are welcome to simply mark the to do as completed, but if it is more involved and the user would like to track the amount of time spent, users can then add labor to a specific to do item.



Users can enter the parts they have accumulated to help track their inventory. Users can also search for parts by name or description. If a part is currently installed on a bike, the part will indicate which bike it is installed on. Once a bike is marked as sold, the installed parts will no longer appear in this list.

homepage homepage homepage

General app functionality

The following functionalities are part of Bike Dash:

  1. User registration (forked from Steve and Joe - thanks! ;) )
  2. User login (forked from Steve and Joe)
  3. User logout (forked from Steve and Joe)
  4. Bikes: add, edit, list, detail
  5. Bike Brands: add, edit, list
  6. Bike models: add, edit, list
  7. Parts: add, edit, list, detail
  8. Todos: add, edit, list, delete
  9. Labor: add, edit, list, detail

App flow

This app has 4 goals:

  1. Track bike and bike part inventory
  2. Track Todos and labor for those Todo items
  3. Track bike status (in process, listed, sold)
  4. Review bike profits and other related data

Typical flow:

  1. Add a new bike to your inventory
  2. Create any todos as you work on the bike
  3. Add new parts from your part inventory to the bike
  4. Add labor records to track time spent and rate of pay for todo items
  5. Repeat adding parts/adding todos/recording labor as you work on the bike (you can also add labor independent of a part if you're working on maintenance or an existing part)
  6. Once you're ready, list the bike for sale - the "list your bike for sale" page will show the breakeven price of the bike (purchase price + labor + parts)
  7. Once you've sold the bike, record the sale price and date
  8. Check your dashboard to see your reporting on sales, inventory, labor, etc.


Note about bike brands & bike models - Users can add a bike brand (like Specialized) as well as models for that brand. This data is open to all users - if you add a bike brand and/or model, the other users will be able to see that added data. In a perfect world, this would not be user generated data - someday I might scrape some data to populate the database with common bike brands/models. I am hoping to add more functionality to this, such as checking that the brand/model isn't already in the db.

Bikes, Parts, Todos, and Labor are unique to the current user and can only be viewed by the logged in user.


bike dash erd

To dos & Labor

A Todo must be assigned when selecting to record labor, but a todo can be completed without any labor recorded. This is for those who don't want to track their labor time/rate of pay, and would prefer to simply have a checklist of todos as they work on their bikes.


When a user adds a part, the brand and model of the part can be added in one of two ways:

  1. Add from the dropdown that is populated from the bike brands/bike models (for example, if you have a frame by a specific bike manufacturer, you can select the brand from the dropdown)
  2. Fill in the make and model input fields - this saves a string for both make and model on that part Either the dropdowns or the input fields must be filled out

Status & Condition

The data for these items is default to the app and are not editable.

  • Statuses: In process, listed for sale, sold
  • Condition: New, Good, Fair, Poor

To Clone

  1. Create a directory
  2. cd into that directory
  3. Clone the repository
  4. Start a virtual environment
  5. run pip install django
  6. run pip install safedelete
  7. run pip install crispy_forms
  8. Create migrations python makemigrations bikes
  9. Apply migrations to db python migrate
  10. run python runserver
  11. Open up your browser and navigate to the running server
  12. Register, add bikes/parts/todos/labor, and you're on your way!

Created by Kimmy Bird

I'm a graduate of Nashville Software School and am currently a Junior Instructor at NSS. Learn more about me at


An app for my dad to track his inventory & sales for his hobby bike shop



No releases published


No packages published