Turn screenshots, receipts, PDFs, voice notes, and messy thoughts into clear next steps or permanent notes.
Live project: lifeinbox-calm.explorertaha.chatgpt.site OpenAI Build Week track: Apps for Your Life
LifeInbox is a private, mobile-first personal life operating system with a clean iOS-inspired workspace. Users can ask GPT-5.6 to split a messy capture into source-grounded actions or preserve it as one permanent note, review the result, and work from Smart Focus, Today, Inbox, Notes, connected Life Threads, and an Ask experience grounded only in their own saved items.
Life admin arrives through too many channels: a screenshot of a flight, a voice reminder, a receipt, a PDF renewal notice, or a half-finished thought. Traditional task apps ask the user to organize everything before it becomes useful. LifeInbox reverses that workflow:
- Capture first.
- Let GPT-5.6 find every distinct next step and its supporting evidence.
- Review the whole batch before saving.
- Act from one connected, searchable workspace.
The fastest path uses a temporary real account:
- Open the live project.
- Create a temporary account. Every new workspace starts empty.
- Capture:
Renew my insurance Friday at 5 PM, email the receipt to Maya, and book a dentist appointment next Tuesday. - Confirm that GPT-5.6 creates three atomic items. Move through the batch tabs and review each item's source excerpt, type, priority, date, confidence, missing fields, and suggested Life Thread.
- Approve the batch, refresh the page, and confirm that all three items persist.
- Complete one item, choose the Completed inbox filter, and confirm that it remains easy to find or restore.
- Open Ask LifeInbox, ask
What should I do first?, then click its citation to open the exact supporting item. - Open New capture, select Save as note, save a useful reference, and confirm it appears in Notes after refresh.
- Open that note and choose Turn into action. Confirm the action retains a backlink to its source note.
- Press
Ctrl/Command + Kto open Spotlight, search across items and Life Threads, then launch a 25-minute Focus Session from a result. - Open Settings → Privacy, export the designed PDF report, and inspect its cover, summary metrics, grouped items, notes, and page numbers.
- Delete the temporary workspace from Settings → Privacy.
LifeInbox has no demo workspace or seeded account data. Every visible workspace is authenticated and backed by Appwrite.
- Appwrite email/password sign-up, login, session restore, recovery, and logout
- Real empty workspaces with no seeded or demo data
- Text, image, PDF, and browser-recorded voice capture
- GPT-5.6 Terra Structured Outputs that split one capture into as many as 20 atomic items
- Explicit Save as note capture mode with a permanent, searchable Notes library and full note bodies
- Source-evidence, date/time, enum, and duplicate-intent validation with safe refusal/incomplete-output handling
- Batch review with per-item tabs, confidence, missing-information guidance, editing, removal, and approve-all
- Permissioned Appwrite rows and files owned by the signed-in user
- Today briefing generated from current high-priority and dated actions; reference notes do not become fake work
- Smart Focus ranking with explicit pins, due-date awareness, Today priority, and a distraction-free 25-minute focus timer
- Universal Spotlight command center with keyboard access, cross-workspace search, quick capture actions, and navigation
- Searchable, filterable inbox with open, Focus, task, event, expense, Later, and completed views plus complete, restore, real timed snooze, detail, and delete actions
- Note-to-action conversion with source backlinks, inherited Life Thread context, and permanent-note preservation
- Life Thread creation, AI suggestions, persistent linking, progress cockpit, quick thread capture, and non-destructive deletion
- Ask LifeInbox answers grounded in user data with clickable item citations
- Preference storage, a clear 30-day original-upload cleanup policy, a branded multi-page PDF export, and full workspace deletion
- Installable PWA with offline app shell, custom icons, safe areas, and install guidance
- Minimal white, graphite, and lime landing page with iOS-inspired product graphics and focused conversion paths
- Edge-to-edge iOS-style phone tab bar, labeled tablet rail, floating desktop shell, keyboard-safe sheets, accessible drawers/dialogs, and full-screen mobile capture/review
- Appwrite setup automation for five collections, one file bucket, indexes, and permissions
- Server-side AI orchestration, per-user capture and all-route token budgets, owned-file cleanup, and operational controls
flowchart LR
U["User / installed PWA"] --> W["Next.js + React UI"]
W --> A["Appwrite Auth"]
W --> D["Appwrite Database"]
W --> S["Private Appwrite Storage"]
W --> F["AI Orchestrator Function"]
F --> O["OpenAI Responses API\nGPT-5.6 Terra"]
F --> D
F --> S
X["Scheduled Ops Function"] --> D
X --> S
The browser receives only public Appwrite identifiers. Login is verified by a same-origin gateway that stores the Appwrite session in an HttpOnly, Secure, SameSite=Lax cookie, preventing cross-site cookie restrictions from downgrading a signed-in user to Appwrite's guest role. OPENAI_API_KEY, OPS_SECRET, and the one-time Appwrite bootstrap key never enter the client bundle. Appwrite Functions use scoped dynamic execution keys and every saved row/file is permissioned to its owner. File-backed extraction binds the submitted file to an owner-matched capture record before download, and original uploads are automatically removed after the deployment-wide 30-day retention period. Approved actions and permanent Notes remain until the user deletes them.
LifeInbox uses the OpenAI Responses API with gpt-5.6-terra and high reasoning effort inside the Appwrite ai-orchestrator function.
- Capture extraction: converts unstructured text, images, PDFs, and voice transcripts into a strict
items[]schema containing up to 20 independent tasks, events, expenses, and notes. - Superbrain questions: ranks a bounded set of user-owned records, then uses a strict schema to return a grounded answer, concrete next actions, useful insights, and supporting item IDs.
- Daily briefings: summarizes at most three relevant next steps and caches them by date and item-version hash.
- Life Thread grouping: proposes groups only when deterministic relationships are unavailable.
AI output is treated as untrusted input. The function verifies source excerpts, normalizes dates and times conservatively, rejects duplicate or unsupported items, handles refusals and incomplete Responses API results, retries safe transient failures, records usage, and never claims that an external action was completed. Every item remains editable and nothing is persisted until the user approves the batch.
Codex was the primary engineering collaborator across the submission-period build. It accelerated:
- Converting the initial product prompt into the working React/Appwrite architecture
- Implementing authentication, database schemas, indexes, file storage, and two server functions
- Building and polishing the iOS-inspired white/lime landing page, responsive phone, tablet, desktop, and PWA experiences
- Tracing live Appwrite execution failures to empty structured output and schema-unsafe persistence
- Migrating the production model to GPT-5.6 Terra with high reasoning and hardening atomic decomposition, evidence validation, structured planning, parsing, and retry behavior
- Removing demo state and replacing fake dashboard values with real calculations
- Implementing batch review, persistent Life Threads, grounded citations, designed PDF export, deletion, and account cleanup
- Running lint, builds, automated tests, production deployment, and full browser smoke tests
- The product problem: life admin should be captured before it is organized.
- The minimal iOS-inspired white/lime product direction and review-before-save trust model.
- Appwrite as the BaaS and the choice to keep all AI secrets in server functions.
- Non-destructive Life Thread deletion: deleting a group must not delete its underlying items.
- GPT-5.6 Terra as the production model for a stronger intelligence/cost balance.
The dated commit history provides submission-period implementation evidence. The production repair and real-data work are captured in commits 62b5257 and 6d80844.
- Node.js 22.13 or newer
- npm
git clone https://github.com/heytaha14/LifeInbox.git
cd lifeinbox
npm install
npm run devOpen http://localhost:3000. Sign-up, persistence, capture intelligence, and Ask require the Appwrite and OpenAI setup below.
Copy the example environment file:
cp .env.example .env.localOn Windows PowerShell:
Copy-Item .env.example .env.localThen follow docs/SETUP.md. In short:
- Create an Appwrite project and add
localhostas a Web platform. - Add the public Appwrite endpoint/project values and one-time bootstrap key to
.env.local. - Run
npm run appwrite:setupto create collections, indexes, permissions, and storage. - Run
npm run appwrite:deployto create or reconcile, package, upload, activate, and verify the Appwrite functions. - Add
OPENAI_API_KEY,OPENAI_MODEL=gpt-5.6-terra,FREE_DAILY_CAPTURE_LIMIT=50, andFREE_DAILY_AI_TOKEN_LIMIT=250000only to the AI function. - Add
OPS_SECRETandFILE_RETENTION_DAYS=30only to the Ops function. - Restart the app and create a real account.
Never commit .env.local or expose the OpenAI/Appwrite secret keys through a NEXT_PUBLIC_ variable.
| Resource | ID | Purpose |
|---|---|---|
| Database | lifeinbox |
Structured user data |
| Collection | captures |
Original capture metadata and processing state |
| Collection | actions |
Reviewed tasks, events, expenses, and notes |
| Collection | threads |
Connected action groups |
| Collection | briefings |
Versioned daily briefing cache |
| Collection | usage |
Capture, token, OCR, STT, cache, and failure counters |
| Bucket | inbox-files |
Private original uploads, limited to 10 MB |
| Function | ai-orchestrator |
Extract, Ask, brief, and grouping routes |
| Function | ops |
Retention, deletion, cleanup, usage, and operational seams |
npm run lint
npm run typecheck
npm test
npm ci --prefix functions/ai-orchestrator --omit=dev
npm ci --prefix functions/ops --omit=dev
node --check functions/ai-orchestrator/src/main.js
node --check functions/ops/src/main.jsThe production flow should be release-checked with a temporary account through sign-up, empty-state rendering, compound GPT-5.6 extraction, batch approval, reload persistence, completion filtering, generated briefing, grounded Ask citation, PDF export, responsive breakpoints, PWA installation, and full workspace deletion. Remove the temporary account after the test.
- Production setup
- Architecture
- API and function routes
- Security and privacy
- Appwrite Free operations
- Operations runbook
- Build Week submission pack
- Judge demo video production pack
LifeInbox is available under the MIT License.