work byDaniil Chebotarev
Fakturio dashboard on a laptop in natural light

From tracked hours to a sent invoice

// DurationSide project2025-2026
// ResponsibilitiesSolo designer-builderProduct designFrontend and backendCompliance logicQA and production readiness
// StackNext.js, TypeScriptSupabaseClerk, StripeTesting & monitoring

//context

Fakturio started when I watched my wife make invoices by hand in InDesign. I built a generator for her, then expanded it into an invoicing tool for freelancers who bill by the hour.

The main task was simple: track work, turn those hours into invoice lines, and send the bill without re-entering the same information. I designed the product and built it with AI tools, including the frontend, backend, and country-specific invoice rules.

LinkedIn cold messages

100+

Usability sessions

10+

Built for

Hourly freelancers

Core flow

Time to invoice

Dashboard overview

Fakturio dashboard showing income, expenses, and active projects

//key design decisions

I focused on the moments that make invoicing feel like extra work: turning tracked hours into a bill, making that bill look like your business, and getting started without committing to another tool. These became the core flows I designed and built.

Amount
CHF 933.00
ProjectTime trackedTime tracking
Website redesignCHF 90.00
UX AuditCHF 843.00
Track time, then create an invoice.

Hours-to-invoice flow

I built the core flow around freelancers who bill by the hour: track time against projects, turn that work into invoice lines, and send the invoice without re-entering hours or calculating totals by hand.

minimal template, Roboto, QR code shown.

Custom invoice branding

Designers, marketers, and other creative freelancers can choose the invoice layout, colours, typeface, and logo to match their business.

Create an invoice before signing up

People can make an invoice before creating an account. Account creation comes after that first useful result, as a way to save their work.

//what testing changed

I ran more than 10 moderated usability sessions with freelancers who bill by the hour. Their feedback changed time tracking, invoice creation, and the way projects were organised.

Time tracking matched how people actually work

Testers expected the timer to already be running, thought in sessions rather than entries, and wanted hourly rates pre-filled per client. I rebuilt tracking around inline timers, table and calendar views, live totals, and an active timer that shows task and customer context.

Turning tracked time into an invoice

"Create invoice" did not make sense to users: they expected time entries to sum automatically, and invoices ignored customer currency. Entries now group by task into clean invoice lines, and currency follows the customer.

A task layer between projects and time

I started with a simpler model: client, project, and time entries tracked straight on the project. But multiple testers said they do different kinds of work on one project and want to track each separately, so I reworked the architecture and design around a task layer (client > project > task > entry).

An invoice form non-experts can read

Field labels like "Invoice #" confused users, the description field was unclear, and VAT felt mandatory when it should not be. I relabeled to "Invoice Number", added a Name field, made VAT optional, tucked description under products, and added custom payment terms.

A customer has projects, projects have tasks, and tasks contain time entries. At an illustrative CHF 120 per hour, each 15-minute session adds CHF 30 to the amount ready to invoice for the customer. Time can also be tracked directly against a project. Use left and right arrows to move between entries.

Example hierarchy. Play a time entry to see its time roll up to its task, project, and customer.

A structure shaped by real work

Time entries roll up into tasks, projects, and customer totals, ready to use on an invoice.

Fakturio taxes page showing VAT registration threshold progress and Swiss tax calculator estimates

VAT thresholds and tax estimates

From my own freelancing and from testing, the recurring anxiety was not knowing where you stand: am I about to cross the VAT threshold, how much tax will I owe? So I added banners that warn when users are near or over the VAT registration threshold, and a tax calculator that estimates taxes and social security based on canton.

//compliance & trust

Handling compliance across European countries became one of the most complex parts of the build. It was a matrix of combinations: where the business and customer were based, whether each was VAT-registered, and whether the invoice crossed borders. I had to map those combinations to the right tax treatment, required fields, and invoice wording, then make that complexity manageable for someone who is not an accountant.

Freelancer

Switzerland

Client

Germany

Domestic VAT
Reverse charge
Outside local VAT
Small-business exemption
INV-001

Invoice

CHDE
B2B consulting services
€1,000.00
VAT · reverse charge
Not charged
Total due
€1,000.00
Required invoice wording

Reverse charge. VAT to be accounted for by the recipient.

Supplier Swiss VAT ID · German business recipient

Illustrative invoice
Switzerland to Germany. No Swiss VAT charged. German recipient accounts for VAT.

Beyond compliance, reliability was a core part of the product. Users needed to trust the numbers and know their data was safe. I treated that as part of the design: accurate money calculations, clear error states, protected access to financial data, and a release process backed by automated tests and monitoring.

Early use and lessons

//early use

A small group of early users used Fakturio for weekly invoicing and sent feedback that I incorporated into the product. That gave me a way to improve the workflow with people doing real client work.

//reflection

I contacted more than a hundred freelancers on LinkedIn and received fewer than ten replies. The response showed how little I knew about reaching the right customers. I would test the acquisition approach earlier, alongside the first invoicing workflow.