Stúdiókezelési esettanulmány
Tattoos by Sandor
Foglalási és stúdiókezelési rendszer online előlegfizetéssel, helyszíni Tap to Pay fizetéssel, Xero-integrációval és központi adminisztrációs felülettel. A rendszer a foglalástól a végső fizetésig egyetlen folyamatban kezeli az ügyfél- és pénzügyi adatokat.
Áttekintés
Weboldal és stúdiókezelési rendszer egyben
A Tattoos by Sandor nyilvános weboldala mögött teljes foglalás- és fizetéskezelő rendszer működik. Az ügyfelek online foglalhatnak előlegfizetéssel, a stúdió kezelheti az előzetes foglalás nélküli alkalmakat és a helyszíni fizetéseket, a pénzügyi adatok pedig Xero-integráción keresztül továbbíthatók a könyvelési rendszerbe.
Az adminfelületen a művész egy helyen követheti a foglalásokat, az előlegeket, a végső fizetéseket és a kapcsolódó ügyféladatokat. A hozzáférést többek között TOTP-alapú kétfaktoros hitelesítés és token-visszavonás védi.
3
foglalástípus
32+
API-végpont
2
Stripe-integráció
6
biztonsági réteg

Foglalási folyamatok
Három foglalási mód. Egy rendszer.
A rendszer három eltérő foglalási helyzetet kezel, miközben az adatbázis szintjén is védi az időpontokat a dupla foglalástól.
Online foglalás + előleg
- Az ügyfél kiválasztja a dátumot és az idősávot
- Referenciaképeket tölthet fel
- Online kifizeti a foglalási előleget
- A sikeres fizetés után a rendszer automatikusan megerősíti a foglalást
- Az ügyfél és az admin automatikus e-mailes visszaigazolást kap
Előzetes foglalás nélküli alkalom (rugalmas időzítés)
- Az admin megnyitja az előzetes foglalás nélküli alkalom űrlapját az irányítópulton
- Beállítja a pontos időpontot 5 perces lépésekben
- Megadja az alkalom egyedi árát
- Kiválasztja a készpénzes vagy érintéses fizetést
- A foglalás azonnal megerősített állapotba kerül, előleg nélkül
Adminfoglalás + Tap to Pay
- Az admin kézi foglalást hoz létre az ügyfélnek
- A rendszer megnyitja az előre kitöltött Tap to Pay fizetési felületet
- Az ügyfél érintéssel fizet bankkártyával, Apple Payjel vagy Google Payjel
- A fizetés eredményét a rendszer azonnal rögzíti
- Sikeres fizetés után a foglalás automatikusan megerősített állapotba kerül
Admin irányítópult
A stúdió fő folyamatai egy helyen
Foglaláskezelés
A foglalások státusz szerint szűrhetők, és minden rekordnál megtekinthetők az ügyféladatok, a referenciaképek, az előleg állapota és a végső fizetés adatai. A foglalások szerkeszthetők, megerősíthetők, lemondhatók vagy szükség esetén egész napos alkalommá alakíthatók.
Végső fizetés rögzítése
Az alkalom végén a művész megadja a végső árat. A rendszer kiszámítja a még fizetendő összeget az előleg figyelembevételével, rögzíti a fizetési módot és a lezárás időpontját.
Pénzügyi irányítópult
A pénzügyi nézet összefoglalja az adott időszak foglalásait és fizetéseit, valamint megjeleníti a Xero-integráción keresztül szinkronizált számlaadatokat.
Blokkolt dátumok
Teljes napok vagy konkrét 3 órás idősávok blokkolhatók szabadság, rendezvények vagy személyes idő miatt. A blokkolt napok és idősávok automatikusan elérhetetlenné válnak az ügyfél foglalási naptárában.
Xero-szinkron
Egyedi foglalások vagy több megerősített kártyás fizetés egyszerre is szinkronizálható a Xeróval. A rendszer a számlákat a tranzakció típusa alapján kategorizálja.
Biztonság és 2FA
Az adminfelület JWT-alapú hitelesítést használ, amely opcionális TOTP-alapú kétfaktoros védelemmel egészíthető ki. A kijelentkezett tokeneket külön visszavonási lista érvényteleníti, a tömeges CSV-importot pedig több biztonsági ellenőrzés védi.
Fizetések
Online és helyszíni fizetés egy rendszerben
A stúdió működéséhez két eltérő fizetési helyzetet kellett kezelni: az online foglalási előlegeket és a helyszíni végső fizetéseket. A rendszer ezért külön online és Tap to Pay folyamatot használ.
Online fizetés, előlegek
Az ügyfél a foglalás során online fizeti ki az előleget. A sikeres fizetés visszaigazolása után a rendszer automatikusan megerősíti a foglalást és elküldi a szükséges e-mailes értesítéseket.
Tap to Pay érintéses fizetés
A helyszíni fizetéshez az admin előre kitöltött Tap to Pay felületet nyit meg a foglalás adataival és a fizetendő összeggel. Az ügyfél bankkártyával, Apple Payjel vagy Google Payjel közvetlenül a támogatott telefonon fizethet, külön kártyaolvasó nélkül.
Könyvelés
Xero-integráció
A kártyával fizetett foglalások számlaadatai OAuth 2.0 kapcsolaton keresztül továbbíthatók a Xeróba, az előre beállított adózási és számlázási szabályok szerint.
Online foglalási előleg
Xero-ba szinkronizálA fizetés megerősítésekor előlegszámla készül Xeróban.
Előzetes foglalás nélküli alkalom (kártyás fizetés)
Xero-ba szinkronizálA teljes alkalomról számla készül Xeróban, a megfelelő adókezeléssel.
További értékesítési lehetőségek
Utalványok, kedvezmények és hűségkártya
A rendszer az alapfoglalásokon kívül ajándékutalványokat, kedvezménykódokat és hűségkedvezményeket is kezel. Ezek mind közvetlenül befolyásolják a fizetendő összeget, ezért külön, tesztelhető üzleti szabályokként készültek el.
Ajándékutalványok
Az ajándékutalványok egyedi, könnyen felolvasható és kézzel is rögzíthető kódot kapnak. A kódgenerálásnál kizártam a könnyen összetéveszthető karaktereket, hogy telefonos vagy személyes diktáláskor kisebb legyen a hibázás esélye.
Kedvezménykódok
A kedvezménykódok százalékos vagy fix összegű kedvezményt biztosíthatnak, és meghatározott alkalomtípusokra vagy időszakokra korlátozhatók. A felhasználási és ügyfelenkénti limitek kódonként külön beállíthatók az adminfelületen.
A hűségkártya
A hűségkártya továbbra is fizikai, a rendszer csak a hozzá kapcsolódó kedvezményt kezeli. A végső ár rögzítésekor megadható, hogy a csökkentés hűségkedvezmény miatt történt, így a pénzügyi adatok később is egyértelműen visszakövethetők.
Technológiai háttér
A rendszer technológiai háttere
Felhasználói felület
- Next.js 14
- TypeScript
- Tailwind CSS
- React 18
- react-icons
Szerveroldal
- Next.js API Routes
- Raw SQL (mysql2)
- JWT auth (jsonwebtoken)
- bcryptjs
- TOTP 2FA (otplib)
Adatbázis
- MySQL 8.0
- Pesszimista zárolás
- Egyedi idősáv-korlátok
- Atomi tranzakciók
Fizetések
- Stripe Checkout (előlegek)
- Stripe Terminal (Tap to Pay)
- Stripe Webhooks
- Éles kulcsok éles környezetben
Integrációk
- Xero OAuth 2.0
- Cloudinary CDN (képek)
- Nodemailer SMTP (e-mail)
- Redis (kérésszám-korlátozás)
- Sentry (hibakövetés)
Mérnöki részletek
Fontos műszaki döntések
Dupla foglalás elleni adatbázis-védelem
Az adatbázis egyedi korlátozást és tranzakciós zárolást is használ, így ugyanaz az idősáv két párhuzamos foglalási kérés esetén sem rögzíthető kétszer.
Egész napos foglalások tranzakciós kezelése
Egy 6 órás alkalom két összekapcsolt 3 órás idősávrekordként tárolódik, egyetlen tranzakcióban létrehozva. Ha bármelyik beszúrás hibázik, mindkettő visszagördül. A kliens FULL: előtaggal azonosítja őket, az adatbázis pedig az egyező ügyféladatok alapján kapcsolja össze a sorokat.
Rugalmas walk-in időpontok a normál foglalások mellett
Az előzetes foglalás nélküli foglalások rugalmas, 5 perces időzítést használnak (például 14:35), ami ütközne a szabványos idősáv egyedi kulcsával. Az előzetes foglalás nélküli foglalásoknál a booking_type oszlop is része az egyedi korlátnak, így ugyanazon a napon ütközés nélkül megférnek a normál foglalások mellett.
JWT-tokenek biztonságos visszavonása
A serverless függvények állapotmentesek, de kijelentkezéskor akkor is érvényteleníteni kell a tokent. Minden JWT egyedi azonosítót hordoz. Kijelentkezéskor ez az azonosító szerveroldalon tárolódik, és minden védett útvonal hozzáférés előtt ellenőrzi.
Xero OAuth-tokenek kezelése serverless környezetben
A Xero OAuth tokenjei gyakran lejárnak. Mivel a Vercel-függvényeknek nincs tartós memóriájuk, a tokenek biztonságosan, szerveroldalon vannak tartósítva. Minden API-hívás betölti és használja a tokent, szükség esetén frissíti, majd visszamenti a frissített hitelesítő adatokat.
A pénzügyi szabályok tiszta függvények
Az utalvány-, kedvezmény- és előlegszámítás külön, tiszta üzleti függvényekben működik. Így a pénzügyi szabályok adatbázis-, fizetési és e-mail-integrációktól függetlenül tesztelhetők, ami csökkenti a regressziós hibák kockázatát.
Content Security Policy SHA-256 scripthashekkel
A szigorú Content Security Policy csak előre engedélyezett scriptforrásokat és SHA-256 hashsel azonosított inline scripteket enged futni. Ez további védelmi réteget biztosít az XSS-típusú támadásokkal szemben.
Foglalást, fizetést és adminisztrációt egy rendszerben szeretne kezelni?
Olyan foglalási rendszereket fejlesztek, ahol az időpontkezelés, az online és helyszíni fizetések, a könyvelési integrációk és az adminisztráció egy közös folyamatban működnek. Ha hasonló rendszerre van szüksége, az első konzultáción átbeszéljük a jelenlegi működést és a szükséges funkciókat.
