I've been building software for a while, but I've never built fully in public before.
This is my first build-in-public post for TimeManager — a productivity OS for knowledge workers. I'm sharing weekly updates: what shipped, what broke, numbers, and lessons. No vanity metrics, no PR spin.
Let's go.
What We're Building
TimeManager is an AI-powered scheduling and productivity system. The core idea: instead of managing a to-do list, you describe your work, your energy, your goals — and the system helps you design days that are actually achievable.
Think less "another task app" and more "an operating system for your work life." Calendar, tasks, habits, goals, focus sessions, weekly reviews — unified, with an AI layer that makes them talk to each other.
Big idea. Let's see if I can actually build it.
Week 1: The Foundation
The first week was all backend infrastructure. Not glamorous, but without it nothing else works.
What shipped:
- Django + Django Ninja API setup (chose Ninja over DRF for the schema-first approach)
- User authentication — registration, email verification, JWT tokens
- Onboarding flow (3-step: timezone/hours → booking defaults → notification prefs)
- Full test suite setup (pytest, factory_boy)
- Docker dev environment (Postgres 16, Redis 7, RabbitMQ)
- Production deployment on Railway
The numbers:
- 72 tests passing, 91% coverage
- Backend deployed and responding at Railway
- Build time: ~4 minutes on Railway
What broke:
The migration dependency system burned me early. Django's AUTH_USER_MODEL means your custom User model's migration has to run before anything else — but if your app label is wrong in the dependency graph, everything fails silently in a confusing way. Lost 45 minutes to this.
Also: Railway's environment variable injection happens at runtime, not at Docker build time. My frontend was trying to read PUBLIC_API_URL at build time via SvelteKit's static env module. Had to switch to $env/dynamic/public with a fallback. Note for anyone deploying SvelteKit to Railway.
The Tech Stack Decision
I get asked why Django instead of FastAPI or Node. Short answer: Django's ORM, admin panel, and ecosystem are worth the tradeoff for a data-heavy app like this. Django admin alone saves 2-3 weeks of internal tooling work.
For the API layer, Django Ninja gives me FastAPI-style schemas and automatic OpenAPI docs without abandoning Django. Best of both worlds.
Frontend is SvelteKit. I picked Svelte because it's closer to the metal — less abstraction between me and what the browser actually does. Also, Svelte 5's runes model is genuinely excellent for reactive state.
Honest Reflection
Shipping auth and infra in week 1 felt slow. I wanted to be building scheduling algorithms, not password reset flows. But this foundation either saves you or kills you later. I've seen enough startups collapse under technical debt from week 1 shortcuts.
The thing that surprised me: how much I enjoyed building the test suite. Good tests aren't a chore — they're confidence. Every time I refactored something this week, the test suite caught two regressions before they became bugs.
Week 2 Goal
Calendar system + Google Calendar sync. The calendar is the core primitive of the whole product — everything else (tasks, habits, goals) eventually needs to schedule into it.
ETA: 5 days. I'll report back.
Following along? Join the waitlist to get early access when we launch. I'll be sharing weekly updates here — no algorithmic boost, just honest building.