[ 10 ]
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.

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ť.
Päť modulov, ktoré si zaslúžia svoje miesto
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.
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ď.
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 startupTri 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ť.

Štyri role, scoped na to, čo reálne robia
| Rola | Čo vidia | Čo môžu robiť |
|---|---|---|
| Administrator | Všetko | Plný CRUD nad každým modulom |
| Customer | Kontrakty, dokumenty, performances ich organizácie | Vytvárať, editovať, schvaľovať, spúšťať reporty |
| Supplier | Kontrakty, ktorých sú stranou, vlastné performances | View kontraktov, submit performances, komentár |
| Auditor | Read-only naprieč systémom | View 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.
Č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.
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

