Restorāna vietne un
Rezervēšanas sistēma uz robežas
Land of Fire ir azerbaidžāņu restorāns Kaledonijas ceļā King's Cross. Vietnei bija jāizstāsta savs stāsts, jāpieņem galdiņu rezervācijas bez trešās puses logrīka un jānodrošina darbiniekiem viena privāta vieta, kur vadīt māju.
Es izveidoju kinematogrāfisku vietni trīs valodās, publisku rezervāciju plūsmu un privātu personāla darbvietu rezervācijām un viesu e-pastam, un tas viss darbojas kā viens Cloudflare Worker, ko nodrošina PostgreSQL.
Viesi pieprasa galdiņu tiešsaistē un tiek informēti pa e-pastu. Darbinieki apstiprina, maina un eksportē rezervācijas no vienas vietas. Nav jāuztur serveri, kā arī nav analītikas vai reklāmas sīkfailu.
- SĀKUMA PUNKTS
Tīmekļa vietne, kurā bija uzskaitīti ēdieni, bet nekas nebija teikts par šo vietu
Land of Fire jau bija vietne, kas izveidota, izmantojot tiešsaistes pasūtīšanas veidni. Tajā bija ēdienkarte, adrese un stundas. Tas neparādīja, ar ko restorāns atšķiras: azerbaidžāņu mājas virtuve, tēja, kas pasniegta armudu glāzēs, un vienmēr vieta vēl vienam pie galda.
- KO ES PAMANĪJU
Vecā vietne bija pretrunā pati ar sevi
Mājaslapa trīs vietās ievietoja "Pasūtīt tiešsaistē", savukārt lapā iebūvētajā paziņojumā teikts, ka tiešsaistes pasūtīšana ir izslēgta, un peldošās cilnes aicināja viesus reģistrēt tai kontu. Pirmdiena tika norādīta kā "00:00, 00:00", kad restorāns pirmdienās ir slēgts. A pop-up announcing an August closure was still showing in October. And the site was in English only, though an Azerbaijani restaurant's guests are as likely to read Azerbaijani or Russian. Each problem was small, but together they told a first-time visitor that nobody was looking after the site.
- IDEJA
"Vienmēr ir vieta vēl vienam"
Es pārtraucu šo vietni uzskatīt par līdzņemamu katalogu un izveidoju to kā sveicienu. Šī līnija kļuva par pavedienu visā vietnē. Tas tiek atvērts pilnekrāna filmā, pēc tam iepazīstina ar cilvēkiem, ēdieniem, kas gatavoti kopīgai lietošanai, un azerbaidžāņu saknēm aiz tiem. Tas beidzas ar norādēm uz durvīm. Jaunavas torņa ilustrācijas ar zelta līniju, tējas komplekts, paklājs un darva piešķir tai identitāti, ko nevarētu izmantot veidne.
- LADOT TO DARBOTIES
Skaista vietne ir tikai puse no darba
Restorāns pats apstiprina katru galdiņu, tāpēc rezervācijas veidlapā tiek solīts pieprasījums, nevis tūlītējs apstiprinājums, un tas teikts skaidri. Aiz tā es izveidoju privātu darbvietu, kurā darbinieki apstiprina, maina un eksportē rezervācijas un atbild viesu e-pastiem no vienas vietas. Tālāk sniegtā inženierija pastāv tā, lai šis viens solījums atbilstu: pieprasījums nekad netiek pazaudēts, nekad netiek dublēts un nekad netiek nopludināts.
- ŠODIEN
Viena vieta, kur atklāt, izlemt un rezervēt
Tagad viesis var izlasīt stāstu, pārlūkot pilnu ēdienkarti ar cenām, pārbaudīt atsauksmes un pieprasīt tabulu vienā lapā angļu, azerbaidžāņu vai krievu valodā. Staff work from a single dashboard instead of an inbox and a phone. Nav serveru, ko uzturēt.


ORIĢINĀLS LAPA BEIDZAS ŠEIT


