Skip to content

Commit 0dcbedb

Browse files
committed
Release 1.0.0-beta.28
2 parents 90e338c + 1fa3001 commit 0dcbedb

99 files changed

Lines changed: 21729 additions & 1135 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.claude-plugin/marketplace.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"source": "./",
1515
"displayName": "html2wp — HTML to WordPress",
1616
"description": "BETA. Convert a static HTML site into a standalone WordPress block theme, verified against the original at three viewport widths — and reviewed by you before handover. The conversion runs through a verified Astro 5 build, so the Astro project is a real output too — compared pixel by pixel against the source before anything WordPress-shaped is generated.",
17-
"version": "1.0.0-beta.26",
17+
"version": "1.0.0-beta.28",
1818
"author": {
1919
"name": "BELNEM s.r.o.",
2020
"email": "hello@html2wp.dev",

‎.claude-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "html2wp",
33
"displayName": "html2wp — HTML to WordPress",
44
"description": "BETA. Convert a static HTML site — or anything that builds to one (Lovable, Bolt, v0, Next export) — into a standalone WordPress block theme: verified pixel by pixel, pages, blog, forms, menus, SEO and redirects, with no plugin required and verification gates at every stage. Every conversion ends in your own page-by-page review; the gates catch most fidelity drift, not all of it.",
5-
"version": "1.0.0-beta.26",
5+
"version": "1.0.0-beta.28",
66
"author": {
77
"name": "BELNEM s.r.o.",
88
"email": "hello@html2wp.dev",

‎.codex-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "html2wp",
3-
"version": "1.0.0-beta.26",
3+
"version": "1.0.0-beta.28",
44
"description": "Convert static HTML or buildable web projects into verified, editable WordPress block themes.",
55
"author": {
66
"name": "BELNEM s.r.o.",

‎.github/workflows/gate.yml‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,29 @@ jobs:
139139
# files mention make-theme.mjs in a comment explaining what they
140140
# share with it, so a name-based grep reports hits on a clean tree
141141
# and becomes a check people learn to ignore.
142+
#
143+
# The Gutenberg compiler is the second generator. Its client half
144+
# (prepare-block-plan.mjs, gutenberg-*.py) ships, so these are
145+
# exact names, never a *gutenberg* pattern.
146+
#
147+
# The generators' own libraries follow. The client shares other
148+
# libraries with them (selector.mjs, nav-stamp.mjs), so these are
149+
# named one by one too. The list is tools/sync-lib.sh's moat_scan.
142150
found=$(find . -path ./.git -prune -o \
143151
\( -name 'make-theme.mjs' -o -name 'dist-to-bundle.mjs' \
144152
-o -name 'build-posts.mjs' -o -name 'build-products.mjs' \
153+
-o -name 'make-gutenberg-theme.mjs' -o -name 'gutenberg-compiler.mjs' \
154+
-o -name 'gutenberg-blocks.mjs' -o -name 'gutenberg-blocks-extra.mjs' \
155+
-o -name 'gutenberg-editor-css.mjs' \
156+
-o -name 'asset-refs.mjs' -o -name 'card-category.mjs' -o -name 'dates.mjs' \
157+
-o -name 'price-region.mjs' -o -name 'site-chrome.mjs' -o -name 'trailing-roles.mjs' \
158+
-o -name 'product-read.mjs' -o -name 'class-transplant.mjs' -o -name 'cart-parts.mjs' -o -name 'front-footer.mjs' \
159+
-o -name 'buy-style.mjs' -o -name 'card-wrappers.mjs' -o -name 'cart-badge.mjs' \
160+
-o -name 'cart-dress.mjs' -o -name 'commerce-chrome.mjs' -o -name 'commerce-frame.mjs' \
161+
-o -name 'empty-state.mjs' -o -name 'listing-order.mjs' -o -name 'menu-categories.mjs' \
162+
-o -name 'not-found.mjs' -o -name 'pager.mjs' -o -name 'related-rule.mjs' \
163+
-o -name 'reveal-css.mjs' -o -name 'shop-design.mjs' -o -name 'source-index.mjs' \
164+
-o -name 'lead-cards.mjs' -o -name 'article-head.mjs' -o -name 'cascade-slot.mjs' -o -name 'utility-body.mjs' -o -name 'owned-selectors.mjs' -o -name 'part-band.mjs' -o -name 'selector-tree.mjs' \
145165
-o -name 'visual-edit.zip' -o -name 'THREAT-MODEL.md' \
146166
-o -name 'gotcha-classification.md' -o -type d -name templates \) -print)
147167
if [ -n "$found" ]; then
@@ -150,3 +170,15 @@ jobs:
150170
exit 1
151171
fi
152172
echo "clean"
173+
174+
- name: no build debris
175+
run: |
176+
# Bytecode compiled for one Python is useless to every other and
177+
# unreadable to anyone auditing what the plugin runs.
178+
found=$(find . -path ./.git -prune -o \( -name __pycache__ -o -name '*.pyc' -o -name .DS_Store \) -print)
179+
if [ -n "$found" ]; then
180+
echo "::error::build debris is committed:"
181+
echo "$found"
182+
exit 1
183+
fi
184+
echo "clean"

‎.gitignore‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ node_modules/
22
.DS_Store
33
._*
44
*.log
5+
__pycache__/
6+
*.pyc

‎PRIVACY.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ days**.
6060

6161
One row per conversion: how many pages, how many chrome variants, whether it
6262
had a blog or a shop, whether it was a re-run, which stage refused if one did,
63-
and the generator's own warnings about itself. The warnings are redacted —
63+
how long each of the service's own scripts ran, and the generator's own
64+
warnings about itself. The warnings are redacted —
6465
page filenames and URLs are replaced before the row is written. Kept **365
6566
days**. No content, no addresses, no identifiers for the site.
6667

‎README.md‎

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ export, hand-written pages), becomes a standalone WordPress block theme. Pages,
1010
and redirects work with **no plugin required**. The markup stays the design's
1111
own — no page builder, no rebuild.
1212

13+
Two outputs, chosen when a conversion starts: the **HTML theme** (the
14+
default: the source markup kept 1:1, click-to-edit with Visual Edit Lite) or a
15+
**native Gutenberg block theme** whose pages, header and footer are core
16+
blocks, edited in the block editor. Visual Edit Lite is linked for both.
17+
1318
> **Beta.** This converts real sites and is used on real work, but the
1419
> gates catch most fidelity drift, not all of it. The last stage of every
1520
> conversion is your own page-by-page review, and the skill walks you
@@ -127,12 +132,18 @@ with `codex plugin remove html2wp@<that-name>` so it cannot shadow this one.
127132
/plugin install html2wp@html2wp
128133
```
129134

130-
Installing the plugin also registers one hook, `hooks/stage-progress.sh`, which
131-
runs after every Bash call. It reads the command line the tool just ran, and if
132-
that line invoked one of the conversion's stage scripts it reminds the model to
133-
report the stage boundary. It runs nothing, writes nothing, and sends nothing;
134-
on every other call it prints `{}` and exits. The source is short and is the
135-
whole of what it does.
135+
Installing the plugin also registers one hook, `hooks/stage-progress.sh` (the
136+
work is in `hooks/stage-progress.py`), which runs after every Bash call,
137+
successful or failed. It reads the command line the tool just ran, and if that
138+
line invoked one of the conversion's stage scripts it reminds the model to
139+
report the stage boundary and appends one timing row to
140+
`.h2wp-timing.jsonl` in that conversion's workspace. Under
141+
`~/.cache/html2wp/.sessions/` it keeps a small per-session pointer to the
142+
workspace, plus timing rows held until a workspace is known; both are swept
143+
after 30 days. It runs nothing but its own Python file and sends nothing over
144+
the network; on
145+
every other call it prints `{}` and exits. The source is the whole of what it
146+
does.
136147

137148
### Keeping Claude Code current
138149

@@ -308,9 +319,9 @@ and the skill will not call a conversion finished until it is done.
308319
- **a conversion report** — pages converted, menus wired, every finding from
309320
your review, every warning from every stage including the ones judged
310321
acceptable, and anything left for you to do;
311-
- **`visual-edit.zip`**, if the conversion was licensed. A free conversion
312-
ships the theme alone and it is fully usable — the editor is an extra, not
313-
a missing piece.
322+
- **the editor** is Visual Edit Lite, not in the bundle — the delivery is the
323+
theme alone and fully usable, with a link to the Lite release for anyone who
324+
wants click-to-edit authoring. (Visual Edit Pro is a separate purchase.)
314325

315326
## Requirements
316327

@@ -353,26 +364,38 @@ convert a real site and judge the result properly.
353364

354365
The free tier is for **evaluation, personal sites and other non-commercial
355366
work**. Converting a site for a client, or for a business you run, is
356-
commercial use and needs a licence key — see [LICENSE](LICENSE).
367+
commercial use and needs a Pro key — see [LICENSE](LICENSE).
357368

358-
| | Free | With a licence key |
369+
| | Free | Pro |
359370
|---|---|---|
371+
| Price | €0 | €49 / month · €490 / year |
360372
| Commercial use, client work | no | yes |
361-
| Pages per conversion | 5 | 20 (Theme Unlock, Pro) · 10 (yearly Visual Edit Pro) · 100 (Agency) |
362-
| Conversions | 3 per IP address | 1 (Theme Unlock) · 5 (Pro) · 30 (Agency) · 2 (yearly Visual Edit Pro) — a fixed pool per licence, not a monthly refill |
363-
| Parallel conversions | — | Agency: up to 3 side by side |
364-
| Re-runs | 5 in total | unlimited while the licence is live |
373+
| Conversions | 3 per IP address | unlimited |
374+
| Pages per conversion | 5 | unlimited |
375+
| Re-runs | 5 in total | unlimited |
365376
| Blog → WordPress Posts | yes | yes |
366-
| Shop → WooCommerce | no | yes — except Visual Edit Pro licences |
367-
| Visual Edit Pro plugin | — | delivered with every licensed conversion |
377+
| Shop → WooCommerce | no | yes |
378+
| Editor | Visual Edit Lite | Visual Edit Lite |
368379
| The theme itself | identical | identical |
369380

370-
Keys issued before the tiers existed keep the allowance they were issued
371-
with — the `credit` line at job open states yours either way.
381+
**Pro is a subscription.** Monthly or yearly, it converts without limit while
382+
it is live — cancel any time and the key keeps working to the end of the
383+
period you paid for. There is no per-page or per-conversion cap and nothing to
384+
run out of.
385+
386+
**Visual Edit Pro (€59 / year) is a separate product** — the paid editor, and
387+
only the editor. It is **not** a conversion key and includes no conversions;
388+
you buy it for a site and activate it there. See *Editing the converted site*
389+
below.
372390

373391
**The licence never buys fidelity.** The theme a free conversion produces is
374-
the same theme a licensed one produces — it buys page headroom, re-runs,
375-
WooCommerce and the editor.
392+
the same theme a Pro one produces — Pro buys page headroom, unlimited
393+
conversions and re-runs, and the shop stage.
394+
395+
- **Beta:** 30% off the first payment (first month or first year); full price
396+
after that.
397+
- Sold through **Paddle** (invoice with VAT). Refund within 14 days if the key
398+
was never used.
376399

377400
Licences: **[html2wp.dev/licenses](https://html2wp.dev/licenses)**
378401

@@ -397,12 +420,14 @@ For point-and-click editing there is **Visual Edit**, a WordPress plugin that
397420
lets you (or your client) edit text, images, links, forms and menus by
398421
clicking them on the page, while keeping the markup 1:1 with the design.
399422

400-
- **Free edition** — click-to-edit content editing, forms, menus, SEO fields.
423+
- **Lite** — click-to-edit content editing, forms, menus, SEO fields. Free,
424+
public, and what every conversion links you to (its GitHub release).
401425
- **Pro** — adds AI chat editing (with your own API key), theme export,
402426
Turnstile spam protection, and a 300-step edit history instead of 10.
403427

404-
Pro is delivered with every licensed conversion, and activating its Pro
405-
features on a site needs a Visual Edit Pro licence.
428+
No editor is bundled with a conversion — free or Pro, you are pointed at the
429+
Lite release to install. Visual Edit **Pro** (€59/year) is bought separately
430+
and activated on the site; it is the only thing that unlocks the Pro features.
406431

407432
Details: **[html2wp.dev/visualedit](https://html2wp.dev/visualedit)**
408433

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.0-beta.26
1+
1.0.0-beta.28

‎hooks/hooks.json‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@
1010
}
1111
]
1212
}
13+
],
14+
"PostToolUseFailure": [
15+
{
16+
"matcher": "Bash",
17+
"hooks": [
18+
{
19+
"type": "command",
20+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/stage-progress.sh"
21+
}
22+
]
23+
}
1324
]
1425
}
1526
}

0 commit comments

Comments
 (0)