1.1.10 Card-wrapped auth layout + Vercel preview-cleanup workflow
Estimate: 25m · Depends on: 1.1.5, 1.1.6, 1.1.7
Mid-stream Subtask added between 1.1.7 and 1.1.8 as a precondition for the starter snapshots. Two unrelated-but-paired concerns landed in one Subtask:
Card-wrapped auth layout. The Story-1.1.1 mockup was Clay-style (no card chrome, wordmark top-left). User asked mid-validation to flip to a more modern card-wrapped layout — a white card with soft shadow, centered on a tinted page background — and to remove the placeholder “Motir” wordmark entirely. The wordmark removal is the deeper decision: in a real Motir-planned project, the brand mark is a late-Epic-4 Subtask (agent or human task) scheduled when the product has enough surface for the brand decision to be informed. Shipping UI Subtasks without placeholder branding avoids a filler element becoming load-bearing across every screen. Captured as a current-state principle in MOTIR.md.
Vercel preview-cleanup workflow. notes.html mistake #25 ("Vercel-Neon Marketplace integration auto-provisions Neon branches per preview but doesn't auto-tear them down") had been tracked as unresolved operational debt with a "wait until cadence justifies" deferral. The 1.1.8 + 1.1.9 starter snapshots multiply branch pressure (each new preview deploy gets its own Neon branch), so cleanup became precondition rather than nice-to-have. A .github/workflows/cleanup-preview-deployments.yml workflow now listens for pull_request: closed and deletes every Vercel preview deployment for the closing PR's head ref; the Vercel-Managed Neon integration cascades the branch deletion automatically. Implementation detail worth flagging: initial instinct was to delete the Neon branch directly via the Neon API, but the docs check revealed that under the Vercel-Managed integration, Neon-branch cleanup is bound to Vercel deployment lifecycle (not Git ref lifecycle), so the right primitive is to delete the Vercel deployment. The workflow self-validated on its own first PR merge — when 1.1.10 merged, the just-active workflow caught its own closure event and deleted PR #20's preview.
Why bundled into one Subtask: both changes were small enough (single-file edit + new workflow file) that splitting them would have meant two PRs with ~30 min of round-trip overhead each. The card change was the trigger; the cleanup workflow was the user's gated precondition before dispatching 1.1.8 + 1.1.9 ("we need the neon branch clean on PR merge too in the pipeline before doing 1.1.8 and 1.1.9, add this in the current PR"). Both shipped in PR #20 with two focused commits.
Execution mode: first Subtask where the planner executed directly rather than dispatching a coding agent. Justification: the scope was small (one layout file + one workflow file + two doc updates), the decisions were settled, and the agent-dispatch overhead (worktree creation, prompt-writing, env setup) outweighed the implementation cost. Calibration point for future small UI / infra Subtasks.
Acceptance criteria
app/(auth)/layout.tsxrenders the auth pages inside a white card with soft shadow, centered on a tinted page background. No placeholder wordmark anywhere in the layout.- Card uses existing design tokens (
--radius-card,--shadow-elevated,--color-surface) — no new tokens added. - All four auth pages (sign-in, sign-up, reset-password, reset-password/new) render correctly inside the new wrapper without any per-page changes (the AuthShell component's internal vertical rhythm composes cleanly inside the card).
.github/workflows/cleanup-preview-deployments.ymlfires onpull_request: closed, enumerates Vercel preview deployments by branch ref, and DELETEs each via the Vercel API. The Vercel-Managed Neon integration cascades the Neon-branch deletion.- Workflow uses
secrets.VERCEL_TOKEN(Vercel Access Token, team-scoped) and hardcoded project/org IDs for motir-core. For the starters (1.1.8 + 1.1.9), the same workflow is parameterized with GitHub repovarsinstead of hardcoded IDs so each user wires their own. - MOTIR.md's "Current state" entry for the preview-branch debt flips from UNRESOLVED to RESOLVED with a forward reference to this Subtask + the workflow file.
- notes.html mistake #25 gets a Resolution prompt-hint appended with the workflow reference + the "verify the fix's mechanism before shipping it" recursive-corrective learning.
- pnpm typecheck, pnpm lint, pnpm test (39/39 Vitest), pnpm test:e2e (2/2 Playwright) all green.
Context refs
app/(auth)/layout.tsx— current Clay-style layout from 1.1.5app/globals.css— existing radius/shadow/surface tokens to compose- notes.html mistake #25 — the lesson body's three documented cleanup options (GitHub Action, Neon
expires_at, manual) - Neon docs on Vercel-Managed branch lifecycle: https://neon.com/docs/guides/vercel-branch-cleanup
- Vercel API:
v6/deployments(list) andv13/deployments/{id}(delete)