Veikals un aizmugures birojs
Kur nauda un krājumi paliek pareizi
Zevro pārdod vīriešu matu sistēmas fiksētā modeļu, izmēru un krāsu katalogā, katrs pasūtījums tiek saņemts no piegādātāja pēc tam, kad par to ir samaksāts. Veikalam vajadzēja pieņemt pasūtījumus visā pasaulē, droši veikt karšu maksājumus un nekad nepārdot krājumus, kuru tur nav.
Es izveidoju publisku veikalu un atsevišķu personāla biroju kā divas Next.js lietojumprogrammas bez serveriem vienā PostgreSQL datu bāzē ar Stripe maksājumiem, Cloudinary attēliem un servera puses adrešu meklēšanu.
Viesi un kontu īpašnieki var pasūtīt un maksāt ar karti no aptuveni 240 valstīm. Darbinieki pārvalda katalogu, krājumus, piegādi un saturu kā datus, un nav jāuzrauga serveri.

Zevro Hair Systems ir pilna e-komercijas platforma: publiska vitrīna un personāla CMS, katra Next.js 16 lietotne ir izvietota kā a Cloudflare darbinieks, tiekoties tikai vienā PostgreSQL datu bāze.
Nav atsevišķa API servera, nav Redis, nav rindas un nav savas failu krātuves. Dizains atbalsta pareizību, ja ir iesaistīta nauda un krājumi: cenas tiek atkārtoti nolasītas serverī, krājumi rezervēti vienai noliktavai darījumā un pasūtījums, kas atzīmēts kā apmaksāts tikai pēc pārbaudot ar Stripe.
Nekad neatzīmējiet apmaksātu pasūtījumu uzticībai
Veikals pieņem karšu maksājumus no viesiem un kontu īpašniekiem visā pasaulē. Atgriešanās veiksmes lapā neko nedrīkst pierādīt pati par sevi.
Nekad nepārdodiet krājumus, kuru tur nav
Fiksēts modeļu katalogs, katrs no tiem ir pieejams vairākos pamatizmēros un matu krāsās dažādās noliktavās. Tas pats variants ar dažādām opciju akcijām akcijām.
Viena vieta darbiniekiem, lai vadītu veikalu
Produktiem, attēliem, krājumiem, klientiem, pasūtījumiem, saturam un atļaujām bija jābūt personālam pārvaldāmiem bez izstrādātāja.
Lēti ekspluatācijā, bez serveriem
Workers izpildlaikam nav savienojuma atkārtotas izmantošanas starp pieprasījumiem un nav vietējo moduļu, tāpēc piekļuvei datu bāzei, paroļu jaukšanai un e-pastam bija tam jāatbilst.
- 01
Grozs
Pievienojot preci, tiek pārbaudīta šī varianta kopsumma katrā groza rindā, tāpēc saskarne nekad nepiedāvā daudzumu, ko serveris atteiktu.
- 02
Izrakstīties
Pārlūkprogramma sūta identifikatorus un daudzumus, nevis cenas. Serveris no datu bāzes atkārtoti nolasa katru cenu, piegādes maksu un valūtu.
- 03
Pasūtījums veikts
Krājumu rindas tiek bloķētas un krājumi tiek rezervēti pa noliktavām vienā darījumā. Pasūtījumam tiek izmantots groza identifikators, tāpēc divreiz iesniedzot, tiek atgriezts tas pats pasūtījums.
- 04
Stripe Checkout
Sesija tiek izveidota serverī no saglabātā pasūtījuma ar piespraustu API versiju un idempotences atslēgu, kas iegūta no pasūtījuma, mēģinājuma numura un pieprasījuma hash.
- 05
Apstiprināts
Pasūtījums tiek atzīmēts par apmaksātu tikai pēc tam, kad Stripe ziņo par sesiju kā apmaksātu un tā atsauci, summu un valūtu sakrīt. E-pasta ziņojumi tiek nosūtīti pēc maksājuma veikšanas.
Veikala mājaslapa un CMS ir atsevišķas izvietošanas ar atsevišķām sesijām, sīkfailiem un uzbrukuma virsmām. Problēma publiskajā veikalā nevar atklāt personāla funkcijas, jo tās nav vienā aplikācijā.
Katrai lietotnei ir savs API kā vienkāršu pieprasījumu apstrādātāji aiz neliela maršrutētāja, kas tiek sasniegts, izmantojot HTTP, izmantojot vienu visaptverošu maršrutu, vai procesa laikā no savām lapām. Viens validācijas, autorizācijas un SQL komplekts bez tīkla lēciena starp lapu un savu API.
Darbinieks atver datu bāzes savienojumu katram vaicājumam vai transakcijai, izmantojot Neon apvienoto galapunktu. Viedais izvietojums vada darbinieku netālu no datu bāzes, nevis apmeklētāju, jo lapa veic vairākus vaicājumus.
Summas ir CIPARI datu bāzē un decimāldaļas teksts lietojumprogrammā ar nelielu precīzās aritmētiskās palīgierīci. Ceļā uz Stripe nekas netiek noapaļots caur peldošo komatu.
Pasūtījuma vienība kopē produkta nosaukumu, SKU, cenu un izvēlētās opcijas pirkuma brīdī, tāpēc vēlākie kataloga labojumi nekad nepārraksta vēsturi. Pasūtījums, maksājums un izpildes statuss ir trīs neatkarīgas kolonnas.
65 versiju SQL migrācijas izveido apmēram 120 tabulas piecās shēmās. Tie darbojas stingrā secībā, un katrs tiek ierakstīts ar savu vēstures rindu tajā pašā darījumā. Identifikatori ir ULID: kārtojami, droši un neuzminējami.
Veicot pasūtījumu, tiek bloķētas krājumu rindas, tiek rezervēti krājumi pa noliktavām un tiek reģistrēts tieši tas, kas tika rezervēts, kur vienā darījumā. Atceļot izlaidumus, tiek atbrīvotas tieši šīs rezervācijas.
Produkta lapa, grozs un galvenes soma atņem to, kas jau ir grozā, tāpēc klientam nekad netiek piedāvāts daudzums, ko izrakstīšanās noraidītu.
Vienlaicīgi klikšķi saņem vienu un to pašu Stripe sesiju, un labotais pieprasījums nekad netiek bloķēts ar iepriekšēju neveiksmīgu pieprasījumu. Maksājuma ierakstīšana tiek apsargāta, lai tas notiktu tieši vienu reizi, lai arī cik reižu pasūtījums tiktu skatīts.
Atceļot pasūtījumu, vispirms tiek nokārtota vai beigusies jebkura atvērtā Stripe sesija, tāpēc atcelto pasūtījumu pēc tam nevar apmaksāt.
Checkout neizdevās tikai izvietošanas laikā. Tiešraides darbinieka žurnālu sakārtošana, reproducējot reālu pieprasījumu, liecināja, ka Stripe noraidīja sesijas izveidi, jo konts nepiedāvāja maksājuma veidus. Iemesls tika novērsts, un reģistrēšana tagad reģistrē Stripe kļūdas kodu un pieprasījuma ID.
Checkout darbojas bez konta. Viesi identificē ar nejaušu marķieri sīkfailā HttpOnly; tiek saglabāts tikai tā hash. Paroles izmanto Argon2id tīrā JavaScript, un sesijas ir jauktas datu bāzes rindas, kuras var atsaukt centralizēti.
Katrā pieprasījumā tiek pārbaudīts pierakstījies konts vai viesis, kuram ir pasūtījuma marķieris. Pasūtījumu viesis var atvērt jebkurā ierīcē ar pasūtījuma numuru, uzvārdu un pasta indeksu; visiem trim ir jāsakrīt, nepareiza informācija sniedz vienu vispārīgu atbildi, un rezultāts ir tikai lasāms.
Katrs CMS maršruts nosauc atļauju, lomām ir atļaujas, un personāla darbības tiek ierakstītas audita žurnālā. Pieprasījuma struktūras tiek pārbaudītas, salīdzinot ar deklarēto formu, un nezināmi lauki tiek noraidīti.
Katrā piegādes veidā ir norādītas valstis, kurās tas apkalpo, tāpēc reģionus un cenas maina darbinieki, nevis kods. Tā kā katrs pasūtījums tiek iegūts pēc pirkuma, veikals piedāvā vienu norādīto piegādes solījumu ar izslēgtām, bet gatavām pārvadātāja metodēm.
Pasta indeksa lauks ir nosaukts valstij, ievadot pasta indeksu, tiek aizpildīta pilsēta, un mājas numurs un iela norāda tuvumā esošās atbilstības. Uzmeklēšana tiek veikta serverī, tāpēc nodrošinātāja atslēga nekad netiek atklāta, un adresi vienmēr var ierakstīt ar roku.
Zīmola HTML e-pasta ziņojumi ar vienkārša teksta alternatīvu tiek nosūtīti, kad pasūtījums ir apmaksāts, pēc tam, kad maksājums ir veikts. Pasta bibliotēkas noklusējuma savienojums neizdevās TLS rokasspiedienā darbiniekiem; izsekots no dzīvajiem žurnāliem un labots, izveidojot savienojumu, izmantojot saimniekdatora nosaukumu.
Servera renderēts katalogs un saturs ar produktu lapām, kas piedāvā galeriju, variantu izvēli, krājumus pēc noliktavas un pielāgotas opcijas.
A dark black-and-gold default theme with a light alternative, an animated brand mark on first load, smooth scrolling and scroll-linked transitions with GSAP and Lenis. Reduced-motion preferences are respected.
Žurnālu, stāstus, ceļvežus, FAQ un politikas rediģē biroja darbinieki.
Tipa pārbaude līdz galam ar automatizētām pārbaudēm, kas aptver pasūtījumu e-pastus un to piegādi, daudzuma ierobežojumus, piegādes reģionus, adreses veidlapu un pasūtījuma darbības.
Katra lietojumprogramma tiek veidota ar OpenNext adapteri un tiek publicēta pakalpojumā Cloudflare ar vienu komandu. Konfigurācija ir repozitorijā; noslēpumi ir strādnieku noslēpumi un tādi nav.
Novērojamība ir ieslēgta abiem darbiniekiem ar strukturētu kļūdu reģistrēšanu katrā integrācijā. Izvietotās lietojumprogrammas labojumi tika apstiprināti ar reāliem pieprasījumiem, ne tikai izstrādes mašīnā.
Maksājuma apstiprinājums ir pull, nevis push
Maksājums tiek apstiprināts, kad klients atgriežas pie pasūtījuma.
Stripe tīmekļa aizķere, tāpēc apstiprinājums un e-pasta ziņojumi nav atkarīgi no klienta atgriešanās
Adrešu ieteikumi ir atkarīgi no kartes datiem
Kartes dati zina ielas labāk nekā atsevišķus dzīvokļus.
Pasta reģistra pakalpojumu sniedzējs ir pievienots tam pašam galapunktam precīzām AK adresēm
Nav fona darbu rindas
E-pasts tiek nosūtīts vienu reizi pēc atbildes saņemšanas.
Rinda ar mēģinājumiem, lai padarītu piegādi stabilāku
Atsauksmes ir izstrādātas, nevis būvētas
Pārbaudītas pirkumu atsauksmes, kas saistītas ar piegādātiem, apmaksātiem pasūtījumiem, ar regulēšanu SPS.
Nākamā izveides funkcija
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ā.