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.

9:41

Tuesday, October 13

Good
morning

Your north starBuild things.
Stay curious.

I walk toward what feels hard.

Another mantra

Your coach for today

Upper body is planned and your finance quest waits on one small step. Log yesterday's expenses before you train.

Daily Flow

Early rise
Workout
Journal
What's on your mind today?
9:41

Fitness

WeekBalanceWorkoutsFoods

This week

Mo12
Tu13
We14
Th15
Fr16
Sa17
Su18

Tuesday, October 13

Training

Upper body4 exercises · progressionplanned
  • Bench press3 × 862.5 kg
  • Pull-ups3 × 6body
  • Overhead press3 × 1035 kg
  • Barbell row3 × 1055 kg
Done

Food

1,490 kcal

168g

Carbs

112g

Protein

41g

Fat

  • BreakfastOats, banana, skyr520
  • LunchRice bowl with chicken780
  • SnackProtein shake190
9:41

My Quests

Finances

32/5

Build a buffer

Fitness

13/4

Stay consistent

Side project

42/5

First ten users

Relationships

1/5

Show up weekly

Portuguese

21/4

Hold a conversation

9:41

Journal

Your space to reflect

Tuesday, October 13

Three questions, written from this week

1When did I last push past myself?
Saturday. I signed up for the 10k before I could talk myself out of it.
2What do I keep postponing, and why?
What comes to mind…
3Where am I on my way right now?
What comes to mind…
9:41

Finances

OverviewDebtsBudget
October 2026

Income

3,200.00 €

Expenses

2,140.00 €

Balance

+1,060.00 €

Log incomeLog expense
  • 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
Coach

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
Your coach for today

Upper body is planned and your finance quest waits on one small step. Log yesterday's expenses before you train.

services/openai.tsts
// 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 prompt
Radar

The 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.

kiez-kalender.example/events
services/radar.tsts
// 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 useLiveQuery

This 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.
Decisions

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.