evOo-local/docs/PRODUCT.md
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

157 lines
7.4 KiB
Markdown

# evOo — Product rules (Gesamterfahrung)
## Design mantra (apply ruthlessly)
**EINFACHHEIT und Durchgängigkeit. Dennoch super flexibel. Weniger ist Mehr.**
| Rule | Product |
|------|---------|
| **One model** | Unterhaltungen (1:1 / Gruppe), Ordner/Projekte, specialist Oos |
| **One language** | Same stage, sound, and transcript grammar everywhere — no one-off chrome |
| **Hide power** | Depth in specialists and settings — not every control on first screen |
| **Cut clutter** | Fewer, stronger affordances; stub/TODO lists stay in docs, not UI |
When a slice gets feature-heavy: prune to the simplest coherent path that still delivers Stage + sound + calm onboarding.
## Conversations, not agent rows
The product is organized as **Unterhaltungen** (see `VOICE.md`). **Team** lists your Oos; opening one starts a **conversation**, not “the agent app”.
| Type | Who |
|------|-----|
| 1:1 Unterhaltung | One Oo |
| Gruppenunterhaltung | Multiple Oos (+ humans later) — **fun factor essential** (see `docs/GROUP-CONVERSATIONS.md`) |
| Projekte | Group conversations in **Ordner** (`BotSection` folders) |
## Deepest personalization
evOo must adapt to each user **more individually than any other app**. Persona/crew fit is **lifestyle-agnostic** — office worker, club/scene person, hardcore nerd: same mechanism, simplest path to what *they* want.
| Companion tone | When |
|----------------|------|
| **Geek-peer / Fachsimpeln** | User wants depth — match enthusiasm, stay in lane |
| **Quiet-doer** | User wants outcomes — never act like we know better |
Onboarding harvest infers **help & vibe** (`user-help-vibe.ts` → `MEMORY.md`), then spawn/select specialist Oos and Unterhaltungen — **not one personality for everyone**. See `docs/PERSONA-SELECTION.md`.
## Accessibility of ambition
Power-user literacy must **not** be required. Same product, radically different crews/Unterhaltungen — **domain excellence** in each case.
| User | Gets |
|------|------|
| Mom, Thermomix | That — simply, excellently |
| Hard math | Specialist Oo at **very high** level |
| Software development | Specialist Oo at **very high** level |
| Axis | Rule |
|------|------|
| **Skill floor** | Grandma-simple entry — no jargon gate, no setup maze |
| **Skill ceiling** | Expert-grade **per specialty** — depth when wanted |
| **Anti-pattern** | Wunderwuzzi mediocre at everything |
Simple entry, deep ceiling. UI and onboarding copy stay calm and plain; specialist lanes carry the depth.
## Emergent ensemble
**Das Ganze ist mehr als die Summe seiner Teile.**
Power comes from **more individualists and differences** — a crew of distinct specialists with chemistry — not from one mega-agent. Capability **emerges** when diverse Oos meet in Unterhaltungen and Gruppen.
| Pillar | Why |
|--------|-----|
| **No Wunderwuzzi** | Depth per lane beats one mediocre generalist |
| **Specialty ceiling** | Each Oo expert-grade in its domain |
| **Fun friction** | Banter and pushback between personalities — useful spark |
| **Ensemble > solo** | Group stage + handoffs make the *crew* feel stronger than any single Oo |
Chief coordinates; **the crew delivers**. Product, prompts, and stage should never imply one bot could replace the group.
## No Wunderwuzzi
Every Oo has a **clear specialty**. There is no do-everything generalist personality.
- Persona archetypes map to templates (CTO, Fixer, quant, engineer, …).
- Unmatched bots fall back to **`specialist`**, not “companion/helper”.
- **Chief** (first onboarding bot) is seeded as **Chief of Staff** — coordinates the crew, does not replace specialists.
- Group encounters show **active speaker + ensemble**; collaboration is the model — **banter & chemistry**, not corporate-dull committee.
When adding templates or copy: narrow scope, explicit role line, defer out-of-lane work to other Oos.
## First-run emotional north star
The app **sets itself up**. It discovers what it can (profile, tools, crew) and shows the user:
> *Don't stress. We're here now. Trust us — there are many of us. We've got this.*
| Principle | Product |
|-----------|---------|
| **Calm collective crew** | Reassurance copy + discovery progress (`OnboardingDiscoveryShell`), not a long wizard |
| **Honest discovery** | Progress bar + one active step in onboarding — future sources stay in docs, not UI laundry lists |
| **Specialists** | Chief of Staff + crew framing; no Wunderwuzzi |
Surfaces: `Welcome.tsx` (spirit), `Onboarding.tsx` (progress + minimal model/tools steps).
## Onboarding → user profile
During onboarding, harvest **respectful local signals** into the existing **user-scoped `MEMORY.md`** (space memory — not a parallel brain):
| Signal | Source |
|--------|--------|
| Name, email | `rpc.me()` |
| Timezone | `Intl` / `localTimezone()` |
| Locale, UI locale | `navigator.language`, saved UI pref |
| Languages, platform | `navigator` |
| Default model, computer host | bootstrap `Me` |
Implementation:
| Layer | Path |
|-------|------|
| Profile harvest | `apps/web/src/lib/user-profile-harvest.ts` |
| Help & vibe inference | `apps/web/src/lib/user-help-vibe.ts` |
| Persona/crew selection notes | `docs/PERSONA-SELECTION.md` |
| Discovery plan + progress | `apps/web/src/lib/onboarding-discovery.ts` |
| Reassurance UI | `apps/web/src/components/onboarding/OnboardingDiscoveryShell.tsx` |
Called from `Onboarding.tsx` after first bot ensure.
## Oo relationship over time
| Principle | Meaning |
|-----------|---------|
| **Always on** | Presence when needed — 24/7 feeling without theater |
| **Compounding** | Stronger/more attuned the more the user works with their Oos (memory + threads) |
| **Never creepy** | Warm competence; no surveillance vibes |
| **Not yes-men** | Respectful pushback — don't just echo |
Seeded in user `MEMORY.md` (`user-relationship-contract.ts`). Persona copy and prompts follow. Details: `docs/OO-RELATIONSHIP.md`.
## Capability vision — ambient & video (future roadmap)
**This PR does not build surveillance.** Current Gesamterfahrung stays **Stage + sound + calm onboarding** (`VOICE.md`). The following is Ingo's long-term direction — optional layers only.
| Capability | Rule |
|------------|------|
| **Video calls** | Optional — user-initiated; audio-only remains the simpler default |
| **Ambient help** | Oo handles practical presence in the background; user need not sit in front of the app |
| **"It's just an Oo"** | Presence without performative attention-seeking — compounding via use, not constant face time |
| **Home metaphors (far future)** | Could replace alarm system or surveillance camera **only** with strict opt-in — never creepy, never default-on |
### Consent & anti-creep gates
- No always-on camera/mic without **explicit, revocable consent UX**
- Any sensing feature must pass *earned or creepy?* (`docs/OO-RELATIONSHIP.md`)
- Specialist lanes for home/security — not one mega-agent watching everything
- Respectful pushback when a setup would be over-broad or unsafe
Details and encounter grammar: `VOICE.md` § Ambient & video presence.
### TODO (future passes)
- Merge focus choice from `onboarding.chooseFocus` into help/vibe (`mergeHelpVibeHints` — mapping exists, wire on answer)
- Merge connector authorizations into profile
- Wire **projects-on-disk** / **habits-routines** / **pain-points** discovery sources (currently shown as planned stubs)
- Suggested Unterhaltungen + specialist Oos + project folders from discovery results
- Optional explicit name confirmation step in onboarding UI