Butterfly Design Logo Butterfly Design Title
← Natrag na blog Case Study • Flutter • Legacy modernizacija

VB6 ERP → Flutter + Clean Architecture za 4 mjeseca

Butterfly Design • Ivan Rendulić  ·  Svibanj 2026

Naš klijent je jedan od vodećih hrvatskih publishera s desetljećima tradicije. Njihov ERP sustav — upravljanje pretplatnicima, narudžbama, fakturiranjem, dostavom — bio je napisan u Visual Basicu 6. Sustav je godinama rastao organički — bez formalne dokumentacije, s poslovnom logikom rasutom kroz kod. A bio je kritičan za svakodnevno poslovanje.

Zadatak: modernizirati ga. Bez prekida rada, bez gubitka poslovne logike, bez "big bang" migracije koja može završiti katastrofom.

4 mjeseca razvoja
36 Flutter ekrana
1 developer

Polazišna točka: softverska forenzika

Čak i kad si ti pisao taj kod — godinama organskog rasta bez dokumentacije znači da je jedini pouzdan izvor istine sam kod. U Butterfly Designu to zovemo softverska forenzika — sustavno čitanje legacy koda kako bi se mapirala sva poslovna logika koja je u njemu zakopana.

VB6 kod sadržavao je desetljeća poslovnih odluka: pravila za obračun pretplata, logiku zatvaranja računa, posebne slučajeve fiskalizacije, uvjete za generiranje opomena. Ništa od toga nije bilo zapisano negdje drugdje — sve je bilo u kodu.

Forenzika je trajala tjedan dana. Rezultat: jasna mapa poslovnih pravila koja je postala temelj za Clean Architecture jezgru.

Arhitektura novog sustava

Stari sustav
  • Visual Basic 6
  • Windows Forms UI
  • Direktan pristup bazi
  • Poslovna logika u UI kodu
  • Nema API-a
  • Lokalna instalacija
Nova platforma
  • Flutter (web + desktop)
  • flutter_bloc + Beamer
  • ASP.NET Core REST API
  • Clean Architecture (.NET)
  • SignalR real-time
  • Docker + Caddy deploy

Backend je organiziran prema Clean Architecture principima — četiri odvojena projekta koji jasno definiraju granice odgovornosti:

Adrema.Domain — entiteti i poslovna pravila. Ne ovisi ni o čemu.

Adrema.Application — use caseovi i aplikacijska logika. Ovisi samo o Domain sloju.

Adrema.Infrastructure — baza podataka, vanjski servisi, fiskalizacija. Implementira sučelja iz Application sloja.

Adrema.Api — REST API koji orkestrira sve. Flutter frontend komunicira isključivo s ovim slojem.

Što je pokriveno

36 Flutter ekrana pokriva kompletno poslovanje izdavačke kuće:

Pretplatnici Pretplate Narudžbe Računi Dostavnice Opomene Bankovna izvoda Knjiženje Fiskalizacija Webshop narudžbe Katalog proizvoda Paketi Chat Korisnički kartoni PDF izvještaji Excel export

Migracija bez prekida: Repository Pattern u praksi

Najveći strah kod svake migracije je isti: što ako nova platforma ne pokrije sve poslovne slučajeve koje stara pokriva? Što s podacima koji su u produkciji dok razvoj još traje?

Odgovor je bio Repository Pattern s paralelnim radom — isti pristup opisan u teorijskom članku. U git historiji projekta to je zabilježeno kao "Legacy covering" i "Legacy mode" — faze u kojima su oba sustava radila istovremeno, s mogućnošću usporedbe rezultata.

1
Forenzika i jezgra

Rekonstrukcija poslovne logike iz VB6 koda. Postavljanje Clean Architecture jezgre u .NET-u. Stari sustav radi normalno.

2
Paralelni razvoj i "Legacy mode"

Nova platforma se razvija uz staru. Repository Pattern omogućuje usporedbu rezultata između sustava. Svako neslaganje se analizira i razrješava.

3
Testna faza (trenutno)

Korisnici rade u novom Flutter sučelju. Stari VB6 sustav još uvijek dostupan kao sigurnosna mreža. Prikupljaju se povratne informacije.

4
Produkcija

Stari sustav se gasi. Nova platforma preuzima potpunu kontrolu. Bez drame, bez gubitka podataka.

Tehnički detalji koji čine razliku

Nekoliko tehničkih odluka obilježilo je ovaj projekt:

SignalR za real-time komunikaciju. Određeni poslovni procesi zahtijevaju trenutnu obavijest — fiskalizacija, potvrde narudžbi, statusne promjene. SignalR je omogućio push notifikacije prema Flutter klijentu bez pollinga.

Flutter web + desktop iz jednog koda. Isti Flutter kod radi kao web aplikacija (Caddy servis) i kao desktop klijent. Nema dupliciranja logike, nema sinkronizacijskih problema između platformi.

PDF i Excel export u klijentu. Generiranje izvještaja i izvoza podataka rješeno je direktno u Flutter aplikaciji — bez serverskog renderiranja, bez čekanja.

Docker deployment. Cijela infrastruktura — API, baza, web server — pakirana u Docker compose konfiguraciju. Deploy je reproducibilan i predvidljiv.

Arhitekturni obrasci o kojima pišem na blogu
nisu teorija. Ovo je jedan od projekata koji ih dokazuje.

AI asistent ugrađen u sustav

Jedna od funkcionalnosti koja nije bila u originalnom planu, a pokazala se iznimno korisnom: ugrađeni AI asistent koji može odgovarati na pitanja o podacima prirodnim jezikom.

Korisnik može pitati "Pokaži mi promet po godinama" — asistent generira SQL upit, izvršava ga i prikazuje rezultate u tablici. Ili "Zapakiraj mi u PDF i pošalji na email" — asistent generiraj PDF izvještaj i šalje ga direktno. Bez otvaranja posebnih modula, bez znanja SQL-a.

Adrema ERP — AI asistent u produkciji
Adrema ERP — AI asistent u produkciji

Što sam naučio

Svaki legacy modernizacijski projekt nauči nešto novo. Na ovom projektu potvrda je bila jasna: najveći rizik nije tehnologija — nego nevidljiva poslovna logika. Desetljeća rubnih slučajeva, iznimki i posebnih pravila koja nikad nisu bila dokumentirana, ali su bila vitalna za svakodnevno poslovanje.

Softverska forenzika kao prvi korak nije opcija — to je preduvjet. Bez nje, svaka migracija je igra na sreću.

Imate sličan sustav — star, kritičan za poslovanje, nedokumentiran? Razgovarajmo o tome što je moguće.

Zatraži besplatnu procjenu