- —Augšējā e-pasta josla, tālrunis, četras sociālo tīklu ikonas un poga Rezervācija virs otrās saišu rindas
- —"Izvēlne" atver 12 ēdienu kategoriju nolaižamo izvēlni, katrai no tām ir sava lapa
- —Pasūtīšanas kontam katras lapas kreisajā malā atrodas pieteikšanās un reģistrācijas cilnes
- —Tālruņos: neliels panelis ar četrām saitēm, kā arī fiksēta piecu pogu josla, tostarp "Pasūtīt tiešsaistē" izslēgtai pasūtīšanas sistēmai
- —Četras klusas teksta saites un logotips centrā; nekas nekonkurē ar filmu
- —Viena poga "Izvēlne" atver pilnekrāna pārklājumu ar pieciem numurētiem galamērķiem, kas beidzas ar "Rezervēt galdiņu"
- —Adrese, tālrunis, Deliveroo, e-pasts un sociālās saites atrodas blakus izvēlnei, tāpēc kontaktinformācija ir viena pieskāriena attālumā
- —Tas pats pārklājums visiem ekrāna izmēriem, atvērts un aizvērts ar tastatūru, kā arī pieskaroties
| APJOMS | ORIĢINĀLĀ VIETNE | PĀRDOŠANA |
|---|---|---|
| Pirmais iespaids | Vispārēja kopija “Laipni lūdzam oficiālajā vietnē” un četras attēla saites bez etiķetēm | Full-screen film of the restaurant behind "A little fire. A lot of soul." un viena poga "Rezervēt galdiņu". |
| Stāstu stāstīšana | Nav stāsta, mantojuma vai cilvēku; viena rindkopa | nodaļas “Mūsu stāsts”, “Pie mūsu galda” un “Mūsu saknes” ar mantojuma kartēm, kas saistītas ar UNESCO avotiem |
| Vizuālā identitāte | Pieejama pasūtīšanas veidne ar krājumu kategorijas flīzēm | Visā vietnē izmantots ekskluzīvs zelta mākslas darbu komplekts (Maiden Tower, Armudu tējas glāze, paklājs, darva, granātābols). |
| Izvēlne | Divpadsmit atsevišķas kategoriju lapas, katra klikšķa un lapas ielādes attālumā | Viena cilnes izvēlne ar ēdienu aprakstiem un cenām, kā arī PDF lejupielādes un Deliveroo saiti |
| Rezervēšana | Form shown alongside an "order now" button for a switched-off ordering system; rezervācijas CTA atkārto apmēram piecas reizes | Viena skaidra veidlapa ar reālu darba laiku, 1–8 viesu atlasītājs, piekrišana un godīgs "pieprasījums, nevis apstiprinājums" formulējums |
| Darba laiks | Pirmdiena tiek rādīta kā "00:00, 00:00"; stundu bloks dublēts kā "Rezervācijas stundas" | "Pirmdiena: Slēgts", norādīts vienreiz un tiek īstenots ar to pašu moduli, ko izmanto rezervēšanas API |
| Valodas | tikai angļu valodā; an EN / DE switch exists in the code but is hidden from visitors | Angļu, azerbaidžāņu un krievu valodā, ar meklētājprogrammu aizstājējiem hreflang |
| Uzticība un sociāls pierādījums | Uznirstošais logs, kas paziņo par augusta slēgšanu, un oktobrī joprojām tiek rādīti vietturi “Notiek ielāde…” un kopiju drukas kļūdas | Tripadvisor citāti virs rezervācijas veidlapas, saites uz Google un Tripadvisor, nav bojātu saišu |
| Pieejamība | Tikai attēla saites bez alternatīva teksta | Izlaist saiti, semantiskie orientieri, ar tastatūru darbināmi atlasītāji un pilnīgs preferenču un samazinātu kustību atbalsts |
Pirmais iespaids
Vispārēja kopija “Laipni lūdzam oficiālajā vietnē” un četras attēla saites bez etiķetēm
Full-screen film of the restaurant behind "A little fire. A lot of soul." un viena poga "Rezervēt galdiņu".
Stāstu stāstīšana
Nav stāsta, mantojuma vai cilvēku; viena rindkopa
nodaļas “Mūsu stāsts”, “Pie mūsu galda” un “Mūsu saknes” ar mantojuma kartēm, kas saistītas ar UNESCO avotiem
Vizuālā identitāte
Pieejama pasūtīšanas veidne ar krājumu kategorijas flīzēm
Visā vietnē izmantots ekskluzīvs zelta mākslas darbu komplekts (Maiden Tower, Armudu tējas glāze, paklājs, darva, granātābols).
Izvēlne
Divpadsmit atsevišķas kategoriju lapas, katra klikšķa un lapas ielādes attālumā
Viena cilnes izvēlne ar ēdienu aprakstiem un cenām, kā arī PDF lejupielādes un Deliveroo saiti
Rezervēšana
Form shown alongside an "order now" button for a switched-off ordering system; rezervācijas CTA atkārto apmēram piecas reizes
Viena skaidra veidlapa ar reālu darba laiku, 1–8 viesu atlasītājs, piekrišana un godīgs "pieprasījums, nevis apstiprinājums" formulējums
Darba laiks
Pirmdiena tiek rādīta kā "00:00, 00:00"; stundu bloks dublēts kā "Rezervācijas stundas"
"Pirmdiena: Slēgts", norādīts vienreiz un tiek īstenots ar to pašu moduli, ko izmanto rezervēšanas API
Valodas
tikai angļu valodā; an EN / DE switch exists in the code but is hidden from visitors
Angļu, azerbaidžāņu un krievu valodā, ar meklētājprogrammu aizstājējiem hreflang
Uzticība un sociāls pierādījums
Uznirstošais logs, kas paziņo par augusta slēgšanu, un oktobrī joprojām tiek rādīti vietturi “Notiek ielāde…” un kopiju drukas kļūdas
Tripadvisor citāti virs rezervācijas veidlapas, saites uz Google un Tripadvisor, nav bojātu saišu
Pieejamība
Tikai attēla saites bez alternatīva teksta
Izlaist saiti, semantiskie orientieri, ar tastatūru darbināmi atlasītāji un pilnīgs preferenču un samazinātu kustību atbalsts

