Početna / Radovi
TickIt — Konfigurabilna platforma za tiketiranje i helpdesk
Interni alati i integracije

TickItKonfigurabilna platforma za tiketiranje i helpdesk

TickIt je konfigurabilna platforma za tiketiranje i helpdesk — Laravel 13 API iza Vue 3 single-page aplikacije. Administratori sami izrađuju vlastite tipove tiketa, svaki s vlastitim statusima i prilagođenim poljima, bez diranja koda; verzionirani integracijski API omogućuje drugim aplikacijama programatsko otvaranje tiketa uz idempotentan unos otporan na ponavljanja. Klijentska, agentska i administratorska uloga svaka dobiva vlastite prikaze, uz Kanban ploču, komentare u nizu, privitke datoteka i zapis aktivnosti.

TickIt je mjesto kamo aplikacije šalju svoje povratne informacije, a timovi ih obrađuju. Zanimljivi dio nije popis tiketa — već to da je tijek rada podatak, a ne kod. Tip tiketa nosi vlastite statuse i vlastita prilagođena polja, pa administrator može postaviti novu vrstu tiketa, s vlastitim pipelineom i vlastitim obrascem, a da nitko ne piše migraciju. TicketWorkflowService čita tu konfiguraciju kako bi odlučio koji su potezi dopušteni.

Druga polovica je integracijski API. Household i Chrono ne šalju izvještaje o greškama mailom — oni ih POST-aju. Taj endpoint je verzioniran i autenticiran po klijentu, te je idempotentan: ApiClientTicketService.createOrReplay() ključuje svaku predaju na Idempotency-Key, ponavlja izvorni tiket pri ponovnom pokušaju i oslanja se na jedinstveno ograničenje baze kako bi razriješio utrku kada dva ponovna pokušaja stignu istovremeno. Oko toga stoje stvari koje biste očekivali od helpdeska — Kanban ploča, komentari napisani u Tiptapu, privitci datoteka, zapis aktivnosti te web-push i mail obavijesti kada posao stigne.

Oko mehanizma tijeka rada i integracijskog API-ja stoje svakodnevni dijelovi helpdeska — projekti, dodjela tiketa, komentari, privitci i obavijesti — pa konfigurabilna jezgra i strojni unos zajedno čine alat koji se stvarno koristi iz dana u dan.

UlogaDesign + full-stack
Godina2026
TehnologijeLaravel 13 · Vue 3 · TypeScript
AutentifikacijaSanctum + Google OAuth
KonzumiraHousehold & Chrono (integration API)
TickIt prikaz Kanban ploče na /tickets/board — tiketi kao kartice u stupcima po statusu, s oznakama tipa i dodijeljene osobe, povlačenje kroz konfigurabilan tijek rada
Snimka uskoro
Mehanizam tijeka rada

Tipovi tiketa koji se sami konfiguriraju

Svaki tip tiketa ima vlastiti skup statusa i vlastita prilagođena polja. Administratori definiraju tip, njegova stanja u tijeku rada i polja koja agenti popunjavaju — ništa od toga nije ugrađeno u kod. TicketWorkflowService upravlja time koji su prijelazi između statusa dopušteni.

  • Statusi po tipu, ne jedan globalni skup
  • Prilagođena polja s tipom, opcijama, obaveznošću i redoslijedom
  • Prijelazi validirani na strani poslužitelja
Snimka uskoro
Dinamička polja

Prilagođena polja bez migracije

TicketTypeField pohranjuje oznaku, tip polja, JSON blob opcija za polja tipa odabira, oznaku obaveznosti i redoslijed sortiranja — pa je novo polje redak, a ne promjena sheme. Administratorsko sučelje preuređuje redoslijed polja povlačenjem.

  • JSON opcije za polja s izborom
  • is_required + sort_order po polju
  • Promjenjiv redoslijed u administratorskom prikazu
Snimka uskoro
Integracijski API

Druge aplikacije programatski otvaraju tikete

Verzionirani endpoint (Integrations/V1/TicketController) omogućuje vanjskim aplikacijama slanje tiketa s povratnim informacijama. Household i Chrono ga oba koriste — autenticirani po klijentu putem AuthenticateApiClient middlewarea u odnosu na ApiClient token, ograničeni na projekt.

  • API tokeni po klijentu
  • Unos ograničen na projekt
  • Verzionirana (V1) površina
Snimka uskoro
Kanban i suradnja

Ploča, komentari i privitci

Tiketi žive na ploči s povlačenjem na /tickets/board organiziranoj prema statusima tipa. Svaki tiket nosi komentare u nizu napisane u Tiptap editoru, privitke datoteka za prijenos i preuzimanje te potpuni zapis aktivnosti.

  • Stupci statusa iz tijeka rada
  • Tiptap uređivač komentara
  • Prijenos / preuzimanje datoteka + trag aktivnosti
