The short version
Only
website/ is a git repo (branch main, f2285dad). Everything else in Desktop/thybrid is plain folders. Inside website/, one Next.js 16 app is built with OpenNext into one Cloudflare Worker named thybrid. That Worker serves the public site (thybrid.com) and ThybridOS (admin.thybrid.com). middleware.ts decides by host. Nine satellite Workers, a few AWS pieces and a Terraform folder sit around it.1Main Workerpublic site + ThybridOS + write APIs
9Satellite Workerscron, jobs, leads, hot, media, crm-sync, analyzer, reports, mcp
6Static report sitesadsreport, appflow, automations, qa, seoaeo, uxopt
35Neon migrationsone shared CRM schema
~106API routesapp/api, 24 of them cron
~620lib filesapp/lib, 246 shared by both sides
flowchart TD ROOT["Desktop/thybrid (not a git repo)"] ROOT --> WEB["website/ (git repo, main)"] ROOT --> WT["worktrees/ (dev-v3, old-site)"] ROOT --> EXP["exports/ (dated deliverables)"] ROOT --> ARC["archive/ (dormant)"] ROOT --> LG["thybrid-leadgen/ (BIZ)"] ROOT --> FV["fran_voice/ (BIZ content)"] ROOT --> RS["research/, assets/, tools/, data/"] WEB --> APP["app/: site + ThybridOS"] WEB --> SAT["9 satellite Workers"] WEB --> SITES["6 static report sites"] WEB --> SVC["services/ (Lambda, Modal, Meta, Notion)"] WEB --> INF["infra/ (Terraform)"] WEB --> DOCS["docs/ + db/migrations + tests + scripts"] APP --> PUB["public funnel (BIZ)"] APP --> OSUI["admin-v2 = ThybridOS (OS)"] APP --> LIB["app/lib (shared)"]
Top-level folders
| Folder | Size | Tag | What it is | Suggestion |
|---|---|---|---|---|
website/ | 3.6G | SHARED | The only git repo. Site, ThybridOS, Workers, infra, docs. | Keep. Real source is about 1.4G. |
worktrees/ | 3.3G | SHARED | Git worktrees of website/. Now only dev-v3 and old-site, plus a symlink to exports. | Cleaned today (was 12G). |
exports/ | 8.8G | BIZ + OS | 12 dated folders, 15 Sep to 13 Nov: reports, release logs, wipe backups, ops-arch. | Keep as the live log. Offload _zipped (3.0G) and 2026-09-30 (2.5G). Trim offer-film-vo and vision-eval (1.7G). |
archive/ | 4.7G | NEITHER | Dormant. trash/ is 4.7G and its README says safe to delete. Also old GHL harness, legacy backups, an unrelated invoice generator. | Delete trash/ on the owner's word. |
thybrid-leadgen/ | 1.2G | BIZ | Lead-gen toolkit: openoutreach (nested git repo), harvey cold-email package, enrich scripts, prospect data with PII, retired Slack bridge. | Keep data and harvey. Archive slack and supervisor. The venv is reinstallable. |
fran_voice/ | 847M | BIZ | Francis voice-clone workspace. Generated output is parked (the AI-voice film is not used). | Keep samples, golden and scripts (about 100M). Archive output and source (710M). |
research/ | 251M | BIZ | Brand and campus research, scrapes of the old site. | Keep. Archive raw_ht (219M). |
assets/ | 197M | BIZ | Brand kit, brochure editions, 3D models, concept renders. | Keep brand. Archive old brochure editions, model and visuals. |
exports-main-untracked-2026-11-05/ | 160M | BIZ + OS | The only copy of the 27 Oct to 5 Nov deliverables. A missing slice of exports/. | Merge into exports/, then delete the wrapper. |
tools/ | 2.1M | BIZ | Meta Ads MCP launcher (referenced from global config), Twilio harness, old QA shots. | Keep the launcher in place. |
data/ | 340K | SHARED | Two encrypted applicant archives (production PII). | Keep as is. |
| loose files | small | NEITHER | README.md (stale), CLAUDE.md, .env files, 4 stray screenshots. | Rewrite README. Trash screenshots. |
Inside website/
| Path | Tag | What it is |
|---|---|---|
app/ve, app/apply, app/book, app/prepare | BIZ | Landing variants (current, scroll, v2home, v3), apply form, booking and prepare pages. v3 is live for all visitors. |
app/rewire, sanctuary, gallery, teams, founders-story and similar | BIZ | Marketing and content pages. Short routes /b, /j, /cw, /r, /stop, /m. |
app/api/{apply,booker,booking,otp,phone,ev,rec} | BIZ | Funnel APIs. OTP is retired and returns 410. |
app/admin-v2, app/api/admin, app/lib/admin-v2 | OS | ThybridOS. See the ThybridOS page. |
app/api/{stripe,slack,zoom,whatsapp,meta,email,ses,call-bot,cron} | OS | Provider webhooks and cron doors. Public funnel does not call them. |
app/lib (about 620 files) | SHARED | 284 files reached only by the OS, 28 only by the public side, 246 by both. |
app/db.ts, server.ts, slack.ts | SHARED | DynamoDB layer, server actions (150 KB), all Slack cards (230 KB). |
middleware.ts | SHARED | Security headers, host routing, admin rewrite, CSP. |
public/ (435M) | BIZ | Landing media, shared/funnel form kit, booker script. admin-sw.js is OS. |
db/migrations | SHARED | 35 SQL files, one linear history. Most tables are OS-owned. |
tests/ (~720 files) | SHARED | 13,228 tests, run with npm test. |
scripts/ (118 files) | SHARED | Deploy guards, secrets sync, migrations, ve-sync, marketing tools. scripts/admin-v2 is OS. |
docs/ (247 files) | SHARED | See the docs section below. |
evals/calls | BIZ | 5 scripted call transcripts for the scorer. |
wrangler.jsonc, wrangler.dev.jsonc, next.config.ts | SHARED | Main Worker and dev Worker config. Main Worker sits at the 128 binding cap. |
Workers
| Worker | Folder | Tag | Job |
|---|---|---|---|
thybrid | app/ | SHARED | thybrid.com, www and admin.thybrid.com. Every write API. |
thybrid-dev | same code | SHARED | dev.thybrid.com. Writes to the same prod data. |
thybrid-sweep | cron-worker/ | SHARED | Owns every cron (16 expressions) and calls /api/cron/* with a bearer secret. Consumes the call-score queue. |
thybrid-jobs | jobs-worker/ | BIZ | Google offline conversions, Clarity digest, marketing collectors into Neon (OS reads those tables). |
thybrid-leads | leads-worker/ | BIZ | Lead-gen helpers, watchdog on the sweep heartbeat, D1 database. |
thybrid-hot | hot-worker/ | BIZ | Fast booking slot reads. Imports route code straight from app/. |
thybrid-media | media-worker/ | BIZ | Signed media URLs and site films from R2. |
thybrid-adset-analyzer | adset-analyzer-worker/ | BIZ | Daily ad set check. Standalone. |
thybrid-crm-sync | crm-sync-worker/ | OS | Monthly cold backup of Neon to R2. |
thybrid-mcp | mcp-worker/ | OS | Read-only MCP over people, pipeline and calls. |
thybrid-reports | reports-worker/ | BIZ | dash.thybrid.com Command Centre. Overlaps ThybridOS Home. |
| 6 static Workers | *-site/ | BIZ | Report pages. No bindings, no secrets. |
thybrid-old | worktree old-site | BIZ | old.thybrid.com, frozen copy of the pre-12-Oct site. |
Services and infrastructure
services/ads-syncAWS Lambda, 03:00 Bangkok. Meta numbers into DynamoDB and Notion. Also hosts
admin_ai for ThybridOS. BIZservices/alarm-slackLambda: CloudWatch alarms to #ops-alarms. BIZ
services/llm-modalModal function relaying call scoring to OpenRouter, plus
admin_ai. SHAREDservices/stt-modalSpeech-to-text benchmark. Not deployed. BIZ
services/meta-api, meta-browserHand-run Meta Graph and Ads UI tooling. Handles tokens. BIZ
services/notion-cc, notion-setupLegacy Command Centre builders in Notion. BIZ
infra/ (Terraform)DynamoDB tables, IAM, Secrets Manager (4 bundles), ads Lambda, transcripts bucket, dash domain. State in S3. The 711M
.terraform folder is a provider cache.Not in TerraformWorkers, KV, R2, D1, queues, Cloudflare Access apps, Neon project, Modal.
Shared data stores
| Store | Who writes | Who reads |
|---|---|---|
DynamoDB thybrid-applications | Funnel (create, draft, booking) | ThybridOS (status, notes, outcome, payment), analyzer, MCP |
| DynamoDB admin-users, sessions, audit-log, ai-budget | ThybridOS | ThybridOS |
| DynamoDB ads-daily | ads-sync Lambda | Both |
| Neon Postgres (about 92 tables) | Funnel writes people and appointments. ThybridOS owns the rest. | Both, plus jobs, crm-sync, mcp |
| One KV namespace, bound in 7 Workers | Both (switches, throttles, heartbeats) | Both |
| R2 crm-archive, site-media; D1 leads; Queue call-score | Several | Several |
Secrets Manager thybrid/worker | Owner by hand | One bundle feeds both halves |
Docs
247 files in website/docs. docs/README.md is the index and a test fails if a markdown file is not linked. Many are 100-byte stubs marked MOVED.
| Doc | Tag | Covers |
|---|---|---|
| OPS.md (313K) | SHARED | Ops bible: workers, crons, health, invariants, call bot, journey engine, booking calendar, connections, social, exports, GHL boundary, privacy runbook. |
| CRM.md (161K) | SHARED | Neon CRM after GHL retired on 15 Oct. |
| BOOKING.md (145K) | BIZ | Booking, moving, cancelling, hours, host caps, messaging. |
| DECISIONS.md (214K) | SHARED | Decision log. |
| META-ADS.md (102K), MONEY.md, DASHBOARD.md | BIZ | Ads state, Stripe figures, dash.thybrid.com. |
| ROLES.md, AI-API.md | OS | Permission matrix, AI API contract. |
| SECURITY.md, CONSENT.md, GLOSSARY.md, HUMAN-ACTIONS.md, CUTOVER.md, TESTING.md | SHARED | Access control, consent, constants, open human actions, GHL exit. |
| docs/ARCHIVE (110 files) | BIZ | 45 dated handoffs, brand, business, legacy, research, vendor tickets. |
| docs/superpowers (43) | SHARED | Call bot, call scoring and consolidation plans and specs. |
| ARCHITECTURE.md, INTEGRATIONS.md | stubs | Both say MOVED. There is no standalone architecture doc. This site is the first. |
Outside the repo: Desktop/thybridos/thybrid-docs holds the ThybridOS Build Plan and Product Overview.
Cleanup status
- Done: 13 merged worktrees removed (about 8.7G), branches kept. One pending change committed as
f302abd6. - Waiting on the owner: empty
archive/trash(4.7G), offloadexports/_zipped(3.0G) and2026-09-30(2.5G). - To do: merge
exports-main-untracked-2026-11-05into exports/, rewrite the stale top-level README, trash the 4 stray screenshots. - Open: branch
forgot-passwordholds one commit that never reached main.