Project Info
Know where your time goes. Speak it or type it — AI turns your day into a clean, categorized timeline.
Inspiration
Time is the one resource you can't get back, yet most of us have no real sense of where it goes. We'd finish a day "feeling busy" but unable to say what we actually did with it. Seeing where your time goes is the first step to taking it back — but every tracker we tried made logging the chore: Clockify leans on manual timers (wasting the time you're trying to save), Timely doesn't track on your phone, and Timing is slow on iOS. So we flipped the problem: instead of making people fight a stopwatch, what if you could just say what you did and let an AI agent organize it? Capture as much of your time as possible, any way possible — voice, text, or (eventually) automatic background monitoring.
What it does
Capture by voice or text — say "from 9 to 11 I worked on the API, then took a break," or type it. AI parsing — Claude turns messy natural language into structured time blocks with real start/end times. Automatic categorization — every activity is sorted into Work, Communication, Learning, Entertainment, or Break — no manual tagging. Hour-by-hour visualization — a clean, color-coded timeline, a weekly History view, and an Apps & Websites breakdown. Accounts, light/dark mode, and a polished branded UI.
How we built it
A full-stack app split across four focused tracks, integrated through a shared API contract: Speech-to-text: Deepgram transcribes recorded audio. AI agent: the Anthropic (Claude) API converts a transcript into categorized, time-stamped blocks — with a fast offline heuristic parser as a fallback. Frontend: Angular — dashboard, timeline, history, settings, dark mode. Backend: Node.js + Express, with Redis for storage (graceful in-memory fallback) and JWT auth. and the day's total tracked time is simply $T = \sum_h d_h$ — the number rendered at the top of your dashboard.
Challenges we ran into
Limited time — scoping an ambitious "track time any way possible" vision down to a working MVP. Privacy & permissions — native background monitoring on Mac/iOS needs heavy OS entitlements, so we shipped the AI capture methods first. Natural-language time parsing — "an hour," "until 9 pm," overnight spans, and shared AM/PM across ranges were all deceptively hard. Integration friction — merging four parallel branches meant rebases and conflicts (including one half-merged feature that briefly broke main); a written API contract and smaller PRs kept us unblocked.
What we learned
AI is a feature, not the whole product. The magic lived in the glue — good prompts, structured outputs, and graceful fallbacks — not the model alone. Contracts beat coordination. A shared API contract saved more time than constant syncing. Integrate early and often. Small, frequent PRs hurt far less than one giant end-of-hackathon merge. Design carries the demo. A consistent theme and thoughtful UX made the same features feel dramatically more compelling.
What's next
Background monitoring of Mac & iOS usage — auto-capture apps and sites, no logging required. Integrations — calendar, Strava, Apple Health. Import a schedule from an image as another capture method. App blocking during focus hours. Personalized AI categories that learn what "productive" means for you.
time-tracker
Time tracker with automatic browser/Mac monitoring, voice logging, and an Apple Calendar–style day view.
Features
- Dashboard — vertical day timeline, date navigation, pinch-to-zoom, scroll preservation
- Voice logging — mic → transcribe (Deepgram) → parse → timeline blocks; live transcript while recording
- Voice mutations — natural language edits (move/shift/shorten/cancel blocks) via voice commands
- Chrome extension — background tab/domain tracking → timeline
- Mac menu bar app — frontmost app focus tracking (
clients/mac/) - Stats page (
/stats) — day/week/month breakdown - Category settings (
/settings) — customize AI categorization hints for voice parse - Auth — email/password + Google sign-in; JWT on all activity routes
Quick start
# Terminal 1 — backend
cd server && npm install && cp .env.example .env && npm run dev
# Terminal 2 — frontend
cd frontend/time-tracker-app && npm install && npm start
Open http://localhost:4200 (mic requires localhost, not a LAN IP).
Demo login: demo@timetracker.test / Demo1234!
Optional — Chrome extension: load unpacked from browser-extension/ (install guide).
Project layout
time-tracker/
├── server/ Express API, Redis/memory store, AI parse
├── frontend/time-tracker-app/ Angular dashboard
├── browser-extension/ Chrome MV3 background monitor
├── clients/mac/ macOS menu bar tracker
├── API_CONTRACT.md API reference
└── DECISIONS.md Architecture notes
Environment variables
Full list in server/.env.example. Summary:
| Variable | Required? | Purpose |
|---|---|---|
DEEPGRAM_API_KEY | For voice STT | Speech-to-text |
ANTHROPIC_API_KEY | Optional | LLM schedule refine |
JWT_SECRET | Optional locally | Auth tokens |
REDIS_URL | Optional | Persistence (memory fallback OK for demo) |
GOOGLE_CLIENT_ID | For Google login | OAuth web client ID |
Testing
cd server && npm test # 97 tests, no keys required
cd frontend/time-tracker-app && npm run build
Demo script
- Login → dashboard shows vertical timeline
- Browse github.com in Chrome → switch tab → block appears
- Log with voice → “From 9 to 10 AM coding” → block at 9 AM
- Visit
/statsand/settings
Team / components
| Area | Folder |
|---|---|
| Backend API | server/ |
| Angular UI | frontend/time-tracker-app/ |
| Extension | browser-extension/ |
| Mac client | clients/mac/ |
Links
- API:
API_CONTRACT.md - Server setup:
server/README.md - Extension:
browser-extension/README.md - Mac app:
clients/mac/README.md - Client event contract:
clients/INTEGRATION.md - Agent / architecture:
AGENTS.md,DECISIONS.md
Analysis
View
Metric
- 53
- 30
- 9
- 5
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AngularIn code
- AnthropicIn code
- ExpressIn code
- HTMLIn code
- JavaScriptIn code
- RedisIn code
- SwiftIn code
- TypeScriptIn code
- CSSClaimed
- Node.jsClaimed
8 of 10 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeCommits
- CodexConfig
- CursorCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
584 KB
Source files
125
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Samar1006/time-tracker
182 files · 7.0 MB · @ 8521cbe
Structure
Interface
80 files · 44%Screens, components and styles rendered to the user.
API & routing
23 files · 13%Request entry points: routes, handlers and controllers.
Application logic
30 files · 16%Domain rules, services and shared utilities.
Data & schema
4 files · 2%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript46%
- JavaScript33%
- HTML9%
- Markdown7%
- Swift5%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/time-tracker-app/package.json
npm · 15- @angular/common
- @angular/compiler
- @angular/core
- @angular/forms
- @angular/platform-browser
- @angular/router
- rxjs
- tslib
- +7 more
server/package.json
npm · 8- @anthropic-ai/sdk
- @deepgram/sdk
- bcryptjs
- cors
- dotenv
- express
- jsonwebtoken
- +1 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.