LiveIvents
Platforma za događanja · Švedska


Problem
LiveIvents ljudima u Švedskoj pomaže pronaći koncerte, kazalište, umjetnost i sajmove u blizini, a izvođačima i prostorima pomaže da ih se pronađe. Aplikacija je radila, ali bila je spora, nije imala nijedan test, a dizajn je bio bezličan. Svaka izmjena bila je kockanje. Cilj je bio nastaviti razvijati proizvod, a za to je trebao kod koji podnosi novi rad, a da pritom ne ruši postojeći.
Pristup
Prvo smo testirali, a tek onda mijenjali. Prije bilo kakve izmjene napisali smo testove koji bilježe kako se API zapravo ponaša. Zatim smo React klijent i Express API prebacili s JavaScripta na strogi TypeScript, jedan pull request za drugim, tako da aplikacija nijednom nije morala stati zbog velikog prepisivanja.
Brzina je došla od uklanjanja onoga zbog čega je aplikacija čekala. Stranice se sada učitavaju tek kad ih netko otvori, a ne sve odjednom, aplikacija više ne drži sve rute dok ne završi provjera prijave, a karta je prešla na vektorske pločice.
Sigurnosni rad zatvorio je stvarne rupe. Odgovori API-ja više ne otkrivaju hasheve lozinki ni osjetljiva polja, a svaki zahtjev provjerava se prema trenutnom stanju računa, pa suspendirani ili obrisani računi odmah gube pristup. Dodali smo i CSRF zaštitu, sigurnu rotaciju tokena, ograničenja za učitavanje slika i broj zahtjeva te uklonili sve poznate visoke i kritične ranjivosti u ovisnostima. Privatnost je postala nešto što proizvod stvarno radi: korisnici upravljaju marketinškim privolama, izvoze svoje podatke i trajno brišu račun.
Na kraju je došao redizajn: topliji vizualni jezik, nove stranice za pretragu i kartu te preuređeni ekrani događanja, profila i računa. Tu je i Blobo, maskota koja korisnike prati kroz prijavu i stranice računa, a iskreno se rastuži na stranici 404 i kad netko obriše račun.
Tehnologija
React 19, Vite, Tailwind i HeroUI na klijentu te Express i MongoDB API, sve u strogom TypeScriptu. Kartu crta MapLibre. Vitest, Supertest, React Testing Library i Playwright pokrivaju poslužitelj, klijent i glavne korisničke tokove, a svaki pull request prolazi CI prije nego što stigne na staging, a zatim u produkciju.