Time tracking web app built with Bun, Effect-TS, and Redis.
- Runtime: Bun (server + bundler)
- Patterns: Effect-TS (functional, error handling, DI)
- Database: Redis (Bun native client)
- Frontend: Vanilla TypeScript (no frameworks)
- Deployment: Vercel (Bun runtime)
- Authentication: User registration, login, logout with JWT tokens
- Projects: Create, edit, delete projects; assign to time entries
- Timer: Start/stop timer with live elapsed time display; assign project while running
- Time Entries: Create, edit, delete entries; filter by date; view duration and project
- Calendar View: Visual timeline with hourly breakdown; drag to create entries; click to edit; navigate days with current time indicator
- Real-time Sync: Multi-tab synchronization via WebSocket; timer updates broadcast instantly
- Offline Support: Local storage caching; sync when connection restored
- Date Navigation: Filter entries by specific date; view daily time totals
# Install dependencies
bun install
# Set environment variables
REDIS_URL=redis://localhost:6379
# Run development server
bun run devbun run dev- Start dev server with HMRbun run build- Build for productionbun run start- Run production buildbun run check- Type check and lintbun run fix- Auto-fix linting issues
src/
├── api/ # API route handlers
├── app/ # Frontend (HTML + TypeScript)
│ ├── app/ # Main app SPA
│ └── login/ # Login page
├── lib/ # Shared libraries
│ ├── auth/ # Authentication (JWT, CSRF, middleware)
│ └── redis/ # Redis service layer
└── server/ # Server entry point and routing
REDIS_URL- Redis connection URL (required)NODE_ENV-productionor development (default)
Deploy to Vercel with Bun runtime. Set REDIS_URL environment variable.