live

Mr. Timely

Activity Session Timer

Set a duration or a deadline, then break the time into named activities. A live progress bar shows how deep into the session you are. When the session ends, get a full summary of how time was actually spent — and share it as a permanent public URL. An optional AI planner (BYOK) will suggest a session structure given a goal.

Set up session
Set up session
Build the activity list
Add activities
Timer running
Timer running
Session summary
Session summary
Duration or deadline mode
Named activity list with time budgets
Live progress visualisation
AI session planner (bring your own key)
Shareable session summary pages
Next.js 14 Framework
App Router with server actions for OpenAI calls
TypeScript Language
Strict mode throughout; types co-located with components
Tailwind CSS Styling
Utility-first; dark mode via class strategy
OpenAI API AI planner
GPT-4o structured output for session suggestions
localStorage Persistence
Session state survives refresh; no backend required

A fully client-rendered SPA hosted on Vercel. Session state lives in localStorage — no user accounts, no database. The AI planner calls OpenAI via a Next.js server action so the API key never touches the client. Completed sessions are serialised and encoded in a shareable URL.

This was my first project built with GitHub Copilot as a constant pair. The biggest surprise: Copilot was excellent at generating TypeScript interfaces and repetitive component scaffolding, but consistently suggested overly complex state management. I ended up simplifying most of its suggestions.

The shareable URL feature was almost entirely Copilot-written — it suggested the pattern, generated the encode/decode logic, and handled edge cases I hadn't considered. That felt like genuine leverage.

The AI session planner took longer than expected. Structured output from GPT-4o is reliable, but prompt engineering to get sensibly scoped suggestions took several iterations. The model tends toward optimistic time estimates.

All projects
EXP-002 →
BrewLog