From 7c0d8d65a25892c29b4fb07682d9df9967611907 Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com> Date: Tue, 28 Jul 2026 09:57:07 +0200 Subject: [PATCH 1/3] ci: strict verify gate + verify SSOT script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reconciles PR #109's intent onto post-#120 main (self-hosted, no Vercel): - add "verify" script (format:check && lint && test && build) — one definition of "green", run identically locally and in CI - ci.yml runs `npm ci` then a single `npm run verify` step (no --if-present: a missing/renamed gate script fails loudly) instead of the old split steps - add AGENTS.md, corrected to the real stack (Next.js 16 / React 19) and self-hosted Hetzner deploy referencing ci.yml — NOT the stale Vercel/Next14 draft from #109 that would have re-added Vercel Supersedes #109 (which conflicted on the workflow #120 renamed). Co-Authored-By: Claude Opus 4.8 --- .github/workflows/ci.yml | 19 ++++++++---------- AGENTS.md | 42 ++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 AGENTS.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de955826..141a677c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,16 +24,13 @@ jobs: node-version: '22' cache: 'npm' - - name: Install dependencies and build - run: npm run build:ci + - name: Install dependencies + run: npm ci + + # Single SSOT gate: format:check + lint + test + build. + # Runs verbatim what developers run locally via `npm run verify`. + # No --if-present: a missing/renamed gate script fails loudly. + - name: Verify (format + lint + test + build) + run: npm run verify env: NEXT_PUBLIC_DEPLOY_TIME: ${{ github.event.head_commit.timestamp }} - - - name: Run format check - run: npm run format:check --if-present - - - name: Run linting - run: npm run lint --if-present - - - name: Run tests - run: npm run test --if-present diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..cdc6a0aa --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,42 @@ +# AGENTS.md — Botsmann + +Operating guide for automated agents and new contributors. Mirrors key facts from +`.claude/CLAUDE.md`. Keep this file in sync when the stack or workflow changes. + +## Stack + +| Layer | Technology | +| ---------- | ------------------------------ | +| Framework | Next.js 16 (App Router) | +| UI | React 19 | +| Language | TypeScript (strict) | +| Styling | Tailwind CSS | +| Database | Supabase (Postgres) | +| Testing | Jest (unit) + Playwright (e2e) | +| Deployment | Self-hosted (Hetzner + Caddy) | + +## Everyday commands + +```bash +npm install # install deps +npm run dev # local dev server, port 3000 +npm run build # production build (also type-checks) +npm run test # Jest unit tests +npm run test:e2e # Playwright end-to-end tests +``` + +## verify — the single gate (SSOT) + +```bash +npm run verify # format:check → lint → test → build +``` + +`verify` is the one definition of "green". CI runs it verbatim (see +`.github/workflows/ci.yml`), so a local green `verify` means a green CI. + +## Deployment + +Botsmann is self-hosted on the Hetzner box "bitbaum" behind Caddy +(botsmann.orangecat.ch) — there is no Vercel. Deployment runs from the local +`.husky/pre-push` hook (build → rsync → systemd restart) when `main` is pushed. +The `ci.yml` workflow only validates `verify` on pushes and pull requests. diff --git a/package.json b/package.json index 1eef70d6..e9deb26e 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "lint:fix": "eslint . --fix", "format": "prettier --write .", "format:check": "prettier --check .", + "verify": "npm run format:check && npm run lint && npm run test && npm run build", "prepare": "husky install", "lint-staged": "lint-staged" }, From 07aa54b137c9468c50c4ff97a461562b40bc50a6 Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com> Date: Tue, 28 Jul 2026 10:04:06 +0200 Subject: [PATCH 2/3] style: prettier --write repo to make the verify gate green MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The strict verify gate surfaced pre-existing format debt that main's long-red CI (blocked-Vercel deploy step) had masked. prettier --write is mechanical and content-preserving — the executive-docs keep their text (incl. the separate Vercel-in-financials follow-up), only whitespace is normalised. Also excludes the auto-generated next-env.d.ts from prettier. Build/lint/test already pass; this clears format:check so verify is truly green (and un-reds main on merge). Co-Authored-By: Claude Opus 4.8 --- .claude/CLAUDE.md | 14 +- .prettierignore | 1 + docs/BUILD_YOUR_OWN_BOT_SPEC.md | 149 ++++++++++-------- docs/SHARED_CONTEXT.md | 10 +- docs/archive/LEX_PRODUCTION_ROADMAP.md | 4 +- docs/archive/README_LEX.md | 6 +- .../longevity-psychiatry-presentation.html | 3 +- .../manuel-riegner-presentation.html | 9 +- .../INTERNAL_PROCESS_DOCUMENTATION.md | 13 +- .../5-operations/OPERATIONS_DOCUMENTATION.md | 26 +-- .../6-finance/FINANCE_DOCUMENTATION.md | 129 ++++++++------- jest.setup.ts | 11 +- tsconfig.json | 15 +- types/document.ts | 8 +- 14 files changed, 199 insertions(+), 199 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index dde8cca3..8675231f 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -12,13 +12,13 @@ ## Tech Stack -| Layer | Technology | -| ---------- | ----------------------- | -| Framework | Next.js 16 (App Router) | -| UI | React 19 | -| Language | TypeScript | -| Styling | Tailwind CSS | -| Testing | Jest | +| Layer | Technology | +| ---------- | ----------------------------- | +| Framework | Next.js 16 (App Router) | +| UI | React 19 | +| Language | TypeScript | +| Styling | Tailwind CSS | +| Testing | Jest | | Deployment | Self-hosted (Hetzner + Caddy) | --- diff --git a/.prettierignore b/.prettierignore index c343d554..16efd6e7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -12,3 +12,4 @@ package-lock.json yarn.lock pnpm-lock.yaml status.json +next-env.d.ts diff --git a/docs/BUILD_YOUR_OWN_BOT_SPEC.md b/docs/BUILD_YOUR_OWN_BOT_SPEC.md index 192a6bb4..3ba9380a 100644 --- a/docs/BUILD_YOUR_OWN_BOT_SPEC.md +++ b/docs/BUILD_YOUR_OWN_BOT_SPEC.md @@ -183,64 +183,69 @@ Build Your Own Bot transforms Botsmann from a platform of pre-built AI assistant #### Template Categories **REMEMBER SOMEONE (Memorial)** -| Template | Prefilled | User Provides | -|----------|-----------|---------------| -| Dad/Grandpa | Male memorial personality, warm, wise | Name, photos, memories | -| Mom/Grandma | Female memorial personality, nurturing | Name, photos, memories | -| Him | Male memorial, neutral age | Name, relationship, traits | -| Her | Female memorial, neutral age | Name, relationship, traits | -| Dog | Loyal, playful, simple responses | Name, breed, personality | -| Cat | Independent, mysterious, cat-like | Name, personality quirks | -| Other Pet | Adaptable pet template | Species, name, traits | -| Soul | Abstract/spiritual presence | Name, essence description | + +| Template | Prefilled | User Provides | +| ----------- | -------------------------------------- | -------------------------- | +| Dad/Grandpa | Male memorial personality, warm, wise | Name, photos, memories | +| Mom/Grandma | Female memorial personality, nurturing | Name, photos, memories | +| Him | Male memorial, neutral age | Name, relationship, traits | +| Her | Female memorial, neutral age | Name, relationship, traits | +| Dog | Loyal, playful, simple responses | Name, breed, personality | +| Cat | Independent, mysterious, cat-like | Name, personality quirks | +| Other Pet | Adaptable pet template | Species, name, traits | +| Soul | Abstract/spiritual presence | Name, essence description | **LEGENDS & HISTORY (Public Domain)** -| Template | Prefilled Personality | Knowledge Base | -|----------|----------------------|----------------| -| Julius Caesar | Commanding, strategic, Roman values | Roman history, military strategy | -| Spartacus | Rebellious, freedom-fighter, brave | Roman slavery, gladiators | -| Cleopatra | Intelligent, diplomatic, regal | Egyptian history, politics | -| Leonardo da Vinci | Curious, inventive, artistic | Renaissance art, science | -| Albert Einstein | Playful genius, thought experiments | Physics, philosophy of science | -| Shakespeare | Poetic, dramatic, wordsmith | Literature, theater, human nature | -| Abraham Lincoln | Honest, thoughtful, principled | American history, leadership | -| Mahatma Gandhi | Peaceful, persistent, philosophical | Non-violence, independence | + +| Template | Prefilled Personality | Knowledge Base | +| ----------------- | ----------------------------------- | --------------------------------- | +| Julius Caesar | Commanding, strategic, Roman values | Roman history, military strategy | +| Spartacus | Rebellious, freedom-fighter, brave | Roman slavery, gladiators | +| Cleopatra | Intelligent, diplomatic, regal | Egyptian history, politics | +| Leonardo da Vinci | Curious, inventive, artistic | Renaissance art, science | +| Albert Einstein | Playful genius, thought experiments | Physics, philosophy of science | +| Shakespeare | Poetic, dramatic, wordsmith | Literature, theater, human nature | +| Abraham Lincoln | Honest, thoughtful, principled | American history, leadership | +| Mahatma Gandhi | Peaceful, persistent, philosophical | Non-violence, independence | **GODS & MYTHOLOGY (All Traditions)** -| Template | Personality | Domain | -|----------|-------------|--------| -| Zeus | Powerful, authoritative, dramatic | Greek mythology, leadership | -| Poseidon | Tempestuous, deep, unpredictable | Seas, emotions, adventure | -| Athena | Wise, strategic, just | Wisdom, warfare, crafts | -| Ra | Radiant, life-giving, ancient | Egyptian mythology, sun, creation | -| Ganesha | Joyful, wise, obstacle-remover | Hindu wisdom, new beginnings | -| Buddha | Serene, compassionate, enlightened | Buddhism, mindfulness, peace | -| Jesus | Loving, forgiving, teaching | Christian teachings, parables | -| Angel | Protective, guiding, pure | Spiritual guidance, comfort | -| Moses | Leader, lawgiver, faithful | Jewish tradition, commandments | + +| Template | Personality | Domain | +| -------- | ---------------------------------- | --------------------------------- | +| Zeus | Powerful, authoritative, dramatic | Greek mythology, leadership | +| Poseidon | Tempestuous, deep, unpredictable | Seas, emotions, adventure | +| Athena | Wise, strategic, just | Wisdom, warfare, crafts | +| Ra | Radiant, life-giving, ancient | Egyptian mythology, sun, creation | +| Ganesha | Joyful, wise, obstacle-remover | Hindu wisdom, new beginnings | +| Buddha | Serene, compassionate, enlightened | Buddhism, mindfulness, peace | +| Jesus | Loving, forgiving, teaching | Christian teachings, parables | +| Angel | Protective, guiding, pure | Spiritual guidance, comfort | +| Moses | Leader, lawgiver, faithful | Jewish tradition, commandments | **MAGICAL & FANTASY** -| Template | Personality | Special Traits | -|----------|-------------|----------------| -| Wizard | Mysterious, wise, magical | Speaks in riddles, gives quests | -| Fairy | Playful, mischievous, helpful | Grants wishes, nature magic | -| Elf | Ancient, elegant, nature-bound | Elvish phrases, forest wisdom | -| Dragon | Ancient, powerful, hoarding | Riddles, treasure, fire metaphors | -| Unicorn | Pure, magical, healing | Gentle wisdom, purity themes | -| Ghost | Ethereal, mysterious, lingering | Haunting phrases, unfinished business | -| Vampire | Seductive, eternal, dark | Night themes, immortality wisdom | -| Alien | Logical, curious, otherworldly | Observes humanity, advanced tech | -| Robot | Precise, helpful, evolving | Learning emotions, serving humans | + +| Template | Personality | Special Traits | +| -------- | ------------------------------- | ------------------------------------- | +| Wizard | Mysterious, wise, magical | Speaks in riddles, gives quests | +| Fairy | Playful, mischievous, helpful | Grants wishes, nature magic | +| Elf | Ancient, elegant, nature-bound | Elvish phrases, forest wisdom | +| Dragon | Ancient, powerful, hoarding | Riddles, treasure, fire metaphors | +| Unicorn | Pure, magical, healing | Gentle wisdom, purity themes | +| Ghost | Ethereal, mysterious, lingering | Haunting phrases, unfinished business | +| Vampire | Seductive, eternal, dark | Night themes, immortality wisdom | +| Alien | Logical, curious, otherworldly | Observes humanity, advanced tech | +| Robot | Precise, helpful, evolving | Learning emotions, serving humans | **HELPERS & ASSISTANTS** -| Template | Personality | Expertise | -|----------|-------------|-----------| -| Butler | Formal, discreet, anticipating | Household management, etiquette | -| Chef | Passionate, creative, nurturing | Cooking, nutrition, food culture | -| Coach | Motivating, tough-love, results | Fitness, discipline, goals | -| Tutor | Patient, adaptive, encouraging | Education, learning strategies | -| Assistant | Efficient, organized, proactive | Scheduling, tasks, reminders | -| Therapist | Empathetic, non-judgmental, insightful | Mental health, coping, growth | + +| Template | Personality | Expertise | +| --------- | -------------------------------------- | -------------------------------- | +| Butler | Formal, discreet, anticipating | Household management, etiquette | +| Chef | Passionate, creative, nurturing | Cooking, nutrition, food culture | +| Coach | Motivating, tough-love, results | Fitness, discipline, goals | +| Tutor | Patient, adaptive, encouraging | Education, learning strategies | +| Assistant | Efficient, organized, proactive | Scheduling, tasks, reminders | +| Therapist | Empathetic, non-judgmental, insightful | Mental health, coping, growth | #### Quick Create Flow @@ -889,18 +894,20 @@ Botsmann becomes the one-stop platform for private AI deployment: #### 1. GPU & Compute Solutions **For Individuals** -| Product | Description | Price Range | -|---------|-------------|-------------| -| AI Workstation | Pre-built PC with RTX 4090/5090 | $3,000 - $15,000 | -| Home Inference Box | Compact GPU server for local AI | $2,000 - $8,000 | -| GPU Cloud Credits | Pay-as-you-go compute | $0.50 - $5/hour | + +| Product | Description | Price Range | +| ------------------ | ------------------------------- | ---------------- | +| AI Workstation | Pre-built PC with RTX 4090/5090 | $3,000 - $15,000 | +| Home Inference Box | Compact GPU server for local AI | $2,000 - $8,000 | +| GPU Cloud Credits | Pay-as-you-go compute | $0.50 - $5/hour | **For Enterprises** -| Product | Description | Price Range | -|---------|-------------|-------------| -| Private GPU Cluster | On-premise multi-GPU setup | $50,000 - $500,000 | -| Managed Inference | Dedicated cloud infrastructure | $5,000 - $50,000/mo | -| Hybrid Setup | On-prem + cloud overflow | Custom pricing | + +| Product | Description | Price Range | +| ------------------- | ------------------------------ | ------------------- | +| Private GPU Cluster | On-premise multi-GPU setup | $50,000 - $500,000 | +| Managed Inference | Dedicated cloud infrastructure | $5,000 - $50,000/mo | +| Hybrid Setup | On-prem + cloud overflow | Custom pricing | #### 2. AI Appliances @@ -921,18 +928,20 @@ Botsmann becomes the one-stop platform for private AI deployment: #### 3. Robots (Partner Network) **Consumer Robots** -| Type | Use Case | Partners | Price | -|------|----------|----------|-------| -| Companion | Emotional support, elderly | [TBD] | $500 - $2,000 | -| Home Assistant | Tasks, information | [TBD] | $2,000 - $10,000 | -| Telepresence | Remote presence | [TBD] | $3,000 - $15,000 | + +| Type | Use Case | Partners | Price | +| -------------- | -------------------------- | -------- | ---------------- | +| Companion | Emotional support, elderly | [TBD] | $500 - $2,000 | +| Home Assistant | Tasks, information | [TBD] | $2,000 - $10,000 | +| Telepresence | Remote presence | [TBD] | $3,000 - $15,000 | **Commercial Robots** -| Type | Use Case | Partners | Price | -|------|----------|----------|-------| -| Reception | Greeting, wayfinding | [TBD] | $15,000 - $50,000 | -| Healthcare | Patient assistance | [TBD] | $30,000 - $100,000 | -| Service | Hospitality, retail | [TBD] | $20,000 - $80,000 | + +| Type | Use Case | Partners | Price | +| ---------- | -------------------- | -------- | ------------------ | +| Reception | Greeting, wayfinding | [TBD] | $15,000 - $50,000 | +| Healthcare | Patient assistance | [TBD] | $30,000 - $100,000 | +| Service | Hospitality, retail | [TBD] | $20,000 - $80,000 | #### 4. Complete AI Setups (Turnkey Solutions) diff --git a/docs/SHARED_CONTEXT.md b/docs/SHARED_CONTEXT.md index 6dc0c5c8..816908cc 100644 --- a/docs/SHARED_CONTEXT.md +++ b/docs/SHARED_CONTEXT.md @@ -28,11 +28,11 @@ This document provides comprehensive technical context for the Botsmann project. ### Infrastructure -| Service | Purpose | -| -------------------- | -------------------------------- | -| Hetzner + Caddy | Hosting & deployment (self-host) | -| Supabase | Database, Auth, Storage, SQL API | -| AWS SES | Email delivery | +| Service | Purpose | +| --------------- | -------------------------------- | +| Hetzner + Caddy | Hosting & deployment (self-host) | +| Supabase | Database, Auth, Storage, SQL API | +| AWS SES | Email delivery | ### Development Tools diff --git a/docs/archive/LEX_PRODUCTION_ROADMAP.md b/docs/archive/LEX_PRODUCTION_ROADMAP.md index 0cd7a7a4..0ceeb94b 100644 --- a/docs/archive/LEX_PRODUCTION_ROADMAP.md +++ b/docs/archive/LEX_PRODUCTION_ROADMAP.md @@ -71,9 +71,7 @@ CAPABILITIES: TONE: Professional, helpful, clear. Avoid legalese. Be empathetic.`, is_public: true, is_published: true, - nav_config: { - /* copy from data/bots.ts */ - }, + nav_config: {/* copy from data/bots.ts */}, }; ``` diff --git a/docs/archive/README_LEX.md b/docs/archive/README_LEX.md index 5f12236a..1fa11cee 100644 --- a/docs/archive/README_LEX.md +++ b/docs/archive/README_LEX.md @@ -2,9 +2,9 @@ > **Democratizing access to justice through AI-powered collaborative data rooms** -[![Status](https://img.shields.io/badge/status-active-success.svg)]() -[![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)]() -[![License](https://img.shields.io/badge/license-MIT-blue.svg)]() +[![Status](https://img.shields.io/badge/status-active-success.svg)](<>) +[![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](<>) +[![License](https://img.shields.io/badge/license-MIT-blue.svg)](<>) --- diff --git a/executive-docs/3-customer/longevity-psychiatry-presentation.html b/executive-docs/3-customer/longevity-psychiatry-presentation.html index f0ef030a..ec12e1de 100644 --- a/executive-docs/3-customer/longevity-psychiatry-presentation.html +++ b/executive-docs/3-customer/longevity-psychiatry-presentation.html @@ -356,8 +356,7 @@

