byForja Tools · Infra tree

byForja Infra Tree 11-08-2026 — verified live

Drag the boxes to reorganise. Arrows stay connected. Positions are saved in your browser.

The two Cloudflare Pages projects are the core of the system (white outline): byforja serves the public site, byforja-tools serves this admin surface behind Cloudflare Access. Colours = category. Dashed lines = monitoring or indirect link.

Double-click a box to rename it. Use + Add independent node to drop in custom nodes, then drag them anywhere.

Drag-and-drop · double-click to edit
Storage Auth Network Email Booking Automation Operator Business tooling (not wired) Independent

The 8 branches of the trunk

Each branch groups services by function. The trunk is the pair of Cloudflare Pages projects. Both projects read and write the same D1 database, which is why a schema change is never a single-repo decision.

Storage branch

Cloudflare D1 byforja ↔ both Pages projects (21 live tables, densest link)

R2 byforja-user-toolkit ← both projects (client documents, binding USER_TOOLKIT)

R2 byforja-backups ← backup worker only (D1 dumps + event archives)

Auth branch

Cloudflare Access → byforja-tools (team eo-team, gates every route)

Defense in depth: functions/_middleware.js re-checks the Access JWT against ADMIN_EMAIL on /api/admin/*, fail-closed

Magic link → public site (D1 tables magic_link_tokens + pending_logins, no third-party identity provider)

Network branch

Cloudflare DNS, zone byforja.com → routes both Pages projects

Mail records: SPF v=spf1 include:_spf.google.com ~all, DKIM google._domainkey, DMARC p=quarantine

Brevo DKIM: brevo1 + brevo2._domainkey CNAMEs delegated to Brevo

Booking branch

Cal.com ← public site via the /call 302 (event digital-offensive)

Google Calendar ← Cal.com (availability sync, schedule "Disponibilite Forja", Europe/Paris)

No Cal.com webhook is wired yet — /bookings is still a placeholder waiting on the schema.

Automation branch

byforja-backup-worker → D1 + R2 (8 cron triggers, 9 HTTP endpoints)

Gmail API ← byforja-backup-worker, OAuth on al@eliteoutsiders.com (send-as al@byforja.com), added 24/08/2026 for the outreach follow-up sender (T2/T4/T5)

Notion API ← byforja-backup-worker, direct REST (Outreach Prospects DB read + Status writes)

byforja-cron-purge → D1 (monthly GDPR retention purge, 1st at 03:00 UTC)

Both are separate repos deployed as standalone Workers, not Pages Functions.

Operator branch

Terminal (macOS) → Wrangler (deploy, D1 queries, Pages secrets)

Terminal → GitHub (git push/pull on 4 private repos)

Wrangler → both Pages projects + D1. It is the only write path to production.

Business tooling — not wired to the code

Notion (Outreach Prospects DB) → Loom + mockup render → YousignStripe

This is the human sales chain. None of it calls the site or the tools at runtime.

If you cut this cluster the infra keeps running — you just lose the way byForja sells.

Quick read — who's connected to whom

7 services touch the code directly: D1 (read/write from both projects), R2 user-toolkit (uploads), Cloudflare Access (gates tools), Cloudflare DNS (routes), Brevo (magic-link API), Resend (admin transactional API), Cal.com (via the /call redirect).

5 peripheral services: R2 backups (downstream of the backup worker), byforja-backup-worker and byforja-cron-purge (scheduled writers on D1), Google Workspace (mailboxes on the zone), Google Postmaster Tools (reputation monitoring on the sending domain).

3 operator tools: Terminal (macOS) drives Wrangler and GitHub. It is the human control layer — if Terminal breaks, no more deploys and no more admin work, but the live sites keep serving.

D1 is the silent hub: 4 pieces of code write to it (public site Functions, tools Functions, backup worker, purge worker). A schema change touches all four. There is no staging copy — byforja is the only database.

DNS is the second silent hub: Pages routing, Access, Google Workspace mail and Brevo DKIM all resolve through the same zone. Break the zone and mail plus hosting fail together.

Cloudflare inventory

Read live from the Cloudflare API on 11/08/2026, cross-checked against wrangler.toml in each repo.

Pages projects (2)

  • byforja
    • byforja.pages.dev · byforja.com · www.byforja.com
    • bindings: DB → d1 byforja, USER_TOOLKIT → r2 byforja-user-toolkit
    • secrets: AUTH_SECRET, BREVO_API_KEY
    • 14 Functions endpoints under /api
  • byforja-tools
    • byforja-tools.pages.dev · tools.byforja.com
    • bindings: DB → d1 byforja, USER_TOOLKIT → r2 byforja-user-toolkit
    • secrets: ADMIN_EMAIL, RESEND_API_KEY
    • 20 Functions endpoints under /api/admin, all behind CF Access

D1 databases (1)

  • byforja
    • id ff9f3527-bcc5-454b-88e1-c26420688b06 · created 03/05/2026
    • 21 live tables, shared by site + tools + both Workers
    • analytics: events, error_events, analytics_snapshots
    • auth: magic_link_tokens, pending_logins
    • contacts: contacts, toolkit_resources
    • client model: client_brand_bible, client_brand_options, client_brand_swipes, client_contract, client_discovery, client_monthly_plans, client_plan_comments
    • journey: journey_state, journey_tasks, journey_events
    • tooling: pricing_calculations, board_state, page_inventory, button_inventory

R2 buckets (2)

  • byforja-backups · created 04/05/2026
    • private, reached only through the worker binding BACKUP_BUCKET
    • prefix YYYY-MM/d1-byforja-DATE.sql (monthly D1 dump)
    • prefix events-archive/YYYY-MM/ (monthly events archive)
  • byforja-user-toolkit · created 23/05/2026
    • bound as USER_TOOLKIT on both Pages projects
    • client documents uploaded from the admin, served through /api/me/toolkit

Workers (2 active)

  • byforja-backup-worker
    • 8 crons: 0 2 1 * * events archive · 0 3 1 * * D1 backup · 0 4 1 * * URL audit · 0 4 * * 1 page-flow crawl · 0 5 1 1,7 * analytics-map refresh · 0 6 * * * error watchdog · 0 8 * * 1 weekly snapshot · 0 * * * * outreach follow-up sender (added 24/08/2026)
    • bindings: DB (byforja), BACKUP_BUCKET (byforja-backups)
    • secrets: NOTION_API_KEY, CALCOM_API_KEY, GMAIL_CLIENT_ID, GMAIL_CLIENT_SECRET, GMAIL_REFRESH_TOKEN (added 24/08/2026, OAuth on al@eliteoutsiders.com — see Automation branch)
    • 9 endpoints: /run, /backup/last-run, /admin/events-archive-now, /admin/url-audit-now, /admin/page-flow-crawl-now, /admin/error-events-watchdog-now, /admin/weekly-snapshot-now, /admin/analytics-map-refresh-now, /admin/gmail-followup-now
    • alert mail goes out through Brevo; outreach follow-ups go out through Gmail API, same thread as AL's manual T1
  • byforja-cron-purge
    • 1 cron: 0 3 1 * * monthly GDPR retention purge
    • honours the retention promise published on byforja.com/privacy

KV namespaces (0)

  • none for byForja
    • the account holds one namespace, BACKUP_STATE, and it belongs to Elite Outsiders
    • no byForja wrangler.toml declares a KV binding — cron run history is not persisted yet

Domains

  • Custom domains (3)
    • byforja.com → Pages project byforja
    • www.byforja.com → Pages project byforja
    • tools.byforja.com → Pages project byforja-tools, CF Access gated
  • Platform domains (3)
    • byforja.pages.dev · byforja-tools.pages.dev
    • byforja-backup-worker.alexandre-corne-ac.workers.dev

Two orphan Workers still sit in the account: byforja and byforja-worker, both last modified 26/04/2026, neither has a local repo. They predate the move to Pages and look like leftovers — confirm before deleting.

The two repos

RepoServesGateContents
byforja-site byforja.com + www.byforja.com — the public bilingual FR/EN site Public. Magic-link login on /account only 21 pages in public/, 14 Functions endpoints, 6 D1 migrations, Playwright smoke tests
byforja-tools tools.byforja.com — the admin surface, this page included Cloudflare Access SSO (team eo-team) + ADMIN_EMAIL allowlist on the API 38 pages in public/, 20 admin endpoints, 8 D1 migrations
byforja-backup-worker Scheduled jobs against D1 and R2 Worker default domain, admin endpoints behind a shared secret 7 job modules, 7 crons
byforja-cron-purge Monthly GDPR purge on D1 Cron only Single module

All four repos are private on GitHub under alexandrecorne/. The site and tools repos both bind the same D1 and the same R2 toolkit bucket — that coupling is deliberate and it is the main reason a migration has to be run once and smoke-tested twice.

Tool pages on tools.byforja.com (38)

One line per page, taken from the page's own title and first heading. "Placeholder" means the page ships a placeholder block instead of a working dashboard.

PageWhat it isState
/indexbyForja Tools — AL. The hub that links every page below.Hub
/alllinksAll internal links — manual index of every page on tools.byforja.comLive
/analytics-mapAnalytics map — what we track. Source of truth for every event type captured by bf-tracking.jsLive
/architectureArchitecture. The long-form system map, the largest page in the repo at 161 KB.Live
/bookingsBookings — Cal.com bookings (slug: digital-offensive)Placeholder
/brand-options-editorBrand options · A vs B. Editor for the paired brand options served to clients.Live
/cal-questionnairesCal.com Questionnaire — byForja source of truth. Offensive Digitale · 4 questions · exact wordingLive
/call-cockpitCall Cockpit. Live surface used during a prospect call.Live
/click-analyticsClick analytics — click events breakdown by page, target, and timingPlaceholder
/clientsClients — byForja contact base, auto-added on magic-link login plus manual entriesLive
/clients-detailClient detail. Per-client record with newsletter, booking, pricing, contract and journey tabs.Live
/content-systemContent system — byForja content production systemPlaceholder
/coredataCore data — canonical KPIs and references for byForjaPlaceholder
/crmCRM · Client journey. Pipeline view over the journey tables.Live
/cronsCrons — byForja automation surface, backup worker plus watchdogLive
/customer-journeyCustomer journey. Per-email journey timeline.Live
/dataData landing — raw data hub, pointers to D1 tables and dashboardsPlaceholder
/discovery-questionnaireDiscovery questionnaire. Pre-engagement questionnaire filled with the client.Live
/email-deliverabilityEmail deliverability — open rates, bounces, complaintsPlaceholder
/email-systemEmail system — transactional plus marketing email orchestrationPlaceholder
/healthbyForja health — aggregate status, D1 live counters plus crons plus last snapshotLive
/heatmapHeatmap — anonymous click coordinates per pagePlaceholder
/infra-treeInfra tree. This page.This page
/lf-cross-platform-contentActions board — cold to served client, one intent per lineLive
/lf-cross-platform-content-docLF cross-platform — canonical docPlaceholder
/mockupsMockups — the proof asset that rides with every LoomLive
/monthly-output-previewMonthly plan preview — pick a client and a monthLive
/monthly-plan-questionnaireMonthly plan. Questionnaire that feeds the monthly deliverable.Live
/notion-vs-toolsNotion vs Tools — source-of-truth split, which system owns whatLive
/og-previewOpen-Graph preview — quick preview of OG cards for byforja.com URLsPlaceholder
/onboarding-questionnaireOnboarding questionnaire. Post-signature intake.Live
/page-flowbyforja.com page flow — live inventory, refreshed weekly by the page-flow crawlerLive
/preview-clients-detailClient detail (preview) — layout sandbox for the /clients-detail designPlaceholder
/pricing-calculatorPricing calculator — profile × launch formula × monthly tier × market × revenue → launch + monthlyLive
/public-site-deploy-processbyforja-site deploy process — how to ship to byforja.comLive
/purchasesPurchases — purchase log (Stripe / Lemon Squeezy / manual)Placeholder
/videosbyForja videos — video index and LF cross-platform linkPlaceholder
/weekly-business-steeringbyForja weekly business steering — tracking pillars and deliverables, one entry per weekPlaceholder

24 live pages, 14 placeholders. Two placeholders still carry copy inherited from the Elite Outsiders port: /email-deliverability names Kit and /purchases names Lemon Squeezy — neither is a byForja service. Worth rewriting when those pages are built.

External services wired

ServiceCategoryRoleIf it breaks...
Cloudflare Pages Cloudflare Hosts byforja.com and tools.byforja.com Everything goes dark — public site and admin at once
Cloudflare D1 Storage Single shared SQL database, 21 tables Login, client records, analytics and crons all fail together
Cloudflare R2 Storage Client documents (user-toolkit) and monthly backups Toolkit downloads break; backups stop accumulating
Cloudflare Access Auth SSO gate on tools.byforja.com, team eo-team No access to the admin surface at all
Cloudflare DNS Network Zone byforja.com — routing plus every mail record Cascade: hosting, Access and mail fail in the same minute
Brevo Email Magic-link sign-in mail and worker alerts, from contact@byforja.com Nobody can sign in to /account and alerts go silent
Resend Email Admin-triggered transactional mail (brand-swipe invite), from al@byforja.com Brand-swipe invitations cannot be sent from the admin
Google Workspace Email Mailboxes on byforja.com. MX on Google, SPF include:_spf.google.com, DKIM google._domainkey, DMARC p=quarantine Outbound prospecting stops and inbound replies bounce
Google Postmaster Tools Monitoring Sender reputation, spam rate and compliance for the outbound prospecting domain — dashboard for byforja.com Reputation drift stops being visible before Gmail starts filtering
Cal.com Booking Event digital-offensive (id 6614252), schedule "Disponibilite Forja" (id 1478988), Europe/Paris No discovery calls can be booked from the site or from outreach mail
Google Calendar Booking Availability source synced by Cal.com Cal.com offers slots that are already taken
GitHub Operator 4 private repos (site, tools, backup worker, cron purge) No versioning or history; the live sites keep serving
Wrangler (CF CLI) Operator Deploys both Pages projects, queries D1, manages secrets No deploys and no manual DB work
Notion Business Outreach Prospects DB plus the byForja doctrine pages You lose the prospect pipeline and the docs; the code keeps running
Loom Business Outreach video sent with every prospect mockup Outreach loses its personalised video; nothing technical breaks
Yousign Business Contract signature at close, tracked as journey step contrat_envoye No contract can be signed; no start date is announced
Stripe Business First transfer at close. No webhook and no secret on the Pages projects — it is manual today No payment collected; the site is unaffected because nothing is wired
Canva Retired Retired on 09/08/2026 — mockups are now rendered by node render.js in headless Chrome, about 3.2 s per PNG Nothing. Listed so nobody re-wires it by accident

Google Postmaster Tools — status on 11/08/2026

Domain byforja.com. Dashboard: postmaster.google.com/v2/sender_compliance?domain=byforja.com

All 8 compliance requirements green: SPF/DKIM, From header alignment, DMARC, encryption, user-reported spam rate, DNS records, one-click unsubscribe, honour unsubscribe.

Deliverability analysis says "not enough outgoing email" — the sending volume is still too low for Google to score reputation. That is expected at this stage, not a fault. It becomes a real signal only once outbound prospecting volume rises.

The legacy Postmaster interface is retired on 31 October. Use the /v2/ URL above — the old one will stop working.

Redirects

FromToCodeWhy
byforja.com/call https://cal.com/alexandrecorne/digital-offensive 302 Outreach mail points at byforja.com/call so the visible URL never carries the personal cal.com handle. 302 on purpose: if the Cal.com event moves, every link already sent keeps working.
/index-en.html · /index-en / 301 EN became the default at root on 30/05/2026, FR moved to /index-fr.html. Kept so old external links survive.

Both live in byforja-site/public/_redirects. byforja-tools/public/_redirects is empty. Verified live on 11/08/2026: /call answers 302 to the Cal.com event, tools.byforja.com answers 302 to the eo-team Access login.

Links to the full documentation

→ Notion: Claude Code HQ — universal patterns · rules shared across all four verticals

→ Notion: byForja — Claude Code HQ — specifics · posture, brand, offer, packages, contracts

→ Notion: byForja hub · business doctrine, leads, content, contracts, CRM

→ /architecture · the long-form system map · → /crons · the automation surface · → /health · live counters