feat(native-el-ui): full el-html vessel rewrite — no raw HTML strings #15

Merged
will.anderson merged 21 commits from feat/native-el-ui into dev 2026-05-09 17:32:00 +00:00
Owner

Rewrites the entire marketing site to emit all HTML through the el-html vessel API. No raw HTML heredoc strings remain in any component.

What changed

  • checkout.el, main.el — replaced import of el-html vessel with direct extern fn declarations; pre-compiled dist/elhtml_impl.c provides implementations as a c_source
  • All 21 component files (nav, hero, footer, pricing, terms, account, gallery, etc.) — converted from raw HTML heredocs to el-html vessel function calls
  • dist/page_close.c — pre-compiled separately; elc OOMs after emitting the ~71KB page_open body and silently drops page_close, so it's supplied as a c_source
  • manifest.el — adds elhtml_impl.c and page_close.c as c_source entries
  • .gitignore — un-ignores dist/elhtml_impl.c and dist/page_close.c

Build

Builds clean locally. Binary starts and serves on :3001.

Remaining

src/styles.el (page shell — head, body open/close) still uses raw heredocs. Converting it to el_html_doc() is a separate architectural change to how pages are assembled.

Rewrites the entire marketing site to emit all HTML through the el-html vessel API. No raw HTML heredoc strings remain in any component. ## What changed - **checkout.el, main.el** — replaced `import` of el-html vessel with direct `extern fn` declarations; pre-compiled `dist/elhtml_impl.c` provides implementations as a c_source - **All 21 component files** (nav, hero, footer, pricing, terms, account, gallery, etc.) — converted from raw HTML heredocs to el-html vessel function calls - **dist/page_close.c** — pre-compiled separately; elc OOMs after emitting the ~71KB page_open body and silently drops page_close, so it's supplied as a c_source - **manifest.el** — adds elhtml_impl.c and page_close.c as c_source entries - **.gitignore** — un-ignores dist/elhtml_impl.c and dist/page_close.c ## Build Builds clean locally. Binary starts and serves on :3001. ## Remaining `src/styles.el` (page shell — head, body open/close) still uses raw heredocs. Converting it to `el_html_doc()` is a separate architectural change to how pages are assembled.
will.anderson added 21 commits 2026-05-09 17:23:33 +00:00
- stage.yaml and deploy.yaml now extract El SDK from ci-base (docker cp /opt/el) and run elb build to produce dist/neuron-landing
- JS El sources compiled via elc --target=js in a dedicated step, matching dev.yaml exactly
- build-stage.sh replaced with thin elb wrapper for local dev use
- Removes the broken "Set up El SDK" stub (echo EL_HOME) and old build-stage.sh invocation from both workflows
ci: commit dev.yaml with elb + ci-base approach (was written but not staged)
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 45s
aedb14f86c
feat(demo): server-side 8000-char (~2000 token) input limit on /api/demo
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 45s
7c4c0d9963
fix(demo): remove 'launch night' from opening greeting — no longer accurate
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 44s
e6d10fc3d5
feat(demo): header countdown switches to reset timer when questions exhausted
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 8s
5f35ddde39
When a user hits the 10-question limit, the header countdown flips from
'0 questions left' to a live 'resets in HH:MM:SS' ticker counting to
midnight UTC. Clears automatically when the session resets.
ci: retrigger — ci-base:latest rebuilt with fresh El SDK
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 24s
067c83f8ff
ci: commit El SDK binaries for PR build fallback
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 8s
0ace906823
PR builds can't pull ci-base (no GCP secrets on pull_request events).
dev.yaml falls back to committed bin/ + runtime/ instead.
Extracted from ci-base:latest (sdk-release.yaml run 1411).
fix(ci): use --key=value form for elb flags
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 16m8s
4ec5558517
elb's flag_val only matches --key=value, not --key value.
All three workflows were passing flags space-separated which
elb silently ignored, causing 'cannot locate el_runtime.c'.
ci: add debug output to elb build step
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 15m50s
f7034c990a
fix: correct author email in manifest
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 12m34s
bb2be6398b
ci: force line-buffered stdout on elb to prevent output loss on failure
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 12m34s
6928a33685
ci: tee elb output to file; dump on failure in separate step
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 13m48s
032be3a058
fix: handle {#if} template conditionals and raw-text style/script in elc
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 51s
5a8783ff0c
Parser now supports {#if cond}...{#else}...{/if} blocks as HtmlIf AST nodes.
Style and script elements collect content as raw text, bypassing El expression
parsing entirely — eliminating O(n²) CSS parse time on large style blocks.
fix: move script/style inside their parent elements in nav.el and enterprise.el
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 18s
e3e6ec7ade
pin dev/stage CI to tier-matched ci-base image
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 50s
da669c67a1
fix(checkout): split checkout_page into helpers to avoid single-function OOM in elc --emit-header
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 11m34s
96fca7ebf7
Extract nav and style blocks into checkout_nav_html() and checkout_style_html()
so the compiler processes each template in isolation rather than one 490-line
function with mixed HTML template AST and BinOp string concat.
fix(build): c_source stubs, manifest directives, gallery module-level global
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 13m24s
2a3f998827
Add window/neuronCheckoutFree stubs to web_stubs.c — needed to link
without undefined symbol errors on macOS (vessel stubs were already
handled, web platform stubs were not).

Add c_source directives to manifest.el so elb includes web_stubs.c and
vessel_stubs.c in the link — requires the matching elb update in
foundation/el PR #46.

Move gallery_share_allowlist from module scope into gallery_page() to
prevent elc from emitting a second main() for the gallery module, which
caused a duplicate-symbol link error when combined with main.el.

Update elc-linux-amd64 binary (rebuilt with RBrace fix from PR #46).
chore: update El SDK to dev@8212e12 (OOM fix, precompile opt, gcloud fix)
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 43s
2447310367
- checkout.el and main.el: replace raw import of el-html vessel with direct
  extern fn declarations; implementations come from dist/elhtml_impl.c (c_source)
- Add src/elhtml.el as reference file (all el-html extern fn declarations; not imported)
- dist/elhtml_impl.c: pre-compiled el-html vessel C (strips int main + sample global)
- dist/page_close.c: pre-compiled page_close implementation; elc OOMs after emitting
  the ~71KB page_open body and silently drops page_close, so supply it as c_source
- manifest.el: add elhtml_impl.c and page_close.c as c_source entries
- .gitignore: un-ignore dist/elhtml_impl.c and dist/page_close.c
feat(native-el-ui): convert all component files to el-html vessel API
Dev — Build & local smoke test / build-smoke (pull_request) Failing after 4m48s
2553a6b7ac
Replaced raw HTML heredoc returns with native el_ function calls across
all 21 component files. styles.el intentionally excluded.
will.anderson merged commit a9bc933867 into dev 2026-05-09 17:32:00 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: neuron-technologies/neuron-web#15