June 2026
Shipping a self-hosted changelog widget under 5KB
Open-sourced a self-hosted changelog widget that does what Beamer and Headway do, minus the monthly bill. A single script tag embeds a 4KB widget in any web app, paired with a private React admin dashboard for publishing product updates. Runs entirely on your own infrastructure with SQLite and Docker.
Challenge
Changelog tools like Beamer and Headway work, but they ship user data to third parties, charge a monthly fee, and load external scripts into your app. Teams that want a changelog often just need a bell icon, an admin panel, and their own data staying put. The gap: a self-hostable option that is as easy to embed as a SaaS widget without the operational weight of a full database stack.
Approach
- • One script tag, no build step: The widget drops into any HTML with a single async script tag and configures via data attributes. No framework lock-in. Works in React, Vue, Angular, Svelte, or plain HTML.
- • 4KB widget bundle: The widget is 4KB gzipped with no fonts, CDNs, or third-party scripts. It loads asynchronously and never blocks page render.
- • Private React admin dashboard: A separate dashboard handles writing and publishing announcements with markdown support, draft state, tags, and per-announcement analytics, all behind your own login.
- • Anonymous analytics with salted hashes: Views and click-through rates are captured per announcement, but IPs are salted and hashed before storage, never kept raw. No user accounts, no tracking, no GDPR paperwork.
- • SQLite and Docker over Postgres: One docker compose up brings up the full stack. SQLite keeps it simple, with no external database, managed service, or extra containers. Deliberate tradeoff for low operational weight at small-to-medium scale.
- • Own your data: Announcements, analytics, and user read state all stay on your server. Nothing leaves your infrastructure. No analytics sent to a third party.
Outcome
- • Shipped and open-sourced under MIT license, with a live demo and full documentation available.
- • Proved that a self-hostable changelog can match the embed simplicity of a SaaS widget (one script tag, 4KB) without sending user data to a third party.
- • Kept the operational footprint to a single docker compose command by choosing SQLite over Postgres, accepting a known scale ceiling in exchange for zero-ops deployment.
- • Designed anonymous analytics as a privacy default rather than a config option: IPs are salted and hashed before storage, removing GDPR exposure by construction.
Skills Demonstrated
Open SourceSelf-Hosted SoftwareDeveloper ToolsReactSQLiteDockerPrivacy by DesignEmbeddable Widgets