All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Initial MVP release of the DevLovers platform
- Q&A section with categorized questions
- Quiz system with dynamic quiz pages
- Leaderboard with user rankings
- Blog section with static and dynamic content
- Static informational pages:
- About
- Contacts
- Terms of Service
- Privacy Policy
- Shop section (initial version)
- Authentication system (login & signup)
- Multi-language (i18n) support
- Theme switching:
- Light
- Dark
- System theme
- Core application layout and routing
- API routes for authentication and quizzes
- Database integration using Drizzle ORM
- PostgreSQL database hosted on Neon
- Application deployed on Netlify
- Custom domain configured: https://devlovers.net
- Server-authoritative currency handling in Shop based on locale (UAH for
uk, USD otherwise) - Per-currency product pricing model using
product_prices - Canonical money handling in integer minor units across orders and carts
- Centralized money formatting via a single Intl-based formatter
- Multi-language JavaScript Q&A question base (uk / en / pl)
- Git Q&A localization with category translations (uk / en / pl)
- Live tag search suggestions in Blog with Tab auto-complete
- Enter key support for adding blog filter tags
- Shop catalog, cart, and checkout now resolve prices strictly by currency
- Orders enforce single-currency rule (no mixed-currency orders)
- Blog card layout redesigned with responsive images and improved visuals
- Blog filter controls and tag/category styling refined
- Q&A categories are now driven by structured, localized data
- Header navigation updated to point to quizzes list instead of a specific quiz
- Removed hardcoded
$usage and float-based price calculations in Shop - Eliminated mixed-currency edge cases and rounding risks
- Fixed duplicated JavaScript Q&A records in the database
- Hardened Q&A list rendering to prevent crashes on malformed list data
- Fixed malformed list items in Git question #96
- Allowed unauthenticated access to Quiz and Leaderboard pages (guest flow)
- Social authentication via Google and GitHub (OAuth)
- System theme–based favicon switching (light / dark via
prefers-color-scheme) - Quiz cards redesign with categories, progress indicators, and status badges
- Countdown timer for quizzes with auto-submit on expiration
- Per-user quiz progress tracking (best score, attempts, completion %)
- Category-based quiz browsing with responsive tabs
- Multilingual content additions:
- HTML questions base
- React questions base
- Localized About page (uk / en / pl)
- Unified platform & shop header with variant-based behavior
- Login and signup flows updated to support OAuth providers
- Authentication UI enhanced with provider buttons and separators
- Quiz navigation and layout improved for better UX on desktop and mobile
- Blog and footer text fully localized using i18n strings
- Header/navigation logic centralized to prevent route-specific inconsistencies
- Shop pages aligned with unified header and navigation system
- Fixed GitHub OAuth redirect by correctly passing and validating state parameter
- Improved OAuth security with stronger CSRF protection
- Removed duplicated and legacy header components
- Prevented import breakages caused by outdated shop/platform shells
- Improved robustness of quiz duration calculation with reliable fallbacks
- Cleaned up redundant files, comments, and unused utilities
- Complete authentication lifecycle:
- Google & GitHub OAuth
- Email verification
- Password reset and recovery flows
- Full internationalization (uk / en / pl) across:
- Authentication pages
- Dashboard
- Contacts
- About page
- Blog, Q&A, Quiz
- Privacy Policy and Terms & Conditions
- New quiz content:
- Angular, Vue.js, Node.js quizzes
- HTML and React question bases
- Advanced quiz experience:
- Countdown timer with persistence and auto-submit
- Encrypted/hashed answers to prevent client-side cheating
- Session persistence with quit confirmation
- Guest quiz results synced after authentication
- Real-time online users counter with animated UI
- GDPR-compliant cookie consent banner with i18n support
- Unified platform & shop header system
- System theme–based favicon switching (light / dark)
- Initial SVG icon set for UI usage
- Quiz UI redesigned:
- Category-based tabs
- Consistent QuizCard layout
- Progress indicators and status badges
- Q&A UI refreshed:
- Unified layout with shared background
- Improved pagination and accordion readability
- Authentication pages refactored into reusable components
- Blog experience improved:
- Redesigned blog page and cards
- Category pages and header search
- Recommended posts section
- Shop UI and layout unified across platform and admin views
- Tailwind theme tokens centralized for theme-aware styling
- Database migration history reset to a clean, linear baseline
- Fixed GitHub OAuth redirect and CSRF state handling
- Fixed quiz timer issues when switching languages
- Fixed Q&A API caching to always return fresh data
- Resolved multiple accessibility issues (WCAG, W3C, Lighthouse 100%)
- Hardened authentication redirects to prevent open-redirect vulnerabilities
- Stabilized shop checkout, refund, inventory, and webhook flows
- Improved Neon performance and reduced CU-hours usage
- Cleaned up redundant files, comments, and legacy code
- AI-powered Word Helper for Q&A:
- Text selection with floating “Explain” button
- Multilingual explanations (uk / en / pl)
- Draggable modal with caching and rate limiting
- Extensive automated testing:
- 90%+ coverage for Quiz core logic (unit + integration)
- Full Q&A component, hook, and API test coverage
- SEO & content enhancements for Blog:
- Breadcrumb navigation (posts & categories)
- Schema.org JSON-LD (Article, BreadcrumbList)
- Improved metadata (descriptions, dates, authors)
- Improved navigation & UX:
- Refactored responsive header with clear active states
- GitHub stars indicator in header
- Enhanced mobile menu with scroll locking
- Visual & UX polish across platform:
- Unified category accent colors across Quiz & Q&A
- Refined Leaderboard layout and mobile responsiveness
- Updated About page interactions and game mechanics
- Infrastructure & environment support:
- GROQ API integration for AI features
- New environment variable support and documentation
- Quiz UI unified with Q&A design system:
- Shared CategoryTabButton component
- Category-based accent colors across full quiz flow
- Traffic-light countdown timer (green / yellow / red)
- Blog experience refined:
- Improved search relevance and filtering UX
- Better author navigation and category presentation
- Header, footer, and navigation styles aligned to brand tokens
- Shop UI polish:
- Button styles and hero messaging updated
- Stripe checkout success redirect fixed
- Removed deprecated Contacts page and all references
- Stabilized Leaderboard layout, spacing, and mobile behavior
- Fixed quiz timer persistence and anti-cheat messaging UX
- Improved accessibility and visual consistency across components
- Resolved locale duplication in Stripe checkout redirects
- Cleaned up redundant UI states, placeholders, and legacy styles
- Enhanced About page experience:
- Refreshed Features and Pricing sections with clearer messaging
- Interactive particle-based backgrounds with reduced-motion support
- New reusable UI components:
ParticleCanvas,GradientBadge,SectionHeading - Improved mobile responsiveness and layout stability
- Blog improvements:
- Dynamic grid backgrounds across blog pages
- Featured post CTA in blog hero
- Author filtering via URL with adaptive header behavior
- Improved 404 error pages:
- Fully localized (uk / en / pl)
- Unified global rendering strategy
- Clear navigation actions back to Home
- AI Word Helper updates:
- Switched model to
llama3-70b-8192for improved response quality
- Switched model to
- Accessibility & UX:
- Better keyboard navigation for highlighted terms
- Improved touch and mobile interaction handling
- Home page refinements:
- Hero section refactored into smaller reusable components
- Updated color palette, spacing, animations, and mobile behavior
- Footer styling updated to match refreshed brand visuals
- Blog layout aligned with updated design language and spacing rules
- Default locale updated from
uktoenwith safer type validation - Internal codebase cleanup:
- Improved i18n defaults and validation
- Better cache initialization and error handling
- Fixed blog post image rendering for latest posts
- Resolved layout centering issues on Leaderboard
- Improved stability of text selection detection for AI helper
- Fixed social icon hover styles in dark mode
- Reduced visual overlap issues on small mobile screens
- About page enhancements:
- Refreshed Features and Pricing sections with clearer messaging
- Interactive particle-based backgrounds with reduced-motion support
- New reusable UI components: ParticleCanvas, GradientBadge, SectionHeading
- Improved mobile responsiveness and layout stability
- Blog improvements:
- Pagination support for blog listing
- Dynamic grid backgrounds across blog pages
- Featured post CTA in blog hero
- Author filtering via URL with adaptive header behavior
- AI Word Helper updates:
- Improved error handling with simplified retry UX
- Backend refactor for Vercel compatibility
- Rate limiting enforcement for AI explanation endpoint
- Caching & performance:
- Upstash Redis cache for Q&A (cache-aside strategy)
- Robust cache parsing and invalidation handling
- Infrastructure & tooling:
- Netlify deployment configuration updates
- Redis environment variable support
- CodeRabbit automated review configuration
- Home page UI refinements:
- Refactored Hero section into reusable components
- Improved primary CTA button styling and interactions
- Updated card layouts and online users counter visuals
- Blog experience refined:
- Improved text formatting and rendering consistency
- Better search, filtering, and pagination UX
- Shop UI updates:
- Unified storefront styles across components
- Improved checkout flow state handling
- Added metadata across shop routes for better SEO
- Default locale changed from
uktoenwith safer type validation - Internal refactors:
- Codebase cleanup and structural simplification
- Improved cache initialization and error handling
- Fixed blog text formatting and latest post image rendering
- Resolved layout centering issues on Leaderboard
- Fixed social icon hover styles in dark mode
- Improved stability of text selection detection for AI helper
- Fixed locale duplication and routing edge cases
- Reduced visual overlap issues on small mobile screens
- Quiz performance improvements:
- Redis-based answer verification replacing AES encryption
- Server-side quiz cache initialization to reduce verification latency
- Debug endpoints for inspecting and clearing quiz caches (development only)
- Caching & data layer:
- Persistent Redis caching for static Quiz and Q&A data (TTL removed)
- Cache-aside strategy for quiz answers and Q&A content
- Internationalization & accessibility:
- Translations for blog categories, CTA variants, and UI components (en / uk / pl)
- Improved aria-label coverage for navigation, cart, theme toggle, and search
- Developer experience:
- Finalized ESLint Flat Config for frontend
- Stable Prettier + Tailwind class sorting workflow
- Consistent format-on-save behavior across the team
- Quiz system refactor:
- Simplified answer verification flow using Redis lookups
- Improved guest session restoration after quiz completion
- Language switch now preserves quiz results for guest users
- Layout & UI refinements:
- Removed duplicate padding on quiz routes
- Improved mobile alignment for Quiz Rules and headers
- Refined leaderboard component structure and lint stability
- Shop module cleanup:
- Normalized component naming (PascalCase)
- Reorganized test structure under domain boundaries
- Unified active-state and hover styling across shop routes
- Blog UI improvements:
- Fixed mobile paddings and spacing consistency
- Improved responsive header and layout behavior
- Fixed mobile layout misalignment on quiz pages
- Fixed guest language switch issues on quiz result screen
- Improved WCAG color contrast compliance across quiz UI
- Fixed ESLint, Prettier, and test configuration inconsistencies
- Removed unused files, dead code, and outdated utilities
- Improved reliability of quiz session restoration and state handling
- Quiz SEO & performance improvements:
- Dynamic metadata generation for quizzes list and quiz detail pages
- i18n-aware meta titles and descriptions (en / uk / pl)
- Browserslist configuration targeting modern browsers
- Quiz content updates:
- Expanded JavaScript Fundamentals quiz from 10 to 40 questions
- Dashboard UI improvements:
- New DynamicGridBackground for cleaner visual hierarchy
- Refined ProfileCard and StatsCard layouts
- Accessibility & i18n:
- Improved aria-label coverage across navigation and UI controls
- Refined English, Polish, and Ukrainian UI copy and punctuation
- Quiz UX refinements:
- Countdown timer animation stabilized on tab switch and session restore
- Emoji replaced with icon-based indicators for consistent styling
- Anti-cheat logic improved to distinguish touch vs mouse events
- Q&A experience improvements:
- Pagination scroll now targets section instead of page top
- Mobile tap lock resolved by clearing text selection on interaction
- Home & layout updates:
- Improved code card sizing and responsive behavior
- Online users counter repositioned for better mobile UX
- Shop UX refinements:
- Canonicalized legacy “View all” filters
- Improved cart CTA behavior and badge layering
- Blog & CMS:
- Refactored blog image rendering and filtering logic
- Improved pagination state handling
- Styling & consistency:
- Fixed Tailwind v4 canonical class warnings
- Unified token-based styling across dashboard, 404 page, and controls
- Fixed mobile anti-cheat false positives on quiz pages
- Removed render-blocking Font Awesome CSS
- Fixed quiz timer progress bar desynchronization
- Improved table text contrast in dark mode
- Fixed cart badge overlay issues in header
- Resolved multiple mobile spacing and padding inconsistencies
- About page UX improvements:
- Updated icons in pricing and sponsorship sections
- Renamed “Latest Contributors” to “Open Source Heroes” (en / uk / pl)
- Improved mobile readability for disclaimers and interactive game text
- Performance optimization: ParticleCanvas disabled on mobile devices
- Q&A navigation improvements:
- Category-aware Git topic navigation
- Prevented unintended scroll on desktop pagination
- Platform documentation updates
- About page refinements:
- Improved visual consistency and spacing across sections
- Optimized theme toggle animation for smoother transitions
- Updated LinkedIn follower count display
- Blog layout:
- Fixed background paddings for better responsive consistency
- Shop backend behavior:
- Checkout now hard-blocked when PAYMENTS_ENABLED=false
- Early 503 response prevents order creation and inventory reservation
- Fixed incorrect Git topic links in Q&A cards
- Resolved multiple mobile UI issues on About page
- Prevented checkout edge case creating paid orders when payments are disabled
- Improved accessibility and readability across updated UI sections
- Q&A UI enhancements:
- Smooth staggered accordion entrance animations after data fetch
- Shared animated loader component reused across Q&A sections
- Leaderboard visual improvements:
- Reused Q&A DynamicGridBackground for visual consistency
- Enhanced title animation with gradient wave effect
- Q&A layout refinements:
- Removed square backdrop for cleaner visual hierarchy
- Ensured background fills full viewport height
- Navigation behavior:
- Pagination now consistently resets scroll position to the top of content
- Fixed inconsistent scroll behavior when navigating Q&A pages
- Improved UX predictability across desktop and mobile devices
- Monitoring & observability:
- Production error and performance monitoring via Sentry
- Global error boundary and release tracking
- Security & CI:
- Safe-chain dependency malware protection in GitHub Actions
- Automated dependency validation on push and pull requests
- SEO & social metadata:
- Full Open Graph and Twitter Card support
- Localized OG metadata and alt text
- Canonical URL handling via metadataBase
- Quiz platform improvements:
- Redis caching for quiz questions to reduce database load
- Guest warning with Login / Sign up / Continue as guest options
- Bot protection: single verification per question attempt
- Shop enhancements:
- Monobank payment integration (UAH-only, feature-gated)
- Secure webhook processing with signature validation and idempotency
- Admin refund and cancel endpoints
- Platform transparency:
- Added
/public/humans.txtwith team, mission, and technology stack
- Added
- Navigation & UX:
- Added global page transition loading indicators
- Context-aware header behavior for Blog and Shop
- Improved mobile menu interactions and auto-close behavior
- Leaderboard:
- User avatars with DiceBear fallback for missing images
- Home & SEO:
- Home title standardized to "DevLovers"
- Subtitle used for OG/Twitter previews
- Authentication & routing:
- Improved locale detection and dashboard redirect handling
- OAuth and database configuration stability improvements
- Fixed missing locale handling for
/dashboardredirects - Restored authentication flow after environment configuration issues
- Improved handling of missing or invalid avatar data
- Fixed OG preview URL resolution issues
- Improved reliability of environment configuration and credentials
- Reduced database load for quiz pages via Redis caching
- Improved frontend loading experience during navigation
- Complete production-ready DevLovers platform:
- Interactive Home with redesigned Hero and Features sections
- Full Quiz learning cycle: play, results, review, and dashboard history
- Quiz integrity system with violations counter and status badges
- Breadcrumb navigation for quiz review flow
- Dashboard improvements:
- Quiz Results history with scores, percentages, and mastery status
- User avatars with automatic fallback generation
- Q&A improvements:
- Next.js category enhancements and optimized loader behavior
- Configurable pagination size (10–100 items) with URL persistence
- Leaderboard enhancements:
- User avatars in podium and table rows
- Improved layout consistency across devices
- Platform transparency:
- Public
/humans.txtwith team and project information
- Public
- Observability & monitoring:
- Full Sentry integration for production error and performance tracking
- CI & supply-chain security:
- Safe-chain dependency protection in GitHub Actions
- Shop & payments:
- Monobank acquiring flow (UAH-only, feature-gated)
- Webhook verification, idempotent processing, and admin operations
- Internal Monobank janitor jobs for payment state consistency
- Home page redesigned with improved UX, animations, and full localization
- Header and navigation refined with contextual behavior and loading states
- Quiz UX improvements:
- Unified result thresholds (Study / Review / Mastered)
- Locale switch now preserves result screen
- Auto-scroll to Next action after answering
- Mobile experience significantly improved across:
- Dashboard
- Leaderboard
- AI Word Helper
- SEO & social sharing:
- Localized Open Graph and Twitter metadata
- MetadataBase configuration for correct preview URLs
- Product experience:
- Multi-language product descriptions
- Improved rendering and formatting
- Points mismatch between dashboard and leaderboard
- Locale redirect issues for dashboard and quiz result pages
- Review cache isolation to prevent cross-user data leakage
- Quiz result locale switch losing state
- Multiple Tailwind v4 canonical class warnings
- Various mobile layout and interaction issues
- CI dependency scanning with Safe-chain
- OAuth and environment configuration stabilization
- Internal operational endpoints protected with secret-based access
- Redis caching for quiz questions and review data
- Environment configuration cleanup and standardization
- Improved build stability and dependency management
- Shop / Payments reliability improvements:
- Monobank janitor map documentation as a source of truth
- Internal Monobank janitor endpoint scaffold with strict auth and rate-limit guards
- Post-redirect payment status UX with secure
/statuspolling (no-store)
- Homepage engagement:
- Online users counter popup integrated into Hero section
- Single fetch per visit to reduce Neon usage
- Header responsiveness:
- Desktop breakpoint adjusted from 1024px to 1050px
- Reduced glow/shimmer intensity in light theme
- Navigation and layout polish:
- Improved loader positioning to avoid overlap with navigation
- Optimized counter positioning logic
- Q&A data integrity:
- Fixed duplicated questions in API responses
- Added Redis cache versioning (
qa:v2:*) - Implemented automatic deduplication and cache rewrite on inconsistent data
- Improved pagination total count accuracy
- Cache stability:
- Added TTL for Q&A cache
- Automatic cache invalidation after content seeding
- Header layout issues after counter integration
- Hardened Monobank flows:
- Stronger origin checks and structured logging without PII
- Ownership protection for
/orders/[id]/status(IDOR prevention) - Pre-production test gate improvements
- Improved Redis cache reliability for Q&A
- Extended automated tests for caching and payment flows
- Dashboard engagement system:
- Activity Heatmap with daily streak tracking and tooltips
- Expanded Achievements system (24 badges across multiple categories)
- Score distribution visualization and improved analytics
- Profile & account management:
- User name update with validation
- Secure password change (bcrypt hashing)
- Localized system notifications with Notification Center
- Admin platform expansion:
- Unified admin panel under
/adminwith collapsible sidebar - Quiz Admin: full create workflow via JSON upload
- Draft → Ready → Activate publishing flow with translation validation
- Edit existing quizzes with locale-aware editor and Redis invalidation
- Unified admin panel under
- Content & learning:
- Added SQL, PostgreSQL, MongoDB category to Q&A
- User engagement:
- In-app feedback form with multiple attachments
- Sponsor recognition and GitHub star achievements
- Shop UX:
- “My Orders” summary card on Cart page
- Dashboard UX:
- Unified glassmorphism visual language across cards
- Clickable stats sections with smooth navigation
- Leaderboard:
- Top 15 users with contextual ranking around current user
- Improved sponsor styling and visual consistency
- Header & navigation:
- Unified dropdown styles (Notifications / Profile / Language)
- Dependencies:
- Upgraded Next.js to 16.1.6
- Codebase:
- Large-scale formatting and structural refactoring
- Dashboard profile logic and statistics inconsistencies
- Notification rendering and layout issues
- Quiz editor Save button now disabled when no changes made
- Admin quiz cache invalidation when status changes
- Improved mobile menu scroll locking
- Fixed Vercel build issues and migration conflicts
- Improved Redis cache invalidation for quizzes
- Optimized dashboard data fetching
- Safer database migration handling
- Stronger password validation and confirmation flow
- Improved server-side validation and error reporting
- Blog (Sanity):
- Fixed images not rendering on Vercel production
- Improved image optimization across blog pages and components
- SSR hydration mismatch in AchievementBadge (client/server state sync)
- Header hardcoded locale issues
- Notification rendering consistency
-
Q&A UI:
- Updated Git category tab color for stronger visual distinction from HTML
-
Header & Localization:
- Translated all header UI strings (en / uk / pl)
- Notifications now fully localized with locale-aware relative time
- LanguageSwitcher and User menu labels localized
-
Dashboard UX:
- Unified dashboard cards styling using shared
dashboard-cardclass - Clickable profile stats with smooth scroll navigation
- Improved avatar detection logic
- Unified dashboard cards styling using shared
- Improved client-render guards using stable subscription pattern
- Reduced hydration inconsistencies in production
- Shop shipping foundation:
- Nova Poshta delivery support (cities, warehouses, courier)
- Checkout shipping persistence with PII-safe snapshot
- Async shipment label creation workflow
- Admin shipping actions (retry label, mark shipped/delivered)
- Shipping status and tracking in order details
- Performance & cost optimization (Vercel):
- Blog ISR enabled (revalidate: 3600)
- Sanity CDN enabled globally
- Cached blog categories via unstable_cache
- Notification polling replaced with visibility-based refresh
- Analytics runs only in production
- Speed Insights removed
- Reduced unnecessary layout revalidation after notification actions
- Improved cache consistency for blog content and categories
- Lower Vercel Function Invocations and CPU usage
- Reduced origin data transfer for blog content
- Improved overall runtime efficiency
- Auth improvements:
- Cross-tab authentication sync via BroadcastChannel
- Client-side auth handling in Header for faster UI updates
- Quizzes performance:
- Quizzes page now uses ISR (revalidate: 300)
- User progress moved from SSR to client-side API (
/api/quiz/progress) - URL tab sync via
history.replaceStatewithout navigation - GitHub stars cached in
sessionStorageto prevent refetch and re-animation
- Rendering optimization:
- Removed
force-dynamicfrom locale layout - Reduced authentication overhead and dynamic rendering
- Replaced nested
<main>structure with semantic<section>
- Removed
- Fixed quiz timer flash when switching language
- Fixed layout shift on quizzes page (skeleton grid during progress loading)
- Fixed GitHub star button hover trembling
- Fixed React 19
useRefrender warning (lazyuseStateinitializer) - Prevented stale auth state across tabs
- Eliminated layout shift when switching quiz tabs
- Reduced server load by moving auth and progress logic to client
- Improved ISR caching efficiency for quizzes page
- Faster navigation and more stable UI during locale and tab changes
- New learning categories with visual identity:
- Django
- Docker
- Kubernetes
- AWS
- Azure
- DevOps
- Category-specific SVG icons with accent styling across tabs, pagination, and controls
- Improved AWS icon readability in dark mode
- Audit-driven end-to-end purchase hardening:
- Canonical append-only event/audit system
- Async email notifications via outbox worker
- Persisted checkout legal consent (terms/privacy)
- Returns & exchanges lifecycle support
- Admin audit logs for product operations
- Token-scoped guest order access
- Improved Monobank webhook retry behavior
- Added Playwright E2E coverage for Shop flows
- Reduced Neon compute usage:
- Throttled background janitor jobs (every 30 min)
- Partial indexes for order sweeps
- SKIP LOCKED batching to reduce contention
- Optimized checkout and payment status polling with backoff strategy
- Lightweight order status view for faster client updates
- Reduced session activity write frequency
- Blog platform migration:
- Blog content fully migrated from Sanity → PostgreSQL
- New Drizzle ORM query layer for blog posts, categories and authors
- Multi-language blog support (uk / en / pl)
- Portable Text → Tiptap JSON conversion
- Cloudinary image hosting for blog assets
- Wallet payments foundation:
- Monobank Google Pay checkout support
- Wallet payment adapter and wallet service layer
- Payment method selection with idempotent checkout flow
- Blog architecture:
- Public blog routes now read entirely from PostgreSQL
- Removed all runtime calls to
api.sanity.io - Blog rendering switched to server component
BlogPostRenderer
- Internationalization improvements:
- Improved locale handling for blog pages
- Expanded translation coverage across auth and dashboard flows
- Fixed 500 error on blog post pages caused by
pt::text()GROQ query - Fixed layout issues with ISR/SSG blog rendering
- Fixed duplicate response handling in order status API
- Improved error handling and automatic cleanup in order processing
- Stabilized shipping status transition validation
- Fixed missing translation keys and raw error strings
- Stabilized checkout compatibility across Monobank and Stripe
- Added wallet attribution support for Google Pay
- Hardened Nova Poshta warehouse synchronization and caching
- Improved webhook retry handling for payment flows
- Added Google Pay fallback messaging for Monobank checkout
- Added DB indexes for blog queries
- Optimized blog queries through Drizzle ORM
- Reduced external API dependencies (Sanity removed from runtime)
- Improved shipping and payment event processing reliability
- Q&A progress tracking:
- Per-topic viewed progress based on opened accordion items
- Progress bar and viewed counter above the question list
- Reset action for current-topic progress
- Viewed/bookmark persistence in localStorage
- Viewed and bookmark indicators in accordion rows
- Localized progress labels and reset action (uk / en / pl)
- Local Shop smoke coverage:
- Stable Playwright checkout/shipping smoke scenarios for local verification
- Deterministic regression coverage for payment, shipping, and wallet flows
- Q&A accordion UX:
- Improved mobile layout for wrapped question titles
- Restored chevron toggle behavior and open-state rotation
- Fixed Q&A totals by removing text-based deduplication in the API layer
- About page:
- Updated LinkedIn followers fallback display to
1.8k+
- Updated LinkedIn followers fallback display to
- Shop checkout and payments:
- Enforced strict shipping/payment coupling for shippable orders
- Payment page access now requires authorized session or valid scoped token
- Guest payment-init flows now receive correct token scope
- Stripe capability checks aligned across cart, checkout, and payment page
- Monobank invoice flow separated from Monobank Google Pay flow
- Preserved locale during CTA navigation
- Removed silent Stripe fallback behavior to prevent fake paid order creation
- Closed shipment processing on refund, cancel, reverse, failure, and other terminal negative payment states
- Hardened Monobank webhook verification, reconciliation, and wallet retry handling
- Added validation coverage for invalid city/warehouse, locker, and courier address combinations
- Prevented janitor cleanup from canceling reconcilable wallet attempts too early
- Full Blog Admin in the admin panel:
- Blog post create, edit, delete, preview, publish, and schedule workflow
- Tiptap WYSIWYG editor with headings, lists, task lists, code blocks, images, links, and sticky toolbar
- Cloudinary image upload with preview for blog content
- Inline author and category creation directly from the post form
- Locale-aware preview rendering with
BlogPostRenderer - Blog section in admin sidebar with Posts, New Post, Authors, and Categories
- Blog content management:
- Author CRUD with multilingual profiles, profile photo upload, and social links
- Category CRUD with inline editing and display-order reordering
- Admin API routes for blog posts, authors, categories, and image upload
- Zod validation schemas for blog admin forms and mutations
- Blog architecture and performance:
- Replaced force-dynamic blog post rendering with ISR using shared 7-day revalidation
- Unified cache strategy across blog list, post, category, search, and author routes
- Cached blog queries with React cache and
unstable_cache - Public blog pages now revalidate correctly after admin mutations
- Blog categories on public pages now use cached query variants
- Shop launch readiness:
- Checkout provider resolution is now server-authoritative and fail-closed
- Stripe refunds now enter a contained non-shippable state before reconciliation
- Admin shipping actions now require a compatible shipment record and centralized eligibility checks
- Disabled Monobank admin refunds and in-app return refunds for launch
- Fixed inconsistent blog
revalidatePathpatterns and missing locale-aware invalidation - Fixed public blog cache invalidation after post, author, and category updates
- Removed legacy order creation paths that could persist new orders with
paymentProvider='none' - Prevented double finalization and double restock during Stripe refund recovery flows
- Blocked shipment queuing and admin shipping transitions for refund-contained orders
- Updated Shop regression coverage for checkout fail-closed behavior, refunds, webhooks, and shipping guards
- Netlify runtime env resilience:
- Build-time runtime env generation (
generate-env-runtime.mjs) for server-only fallback reads - Generated fallback map for safe server env resolution when
process.envis partially unavailable - Extended explicit runtime allowlist for OAuth, admin visibility, and shop status token keys
- Hybrid server env resolution with Netlify runtime fallback support
- Build-time runtime env generation (
- Shop PDP merch-ready experience:
- Multi-image product model with primary image and stable ordering
- Admin product photo management with upload, reorder, primary selection, and safe removal
- Interactive PDP gallery with thumbnail-to-main image switching
- Localized apparel size-guide entry near size selection
- Server env resolution:
- Migrated remaining direct server env reads to
readServerEnv(...)across auth, csrf, admin guards, layout admin visibility, and shop status-token flows - Added platform-safe fallback behavior for Netlify SSR/functions while keeping Vercel-first behavior intact
- Updated build/deploy env handling to avoid runtime 502 caused by missing SSR env delivery
- Migrated remaining direct server env reads to
- Shop launch readiness:
- Hardened checkout provider resolution with fail-closed behavior
- Tightened Stripe refund containment and reconciliation flows
- Hardened shipping admin guards with centralized non-shippable eligibility rules
- Disabled Monobank admin refunds and in-app return refunds for launch scope
- Platform maintenance:
- Added missing Tiptap packages required by admin blog editor build
- Updated CODEOWNERS and refreshed About LinkedIn social-proof metric
- Fixed Netlify SSR runtime env gaps that caused auth/db initialization failures and site-level 5xx/502 on develop
- Restored GitHub and Google OAuth runtime behavior on Netlify develop
- Stabilized auth and CSRF secret resolution in SSR runtime using server-safe env reads
- Fixed Vercel Analytics loading condition to avoid
/_vercel/insights/script.js404 on Netlify - Improved Redis client safety path for malformed or missing runtime configuration
- Shop launch-readiness hardening (repeat audit integration):
- Payment correctness protections with webhook-first terminal-state handling
- Inventory reserve/release integrity and concurrency safeguards
- Carrier/shipment idempotency protections and explicit lifecycle safety states
- Expanded checkout idempotency and legal-consent contract coverage
- Operational runtime safety checks and stricter env validation for critical routes
- Shop customer communications:
- Transactional notifications for
order_created,order_shipped,order_canceled, andorder_returned - Fail-closed guest recipient policy and improved notification reliability at business-action boundaries
- Transactional notifications for
- Shop merchandising/admin improvements:
- Controlled post-order shipping edit flow and expanded shipment visibility
- Better admin audit/history coverage for product and order operations
- Size guide UX component decoupled from purchase availability on PDP
- Platform and content:
- New Java and Spring categories with icons, seeded data, and category accent styles
- Seller address env support for legal/seller information surfaces
- Commercial policy refactor (CP-01):
- Locale now controls language only; storefront commercial behavior is policy-driven
- UAH enforced as canonical storefront currency across locales
- Checkout/provider selection made locale-agnostic and server-authoritative
- Admin pricing contract aligned with UAH-required / USD-compatibility-only policy
- Netlify SSR runtime stability:
- Runtime env fallback chain and allowlist coverage expanded for auth, admin, and shop flows
- OAuth provider/env resolution hardened to avoid build/runtime crashes on develop
- Server env reads unified through
readServerEnv(...)in remaining sensitive paths
- Q&A pagination UX:
- Replaced native per-page select with custom accessible dropdown
- Unified page-size control visuals with pagination style
- Dropdown behavior refined (keyboard navigation, outside click close, chevron state)
- Fixed footer overlap in Q&A per-page control by opening dropdown upward with higher stacking context
- Fixed stale test helper import (
TEST_LEGAL_CONSENT) by switching to runtime consent factory generation - Fixed OAuth build/runtime fragility by lazy-loading provider env usage
- Fixed shop/runtime regressions around env delivery and SSR safety on Netlify develop
- New category visual support:
- Added PHP, Laravel, C#, and .NET category styles and SVG icon mapping
- Introduced centralized
categoryRegistryas a single source of truth for category metadata and style config
- Q&A / Quiz category architecture:
- Refactored
categoryDataandcategoryTabStylesgeneration to use shared registry-driven definitions - Preserved existing style/data APIs (
categoryData,categoryTabStyles,getCategoryTabStyle) for compatibility across pages
- Refactored
- About page social metric:
- Updated LinkedIn followers fallback target from
1.8k+to2k+ - Normalized compact-number formatting so whole thousands render as
2k+(without.0)
- Updated LinkedIn followers fallback target from
- Docs and project presentation:
- Refreshed README screenshots and dashboard section copy
- Updated README Blog section to reflect in-house admin workflow (not Sanity CMS)
- Shop cart SSR/runtime capability checks:
- Restored fail-closed cart provider resolution behavior to prevent SSR crashes when unrelated env is missing
- Migrated Stripe/Monobank cart capability env reads to runtime-safe server env access for Netlify
- Category typing robustness:
- Preserved literal slug/title types in
categoryRegistryfactory to avoid widening tostring
- Preserved literal slug/title types in
- UI polish:
- Brightened Django category accent color for better readability on dark theme