Kalo te përmbajtja

Punët

Çfarë kemi ndërtuar, dhe çfarë provon

Produkte të ndërtuara brenda studios për bizneset tona, jo punë për klientë: ende nuk kemi klientë. Hapeni cilindo prej tyre me ne në një bisedë.

Produkt i brendshëm · para lansimit · pagesa në regjim testimi

Whenbird

Një platformë rezervimesh ku bizneset publikojnë disponueshmërinë e tyre dhe klientët rezervojnë, me pagesat e rezervimeve që shkojnë te biznesi, në regjimin e testimit të Stripe derisa të hapen pagesat live.

Provë për: Ndërtim SaaS dhe platforme

Faqja kryesore e Whenbird: një titull për një faqe rezervimi në gjuhën e çdo vizitori, një buton “Get started free” dhe një shembull faqeje rezervimi me ditë dhe orë për të zgjedhur.
Faqja publike kryesore e Whenbird, e kapur më 17 tetor 2026.
Seksioni “How it works” i Whenbird: caktoni orarin, ndani lidhjen dhe merrni rezervime, secili pranë një pamjeje shembull.
Seksioni “How it works” i Whenbird, i kapur më 17 tetor 2026.
Faqja e çmimeve e Whenbird: një plan Free pranë një kutie për partnerët themelues që thotë se Pro ende nuk shitet.
Faqja e çmimeve e Whenbird, e kapur më 17 tetor 2026; Pro është shënuar si ende jo në shitje.
trajtues rrugësh API
73trajtues rrugësh API
modele të bazës së të dhënave
21modele të bazës së të dhënave
migrime të regjistruara
10migrime të regjistruara
gjuhë
5gjuhë

Multi-tenant që nga skema: çdo biznes është një organizatë me shërbimet, burimet, stafin, rregullat e disponueshmërisë, periudhat e bllokuara dhe faqen e vet publike të rezervimit.

Klientët hyjnë me një kod katërshifror që u vjen me email, jo me fjalëkalim, dhe sesioni verifikohet sërish ndaj bazës së të dhënave në çdo renderim në server, në vend që t'i besohet një tokeni të nënshkruar.

Pagesat janë ndërtuar mbi Stripe Connect Express dhe funksionojnë në regjimin e testimit të Stripe derisa të hapen pagesat live. Çdo biznes është tregtari që i merr paratë për rezervimet e veta, dhe ne nuk jemi kurrë në rrugën e parave.

Pagesat krijohen me on_behalf_of, kështu që në pasqyrën e klientit shfaqet biznesi te i cili rezervoi. Gatishmëria e llogarisë së lidhur për të marrë para shkruhet vetëm nga webhook-u account.updated i vetë Stripe — kurrë nuk e pohon klienti.

Pesë gjuhë, me përkthime të vërteta, jo me tekste të mbushura automatikisht. E vetmja mangësi e deklaruar — njëzet e gjashtë çelësa në ekranin e përmbledhjes së panelit që shfaqeshin në anglisht — është mbyllur: një krahasim çelës për çelës me burimin anglisht tregon zero çelësa që mungojnë në secilën nga katër gjuhët e përkthyera.

Email-et ndjekin lexuesin: email-i i pronarit dërgohet në gjuhën me të cilën ka hyrë, ai i klientit në gjuhën në të cilën ka rezervuar, me data të formatuara për atë gjuhë. Aplikacioni web shërbehet në whenbird.com dhe API-ja e tij në api.whenbird.com.

Pjesa e vështirë

Makina e gjendjeve të pagesës i merr kalimet e veta me një përditësim të kushtëzuar nga gjendja prej së cilës po lëviz, kështu që webhook-u i Stripe dhe pika e statusit të vetë rezervimit mund të garojnë mes tyre — siç ndodh rregullisht — dhe email-i i konfirmimit dërgohet përsëri saktësisht një herë. Vetëm pagesa me kartë, me qëllim: SEPA dhe ACH e lëshojnë ngjarjen e përfundimit para se paratë të jenë shlyer realisht, gjë që do ta shënonte një rezervim si të paguar me fonde që mund të dështojnë ende. Ky vendim është i shkruar në kod me arsyetimin e tij, pranë thirrjeve të rimbursimit që mbajnë çelësa idempotence, që një përgjigje e humbur të mos rimbursojë dy herë.

