[ Case study ]

[ 10 ]

← Všetky projektyFull-stack referenčný build, solo

OpsPortal.

B2B operations platforma pre servisné biznisy s opakujúcou sa prácou — kontrakty, scheduling, performance tracking a document control v jednom auditovateľnom systéme.

Rok
2025
Trvanie
3 mesiace
Stack
Laravel 11 · Filament 3 · PostgreSQL · Redis
OpsPortal hero obrázok
Brief

Prečo servisné biznisy prerastú spreadsheety

Existuje moment, ktorý väčšina operátorov servisných biznisov pozná. Začneš s troma kontraktmi a Google Sheetom. Do druhého roku máš tridsať kontraktov, štyroch ľudí, opakujúce sa inšpekcie každý mesiac, photo evidence vo WhatsApp vláknach, podpisy v PDF e-mailových prílohách a Excel súbor, ktorý niekto updatuje "keď si spomenie." Potom si klient vypýta audit trail minuloročných deliveries a uvedomíš si, že ho v skutočnosti nemáš.

OpsPortal je referenčný build pre túto stenu. Nie SaaS, ktorý predávam — demonštrácia surface area, ktorú operations platforma potrebuje pokryť, keď spreadsheet konečne praskne. Lifecycle kontraktov, opakujúce sa rozvrhy, photo-dokumentované performances, document control, role-based access, audit log. Tá nesexy infraštruktúra, ktorá ticho beží servisným biznisom, keď prekročia určitú veľkosť.

Prístup

Päť modulov, ktoré si zaslúžia svoje miesto

ops-portal-production.up.railway.app/

OpsPortal verejný landing — hero, feature karty, Sign In a Create Account

Verejný landing portálu — riadok troch feature kariet (Contract Management, Calendar & Scheduling, Performance Tracking), Sign In a Create Account cesty. Registrácia je defaultne admin-approved; invite-based registrácie sú auto-approved.

ops-portal-production.up.railway.app/admin

OpsPortal admin dashboard — KPI karty, nadchádzajúci rozvrh, aktívne kontrakty

Operátorský landing po prihlásení. Hore štyri KPI karty — aktívne kontrakty (s celkovou hodnotou portfólia), expiring soon, eventy tento týždeň, pending review. Nadchádzajúci rozvrh vľavo s type a priority chipmi. Aktívne kontrakty vpravo s elapsed-progress barmi a end dates. Dashboard hovorí operátorovi, na čo sa pozrieť ďalej, nie čo sa stalo minulý kvartál.

Contract management. Sedem statusov (draft, pending approval, active, paused, completed, cancelled, expired). Auto-číslované (OPS-YYYY-NNN). Multi-party kontrakty — customer, supplier, subcontractor — každý s vlastnou rolou a kontaktnou osobou. Zmeny statusu sa zapisujú do dedikovanej audit tabuľky, takže "kto schválil tento kontrakt v ktorý deň" má reálnu odpoveď.

ops-portal-production.up.railway.app/admin/contracts

OpsPortal contracts table — filtre, status a priority badges, vyhľadávanie

Tabuľka kontraktov s tabmi pre All / Customers / Suppliers / Active / Expiring Soon. Per-row status badge, priority badge (Critical, High, Normal), zodpovedná osoba, typ kontraktu (1-year through 5-year). Vyhľadávanie a filter hore, bulk akcie per row. Reálni B2B používatelia chcú tento pohľad, nie Kanban board.

Document control s versioningom. Dokumenty sa pripínajú ku kontraktom. Kategórie zahŕňajú kontrakty, revízie (elektrické, plynové/tlakové, zdvíhacie zariadenia, požiarna bezpečnosť), certifikáty, iné. História verzií per súbor. Per-user a per-organization permissions — view, download, edit, delete. Každý prístup k dokumentu je logovaný s IP adresou. Capture digitálneho podpisu v browseri cez SignaturePad.

Calendar & scheduling. FullCalendar s RRULE recurrence — ročné, mesačné, týždenné patterny inšpekcií. Šesť typov eventov: audit, monthly fulfillment, delivery, milestone, maintenance, revision. Farby urgentnosti podľa dní do execution. Per-event organization, equipment, operating location polia. 24-hodinové e-mail reminders pred plánovanými eventami.

Performance tracking. Plán vs aktuálne delivery záznamy nalinkované na eventy. Päťkrokový workflow: planned, in progress, completed, approved, rejected. Upload photo evidence, capture podpisu v browseri pre approval. Out-of-scope práca flagnutá s dôvodom. Cost variance počítaná automaticky.

Reports. Sedem konfigurovateľných reportov s date-range filtrovaním a Excel exportom — contracts overview, expiring contracts, performance summary, financial overview, events calendar, documents by category, organization activity.

Nudný stack, rýchly na shippnutie

Backend       Laravel 11 · PHP 8.3 · FrankenPHP runtime
Admin UI      Filament 3 · Livewire 3 · Alpine.js
Frontend      Tailwind CSS · FullCalendar · SignaturePad
Database      PostgreSQL 15 · 39 tables · soft deletes everywhere critical
Cache/Queue   Redis 7
Auth          Spatie Permission (4 roles · 45 permissions)
Audit         Spatie Activity Log (every model change · who · when · before/after)
File handling Spatie Media Library
Email         Resend API
Search        OCR text extraction via Tesseract for documents
Build         Composer · npm · Vite
Deploy        Railway · Docker · auto-migrate on startup

