Signature module · JT Digital

fluent-html

We wrote the layer most studios rent.

Typed · Server-rendered · Ours

fluent-html is our TypeScript HTML builder. Every screen at JT Digital is written in it. Pages are TypeScript functions. The compiler reads them before any user does. They render on the server and use HTMX for interaction, so there is no separate browser application to keep in sync. A broken link, a mistyped colour, a missing form field: the build catches all three. We wrote the toolkit, so a fix waits on no one else's release.

fluent-html what we write
A ( "Book a call" , CtaArrow())
.background ( "ink" )
.rounded ( "full" )
what you get

What the compiler catches

Three mistakes that never reach a screen.

Each one is an ordinary change where the rest of the code fell behind. Pick a case to see the code and the error.

the bench pick a mistake

A refunded state is added to the order type. The badge on the orders screen still handles two.

type Order =
| { status: "paid" ; total: number }
| { status: "shipped" ; eta: string }
| { status: "refunded" ; reason: string }
Match(order, "status" , {
paid: (o) => Badge(o.total),
shipped: (o) => Badge(o.eta),
})

The build stops here

error TS2769: Property 'refunded' is missing in type '{ paid: …; shipped: … }' but required.

The orders screen cannot compile until it says what a refunded order looks like.

The toolkit itself

The toolkit has its own site.

The full documentation lives on the toolkit's own site: the API, the rules, and the reasoning behind them.

Next step

See it before you commit.

Fifteen minutes on a call, then a working screen of your product. That tells you more about a toolkit than any list of features.