A maintenance reminder that tells you which job to do first
MotoPulse is a terminal app for motorcycle owners. It keeps the service records and puts the most overdue job at the top of the list. I built it in a two-person team for my data structures course. It runs on a computer, not in a browser, so the code is on GitHub.
- Role
- Co-developer in a two-person team
- Timeline
- Started April 2026
- Stack
- Python · heapq · JSON
Three of nine standard jobs
- Engine oil change
- Chain cleaning
- Brake fluid flush
Urgency score
Kilometres overdue + 10 × days overdue
- Priority queue
- Dictionary lookup
- Undo stack
- JSON file
The problem
Plenty of riders keep their service dates in their head or in a notebook. Oil changes and brake checks slip, and the first sign can be a breakdown. We compared the usual fixes: a spreadsheet or paper logbook costs nothing but never warns you, and the car-history service we found did not cover motorcycles.
For our data structures course, the idea paper had to justify every data structure by what it does in the app. A maintenance tracker suited that, because the hard part is not storing the records. It is deciding which job to show first.
What we built
-
A ranked alert list. Every open job gets an urgency score: the
kilometres past due, plus ten points for each day past its due date. A priority queue
(Python's
heapq) hands the highest score back first, so the most overdue job is always at the top. - A garage per user. Accounts with a login and a password reset, and as many motorcycles as you like, each found by plate number through a dictionary.
- Standard jobs that remember you. Nine ready-made jobs such as engine oil, chain, spark plugs and brake fluid, or your own. Change an interval once and the app uses it next time.
- Costs and history. Log a finished job with its date and price, and the total spent on that motorcycle updates.
- Undo. A stack of recent actions lets you reverse a new motorcycle, a mileage update, a scheduled job, a finished job or an edit.
- One file for everything. The whole state saves to a JSON file, and dates can be typed in eleven different formats.
How it turned out
It is a class project, so there are no users or numbers to report. What I can show is that it runs, the code is public, and each part of the design answers a question from the course: a dictionary for lookup, a heap for priority, a list for history and a stack for undo.
The finished program also drifted from our idea paper in useful ways. The paper added days overdue to the score as they were; the code counts each day ten times over, so time weighs more than distance. The nine standard jobs and the remembered intervals were not in the plan at all.
What I would do differently
Passwords are stored as plain SHA-256 hashes with no salt, which is not safe for real users; a slow, salted hash is the fix. The alert list rebuilds its heap every time you open it, which is fine for a few jobs and wasteful for many. And dates are typed as text when a date picker would stop most input errors. If I rebuilt it as a web app, those three would come first.
Want to talk about what I can build now?
Book a 30-minute call. Tell me what the site needs, and I'll tell you honestly whether I'm the right person for it.
Free, 30 minutes on Cal.com. Replies to email within one working day.