Land of Fire ir pilnīga restorānu tīmekļa platforma: daudzvalodu mārketinga vietne, publiska rezervācijas plūsma un privāta personāla darbvieta, kas izveidota ar Next.js 16 un PostgreSQL un izvietots kā viens Cloudflare darbinieks.
Publiskās lapas tiek iepriekš renderētas un tiek rādītas kā statisks saturs; tikai rezervācijas un personāla API izpilda kodu pēc pieprasījuma. Pareizību nodrošina datu bāze: idempotences atslēgas, konsultatīvās slēdzenes, rindu bloķēšanas, optimistiskas pārskatīšanas un darījumu e-pasta izsūtne, ar integrācijas testiem pret reāliem PostgreSQL un sintētiskiem TLS pasta serveriem.
Nav serveru, zemas ekspluatācijas izmaksas
Restorānā nav operāciju komandas. The platform had to run without servers to maintain, and without paying for or depending on a third-party booking widget.
Viesu dati ir personas dati
Vārdi, e-pasta adreses, tālruņu numuri un piezīmes par uzturu nekad nedrīkst nonākt publiskās lapās, kešatmiņās, žurnālos vai veidot artefaktus.
Katra rezervācija ir apstiprināta ar roku
Restorāns pats apstiprina katru rezervāciju. The system records requests and keeps people informed; tas nepiešķir tabulas vai neapstiprina automātiski.
Neuzticams tīkls
Cilvēki veic rezervācijas tālruņos, vilcienos un veic dubultskārienu iesniegšanas pogām. Atkārtots mēģinājums vai atkārtots pieprasījums nekad nedrīkst izveidot otru rezervāciju.
- 01
Pieprasīt
Pārlūkprogramma ģenerē UUID, kad viesis pirmo reizi nospiež iesniegt, un izmanto to atkārtoti katrā atkārtotajā mēģinājumā.
- 02
Sargs
Tādas pašas izcelsmes pārbaude, JSON satura veids, 8 KB korpusa vāciņš, slēpts medus poda lauks un pārbaude pret reālo darba laiku.
- 03
Slēdzene
Viesa e-pastā ievadītā darījumu aptvēruma PostgreSQL padomdevēja bloķēšana serializē vienlaicīgus pieprasījumus visās Worker instancēs.
- 04
Rakstiet
The booking, an audit event and the guest and staff emails are inserted in one transaction. Atkārtots mēģinājums atgriež sākotnējo atsauci.
- 05
Piegādāt
Pēc saistību izpildes Darbinieks nosūta rindā esošos e-pasta ziņojumus pēc iespējas labāk un atbild uz 201 ar rezervācijas atsauci.
Klienta ģenerētais UUID ir rezervācijas primārā atslēga, tāpēc, veicot dubultskārienu vai veicot atkārtotu mēģinājumu pēc taimauta, tiek atgriezta sākotnējā atsauce. Atkārtots mēģinājums, kas tiek veikts ar citu e-pasta adresi, tiek noraidīts, tāpēc uzminētais ID nevar pārbaudīt kāda cita rezervāciju.
Viens modulis nosaka darba laiku, un to importē gan veidlapa, gan API: slēgts pirmdienās, pusstundas laika posmi, pēdējā sēde divas stundas pirms slēgšanas, 1–8 viesi, līdz 90 dienām uz priekšu, vienmēr tiek novērtēts pēc Londonas laika.
If the database is unreachable the form shows the restaurant's phone number instead of failing silently. Publiskā vietne nekad nav atkarīga no datu bāzes.
E-pasta ziņojumi tiek atveidoti un ievietoti izsūtnē tajā pašā darījumā, kurā tika veikta rezervācija, un katram ir unikāla atšifrēšanas atslēgu, tāpēc atkārtoti atskaņots pieprasījums nevar ievietot rindā dublikātu.
Neapstiprinātie ziņojumi tiek pieprasīti pa vienam ar FOR UPDATE SKIP LOCKED. Kļūmes atgriežas gaidīšanas režīmā, un ziņojums, kas iestrēdzis sūtīšanā ilgāk par piecām minūtēm, atkal kļūst par prasību.
Renderētais HTML, vienkāršais teksts un .ics pielikums tiek glabāti rindā, tāpēc atkārtots mēģinājums nosūta tieši to, kas tika izveidots. Laiki tiek pārrēķināti no Londonas sienas pulksteņa laika uz UTC, tāpēc ielūgumi paliek pareizi, ņemot vērā vasaras laika izmaiņas.
Sešciparu kodi, kas derīgi desmit minūtes, vienreizējai lietošanai, ar ne vairāk kā pieciem minējumiem, kas izdarīti rindas bloķēšanas iekšpusē. Datu bāzē tiek glabāti tikai izaicinājuma pilnvaras un koda SHA-256 īssavilkumi.
Argon2id in PHC format, with older scrypt hashes upgraded on the next successful login and a fifteen-minute lockout after five failures. Sessions are 32 random bytes in an HttpOnly, Secure, SameSite=Strict cookie; tiek saglabāts tikai apkopojums.
Viens iesaiņotājs veic rakstīšanas izcelsmes pārbaudi, apstiprina sesiju, iestata kešatmiņas kontroli: privāta, bez veikala, sanitizē kļūdu reģistrēšanu un vienmēr aizver datu bāzes savienojumu. Visas personāla izmaiņas tiek ierakstītas revīzijas tabulā.
Katrai rezervācijai ir pārskatīšanas numurs. Serveris bloķē rindu, salīdzina un atgriež 409 konfliktu, ja kolēģis vispirms saglabāja, tāpēc divas planšetdatoras nevar klusi pārrakstīt viena otru.
Šūnām, kas sākas ar =, +, - vai @, ir prefikss, tāpēc izklājlapu programmatūra tās uzskata par tekstu. Viesu nodrošinātās piezīmes nevar izpildīt kā formulas, kad eksportēšana tiek atvērta programmā Excel.
IMAP pastkaste tiek atvērta tikai lasāma, nelasītie karodziņi tiek atstāti neskarti un tiek rādīts tikai vienkāršs teksts. Attālais HTML un attēli nekad netiek renderēti personāla informācijas panelī.
Programmā Workers TCP ligzda pieder pieprasījumam, kas to atvēra. Katrs API izsaukums atver tieši vienu savienojumu ar atspējotiem sagatavotajiem priekšrakstiem un aizver to beigu blokā.
Postgres.js ir atzīmēts kā ārējs, tāpēc OpenNext izvēlas savu darbinieka būvējumu, ar būvēšanas darbību, kas apliecina, ka izvadē ir Cloudflare ligzdas draiveris. Novērsta SMTP STARTTLS, nododot nodemailer ligzdu, kas savienota ar saimniekdatora nosaukumu, saglabājot pilnībā iespējotu sertifikāta verifikāciju.
Next.js 16.4 izstaro manifestu, kuru OpenNext 1.20 neapkopa, izpildes laikā sabojājot Worker. Izsekoja to līdz vienam globusa rakstam un satur vienas rindiņas ielāpu, kas tiek lietots automātiski instalēšanas laikā.
Skripts pēc izveides pārraksta adaptera vides moduli, lai saglabātu tikai NEXT_PUBLIC_ vērtības, un pēc tam skenē katru izvades failu, lai atrastu burtiskā datu bāzes URL un pasta paroles, kā arī jebkuru klaiņojošu .env failu. Izvietošana neizdodas, ja kaut kas tiek atrasts.
Īstie noslēpumi tiek augšupielādēti atsevišķi kā šifrēti darbinieka noslēpumi, kas tiek nosūtīti caur stdin, lai tie nekad neparādītos čaulas vēsturē, procesa argumentos vai žurnālos.
Viena komanda izveido lietotni, pārveido to ar OpenNext, palaiž slepeno skenēšanu un izvieto ar Wrangler. 223 statiskie līdzekļi tiek augšupielādēti pakāpeniski.
GSAP laika skalas ievads, iekļautas SVG ainas, kas animētas ar ScrollTrigger un Lenis vienmērīgu ritināšanu, ko koordinē pielāgoti DOM notikumi. Datuma atlasītājs un atlases izvēlnes ir izveidotas no jauna, izmantojot tastatūras atbalstu.
Visi kustības apbalvojumi dod priekšroku-reduced-motion: ievads tiek izlaists, varoņa video pauzes un ritināšanas efekti ir atspējoti. Izlaist saites, semantiskos orientierus, katras valodas lang atribūtus un redzamu video pauzes vadīklu.
Katras lapas metadati no viena palīga, savstarpējais hreflang mijas ar x-default, ģenerētu vietnes karti un robotiem un restorānu JSON-LD. Strukturētajos datos netiek pieprasītas atsauksmes par zvaigznītēm vai apkopotiem vērtējumiem.
Rezervēšanas testi sāk vienreizējās lietošanas PostgreSQL klasteru un ražošanas serveri, pēc tam pārbauda noturību, idempotenci, vienlaicīgus atkārtotus mēģinājumus, validāciju, piekrišanu, izcelsmes aizsardzību un ātruma ierobežojumus.
Shēmas migrācija no sākotnējās versijas, pierakstīšanās un sesijas, rediģēšanas konflikti, CSV eksportēšana un e-pasta piegāde, kļūme un atkārtots mēģinājums pret sintētiskiem TLS pasta serveriem galddatorā un mobilajā ierīcē.
Katrs maršruts, ilustrācijas, baitiem precīza PDF lejupielāde, video diapazona pieprasījumi, rezervācijas apstiprināšana un izcelsmes aizsardzība. Neviens tests neskar restorāna reālo datu bāzi vai nesūta īstu e-pastu.
Personāls apstiprina rezervācijas manuāli
Nav tiešraides pieejamības; iespējama dubulta rezervācija
Tabulu inventarizācija un ietilpības uz slotu pārbaudes
Atkārtoti mēģinājumi pa e-pastu tiek aktivizēti pēc pieprasījumiem vai personāla
Neveiksmīgs e-pasts gaida līdz nākamajai darbībai vai manuālam atkārtotam mēģinājumam
Cloudflare Cron Trigger, kas iztukšo izsūtni
Viens datu bāzes savienojums katram pieprasījumam
Savienojuma iestatīšanas latentums katrā API izsaukumā
Cloudflare Hyperdrive malu apvienošanai
Likmes ierobežojums ir norādīts tikai e-pastā
Skripts var pagriezt adreses
Uz IP balstīti ierobežojumi vai turniketa izaicinājums
Rezervācijas veidlapa un iekšējās lapas tikai angļu valodā
Azerbaidžāņu un krievu viesi rezervē angļu valodā
Tulkojiet rezervēšanas plūsmu un izvēlni
Autentifikācija, kas izveidota uz vietas
Vairāk koda, kas pieder un jāpārbauda
Pieņemams šajā jomā; atkārtoti apmeklējiet, ja ir nepieciešama SSO vai MFA
Ir ideja projektam?
Pastāstiet man, ko jūs mēģināt sasniegt. Jums nav jāzina, kura tehnoloģija jums ir nepieciešama: es palīdzēšu definēt tehnisko pieeju, darbības jomu, laika grafiku un izmaksas pirms izstrādes sākuma.
- E-PASTS // info@artursdev.co.uk
- TĀLRUNIS // 07460 162893
- VĒLATIES APRUNĀTIES? // Rakstiet, lai vienotos par zvanu
- LINKEDIN // aradionovs ↗
- ATRODOS // Bārneta, Ziemeļlondona, Lielbritānija. Darbs ar klientiem jebkurā vietā.