Rented a small VPS, set up Docker, deployed the open-source open-plaato-keg backend, pointed a subdomain at it, and got HTTPS working. Added a firewall, daily backups, and connected my own real Airlock to confirm the whole chain worked end to end.
A short log of how this went from "my Airlock is dead" to a working public service.
When Plaato shut down their cloud in November 2025, my own Airlock stopped working like everyone else's. Instead of throwing it away, I decided to fix it โ and then figured other people were probably in the exact same spot. Here's roughly how it went.
Rented a small VPS, set up Docker, deployed the open-source open-plaato-keg backend, pointed a subdomain at it, and got HTTPS working. Added a firewall, daily backups, and connected my own real Airlock to confirm the whole chain worked end to end.
Built a token generator so anyone can get a unique, collision-free ID without touching a terminal. Built a personal dashboard showing live temperature and fermentation activity. Confirmed the Brewfather integration works end to end with a real account.
Added rate limiting, password-protected the admin pages, set up public uptime monitoring, wrote an honest FAQ (including what happens if this project ever shuts down), and added a Ko-fi link for anyone who wants to help with server costs. Posted about it on homebrewing forums and got the first real users trying it out.
Added full support for Plaato Keg (not just Airlock) โ the server now auto-detects which device you have. Added the ability to see multiple devices under one saved link, and let people rename their own devices right from their dashboard. Reached out to Brewfather about potentially documenting this as an official recovery path.
Found and fixed a real vulnerability: two public endpoints were unintentionally returning every connected user's device data, including their access token. Locked those down at the server level the same day, and the token-generation page stopped relying on any endpoint that lists other people's devices. Around this time the project also crossed its first ~10 kegs and ~7 airlocks connected from real users.
Your dashboard now lets you tare and calibrate your keg scale with a known weight, and fill in beer style, brew date, OG/FG (with automatic ABV) โ all straight from your token link, no admin access needed. Grainfather and Brewfather integrations gained proper temperature-unit and specific-gravity settings instead of fixed defaults. And there's now a separate, clean view-only dashboard for anyone who just wants to check their kegs and airlocks at a glance โ with support for watching several devices on one link.
A batch of changes aimed at people who want to glance at their kegs and airlocks from across the room, not just from their phone:
Clean view dashboard (/view): each card now shows a small drink-type icon (beer, wine/mead, or cider) picked automatically from the beer style or label, plus a "last updated" timestamp so you can tell at a glance whether a device is actually reporting. Add more than one device to the same link and it now lays the cards out as a responsive grid instead of one long stacked column โ side by side on a tablet or TV, back down to a single column on a phone. You can also fix a specific card order with &order=tokenA,tokenB,... in the link if you don't want the default order.
Light/dark theme: every token-based page โ the clean view, your personal /my dashboard, and the new widget below โ now has a theme toggle, and remembers your choice by adding &theme=light or &theme=dark right into the link itself. That means a saved or embedded link keeps showing the theme you picked, even on a device you're not logged into.
Embeddable widget (/widget): a new, stripped-down version of the dashboard with no site navigation or menus โ just the card(s) โ meant to be dropped straight into an <iframe> on your own website or taproom display page. It takes the same token/theme/grid options as the clean view, plus &logo=0 if you'd rather not show the small CraftLab credit at the bottom.
Discoverability: your /my dashboard now has a clearly visible callout with your personal widget link, ready to copy โ so you don't have to already know the widget exists or guess the URL to find it.
Your dashboard at /my now has a "๐ Notifications" section on every device card. Turn it on and your browser will alert you when: a keg drops below a low-keg threshold you set (default 10%), a keg's weight drops suddenly without a pour (a possible leak), an airlock's temperature goes outside a range you set, or fermentation activity looks like it's stalled over the past 12 hours. No email, no third-party app, no account โ just your browser's own notification permission, tied to your device's token link. Runs a check every 5 minutes and only notifies when a condition actually starts (not on every check while it's ongoing), so it won't spam you.
A new "๐ฆ Batch History" section on each device card at /my lets you archive the current cycle as a permanent record โ beer style, tap date, OG/FG/ABV, and a summary of temperature and volume over the cycle for kegs; temperature range and peak bubble activity for airlocks. Archiving a keg clears its beer-specific fields so you can fill in the next one, while your tap name, calibration, and integration settings stay put. Every past archive stays listed right on the card, newest first.
Every device now has plain CSV and JSON download links right on its /my card โ next to the live chart for raw temperature/bubble/weight readings, and next to Batch History for your archived cycles. No login or extra tool needed; click a link and the file downloads straight from your browser. Handy for keeping your own long-term records, or pulling your data into a spreadsheet.
The clean view (/view), your /my dashboard, and the widget now support switching between metric and imperial โ temperature in ยฐC or ยฐF, keg volume in liters or gallons. Same pattern as the theme toggle: click the ๐ Metric / ๐ Imperial link to flip it, and your choice is saved right into the link itself as &units=imperial. Leaving it out, or opening an old saved link, keeps everything in metric exactly like before. It's purely a display setting โ your device still reports and stores its readings the same way no matter which units you're viewing them in.
Still very much a work in progress, run by one person in their spare time. If you find a bug or have an idea, the FAQ page has ways to reach me.