"Run your home together." A voice-first household coordination app for dual-income Indian couples — built to make invisible mental load visible, shareable, and fair.
- What is HOO?
- Why HOO Exists
- Core Features
- Brand Identity
- Tech Stack
- Architecture Overview
- Project Structure
- Database Schema
- Getting Started
- Available Scripts
- Development Workflow (GSD)
- Project Status / Roadmap
- Privacy & Data Principles
- Testing
- Contributing
- Documentation Index
HOO (short for Household Operations Orchestrator) is a mobile-first platform that helps dual-income couples coordinate household responsibilities without nagging, mental fatigue, or one partner silently carrying the load.
⚠️ HOO is NOT a dating app. It's built for couples who already live together and need a better system for running their shared life — groceries, appointments, chores, finances, kids, family events, and everything in between.
The product is built around two AI mascots:
- Ollie 🐙 — the organized one. Handles task capture, reminders, and scheduling.
- Opal 🐙 — the insightful one. Surfaces balance insights and gentle, non-judgmental nudges.
(They're octopi, not owls — eight arms for juggling many responsibilities at once.)
Household management research consistently shows one partner — usually women — carries a disproportionate, invisible mental load: remembering appointments, anticipating needs, coordinating help, tracking what's run out. This labor is real, exhausting, and rarely visible to the other partner.
HOO's mission is to:
- Make the load visible — a dashboard that shows who's carrying what, not just a shared to-do list.
- Reduce friction in capture — speak a task naturally instead of opening an app and typing into fields.
- Preserve context — a task isn't just "buy milk," it's why, when, and any preferences that matter.
- Encourage balance, not guilt — insights and nudges are supportive and judgment-free (the No-Nag principle — see Privacy & Data Principles).
- Speak the target audience's language — literally. English, Hindi, and Hinglish voice capture, and India-specific life events (festivals, household help, wedding season) built in from day one.
| Feature | Description |
|---|---|
| 🎙️ Voice-First Capture | Tap-to-record, speak naturally ("Kal subah doodh lana hai"), AI transcribes (Whisper) and parses into structured task fields (GPT). |
| 🔄 Partner Sync | Real-time task sharing, delegation, and negotiation between partners via Supabase Realtime. |
| 📊 Mental Load Dashboard | Visual balance meter, task distribution by category, and trends — celebrates 50/50 balance instead of shaming imbalance. |
| 🧠 Context Preservation | Tasks carry full context (notes, due dates, recurrence, priority, category) — not just a bare title. |
| 🔁 Recurring Tasks & Automation | RFC-5545 (RRULE)-based daily/weekly/monthly recurrence with automatic instance generation via pg_cron, skip/edit-this-vs-all-future support, and timezone-safe DST handling. |
| 📈 Insights & Analytics | Pre-computed daily analytics snapshots, AI-generated pattern insights, burnout-risk indicator (framed positively), and category-level trend charts (Victory Native). |
| 🔔 Daily Briefings | Morning briefing (today's priorities + partner status) and evening handoff (what partner accomplished) — delivered via push notification, not from the partner directly. |
| 🤝 Partner Invitations | Invite via email, SMS, or shareable link; invites expire after 7 days. |
| 🇮🇳 India-First Design | Hindi/Hinglish support, festival reminders, household-help scheduling, family-event coordination — on the roadmap beyond MVP. |
| 🔒 No Ads, Ever | Subscription-only business model — your household data is never monetized via advertising. |
| Color | Hex | Usage |
|---|---|---|
| Deep Purple | #6B46C1 |
Primary brand color, recurring-task UI |
| Warm Coral | #F56565 |
Accents, notifications |
| Soft Gold | #ECC94B |
Achievements, highlights |
| Lavender | #9F7AEA |
Secondary, backgrounds |
| Cream | #FFFAF0 |
Background |
Brand voice: warm but efficient, supportive (never judgmental), uses "we" language, culturally aware of Indian family dynamics, light humor when appropriate. Full guidance lives in Documenation/brand-strategy.md and Documenation/mascot-design-guide.md.
| Layer | Technology | Version |
|---|---|---|
| Mobile/Web Framework | Expo (React Native) | ~54.0 |
| UI Library | React / React Native | 19.1 / 0.81.5 |
| Routing | expo-router (file-based, typed routes) |
~6.0 |
| State Management | Zustand | ^5.0 |
| Backend | Supabase (Postgres, Auth, Realtime, Edge Functions, pg_cron) |
— |
| Voice Transcription | OpenAI Whisper | via openai SDK ^6.16 |
| NLP / Task Parsing | OpenAI GPT-4o-mini (parsing) / GPT-4o (insights) | — |
| Charts | Victory Native (+ @shopify/react-native-skia) |
^41.20 |
| Recurrence Engine | rrule (RFC-5545) + date-fns-tz |
^2.8 / ^3.2 |
| Local Storage | @react-native-async-storage/async-storage |
^2.2 |
| Notifications | expo-notifications (Firebase Cloud Messaging under the hood) |
~0.32 |
| Language | TypeScript (strict mode) | ~5.9 |
┌─────────────────────────┐ ┌──────────────────────────┐
│ Expo App (RN + Web) │ │ Supabase │
│ │ │ │
│ app/ (routes) │◄──────►│ Postgres (RLS-protected) │
│ components/ (UI) │ REST + │ Auth (email/password) │
│ lib/stores/ (Zustand) │ Realtime│ Realtime (task sync) │
│ lib/services/ (parsing, │ Edge │ Edge Functions: │
│ transcription, invite) │ Funcs │ - generate-recurring- │
│ lib/hooks/ (voice rec.) │ │ tasks │
└──────────┬───────────────┘ │ - generate-analytics- │
│ │ snapshot │
│ Whisper + GPT calls │ pg_cron (scheduled jobs) │
▼ └──────────────────────────┘
┌─────────────────────────┐
│ OpenAI API │
│ Whisper (transcription) │
│ GPT-4o-mini (task parse) │
│ GPT-4o (insight gen.) │
└─────────────────────────┘
Key architectural decisions:
- Voice pipeline: audio is recorded on-device (
expo-audio), sent to OpenAI Whisper for transcription, then the audio file is deleted immediately — only the transcript and parsed task are persisted. - Privacy-by-design: PII is stripped before any external API call (transcription/parsing).
- Realtime-first: Supabase Realtime pushes task changes to both partners instantly — no manual refresh.
- Pre-computed analytics: Rather than computing insights client-side on every load, a daily Edge Function (
generate-analytics-snapshot) pre-computes metrics + AI insights and stores them inanalytics_snapshots, scheduled viapg_cronat 1am IST. Falls back gracefully ifOPENAI_API_KEYisn't configured (so local dev works without it). - Recurring tasks: modeled as a parent template + generated instances (industry-standard pattern), with an
recurring_exceptionstable for skip/edit overrides. Instances are generated server-side via Edge Function +pg_cron, with client-side generation as a fallback for availability. - No-Nag principle: all reminders/insights come from the system, never appear to come from the partner — and severity is framed supportively ("Worth Noting" instead of "Medium", an inverted/positive-framed burnout-risk meter, etc.).
HOO/
├── app/ # expo-router file-based routes
│ ├── (auth)/ # Sign-in, sign-up, forgot-password
│ ├── (tabs)/ # Main tab navigator: index, tasks, insights, settings
│ ├── invite/[code].tsx # Partner invite acceptance flow
│ ├── partner/invite.tsx # Send a partner invite
│ ├── task/new.tsx # Create task
│ ├── task/voice.tsx # Voice capture flow
│ ├── task/[id].tsx # Task detail / edit
│ ├── modal.tsx, +html.tsx, +not-found.tsx, _layout.tsx
│
├── components/
│ ├── charts/ # BalanceTrendChart, CategoryTrendChart (Victory Native)
│ ├── insights/ # InsightCard, BurnoutRiskCard, RecommendationCard, CategoryDeepDive
│ └── __tests__/ # Component tests
│
├── lib/
│ ├── hooks/useVoiceRecorder.ts # Recording state machine for voice capture
│ ├── services/
│ │ ├── transcription.ts # Whisper API integration
│ │ ├── taskParser.ts # GPT-based NL → structured task parsing
│ │ └── invitation.ts # Partner invite generation/validation
│ ├── stores/ # Zustand stores: auth, household, partner, tasks,
│ │ # recurring, insights
│ ├── types/ # database.types.ts (Supabase generated), recurring.types.ts
│ ├── utils/rrule.ts # RRULE pattern helpers
│ ├── openai.ts # OpenAI client init
│ └── supabase.ts # Supabase client (SSR-safe, AsyncStorage-backed)
│
├── supabase/
│ ├── migrations/ # 00001 → 00008: schema, tasks, partners, recurring, analytics
│ └── functions/
│ ├── generate-recurring-tasks/ # Edge Function: creates upcoming task instances
│ └── generate-analytics-snapshot/ # Edge Function: computes daily insights snapshot
│
├── constants/Colors.ts # Brand color tokens (light/dark)
├── assets/ # Icons, splash, images
├── .planning/ # GSD planning artifacts (PROJECT.md, ROADMAP.md, STATE.md, research/)
├── docs/ , Documenation/ # Product docs: PRD, specs, brand strategy, competitive analysis, etc.
├── app.config.js # Expo app config (name, icon, plugins, env passthrough)
├── babel.config.js, tsconfig.json # `@/*` path alias → project root
├── CLAUDE.md # Project brief used as AI agent context
├── GSD.md, RALPH.md, IMPLEMENTATION-PLAN.md # Workflow / planning reference docs
└── package.json
Note: an
AgentRank/directory is present in this working copy but is an independent, unrelated nested git repository (own.git, ownpackage.json) — it is not part of the HOO codebase and is untracked by HOO's own.gitignore/git history.
Schema evolves through sequential SQL migrations in supabase/migrations/:
| Migration | Adds |
|---|---|
00001_initial_schema.sql |
households, profiles tables; RLS; auto-create-profile-on-signup trigger |
00002_tasks.sql |
tasks table (title, description, category, priority, assignee, due date, status) |
00003_partner_system.sql |
Partner linking, invitation tables/flow |
00005_recurring_tasks.sql |
Recurring columns on tasks (is_recurring, recurring_pattern, parent_task_id, archived_at), recurring_exceptions table |
00006_pg_cron_recurring.sql |
Scheduled job: hourly recurring-instance generation |
00007_analytics_snapshots.sql |
analytics_snapshots table (JSONB metrics/category_breakdown/trends/ai_insights), RLS (read: authenticated, write: service_role only) |
00008_pg_cron_analytics.sql |
Scheduled job: daily analytics snapshot generation (1am IST) |
All tables use Row Level Security (RLS) — household members can only read/write their own household's data; analytics writes are restricted to the service_role (Edge Functions only, never client-writable).
Core entities, conceptually:
User (auth.users + profiles)
├── id, email, full_name, avatar_url, household_id
Household
├── id, name, owner_id
Task
├── id, title, description, category, priority
├── assigned_to, created_by, due_date, status
├── is_recurring, recurring_pattern (RRULE/JSONB), parent_task_id, archived_at
RecurringException
├── task_id, occurrence_date, action (skip/edit), overrides
AnalyticsSnapshot
├── household_id, date
├── metrics (JSONB), category_breakdown (JSONB)
├── trends (JSONB), ai_insights (JSONB)
- Node.js 18+ and npm
- Expo CLI (installed automatically via
npx expo) - A Supabase project (free tier is fine) — for Auth, Postgres, Realtime, Edge Functions
- An OpenAI API key — for voice transcription (Whisper) and task/insight parsing (GPT)
- For native builds: Xcode (iOS) and/or Android Studio (Android), or use Expo Go for quick testing
- (Optional) Supabase CLI for running migrations and Edge Functions locally
git clone https://github.com/s3ak6i-dev/HOO.git
cd HOO
npm installCreate a .env file in the project root (already covered by .gitignore — never commit this):
# Supabase
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
# OpenAI (client-side parsing / transcription calls)
EXPO_PUBLIC_OPENAI_API_KEY=sk-...Edge Functions (
generate-analytics-snapshot,generate-recurring-tasks) additionally requireOPENAI_API_KEYto be set as a Supabase secret (supabase secrets set OPENAI_API_KEY=sk-...) — they run server-side and degrade gracefully (skip AI insight generation) if it's missing.
npm start # Expo dev server — scan QR with Expo Go, or press i/a for simulator
npm run ios # Run on iOS simulator
npm run android # Run on Android emulator
npm run web # Run in browser via react-native-web- Create a project at supabase.com.
- Apply migrations in order (via Supabase Studio SQL editor, or the CLI):
supabase link --project-ref your-project-ref supabase db push # applies everything in supabase/migrations/ - Deploy Edge Functions:
supabase functions deploy generate-recurring-tasks supabase functions deploy generate-analytics-snapshot
- Set Edge Function secrets:
supabase secrets set OPENAI_API_KEY=sk-... - Confirm
pg_cronjobs from migrations00006and00008are scheduled (Supabase Studio → Database → Cron Jobs).
| Command | Description |
|---|---|
npm start |
Start Expo dev server |
npm run ios |
Build & run on iOS simulator |
npm run android |
Build & run on Android emulator |
npm run web |
Run in browser (Metro web bundler) |
This project is developed using GSD (Get Shit Done) — a structured, multi-agent planning workflow for Claude Code that fights "context rot" via fresh contexts per phase and atomic commits.
/gsd:new-project # questions → research → requirements → roadmap
/gsd:plan-phase <N> # research + plan + verify a phase
/gsd:execute-phase <N> # execute the phase in parallel waves
/gsd:progress # check current statusAll planning artifacts live in .planning/:
PROJECT.md— project visionREQUIREMENTS.md— 63 scoped requirements (REQ-IDs)ROADMAP.md— phase breakdown & progressSTATE.md— decisions, blockers, session continuityresearch/— stack, features, architecture, pitfalls researchphases/— per-phase plans and verification reports
See GSD.md for the full command reference, and RALPH.md for additional workflow notes.
Current state: v2.0 Post-MVP — all 9 planned phases complete (63/63 requirements, 100%).
| Phase | Name | Status |
|---|---|---|
| 1 | Foundation & Auth | ✅ Complete |
| 2 | Core Task System | ✅ Complete |
| 3 | Voice Capture & AI | ✅ Complete |
| 4 | Partner System | ✅ Complete |
| 5 | Dashboard & Views | ✅ Complete |
| 6 | Notifications & Briefings | ✅ Complete |
| 7 | Load Balance & Polish | ✅ Complete |
| 8 | Recurring Tasks & Automation | ✅ Complete |
| 9 | Insights & Analytics Dashboard | ✅ Complete |
Open items before launch (from .planning/STATE.md):
- Provision production Supabase project + API keys
- Provision production OpenAI API key
- Set up App Store / Play Store developer accounts
- Set up Expo account for EAS Build
- No-P0-bugs pass + beta test with 5–10 households
Post-MVP / future scope (see Documenation/mvp-scope.md):
- Hindi / Hinglish voice support
- Grocery list with store-aisle-optimized "store mode"
- Calendar integration
- "Power Hour" focused-completion mode
- Festival reminders & Hindu calendar integration
- Household help (servant/maid) scheduling & payment tracking
- UPI expense tracking
- No ads, ever — subscription-only business model.
- Voice deleted immediately — audio is transcribed then discarded; only text/structured data persists.
- PII stripped before external calls — no raw personal data sent to OpenAI beyond what's needed for parsing.
- User owns their data — export and delete anytime.
- DPDP compliant — designed around India's Digital Personal Data Protection Act.
- Minimal collection — only what's functionally necessary.
- No-Nag system — all reminders/insights come from the app, never attributed to or sent "on behalf of" a partner; tone is always supportive, never guilt-inducing (e.g., severity labels read "Worth Noting" rather than "Medium", burnout-risk meters are framed positively).
Full details: Documenation/privacy-strategy.md.
npm test # not yet wired up — see components/__tests__ for existing test scaffoldingComponent tests currently live under components/__tests__/ (e.g. StyledText-test.js) using react-test-renderer. Test coverage is an open area — contributions adding RTL/Jest coverage for stores (lib/stores/) and services (lib/services/) are welcome.
This is currently a closed, single-maintainer project under active development via the GSD workflow. If you're collaborating:
- Branch off
main— don't commit directly to it. - Follow the existing atomic-commit convention (one logical change per commit, descriptive
type(scope): messagestyle — seegit logfor examples likefeat(09-05): enhance Insights screen with AI-powered components). - Run migrations locally before submitting schema changes; never edit a previously-applied migration file — add a new one.
- Respect the No-Nag and privacy principles above in any user-facing copy or notification logic.
This README reflects the repository state as of Phase 9 completion (v2.0 Post-MVP milestone, January 2026).