Accountability bot via Telegram. Deno + Supabase + Ollama (Mac Mini). Daily check-in cron, humor voice generation, group coordination.
| Component | Technology | Why |
|---|---|---|
| Telegram Bot | Deno + Telegram Bot API | Primary interface. Commands: /declare, /checkin, /excuse, /status |
| Backend | Deno 2 | Runs on Mac Mini 24/7. Handles all bot logic and scheduling. |
| Database | Supabase (PostgreSQL) | User profiles, projects, milestones, check-ins, excuse bunker, badges |
| Scheduler | Upstash QStash | Morning check-in triggers (8am local time), evening follow-up (9pm) |
| AI Voice | Ollama (Mac Mini) | Check-in message generation in the user's preferred humor tone |
| Video Calls | Daily.co or Jitsi (free) | Hustle pod weekly video calls, embedded in web UI |
| Payments | Stripe | Subscriptions, Hustle Pod billing |
| users | ||
|---|---|---|
| id | uuid | Primary key |
| telegram_chat_id | varchar(50) | For Telegram messages |
| timezone | varchar(50) | For scheduling check-ins at right local time |
| personality | enum('encouraging','sarcastic','gentle','fierce') | Agent's check-in voice |
| active_projects_limit | integer | 1 or 3 based on plan |
| projects | ||
|---|---|---|
| id | uuid | |
| user_id | uuid (FK) | |
| name | varchar(255) | "Finish my novel" |
| description | text | |
| category | varchar(50) | writing, art, music, code, business, fitness, other |
| target_completion | date | |
| status | enum('active','paused','completed','abandoned') | |
| milestones | ||
|---|---|---|
| id | uuid | |
| project_id | uuid (FK) | |
| title | varchar(255) | "Complete chapter 3" |
| due_date | date | |
| status | enum('pending','completed','overdue') | |
| check_ins | ||
|---|---|---|
| id | uuid | |
| user_id | uuid (FK) | |
| project_id | uuid (FK) | |
| date | date | |
| morning_sent | boolean | |
| morning_response | text | User's reply |
| evening_sent | boolean | |
| evening_response | enum('yes','partial','no','excuse') | |
| note | text | What they did |
| excuses (bunker) | ||
|---|---|---|
| id | uuid | |
| user_id | uuid (FK) | |
| check_in_id | uuid (FK) | |
| excuse_text | text | What they said |
| agent_response | text | Troubleshooting advice from AI |
| hustle_pods | ||
|---|---|---|
| id | uuid | |
| name | varchar(255) | |
| category | varchar(50) | Pod project type affinity |
| max_members | integer | 5–8 |
| meeting_link | varchar(500) | Jitsi/Daily link |