Browser Runtime

Lua, in the browser, mounted per route.

The page you're reading is served by the C MVC framework. Pages that need interactivity declare a data-lua-module attribute on the body. A wasmoon-compiled Lua engine boots in the browser, fetches only that module, and runs it. No virtual DOM, no React. Signals + hyperscript, ~180 lines of lua.

[01] server
stamps body
data-lua-module="..."
[02] boot.js
reads attr,
mounts library + page
[03] wasmoon
lua.doFile()
renders into #app
Runtime topology
  • wasmoonLua 5.4 → WASM
  • reactive.luasignal / effect / computed
  • h.luahyperscript dom builder
  • manifest.jsonlibrary mount list
  • pages/*.luafetched on demand
Page weight, this route
lua-framework.js ~168 KiB
3× library .lua ~2 KiB
page module .lua ~0.6 KiB
non-lua routes 0 bytes
Design note

The page weight line above is real. Pages without data-lua-module ship zero wasmoon — boot.js returns early. The framework JS is only fetched once per origin and cached.

Selected Web Builds shipped // angular + .net // commercial
shipped
[build_01]_SCRUM_DASHBOARD

Real-time sprint board with AI assist

Live sprint board over Jira Cloud. SignalR streams delta updates so the board reacts the instant tickets move. A D3 force graph lays out tag-association clusters across the backlog. An OpenRouter-backed chat assistant answers sprint-state questions inline.

Angular .NET SignalR D3 Jira Cloud OpenRouter
[build_02]_ENTERPRISE_CLIENT_WORK

Fintech, banking, and multilingual WordPress at scale

Angular and .NET applications inside banking environments. Over sixty payment-API integrations spanning fintech rails. Multilingual WordPress at enterprise scale — localized content, custom plugins, integrations against legacy systems. Client names withheld; happy to walk through any of it under NDA.

Angular .NET WordPress payment APIs i18n banking
60+
payment APIs integrated
ongoing