A personal productivity system that treats your files as the source of truth. Build personal systems over transparent, human-readable files.
- Week-based grid: Track daily habits with OK/FAIL status
- GitHub-style heatmaps: 365-day and monthly visualizations
- Streak tracking: Current and longest streak display
- Status bar: Pin habits to see streak info at a glance
- Notification triggers: Configure alerts based on habit performance
- Real-time age display: See your age in decimal format, ticking in real-time
- Birthday countdown: Days remaining until your next birthday
- Telegram: Send notifications to a Telegram channel
- ChatGPT: Generate AI-powered messages for notifications
- Browse storages and files when authenticated
- View file metadata, sync status, and versions
- Dark/light theme toggle (dark by default)
- Export/import habit data as JSON
- Account management
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- State Management: Zustand
- Icons: Lucide React
- Fonts: Geist (Sans & Mono)
app/
habits/ # Habit tracking view
age/ # Age display view
files/ # File explorer
integrations/ # Integration management
settings/ # App settings
login/ # Authentication
api/views/habits/ # Cron tick endpoint
components/ # Shared UI components
domain/habits/ # Habit domain logic
integrations/ # Telegram, OpenAI integrations
lib/ # Utilities, API client, store
npm install
npm run devOpen http://localhost:3000 to view the app.
The app connects to https://api.sheetlife.app for:
- Email-based authentication (request code, verify code)
- Storage and file management
- File sync across devices
Configured for Vercel with cron job support:
/api/views/habits/tickruns every 5 minutes to evaluate notification triggers
SheetLife follows a "files as source of truth" philosophy:
- Backend: Generic file sync protocol (no domain logic)
- Frontend: Views interpret files and provide domain semantics
- Integrations: Server-side modules for external services
See /docs for detailed architecture documentation.