Snimka uskoro
Obavijesti

Push i mail na događajima koji su važni

Kada se tiket kreira, TickIt razašilje TicketCreated obavijest preko web pusha (VAPID ključevi, push_subscriptions tablica) i mail kanala, pa agenti saznaju za novi posao bez praćenja ploče.

  • Web push putem service-worker pretplate
  • Mail kanal uz push
  • Pokreće ga TicketNotifier
Snimka uskoro
Uloge i uvođenje

Tri publike, tri prikaza

Klijent, agent i administrator svaki dobiva namjensko stablo prikaza. Novi projekti se pokreću iz predložaka putem ProjectSetupService, pa novi projekt dolazi sa smislenim zadanim tipovima, statusima i poljima umjesto praznog lista.

  • Odvojena klijentska / agentska / administratorska sučelja
  • Postavljanje projekta vođeno predlošcima
  • Prijava putem Sanctum + Google OAuth
Arhitektura

Statička Vue SPA komunicira s bezstanjskim Laravel API-jem; druga, verzionirana API površina prima strojni unos tiketa od srodnih aplikacija.

Klijent
Vue 3 SPA
TypeScript, TanStack Query/Table, Pinia, shadcn-vue, Tiptap; prikazi po ulogama klijent/agent/admin, posluženo kao PWA.
API
Laravel 13 + Sanctum
48 ruta preko 10 modela; Google OAuth za ljude, tokeni po klijentu za strojeve. TicketWorkflowService provodi prijelaze.
Integracija
Verzionirani V1 endpoint
AuthenticateApiClient middleware; ApiClientTicketService obrađuje idempotentan createOrReplay unos od Household i Chrono.
Asinkrono
Obavijesti i poslovi
TicketCreated preko web pusha (VAPID) i maila; rad u redu putem Laravel queue workera.
Riješeni izazovi
01

Konfigurabilno bez koda

Problem

Različiti timovi žele različite oblike tiketa — različite statuse, različita polja — a isporuka migracije po zahtjevu se ne skalira.

Rješenje

Tijek rada modeliran je kao podatak. TicketType posjeduje svoje TicketStatus retke i TicketTypeField retke (label, field_type, JSON opcije, is_required, sort_order). Administratori slažu tipove u sučelju; TicketWorkflowService čita te podatke kako bi validirao prijelaze, pa novi tijekovi rada ne trebaju deploy.

02

Idempotentan strojni unos

Problem

Vanjske aplikacije ponavljaju pokušaj pri mrežnom kvaru. Naivni endpoint za kreiranje tiketa duplicirao bi tiket svaki put kada klijent ponovno pošalje isti zahtjev.

Rješenje

createOrReplay() ključuje svaku predaju na Idempotency-Key. Ponovljeni ključ vraća izvorni tiket umjesto da kreira drugi — čineći ponovne pokušaje sigurnima za aplikaciju koja poziva.

03

Utrka dupliciranih zahtjeva

Problem

Dva ponovna pokušaja mogu stići dovoljno blizu da oba prođu početnu provjeru "postoji li ovaj ključ?" prije nego što ijedan izvrši commit.

Rješenje

Jedinstveno ograničenje na idempotency_key je izvor istine. Servis hvata kršenje jedinstvenog ograničenja pri unosu, zatim ponovno čita i vraća pobjednički tiket — pa utrku rješava baza podataka, a ne tempiranje aplikacije.

04

Jedna aplikacija, tri publike

Problem

Klijenti, agenti i administratori trebaju vrlo različite površine nad istim podacima bez propuštanja međusobnih mogućnosti.

Rješenje

Odvojena stabla prikaza (klijent / agent / admin) na frontendu, podržana Sanctum-autenticiranim pristupom API-ju svjesnim uloga. Google OAuth pokriva ljudsku prijavu; integracijski API u potpunosti ostaje na vlastitoj putanji tokena po klijentu.

Kako je izrađeno
Backend
PHP 8.3, Laravel 13, Sanctum, Google OAuth, MariaDB
Integracije i obavijesti
Versioned integration API (V1), Idempotency-Key replay, Web push (VAPID), Mail channel
Frontend
Vue 3, TypeScript, TanStack Query, TanStack Table, Pinia, shadcn-vue, Tailwind
Uređivanje i UX
Tiptap WYSIWYG, Sonner toasts, Vite, PWA

Stvaran proizvod, izrađen pošteno — konfigurabilan ondje gdje je važno, siguran ondje gdje strojevi međusobno komuniciraju.