Students often have complicated bell schedules that vary depending on the day. Checking a static bell schedule repeatedly just to determine how much time remains in class is inconvenient.
The Solution
School Progress gives students an at-a-glance view of their current class, how much time remains, and what comes next. It has since expanded beyond the original countdown into additional scheduling and academic tools.
Features
Live Class Countdowns & Progress
Track upcoming live classes with countdown timers and monitor your progress in real-time.
School & Bell Schedules
Bell schedules are automatically updated for different schools for each day.
Courses & Enrollments
Users can enroll in created courses and create courses that don't exist.
Integrated Tools
Users can access a variety of integrated tools to enhance their learning experience, such as a calculator, timer, and AP® Exam countdowns.
Impact
600+ Student & Staff Users
6 Schools Supported
Building for real users introduced problems I wouldn't have encountered in a personal demo project, including supporting inconsistent school schedules, handling user-generated data, maintaining reliability during the school day, and making changes without disrupting existing users.
Technology
Frontend
Next.js • React • TypeScript • Tailwind CSS
Backend
Next.js • Node.js
Database
PostgreSQL • Drizzle ORM
I chose PostgreSQL because much of School Progress's data is relational, since schools contain schedules, schedules contain periods, users enroll in classes, and courses are associated with schools and teachers.
Authentication
Better Auth
Infrastructure
Vercel • Cloudflare • Neon • GitHub
Engineering Challenges
Supporting different bell schedules
Different schools don't all follow a single Monday–Friday schedule. Some have alternating block days, zero periods, late starts, special schedules, etc. I solved this by creating a flexible schedule database model that can accommodate various types of bell schedules, including alternating block days, zero periods, late starts, and special schedules.
Modeling courses, enrollments & teachers
It took some thought to model the relationships between courses, enrollments, and teachers in a way that accurately reflects the real-world scenarios schools face. This involved designing a database schema that could allow students to create courses based on a list of existing teachers and be able to enroll in those courses.
Scaling from one school to many
As School Progress grew from supporting just my middle school to all of the high schools and middle schools in the district, it was important to ensure that the data model and queries could efficiently handle multiple schools without performance issues. I also had to implement proper data isolation between schools to ensure that data from one school did not leak into another.