Four things three apps had each written themselves
17 June 2026
Charts, invoice XML, Stripe and OAuth2 moved out of the applications and into the engine on the same day.
The rule for what belongs in the engine is not "would this be useful" but "has this already proven itself somewhere real, more than once". By June three applications had independently grown the same four pieces. factuur.software and logbook.tools both drew their own SVG charts and both wrapped Stripe. factuur.software had UBL invoice XML for PEPPOL delivery. wapps.nu and factuur.software both carried an OAuth2 client. Same problems, four separate solutions each, and every fix landing in one copy only.
What moved is the generic core, with the product vocabulary stripped out: DOM/charts draws spark lines, bars and donuts as dependency-free SVG, files/UBL builds UBL 2.1 invoice XML, payments/Stripe is a thin wrapper rather than an abstraction over Stripe's own model, and security/OAuth2 is a stateless client that holds no session of its own.
Both apps replaced their local copies the same afternoon, which is the actual test: an extraction that needs the app to change shape was extracted wrongly.
security/OAuth2 is the one that paid off most. Within two weeks it was carrying the social login resource, the token store and the OAuth connectors, none of which existed when it was harvested.
Engine 1.0. See the manual for each resource.