blueprint-supabase-ui · git:20260929.9015ceb · 2026-09-29 · sha256 bf57b6a55593d323

blueprint-supabase-ui git:20260929.9015cebA

Immutable. This exact content never changes and is served at /api/v1/blob/bf57b6a55593d323.

---
name: blueprint-supabase-ui
description: "Build the spec's screens in Vue, reading and writing Supabase from the browser."
---

# Screens

1. The screens in the spec, no more. Vue 3 Composition API, plain and readable; a list, a form, a detail as needed.
   Every call goes through the one client in `src/client/supabase.ts`.
2. Every error Supabase returns is shown to the user in words, not swallowed. A refusal by row level security
   (`42501`) is said as "you cannot do this", not as a crash.
3. The screen never decides who may do what: it may hide a button, but the database is what refuses.
4. Text in the language the spec says.
5. `test/ui.test.ts`: the main screens' logic works against the local stack (a list shows rows, a form adds one).
   Components that need a DOM can be tested with a second vitest project using happy-dom.

Done when the check passes: `yarn build` and `yarn test` succeed and `test/` has the ui tests.

## Always

- Read `.blueprint/spec.md` first. It is the agreed specification; do not widen it.
- When you need a decision, ask it through the blueprint question tool and stop. Do not guess.
- Do not run `git init`: a new repository loses the folder's trust and the next unattended step stops at Claude
  Code's trust prompt. The user adds git themselves after the build if they want it.
- Say you are done by stopping; the executor runs the check. Do not claim success yourself.