openvibers/openvibe.design STATUS.json

STATUS.json

main 7.8 KB · 78 lines · json

1{
2 "repository": "OpenVibers/OpenVibe.Design",
3 "version": "0.1.0",
4 "stage": "v2",
5 "code": true,
6 "wave": "W20",
7 "plan": "OpenVibe.Design: the Design room's theme studio. Browse OpenVibe's themes, try them on previews, edit one with contrast checks, use it, submit it to the gallery, and roll back to any earlier setting. Theme selection stays in OpenVibe.Network; this service signs the person in and proxies their calls. v2 adds the Design Arena: one prompt, three AI models, blind votes and an Elo leaderboard per category, with cost and time per generation and an open dataset.",
8 "runtime": "node 22, express 4, openvibe-shared/shell; PostgreSQL (or embedded PGlite in development), OpenVibe.AI generate jobs, OpenVibe.Events account data in, no Valkey",
9 "port": "5090",
10 "domain": "openvibe.design",
11 "contracts": "openvibe-contracts v0.419.0",
12 "sdk": "openvibe-sdk v0.161.0",
13 "shared": "openvibe-shared v4.235.0",
14 "packages": [
15 "openvibe-contracts v0.419.0",
16 "openvibe-publishing v1.7.0",
17 "openvibe-sdk v0.161.0",
18 "openvibe-shared v4.235.0"
19 ],
20 "summary": "The service skeleton for openvibe.design: Network sign-in as OAuth client `design` (PKCE S256, httpOnly design_at/design_rt cookies) and a theme API proxy to OpenVibe.Network's /api/themes. The proxy serves the public catalogue (cached 5 minutes), one theme, the person's active theme and custom variables, saving a theme with source 'studio', its history and a restore by id, and a submission to the gallery. Writes need this site's own Origin; Network 4xx answers pass through and a Network failure is 502. The studio is designed: a gallery, previews on a Live channel, a Chat room and a shop's grid (with colour-vision views), a six-colour editor that derives the full token set, WCAG checks that gate Use, sharing to the gallery, and History with Restore. The Arena queues one prompt for three models through OpenVibe.AI (client credentials, ai.run.create), stores sanitized HTML with reported model/provider/cost/time/tokens, renders it only in sandboxed CSP-capped iframes, draws blind pairs, records one vote per person per round, and keeps Elo ratings per category plus median cost and time. The prompts, outputs and votes are an open JSONL dataset; rounds and votes follow ADR-033 export and deletion.",
21 "works": [
22 "Sign-in with OpenVibe.Network: OAuth 2 authorization code, PKCE S256, state check, server-side exchange, httpOnly design_at/design_rt cookies, sanitizeNext (own origins only, no control characters or backslashes)",
23 "The theme API proxy: GET /api/themes (5-minute in-memory cache), GET /api/themes/:idOrSlug, GET/PUT /api/me/theme, GET /api/me/theme/history, POST /api/me/theme/history/:id/restore, POST /api/themes/submit",
24 "Same-origin CSRF on every proxied write (403 design.cross_site), 401 problem when signed out, Network 4xx pass-through, 502 on a Network failure, private, no-store on /api/me/*",
25 "Server-rendered pages: /, /studio (the shell for public/js/studio.js), /t/:slug, /developers and a 404",
26 "Crawl artifacts (robots.txt, sitemap.xml with the public themes, llms.txt), /api/health, /api/ready (degraded when Network does not answer), /release.json, /release-metrics, /shared/*",
27 "Helmet with the network's CSP, per-IP 120/min on /api and /auth, content-hashed /css and /js, graceful stop",
28 "Deploy files: openvibe-design.service, nginx vhost for openvibe.design on 127.0.0.1:5090",
29 "Tests: sanitizeNext, the login redirect and callback, /auth/me, the proxy (cache, 401, CSRF, pass-through, down), the pages and the crawl artifacts, health and readiness",
30 "The Design Arena API: POST/GET /api/v1/arena/rounds, GET /vote and POST /vote, GET /leaderboard?category=…, GET /dataset.jsonl",
31 "Arena generation: a job loop off under DESIGN_DRILL, AI generate with a client-credentials token (audience openvibe.ai, scope ai.run.create), three slots from AI's chat route, cost/time/tokens stored, per-person and whole-site daily budgets",
32 "Output safety: scripts, on* handlers and javascript: URLs stripped, 200 KB cap, storage as text, rendering only in <iframe sandbox srcdoc> with a CSP meta that blocks every network fetch",
33 "Blind voting and Elo: two outputs in random order with models hidden, creator cannot vote, one vote per person per round, K=32, tie=0.5, both_bad counts for neither",
34 "Arena pages: /arena (leaderboard and start), /arena/new, /arena/vote, /arena/r/:id with 390 px and 1280 px frames",
35 "ADR-033 account export/deletion for a person's rounds, outputs and votes through /internal/events",
36 "Tests: the migration, the generation job, the sanitizer and iframe markup, daily limits, blind pairs, one vote, creator refusal, Elo win/tie/both_bad, leaderboard numbers, dataset privacy and account export/erase",
37 "Design Studio pick: one idempotent working frame per design, persisted with its Arena vote (Bench task/round, room-submitted entries, one signed-in person's judgement; a guest pick is saved without a vote)",
38 "Design Studio chat edit: POST /api/v1/designs/:id/edit, the picked variant's model via OpenVibe.AI, the previous HTML in context, theme-token re-wrapping, sanitization and the render-time frame CSP; a small per-design paid-AI budget",
39 "Design Studio click edit: a render-time iframe overlay reports a validated body > …:nth-of-type path; the floating panel edits text, a theme-token colour, padding and alignment; paths, tags and CSS values are allowlisted server-side and every accepted change is a version",
40 "Design Studio versions: migrations/0003_design_working_versions.sql keeps design_picks and an append-only design_versions table with model/provider provenance; undo/redo move a pointer and an edit after undo appends instead of deleting",
41 "The token files: GET /tokens/<theme>.<ext> gives a built-in or community theme (default is Vibe) as the W3C Design Tokens JSON, the CSS variables, a Tailwind preset, the Style Dictionary source, a Swift enum OVTokens, a Kotlin object OVTokens or an Android colors.xml, with the theme's colours, the kit's motion (--ov-dur-1...4 and the three curves) and the mark's colours; built-in themes immutable for a year, community themes cached for ten minutes, every file open to any origin, an unknown theme or format a 404",
42 "The format list (server/tokens/exports.js) is what a page lists: each format with its id, file name, label and type",
43 "Tests: pick/vote idempotence, owner and guest-key authorization, chat edit with a fake AI and budget, click-edit safety, CSP after editing, version history/undo/redo and the no-JS page forms"
44 ],
45 "notYet": [
46 "Design Studio part C: checks on the working frame, HTML/zip export, preview publishing and MCP",
47 "A Design service manifest and capabilities in OpenVibe.Contracts: this service has no capability of its own and no other service calls it",
48 "Deployment: the deploy files are written, but the service is not deployed yet"
49 ],
50 "capabilitiesRegistered": false,
51 "serviceManifestRegistered": false,
52 "deployed": false,
53 "placeholderInSites": false,
54 "features": [
55 "Network sign-in (PKCE)",
56 "theme API proxy",
57 "theme history and restore",
58 "theme submission",
59 "server-rendered pages",
60 "crawl artifacts",
61 "limits and readiness",
62 "deploy files",
63 "Design Arena",
64 "Arena generation jobs",
65 "Blind voting and Elo",
66 "Open Arena dataset",
67 "Account export/deletion",
68 "Design Studio pick and Arena vote",
69 "Design Studio chat edit",
70 "Design Studio click edit",
71 "Design Studio versions and undo/redo",
72 "Design tokens as files (JSON, CSS, Tailwind, Style Dictionary, Swift, Kotlin, Android XML)",
73 "The changes archive: every openvibe-shared release from the pinned changelog, its component pages and rule numbers",
74 "Component pages for the bar's brand, the search pill, the quest card, the avatar, the player, soft pages, icon ink and the footer"
75 ],
76 "updated": "2026-11-13"
77}
78