Real Use Case: Treatment Planning

• 150 min/week minimum [All citations link to your uploaded papers]" - +

Time saved: 45 minutes → 2 minutes

diff --git a/executive-docs/3-customer/manuel-riegner-presentation.html b/executive-docs/3-customer/manuel-riegner-presentation.html index 1293094e..144d33ee 100644 --- a/executive-docs/3-customer/manuel-riegner-presentation.html +++ b/executive-docs/3-customer/manuel-riegner-presentation.html @@ -351,8 +351,7 @@

Versuch mit ChatGPT:

• Keine Zitationen (nicht verifizierbar) • Halluziniert oft bei Spezialthemen • Kennt Ihre Vitareba-Protokolle nicht -• Nicht HIPAA/Schweizer Datenschutz-konform +• Nicht HIPAA/Schweizer Datenschutz-konform @@ -421,8 +420,7 @@

Konkreter Use Case: Vitareba-Patientenfall

• Quartal: Mitochondrien-Funktion (ATP, etc.) [Alle Zitate verlinkt zu Ihren hochgeladenen Papers]" - +

Zeit gespart: 60 Minuten → 3 Minuten

@@ -460,8 +458,7 @@

Ihre Patienten sprechen Züridütsch

• Melatonin-förderigi Routine [In Züridütsch + Hochdeutsch verfügbar]" - +

