MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-2854

Decision (ADR) — where does the motir-marketing site (motir.co) run? 8.3.10 plans a NEW Vercel project while MOTIR-2396 is closing the account

Done
Description

Repo: motir-core (the ADR lands in docs/decisions/, beside application-hosting.md — one PR, docs-only, docs/* branch prefix). Type: decision — this card writes a record and changes no code, no workflow and no config.

Filed 2026-08-15 by MOTIR-2518's Vercel sweep. 8.3.10 (MOTIR-1455) is a live CONTRADICTION, not merely stale prose: it plans to create a new Vercel project for motir.co, while MOTIR-2396 (in_progress) is retiring the Vercel project and ending the billing relationship, and MOTIR-2508 waits behind it to delete vercel.json. Nobody can pick 8.3.10 up as written, and 8.3.6 + 8.3.7 are blocked behind it — the whole marketing chain is stalled on one unanswered question.

The question

Where does the motir-marketing site (motir.co) run? application-hosting.md decided where motir-core runs and deliberately said nothing about the marketing site, so this is a genuine gap rather than a clause to re-read.

Ground truth, read 2026-08-15

  • motir-marketing does not exist (gh repo view moooon-B-V/motir-marketingCould not resolve to a Repository).
  • motir.co apex and www.motir.co resolve to nothing (no A record). app.motir.co66.241.124.71, motir-core.fly.dev — the app is on Fly.
  • So nothing is deployed anywhere yet, and no option is foreclosed by existing infrastructure.

The options, and what each costs

OptionCost
AFly.io, a second app beside motir-core in org moooonNo new vendor, no new account, no new DPA row. Reuses the Dockerfile + output: 'standalone' path already in production. One bill, one deploy story, one set of secrets mechanics. Static-asset egress at $0.02/GB, the tradeoff application-hosting.md Q7 already accepted knowingly.
BCloudflare Pages / NetlifyA genuinely better static CDN and a free tier. But a THIRD vendor: a new account, a new billing relationship, and a new row on the subprocessor list — which MOTIR-1160 has just been corrected and which 8.5.1 Q8 now requires a per-vendor transfer basis for.
CKeep the Vercel project alive for the marketing site onlyDirectly contradicts MOTIR-2396, which is in_progress. application-hosting.md §5 already rejected the isomorphic proposal for previews — "Keeps the account, the billing relationship, vercel.json, and two build paths that can disagree" — and every word of that applies here.
DServe motir.co from motir-core itselfRejected by Story 8.3's own premise: "the public marketing site is no longer motir-core's app/page.tsx". It also re-couples marketing deploys to app deploys.

The recommendation this card should argue from — and it is a recommendation, not a foregone conclusion

A (Fly). It adds no vendor, no billing relationship, no subprocessor row and no second build model, and it reuses a path that is already carrying production. It is also the only option that lets MOTIR-2396 finish without a carve-out. B is the defensible dissent — a marketing site is exactly the workload a static CDN is best at, and the cost is one vendor row, not an architecture. Weigh B honestly rather than dismissing it; do not weigh C.

⚠️ ORDERING — this is why the card is urgent. Option C is only available until MOTIR-2396 step 4 deletes the Vercel project, which is irreversible. If C is to be considered at all, this decision lands FIRST. A comment saying so is on MOTIR-2396; no blocked_by edge was wired, because serializing an in-flight retirement on a marketing question would be the wrong trade.

Acceptance criteria

  • motir-core/docs/decisions/marketing-site-hosting.md exists in the house shape (Status → Context → Decision → Consequences), with a numbered-Q section and a per-Q rejected-alternatives table, per public-api-conventions.md Amendments 9–11.
  • It answers, each as its own Q: where the site runs; who owns the motir.co apex + www DNS records and what they point at; what CI deploys it (mirroring motir-core's lint + build gates, per 8.3.10); and whether the choice adds a subprocessor row — answered explicitly either way, since MOTIR-1160 is the consumer.
  • The rejected-alternatives table names all four options above, and quotes application-hosting.md §5's rejection of the keep-Vercel-alive shape rather than re-deriving it.
  • The record names its consumers by keyMOTIR-1455 (provisioning), MOTIR-1152 (the build), MOTIR-1154 (the SEO root), MOTIR-1160 (the subprocessor list) — and says which of them the decision changes.
  • ORDERING: the record states its relationship to MOTIR-2396 explicitly — that option C expires when that card's step 4 runs, and that the other three are unaffected by it.
  • MOTIR-1455 is re-scoped to the decided host as a follow-up (it is blocked_by this card and its title still says "Vercel project"); that re-scope is part of closing this card, not a later sweep.

Context refs

  • docs/decisions/application-hosting.md — §5's rejected-alternatives table (the keep-the-account-alive argument, already made and already rejected for previews) and Q7 (static egress accepted at $0.02/GB).
  • docs/decisions/production-service-stack.md Q8 — the per-vendor transfer-basis obligation that makes "one more vendor" a real cost.
  • MOTIR-1455 (8.3.10, the contradicted card) · MOTIR-2396 (the retirement, in_progress) · MOTIR-2508 (deletes vercel.json) · MOTIR-1160 (the subprocessor list).
  • MOTIR-2518 — the sweep that surfaced this.