Concept2023 - 2025 · Full-Stack Engineer

Formwork

The white-label forms engine Google and Microsoft Forms never let you embed.

Formwork preview

A headless, embeddable forms and quiz engine built to be carried inside someone else's product the way a WordPress plugin is — a real API/SDK boundary in front of a Knockout.js + vanilla JS render, backed by RethinkDB's live changefeeds instead of a bolted-on polling layer.

The Motivation

Google Forms and Microsoft Forms both stayed products, not platforms — you can use them, but you can never fold form-building into your own site as a first-class piece of your own service. I wanted to build the version WordPress got right with plugins: forms as a genuinely embeddable, white-label component that a host site carries as part of its own offering, not an iframe pointing back at someone else's branded tool. That meant designing a real headless API/SDK boundary from day one, and it meant refusing to build the render in React. A component tree with its own build step and opinionated DOM is exactly the kind of gate-keeping that stops someone from truly hosting their own iteration of the widget. Knockout.js's MVVM bindings live directly in plain HTML, so the entire builder and runtime can be copied, re-skinned, and re-hosted by anyone without touching a bundler. As a solo proof-of-concept, it was picked up and set down across several non-contiguous years rather than shipped in one push — each time work resumed, I duplicated the prior script and stylesheet forward into a new dated file instead of branching in git, an informal snapshotting habit that let me trace how the approach itself changed across those gaps.

The Problem It Solves

Existing forms products are single-tenant SaaS you visit, not infrastructure you can embed — there was no path to offering 'forms' as a white-labeled feature of your own product the way a WordPress site owner drops in a contact-form plugin. And most alternatives that tried reached straight for React, which assumes a build pipeline and a component tree most host sites either can't or won't adopt — quietly re-gate-keeping the very embeddability the product was supposed to solve for.

Zero React / zero build-step (vanilla JS + Knockout.js)
Client rendering dependency
SignalR hub: form edits, deletions, submissions, live co-edit broadcasts
Real-time channels
Headless GET/POST/PUT/DELETE endpoints per form, CSRF-exempt for cross-origin SDK use
API surface
Resumed and rebuilt across 3 separate stretches (2023, 2025, 2026), each preserved as its own dated file snapshot
Development span
Languages
C#JavaScript
Frameworks
ASP.NET Core Razor PagesKnockout.jsSignalRjQueryBootstrap
Stack & Infra
RethinkDBDockerSignalR
Skills Applied
API/SDK DesignReal-Time SystemsMVVM Data BindingEmbeddable Widget ArchitectureWhite-Label Product Design