The need
Trip logging is a legal requirement. If you use a company car, you have to keep records. Every freelancer and small business deals with this — and most do it poorly.
Enterprise systems cost thousands per month, require training, and solve a hundred problems when you need three. Spreadsheets work, but it's manual labor — once a month you sit down with a pile of receipts and copy numbers. Errors are inevitable. Integration with accounting? Manual, or not at all.
Clearly defined scope, clear regulations, clear target audience. No market experimentation — the market is there, it's just not being served properly.
Defining the scope
Target audience: freelancers, small businesses, 1–10 cars. Not a corporation with a fleet of hundreds. That's a different product for different people.
Core rule: it has to be faster than a spreadsheet. If the user spends more time entering a trip in the app than typing it into Excel, nobody will use it.
AI receipt recognition isn't a nice-to-have — it's the core feature. Snap a receipt, AI extracts liters and price, done. Automatic calculation of allowances, reimbursements, and fuel costs according to Czech legislation. Export to PDF and Excel in a format accountants accept without questions.
Fleet management for 100+ vehicles. GPS tracking. Fleet analytics. Vehicle utilization reports. All of these would turn a simple tool into yet another enterprise behemoth. The line between "enough" and "too much" is the most important decision in the entire design.
CZ, EN, DE. Because trip logging isn't just a Czech problem, and adding localization later is always more expensive than building it in from the start. Adding a new language to a finished app means going through hundreds of strings — you don't want to do that retroactively.
First draft
Flask · MariaDB — server-rendered templates, fast development, no separate frontend framework. MariaDB for data, because a relational database is the natural choice for accounting data. Docker for deployment, because "works on my machine" is not an operations strategy.
The AI receipt agent surprised in both directions. On clean, fresh gas station receipts — accuracy above 95%. On crumpled, faded receipts from the glovebox? Human correction needed. The key is making the UI transition between "AI recognized" and "user corrects" smooth, not frustrating.
Automated background workflows replace what would otherwise require a backend team — import processing, notifications, periodic calculations.
Free / Pro / Enterprise. Why? Because trip logging is a legal requirement — putting a paywall on a legal requirement is bad business. The free tier covers basic needs. Pro adds AI import and advanced exports. Enterprise adds MCP server integration for companies that want to connect their own systems.
Reality check
Testing with a real user — someone with dozens of trips per week, zero tolerance for complications, and zero interest in technical details.
What looked logical during design but didn't work in practice: too many steps to enter a trip. Originally five clicks, after testing three. In the car, on a phone, after a meeting — every extra click is a reason not to do it.
UX details that seem trivial but make the difference: a progress bar showing "21/21 working days" — the user instantly sees if they're done. Color-coded weekends and holidays — New Year's Day in yellow, no thinking required. Badge with record count on each month in the sidebar — orientation without clicking through.
Dark mode as default — not a fashion statement, but a practical decision. Anyone filling in their trip log in the evening appreciates a dark background more than a white screen.
The boring part
Building an app takes weeks. Running it takes years. And it's the operational part that decides whether the app survives its first month.
Docker container on a dedicated server, automated backups, monitoring. When the server goes down at 3 AM, you need to know before users do. When regulations change, you need to update calculations before the accountant finds the error.
GDPR: receipts contain personal data — names, license plates, locations. This can't be ignored, and solving it retroactively is always more expensive than building it in from the start.
Payment gateway via Stripe — because it's the standard, it works, and you don't have to deal with PCI compliance yourself. But even so: integration, testing, edge cases (what if a payment fails midway?) — that's days of work on something the user will never see.
Designing and working through the entire use case takes weeks. The actual development then moves fast. The app is live, processing real data, and ready for more users.
Open Kniha Jízd