Work
Things I design & build.
-
One language for web apps, CLIs and hardware
Boon is a declarative language where the runtime remembers values across reloads, enabling hot-reloading and state persistence without a database.
Statically typed with a Factorio-inspired visual debugger. Other inspirations described in the blog post The Boon of Dataflow.
Currently powered by a Rust interpreter with a custom lock-free actor-based engine. Exploring Differential Dataflow as an alternative — engines switchable in the Playground.
Related work
- MoonZoon — powers Boon Playground and the HTML renderer; its signals and styling influenced Boon’s design
- UI Parser — extracts UI metadata from web pages for UI recreation and visual testing in Boon
- RayBox — 3D SDF renderer that will render Boon UIs with real depth and lighting
- BoonComputer — RISC CPU on FPGA proving Boon describes hardware as naturally as software

-
NovyWave
Modern GTKWave alternative
A modern waveform viewer for FPGA and hardware debugging. Combines WebAssembly with Tauri so large captures stay fast while the UI remains portable.
Cross-platform (Linux, macOS, Windows, browser + remote server). Plugin-based architecture. Built with MoonZoon, funded by NLnet Foundation.

-
MoonZoon
Rust fullstack framework
Fullstack Rust without HTML, CSS, or JavaScript. Wasm frontend with signals (no Virtual DOM), native Rust backend. Typed routes and
UpMsg/DownMsgfor real-time communication. Auto-reload withmzoonCLI. Also works as frontend-only for static hosting.Boon Playground and NovyWave are built with MoonZoon. It also served as the foundation for a Norwegian bachelor thesis.
MoonZoon history
After maintaining Seed (early Rust frontend framework), I got frustrated with VirtualDOM and Elm-style patterns. Even created Rust React Hooks — with fewer limitations than JS ones — but still didn’t feel right. Writing HTML/CSS almost directly felt worse the more I dealt with CSS interactions and browser inconsistencies — complexity kept growing instead of shrinking.
Signals and simplified styling felt better. Typed messages simplified frontend-backend communication. That became MoonZoon in 2021. Since then I’ve pushed its limits: web workers with shared memory, desktop apps, animations, JS interop — and contributed to
wasm-bindgenalong the way.Read more in MoonZoon: Foundations and MoonZoon: 2021–2025.


-
BoonComputer
RISC CPU on FPGA — designed in Boon, running Boon
Proving Boon can describe hardware as naturally as software — the same language for web apps and CPU architecture.
Roadmap:
- Write a transpiler from Boon to Verilog for simple circuits
- Test inside a forked DigitalJS with UART debugging and Wasm Yosys
- Test on real hardware with peripherals like displays — for fun and confidence
- Build SuperCounter (web app, server, CLI, FPGA) all in Boon, working together
- Then the real RISC work begins
Ultimate goal: run Boon in Wasm executed on a CPU designed in Boon.
Future possibility: MRAM integration — instant resume, zero data loss, minimal standby power.

-
RayBox
3D (web) UI renderer with SDF and PBR
RayBox renders UI as real 3D objects using Signed Distance Functions and Physically-Based Rendering.
The idea is simple: buttons, inputs, and dialogs should be physical:
- A button has actual depth and sits closer to the camera.
- A dialog floats in front of content and casts real shadows.
- An inset effect emerges naturally from geometry.
The renderer will use Slang as the shading language, targeting both web and native GPU backends.
Motivation: Building a cross-platform graphics library while exploring more intuitive GUI APIs. Future applications may include simple games and 3D printing.
-
Prompter
Web UI for Claude Code sessions
Prompter is a Rust CLI that wraps Claude Code in a pseudo-terminal while exposing a web dashboard for monitoring and interacting with AI sessions.
Why I built it:
- Mobile AI access: Tunnel the web interface to your phone and interact with your CLI AI agent from anywhere - on a tram, in a waiting room, or away from your desk
- Agent supervisor: Automatically nudges idle AI agents and protects critical files via content hashing - preventing agents from “cheating” by modifying deterministic tests meant to verify their own work
- Audit trail: Stores complete prompt history for compliance and auditing
-
LocalSearch
Rust full-text search library for the browser (Wasm)
Fast searching and autocomplete without server round-trips.
Performance: indexes and searches 20,000 film titles in a few milliseconds.
I was hired to write this library to mitigate problems with slow or DDoSed backend servers — too many users hammering search queries.
Also integrated in the Persons.pro prototype for better UX, decentralization, and reduced backend costs.

-
UI Parser
Extract UI metadata from web pages
UI Parser extracts visual metadata from web pages for UI recreation in Boon or other languages, and for integration tests that verify rendered output.
What it captures:
- Element bounds and positions
- Computed styles
- Text and pseudo-element sizes
- Actually used fonts
- Layout relationships
A browser extension adds a new tab to DevTools, similar to the standard Elements panel.

-
Persons.pro
The app for freelancers, open-source creators and digital product makers
Hire a freelancer? Platform takes 10-20%. Sponsor a creator? 5-12%. Sell an ebook? Up to 90% gone. Plus 3-5% payment processing fees.
The fix:
- Modern banking or stablecoins for near-zero fees.
- Escrow with visible funds that can earn returns.
- Verified identities, fewer scams.
Future: Local-first app with Boon, LocalSearch, and nostr or iroh. Eventually: Concordium for KYC and transactions.