Student Ninja was my first real end-to-end build: a Django app that parses uploaded class schedules out of Excel and PDF files, turns them into an interactive calendar, and emails reminders before things are due. Archived now, but it is where the full-stack habit started.
Overview
Every semester starts the same way: five syllabi in five formats, deadlines scattered through paragraphs and tables, and no single view of what is due when. Student Ninja ate the files and produced one calendar.
It was a Django web app with a JavaScript calendar front end, file parsing on upload, task management, and a background job system for email reminders.
The problem
Deadlines lived in documents, not in tools. Copying them into a calendar app by hand took an evening and got stale the first time a professor moved a date.
The fix: parse the documents students already have, and make the reminders automatic so forgetting requires effort.
The build
Uploads were parsed server-side into structured events that auto-populated an interactive calendar rendered with JavaScript. Tasks could be added, edited, and checked off alongside the parsed schedule.
Reminders ran through Django background tasks on a Celery and Crontab setup, sending emails ahead of due dates. Getting scheduled jobs, parsing, and a web UI working together was my first taste of real systems plumbing, and I have been chasing that feeling since.
Outcomes
Deployed and used through my own semesters, then archived in 2023 as coursework ended.
As a first full build it covered an honest amount of ground: file parsing, data modeling, a dynamic front end, and scheduled background jobs. The projects since have better architecture, but this one proved the loop: idea, build, ship, iterate.