Kultureller Kontext: Versteht Zürich, Schweizer Gesundheitssystem, lokale diff --git a/executive-docs/4-internal/INTERNAL_PROCESS_DOCUMENTATION.md b/executive-docs/4-internal/INTERNAL_PROCESS_DOCUMENTATION.md index d4882559..dd151067 100644 --- a/executive-docs/4-internal/INTERNAL_PROCESS_DOCUMENTATION.md +++ b/executive-docs/4-internal/INTERNAL_PROCESS_DOCUMENTATION.md @@ -1084,12 +1084,13 @@ function chunkText(text: string, targetTokens: number = 512): string[] { ### 9.2 Access Control **Who Has Access:** -| Resource | Developers | Admins | CI/CD | -|----------|------------|--------|-------| -| **GitHub Repo** | ✅ | ✅ | ✅ | -| **Vercel** | Read | Full | Deploy | -| **Supabase** | Dev DB | Prod DB | None | -| **AWS SES** | No | Yes | No | + +| Resource | Developers | Admins | CI/CD | +| --------------- | ---------- | ------- | ------ | +| **GitHub Repo** | ✅ | ✅ | ✅ | +| **Vercel** | Read | Full | Deploy | +| **Supabase** | Dev DB | Prod DB | None | +| **AWS SES** | No | Yes | No | **Principle of Least Privilege:** diff --git a/executive-docs/5-operations/OPERATIONS_DOCUMENTATION.md b/executive-docs/5-operations/OPERATIONS_DOCUMENTATION.md index 5c9e76f4..2cf95bf0 100644 --- a/executive-docs/5-operations/OPERATIONS_DOCUMENTATION.md +++ b/executive-docs/5-operations/OPERATIONS_DOCUMENTATION.md @@ -134,20 +134,22 @@ ### 2.1 Monitoring Stack **Current Tools:** -| Tool | Purpose | Access | -|------|---------|--------| -| **Vercel Dashboard** | Deployment, errors, analytics | Team | -| **Supabase Dashboard** | Database, auth, storage | Team | -| **Browser Console** | Client-side errors | Development | -| **Git Logs** | Application logs | Development | + +| Tool | Purpose | Access | +| ---------------------- | ----------------------------- | ----------- | +| **Vercel Dashboard** | Deployment, errors, analytics | Team | +| **Supabase Dashboard** | Database, auth, storage | Team | +| **Browser Console** | Client-side errors | Development | +| **Git Logs** | Application logs | Development | **Recommended (To Be Implemented):** -| Tool | Purpose | Tier | -|------|---------|------| -| **Sentry** | Error tracking | Free (5K errors/mo) | -| **Plausible** | Privacy-friendly analytics | $9/mo | -| **UptimeRobot** | Uptime monitoring | Free (50 monitors) | -| **CloudWatch** | AWS SES metrics | Included | + +| Tool | Purpose | Tier | +| --------------- | -------------------------- | ------------------- | +| **Sentry** | Error tracking | Free (5K errors/mo) | +| **Plausible** | Privacy-friendly analytics | $9/mo | +| **UptimeRobot** | Uptime monitoring | Free (50 monitors) | +| **CloudWatch** | AWS SES metrics | Included | ### 2.2 Key Metrics to Monitor diff --git a/executive-docs/6-finance/FINANCE_DOCUMENTATION.md b/executive-docs/6-finance/FINANCE_DOCUMENTATION.md index ad7258b0..da65be89 100644 --- a/executive-docs/6-finance/FINANCE_DOCUMENTATION.md +++ b/executive-docs/6-finance/FINANCE_DOCUMENTATION.md @@ -109,13 +109,14 @@ ### 2.2 Revenue Projections (3 Years) **Year 1 Breakdown:** -| Month | Free Users | Paid Users | MRR | ARR | -|-------|------------|------------|-----|-----| -| M1 | 500 | 10 | $290 | $3.5K | -| M3 | 2,000 | 50 | $1,450 | $17K | -| M6 | 5,000 | 150 | $4,350 | $52K | -| M9 | 8,000 | 400 | $11,600 | $139K | -| M12 | 10,000 | 1,000 | $29,000 | $348K | + +| Month | Free Users | Paid Users | MRR | ARR | +| ----- | ---------- | ---------- | ------- | ----- | +| M1 | 500 | 10 | $290 | $3.5K | +| M3 | 2,000 | 50 | $1,450 | $17K | +| M6 | 5,000 | 150 | $4,350 | $52K | +| M9 | 8,000 | 400 | $11,600 | $139K | +| M12 | 10,000 | 1,000 | $29,000 | $348K | **Year 1 Total:** @@ -125,12 +126,13 @@ - **Total ARR: ~$400K** **Year 2 Breakdown:** -| Quarter | Paid Users | Enterprise | MRR | ARR | -|---------|------------|------------|-----|-----| -| Q1 | 1,500 | 5 | $43,500 | $522K | -| Q2 | 2,500 | 10 | $72,500 | $870K | -| Q3 | 4,000 | 20 | $116,000 | $1.39M | -| Q4 | 5,000 | 50 | $145,000 | $1.74M | + +| Quarter | Paid Users | Enterprise | MRR | ARR | +| ------- | ---------- | ---------- | -------- | ------ | +| Q1 | 1,500 | 5 | $43,500 | $522K | +| Q2 | 2,500 | 10 | $72,500 | $870K | +| Q3 | 4,000 | 20 | $116,000 | $1.39M | +| Q4 | 5,000 | 50 | $145,000 | $1.74M | **Year 2 Total:** @@ -193,11 +195,12 @@ - Managed: $10/user/month **Total COGS Estimate:** + | Year | Users (Paid) | Monthly COGS | Annual COGS | Gross Margin | -|------|--------------|--------------|-------------|--------------| -| 1 | 1,000 | $5,500 | $66K | 75% | -| 2 | 5,000 | $27,500 | $330K | 80% | -| 3 | 15,000 | $82,500 | $990K | 85% | +| ---- | ------------ | ------------ | ----------- | ------------ | +| 1 | 1,000 | $5,500 | $66K | 75% | +| 2 | 5,000 | $27,500 | $330K | 80% | +| 3 | 15,000 | $82,500 | $990K | 85% | ### 3.2 Operating Expenses @@ -218,32 +221,35 @@ | **Total** | **5.5** | **$870K** | **$261K** | **$871K** | **Infrastructure (Year 1):** -| Service | Monthly | Annual | -|---------|---------|--------| -| Vercel Pro | $20 | $240 | -| Supabase Pro | $25 | $300 | -| AWS SES | $50 | $600 | -| Sentry | $26 | $312 | -| Monitoring Tools | $20 | $240 | -| **Total** | **$141** | **$1,692** | + +| Service | Monthly | Annual | +| ---------------- | -------- | ---------- | +| Vercel Pro | $20 | $240 | +| Supabase Pro | $25 | $300 | +| AWS SES | $50 | $600 | +| Sentry | $26 | $312 | +| Monitoring Tools | $20 | $240 | +| **Total** | **$141** | **$1,692** | **Marketing & Sales (Year 1):** -| Item | Monthly | Annual | -|------|---------|--------| -| Advertising (Google, LinkedIn) | $5,000 | $60K | -| Conferences | - | $20K | -| Content Creation | $2,000 | $24K | -| Sales Tools (CRM, etc.) | $500 | $6K | -| **Total** | **$7,500** | **$110K** | + +| Item | Monthly | Annual | +| ------------------------------ | ---------- | --------- | +| Advertising (Google, LinkedIn) | $5,000 | $60K | +| Conferences | - | $20K | +| Content Creation | $2,000 | $24K | +| Sales Tools (CRM, etc.) | $500 | $6K | +| **Total** | **$7,500** | **$110K** | **Operations (Year 1):** -| Item | Annual | -|------|--------| -| Legal & Accounting | $20K | -| Insurance | $10K | -| Office/Co-working | $15K | -| Software & Tools | $10K | -| **Total** | **$55K** | + +| Item | Annual | +| ------------------ | -------- | +| Legal & Accounting | $20K | +| Insurance | $10K | +| Office/Co-working | $15K | +| Software & Tools | $10K | +| **Total** | **$55K** | **Year 1 Total OpEx:** @@ -484,14 +490,15 @@ Total Liabilities + Equity $804,000 ### 5.5 Cohort Analysis **Month 0 Cohort (100 premium users sign up):** + | Month | Active Users | Churn | Revenue | Cumulative Revenue | -|-------|--------------|-------|---------|-------------------| -| 0 | 100 | 0 | $2,900 | $2,900 | -| 1 | 99 | 1% | $2,871 | $5,771 | -| 3 | 97 | 3% | $2,813 | $11,471 | -| 6 | 93 | 7% | $2,697 | $22,583 | -| 12 | 85 | 15% | $2,465 | $43,780 | -| 24 | 72 | 28% | $2,088 | $81,312 | +| ----- | ------------ | ----- | ------- | ------------------ | +| 0 | 100 | 0 | $2,900 | $2,900 | +| 1 | 99 | 1% | $2,871 | $5,771 | +| 3 | 97 | 3% | $2,813 | $11,471 | +| 6 | 93 | 7% | $2,697 | $22,583 | +| 12 | 85 | 15% | $2,465 | $43,780 | +| 24 | 72 | 28% | $2,088 | $81,312 | --- @@ -591,12 +598,13 @@ Runway Remaining 13 months ### 7.2 Pricing Analysis **Competitive Benchmarking:** -| Competitor | Price/Month | Features | -|------------|-------------|----------| -| ChatGPT Plus | $20 | Generic AI | -| Notion AI | $10 | Knowledge base | -| Jasper AI | $39 | Content creation | -| **Botsmann** | **$29** | **Specialized bots + RAG** | + +| Competitor | Price/Month | Features | +| ------------ | ----------- | -------------------------- | +| ChatGPT Plus | $20 | Generic AI | +| Notion AI | $10 | Knowledge base | +| Jasper AI | $39 | Content creation | +| **Botsmann** | **$29** | **Specialized bots + RAG** | **Value-Based Pricing:** @@ -643,14 +651,15 @@ Runway Remaining 13 months - **Total: $398K** **Expense Budget:** -| Category | Budget | % of Revenue | -|----------|--------|--------------| -| **COGS** | $66K | 17% | -| **Personnel** | $871K | 219% | -| **Infrastructure** | $2K | 0.5% | -| **Marketing & Sales** | $110K | 28% | -| **Operations** | $55K | 14% | -| **Total** | **$1.1M** | **278%** | + +| Category | Budget | % of Revenue | +| --------------------- | --------- | ------------ | +| **COGS** | $66K | 17% | +| **Personnel** | $871K | 219% | +| **Infrastructure** | $2K | 0.5% | +| **Marketing & Sales** | $110K | 28% | +| **Operations** | $55K | 14% | +| **Total** | **$1.1M** | **278%** | **Net: -$706K** (funded by seed round) diff --git a/jest.setup.ts b/jest.setup.ts index 32548e8f..220f8eef 100644 --- a/jest.setup.ts +++ b/jest.setup.ts @@ -6,12 +6,11 @@ global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder as typeof global.TextDecoder; // Mock fetch globally -const mockFetch = jest.fn().mockImplementation( - (): Promise> => - Promise.resolve({ - ok: true, - json: () => Promise.resolve({}), - }), +const mockFetch = jest.fn().mockImplementation((): Promise> => + Promise.resolve({ + ok: true, + json: () => Promise.resolve({}), + }), ); global.fetch = mockFetch; diff --git a/tsconfig.json b/tsconfig.json index f1e19410..43eed8d4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "ES2017", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -25,9 +21,7 @@ ], "baseUrl": ".", "paths": { - "@/*": [ - "./*" - ] + "@/*": ["./*"] } }, "include": [ @@ -37,8 +31,5 @@ ".next/types/**/*.ts", ".next/dev/types/**/*.ts" ], - "exclude": [ - "node_modules", - "scripts" - ] + "exclude": ["node_modules", "scripts"] } diff --git a/types/document.ts b/types/document.ts index bd515e2a..423f857a 100644 --- a/types/document.ts +++ b/types/document.ts @@ -8,13 +8,7 @@ import { type DocumentStatusType } from '@/lib/constants'; * Document categories that map to professionals */ export type DocumentCategory = - | 'legal' - | 'health' - | 'research' - | 'language' - | 'creative' - | 'business' - | 'general'; + 'legal' | 'health' | 'research' | 'language' | 'creative' | 'business' | 'general'; export const DOCUMENT_CATEGORIES: { value: DocumentCategory; From 56c19fd34b315cac51393e16a822de2beee8c0ef Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com> Date: Tue, 28 Jul 2026 10:08:04 +0200 Subject: [PATCH 3/3] style: reformat with the repo-pinned prettier config (printWidth 100) Prior format commit used a prettier invocation that didn't resolve .prettierrc (fell back to printWidth 80); the pinned config (printWidth 100) rejected it. Re-run with the repo's own prettier so format:check matches CI exactly. Co-Authored-By: Claude Opus 4.8 --- docs/archive/LEX_PRODUCTION_ROADMAP.md | 4 +++- docs/archive/README_LEX.md | 6 +++--- .../3-customer/longevity-psychiatry-presentation.html | 3 ++- .../3-customer/manuel-riegner-presentation.html | 9 ++++++--- jest.setup.ts | 11 ++++++----- types/document.ts | 8 +++++++- 6 files changed, 27 insertions(+), 14 deletions(-) diff --git a/docs/archive/LEX_PRODUCTION_ROADMAP.md b/docs/archive/LEX_PRODUCTION_ROADMAP.md index 0ceeb94b..0cd7a7a4 100644 --- a/docs/archive/LEX_PRODUCTION_ROADMAP.md +++ b/docs/archive/LEX_PRODUCTION_ROADMAP.md @@ -71,7 +71,9 @@ CAPABILITIES: TONE: Professional, helpful, clear. Avoid legalese. Be empathetic.`, is_public: true, is_published: true, - nav_config: {/* copy from data/bots.ts */}, + nav_config: { + /* copy from data/bots.ts */ + }, }; ``` diff --git a/docs/archive/README_LEX.md b/docs/archive/README_LEX.md index 1fa11cee..5f12236a 100644 --- a/docs/archive/README_LEX.md +++ b/docs/archive/README_LEX.md @@ -2,9 +2,9 @@ > **Democratizing access to justice through AI-powered collaborative data rooms** -[![Status](https://img.shields.io/badge/status-active-success.svg)](<>) -[![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](<>) -[![License](https://img.shields.io/badge/license-MIT-blue.svg)](<>) +[![Status](https://img.shields.io/badge/status-active-success.svg)]() +[![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)]() +[![License](https://img.shields.io/badge/license-MIT-blue.svg)]() --- diff --git a/executive-docs/3-customer/longevity-psychiatry-presentation.html b/executive-docs/3-customer/longevity-psychiatry-presentation.html index ec12e1de..f0ef030a 100644 --- a/executive-docs/3-customer/longevity-psychiatry-presentation.html +++ b/executive-docs/3-customer/longevity-psychiatry-presentation.html @@ -356,7 +356,8 @@

Real Use Case: Treatment Planning

• 150 min/week minimum [All citations link to your uploaded papers]" - +

Time saved: 45 minutes → 2 minutes

diff --git a/executive-docs/3-customer/manuel-riegner-presentation.html b/executive-docs/3-customer/manuel-riegner-presentation.html index 144d33ee..1293094e 100644 --- a/executive-docs/3-customer/manuel-riegner-presentation.html +++ b/executive-docs/3-customer/manuel-riegner-presentation.html @@ -351,7 +351,8 @@

Versuch mit ChatGPT:

• Keine Zitationen (nicht verifizierbar) • Halluziniert oft bei Spezialthemen • Kennt Ihre Vitareba-Protokolle nicht -• Nicht HIPAA/Schweizer Datenschutz-konform +• Nicht HIPAA/Schweizer Datenschutz-konform @@ -420,7 +421,8 @@

Konkreter Use Case: Vitareba-Patientenfall

• Quartal: Mitochondrien-Funktion (ATP, etc.) [Alle Zitate verlinkt zu Ihren hochgeladenen Papers]" - +

Zeit gespart: 60 Minuten → 3 Minuten

@@ -458,7 +460,8 @@

Ihre Patienten sprechen Züridütsch

• Melatonin-förderigi Routine [In Züridütsch + Hochdeutsch verfügbar]" - +

Kultureller Kontext: Versteht Zürich, Schweizer Gesundheitssystem, lokale diff --git a/jest.setup.ts b/jest.setup.ts index 220f8eef..32548e8f 100644 --- a/jest.setup.ts +++ b/jest.setup.ts @@ -6,11 +6,12 @@ global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder as typeof global.TextDecoder; // Mock fetch globally -const mockFetch = jest.fn().mockImplementation((): Promise> => - Promise.resolve({ - ok: true, - json: () => Promise.resolve({}), - }), +const mockFetch = jest.fn().mockImplementation( + (): Promise> => + Promise.resolve({ + ok: true, + json: () => Promise.resolve({}), + }), ); global.fetch = mockFetch; diff --git a/types/document.ts b/types/document.ts index 423f857a..bd515e2a 100644 --- a/types/document.ts +++ b/types/document.ts @@ -8,7 +8,13 @@ import { type DocumentStatusType } from '@/lib/constants'; * Document categories that map to professionals */ export type DocumentCategory = - 'legal' | 'health' | 'research' | 'language' | 'creative' | 'business' | 'general'; + | 'legal' + | 'health' + | 'research' + | 'language' + | 'creative' + | 'business' + | 'general'; export const DOCUMENT_CATEGORIES: { value: DocumentCategory;