Case study · 07 / 09

VKS

Online invoicing & accounting SaaS

Invoicing and online accounting for small businesses and accounting offices — many companies on one account, every Polish VAT rule handled, data filled in straight from the GUS registry.

  • SaaS
  • Fintech
  • Multi-tenant

Partner

VKS

Industry

Fintech · Accounting

Platform

Web app (PWA) + microservices

Our role

Frontend & invoicing service

The product

What it does

One login, several companies. Users issue sales, pro forma, draft and correcting invoices, manage contractors and bank accounts, and buy licences and add-on packages on subscription — with exchange rates taken from the National Bank of Poland.

Our part

What we built

A Vue 2 + TypeScript PWA talking to three independent microservices — auth, licences and invoices — and the Laravel invoicing service behind it, signed with RS256 JWTs and rendering PDFs with DomPDF.

Under the hood

The hard parts

  1. 01

    Multi-tenant across three APIs

    Separate axios instances and base classes per service, with the active company sent to every API in an X-company header.

  2. 02

    Totals calculated by the server

    Every change of quantity, price, discount or VAT rate is recalculated by the invoicing service — net and gross strategies, discounts and rounding to the grosz.

  3. 03

    Every VAT case covered

    Previews grouped by seven VAT rates (23/8/5/0%, exempt, n/a, n/a EU), amounts written out in Polish words, and corrections showing before, after and the difference.

  4. 04

    Less typing, fewer errors

    Contractor data pulled from the GUS REGON registry by tax number, declarative validation with Polish messages and numbering series that reset every month.

The outcome

Small businesses and accountants issue correct Polish invoices for many companies from one place.

Inside the product

6 screens, explained

Demo data · click any screen to enlarge

01

Dashboard with company switcher

Revenue and invoice-status stats from the invoicing service. Switching company changes the active tenant for every API at once.

02

Issuing an invoice

A live line-item table: each change of quantity, price, discount or VAT asks the server calculator for VAT, net and gross. The contractor’s default 5% discount fills in by itself.

03

Invoice preview

Totals broken down by every VAT rate — including exempt and EU reverse charge — and the amount written out in Polish words.

04

Invoice list

Server-side filtering, sorting and paging: date range, document type, minimum amount and payment status (paid, partly paid, unpaid).

05

Subscription configurator

Step one of four: licence, billing period with a length discount and add-on packages, priced live in the basket before invoice details and online payment.

06

Contractor from GUS

Type the tax number, click “Fetch from GUS” and name and address fill in from the REGON registry. Validation errors speak Polish.

Stack

Frontend

  • Vue 2
  • TypeScript
  • Vuetify
  • Vuex
  • vee-validate
  • vue-i18n (PL/EN)
  • PWA

Invoicing service

  • Laravel 9 / PHP 8.1
  • JWT RS256
  • DomPDF
  • NBP exchange rates

Quality

  • Jest
  • Cypress

Next case

Side Quest z Dumle →

Consumer contest campaign

Want a product
like this?

Get a free estimate