Prompt to Website — No AIDescribe the site. Get the site. No model, no API key, no network. A Visual Studio Code extension that turns a sentence into a complete, accessible, dependency-free website — HTML, CSS, JavaScript, or Bootstrap — by composing a curated corpus of human-authored blocks. Every site is reproducible byte for byte, audited against WCAG 2.2 AA, and ships a provenance file proving no model was involved. No API key. No network. No AI. Table of Contents
📖 AboutYou type Nothing was generated by a language model. The extension reads your sentence with a hand-written lexicon, picks a recipe, and assembles blocks a person wrote and audited. That is why the output is identical every time you run it, and why it works on a plane. 🎯 Why This ExtensionAI-generated code is measurably worse on the axes that matter for a site you have to maintain.
Accessibility is the thing generators skip most consistently — and since 28 June 2025 the European Accessibility Act has made it a legal requirement for anyone selling to consumers in the EU, wherever the business is based.
There is also a growing set of places where AI codegen is simply not allowed — Flathub
bans AI-generated submissions, Codeberg members voted to prohibit primarily-AI-written
repositories, and GCC excludes LLM-derived contributions. Every site produced here carries a
✨ Features🧩 Deterministic Generation (No Model, No Network)
🗂 80-Block Corpus
🖼 Icons Drawn, Not Downloaded
🎨 Six Palettes, Four Style Axes
📄 Multi-Page Sites
🌐 Real Browser Preview
♿ Audited, Not Assumed
🔒 Provable Provenance
🧱 The Prompt StackA site is not one prompt. It is an ordered, editable list of statements:
A chat transcript is not reproducible — you cannot re-run message 7 without messages 1–6 going the same way. A stack of declarative statements is a build script. Toggle any step off and watch the site change. Toggle it back and you get the exact
original bytes. The stack lives in No AI tool can offer this, because it has no addressable intermediate state. 📥 InstallationFrom VS Code Marketplace (recommended)
Or from the command line:
From a
|
| Command | What it does |
|---|---|
Prompt to Website: Generate |
Prompt → complete multi-page site |
Prompt to Website: Refine |
Add a step to the prompt stack |
Prompt to Website: Open Studio panel |
The stack, live — toggle, reorder, delete steps |
Prompt to Website: Preview in browser |
Serve locally and open your browser |
Prompt to Website: Stop preview server |
Stop and release the port |
Prompt to Website: Insert block |
Add a section to any HTML file, matching its tokens |
Prompt to Website: Re-theme |
Swap the palette across a generated site |
Prompt to Website: Copy diagnostic report |
Redacted report for an issue. Nothing is sent |
The Activity Bar carries a Prompt stack view: click a step to switch it off or on, with Generate, Refine, Preview and Studio in the view title bar.
⚙️ Settings
| Setting | Default | Description |
|---|---|---|
promptToWebsite.defaultStack |
bootstrap |
Output stack when the prompt does not name one |
promptToWebsite.previewPort |
5510 |
First port tried by the preview server. Bound to 127.0.0.1 only |
There are no telemetry settings, because there is no telemetry.
🔧 How It Works
prompt
│
├─▶ 1. NORMALISE tokenise, match longest phrases first
├─▶ 2. CLASSIFY weighted lexicon → site type (below a floor, it asks)
├─▶ 3. SLOT-FILL recipe defaults ⊕ requested sections ⊕ stack ⊕ pages
├─▶ 4. RESOLVE concrete blocks, filtered by what the stack supports
├─▶ 5. COMPOSE markup + deduped CSS + token layer + generated SVGs
└─▶ 6. HARDEN landmarks, meta tags, sitemap, PROVENANCE.txt
The corpus is compiled into the extension at build time, so activation never touches the disk and no file is fetched at runtime. Bootstrap ships pre-built and vendored — there is no Sass step, no PostCSS, no bundler in the output.
📦 Output Stacks
| Stack | Ships | Best for |
|---|---|---|
html-css |
Semantic markup + token CSS. Zero JavaScript. | Lightest output, locked-down environments, learning fundamentals |
html-css-js |
Same markup + vanilla progressive enhancement | Lean and interactive, no frameworks |
bootstrap ⭐ |
Bootstrap 5.3 (vendored, MIT) + theme override | Default. Familiar to clients, deepest component set |
All three produce the same sections in the same order — only the implementation differs.
No build step in any of them: open index.html and it works.
Interactive blocks use CSS-only patterns — <details> accordions, checkbox navigation,
scroll-snap carousels — which is why html-css keeps them.
♿ Accessibility
Every block ships WCAG 2.2 AA-audited:
- Automated — axe-core with
target-size(2.5.8) explicitly enabled, light and dark - Browser-driven — focus-not-obscured (2.4.11), keyboard reach (2.1.1), dragging alternatives (2.5.7) and reflow at 320px (1.4.10)
- Contrast — every token pair verified in both themes before a block can ship
Your content determines final conformance. Alt text, copy and any markup you add are outside that audit. See CLAIMS.md for exactly what is and is not claimed.
🔨 Build From Source
# 1. Clone
git clone https://github.com/anandsundaramoorthysa/prompt-to-website-no-ai.git
cd prompt-to-website-no-ai
# 2. Install dependencies (no model weights, no browser download for the extension itself)
npm install
# 3. Build — vendors Bootstrap, compiles the corpus, bundles with esbuild
npm run build
# 4. Run everything: gates, tests, and the full accessibility sweep
npm run verify
# 5. Launch the Extension Development Host
# Press F5 in VS Code
The headless CLI shares the same core:
node dist/cli.cjs "a landing page for a saas called Northwind" --out ./site
node dist/cli.cjs --refine "add a blog page" --out ./site
node dist/cli.cjs --stack-list --out ./site
Useful scripts:
| Script | Purpose |
|---|---|
npm run new-block -- hero hero-centred "Centred" |
Scaffold a block, both variants + manifest |
npm run check:tokens |
Reject raw colours, raw spacing, physical properties, opacity on text |
npm run check:icons |
Reject any icon a copy bank names but the set lacks |
npm run check:contrast |
Verify every token pair in both themes |
npm run check:size |
Package-size budget against the 40 MB Marketplace cap |
npm run audit:coverage |
Render all 160 block pages and audit every one |
👥 Contributing
Contributions are very welcome — especially blocks.
Read CONTRIBUTING.md first. The short version:
npm run new-block -- <category> <slug> "Label"- Write the markup and CSS, tokens only, logical properties only
- Add copy under
"<category>.<slot>"in a copy bank - Replace every
TODOinmeta.json, including the dated manual review npm run verify
The one rule that matters: every block must be MIT-origin or original work, authored by a person. CI rejects anything else. Please do not paste from sources with attribution requirements or anti-compete terms.
By participating you agree to the Code of Conduct.
🗺 Roadmap
- [ ] Tailwind output as a fourth stack
- [ ] More site types — gym, school, charity, medical practice
- [ ] Copy banks in more languages, with RTL recipes
- [ ] Block browser in the sidebar with visual previews
- [ ]
moveandrenamerefinement verbs surfaced in the Studio panel - [ ] Optional bundled OFL fonts for distinctive typography, still zero external requests
Have a request? Open an issue.
⭐ Star History
📄 License
This project is released under the MIT License. You are free to use, modify, and distribute it under the terms of this license. See the LICENSE file for the full text.
Sites you generate are yours. No attribution required, no obligations inherited, no
restrictions on commercial use. The MIT notices under assets/ cover only the third-party
files bundled alongside your site.
No paid tier, no licence keys, no telemetry. Ever.
🙏 Acknowledgments
Built with these excellent open-source projects:
- Bootstrap — vendored for the default output stack
- axe-core — the automated half of the accessibility gate
- Playwright — drives the browser checks axe cannot reach
- esbuild — single-file bundling, fast enough to forget about
- VS Code Extension API — webviews, quick picks and the status bar
GitHub · Marketplace · Issues · Discussions