Devlog
How rentczecher gets made: what worked, what didn't and what I learned along the way.
Is it legal to release this? Before going further I checked whether publishing rentczecher is safe. The answer shaped the tool: local, free, linking back to the portals, and licensed GPL. Read → A welcome and a choice of language The app learned light and dark, Czech and English, and a welcome wizard that asks for both on the first launch. Read → Each flat once The same flat on two portals used to be two rows in the inbox. Now it is one, and what you have seen follows the flat, not the posting. Read → A list and a detail view The inbox became a list beside the selected listing, with favourites, a price history per portal and a pin on the map. Read → Scoring you can see The profile editor is finished, and scoring got simpler: weights set directly on a split bar, previewed live on example listings. Read → The profile editor takes shape Prototypes first, scoring moved into the panel, and a clickable map of Czechia whose borders are computed from the nearest village. Read → Profiles move into the database Profiles stopped being lines in a config file. They live in SQLite now, have their own API, and point at real places from the RÚIAN register. Read → Every listing gets its place A listing's location used to be the portal's line of text. Now it is a set of official places, from the street up to the region. Read → Three systems, one build The repository split into engine, panel and shell, decisions became ADRs, and GitHub Actions now builds and smoke-tests the app on Linux, Windows and macOS. Read → A real desktop app The Tauri shell now ships a PyInstaller-frozen engine, and each of the two processes notices when the other one dies. Read → A window around the engine Proving the riskiest part first: a PyInstaller-packaged Python engine started by a Tauri desktop app, and the window waiting until it answers. Read → The panel and the inbox The part of the app you look at, built in Svelte: a typed client for the engine, a CORS surprise and why Czech needs three plural forms. Read → The engine learns to talk Before there could be a desktop app, the engine needed a way to be asked things. It got a FastAPI server with an OpenAPI contract and Server-Sent Events. Read →