Commit e0d1e01
Release v1.0.6 (#380)
* (SP: 3) [Backend] add Nova Poshta shipping foundation + checkout persistence + async label workflow (#364)
* (SP: 2) [Frontend] Reduce Vercel variable costs via caching and analytics cleanup (#367)
* perf(vercel): cut runtime costs via notification, blog cache, and analytics changes
* perf(blog): remove server searchParams usage to preserve ISR
* fix(build): align Netlify Node version and remove SpeedInsights import
* chore(release): bump version to 1.0.4
* (SP: 2) [Frontend] Remove [locale] layout force-dynamic and move auth to client-side (#370)
* refactor(frontend): remove locale layout dynamic auth and move header auth client-side
* fix(frontend): prevent stale auth responses in useAuth and remove redundant dashboard dynamic layout
* (SP: 2) [Frontend] Reduce auth overhead and sync auth state across tabs (#372)
* refactor(frontend): remove locale layout dynamic auth and move header auth client-side
* fix(frontend): prevent stale auth responses in useAuth and remove redundant dashboard dynamic layout
* feat(frontend): sync auth state across tabs via BroadcastChannel
* (SP: 2) [Frontend] Quizzes page ISR + client-side progress + GitHub stars cache (#371)
* perf(quiz-flow): move quiz progress to client-side fetch, enable ISR for quizzes page
- Move user progress fetch from SSR to client-side API (/api/quiz/progress)
- Remove force-dynamic and getCurrentUser() from quizzes page
- Add revalidate=300 for ISR caching
- Use window.history.replaceState for tab URL sync (avoid Next.js navigation)
- Add forceMount to TabsContent to prevent layout shift on tab switch
- Fix nested <main> — use <section> inside DynamicGridBackground
- Cache GitHub stars count in sessionStorage to avoid refetch + re-animation
* perf: replace useRef with useState lazy initializer in GitHubStarButton
Fixes React 19 react-hooks/refs ESLint error — useRef.current cannot
be read during render. Uses useState(getStoredStars) to capture the
sessionStorage value once on mount instead.
* fix: stop star icon trembling on hover in GitHubStarButton
* (SP: 1) [Frontend] Fix quiz timer flash and card layout shift on quizzes page (#373)
* perf(quiz-flow): move quiz progress to client-side fetch, enable ISR for quizzes page
- Move user progress fetch from SSR to client-side API (/api/quiz/progress)
- Remove force-dynamic and getCurrentUser() from quizzes page
- Add revalidate=300 for ISR caching
- Use window.history.replaceState for tab URL sync (avoid Next.js navigation)
- Add forceMount to TabsContent to prevent layout shift on tab switch
- Fix nested <main> — use <section> inside DynamicGridBackground
- Cache GitHub stars count in sessionStorage to avoid refetch + re-animation
* perf: replace useRef with useState lazy initializer in GitHubStarButton
Fixes React 19 react-hooks/refs ESLint error — useRef.current cannot
be read during render. Uses useState(getStoredStars) to capture the
sessionStorage value once on mount instead.
* fix: stop star icon trembling on hover in GitHubStarButton
* fix: eliminate quiz timer flash on language switch
Remove Suspense boundary (loading.tsx) that unmounted QuizContainer
during locale navigation. Synchronous session restore via useReducer
lazy initializer and correct timer initialization via useState lazy
initializer prevent any visible state reset on language switch
* fix: replace quiz card layout shift with skeleton grid during progress load
* chore(release): v1.0.5
* (SP: 3)[Shop][DB] Reduce Neon compute: throttle janitor + relax checkout polling + add sweep indexes (#375)
* (SP: 3) [Backend] add internal janitor (jobs 1-4), claim/lease + runbook (G0-G6)
* (SP: 3) [Backend] add provider selector, fix payments gating, i18n checkout errors
* Add shop category images to public
* (SP: 3) [Shop][Monobank] I1 structured logging: codes + logging safety checks
* (SP: 3) [Shop][Monobank] Fail-closed non-browser origin posture for webhook + janitor (ORIGIN_BLOCKED)
* (SP: 3) [Shop][Monobank] [Shop][Monobank] J gate: add orders status ownership test and pass all pre-prod invariants
* (SP: 3) [Shop][Monobank] review fixes (tests, logging, success UI)
* (SP: 1) [Shop][Monobank] Tighten webhook log-code typing; harden DB tests; minor security/log/UI cleanups
* (SP: 1) [Shop][Monobank] harden Monobank webhook (origin/PII-safe logs) and remove duplicate sha256 hashing
* (SP: 1) [Cart] adding route for user orders to cart page
* (SP: 1) [Cart] fix after review cart mpage and adding index for orders
* (SP: 1) [Cart] Fix cart orders summary auth rendering and return totalCount for orders badge
* (SP: 1) [Cart] remove console.warn from CartPageClient to satisfy monobank logging safety invariant, namespace localStorage cart by user and reset on auth change
* (SP: 1) [Cart] rehydrate per cartOwnerId (remove didHydrate coupling)
* (SP: 2)[Backend] shop/shipping schema migrations foundation
* (SP: 2)[Backend] shop/shipping public routes + np cache + sync
* (SP: 2)[Backend] shop/shipping: shipping persistence + currency policy
* (SP: 2)[Backend] shop/shipping: webhook apply + psp fields + enqueue shipping
* (SP: 2)[Backend] shop/shipping: shipments worker + internal run + np mock
* (SP: 2)[Backend] shop/shipping: admin+ui shipping actions
* (SP: 2)[Backend] shop/shipping: retention + log sanitizer + metrics
* (SP: 1)[Backend] stabilize Monobank janitor (job1/job3) and fix failing apply-outcomes tests
* (SP: 1) [db]: add shop shipping core migration
* (SP: 1) [FIX] resolve merge artifacts in order details page
* (SP: 1) [FIX] apply post-review fixes for shipping and admin flows
* (SP: 1) [FIX] align cart shipping imports (localeToCountry + availability reason code)
* (SP: 1) [FIX] hard-block checkout when shipping disabled + i18n reason mapping
* (SP: 1) [FIX] harden webhook enqueue + shipping worker + NP catalog + cart fail-closed
* (SP: 1) [FIX] Initialize shippingMethodsLoading to true to avoid premature checkout.
* (SP: 1) [FIX] migration 17
* (SP: 1) [DB] migrarion to testind DB and adjusting tests
* (SP: 1)[DB] slow down restock janitor + enforce prod interval floor
* (SP: 1) [DB] add order status lite view (opt-in) + instrumentation
* (SP: 1) [DB] replace checkout success router.refresh polling with backoff API polling
* (SP: 1) [DB] throttle sessions activity heartbeat + use count(*) (PK invariant)
* (SP: 1)[DB] enforce production min intervals for internal shipping jobs
* (SP: 1) [DB] add minimal partial indexes for orders sweeps + rollout notes
* (SP: 1) [DB] refactor sweep claim step to FOR UPDATE SKIP LOCKED batching
* (SP: 1)[DB]: slow janitor schedule to every 30 minutes
* (SP: 1)[DB] increase polling delays for MonobankRedirectStatus
* (SP: 1)[FIX] harden webhooks + fix SSR hydration + janitor/np gates + sweeps refactor
* (SP: 1)[FIX] harden shipping enqueue gating + apply NP interval floor
* (SP: 3) [SHOP] audit-driven e2e purchase readiness hardening (events, notifications, consent, returns) (#378)
* (SP:3)[SHOP] add canonical payment/shipping/admin audit tables + dedupe helper with flagged atomic dual-write
* (SP: 2)[SHOP] add INTL quote flow (request/offer/accept/decline), payment-init gate, and quote expiry/timeout sweeps
* (SP: 3)[SHOP] introduce outbox-driven notifications with projector + worker (phase 3)
* (SP: 3)[SHOP] add minimal returns/RMA lifecycle with atomic audit + canonical events (phase 4)
* (SP: 3)[SHOP] enforce guest status-token lite-only access and audit token usage (phase 5)
* (SP: 3)[SHOP] centralize transition guards and enforce across admin/webhook/worker flows (phase 6)
:wq
n
* (SP:3)[SHOP]: enforce DATABASE_URL_LOCAL preflight + deterministic vitest config
* (SP:3)[SHOP]: require canonical events in prod (fail-fast)
* (SP:3)[SHOP]: implement notifications transport with retries + DLQ
* (SP:3)[SHOP]: persist checkout legal consent artifact
* (SP:1)[SHOP] add migration 0025 for consent + events + audit + prices
* (SP:1)[SHOP] emit shipping_events for shipment worker transitions
* (SP:2)[SHOP] audit admin product mutations (deduped)
* (SP:2)[SHOP] make Monobank webhook retryable on transient apply failures
* (SP:3) [SHOP] enforce guest status-token scopes across order actions
* (SP:1) [SHOP] make product_prices the only write authority
* (SP:1) [SHOP] add Playwright e2e smoke suite (local DB only)
* (SP:3) [SHOP] explicitly reject exchanges (EXCHANGES_NOT_SUPPORTED)
* (SP: 3)[FIX] harden audit + workers/tests; fix transitions/restock + webhook perf
* (SP: 3)[FIX] harden local-db test safety and tighten shop reliability guards
* (SP: 3)[FIX] fail-closed admin audit, refine shipments-worker outcomes/metrics, tighten quote+tests
* (SP: 1)[FIX] harden shipments-worker claiming/leases and make audit+quote/test paths resilient
* (SP: 1)[FIX] harden quote request errors/logging and sanitize requestId; document best-effort delete audit
* feat(ui): add devops/cloud category icons and styles (#379)
* chore(release): prepare v1.0.6 changelog
* chore: bump version to 1.0.6
---------
Co-authored-by: Liudmyla Sovetovs <milkaegik@gmail.com>
Co-authored-by: Lesia Soloviova <106915140+LesiaUKR@users.noreply.github.com>1 parent 2bafe82 commit e0d1e01
133 files changed
Lines changed: 47650 additions & 467 deletions
File tree
- frontend
- app
- [locale]/shop/checkout/success
- api/shop
- admin
- orders/[id]/quote/offer
- products
- [id]
- status
- returns/[id]
- approve
- receive
- refund
- reject
- checkout
- internal
- notifications/run
- orders/restock-stale
- orders/[id]
- payment/init
- quote
- accept
- decline
- request
- returns
- status
- webhooks
- monobank
- stripe
- components/about
- data
- db
- schema
- drizzle
- meta
- lib
- about
- env
- services
- orders
- products
- mutations
- shop
- events
- notifications
- shipping
- transitions
- shop
- tests
- helpers
- shop
- types
- validation
- public/icons
- tests/e2e
- studio
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
782 | 782 | | |
783 | 783 | | |
784 | 784 | | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
| 130 | + | |
| 131 | + | |
130 | 132 | | |
131 | 133 | | |
132 | 134 | | |
| |||
163 | 165 | | |
164 | 166 | | |
165 | 167 | | |
166 | | - | |
| 168 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
16 | 18 | | |
17 | 19 | | |
18 | 20 | | |
| |||
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
| 78 | + | |
78 | 79 | | |
79 | 80 | | |
80 | 81 | | |
| |||
Lines changed: 167 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| |||
320 | 321 | | |
321 | 322 | | |
322 | 323 | | |
323 | | - | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
324 | 327 | | |
325 | 328 | | |
326 | 329 | | |
| |||
457 | 460 | | |
458 | 461 | | |
459 | 462 | | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
460 | 508 | | |
461 | 509 | | |
462 | 510 | | |
| |||
643 | 691 | | |
644 | 692 | | |
645 | 693 | | |
646 | | - | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
647 | 697 | | |
648 | 698 | | |
649 | 699 | | |
| |||
704 | 754 | | |
705 | 755 | | |
706 | 756 | | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
707 | 790 | | |
708 | 791 | | |
709 | 792 | | |
| |||
0 commit comments