Case study
Glasshour
See where your screen time goes, set limits that stick, and let friends keep you honest.
What it is
Glasshour shows where your screen time goes, across apps and websites grouped into categories. It lets you set limits, and it lets you share that picture with friends. It takes cues from two older tools: one did automatic app tracking with a social profile, the other did strict per-site time limits. Glasshour joins the two halves:
- A calm, modern dashboard. One glance answers “where did today go?”
- Accountability with friends. A friend can be asked to approve extending a limit, and is told if the tracker is removed.
- Desktop and web first. Mobile screen-time apps are common. Desktop and browser tools are not.
Principles
A few rules were written down before any code, and the agents work within them:
- Limits are enforced on the device. Blocking works offline. The server handles sync, history and social features, never enforcement.
- Private by default. Record the domain, not the full URL or page title. Record the app, not the window title. Friends see only what you allow.
- Local first, then sync. Clients buffer locally and upload in idempotent batches, so a retried upload never double-counts.
- One source per second of time. When a browser is in front, the extension’s per-site time replaces the desktop agent’s generic browser bucket.
How AI was used
Glasshour began with a different goal from earlier projects. Phase 0 had two exit criteria: you could sign in on the deployed site, and the AI workflow could take a story from Ready to Done on its own.
The workflow is a set of reusable agent skills:
- An epic is decomposed into candidate stories.
- A story is picked up, implemented, tested and opened as a pull request.
- Review and CI run, the agent addresses feedback, and the story is merged and moved across the board.
A person sets direction and approves the result. The decision record in the repository is the source of truth that every session reads first.
Architecture, briefly
| Component | Tech |
|---|---|
| API | ASP.NET Core, EF Core, PostgreSQL |
| Domain | A pure library with sessions, categories and limit rules |
| Web | React, Vite, Tailwind, TanStack Query, Recharts |
| Browser extension | TypeScript, Manifest V3, one codebase for every browser |
| macOS agent | A Swift menu-bar app |
| Windows agent | A .NET tray app |
Shared contracts, including the OpenAPI spec, a category catalog and the test cases for the limit rules engine, live in one place, so every client is tested against the same rules.
What’s next
Website tracking first, then app tracking on macOS, then categories and insights, then limits and blocking, then the social features. Notes from each phase will show up under Writing.