Websites & Cloudflare Pages¶
Most websites are deployed via Cloudflare Pages (npx wrangler pages deploy <dir> --project-name=<name>); some domains are served by standalone Cloudflare Workers instead — see Standalone Cloudflare Workers below.
Rig docs single source of truth: topology, auto-deploy, linking, and rollout for all rig documentation is maintained at https://docs.rig.dashecorp.com/docs-architecture/. Read that before editing rig doc plumbing — the section below is just the Cloudflare-level summary.
Cloudflare Pages Projects¶
| Project | Custom Domain | Purpose | Source Repo | Last Modified |
|---|---|---|---|---|
| dashecorp | dashecorp.com, www.dashecorp.com | Dashecorp main site — app pages, blog, per-app landing pages | dashecorp/dashe-website (website/) |
Active |
| invotek-no | invotek.no, www.invotek.no | Invotek AS company website | dashecorp/invotek-no (rig-managed; a merge deploys to staging.invotek.no behind Access, and production waits for the operator's promotion, see the repo's docs/deploy.md). Stig-Johnny/invotek-no-2023 is a stale 2023 version |
Active |
| stigjohnny-no | www.stigjohnny.no (the apex 302s to www; the zone is in a separate personal Cloudflare account) |
Stig-Johnny's consulting profile site: CV, The Rig, FAQ | dashecorp/stigjohnny-no (rig-managed since 2026-10-02; deploy.yml deploys on merge; project under OpenTofu with prevent_destroy, dashecorp/infra#544) |
Active |
| nutri-e | none left (its domain was to lapse 2026-10-05, claude-3#975; Domeneshop auto-renewed it on 2026-10-06 until 2027-10-05, and it is kept until post@nutrieapp.com is deleted (operator-inbox#42); Nutri-E 1.0.4 and older still link to it, so its paths get 301s to dashecorp.com (dashecorp/infra#646)) |
Former Nutri-E app website; the pages now live at www.dashecorp.com/nutri-e/ in the dashecorp project | — | Being removed |
| cuti-e | cuti-e.com | Cuti-E platform marketing site | — | Active |
| cutie-admin-dashboard | app.cuti-e.com | Cuti-E admin dashboard (customer conversations, analytics) | — | Active |
| cutie-super-admin | cutie-super-admin.pages.dev | Cuti-E super admin panel | — | Active |
| scout | scout.dashecorp.com | Scout tool | — | Active |
| invotek-docs | invotek-docs.pages.dev | Internal documentation site | — | Active |
| infra-registry | infra-registry.pages.dev | This infrastructure registry | Manual deploy from /tmp/infra-deploy/ |
Active |
| rig-docs | docs.rig.dashecorp.com (backend: rig-docs.pages.dev) | Rig MkDocs aggregator — pulls each rig repo's docs/ hourly + on dispatch. Hosts /brain/, /docs-architecture/, /components/<repo>/. |
dashecorp/rig-gitops (docs-site/, build-docs.sh) |
Active |
| rig-research | research.rig.dashecorp.com (backend: rig-research.pages.dev) | Astro Starlight — BRAIN.md, /brain/, /map/, research, proposals, user-stories, whitepapers |
dashecorp/rig-docs | Active |
| dashecorp-docs | dashecorp-docs.pages.dev | Dashecorp internal docs | dashecorp/dashe-docs | Active |
| run-the-docs | run-the-docs.pages.dev | Run the Docs YouTube production | run-the-docs/website | Active |
| ai-accountant | ai-accountant-yl9.pages.dev | AI accountant experiment | — | Active |
| atl-docs | atl-docs.pages.dev | ATL-E docs (legacy — agent retired) | Stig-Johnny/atl-agent (docs/) |
Stale |
| gran-canaria-plan | gran-canaria-plan.pages.dev | Travel planning (personal) | — | Active |
Unified rig domain (post-consolidation 2026-04-21)¶
Canonical URLs — always link these, never the *.pages.dev backends:
| URL | Role |
|---|---|
rig.dashecorp.com/ |
Landing page (Worker-rendered, managed in dashecorp/infra → cloudflare/dashecorp.com/workers/rig-router.js) |
rig.dashecorp.com/docs/* |
301 → docs.rig.dashecorp.com/* (legacy compat) |
docs.rig.dashecorp.com/ |
MkDocs aggregator — engineering reference. Hosts /brain/, /docs-architecture/, /components/<repo>/, /whitepaper/, /architecture/, /guides/ |
research.rig.dashecorp.com/ |
Astro Starlight. Hosts /brain/, /BRAIN.md, /map/, /research/, /proposals/, /user-stories/, /whitepapers/ |
Retired 2026-04-21: conductor-e-docs.pages.dev, mac-executor-docs.pages.dev — their content now lives under docs.rig.dashecorp.com/components/rig-conductor/ and docs.rig.dashecorp.com/components/rig-agent-runtime/.
Plumbing, topology, and rollout log: https://docs.rig.dashecorp.com/docs-architecture/.
Dashecorp Website Structure¶
The dashecorp.com site serves as the hub for all apps. Structure in dashecorp/dashe-website/website/:
website/
├── index.html — Main landing page
├── codi-e/ — Codi-E blog: index + 11 post directories
├── count-e/ — Count-E app page (+ privacy, support, terms)
├── drink-e/ — Drink-E app page (+ privacy, roadmap, support, terms)
├── fast-e/ — Fast-E app page (+ privacy, support, terms)
├── heart-e/ — Heart-E app page (+ privacy, roadmap, support, terms)
├── nutri-e/ — Nutri-E app page (+ privacy, roadmap, support, terms)
├── reward-e/ — Reward-E: privacy, support, terms ONLY — no product page
├── rig/ — /rig/ section: landing, agents, pipeline
├── rig-sandbox/ — unlinked + noindex page the rig flips end to end (dashe-website#209)
├── privacy/ — corporate privacy policy
├── llms.txt — AI-readable site index
├── sitemap.xml — SEO sitemap
├── feed.xml — RSS feed
├── robots.txt, 404.html, styles.css, script.js, favicons
└── images/ — Shared assets
llms.txt and sitemap.xml are hand-maintained, and both are stale¶
Verified 2026-09-23: both files were last changed in the same commit (2026-09-05, PR #195) and both omit the same 18 live,
indexable pages — all of Heart-E (unlisted since 2026-05-16) and Drink-E, 6 of the 11 blog posts
(how-the-rig-reviews-code, watchdog-pattern, soul-and-heartbeat, github-apps-for-agents,
discord-agent-communication, switching-to-claude-subscription), the /codi-e/ blog index, and /nutri-e/roadmap/. So the
site advertises 5 apps while serving 7, and the sitemap costs real search visibility.
Two rules follow:
- Treat the page tree as the truth, not either index — they drift in lockstep, so one cannot check the other. Walk
gh api repos/dashecorp/dashe-website/contents/website/<dir>. - Adding a page means editing both files by hand today. Generating them at build time is the fix; until then, expect drift.
rig-sandbox/ is correctly absent from both — it is deliberately unlinked and noindex.
Rig-managed site repos: how a change ships¶
Applies to dashecorp/stigjohnny-no and dashecorp/invotek-no (verified 2026-10-02; merging and deploying re-verified 2026-10-23).
- File an issue in the site repo and Planner-E and Dev-E pick it up; Review-E reviews the PR. Track orchestrator-only work (for example importing files only a workspace has) in an issue in
dashecorp/infraorStig-Johnny/claude-3instead, and close it cross-repo withCloses owner/repo#N; an issue in the site repo makes Dev-E open a competing PR. - MergeGate merges a PR seconds after Review-E approves it. Both repos have had a
pr-check.ymlsince 2026-10-14 (stigjohnny-no#24, invotek-no#33), because MergeGate merges nothing whose head has no check run. stigjohnny-no#32 and #34 and invotek-no#42 and #44 merged 9 to 13 seconds after the approval. - What a merge deploys:
- stigjohnny-no: production. A PR Review-E approves goes live with no operator step.
- invotek-no:
staging.invotek.no, behind Access, smoke-tested. Production waits for the operator to approve the run's «Promote to production» job in GitHub (invotek-no#46, 2026-10-22). Moving that promotion into prosjekt.invotek.no, customers included, is planned (dashecorp/invotek#79).- One production queue. The concurrency group
invotek-no-productiondoesn't cancel runs in progress, so an older run waiting for approval holds every newer one. Its status ispending, andpending_deploymentsis empty. - On 2026-10-23, PR #46's run had waited since the day before, and PR #50's run queued behind it. The operator cancelled the old run and approved the new one.
- Tell the operator the run numbers, oldest first.
- No phone notification. Runs show the operator's login as their actor, so GitHub sends no notification. Put the run links in an operator-inbox item (operator-inbox#58).
- One production queue. The concurrency group
dev-e-botcannot create or change.github/workflows/*(no GitHub Appworkflowspermission). A human or orchestrator commits workflow files to the PR branch.- Review-E's size gate flags large imports; a genuine import gets the
large-pr-oklabel plus a one-line justification in the PR body. - Copy: no dashes or hyphens in visible text (names excepted). stigjohnny-no's
styles.cssis a purged Tailwind build, so reuse existing classes.
Consulting sites: booking, search, accessibility, analytics¶
State of www.stigjohnny.no and invotek.no as of 2026-10-13:
- Booking:
/bookon both sites is a 302 in_redirectsto Microsoft Bookings with me forpost@stigjohnny.no. The public meeting type "Introsamtale / Intro call" is 30 min on Teams, Monday to Friday 10:00 to 15:00 Oslo time, with 24 h notice, 30 days ahead and a 15 min buffer. The booking link is also in that mailbox's email signature. Hours and rules are changed in Outlook, Bookings with me. - Google Search Console: URL prefix properties
https://www.stigjohnny.no/andhttps://invotek.no/underinvotekas@gmail.com(account/u/1/in that browser;/u/0/is a different account). Each is verified by an HTML meta tag in the site's index page (stigjohnny-no#14, invotek-no#25), and each sitemap is submitted. The Bing Webmaster import from Search Console is an operator step and is not done yet. - Accessibility: WCAG 2.0 AA audits on 2026-10-13 found 6 failures on stigjohnny.no and 5 on invotek.no. All are fixed (stigjohnny-no#17, invotek-no#27), and the audit notes are in each repo's
docs/. - Analytics: Cloudflare Web Analytics (cookieless) was chosen over Google Analytics, so the sites keep their no cookies, no tracking line (dashecorp/infra
docs/2026-10-13-web-analytics.md). The two sites are declared incloudflare/dashecorp.com/web-analytics.tfbut kept off withweb_analytics_enabled = false(infra#630), because creating them needs Account Settings: Edit on the infra CI token, which has Read. Changing the token is an operator step. Then a one-line PR turns the flag on, its apply printsweb_analytics_site_tokens, and each site adds the beacon script (infra#625). Until then neither site loads analytics.
Domain → Pages Mapping¶
| Domain | CF Pages Project | CF Workers on same domain |
|---|---|---|
| dashecorp.com | dashecorp | — |
| invotek.no | invotek-no | invotek-account-deletion, invotek-privacy-policy, grafana tunnel |
| stigjohnny.no | stigjohnny-no (www only; apex redirect lives in the personal account's zone) |
— |
| nutrie.app | — (Workers only) | nutrie-dsld, nutrie-openai, nutrie-apple-webhook, nutrie-stats-rss |
| cutiefeedback.com | — (Workers only) | cutie-worker, cutie-worker-sandbox |
| cuti-e.com | cuti-e (marketing), cutie-admin-dashboard (app subdomain) | — |
| scout.dashecorp.com | scout | — |
Private/Personal Sites¶
| Site | Repo | Description |
|---|---|---|
| Stig-Johnny CV | Stig-Johnny/cv | CV/resume (English + Norwegian) |
| private-sites | Stig-Johnny/private-sites | Contains: moving-planner |
Standalone Cloudflare Workers (non-Pages)¶
| Worker | Source Repo | Purpose |
|---|---|---|
| email-inbox | dashecorp/dashe-email-worker | Cloudflare Email Routing → D1 ingest for agent inboxes (agents+*@dashecorp.com). Deploy on merge via wrangler. |
| rig-router | dashecorp/infra (Tofu-managed) | rig.dashecorp.com/ landing page + 301 of /docs/* to docs.rig.dashecorp.com. Subdomain traffic (docs.rig / research.rig) bypasses the Worker and goes straight to Pages. |
Both are managed through git/CI — do not deploy manually from a laptop.
Naming convention¶
rig-*— engineering rig repos (agents, orchestration, memory)dashe-*— shared dashecorp platform (new:dashe-email-worker)- Product names (
nutri-e,cuti-e,star-rewards, ...) — one per app - Unprefixed — only for genuinely cross-cutting repos.
infrais the canonical example (IaC for both rig and dashe).
Rollout tracked in dashecorp/infra#99.
Deployment¶
All Cloudflare Pages projects use manual deploy (no git integration):
# Deploy a project
npx wrangler pages deploy <directory> --project-name=<name> --branch=main
# Example: deploy dashecorp website
npx wrangler pages deploy repos/dashecorp/website --project-name=dashecorp --branch=main
# Example: deploy infra registry
npx wrangler pages deploy /tmp/infra-deploy --project-name=infra-registry --branch=main