Přeskočit na obsah
Jan HřebíčekEnaro
← Studie

Rezervační systém

Kemp Starý Sad: Od záchrany projektu před sezónou k vlastnímu rezervačnímu systému

Projekt jsem převzal pár dní před startem sezóny — web byl rozpracovaný, ale chyběly klíčové funkce pro spuštění. Během jedné sezóny z něj vznikla vlastní rezervační aplikace: rezervace s dostupností míst v reálném čase, mapa kempu, administrace se statistikami a infrastruktura přesunutá do EU.

0,18 s
LCP v laboratorním měření
500+
rezervací od spuštění
RoleVývoj, vlastní administrace a infrastrukturaStackNext.js · TypeScript · PostgreSQL

Převzetí projektu v kritické fázi

Projekt Kemp Starý Sad jsem převzal v okamžiku, kdy se blížilo spuštění nové sezóny a termín nasazení byl otázkou několika dní. Web byl rozpracovaný, ale chyběla řada klíčových funkcí, bez kterých nešlo systém spustit do provozu.

Hlavním cílem bylo dostat projekt co nejrychleji do produkce, umožnit příjem rezervací a vytvořit stabilní základ pro další rozvoj.

Výzva

Největší výzvou nebyl samotný vývoj, ale čas. Rezervační systém musel běžet během několika dnů a zároveň bylo potřeba zajistit spolehlivé technické zázemí. Projekt vyžadoval:

  • dokončení frontendové části webu
  • úpravy uživatelského rozhraní
  • implementaci rezervačního procesu
  • zajištění hostingu a datového úložiště
  • základní SEO optimalizaci
  • bezpečnostní kontrolu aplikace
  • optimalizaci výkonu a úklid zdrojového kódu

Rychlé dodání MVP

Zvolil jsem pragmatický přístup: místo dlouhého vývoje komplexního systému dodat co nejrychleji funkční MVP, které umožní přijímat rezervace a bez problémů obslouží začínající sezónu. Během několika dnů vznikl rezervační systém založený na e-mailové komunikaci — řešení umožnilo okamžité spuštění provozu bez čekání na rozsáhlou administraci či složité integrace.

Souběžně proběhlo dokončení frontendu, optimalizace výkonu, implementace základních SEO prvků, nastavení hostingu, konfigurace datového úložiště a bezpečnostní úpravy. Výsledkem bylo úspěšné spuštění webu před začátkem sezóny.

Vývoj vlastního rezervačního systému

Po úspěšném MVP přišla druhá fáze, zaměřená na dlouhodobou udržitelnost a efektivitu práce provozovatele. Z původního řešení se stala plnohodnotná webová aplikace pro správu rezervací. Vznikla vlastní administrace, která nahradila headless CMS Directus. Její součástí je vizuální mapa kempových míst pro rychlé přiřazování pobytů, kalendář obsazenosti a přehled denního provozu s příjezdy a odjezdy.

Administrace dnes pokrývá celý životní cyklus pobytu: potvrzení, přiřazení místa, prodloužení nebo předčasné ukončení pobytu i storno s důvodem a zprávou pro hosta. Systém sám uzavírá proběhlé pobyty a ruší rezervace, které zůstaly dlouho nevyřízené. Nové pohledy provází krátký průvodce, takže je zvládne i člověk, který administraci otevírá poprvé.

Rezervace, které počítají s realitou kempu

Rezervační formulář prošel kompletním redesignem a pracuje s dostupností v reálném čase. Host nejdřív vybere termín a typ ubytování (karavan, stan, obytný vůz). Kalendář mu rovnou zablokuje plně obsazené noci i typy, pro které už není místo.

Systém neověřuje jen celkovou kapacitu. Kontroluje, že zůstane alespoň jedno místo volné po celou dobu pobytu, a podle toho omezí i nejzazší možný odjezd. Překryvy rezervací hlídá jak aplikace, tak databázové omezení, takže stejné místo nejde prodat dvakrát ani při souběžných rezervacích.

Provozovatel může v administraci zavřít kemp na vybrané dny, třeba kvůli akci nebo dovolené. Formulář je pak automaticky zablokuje a administrace ukáže seznam dotčených hostů, které je potřeba kontaktovat. Mimo sezónu se web přepne do režimu „konec sezóny“ s vypnutými rezervacemi.

Web je dvojjazyčný (čeština a angličtina) včetně rezervačního procesu, právních stránek a e-mailů. Má granulární cookie lištu a měření konverzí.

Statistiky sezóny

Na konci první sezóny přibyla stránka statistik. Ukazuje obsazenost, počty nocí a hostů, srovnání s předchozími roky, heatmapu vytížení a rozpad podle typu ubytování i zdroje rezervace (web, nebo ručně zadaná provozovatelem). Statistiky jdou filtrovat podle měsíce i typu a exportovat do CSV a Excelu. Data se zpracovávají bez osobních údajů hostů.

Infrastruktura v EU a nižší náklady

Po spuštění se ukázalo, že serverová část běží v USA, zatímco databáze sídlí ve Frankfurtu. Každý dotaz tak putoval přes Atlantik a administrace byla zbytečně pomalá. Aplikaci jsme proto přesunuli do Frankfurtu, do stejného datacentra a privátní sítě jako databázi PostgreSQL. Před aplikací stojí CDN.

Odezva databáze klesla z desítek milisekund na jednotky a databáze už není dostupná z veřejného internetu. Zároveň jsme zrušili nepoužívanou instanci Directusu, takže přesun proběhl bez výrazného navýšení měsíčních nákladů. Nasazení běží automaticky z GitHubu a o noční údržbu se starají plánované úlohy.

Bezpečnost a ochrana osobních údajů

Po sezóně proběhlo bezpečnostní posílení aplikace:

  • dvoufázové přihlášení (TOTP) do administrace
  • ochrana formulářů proti spamu a zneužití
  • připojení k databázi účtem s minimálními oprávněními
  • pravidelné bezpečnostní aktualizace závislostí

V souladu s GDPR systém automaticky anonymizuje osobní údaje u nerealizovaných rezervací po 12 měsících a u proběhlých pobytů po třech letech. Statistická data zůstávají zachovaná. Lhůty jsou zveřejněné v zásadách ochrany osobních údajů.

Současný stav

Projekt nadále rozvíjíme. Z původního MVP, které vzniklo během pár dní, je dnes stabilní systém. Za první sezónu přes něj prošlo více než 500 rezervací, provozovateli šetří čas při každodenní správě a díky statistikám dává podklady pro plánování dalších sezón.

Použité technologie

  • Next.js
  • TypeScript
  • PostgreSQL
  • Vlastní administrace (náhrada Directusu)
  • Cloudový hosting v EU (Frankfurt)
  • CDN
  • E-mailové automatizace (Resend)
  • Plánované úlohy pro automatickou údržbu

Výsledek

  • spuštění projektu v kritickém termínu před sezónou
  • funkční rezervační systém během několika dnů
  • vlastní administrace s mapou kempu, kalendářem obsazenosti a denním přehledem
  • rezervace s dostupností v reálném čase a ochranou proti dvojímu prodeji místa
  • dvojjazyčný web včetně rezervačního procesu
  • statistiky sezóny s exportem do Excelu
  • přesun infrastruktury do EU a rychlejší administrace
  • dvoufázové přihlášení a automatická anonymizace osobních údajů dle GDPR
  • dlouhodobý rozvoj projektu