Ugrás a tartalomra

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

A Tattoos by Sandor weboldal

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

  1. Az ügyfél kiválasztja a dátumot és az idősávot
  2. Referenciaképeket tölthet fel
  3. Online kifizeti a foglalási előleget
  4. A sikeres fizetés után a rendszer automatikusan megerősíti a foglalást
  5. 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)

  1. Az admin megnyitja az előzetes foglalás nélküli alkalom űrlapját az irányítópulton
  2. Beállítja a pontos időpontot 5 perces lépésekben
  3. Megadja az alkalom egyedi árát
  4. Kiválasztja a készpénzes vagy érintéses fizetést
  5. A foglalás azonnal megerősített állapotba kerül, előleg nélkül
📱

Adminfoglalás + Tap to Pay

  1. Az admin kézi foglalást hoz létre az ügyfélnek
  2. A rendszer megnyitja az előre kitöltött Tap to Pay fizetési felületet
  3. Az ügyfél érintéssel fizet bankkártyával, Apple Payjel vagy Google Payjel
  4. A fizetés eredményét a rendszer azonnal rögzíti
  5. 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ál

A 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ál

A 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.