Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
703 commits
Select commit Hold shift + click to select a range
bc8c62d
refactor(backend): introduce store context aliases
onerandomdevv Jun 27, 2026
4b083ac
refactor(backend): audit merchant and store service overlap
onerandomdevv Jun 27, 2026
c6f61e3
refactor(backend): move admin and verification domains
onerandomdevv Jun 27, 2026
bbaa91c
refactor(backend): consolidate notification services
onerandomdevv Jun 27, 2026
f60b376
refactor(backend): move order module into orders domain
onerandomdevv Jun 27, 2026
645b455
refactor(backend): consolidate inventory domain
onerandomdevv Jun 27, 2026
8371951
refactor(backend): consolidate auth domain
onerandomdevv Jun 27, 2026
eb5f2ac
fix(backend): align store-facing copy language
onerandomdevv Jun 28, 2026
3787482
fix(products): harden product creation and visibility
onerandomdevv Jun 28, 2026
6cab470
@
onerandomdevv Jun 28, 2026
5a67a17
@
onerandomdevv Jun 28, 2026
26fcd1b
@
onerandomdevv Jun 28, 2026
5c94a54
@
onerandomdevv Jun 28, 2026
f303d70
feat(store): add store mode onboarding and settings
onerandomdevv Jun 29, 2026
7324997
fix(web): stabilize store address map loader
onerandomdevv Jun 29, 2026
37ebbb7
feat(landing): social-commerce landing rebuild + tailwind config fix
SAHEED2010 Jul 2, 2026
b49303e
feat(landing): social-commerce landing rebuild + tailwind config fix …
SAHEED2010 Jul 2, 2026
a4940ed
feat(store): build commerce workspace foundation
onerandomdevv Jul 3, 2026
6c95054
fix(web): restore public landing build
onerandomdevv Jul 3, 2026
378b009
feat(landing): wire CTAs to app/waitlist model and remove dead compon…
SAHEED2010 Jul 3, 2026
d85f1bf
feat(landing): wire CTAs to app/waitlist model + remove dead landing …
SAHEED2010 Jul 3, 2026
5d106c6
refactor(payments): introduce provider abstraction
onerandomdevv Jul 3, 2026
1082ad4
fix: make REDIS_URL optional in env.validation.ts
railway-app[bot] Jul 4, 2026
7930d98
docs: make deployment setup provider-neutral
onerandomdevv Jul 4, 2026
bd51395
feat(landing): use saffron/espresso for berry CTA buttons
onerandomdevv Jul 4, 2026
284b276
feat(web): keep app routes off the marketing host
onerandomdevv Jul 4, 2026
3641674
feat(landing): wire Start Shopping and Chat WIZZA CTAs
onerandomdevv Jul 4, 2026
4286ca4
refactor(providers): add payment and subscription billing provider se…
onerandomdevv Jul 4, 2026
af54712
docs(backend): clarify money provider env selection
onerandomdevv Jul 4, 2026
0183c64
docs(env): document prod setup pitfalls in .env.example
onerandomdevv Jul 4, 2026
39871a8
docs(env): note shared NEXT_PUBLIC_* vars both web deployments need
onerandomdevv Jul 4, 2026
4d65f57
docs(env): correct FRONTEND_URL note to match the loaded config
onerandomdevv Jul 4, 2026
9679572
feat(security): add request security context foundation
onerandomdevv Jul 4, 2026
92701c1
feat(auth): record login security context
onerandomdevv Jul 4, 2026
e2dfb28
fix(security): harden request security context metadata
onerandomdevv Jul 5, 2026
8d39b7d
fix(auth): strip referer tokens from login audit
onerandomdevv Jul 5, 2026
e81824c
docs(security): clarify proxy header env guidance
onerandomdevv Jul 5, 2026
446eacd
feat(storepass): add domain models and entitlements
onerandomdevv Jul 5, 2026
9957aad
feat(storepass): add Nomba subscription billing provider
SAHEED2010 Jul 5, 2026
304514c
feat(search): add taxonomy-aware product discovery helpers
onerandomdevv Jul 5, 2026
0afdf41
feat(whatsapp): add taxonomy-aware ranking boost to WIZZA discovery
onerandomdevv Jul 5, 2026
1f678d9
feat(whatsapp): enrich image discovery with taxonomy hints
onerandomdevv Jul 5, 2026
fb6f138
feat(search): record taxonomy zero-result signals
onerandomdevv Jul 5, 2026
2cd7c0d
feat(search): add category demand insights service
onerandomdevv Jul 5, 2026
4493c5e
refactor(search): move zero-result contract into search domain
onerandomdevv Jul 5, 2026
c1ffadd
feat(storepass): wire checkout and webhook state
SAHEED2010 Jul 5, 2026
c38a0f6
chore(admin): audit admin surface and route ownership
onerandomdevv Jul 5, 2026
1fada4a
feat(storepass): add Store Mode subscription API
SAHEED2010 Jul 5, 2026
5a7f7ed
feat(storepass): add Store Mode subscription API (#528)
SAHEED2010 Jul 6, 2026
0ae98da
feat(web): add StorePass Store Mode UI
SAHEED2010 Jul 6, 2026
b0e22e6
feat(web): add StorePass Store Mode UI (#529)
SAHEED2010 Jul 6, 2026
2ace6a1
refactor(admin): remove legacy staff roles and enforce super-admin only
onerandomdevv Jul 6, 2026
a33eb26
feat(web): add admin.twizrr.com route shell
onerandomdevv Jul 6, 2026
356c2fd
refactor(web): drive admin surface by NEXT_PUBLIC_ADMIN_ENABLED flag
onerandomdevv Jul 6, 2026
18fa861
chore(web): structure .env.example per Vercel project
onerandomdevv Jul 6, 2026
0f20880
feat(admin): add store verification review console
onerandomdevv Jul 6, 2026
652bce1
feat(admin): add platform overview dashboard
onerandomdevv Jul 6, 2026
ae35a4e
feat(storepass): add StorePass badges for active paid stores
SAHEED2010 Jul 6, 2026
d4f277b
feat(storepass): add StorePass badges for active paid stores (#535)
SAHEED2010 Jul 6, 2026
404d7b5
feat(admin): add global orders console
onerandomdevv Jul 6, 2026
1ff6577
chore(web): add vitest + testing-library test runner
onerandomdevv Jul 6, 2026
6ad268d
feat(admin): add payout review and release console
onerandomdevv Jul 6, 2026
484860d
feat(admin): harden delivery coordination console
onerandomdevv Jul 6, 2026
f0dac3b
feat(admin): improve dispute evidence and resolution console
onerandomdevv Jul 6, 2026
63432f6
feat(admin): improve moderation evidence console
onerandomdevv Jul 6, 2026
a723ade
feat(storepass): add renewal, reconciliation, and entitlement usage t…
SAHEED2010 Jul 6, 2026
d8cf776
feat(storepass): add renewal, reconciliation, and entitlement usage t…
SAHEED2010 Jul 6, 2026
5e69522
feat(admin): add audit log console
onerandomdevv Jul 6, 2026
fbf4ea9
feat(admin): add technical operations console
onerandomdevv Jul 6, 2026
7f4a198
feat(admin): add admin login and bootstrap access flow
onerandomdevv Jul 6, 2026
eeadbad
feat(admin): add production-safe admin bootstrap command
onerandomdevv Jul 6, 2026
dbf00c7
chore(storepass): harden demo readiness
SAHEED2010 Jul 6, 2026
f1aaf85
test(admin): add admin manual QA and e2e coverage
onerandomdevv Jul 6, 2026
f9ce149
fix(admin): dashboard "moderation pending" counted auto-flags, not re…
onerandomdevv Jul 6, 2026
44807c2
feat(commerce): store feed-publish flow, product detail/edit, and fee…
onerandomdevv Jul 7, 2026
e9c1b8e
fix(orders): support variant products in direct checkout
onerandomdevv Jul 7, 2026
c4dbce7
refactor(commerce): shared product-detail view + inventory panel/card…
onerandomdevv Jul 7, 2026
a555fc0
fix(storepass): correct Nomba sandbox base URL to a resolvable host
SAHEED2010 Jul 7, 2026
40eefe6
fix(storepass): correct Nomba sandbox base URL to a resolvable host (…
SAHEED2010 Jul 7, 2026
9dedac0
fix(feed): make For You / Stores / Explore return posts, not follow s…
onerandomdevv Jul 7, 2026
9b3b906
feat(store): text-only inventory cards and dedicated StorePass page
onerandomdevv Jul 7, 2026
3e34fd8
feat(store-setup): split digital and physical store creation into ded…
onerandomdevv Jul 7, 2026
9416996
refactor(storepass): focus StorePass on pricing and selection only
onerandomdevv Jul 7, 2026
968720c
chore(store): trim over-descriptive page headers and subtitles
onerandomdevv Jul 7, 2026
d118684
feat(admin): add Tier 2 bypass on the admin stores page
onerandomdevv Jul 7, 2026
e1233fa
feat: social-media UI refresh + shopper features
onerandomdevv Jul 10, 2026
8f844cd
fix(test): disambiguate settings-hub link matcher
onerandomdevv Jul 10, 2026
2be9de1
perf(feed): server-render the initial public feed (explore + category)
onerandomdevv Jul 10, 2026
40318ab
feat(web): store profile, payouts, account settings, and feed UI fixes
onerandomdevv Jul 10, 2026
5d3938a
feat(web): session-aware landing entry + fintech payouts UI
onerandomdevv Jul 10, 2026
1817c05
feat(users): account phone verification UI + AT SMS hardening
onerandomdevv Jul 11, 2026
b5cee52
feat(notification): add Africa's Talking SMS delivery-report webhook
onerandomdevv Jul 11, 2026
2ac66ef
fix(auth): bind account phone OTP to the authenticated session
onerandomdevv Jul 11, 2026
5ab705e
fix(payouts): surface the real error when saving a payout account
onerandomdevv Jul 11, 2026
e6e7c4c
feat(store-settings): verify personal account phone from the store hub
onerandomdevv Jul 11, 2026
b5cf777
fix(store): collapse verified business phone to a summary state
onerandomdevv Jul 11, 2026
2ef51b4
feat(users): make the account phone editable, not just verifiable
onerandomdevv Jul 11, 2026
ce68b3d
feat(phone): reuse + cross-verify a shared account/business phone
onerandomdevv Jul 11, 2026
ed8a6a0
feat(phone): one-tap "Use my business phone" for the account phone
onerandomdevv Jul 11, 2026
6e2c2a2
fix(users): re-run tier checks after reusing a verified business phone
onerandomdevv Jul 11, 2026
003aa16
feat(profile): quick-edit profile modal + fix nav routing to profile
onerandomdevv Jul 11, 2026
c5d51af
fix(settings): account phone is shopper-side; drop hardcoded example
onerandomdevv Jul 11, 2026
d9cc400
feat(feed): replace inline Edit pill with a post-actions menu on own …
onerandomdevv Jul 11, 2026
fcddf56
feat(feed): gate post author operations to own store + store mode
onerandomdevv Jul 11, 2026
78d9ece
perf(feed): denormalized engagement counters, feed index, multi-sourc…
onerandomdevv Jul 11, 2026
2920a38
perf(web): rendering containment for the feed list
onerandomdevv Jul 11, 2026
02f3486
docs: engagement counters, feed index, multi-source ranking, feed ren…
onerandomdevv Jul 11, 2026
02ef348
feat(realtime): socket.io push gateway + live notification events
onerandomdevv Jul 12, 2026
ae37f28
feat(web): live notification bridge over socket.io + docs
onerandomdevv Jul 12, 2026
4704fcc
fix(realtime): gate mount to authed shells + check socket account state
onerandomdevv Jul 12, 2026
039d7d4
feat(realtime): phase 1 realtime foundation hardening
onerandomdevv Jul 12, 2026
474c79a
feat(outbox): add transactional outbox infrastructure
onerandomdevv Jul 12, 2026
976f2e7
feat(outbox): dispatch payment notifications through outbox
onerandomdevv Jul 12, 2026
4f29ea3
fix(outbox): handle relay poll rejections
onerandomdevv Jul 12, 2026
fb15b4b
feat(realtime): add typed commerce event delivery
onerandomdevv Jul 12, 2026
6dc1e2e
feat(orders): dispatch lifecycle side effects through outbox
onerandomdevv Jul 12, 2026
9b4be9d
test(realtime): cover commerce synchronisation
onerandomdevv Jul 12, 2026
e6d0e71
feat(disputes): add dispute realtime contracts and outbox helpers
onerandomdevv Jul 12, 2026
8fa79a6
feat(disputes): publish lifecycle events and milestone notifications …
onerandomdevv Jul 12, 2026
f2dca6a
feat(web): sync dispute and order views in realtime
onerandomdevv Jul 12, 2026
b13adc6
test(disputes): cover lifecycle events, concurrency, retries and privacy
onerandomdevv Jul 12, 2026
790a832
fix(deploy): point backend start at the real nest build entry
onerandomdevv Jul 12, 2026
4432919
feat(notifications): partition notifications by shopper/store audience
onerandomdevv Jul 12, 2026
6153f81
feat(web): notifications pages with per-mode badge, infinite scroll, …
onerandomdevv Jul 12, 2026
fd362e0
test(notifications): cover audience partitioning and mode-scoped pages
onerandomdevv Jul 12, 2026
3690a8c
feat(social): notify on post likes, comments, replies, and mentions
onerandomdevv Jul 12, 2026
c70e529
feat(web): social-notification row layout on the notifications page
onerandomdevv Jul 12, 2026
9b9b5f1
feat(social): post-notification subscriptions with async new-post fan…
onerandomdevv Jul 13, 2026
ab0e49c
feat(web): post-notification bell + enable store follows on public pages
onerandomdevv Jul 13, 2026
3f0ff07
fix(orders): validate cuid ids as strings across the buying flow
onerandomdevv Jul 13, 2026
e8c1a76
fix(web): keep shopper identity + mode on product pages and cart/chec…
onerandomdevv Jul 13, 2026
01e6e34
fix(orders): default pagination params so list endpoints don't 400
onerandomdevv Jul 13, 2026
290d48f
feat(web): quantity selector on the product page, capped at stock
onerandomdevv Jul 13, 2026
0d30d65
chore: remove mojibake from backend and web
onerandomdevv Jul 13, 2026
ebe1444
fix(paystack): surface provider error message on failed requests
onerandomdevv Jul 13, 2026
f83981d
feat(products): add square social publishing flow
onerandomdevv Jul 13, 2026
a054716
fix(payout): use per-release idempotency keys so failed payouts can b…
onerandomdevv Jul 13, 2026
d5dfce4
fix(notifications): repair broken deep-link routes that 404
onerandomdevv Jul 14, 2026
1f6f32c
feat(web): post-detail page so notification post links resolve (#586)
onerandomdevv Jul 14, 2026
835b5a6
fix(notifications): show store squircle avatars on new-post notificat…
onerandomdevv Jul 14, 2026
bc1c94e
fix(web): page titles for public profile/store + payout currency form…
onerandomdevv Jul 14, 2026
62cc5b7
fix(web): readable store-order card text on the light store surface (…
onerandomdevv Jul 14, 2026
7814c90
fix(web): show a clean completed state for achieved verification tier…
onerandomdevv Jul 14, 2026
7f0af9a
chore(tooling): stop security-sentinel flagging test-fixture keys as …
onerandomdevv Jul 14, 2026
5da9014
fix(security): wire request context into admin and payout audits (#592)
onerandomdevv Jul 16, 2026
bd3623b
feat(security): add new-device and suspicious-login risk signals (#593)
onerandomdevv Jul 16, 2026
03b44b5
feat(admin): add security event review console (#594)
onerandomdevv Jul 16, 2026
77fb325
feat(security): add new-login notifications (#595)
onerandomdevv Jul 16, 2026
e9c012c
fix(admin): correct security event filtering and pagination (#596)
onerandomdevv Jul 16, 2026
64e28bb
feat(security): add coarse IP geolocation risk signal (#597)
onerandomdevv Jul 16, 2026
3cf7135
feat(security): add rate-limit and OTP-abuse risk signals (#598)
onerandomdevv Jul 16, 2026
ac3007b
chore(safety): audit device and location intelligence coverage (#599)
onerandomdevv Jul 16, 2026
52758e5
feat(security): add first-party device identity foundation (#600)
onerandomdevv Jul 16, 2026
d104f09
feat(safety): record account creation device and request context (#601)
onerandomdevv Jul 16, 2026
3ff6f7e
feat(safety): add account abuse linkage signals (#602)
onerandomdevv Jul 16, 2026
a2d686f
feat(admin): add trust and safety investigation view (#603)
onerandomdevv Jul 16, 2026
92e8ff9
feat(location): add user location preference foundation (#604)
onerandomdevv Jul 16, 2026
7558493
feat(web): add user location preference UI (#605)
onerandomdevv Jul 16, 2026
f291923
feat(wizza): use user location preference in discovery (#606)
onerandomdevv Jul 16, 2026
83d90dc
feat(feed): apply location preference to feed relevance (#607)
onerandomdevv Jul 16, 2026
f21ac49
fix(location): address discovery review follow-ups (#608)
onerandomdevv Jul 16, 2026
e6a82ff
feat(admin): add location-aware demand and supply insights (#609)
onerandomdevv Jul 17, 2026
d023d7e
fix(location): address feed and image caption follow-ups (#610)
onerandomdevv Jul 17, 2026
b42c089
feat(settlement): execute dispute financial outcomes (#611)
onerandomdevv Jul 17, 2026
6ae6288
feat(settlement): complete financial operations and visibility (#612)
onerandomdevv Jul 17, 2026
0b9c0ed
test(settlement): prove production readiness (#613)
onerandomdevv Jul 17, 2026
e550f08
feat(delivery): add shipping provider abstraction (#614)
onerandomdevv Jul 17, 2026
800b8c8
feat(verification): add identity verification provider abstraction (#…
onerandomdevv Jul 17, 2026
921994c
feat(email): add email provider abstraction (#616)
onerandomdevv Jul 17, 2026
b19a7ab
docs: document provider configuration and Monnify roadmap (#617)
onerandomdevv Jul 18, 2026
828e4b7
docs: clarify provider environment notes (#618)
onerandomdevv Jul 18, 2026
27ca083
feat(payment): add Monnify payment provider adapter (#619)
onerandomdevv Jul 18, 2026
0fe4ead
feat(payment): add immutable attempts and reconciliation safety (#620)
onerandomdevv Jul 18, 2026
d8a0512
feat(refund): add Monnify refund provider adapter (#621)
onerandomdevv Jul 18, 2026
fe2581f
test(refund): prove Monnify refund completion safety (#622)
onerandomdevv Jul 18, 2026
f055686
feat(payout): add Monnify payout provider adapter (#623)
onerandomdevv Jul 18, 2026
2a347b8
test(payout): prove Monnify transfer reconciliation safety (#624)
onerandomdevv Jul 18, 2026
d63c464
chore(verification): assess Monnify identity capabilities against Twi…
onerandomdevv Jul 19, 2026
d7d1bad
fix(money): deduct platform fee from merchant proceeds (#626)
onerandomdevv Jul 19, 2026
ded3805
feat(verification): add provider-owned verification attempts (#627)
onerandomdevv Jul 19, 2026
17bfb75
feat(verification): add provider attempt reconciliation (#628)
onerandomdevv Jul 19, 2026
0a37461
feat(wallet): enforce merchant earnings invariants (#629)
onerandomdevv Jul 19, 2026
f8ce2b6
fix(money): enforce provider continuity (#630)
onerandomdevv Jul 19, 2026
4b8a28d
feat(payment): record amount exceptions (#631)
onerandomdevv Jul 19, 2026
5e25f1d
feat(admin): add payment reconciliation exception queue (#632)
onerandomdevv Jul 19, 2026
32bb734
feat(payment): add provider-bound overpayment refund resolution (#633)
onerandomdevv Jul 19, 2026
be3dedd
feat(payment): add safe remaining-balance collection (#634)
onerandomdevv Jul 19, 2026
0a63294
feat(refund): add split-collection refund operations (#635)
onerandomdevv Jul 20, 2026
e6fce9d
test(payment): add payment exception sandbox runbook (#636)
onerandomdevv Jul 20, 2026
88741fd
fix(web): remove DVA option from provider checkout (#637)
onerandomdevv Jul 20, 2026
c161236
feat(web): social-first feed redesign — stories rail, carousels, micr…
onerandomdevv Jul 21, 2026
d712b3e
feat(web): social-first product detail page redesign (#640)
onerandomdevv Jul 21, 2026
e699dcd
feat(web): checkout redesign — social-first, lighter UI + idempotency…
onerandomdevv Jul 21, 2026
8a79928
feat(web): social-first store & user profile redesign (#642)
onerandomdevv Jul 22, 2026
3869467
feat(web): store setup UI redesign — compact signup-style flow (#643)
onerandomdevv Jul 22, 2026
a32ab8a
fix(web): apply skipped PR review suggestions (#641, #642, #643) (#644)
onerandomdevv Jul 22, 2026
7a9c10b
feat(web): unified bag route, social-first orders + order progress, h…
onerandomdevv Jul 23, 2026
da53284
feat: social-first notifications, feed product posts + Saved hub, pur…
onerandomdevv Jul 24, 2026
4fbc6f4
feat: store-orders redesign + tiered/capped fee system + store-mode U…
onerandomdevv Jul 24, 2026
a30a704
fix(whatsapp): harden webhook intake and queue delivery (#648)
onerandomdevv Jul 25, 2026
bc63275
fix(whatsapp): make outbound notifications retry safely (#649)
onerandomdevv Jul 25, 2026
f4b1b18
fix(whatsapp): complete discovery follow-up actions (#650)
onerandomdevv Jul 25, 2026
5370e88
feat(web): store inventory + public product detail redesign (social-f…
onerandomdevv Jul 25, 2026
84f33ab
fix(whatsapp): complete discovery follow-up actions (#651)
onerandomdevv Jul 25, 2026
272a789
fix: product stock-cache 500s + inventory modal validation/toast UX (…
onerandomdevv Jul 26, 2026
35fd7e2
docs(whatsapp): align channel runtime contracts (#654)
onerandomdevv Jul 26, 2026
5ff9ab6
Merge branch 'staging' into dev
onerandomdevv Jul 26, 2026
b044421
refactor(whatsapp): introduce shopper agent tool contract (#656)
onerandomdevv Jul 26, 2026
e61777b
chore: promote dev to staging (#655) (#657)
onerandomdevv Jul 26, 2026
2b5525f
ci: enforce promotion ladder with a promotion-guard workflow (#658)
onerandomdevv Jul 26, 2026
b130bad
feat(whatsapp): add conversational product discovery
onerandomdevv Jul 26, 2026
94e9ae4
fix(whatsapp): harden conversational discovery context
onerandomdevv Jul 26, 2026
e01d477
feat(whatsapp): add conversational product discovery (#659)
onerandomdevv Jul 26, 2026
c651e98
feat(whatsapp): add linked shopper read actions
onerandomdevv Jul 26, 2026
4d0c8c5
feat(whatsapp): add linked shopper read actions (#660)
onerandomdevv Jul 26, 2026
725f379
feat(whatsapp): add cart management actions
onerandomdevv Jul 26, 2026
a338faf
fix(whatsapp): address cart action review findings
onerandomdevv Jul 26, 2026
c259e16
feat(whatsapp): add cart management actions (#661)
onerandomdevv Jul 26, 2026
ba5aa45
feat(whatsapp): add checkout handoff
onerandomdevv Jul 26, 2026
3e2d063
feat(whatsapp): add checkout handoff (#662)
onerandomdevv Jul 26, 2026
3c9a071
feat(whatsapp): add delivery confirmation flow
onerandomdevv Jul 26, 2026
bc0d7c3
fix(whatsapp): harden delivery confirmation flow
onerandomdevv Jul 26, 2026
b6c1903
feat(whatsapp): add delivery confirmation flow (#663)
onerandomdevv Jul 26, 2026
08ef9af
feat(whatsapp): add shopper help and post-purchase actions
onerandomdevv Jul 26, 2026
dd63709
fix(whatsapp): select relevant post-purchase order
onerandomdevv Jul 26, 2026
6e8f722
feat(whatsapp): add shopper help and post-purchase actions (#664)
onerandomdevv Jul 26, 2026
1b3a404
docs: add self-host + media architecture guides; ignore neon cli arti…
onerandomdevv Jul 26, 2026
f9d4475
docs: address CodeRabbit review on deployment + media architecture
onerandomdevv Jul 26, 2026
47866c5
fix(order): make delivery confirmation recoverable
onerandomdevv Jul 26, 2026
e6879ba
docs: self-host + media architecture guides (+ ignore neon cli artifa…
onerandomdevv Jul 26, 2026
2efc597
Merge branch 'dev' into codex/fix-order-delivery-confirmation-recovery
onerandomdevv Jul 26, 2026
ec21f72
fix(order): address delivery recovery review
onerandomdevv Jul 27, 2026
77e71da
fix(order): make delivery confirmation recoverable (#666)
onerandomdevv Jul 27, 2026
6eff1d6
fix(whatsapp): preserve inbound action recovery
onerandomdevv Jul 27, 2026
2cb9bc1
fix(whatsapp): avoid ambiguous action retries
onerandomdevv Jul 27, 2026
7032135
fix(whatsapp): preserve inbound action recovery (#667)
onerandomdevv Jul 27, 2026
a2cd44d
fix(whatsapp): align product eligibility and discovery state
onerandomdevv Jul 27, 2026
7747d1e
fix(whatsapp): align product eligibility and discovery state (#668)
onerandomdevv Jul 27, 2026
72499b7
fix(whatsapp): make outbound notification enqueue durable
onerandomdevv Jul 27, 2026
61af2f6
chore: fix gitignore formatting
onerandomdevv Jul 27, 2026
38b330c
fix(whatsapp): make outbound notification enqueue durable (#669)
onerandomdevv Jul 27, 2026
696c6bd
chore(ci,docs): retire staging — dev→beta→main ladder + beta-first se…
onerandomdevv Jul 27, 2026
062dda3
Merge branch 'dev' into chore/update-gitignore
onerandomdevv Jul 27, 2026
4651ce9
chore: fix gitignore formatting (#671)
onerandomdevv Jul 27, 2026
d56eed1
Merge branch 'dev' into chore/dev-beta-main-ladder
onerandomdevv Jul 27, 2026
d55b90e
docs(self-host): address CodeRabbit — CX43 (CX42 deprecated), IP clar…
onerandomdevv Jul 27, 2026
d09777a
chore(ci,docs): retire staging — dev→beta→main ladder + beta-first se…
onerandomdevv Jul 27, 2026
d37b29c
promote: dev -> beta (supersede stale beta)
onerandomdevv Jul 28, 2026
20950ee
promote: dev → beta (supersede stale beta, adopt new ladder) (#674)
onerandomdevv Jul 28, 2026
76b9367
Merge branch 'main' into beta
onerandomdevv Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 0 additions & 10 deletions .claude/settings.local.json

This file was deleted.

99 changes: 99 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
language: "en-US"

reviews:
# Keep automated reviews enabled. Financial and provider changes require
# correctness-focused feedback, even when a PR is otherwise small.
profile: "chill"
auto_review:
enabled: true
drafts: true
instructions: |
You are reviewing Twizrr, a Nigerian social-commerce marketplace. Focus on
correctness, security, financial safety, and architectural boundaries over
minor styling or docstring nits. Do not report a concern unless you can
describe a concrete failure scenario from the changed code.

1. Financial correctness and ledger
- All persisted money is BigInt in kobo. Never use float/Number for
financial calculation or JSON audit metadata; serialize JSON amounts as
decimal strings.
- LedgerEntry is append-only and is the source of truth for money
movement. Completion ledger entries require both a provider-confirmed
outcome and the committed guarded state transition.
- Check idempotency and concurrency for payment, refund, payout, escrow,
settlement, webhook, retry, reconciliation, outbox, and notification
changes. Duplicate delivery must not duplicate a provider submission,
ledger entry, durable notification, or completion transition.
- Flag external provider calls inside Prisma transactions and unguarded
read-modify-write state transitions.

2. Provider architecture and switching
- Domain services must depend on Twizrr-owned provider contracts, not raw
provider SDKs, clients, request payloads, response shapes, or status
strings.
- New operations use the configured provider only. Existing payment,
refund, payout, and settlement operations remain immutably bound to the
provider and provider reference recorded when they were created.
- Never silently fall back from one financial provider to another. A
provider switch must not collapse, overwrite, or orphan prior provider
attempts/references needed for webhook or reconciliation handling.
- Provider adapters must normalize errors and statuses. Raw provider
payloads, secrets, bank details, credentials, and headers must not
reach domain DTOs, events, logs, or public responses.

3. Payments, refunds, payouts, and webhooks
- Every explicit payment/refund/payout webhook must fail closed when raw
body or signature data is absent, malformed, or invalid. Verify the
provider-specific signature before any order, payout, refund, or ledger
state change.
- Do not mark REFUND_COMPLETED or PAYOUT_COMPLETED before a confirmed
provider success. Submitted, processing, timeout, and ambiguous states
require reconciliation or manual review, never a blind retry.
- Verify that provider references remain searchable in provider-neutral
admin, dispute, payout, and reconciliation views.
- Preserve payout holds and dispute/settlement safeguards. A settlement
leg may only act through its own approved, deterministic path.

4. Database and Prisma
- Use transactions for related database writes, but never include
external provider calls in them.
- Check for lost updates, race conditions, missing unique constraints,
unstable query ordering used for idempotency, and non-deterministic
legacy aggregation keys.
- Review migrations for checkout safety on populated tables. Flag
destructive drift, unsafe locking/index creation, and modified applied
migrations. Do not suggest db push for shared environments.

5. Security and privacy
- Every non-public controller route needs JwtAuthGuard and appropriate
ownership/role checks. Admin routes need the appropriate OPERATOR or
SUPER_ADMIN protection.
- Never expose or log passwords, OTPs, cookies, Authorization headers,
access/refresh tokens, raw request bodies/headers, provider payloads,
bank information, delivery addresses, delivery codes, raw NIN/selfies,
or private prompt values.
- Request security context and coarse IP geo are risk/audit signals only:
do not turn them into blocking, GPS collection, fingerprinting, or
automatic enforcement without an explicit product decision.

6. Realtime, notifications, and delivery
- PostgreSQL/REST remains authoritative. Outbox events and Socket.IO are
durable bridges/cache-invalidation hints, never the source of truth.
- Check deterministic outbox and notification dedupe keys. Pending or
submitted states must not send copy claiming money or delivery is
complete.
- Shipping provider adapters verify and normalize webhooks; delivery
domain services own guarded state changes. Delivery OTP, address, phone,
notes, and raw provider payloads must never appear in logs, outbox,
notification metadata, or socket payloads.

7. Product boundaries
- Preserve escrow protection for every order. Do not reintroduce direct
seller payment, supplier/B2B/RFQ/wholesale/trade-financing concepts, or
store-management flows in WhatsApp.
- Keep KYB tier rules unchanged: Tier 1 and Tier 2 are active MVP flows.
Provider abstractions may support future CAC/Tier 3 capability but must
not activate a new Tier 3 business flow without explicit approval.
- Frontend changes must be mobile-first, have loading/error states, and
use Twizrr language. Do not introduce emojis in UI or WhatsApp copy.
41 changes: 41 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
.git
.gitignore

# Dependencies
node_modules
**/node_modules

# Build and cache outputs
.turbo
**/.turbo
.next
**/.next
dist
**/dist
coverage
**/coverage

# Environment files and local secrets
.env
.env.*
**/.env
**/.env.*

# Logs and temporary files
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
tmp
temp
*.tmp

# OS/editor files
.DS_Store
Thumbs.db
*.swp
*.swo
.idea
.vscode
52 changes: 0 additions & 52 deletions .env.example

This file was deleted.

1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @onerandomdevv
67 changes: 34 additions & 33 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,48 @@
## What does this PR do?

<!-- Brief description of the changes -->

## Module(s) affected

<!-- Check all that apply -->
- [ ] Auth
- [ ] Merchant
- [ ] Product
- [ ] RFQ
- [ ] Quote
- [ ] Order
- [ ] Payment
- [ ] Inventory
- [ ] Notification
- [ ] Frontend
- [ ] Shared
- [ ] Infrastructure
<!-- One paragraph: what changed and why. -->

## Type of change

- [ ] New feature
- [ ] Bug fix
- [ ] Refactor
- [ ] Refactor / cleanup
- [ ] Database migration included
- [ ] Chore / maintenance
- [ ] Documentation
- [ ] Tests

## Checklist
## Area affected

- [ ] My code builds without errors (`pnpm build`)
- [ ] I've tested this locally
- [ ] I haven't added features outside V1 scope
- [ ] All money values use BigInt kobo (not floats)
- [ ] Merchant-scoped queries include merchantId filter
- [ ] No direct inventory mutations (events only)
- [ ] No business logic in controllers (services only)
- [ ] No `.env` files or secrets in this PR
- [ ] No `console.log` left in code (except health/dev logging)
- [ ] Backend
- [ ] Web
- [ ] WhatsApp
- [ ] Shared package
- [ ] Database / Prisma
- [ ] GitHub / CI / infrastructure

## How to test
## How to test this

<!-- Steps for reviewer to verify the changes -->
1.
2.
3.
Expected result:

## Screenshots (if frontend)
## Pre-commit checklist

<!-- Add screenshots for UI changes -->
- [ ] Backend lint/type/build pass when backend is affected
- [ ] Web lint/type/build pass when web is affected
- [ ] Shared package build passes when shared is affected
- [ ] No `console.log` left in production code
- [ ] No secrets or `.env` files committed
- [ ] No new `any` types added
- [ ] No non-MVP legacy features reintroduced
- [ ] All money values are BigInt kobo, never float
- [ ] Paystack webhook changes verify HMAC before processing
- [ ] Database migrations are Prisma migrations, not `db push`
- [ ] Database migrations are backward-compatible or risk is documented

## Screenshots

<!-- Required for UI changes. Add before/after screenshots or write N/A. -->

## Notes for reviewer
Loading
Loading