Type: code · Executor: coding_agent · Repo: motir-core · ONE PR.
The four public paths now answer on the public site. This card makes their OLD addresses redirect, and sweeps the places in this repository that still print the old one.
Permanent redirects on the application host, path and query preserved, for:
/ → the public site root/explore and /explore/topic/*, including the ?rank= variants the sitemap publishes/docs and every surface beneath it/legal and every document beneath itproxy.ts already runs on this application with a matcher enumerated from the filesystem by tests/navigation/proxy-matcher.test.ts, so the redirect belongs there rather than in a second mechanism — and its matcher gains these segments through the same filesystem-derived guard, never as a hand-maintained list. The /admin exclusion that test asserts as deliberate stays exactly as it is.
/p/* is NOT redirected by this card. Those pages are still served here.
The card's verb is move, so the referrers are call sites rather than cards. grep this repository for the literal app.motir.co and give every hit one of two dispositions — in this card's scope, or a named sibling card. There is no third option, and "the rest later" without a card is the orphan. The hits on origin/main today fall into groups, and each needs a verdict written into the PR:
content/legal/*.md (privacy, terms, DPA, cookies, subprocessors, acceptable-use) and docs/*.md. A legal document naming an address that redirects is not wrong, but it is now imprecise about where the service is provided; decide per document and say why.tests/baseUrl.test.ts, tests/hosting/appUrlSeam.test.ts, tests/rootMetadata.test.ts, tests/emailDeliveryRecord.test.ts, tests/brand/emailBrandHeader.test.tsx, the API-docs and OpenAPI registry tests. These encode the CURRENT contract and must move with it, not be deleted.design/brand/design-notes.md, design/mcp-server/design-notes.md.docs/decisions/*.md. These are HISTORY and are not rewritten; where one states a fact that is no longer true, the amendment the ADR card wrote is what a reader is pointed at.And the abandoned path is itself a deliverable. After the redirects land, ask of each moved route whether anything still SERVES it here — a stale route file, a leftover (public) entry — and delete it in this PR rather than leaving a live invitation to re-adopt.
The values that live outside this repository move on the cutover card: the MOTIR_BASE_URL secret, Google's OAuth redirect URIs, Better-Auth trustedOrigins as deployed, the Search Console sitemap submission, and NEXT_PUBLIC_MOTIR_APP_ORIGIN in motir-marketing. Those are console and platform actions, not a diff — and putting them here would straddle two repositories and a dashboard.
?rank= variant./p/* returns 200 on the application host, asserted explicitly so the next story's boundary is protected by a test rather than by intent.proxy.ts's matcher covers the redirected segments, and tests/navigation/proxy-matcher.test.ts still derives its expectations from app/'s filesystem — no hand-listed segment is introduced, and /admin still has none.grep -rn 'app.motir.co' result with a per-hit disposition, and every hit is either changed here or names the card that owns it./home, /settings and the item surfaces do not redirect.motir-core/proxy.ts · tests/navigation/proxy-matcher.test.ts — the mechanism and its guardmotir-core/lib/baseUrl.ts · lib/publicProjects/urls.ts — the origins, split by the robots/sitemap cardmotir-core/content/legal/*.md · docs/*.md · design/*/design-notes.md · docs/decisions/*.md — the sweep's populationmotir-core/tests/{baseUrl,rootMetadata,emailDeliveryRecord}.test.ts · tests/hosting/appUrlSeam.test.ts — the assertions that encode the old contract