{"id":49305308,"url":"https://github.com/fraction12/spec-ui","last_synced_at":"2026-04-26T09:04:21.728Z","repository":{"id":353691840,"uuid":"1220351344","full_name":"fraction12/spec-ui","owner":"fraction12","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-25T04:08:34.000Z","size":58,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-25T04:22:11.206Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fraction12.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-24T20:08:16.000Z","updated_at":"2026-04-25T04:08:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fraction12/spec-ui","commit_stats":null,"previous_names":["fraction12/spec-ui"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/fraction12/spec-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fspec-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fspec-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fspec-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fspec-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fraction12","download_url":"https://codeload.github.com/fraction12/spec-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fraction12%2Fspec-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32291347,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T08:29:33.829Z","status":"ssl_error","status_checked_at":"2026-04-26T08:29:18.366Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-26T09:04:04.567Z","updated_at":"2026-04-26T09:04:21.716Z","avatar_url":"https://github.com/fraction12.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# spec-ui\n\nSpec UI turns agent-authored markdown specs into standalone, deterministic,\nportable HTML prototypes for review and handoff.\n\n## Status\n\nSpec UI has a dependency-free foundation compiler plus a bounded vNext semantic\ngrammar for SaaS/web-app and marketing-page prototypes. The active CLI workflow\nchange adds OpenSpec-style commands for initialization, discovery, status,\nrole-specific instructions, validation, and compilation while preserving the\ncurrent single-file flow.\n\n## Compile Flow\n\n```text\nstructured markdown or prototype package -\u003e parser -\u003e validation -\u003e IR -\u003e deterministic HTML\n```\n\nSpec UI treats the generated HTML file as the handoff contract. Viewers open\nthat artifact; they do not own parsing, validation, or compilation semantics.\n\n## CLI Workflow\n\nThe CLI is organized around the same calm loop used by OpenSpec: discover what\nexists, inspect readiness, get focused edit guidance, validate, then compile the\nhandoff artifact.\n\n```bash\nspec-ui init --examples\nspec-ui list\nspec-ui status revenue-workspace\nspec-ui instructions layout --input revenue-workspace\nspec-ui validate revenue-workspace --strict\nspec-ui compile revenue-workspace --out artifacts/revenue-workspace.html\n```\n\nUse `--json` on workflow commands when an agent or script needs stable\nmachine-readable output. JSON mode writes valid JSON only to stdout.\n\n`spec-ui compile \u003cinput\u003e --status` remains a compatibility alias for\n`spec-ui status \u003cinput\u003e --json`, so existing package-readiness scripts can move\nto the first-class `status` command when convenient.\n\n## Grammar Scope\n\nSpec UI source is structured markdown. The foundation grammar supports screens,\nsections, states, elements, and explicit actions. The vNext grammar adds semantic\nregions and blocks for two surfaces:\n\n- SaaS/web-app prototypes with app shells, navigation, page headers, metrics,\n  tables, forms, settings groups, panels, drawers, and modal/state flows.\n- Marketing/landing-page prototypes with navbars, hero sections, logo clouds,\n  feature grids, pricing, testimonials, FAQs, CTAs, forms, and footers.\n\nThe source grammar deliberately rejects raw HTML, JSX, CSS classes, scripts,\nstyles, arbitrary component names, production framework export, runtime package\nloading, backend behavior, and broad theming. Existing single-file examples use\nthe `baseline` target; package examples declare the semantic `bootstrap-html`\nadapter target while keeping source files adapter-neutral. Generated handoff\nmetadata records the resolved target and portability details.\n\nSee `docs/grammar.md`, `docs/cli.md`, and `docs/handoff.md` for the full\ncontract.\n\n## Source Modes\n\nUse single-file mode for small prototypes, compatibility checks, and quick\nexperiments. The existing examples in `examples/*.md` remain canonical\nsingle-file specs.\n\nUse package mode when a prototype needs a durable user/agent loop:\n\n```text\nprototype.md -\u003e screens.md + flows.md + content.md + layout.md + tokens.md + acceptance.md\n```\n\nThe manifest controls metadata and deterministic include order. Agents should\nedit the focused role file, compile the package, inspect the portable HTML,\ncapture UAT findings in `acceptance.md`, and repeat.\n\nCanonical package examples live in:\n\n- `examples/revenue-workspace-package/`\n- `examples/launchlayer-marketing-package/`\n\n## Project Layout\n\n- `src/` contains the parser, validator, IR compiler, renderer, and handoff helpers.\n- `bin/spec-ui.mjs` provides the CLI entry point.\n- `docs/` documents the v1 grammar and portable HTML handoff contract.\n- `examples/` contains canonical specs users can compile.\n- `fixtures/` contains test inputs for valid and invalid specs.\n- `artifacts/` is the local output directory for generated HTML and IR JSON.\n- `.spec-ui/` is optional repo-local configuration created by `spec-ui init`;\n  it stores conventions and templates, not prototype source packages.\n\n## Development\n\n```bash\nnpm test\nnpm run lint\nnpm run check\nnpm run compile:example\nnpm run compile:saas\nnpm run compile:marketing\n```\n\nThe first implementation intentionally uses Node ESM and built-in test tooling\nwith no runtime dependencies.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffraction12%2Fspec-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffraction12%2Fspec-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffraction12%2Fspec-ui/lists"}