const claimed = await prisma.booking.updateMany({
  where: {
    id: bookingId,
    payment_status: "AWAITING_PAYMENT",
    status: { not: "CANCELLED" },
  },
  data: {
    status: "CONFIRMED",
    payment_status: "PAID",
    ...(paymentIntentId ? { stripe_payment_intent_id: paymentIntentId } : {}),
  },
});
Fig. 1.1 · apps/slotwise-api/lib/payment-transitions.ts, rreshtat 48–59Marrja e pagesës, e mbrojtur nga gjendja prej së cilës lëviz
  1. 0_init
  2. 20260704120000_phase_2_event_types_and_no_overlap
  3. 20260704130000_add_booking_payments
  4. 20260704140000_harden_buffer_constraint
  5. 20260705090000_add_missing_fk_indexes
  6. 20260822000000_add_lifecycle_email_markers
  7. 20260831000000_service_color_default_neutral
  8. 20260831010000_add_stripe_webhook_ordering_guards
  9. 20260929120000_add_email_locale_and_onboarding_drip
  10. 20261002000000_reconcile_stripe_and_reminder_columns
Fig. 1.2 · packages/slotwise-db/prisma/migrations, lexuar më 2026-10-10Migrimet e regjistruara, nga më i vjetri

E publikuar · throughbolt.com

Kjo faqe

Faqja që po lexoni, projekti më i ndershëm i referencës për nivelin e faqeve web, sepse çdo pohim këtu mund ta kontrolloni nga shfletuesi juaj.

Provë për: Faqe web dhe landing page

cookie gjurmimi
0cookie gjurmimi
skripte të palëve të treta
0skripte të palëve të treta
raporte kontrasti të publikuara
9raporte kontrasti të publikuara
objektivi WCAG 2.1
AAobjektivi WCAG 2.1

E renderuar statikisht, me fonte të hostuara vetë dhe pa asnjë skript të palëve të treta. Nuk ka banner për cookie, sepse nuk ka asgjë për të pranuar: pa analitikë, pa piksela gjurmimi, pa video të ngulitura, dhe asnjë kërkesë gjatë ekzekutimit drejt ndonjë domeni tjetër përveç këtij.

Çdo ngjyrë teksti në paletë publikohet me raportin e kontrastit të matur ndaj të dy sipërfaqeve ku mund të shfaqet; më i ulëti është 5.59:1, kundrejt një kërkese prej 4.5:1. E vetmja ngjyrë dekorative që do të dështonte si tekst është shënuar në stylesheet si ngjyrë që nuk përdoret kurrë për tekst.

Faqet e shitjes janë markup i renderuar në server, që lexohet i plotë edhe me JavaScript të çaktivizuar; skriptet vetëm i shtojnë diçka, siç bën formulari i kërkesës në faqen kryesore. Kjo shpjegon pjesën më të madhe të mënyrës si ngarkohet.

Pjesa e vështirë

Aksesueshmëria këtu matet, nuk pohohet. Ka një kontroll automatik mbi çdo faqe publike që dështon me çdo shkelje të WCAG 2.1 AA — i ekzekutuar sipas kërkesës, jo në çdo push, sepse ende asnjë workflow nuk e përfshin — dhe komenti mbi të thotë hapur se testimi automatik kap afërsisht një të tretën e standardit dhe emërton kriteret që nuk mund t'i kontrollojë. Një mjet që raporton zero është provë; një mjet që raporton zero dhe ju tregon çfarë nuk ka parë është pohim i një lloji tjetër.

Ngjyra e tekstitMbiKontrasti
foregroundink16.73:1
foregroundsurface15.99:1
mutedink9.36:1
mutedsurface8.95:1
subtleink5.84:1
subtlesurface5.59:1
copperink6.33:1
coppersurface6.05:1
onCoppercopper6.26:1
Fig. 2.1 · llogaritur nga web/throughbolt/lib/colors.tsÇdo ngjyrë teksti ndaj të dy sipërfaqeve

Për gjithçka

Numrat, dhe si u numëruan

nga 2.449 teste kaluan (7 gusht 2026)
2,443nga 2.449 teste kaluan (7 gusht 2026)
skedarë testesh (7 gusht 2026)
257skedarë testesh (7 gusht 2026)
aplikacione Next.js
8aplikacione Next.js
paketa të përbashkëta
19paketa të përbashkëta

Këto vijnë nga ekzekutimi i testeve më 7 gusht 2026, jo nga një distinktiv. Në atë ekzekutim një test dështoi dhe pesë u anashkaluan, prandaj shifra është shkruar kështu — një repozitor që pretendon se kalon gjithçka pa asnjë dështim është ose shumë i vogël, ose nuk po ju tregon diçka. Testet janë shtuar që atëherë; në bisedë i ekzekutojmë përpara jush dhe shihni numrat e sotëm.

Hapi tjetër

Kod që mund ta lexoni, në një bisedë

Biseda e parë është ndarje ekrani e atij projekti që i afrohet më shumë asaj që ju duhet — kodi i pagesave, skema, testet, ajo që mendoni se po e ekzagjerojmë. Çmimet janë në faqen e çmimeve, të plota, para se të pyesni.

Nisni një projekt

Ju përgjigjemi brenda një dite pune.