Development Diary
The story of building Sparge — session by session.
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, 2026Phase 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, 2026Phase 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, 2026Phase 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, 2026Phase 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, 2026Phase 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, 2026Phase 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, 2026Phase 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, 2026v1.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, 2026Sparge 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, 2026The 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, 2026The 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, 2026Content 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, 2026Sparge 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, 2026Two 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, 2026KIE 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