Development Diary

The story of building Sparge — session by session.

May 17, 2026

Archive Quality: Three Pipeline Bugs and What Caused Them

The Quarkus server is done. The Electron packaging is done. With the migration tool itself complete, I turned my attention to the output — 577 posts, a meani...

enrichment
April 21, 2026

Phase 6: The JEP is gone

When Phase 5 finished, the JEP call count was 22. After six weeks of incremental porting, the number is zero. Not “approaching zero” — zero. We ran grep -r "...

Quarkus
April 17, 2026

Phase 5: Porting Python's HTTP enrichment pipeline to Java

Phase 5 is enrich.py — 350 lines that transform a raw blog post HTML file into an archive-ready version. YouTube iframes become thumbnail figures. GitHub Gis...

Quarkus
April 15, 2026

Phase 4: Porting 16 HTML issue detectors from BeautifulSoup to Jsoup

Phase 4 is the scan pipeline — scan_html.py, 780 lines, 16 issue detectors, the most-used operation in the whole application. Every time you click Scan in th...

Quarkus
April 15, 2026

Phase 3: BeautifulSoup to Jsoup — porting DOM manipulation

Phase 3 ports the HTML manipulation layer: a DRL code reformatter, an XML pretty-printer, a code block fixer, and the HTML prettifier for the editor view. Th...

Quarkus
April 15, 2026

Phase 2: Porting state.py — 368 lines, 27 edge cases, one JSON file

state.py is where Sparge tracks everything that happens to a post: when the HTML was last scanned, what issues were found, whether the Markdown was generated...

Quarkus
April 15, 2026

Phase 1: When Python's mutable dict becomes a Java record

Sparge is a blog migration tool — it ingests HTML posts from live blog URLs, enriches them, and converts them to Jekyll Markdown. The server side is a Python...

Quarkus
April 15, 2026

Phase 0: Quarkus speaks Python (via JEP)

Phase 0 is done. Quarkus is handling all 35 API endpoints, every call delegated to Python via JEP.

Quarkus
April 13, 2026

v1.0.0, the CI obstacle course, and the Quarkus plan

v1.0.0 is tagged. Getting there took four tag pushes, three Windows CI failures each masking the next, and one discovery that GitHub Pages won't enable itself.

Release
April 10, 2026

Sparge Goes Native

Sparge is now a desktop app. Not a web server you start from a terminal — an actual .app you open, with a dock icon and everything.

Electron
April 9, 2026

The Archive Room

A UI redesign that gives Sparge its identity — parchment, ink, and slate. Warm instead of cold. Archive instead of terminal.

Design
April 5, 2026

The Edit Experience

Sparge could review posts. What it couldn't do was edit them comfortably. The HTML editor was a plain textarea — workable for short changes, unusable for a p...

UI
April 5, 2026

Content Fidelity

Sparge ingested HTML cleanly. What it didn't do was preserve the content that WordPress had embedded rather than written — YouTube iframes stripped silently,...

Pipeline
April 4, 2026

Sparge Is Born

The two-panel reviewer worked. At this point I had something that solved my immediate problem — but I also had a more interesting opportunity.

Launch
April 3, 2026

Two Apps, One Tool

I needed the archived HTML and the generated Markdown side by side, with the validation issues visible, without constantly switching files. Three things in o...

Architecture
April 1, 2026

KIE Archive: Day Zero

Fifteen years of posts on blog.kie.org. 577 mine — on Drools, rule engines, PHREAK, backward chaining, the full arc of the KIE project. I wanted them on my o...

Archive