BuildLife Organizer
Life
Organizer
An offline-first life app: quests, a morning check-in, a journal, finance, a meal plan, and a coach that reads every other surface before it writes. Everything lives in Dexie + IndexedDB with optional Supabase sync. The AI runs on your own OpenAI key.
Tuesday, October 13
Good
morning
Stay curious.
I walk toward what feels hard.
Another mantra
Upper body is planned and your finance quest waits on one small step. Log yesterday's expenses before you train.
Daily Flow
Fitness
This week
Tuesday, October 13
Training
- Bench press3 × 862.5 kg
- Pull-ups3 × 6body
- Overhead press3 × 1035 kg
- Barbell row3 × 1055 kg
Food
168g
Carbs
112g
Protein
41g
Fat
- BreakfastOats, banana, skyr520
- LunchRice bowl with chicken780
- SnackProtein shake190
My Quests
Finances
Build a buffer
Fitness
Stay consistent
Side project
First ten users
Relationships
Show up weekly
Portuguese
Hold a conversation
Journal
Your space to reflect
Three questions, written from this week
Finances
Income
3,200.00 €
Expenses
2,140.00 €
Balance
+1,060.00 €
- Freelance projectIncome+1,400.00 €
- RentHousing−890.00 €
- GroceriesFood & drink−67.30 €
- Gym membershipHealth−34.90 €
- Train ticketTransport−49.00 €
- Coach Context Sources
- 0
- Morning Rituals
- 0
- Offline Latency
- 0ms
- Offline Reads
- 0%
- Stack
- React 19
- Framer Motion
- Dexie
- Supabase
- OpenAI
- Tailwind
How the morning coach knows you
Before the OpenAI call, the app pulls a context packet from six sources — everything it already stores about you — so the coach answers to your actual week, not a blank prompt.
- Nordstern
- the long-term vision, short + full text
- Quests
- every active quest + its current phase
- Journal
- the last 5 entries, prompts + free text
- Todos
- outstanding tasks, up to 5 surfaced
- Mantras
- only the ones marked active
- Morning rituals
- last 7 check-ins — sport, meditation, wake time
- Today's note
- what's on your mind this morning
Upper body is planned and your finance quest waits on one small step. Log yesterday's expenses before you train.
// Context-aware morning coach — no generic prompts
const [vision, quests, journalEntries, todos, mantras, checkins] =
await Promise.all([
db.vision.get('nordstern'),
db.quests.toArray(),
db.journalEntries.orderBy('date').reverse().limit(5).toArray(),
db.todos.filter(t => !t.completed).toArray(),
db.mantras.filter(m => m.active).toArray(),
db.morningCheckins.orderBy('date').reverse().limit(7).toArray(),
])
const streak = checkins.filter(c => c.didExercise).length
// Assemble CONTEXT_PARTS, then call GPT-4o-mini with a coach system promptThe radar that browses your own URLs
You add any URL as a source, and on refresh the app hits OpenAI's Responses API with the web_search tool: GPT opens the URL, pulls real events from the next seven days, and returns JSON the app renders as cards. No hardcoded feeds, no scraper to keep alive.
// Lifestyle Radar — AI browses your own URLs for events
const response = await client.responses.create({
model: 'gpt-4o-mini',
tools: [{
type: 'web_search_preview',
user_location: { type: 'approximate', country: 'DE', city: 'Berlin' },
}],
input: `Event-Scout for Berlin. Search ${source.url} for real events
between ${today} and ${endDate}. Return JSON:
[{ name, date, location, url, description }]`,
})
const events = JSON.parse(response.output_text)
// Dexie.radarEvents.bulkAdd(events) — reactive UI via useLiveQueryThis week
3- 15OctModular synth open jamKreuzbergBring a patch cable and play a short set with whoever shows up.
- 17OctCeramics studio open dayNeuköllnTry the wheel for an hour, take one piece home.
- 18OctAutumn run club, 10k loopTempelhofer FeldEasy pace, coffee afterwards.
Choices that shaped the build
Dexie holds the truth, Supabase only syncs
Dexie is the source of truth, so reads are local and the app runs offline. An opt-in Supabase Auth sync pushes all 22 tables to a single user_data row for multi-device.
Build the context before the prompt
Six parallel DB queries assemble your current state, then one OpenAI call runs against it. More code than a raw prompt, but that's what keeps the coach specific instead of generic.
A check-in instead of a streak counter
Three quick checks — sport, meditation, wake time — plus a daily note. A streak punishes a missed day; this just records where today stands and moves on.
Bring your own OpenAI key
No server-side proxy. Your key sits in settings and calls go straight from the browser with dangerouslyAllowBrowser. Not enterprise-grade, but you own the cost and the AI layer needs no infrastructure of its own.
Live queries via dexie-react-hooks
With useLiveQuerythe UI updates the moment the local DB changes — no refetch, no stale state, no spinner on everyday reads.