← All case studies

Case Study · Government & defense

We modernized this once the hard way.Then we did it again in a fraction of the time.

The Ozone Widget Framework is a DoD and NSA-originated widget portal. Modernizing it once took us years. We rebuilt the whole application from a clean foundation, with local LLMs in a closed environment, in a fraction of the time.

★ Open source Sector  Government / defense Built with  Local LLMs, closed network Then → now  Years → a fraction

The before and after

Same load-bearing ideas. A completely modern foundation.

★ Legacy OWF

The original framework. Grails 2, ExtJS and Dojo, a retired stack. Image courtesy of the upstream OWF project, owfgoss.org.

★ OWF Modern, 2026

Our rebuild. End-to-end TypeScript, React 18, a live event bus, and a tactical Common Operating Picture out of the box.

The first campaign

Years of headaches against legacy software.

The original modernization was a multi-year effort. Legacy code, outdated documentation, missing stakeholder requirements, and shifting standards constraints made every step a slog. Large teams, long timelines, and slow feedback loops were simply the cost of working with software that the industry had already left behind.

Everything we learned doing it the hard way became the guardrails for doing it fast.

The second campaign

A clean rebuild, with local models, in a closed environment.

Several years later we rewrote the same application from scratch. We started with parallel research into the real OWF semantics, wrote a design brief and an implementation plan, and only then built. The work ran on local LLMs inside a closed environment the entire time: no mission data left the room, and no sensitive context touched a public model. The AI accelerated the building. It never touched the data.

The result keeps OWF's developer contract intact, a widget is still "a web page plus a descriptor," while replacing the retired implementation with a modern, test-backed, well-documented stack. Headless Playwright end-to-end tests prove the inter-widget wiring and caught two real bugs before review.

Legacy to modern

The stack, layer by layer.

LayerLegacy OWF · ~2013–2016OWF Modern · 2026
BackendGrails 2 (Groovy/Java) on a servlet containerNode + Hono + Zod
Container UIExtJS / Sencha + DojoReact 18 + Vite + Tailwind v4
LayoutExtJS portal / desktop panesFree-form react-grid-layout grid
Build & deployGrails build, WAR to Tomcat/Jettynpm workspaces, Vite + tsup, single-port Hono, Docker
VerificationManualHeadless Playwright E2E across the bus

Inside the rebuild

Ten widgets, five dashboards, wired live.

eventing · intents · drag-and-drop · preferences · launcher · marketplace

What the rebuild shipped

Faster, and built to survive review.

How it actually went

Ten diagrams, one rebuild.

legacy teardown, modern architecture, and the wiring in between

01 · Legacy architecture
02 · Legacy IWC: pub/sub hub
03 · Modern architecture
04 · Modern IWC: eventing
05 · Intents: routing decision
06 · Cross-iframe drag-and-drop
07 · Legacy domain model
08 · Modern domain model
09 · Build journey by stage
10 · Verification flow

Click any diagram to view it full size. All ten render in context inside the implementation plan, alongside endpoint mappings, the domain model, and the two bugs the end-to-end run caught and how we fixed them.

Read the record

The full case study, in detail.

Architecture diagrams, endpoint mappings, IWC sequence diagrams, the domain model, and the phases the build actually went through.

Have a legacy system that needs the same treatment?

Commission the rebuild, or stand up the Minutemen stack inside your own walls.

Request a muster