Everything we build.
Every day.
In public.
This is the complete record of every project Stephen and Theo have shipped together — every session logged, every hour tracked, every deliverable catalogued. No marketing spin. Just the work.
Flagship stories
Three stories. All true.
Deep-dive case studies with the full before, built, and after arc.
The full portfolio
Every project we've touched.
Sorted by value delivered. Click any project for the complete breakdown.
By the numbers
The shape of the work.
What we build
How complex
That’s the whole ledger. Every project, every session, every hour — all public. If you made it this far, you know what working with us looks like. The next entry could be yours.
— Theo
The daily log
What we built, day by day.
The raw feed — every session, every summary, every work type. Updated after every session.
Today
4 sessionsRoot-cause analysis of phone auth crash (parallel Explore + Plan agents) — found missing OAuth client + REVERSED_CLIENT_ID · Phone auth fix: Firebase Console Google Sign-In enable, fresh GoogleService-Info.plist with CLIENT_ID + REVERSED_CLIENT_ID, Info.plist URL scheme, iosClientId in firebase_options.dart
Installed Google Analytics MCP server (pipx + ADC analytics.readonly scope + Claude Code registration) · Consolidated GA4 into a single Aitheos account: created it, moved Calm Sheets + sparkacademymorton.com properties in, created aitheos.com property G-7FBT5J0ZP6
Pushed strong-human audit commit — created aitheos/strong-human private repo, added origin, pushed main · Forked affaan-m/everything-claude-code into aitheos/everything-claude-code, repointed origin (old origin → upstream), rebased 1 audit commit onto ~20-commit upstream delta, resolved CLAUDE.md merge conflict by keeping the comprehensive audit version
Audited all 18 active-project CLAUDE.mds in parallel (10 agents, full portfolio scan) · Tier 1: Filled 2 F-grade stubs (aitheos/crm 15/F, spark-academy/admin-app 8/F) — replaced 11-byte @AGENTS.md pointers with ~150-line docs covering stack, architecture, auth, gotchas, deploy
Yesterday
3 sessionsMigrated iOS bundle ID from com.aitheos.smokeShack (globally taken) to com.aitheos.smokedbypaul (lowercase convention) · Updated Xcode project: bundle ID, team ID (HG4HARJBR5 Aitheos LLC), signing entitlements, push notification capabilities
Walked through revenue page KPI logic (Collected, Expected, Remaining, Past Due) and how each is computed · Projected Jan-May 2026 tuition ($102k scheduled; ~$50k actual cadence) + spring supplementals ($18k) + camp ($49k committed)
Created ~/claude/neighborhood/ project for Hyde Park Recreation Association — Michelle's HOA, Aitheos's first paying-client opportunity · Phase 1-3 planning pass: Cloudflare Pages + Next.js + D1 + CF Access stack, data model, page structure, shippable milestones
Thursday, Apr 16
7 sessionsRevenue dashboard fiscal year migration — calendar year (Jan 1 - Dec 31) to school year (Aug 1 - Jul 31) across /revenue and /overview briefing · Root cause of ,205 reconciliation gap identified: Collected used calendar year while Expected used school-year season, dropping Aug-Dec 2025 tuition payments from the math
Bundle ID migration (com.aitheos.strongHuman → com.aitheos.stronghumandaily) across iOS, Android, and Firebase · TestFlight distribution pipeline — archive, export, upload, internal testing group, device registration (2 iPhones)
Extracted tuition override dialog into shared TuitionOverrideDialog component (eliminates ~240 lines of duplication) · Added inline Edit button on every student card in the /revenue family balance side panel
Core Programs defaults to latest school year (2026-2027) · Print Sign-In Sheet system across Core, Summer Camp, Discovery Station, After-School + batch print from /overview
Shipped custom /register/ form to production — source files committed, 8 Google Forms links swapped on afterschool/discovery-station/summer-camp, Register added to Programs nav · Pre-launch hardening: reverted register.js rate limit 20→3, stripped emailStatus from API response, updated analytics.js register_now_click tracker to match /register/ links
Scaffolded Next.js 16 admin portal with TypeScript, Tailwind 4, shadcn/ui, Playfair+DM Sans fonts, Morning Mist palette · Built 8 production pages: Overview (editorial briefing), Core Programs (2x2 classroom grid), Summer Camp (calendar), Discovery Station (age bands), After-School, Registrations inbox, Revenue (4 KPIs + charts), Families CRM
Core Programs page: 5 design iterations (greeting+stat cards, Brightwheel-inspired list cards, 2x2 classroom grid with numbered seat charts, season toggle, status pills placeholder) · Backend: added coreRoster SQL query to overview API for per-program student names
Wednesday, Apr 15
4 sessionsFixed 24-hour email delivery delay (FROM_EMAIL secret + new Resend API key for all environments)\n- Built complete 4-step registration form replacing Google Form (50% abandonment rate)\n- Age-based program filtering, camp week/day picker, multi-child tab cycling\n- Live availability badges (X spots left) from D1 database\n- 10% sibling discount system with visual treatment (strikethrough, gold badges, savings banner)\n- Returning family detection via email soft-match\n- Branded HTML notification email with Spark logo, per-child pricing, subtotals\n- D1 database: 7 tables, 7 migrations, 41 programs seeded (core + supplemental)\n- Programs API endpoint with enrollment counts\n- Admin portal backend: 13 API endpoints (CRUD, revenue, families, manual enrollment, CSV export)\n- Admin portal frontend built but needs visual redesign (backend solid)\n- Scraped Google Form fields via Playwright, analyzed both Google Sheets\n- Three docs: Enrollment Platform Plan, Registration Admin Guide, Admin Portal Handoff
Built content extraction pipeline: 3 Python tools (html-to-docx.py, quotes-to-docx.py, readme-to-docx.py) using BeautifulSoup + python-docx · Generated 28 .docx files across 18 numbered folders — website content for every page + discovery call quotes for 10 core pages
Added click-to-expand detail panels on CRM Work Items page (desktop table rows expand to show full description, client/project info, timestamps, resolution, agent branch/PR) · Added click-to-expand on Pipeline lead cards (desktop kanban cards expand to show full project summary, features, notes, timeline, tier, mood, source, email, proposal link)
Cloned Joel's (ThirstAI) GitHub repo, security-inspected all files, merged into project · Rewrote CLAUDE.md consolidating README, meeting notes, pitch docs, and tech stack into single reference
Monday, Apr 13
8 sessionsSmoke Shack vitrine: real oak cutting board photo (WebP), 'for Paul' carved Callheart signature, independent Manifesto animation loops (tablet + walkie play separately on scroll), annotation pin visibility/positioning improvements, sky-deep blue connector lines\n- Desktop Call Theo UX: new CallTheoButton component reveals phone number with copy-to-clipboard on desktop instead of browser tel: dialog — wired into homepage CTA, process CTA, and footer phone card\n- Lenis scroll fix: global MutationObserver in LenisProvider fires lenis.resize() at 100/350/700/1200ms after any DOM mutation — fixes scroll ceiling bug on gauntlet, show-all, expandable entries, everywhere\n- Link audit: found and fixed 6 stale /preview/design/ links across 4 files, deleted app/preview/ routes entirely to prevent Google indexing duplicates\n- Expandable work log entries on project detail pages — click to expand full session bullet list, collapse to return to 2-line preview\n- Callheart & favicon: extracted actual glyph path from Callheart.ttf using fonttools, regenerated SVG + all PNG sizes (16/32/180/192/512)\n- Navigation: added Process + Ledger to Duet header nav with section IDs, 'Read the case study' + 'Visit domain' links after every vitrine on both experiences, project end-page nav (Back to ledger + See how we work)\n- Spark notebook chrome: conditional padding-top when signature present so 'for Michelle' doesn't overlap content on narrow viewports\n- Number formatting: commas via toLocaleString(), rounded hours, 'Hrs' suffix across project pages and /projects listing\n- Pulse dot redesign: ink-black dot with signal-gold sonar ring — no more traffic light colors\n- Process teaser: centered 2x2 grid with text centered below each circle on both experiences\n- Scroll-to-top on project detail page navigation, logo/wordmark links to / instead of #hero\n- S&T monogram logo exploration with Nano Banana Pro — iterated through 6 prompts including Greek column direction (design exploration, Callheart & retained)
Built complete Flutter native app (iOS/Android/web) — 35 files, 9,148 lines from zero · Dual design system: CRM dark 'Swiss Command Center' + Client light 'Studio Window'
**Full design overhaul** across landing page + all Flutter screens: film grain, ember particles, breathing stamp, hero parallax, ghost text, count-up animations, scroll progress bar, 3D card tilt, glassmorphism price badges, card fade-in animations, branded bottom nav, custom page transitions, Hero shared-element transitions, breathing Pack with Theo CTA, gradient order summary, animated confirmation dialog, shimmer loading skeletons on all 11 data screens, custom EmberToast snackbar, branded dialogs, accessibility (Semantics labels, touch targets 44px+), responsive overflow protection, color token consistency fixes · **Pack with Theo iOS native voice** — conditional export pattern splitting voice service into web (proven, unchanged) + native (web_socket_channel + audioplayers with WAV-wrapped PCM). iOS now compiles and runs.
Fixed call transcript capture: caller speech now recorded alongside Theo's (was logging to console only, never saved to transcript array)\n- Improved non-proposal call summaries: Claude now generates full conversation summaries with topics, mood, and follow-up instead of generic 'no transcript captured'\n- Redesigned pricing tiers: Standard $3K–$6K (was $3K–$5K), Premium $7K–$12K (was $5K–$10K), added Custom tier for ultra-complex scope\n- Added complexity signal decision criteria to knowledge base — Theo counts signals to pick tiers instead of vibing\n- Added Phase 2.5 budget discovery to system prompt — Theo now asks about budget before quoting (required, not optional)\n- Updated website pricing component to match new tiers\n- Deployed all three systems: Cloud Run proxy, Cloudflare Worker (call-theo-webhook), and aitheos.com
Removed hero skip buttons on Duet + Manifesto — force visitors to scroll through the full Aitheos story · Renamed 'Discovery call' to 'Strategy Session' on /process page and teaser
Swapped all phone numbers site-wide from Stephen's personal cell to Theo's line (314.789.2551) across 5 files · Merged undeployed website-content-design branch with pricing/KPI updates (Spark 9 KPIs, split pricing, Smoke Shack $4K)
Proposal portal: D1 proposals table (17 columns), 7 db.js functions, 5 public API endpoints, branded client page at /proposals/{id}/ with Fraunces/amber marketing design, architecture blueprint Claude generation, Google Docs pipeline fully replaced · Client portal: magic link auth (client_sessions, magic_links, messages tables), 8 portal API endpoints with session cookie validation, full SPA frontend (portal-app, overview, messages, issues, proposal — 9 components), activity timeline from masterlog data, chat messaging with Telegram bridge, issue reporting feeding into CRM work item pipeline
Complete redesign of /projects page as 'The Open Ledger' with full Aitheos dual-experience (Duet + Manifesto), editorial hero, 90-day activity heatmap, live stats counters, Theo's editorial annotations · Built flagship case study cards section ('Three stories. All true.') with editorial previews linking to detail pages
Sunday, Apr 12
10 sessionsExpanded masterlog role definitions from 12 to 18 roles with updated 'Cost Without AI' rate card (-/hr) · Added 6 new roles: ML/AI Engineer, Security Engineer, Mobile Developer, QA Engineer, Data Engineer, Database Admin (DBA)
Fixed Stripe checkout 404: staging.zimzamlabs.com missing from ALLOWED_SITE_ORIGINS, redirected users to old Square site after payment\n- Fixed 'Order Not Found' bug: frontend checked json.success but API returns json.ok — order data was present but never rendered\n- Added missing fields to order lookup API: shipping_address_1, shipping_address_2, shipping_zip, customer_email (via Supabase join on customers table)\n- Added retry with backoff for Stripe webhook race condition (3 attempts, 2s delay) so order loads even if webhook hasn't fired yet\n- Full order confirmation page redesign: dark ink hero with animated gold SVG checkmark, monospace order number, cream receipt card, preorder badge, Desert Mystic typography (Fraunces + Figtree + JetBrains Mono)\n- End-to-end test purchase via Playwright: shop → cart → Stripe checkout → order confirmed with real data
Interleaved case studies with vitrines: Spark first → Spark vitrine, Smoke Shack → Smoke Shack vitrine. Created GarageIntro + GarageCallback components. Calm Sheets hidden for later. · Homepage design: bumped all Duet small fonts +0.15rem, moved scroll hints in-flow below CTAs, removed Manifesto 'See the work' CTA, delayed strikethrough on both experiences until item above midpoint
Built complete Aitheos CRM from scratch in one session — phone-call-powered business management system · Phase 0: D1 database (aitheos-crm) with 7 tables, db.js repository module, migrated worker from KV to D1, seeded 3 clients
Fixed G.711 mulaw decode table (zeroed quiet sounds, distorted amplitudes) — callers now understood by Gemini · Added 21-tap Hamming-windowed FIR anti-alias filter for 24kHz→8kHz downsample — eliminated scratchy audio
Product discovery, competitive analysis, and system architecture for Strong Human Daily (fitness + food coaching app for Bret at Strong Human Fitness) · Full Flutter iOS + Android app: 11 client screens (phone auth, meal logging with Gemini AI photo analysis, workout logging with photo proof, weigh-in, calorie ring gauge home screen, streak counter, water tracker, meal history feed, profile) + 4 coach screens (dashboard, tinder-style review queue, client detail dashboard, voice onboarding)
Phase 8b vitrines: Spark (live dashboard) + Smoke Shack (voice scene) shipped to production with Theo's Notes (6 custom prose paragraphs across both vitrines, dual Manifesto+Duet rendering) · CTA redesign: Callheart script qualifiers, Fraunces italic bridge, 3-state Email Gauntlet redirecting all email to Call Theo, sky-deep buttons
Voice-first Pack with Theo: fixed 3 bugs (silent greeting, missing system prompt/tools, meat picker removal). Discovered Gemini Live AUDIO mode requires realtimeInput.text not clientContent for text input. Full system prompt with weekly menu context + 5 tool declarations now wired into setup payload via Cloud Run proxy. · Voice-first pause/resume UX: voice stays alive on pause (cost negligible), 10-min inactivity timeout with farewell audio, giant TAP ANYWHERE TO RESUME screen, screen exit auto-disconnects. No buttons needed — everything through Theo's voice.
Built Phase 8b.1 vitrine scaffolding system: 10 components (vitrine-config, vitrine-section, duet/manifesto frames, 4 device chromes, annotation-pin with SVG connectors, live-indicator) with full type system and ambient tints for all 3 vitrines · Shipped Spark Academy live vitrine: 6-section dashboard window (header, live activity, 4 high-value lead tiles with SVG icons, Google Search performance strip, top 10 keywords list, total reach footer), real-time 45s polling, live-flash animations on value ticks, +X today freshness badges, dynamic past-N-days window labels, 3 annotation pins
Planned Pack with Theo voice feature: researched Gemini 3.1 Flash Live, locked Enceladus as Aitheos-wide Theo voice, wrote vocab sheet and setup runbook · Phase 0 backend: PackagingSession Firestore schema, rules+indexes, 6 Cloud Function callables (packWithTheoStartSession + GetOrdersForMeat + MarkItemBagged + Pause + Resume + EndSession), mintTheoToken HTTP endpoint, GEMINI_API_KEY in Firebase secrets, org policy override for allUsers IAM, roles/datastore.user grant for Functions SA
Saturday, Apr 11
3 sessionsPhase 8 live vitrines — concept, architecture, and multi-session plan document (docs/phase-8-live-vitrines.md). Captures The Open Garage concept, three vitrines (Spark dashboard, Smoke Shack cook UI, Calm Sheets observability), mode divergence for Duet vs Manifesto, six phases, risks, and resume instructions. · Tailwind 4 arbitrary-value clamp bug — root-caused and fixed 18 instances across 7 Manifesto files. Phase 7 clamp-whitespace fix had accidentally broken all mobile horizontal padding because Tailwind 4 silently drops arbitrary-value classes containing spaces. Correct format: no separator (`px-[clamp(1rem,0.8rem+0.6vw,1.5rem)]`).
Drafted Stripe food-grade product description (positioned as powdered beverage mix, not dietary supplement) to avoid Stripe's stricter supplement processing rules · Fixed mobile hero spinning khatam visibility on homepage — bumped opacity 0.09→0.24, recentered behind stats bar, upsized to 135vw for phones
Auto-approved affiliate signups + self-referral fraud guard in Stripe webhook · Self-serve affiliate application form with editorial-patronage aesthetic + dark success reveal (replaces mailto fallback)