Tri rozhodnutia, ktoré stojí za to spomenúť:

1. Laravel + Filament namiesto Next.js. Counterpart projekt v tomto portfóliu (OmniShop) je postavený na Next.js. Tak prečo tu Laravel? Pretože práca je iná. OmniShop je customer-facing storefront s SEO váhou a oddeleným adminom. OpsPortal je z 90 % admin — dvadsať dva doménových modelov, štyridsaťpäť permissions, role-based access, audit trail, file uploads, podpisy, calendar, opakujúce sa eventy, Excel export. Filament dáva toto všetko ako primitíva. Postaviť to from scratch v Next.js by znamenalo šesť mesiacov infraštruktúry pred tým, než akákoľvek business logika shippne. S Filamentom ide tri mesiace práce do domény — contract workflow, performance approval, document permissions — a framework rieši zvyšok.

Správne architektonické rozhodnutie je to, ktoré ti umožní shippnuť doménu rýchlejšie, nie to, ktoré sa najlepšie skóruje v Twitter vlákne.

2. PostgreSQL s full-text search, nie Elasticsearch. Systém má full-text search naprieč kontraktmi a dokumentami. PostgreSQL toto handluje natívne až do prekvapivo veľkých datasetov. Pridanie Elasticsearch by znamenalo ďalšiu službu na beh, ďalší index na udržanie v sync a ďalší failure mode na monitorovanie — pre feature, ktorý PostgreSQL FTS handluje v jednociferných milisekundách pri objemoch, aké servisné biznisy reálne majú. Ak by deployment narástol nad to, swapnúť dovnútra je priamočiare. Premature optimization je zriedka premature; obvykle je to len optimization v zlom smere.

3. Audit trail ako first-class concern, nie afterthought. Spatie Activity Log nahráva každú zmenu modelu (kto, kedy, stará hodnota vs nová hodnota) na celý život záznamu. Document access logy obsahujú IP adresu. Zmeny statusu kontraktu majú dedikovanú tabuľku. Audit trail je read-only v admine (/admin/audit-log) a existuje, pretože servisné biznisy podliehajú auditom — klientmi, certifikačnými telesami, daňovými úradmi. "Myslím, že sme to urobili, počkaj pozriem Slack" nie je odpoveď. Systém si to musí pamätať.

OpsPortal admin dashboard na iMacu vo svetlom workspace — desk mockup
Operátorský pohľad na reálnom stole — rovnaké KPI a schedule patterny ako vo vystrihnutých screenoch vyššie, čitateľné pri dennom svetle.

Štyri role, scoped na to, čo reálne robia

RolaČo vidiaČo môžu robiť
AdministratorVšetkoPlný CRUD nad každým modulom
CustomerKontrakty, dokumenty, performances ich organizácieVytvárať, editovať, schvaľovať, spúšťať reporty
SupplierKontrakty, ktorých sú stranou, vlastné performancesView kontraktov, submit performances, komentár
AuditorRead-only naprieč systémomView only · časovo obmedzený (8:00–16:00 prístup)

Štyridsaťpäť granulárnych permissions poháňaných Spatie Permission. Organization-level data isolation: zákazník vidí len svoje kontrakty, nie zvyšok portfólia. Auditor rola existuje, pretože reálne B2B engagementy zahŕňajú third-party verifikáciu, a "daj auditorovi dočasný admin účet a dúfaj" je spôsob, akým sa dejú breaches.

Výsledok
22
Doménové modely
45
Permissions
4
Role
7
Statusy kontraktov

Čo to demonštruje

Pre prospects, ktorí hodnotia B2B operations prácu, tento build pokrýva:

Disciplínu domain modelingu. Dvadsať dva modelov s riadnymi reláciami, soft deletes na kritických tabuľkách, polymorphic komentáre naprieč contracts/documents/performances, plný audit trail.

Hĺbku access control. Štyri role, štyridsaťpäť permissions, organization-level data isolation, časovo obmedzený prístup pre auditorov. Nie "máme admina a normálneho usera."

Lifecycle management. Sedem statusov kontraktov s auditovateľnými prechodmi, päťkrokový performance workflow s approval, document versioning s per-user permissions.

Operačné reálie. RRULE-based opakujúce sa eventy, 24-hodinové reminders, OCR document search, Excel export so značkovým štýlovaním, podpisy v browseri, photo evidence capture.

Stack judgment. Laravel + Filament zvolený pre admin-heavy prácu, kde si zaslúži tri mesiace. PostgreSQL FTS namiesto Elasticsearch. Spatie balíky namiesto custom RBAC.

Codebase je len seed-data. Ak ma briefneš s reálnym problémom servisného biznisu, začal by som Discovery Sprintom, aby som pochopil doménu — typy kontraktov, ktoré píšeš, regulačný režim, v ktorom operuješ, integrácie, ktoré majú váhu (účtovníctvo, CRM, field tools) — nie zdvihnutím tohto scaffoldu.

1/ 3voľných slotov · Q2 2026
Booking otvorenýživé časy na /book
Solo operátor · Custom práca

Briefni ma na niečo podobné

B2B operations platformy, contract lifecycle systémy, scheduling opakujúcich sa služieb, role-based dashboardy pre servisné biznisy — toto je core teritórium. Pošli brief alebo si rezervuj 30-min call. Discovery Sprint najprv, fixed-price build potom.

Pošli brief
mail@nkovalcin.comOdpoveď do 1 pracovného dňa