‹ Back to the archive
September 2026

HomeworkPlanner

A planner that takes a big assignment and splits it into daily targets, so every morning you know exactly what to work on. Live at survive.school.

Visit survive.school ›
web-appnextjstypescriptpostgresauthself-hosted
Hero image for HomeworkPlanner

// Challenges

The hard part was the scheduling math, not the website. Splitting hours across the days you actually have free, then reshuffling everything when you fall behind, without the plan feeling like it is nagging you.

// Skills Used

Next.js and React TypeScript Postgres and database design Authentication Docker and server deployment

// Outcome

Live and running on my own server at survive.school. Free to use.

Brief

I procrastinate. Most people I know do too. The problem is never that we do not know the assignment is due, it is that a big project sitting three weeks out does not feel like today’s problem until it suddenly is.

HomeworkPlanner fixes that by doing the math for you. You give it the task, your guess at how many hours it will take, and the due date. It splits that work across the days you have left and gives you a short list every morning. That is the whole idea. You open it, you see today, you go.

It is live at survive.school and it is free.

How it works

You tell it three things. What the task is, how long you think it will take, and when it is due.

It finds your free time. You set up your normal week once, classes, practice, whatever else you already have going on. The planner only schedules around the time you actually have.

It splits the work. Instead of one scary block that says “20 hour project,” you get a target for today. Maybe an hour and a half. That is something you can start.

It reshuffles when you slip. This is the part I care about most. If you miss a day, the plan does not just break and shame you. It redistributes what is left across the days you have remaining, and if the deadline is genuinely getting tight, it tells you.

What I built it with

Next.js and TypeScript for the whole thing, front and back. Postgres for the data, with Drizzle so the database schema and the TypeScript types are the same thing and cannot drift apart. Better Auth handles accounts and sessions.

I run it myself. It is packaged in Docker and deployed to my own server, behind a reverse proxy that handles HTTPS certificates. Pushing to the main branch redeploys it.

What I learned

Date math is harder than it looks. “Today” is not the same moment everywhere, and a plan that quietly uses the server’s idea of today instead of yours will hand you the wrong list. Time zones ate more of my time than any other single thing.

Scoping to the user from day one. Every row in the database belongs to one account. I built it that way from the start even though I was the only user, because bolting that on later means rewriting everything.

The algorithm is the product. The website is just how you look at it. All the real work is in deciding how hours get spread across days and what happens when you fall behind. I wrote it as plain functions and tested them on their own, so I could throw hard cases at it. Overloaded weeks, missed days, changed estimates.

Shipping is a skill. Getting it onto a real server with a real domain and real HTTPS taught me more than any tutorial. Docker builds, environment variables, database migrations against a live database, all of it.