Skip to content

Commit 61ba708

Browse files
author
BELNEM s.r.o
committed
1.0.0-beta.24 — the conversion report is delivered with the theme
CONVERSION-REPORT.md now lands in the project directory beside the theme ZIP, where the ZIP was previously the only thing that crossed out of the workspace. It is the record of what the conversion did, what it found and what is left open, and it was worth nothing in a cache directory nobody opens. Writing it is also no longer optional. whats-here.sh keys on that filename to tell a finished conversion from an abandoned one, and cleanup.sh keeps it by name — but the documented contract said the report "may be written", so a run that only printed it looked exactly like one that died at stage 5, and a later repair visit would resume rather than repair. Repairs re-copy it, because a rebuilt theme with the old report beside it is a document describing something that no longer exists under a filename that did not change.
1 parent 7da58c3 commit 61ba708

9 files changed

Lines changed: 57 additions & 32 deletions

File tree

‎.claude-plugin/marketplace.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"source": "./plugins/html2wp",
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 — proven pixel-identical to the source before anything WordPress-shaped is generated.",
17-
"version": "1.0.0-beta.23",
17+
"version": "1.0.0-beta.24",
1818
"author": {
1919
"name": "BELNEM s.r.o.",
2020
"email": "hello@html2wp.dev",

‎VERSION‎

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

‎plugins/html2wp/.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 — proven pixel-identical to the source before anything WordPress-shaped is generated.",
17-
"version": "1.0.0-beta.23",
17+
"version": "1.0.0-beta.24",
1818
"author": {
1919
"name": "BELNEM s.r.o.",
2020
"email": "hello@html2wp.dev",

‎plugins/html2wp/.claude-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "html2wp",
33
"description": "BETA. Convert a static HTML site — or anything that builds to one (Lovable, Bolt, v0, Next export) — into a standalone WordPress block theme: pixel-1:1, 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.",
4-
"version": "1.0.0-beta.23",
4+
"version": "1.0.0-beta.24",
55
"author": {
66
"name": "BELNEM s.r.o.",
77
"email": "hello@html2wp.dev",

‎plugins/html2wp/.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.23",
3+
"version": "1.0.0-beta.24",
44
"description": "Convert static HTML or buildable web projects into verified, editable WordPress block themes.",
55
"author": {
66
"name": "BELNEM s.r.o.",

‎plugins/html2wp/README.md‎

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# html2wp
1+
# html2wp — convert HTML to a WordPress theme
22

3-
**Turn a static site into a real WordPress theme — pixel-identical, and still editable.**
3+
**HTML to WordPress — pixel-identical, and still editable.**
44

5-
A Codex and Claude Code plugin that converts a static HTML site, or anything that builds
6-
to one (Lovable, Bolt, v0, Claude artifacts, Next.js export, hand-written
7-
pages), into a standard WordPress block theme. Pages, blog, forms, menus, SEO
5+
A Claude Code and Codex plugin that converts HTML to WordPress: a static site, or
6+
anything that builds to one (Lovable, Bolt, v0, Claude artifacts, Next.js
7+
export, hand-written pages), becomes a standalone WordPress block theme. Pages, blog, forms, menus, SEO
88
and redirects work with **no plugin required**. The markup stays the design's
99
own — no page builder, no rebuild.
1010

@@ -306,7 +306,7 @@ and the skill will not call a conversion finished until it is done.
306306
| Node.js | 20 or newer |
307307
| Python 3 | with Playwright (chromium) and Pillow |
308308
| Docker | plus `docker compose` — used for the verification WordPress |
309-
| Also | `php-cli`, `jq`, `curl`, `bash` |
309+
| Also | `php-cli`, `jq`, `curl`, `bash`, `tar` |
310310
| Target | WordPress 6.6 or newer |
311311

312312
You do not have to work that list out yourself. Ask for a conversion and the
@@ -332,7 +332,7 @@ python3 -m pip install playwright pillow && python3 -m playwright install chromi
332332

333333
## What is free
334334

335-
**Three conversions per network address, up to 5 pages each**, plus five
335+
**Three conversions per IP address, up to 5 pages each**, plus five
336336
re-runs to share between them.
337337
A re-run is the same built site uploaded again — so fixing how a page was
338338
described and trying again does not spend a conversion. That is enough to
@@ -346,7 +346,7 @@ commercial use and needs a licence key — see [LICENSE](LICENSE).
346346
|---|---|---|
347347
| Commercial use, client work | no | yes |
348348
| Pages per conversion | 5 | 20 (Theme Unlock, Pro) · 10 (yearly Visual Edit Pro) · 100 (Agency) |
349-
| Conversions | 3 per network address | 1 (Theme Unlock) · 5 / 30 days (Pro) · 50 / 30 days (Agency) · 2 (yearly Visual Edit Pro) |
349+
| Conversions | 3 per IP address | 1 (Theme Unlock) · 5 / 30 days (Pro) · 50 / 30 days (Agency) · 2 (yearly Visual Edit Pro) |
350350
| Parallel conversions | — | Agency: up to 3 side by side |
351351
| Re-runs | 5 in total | unlimited while the licence is live |
352352
| Blog → WordPress Posts | yes | yes |
@@ -449,6 +449,8 @@ can catch one, and the answer is a decision rather than a reading of it.
449449
## Links
450450

451451
- Documentation — [html2wp.dev/docs](https://html2wp.dev/docs)
452+
- Converting a Lovable project, step by step — [html2wp.dev/blog/lovable-to-wordpress](https://html2wp.dev/blog/lovable-to-wordpress/)
453+
- Converting a design made in Claude — [html2wp.dev/blog/claude-design-to-wordpress](https://html2wp.dev/blog/claude-design-to-wordpress/)
452454
- Visual Edit plugin — [html2wp.dev/visualedit](https://html2wp.dev/visualedit)
453455
- Licences — [html2wp.dev/licenses](https://html2wp.dev/licenses)
454456
- Done-for-you conversions — [24design.eu](https://24design.eu/)

‎plugins/html2wp/VERSION‎

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

‎plugins/html2wp/skills/html2wp/SKILL.md‎

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,17 @@ The owner's project keeps exactly this:
123123
their-project/
124124
├── <their source, untouched>
125125
├── <slug>-<version>.zip the theme
126+
├── CONVERSION-REPORT.md what was done, what was found, what is left
126127
├── visual-edit.zip only when the conversion was licensed
127128
└── .html2wp/state.json one hidden pointer: build id + workspace path
128129
```
129130

131+
The report is delivered beside the theme deliberately. It was workspace-only
132+
until the owner asked why a document the product advertises was not in the
133+
folder the ZIP arrived in — and they were right: it is the record of what this
134+
conversion did, what it found and what is still open, and it is worth nothing
135+
in a cache directory nobody opens. It is the one non-ZIP file that crosses.
136+
130137
`.html2wp/state.json` is the single exception — a hidden pointer, no secret in
131138
it (see below), so a later `/html2wp repair` finds the workspace that holds
132139
the re-run kit. If the workspace has aged out, that file is enough to say so
@@ -147,8 +154,8 @@ Why the workspace is a cache dir and not the project:
147154
`.html2wp/state.json` must never contain an API secret, a bearer token or a
148155
key — it is a pointer, not a credential.
149156

150-
**Deliver by copying, at stage 6, the ZIP(s) from `{workspace}` into the
151-
project. Nothing else is copied out.**
157+
**Deliver by copying, at stage 6, the ZIP(s) and `CONVERSION-REPORT.md` from
158+
`{workspace}` into the project. Nothing else is copied out.**
152159

153160
**`assets/scripts/…` throughout this file is relative to THIS FILE'S
154161
directory, never to the workspace.** Resolve it once, at the start, and use
@@ -209,7 +216,8 @@ assets/scripts/whats-here.sh <dir>
209216
re-run kit in `~/.cache/html2wp/jobs/<slug>/`, and a pointer at
210217
`<project>/.html2wp/state.json`. So when the owner returns for a repair: read
211218
that pointer, and run `whats-here.sh` against the `workspace` it names. Run
212-
against the project directory it would see only the ZIP and a pointer, report
219+
against the project directory it would see only the ZIP, the report and a
220+
pointer, report
213221
"nothing converted here", and start a NEW conversion out of the allowance —
214222
the exact mistake this stage exists to prevent. No pointer and no workspace
215223
means it really is a first conversion; resolve `{workspace}` (above) and begin.
@@ -1799,23 +1807,29 @@ project, and where the machine is left tidy.
17991807
- **`visual-edit.zip`**, when the conversion was licensed — it came back beside
18001808
the theme. A free-tier delivery ships the theme alone and is fully usable:
18011809
say so plainly rather than leaving the owner wondering what is missing.
1802-
- **A conversion report**: pages converted; the chrome variants kept and which
1803-
pages use each; the menus wired, per location; the per-page findings from
1804-
stage 5.5; every warning from every stage, including the ones you decided
1810+
- **`CONVERSION-REPORT.md`**: pages converted; the chrome variants kept and
1811+
which pages use each; the menus wired, per location; the per-page findings
1812+
from stage 5.5; every warning from every stage, including the ones you decided
18051813
were acceptable; inherited console errors from gate A; and anything left for
1806-
the owner to do. It is printed to the owner and may be written into the
1807-
workspace — never into the project as a file.
1814+
the owner to do. **Print it to the owner AND write it to
1815+
`{workspace}/CONVERSION-REPORT.md`** — writing it is not optional, and used to
1816+
be described as though it were. `whats-here.sh` treats its absence as a
1817+
conversion that did not finish and answers a later visit with RESUME, so a run
1818+
that only printed the report was indistinguishable from one that died at stage
1819+
5. `cleanup.sh` keeps it by name for the same reason.
18081820
- **The credit that is left**, as the service stated it. The transform reply
18091821
carried a `credit` line (the script printed it as `credit: …`) counting this
18101822
conversion — relay it verbatim so the owner knows where they stand before the
18111823
next one: how many free conversions and re-runs remain, or a licence's next
18121824
window. Do not compute it yourself; pass on the service's sentence.
18131825

1814-
- **Hand only the ZIP(s) to the project.** Copy them out of the workspace into
1815-
the owner's project directory; leave everything else where it is.
1826+
- **Hand the ZIP(s) and the report to the project.** Copy them out of the
1827+
workspace into the owner's project directory; leave everything else where it
1828+
is.
18161829

18171830
```bash
18181831
cp {workspace}/{slug}-{version}.zip <project>/
1832+
cp {workspace}/CONVERSION-REPORT.md <project>/
18191833
# licensed conversions only:
18201834
cp {workspace}/visual-edit.zip <project>/
18211835
```
@@ -1828,9 +1842,12 @@ project, and where the machine is left tidy.
18281842
"{slug}-{version}" "{workspace}" "{slug}-{version}.zip" > <project>/.html2wp/state.json
18291843
```
18301844

1831-
After this, the project contains the owner's source, the ZIP(s) and
1832-
`.html2wp/state.json` — nothing else. No `verify-*`, no `astro-project`, no
1833-
`theme/`, no `*-report.json` in the project. Those stay in `{workspace}`.
1845+
After this, the project contains the owner's source, the ZIP(s),
1846+
`CONVERSION-REPORT.md` and `.html2wp/state.json` — nothing else. No
1847+
`verify-*`, no `astro-project`, no `theme/`, no `*-report.json` in the
1848+
project. Those stay in `{workspace}`. The distinction is not tidiness for its
1849+
own sake: the report is a document written for the owner, the rest is
1850+
scaffolding written for the pipeline.
18341851

18351852
- **Ask before leaving a WordPress container running.** Every conversion (and
18361853
every repair) starts a WordPress in Docker — `h2wp-<slug>-<runid>` — and they
@@ -1952,8 +1969,8 @@ What to do instead, in order:
19521969
2. **Check the deployed plugin is the delivered one** (below) — a stale
19531970
`bridge.js` looks exactly like a plugin bug and is fixed by reinstalling,
19541971
not by editing.
1955-
3. **If it truly is the plugin, report it** — `assets/scripts/report.sh`, or
1956-
an issue on the plugin's own repository. A fix there ships to everybody as
1972+
3. **If it truly is the plugin, report it** — `POST /v1/report` (the form is
1973+
in the README under Status), or an issue on the plugin's own repository. A fix there ships to everybody as
19571974
a release, which is the only way a plugin fix is allowed to reach a site.
19581975

19591976
The same rule holds for the delivered theme: hand-editing it is pointless
@@ -2015,8 +2032,14 @@ the result over the ZIP in the project (stage 6), then ask about the container
20152032
version (`--version=`), delivers `<slug>-<new>.zip`, and says which ZIP is
20162033
now the one to install so two versions in the folder are never ambiguous.
20172034

2018-
Either way the project ends with a current ZIP and nothing else new, exactly
2019-
as a first conversion leaves it.
2035+
**Re-copy `CONVERSION-REPORT.md` too.** A repair that rebuilds the theme and
2036+
leaves the old report in place ships a document describing a theme that no
2037+
longer exists — and the owner has no way to tell, because the filename did not
2038+
change. Update the report with what the repair did, then copy it over the
2039+
delivered one.
2040+
2041+
Either way the project ends with a current ZIP, a current report and nothing
2042+
else new, exactly as a first conversion leaves it.
20202043

20212044
**And tell the owner what the repair cost.** Re-delivering runs the transform,
20222045
so its reply carries a fresh `credit` line (printed as `credit: …`) — relay it:
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.0-beta.23
1+
1.0.0-beta.24

0 commit comments

Comments
 (0)