Case Study · SaaS Product
FakturaOne
An invoicing and business management platform for freelancers and small businesses in the Balkans — documents, clients, PDFs, and email delivery in one place.
- Role
- Design & Development
- Year
- 2025–2026
- Type
- SaaS Product
- Next.js
- React
- TypeScript
- Tailwind CSS
- Supabase
- @react-pdf/renderer
- Resend
- Vercel

Problem
Invoicing tools are either too heavy or too foreign
Small businesses and freelancers in the region either fight with spreadsheets and Word templates, or pay for enterprise ERP systems built for other markets. Existing tools rarely speak the local language — literally and figuratively: local document types, bank account formats, and business customs are an afterthought.
Solution
One focused app for the whole billing flow
FakturaOne covers the full document lifecycle: invoices, quotes (predračuni), and delivery notes (otpremnice) with automatic numbering per type, a client database, per-company settings with logos and bank accounts, real PDF export, and sending documents by email — all localized for how businesses here actually work.
Key Features
Built for reliability, not just aesthetics
Three document types, one flow
Invoices, quotes, and delivery notes share a single creation flow with type-specific numbering prefixes (INV, PRO, OTP), due-date labels, totals, and default notes — so switching document type never means relearning the UI.
Multi-company support
One account can manage multiple companies, each with its own logo, bank accounts, document numbering, and settings. The active company context follows you across the dashboard.
Real PDF generation
Documents render server-side with @react-pdf/renderer into properly named files — not a window.print() hack. The same document model drives the on-screen preview and the PDF, so they never drift apart.
Email delivery with attachments
Documents go straight from the app to the client's inbox via Resend, with the PDF attached and a localized message template — no downloading and re-attaching in a mail client.
Flow
From link to local file
Set up a company
Add company details, logo, and bank accounts once — they appear on every document automatically.
Create a document
Pick invoice, quote, or delivery note. Client data auto-fills from the client base; numbering is automatic.
Preview & export
Review the document exactly as the client will see it, then download a named PDF.
Send & track
Email the document with one click and track statuses — draft, sent, paid, overdue.
Architecture
Next.js App Router on a Supabase backbone
The app is a Next.js 16 application with Supabase handling auth, Postgres storage, and row-level security so each user only ever sees their own companies and documents. Server actions drive document mutations; a shared document model feeds both the live preview and the server-side PDF renderer. Emails are sent through Resend with generated PDFs attached. Typed database definitions keep the Supabase schema and the TypeScript layer in sync.
Learnings
Localization is a feature, not a translation
The hardest problems weren't technical — they were about matching how local businesses actually issue documents: grammatical cases in UI copy (kreiraj fakturu vs. nova faktura), document-type-specific labels, and defaults that make sense for the region. Building the document model around those differences from day one made features like PDF export and email templates dramatically simpler later.