BezelIQ Studio blueprint
blueprint artifact · for BezelIQ Studio · status approved
blueprint artifact · for BezelIQ Studio · status approved
No explicit evidence field yet. Require tests, screenshots, linked PRs, or reviewed outputs before marking complete.
- api: auth: string, notes: string, base_url: string, endpoints: object
- stack: backend: string, hosting: string, database: string, frontend: string, external_services: object
- schema: notes: string, tables: object
- routing: notes: string, routes: object
- version: 1
- services: env_vars: object, dependencies: object
- project id: bezeliq-studio
- updated at: 2026-04-28
Machine-readable source fields
apikey: VITE_SUPABASE_ANON_KEY header on all requests
BezelIQ Studio is a pure Supabase frontend — no custom API server. All data operations are Supabase REST table queries. Exec gate actions post to hcs-post-server.
https://tseqkbyqyrctrkihllss.supabase.co/rest/v1
| path | method | request | response | description | auth required |
|---|---|---|---|---|---|
| /projects?client_id=eq.{clientId}&order=created_at.desc | GET | - body: - params: client_id: string | - 200: rows: string - errors: 0 items | List all projects for a client — Studio home view | false |
| /studio_artifacts?project_id=eq.{projectId} | GET | - body: - params: project_id: string | - 200: rows: string - errors: 1 item | Fetch all artifacts for a project — project detail view artifact status | false |
| /studio_artifacts | POST | - body: status: string, content: string, phase_id: string, project_id: string, artifact_type: string - params: | - 200: id: string, created_at: string - errors: 1 item | Create a new artifact — called on intake completion (intent) or agent task output (blueprint, spec, policy) | false |
| /studio_artifacts?id=eq.{artifactId} | PATCH | - body: status: string, content: string, updated_at: string, approved_at: string, approved_by: string - params: id: string | - 200: updated: boolean - errors: 1 item | Update artifact content or approval status | false |
| /agent_tasks?project_id=eq.{projectId}&role=eq.exec&status=eq.assigned | GET | - body: - params: project_id: string | - 200: rows: string - errors: 0 items | Fetch pending exec gate tasks for a project — exec gate approval view | false |
| http://87.99.154.64:3001/post-hcs-message | POST | - body: message: object, topicId: string - params: | - 200: ok: boolean, status: string - errors: 1 item | Post exec gate approval or rejection as HCS message — triggers Engine to advance or hold | false |
Supabase REST + Realtime (no custom API server)
Cloudflare Pages — bezeliq.ai primary domain
Supabase Postgres — RedKey instance (tseqkbyqyrctrkihllss)
Vue 3 + Vite + Vue Router 4
| auth | name | purpose |
|---|---|---|
| Anon key for reads; service role key never in frontend — exec gate actions via hcs-post-server | Supabase | Database (studio_artifacts + existing platform tables), Realtime subscriptions, OAuth provider (v2) |
| No auth — VPS network-only in v1 | hcs-post-server | POST exec gate approvals and rejections as HCS messages — runs on VPS port 3001 |
| none | Dreamborn Forge CSS | Design system — self-hosted from dreamborn-design-system repo, imported as static asset |
Only new tables documented here. Existing platform tables (projects, agent_tasks, stages, phases, inbox, agent_state) are defined in RedKey migrations and are read-only from Studio's perspective.
| rls | name | columns | indexes | description |
|---|---|---|---|---|
| Read: anon allowed. Write: anon allowed in v1 (no auth enforcement). Revisit when Supabase OAuth is enabled. | studio_projects | - id: Primary key — generated UUID, not an HCS topic ID - title: Human-readable project name entered at intake - client_id: Client scope — populated from VITE_CLIENT_ID at intake time - status: Studio lifecycle state: intake | designing | ready | dispatched. Not the same as platform project status. - platform_project_id: Set when the project is dispatched to the RedKey platform and an HCS topic is created. Null for all pre-dispatch Studio projects. - created_at: Row creation timestamp - updated_at: Last update — maintained on every PATCH | - item: unique: boolean, columns: object - item: unique: boolean, columns: object | Studio-managed projects created at intake time. These are pre-dispatch — they do not have HCS topic IDs yet. Separate from the platform's projects table to avoid polluting HCS-anchored entities with Studio drafts. |
| Read: anon allowed (no sensitive content). Write: authenticated only in v2. In v1: service role via backend script or anon with open policy — revisit when auth enforced. | studio_artifacts | - id: Primary key - project_id: FK to studio_projects.id — the Studio-managed project this artifact belongs to - artifact_type: One of: intent | blueprint | spec | policy - phase_id: Only populated for artifact_type=spec — identifies which phase this spec belongs to - content: The full artifact JSON — matches the template schema for each artifact_type - status: Approval state: draft | approved | rejected - version: Incremented on each content update — enables history without separate versions table in v1 - approved_by: Identity of approver — 'justin' in v1, user_id in v2 when auth is enforced | - item: unique: boolean, columns: object - item: unique: boolean, columns: object | Stores all four SDD artifacts per project. One row per artifact per version. Studio reads and writes this table directly. |
Vue Router 4, history mode. Platform shell wraps all routes with persistent nav.
| path | component | description | props |
|---|---|---|---|
| / | StudioHome | Platform home — studio picker | |
| /dev | DevStudioHome | Dev Studio — project list | |
| /dev/new | DevIntake | New project intake form | |
| /dev/:projectId | DevProject | Project detail — artifact status dashboard | |
| /dev/:projectId/intent | ArtifactView | INTENT.json rendered view + editor | - type: intent |
| /dev/:projectId/blueprint | ArtifactView | BLUEPRINT.json rendered view + editor | - type: blueprint |
| /dev/:projectId/spec/:phaseId | ArtifactView | SPEC.json rendered view + editor for a specific phase | - type: spec |
| /dev/:projectId/policy | ArtifactView | POLICY.json rendered view + editor | - type: policy |
| /dev/:projectId/build | DevBuildView | Build progress — reads agent_tasks for this project |
1
| name | example | required | description |
|---|---|---|---|
| VITE_SUPABASE_URL | https://tseqkbyqyrctrkihllss.supabase.co | true | RedKey Supabase project URL |
| VITE_SUPABASE_ANON_KEY | eyJhbG... | true | Supabase anon key — safe for frontend, read-only access with RLS |
| VITE_HCS_POST_URL | http://87.99.154.64:3001/post-hcs-message | true | VPS hcs-post-server endpoint for exec gate actions |
| VITE_CLIENT_ID | bezeliq | true | Active client scope for project list — filters projects by client_id |
| name | purpose | version |
|---|---|---|
| vue | Frontend framework | 3.x |
| vue-router | Client-side routing | 4.x |
| vite | Build tool and dev server | 5.x |
| @supabase/supabase-js | Supabase client — REST queries and Realtime subscriptions | 2.x |
bezeliq-studio
2026-04-28