Skip to content

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:

  1. 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>.
  2. 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/infra or Stig-Johnny/claude-3 instead, and close it cross-repo with Closes 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.yml since 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-production doesn't cancel runs in progress, so an older run waiting for approval holds every newer one. Its status is pending, and pending_deployments is 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).
  • dev-e-bot cannot create or change .github/workflows/* (no GitHub App workflows permission). 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-ok label plus a one-line justification in the PR body.
  • Copy: no dashes or hyphens in visible text (names excepted). stigjohnny-no's styles.css is 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: /book on both sites is a 302 in _redirects to Microsoft Bookings with me for post@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/ and https://invotek.no/ under invotekas@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 in cloudflare/dashecorp.com/web-analytics.tf but kept off with web_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 prints web_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. infra is 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