Skip to content

feat(ui-designer): replace open-design vendored prototypes with first-party preview app#14

Merged
visomi-dev merged 3 commits into
mainfrom
feat/OC/ui-designer-app
Jun 27, 2026
Merged

feat(ui-designer): replace open-design vendored prototypes with first-party preview app#14
visomi-dev merged 3 commits into
mainfrom
feat/OC/ui-designer-app

Conversation

@visomi-dev

@visomi-dev visomi-dev commented Jun 27, 2026

Copy link
Copy Markdown
Owner

Summary

Replaces the vendored Open Design prototypes and the inherited themis-design-system skill with a first-party Node + Tailwind v4 preview application and a new themis-ui-prototype opencode skill. The preview app reuses styles.base.css so prototypes, the Angular app, and the Astro site share the same Catalyst token source.

What ships

  • apps/web/ui-designer/ — new Nx node application

    • lint (@nx/eslint:lint), build (@nx/esbuild:esbuild, ESM), build-css (nx:run-commands invoking the Tailwind CLI + copying prototypes/chrome to dist/.../public/), serve (@nx/js:node continuous watch). Default port 4300 (env-overridable).
    • Routes: GET / (index), GET /preview/:slug (chrome with viewport switcher + theme toggle), GET /preview/:slug/frame?theme=light|dark (raw prototype, kebab-slug allowlist), GET /api/prototypes (JSON manifest), GET /healthz.
    • Seed prototype src/prototypes/app-auth-shell.html mirrors the auth shell recipe from docs/design-system/recipes.md, mobile-first.
    • Only Node is supported — Bun is intentionally out of scope to keep the workspace runtime uniform (Nx has no native Bun executor).
  • apps/web/ui-designer/src/preview/preview.css — entry that imports tailwindcss + styles.base.css and uses @source to pick up utility classes from src/prototypes/*.html and src/preview/chrome.html.

  • docs/specs/2026-06-26-ui-designer-app/sdd.md, plan.md, requirements.md, validation.md. Decisions D1-D9 captured.

  • New opencode skill .opencode/skills/themis-ui-prototype/ with workflow 0-5 (read tokens, pick slug, author, preview, screenshot+review, promote to Angular) and references for tokens, the auth shell template, and the preview chrome. Replaces the deleted themis-design-system skill.

  • Two upstream open-design skills vendored verbatim with THEMIS_NOTES.md for upgrade tracking: impeccable-design-polish, login-flow. The open-design brand-guidelines skill is intentionally NOT vendored: it points at Anthropic's brand assets which Themis does not use. The Themis brand contracts already live in docs/design-system/tokens.md and DESIGN.md.

Cleanup

  • Deleted resources/open-design/themis-app/ (16 entries including HTML prototypes, artifact JSONs, critique JSON, .od-skills/).
  • Deleted .opencode/skills/themis-design-system/ (6 files).
  • Deleted docs/specs/2026-06-22-themis-web-app-redesign/ and docs/specs/2026-06-23-themis-auth-fidelity-pass/ (completed specs whose visual source was the vendored prototypes).
  • Deleted plan/feature-web-app-redesign-1.md.
  • docs/constitution/roadmap.md: removed the "Auth Flow Fidelity Pass" phase, removed the Phase 0 line from Catalyst alignment that referenced the external Open Design package, added the "UI Designer App" phase pointing at the new spec.
  • docs/agents/design-system.md: added a prototyping section that points at the new skill.
  • AGENTS.md: added a context-loading bullet for the themis-ui-prototype skill.
  • package.json: added postcss@^8.5.0 + @tailwindcss/cli@^4.3.1 as devDependencies (Tailwind CLI is what the build-css target invokes).

Test plan

  • pnpm nx run ui-designer:lint — passes (0 errors, 1 unrelated import-x/no-named-as-default-member warning).
  • pnpm nx run ui-designer:build --skip-nx-cache — produces dist/apps/web/ui-designer/main.js.
  • pnpm nx run ui-designer:build-css --skip-nx-cache — produces dist/apps/web/ui-designer/public/{tailwind.css, prototypes/app-auth-shell.html, preview/chrome.html}. Tailwind CSS is 122 KB with 66 utilities generated for zinc + blue scales.
  • Run the bundle on port 4399:
    • GET /healthz{"ok":true}
    • GET /api/prototypes{"prototypes":[{"slug":"app-auth-shell","title":"App Auth Shell"}]}
    • GET / → index listing the seed prototype
    • GET /preview/app-auth-shell?viewport=mobile → preview chrome at 375px
    • GET /preview/app-auth-shell/frame?theme=dark → prototype with <html class="dark">
    • GET /preview/non-existent → 404
  • pnpm nx run-many -t lint --projects=app,site,api,server,worker,realtime,ui-designer — all pass.
  • pnpm commitlint --from=HEAD~1 --to=HEAD — passes (lines within the 240-char limit).

Follow-ups (out of scope for this PR)

  • Live-reload SSE endpoint (manual reload suffices for now).
  • Playwright snapshot tests for the seed prototype.
  • Migrating apps/web/site to link into the preview.
  • apps/web/app/version.json bump — intentionally not applied here because the 2026-06-23-catalyst-pure-tokens-alignment spec also targets 1.3.0 and hasn't landed yet. When the two specs merge in order, the next bump is 1.4.0 by this spec.

Refs: docs/specs/2026-06-26-ui-designer-app/

…-party preview app

Drop the inherited resources/open-design/themis-app/ vendored prototypes and
the themis-design-system skill. Both pointed at a third --tm-* palette that
drifted from the Catalyst Tailwind v4 token set now used by the Angular app
and the Astro site.

Add apps/web/ui-designer, a Node + Express + esbuild preview server that
reuses styles.base.css, ships one seed prototype (app-auth-shell), and
exposes GET /, GET /preview/:slug, GET /preview/:slug/frame, GET
/api/prototypes, GET /healthz. Targets: lint, build (esbuild), build-css
(tailwindcss CLI + asset copy), serve (Node continuous watch). Default port
4300, env-overridable. Server reads prototypes from a kebab-slug-safe
allowlist and serves the iframe at /preview/:slug/frame?theme=light|dark.
Only Node is supported (Bun intentionally out of scope per workspace
uniformity).

Install two upstream open-design skills to replace what themis-design-system
provided: impeccable-design-polish, login-flow. Each ships THEMIS_NOTES.md
describing the upstream pin and Themis-specific guidance. The open-design
brand-guidelines skill is intentionally NOT vendored: it points at
Anthropic's brand assets which Themis does not use. The Themis brand
contracts live in docs/design-system/tokens.md and DESIGN.md.

Add the themis-ui-prototype opencode skill with workflow 0-5 (read tokens,
pick slug, author prototype, preview, screenshot+review, promote to Angular)
and references/tokens-cheatsheet.md, references/auth-shell-template.html,
references/preview-chrome.md.

Spec at docs/specs/2026-06-26-ui-designer-app/ (sdd, plan, requirements,
validation) with decisions D1-D9. Roadmap updated: removed the Auth Flow
Fidelity Pass phase (deleted spec), removed Phase 0 from Catalyst alignment
that referenced the external Open Design package, added the UI Designer App
phase. AGENTS.md and docs/agents/design-system.md point at the new skill.

Verification: pnpm nx run ui-designer:lint passes (0 errors, 1 unrelated
warning); pnpm nx run ui-designer:build + build-css produces
dist/apps/web/ui-designer/{main.js, public/tailwind.css, public/prototypes/*,
public/preview/chrome.html}; running the bundle on port 4399 returns 200
for /healthz, /api/prototypes, /, /preview/app-auth-shell,
/preview/app-auth-shell/frame?theme=dark, /public/tailwind.css and 404 for
unknown slugs. pnpm nx run-many -t lint passes for app, site, api, server,
worker, realtime, ui-designer.

Deletes: resources/open-design/themis-app/ (16 entries),
.opencode/skills/themis-design-system/ (6 files),
.opencode/skills/brand-guidelines/ (2 files),
docs/specs/2026-06-22-themis-web-app-redesign/ (4 files),
docs/specs/2026-06-23-themis-auth-fidelity-pass/ (4 files),
plan/feature-web-app-redesign-1.md. New skills and app tracked under
apps/web/ui-designer/ and .opencode/skills/{impeccable-design-polish,
login-flow, themis-ui-prototype}/.
@visomi-dev visomi-dev force-pushed the feat/OC/ui-designer-app branch from f400e3a to 42c2d22 Compare June 27, 2026 05:23
@visomi-dev visomi-dev merged commit 35a2bb5 into main Jun 27, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant