Skip to content

Commit a1562c4

Browse files
ViktorSvertokaliudmylasovetovsTiZoriiKomrakovaAnnaAlinaRyabova
authored
Release v0.5.0 (#212)
* (SP: 1) [Security] Enforce origin posture for shop APIs (admin/checkout same-origin; internal/webhooks non-browser) + docs * (SP: 1) [DB] Align stripe_events.order_id FK CASCADE across schema and migrations * feat(i18n): localize quiz anti-cheat, header and blog filters (#175) * feat(Blog): Adding last published post to the blog and category page, recommended posts, Changing styles to one unified format, Bug fixes * Update leaderboard-style * Update leaderboard-style * teat(Blog): fix of hover on author, fix of the line * (SP: 3) [Observability] Extend structured logging + correlation IDs across all shop routes; purge console.*; enforce explicit error codes * (SP: 1) [Admin][Security] Add safe product delete (PRODUCT_IN_USE) + mobile cards UI; tighten env/docs, locale normalization, cache-control, and logging semantics * fix: npm installing * (SP: 1) [Admin] Align products list in use checks with DB column names (order_items/inventory_moves) * fix:Update leaderboard: fixed background * fix: remove email from CurrentUser type to prevent PII exposure * refactor: align leaderboard UI with brand style (fixed bg, css vars, podium glow) * (SP: 1) [Frontend] About Us Page. Fixed game, topics, mobile layout - Fixed mobile tabs in FeaturesSection (icon-only on mobile) - Fixed game bugs: collision detection, animation, scoring system - Added multiple obstacle types with level progression - Improved game sizing for mobile while preserving desktop - Updated TopicsSection with local SVG icons and hover borders - Made DynamicGridBackground static grid opt-in via showStaticGrid prop - Limited SponsorsWall to display max 10 sponsors - Optimized CommunitySection button layout for mobile * refactor: update accent color hover effects to Footer - Update Footer links to use --accent-primary on hover - Update ThemeToggle icons to use --accent-primary on hover - Both components adapt colors to light/dark theme * refactor: improve accessibility - Add focus-visible styles for keyboard navigation accessibility * (SP: 1) [Shop] Fix Stripe checkout success redirect (remove duplicate locale /uk/uk) (#186) * fix:leaderboard update leaderboard-style (#187) * fix:leaderboard update leaderboard-style on mobile (#188) * fix:leaderboard update leaderboard-style * fix:leaderboard update leaderboard-style on mobile * fix: resolve CodeRabbit issues and conflicts --------- Co-authored-by: Viktor Svertoka <victor.svertoka@gmail.com> * (SP: 1) [Frontend] Changing hero headline on shop main page (#190) * (SP: 1) [Shop] Fix checkout redirect 404 by removing duplicate locale in in-app routes and Stripe return_url * (SP: 1) [Shop] Fix locale cart page and orderid page * (SP: 1) [Frontend] Changin hero headline on shop main page * (SP: 1) [Frontend] Fix styles shop home page, buttons (#191) * Feature/leaderboard style update (#192) * (SP: 7) [UI] Quiz UI polish: tabs styling, category accents, color scheme (#181, #193, #194) (#195) * Sanity (#196) * feat(Blog):fix for clickable link in post details, fix for author details * feat(Blog):refactoring after removing author modal * feat(Blog): fix unified date format * (SP: 3) [AI] Add AI word helper with Groq integration (#200) * (SP: 3) [AI] Add AI word helper with Groq integration - Implement Groq API with Llama 3.1 70B model - Add text selection detection on Q&A page - Create floating "Explain" button - Build draggable modal with 3-language support (uk/en/pl) - Add localStorage caching for instant repeated lookups - Implement guest CTA (login/signup) - Add rate limiting (10 requests/min) - Auth-gated feature (registered users only) Components: - SelectableText: Detects text selection - FloatingExplainButton: Appears on selection - AIWordHelper: Main modal with explanations * (SP: 1) i18n: fix Polish locale and set EN as default * Sanity (#202) * feat(Blog):fix for clickable link in post details, fix for author details * feat(Blog):refactoring after removing author modal * feat(Blog): fix unified date format * feat(Blog): Fix for click-outside-to-close search, recommended posts are limited to 3 * feat(Blog): selectedAuthorData fixed * feat(Blog): Added description for /blog/[slug] metadata, Added Schema.org JSON‑LD for Article (BlogPosting) and BreadcrumbList , Added <time datetime> tags where blog dates renders * Sanity (#203) * feat(Blog):fix for clickable link in post details, fix for author details * feat(Blog):refactoring after removing author modal * feat(Blog): fix unified date format * feat(Blog): Fix for click-outside-to-close search, recommended posts are limited to 3 * feat(Blog): selectedAuthorData fixed * feat(Blog): Added description for /blog/[slug] metadata, Added Schema.org JSON‑LD for Article (BlogPosting) and BreadcrumbList , Added <time datetime> tags where blog dates renders * feat(Blog): fix hover social links, fixed duplication not found search * (SP: 3) [Frontend] Refactor Header UI and navigation states (#201) * (SP: 3) [Frontend] Refactor Header UI and navigation states - Add icon to the language switcher - Add GitHub icon with stars indicator (frontend only) - Update logo styles - Improve touch interaction styles - Verify correct placement and alignment of all header components - Make mobile header modal full-screen - Disable background scroll when mobile menu is open - Highlight active navigation item - Update navigation styles: - Highlight Shop link when user is on Home pages - Highlight Home link when user is on Shop pages - Style changes only, no routing or logic changes * fix CodeRabbit * update HeaderButton styles * fix: add accessibility for HeaderButton * (SP: 3) [Testing] Vitest config + unit + integration tests for quiz module (#204) * feat(quiz-ui): quiz UI polish - tabs, category accents, color scheme (issues #181, #193, #194) - Refactor QaTabButton to shared CategoryTabButton component - Add category accent colors to QuizCard, buttons, progress indicators - Standardize colors with CSS variables, traffic light timer - Add DynamicGridBackground to quizzes list page - Border-only answer feedback, semi-transparent progress styles * docs: update .gitignore * fix(quiz): align disqualification threshold with warning banner Changed violationsCount > 3 to >= 3 in QuizResult points block to match the warning banner threshold at line 124. * feat(quiz-testing): add quiz unit tests - Configure Vitest for quiz module - Add test factories and setup utilities - Add quiz-crypto tests (13 tests) - Add quiz-session tests (12 tests) * test(quiz): add integration tests for verify-answer API and useAntiCheat hook (#199) - verify-answer.test.ts: 8 tests for API endpoint - Correct/wrong answer verification - Validation errors (missing fields, tampered data) - Security: rejects modified encrypted answers - quiz-anticheat.test.ts: 10 tests for useAntiCheat hook - Detects copy, paste, context-menu, tab-switch events - Respects isActive flag - Reset and cleanup functionality Total quiz tests: 52 (9 setup + 25 unit + 18 integration) * test(quiz): expand test coverage to 90%+ with hooks, API routes, and UI flow Add 28 new tests covering: - useQuizSession hook (6 tests) - useQuizGuards hook (8 tests) - guest-quiz storage (5 tests) - guest-result API route (5 tests) - quiz-slug API route (3 tests) - QuizContainer UI flow (1 test) Coverage: 35% -> 90.94% (quiz scope) Tests: 52 -> 80 * chore: remove coverage-quiz from git, add to .gitignore * chore: add coverage-quiz to .gitignore, fix quiz guards test * Feature/leaderboard style update (#206) * fix:leaderboard update leaderboard-style * fix:leaderboard update leaderboard-style on mobile * fix: resolve CodeRabbit issues and conflicts * fix: move row border to first cell to resolve CodeRabbit issue * fix: move row border to first cell to resolve CodeRabbit issue new * fix(leaderboard): improve table mobile * fix(leaderboard): correct malformed shadow class syntax for avatar glow * test(q&a): add comprehensive qa tests and coverage setup (#208) * test(q&a): add comprehensive qa tests and coverage setup * test(q&a): align mocks and reset in qa tests * (SP: 1) [Frontend] Remove Contacts References (#211) * test(q&a): add comprehensive qa tests and coverage setup * test(q&a): align mocks and reset in qa tests * chore(nav): remove contacts page references * Sanity (#209) * feat(Blog):fix for clickable link in post details, fix for author details * feat(Blog):refactoring after removing author modal * feat(Blog): fix unified date format * feat(Blog): Fix for click-outside-to-close search, recommended posts are limited to 3 * feat(Blog): selectedAuthorData fixed * feat(Blog): Added description for /blog/[slug] metadata, Added Schema.org JSON‑LD for Article (BlogPosting) and BreadcrumbList , Added <time datetime> tags where blog dates renders * feat(Blog): fix hover social links, fixed duplication not found search * feat(Blog): Added: breadcrumbs to the post details page and updated the BreadcrumbList, logo to the cocial links in User info, Fixed: main container alignment, category navigation in breadcrumbs * feat(Blog): Added: breadcrumbs to the post details page and updated the BreadcrumbList, logo to the cocial links in User info, Fixed: main container alignment, category navigation in breadcrumbs * feat(Blog): Added scroll on the main blog page on filtering by author, fied breadcrumbs category translaion, added category to the recommended cards, fixed search for localisations * feat(Blog): Changed image size on the post details page * chore(release): update changelog for v0.5.0 * chore(release): v0.5.0 --------- Co-authored-by: liudmylasovetovs <milkaegik@gmail.com> Co-authored-by: Tetiana Zorii <131365289+TiZorii@users.noreply.github.com> Co-authored-by: Anna <komrakova.anna@gmail.com> Co-authored-by: AlinaRyabova <alinavr7@gmail.com> Co-authored-by: Yevhenii Datsenko <yevheniydatsenko@gmail.com> Co-authored-by: YNazymko12 <yulychka12@gmail.com> Co-authored-by: liudmylasovetovs <127711697+liudmylasovetovs@users.noreply.github.com> Co-authored-by: AlinaRyabova <115992255+AlinaRyabova@users.noreply.github.com> Co-authored-by: Lesia Soloviova <106915140+LesiaUKR@users.noreply.github.com> Co-authored-by: Yuliia Nazymko <122815071+YNazymko12@users.noreply.github.com>
1 parent ecb7478 commit a1562c4

167 files changed

Lines changed: 15347 additions & 3077 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ yarn-error.log*
3030

3131
# Coverage directory
3232
/coverage
33+
/coverage-quiz
3334

3435
# Dotenv files
3536
*.local
@@ -64,7 +65,7 @@ next-env.d.ts
6465
# Documentation (development only)
6566
.claude/
6667
CLAUDE.md
67-
frontend/docs/
68+
frontend/_dev-notes/
6869
frontend/.env.bak
6970

7071

CHANGELOG.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,53 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
159159
- Stabilized shop checkout, refund, inventory, and webhook flows
160160
- Improved Neon performance and reduced CU-hours usage
161161
- Cleaned up redundant files, comments, and legacy code
162+
163+
## [0.5.0] - 2026-01-26
164+
165+
### Added
166+
167+
- AI-powered Word Helper for Q&A:
168+
- Text selection with floating “Explain” button
169+
- Multilingual explanations (uk / en / pl)
170+
- Draggable modal with caching and rate limiting
171+
- Extensive automated testing:
172+
- 90%+ coverage for Quiz core logic (unit + integration)
173+
- Full Q&A component, hook, and API test coverage
174+
- SEO & content enhancements for Blog:
175+
- Breadcrumb navigation (posts & categories)
176+
- Schema.org JSON-LD (Article, BreadcrumbList)
177+
- Improved metadata (descriptions, dates, authors)
178+
- Improved navigation & UX:
179+
- Refactored responsive header with clear active states
180+
- GitHub stars indicator in header
181+
- Enhanced mobile menu with scroll locking
182+
- Visual & UX polish across platform:
183+
- Unified category accent colors across Quiz & Q&A
184+
- Refined Leaderboard layout and mobile responsiveness
185+
- Updated About page interactions and game mechanics
186+
- Infrastructure & environment support:
187+
- GROQ API integration for AI features
188+
- New environment variable support and documentation
189+
190+
### Changed
191+
192+
- Quiz UI unified with Q&A design system:
193+
- Shared CategoryTabButton component
194+
- Category-based accent colors across full quiz flow
195+
- Traffic-light countdown timer (green / yellow / red)
196+
- Blog experience refined:
197+
- Improved search relevance and filtering UX
198+
- Better author navigation and category presentation
199+
- Header, footer, and navigation styles aligned to brand tokens
200+
- Shop UI polish:
201+
- Button styles and hero messaging updated
202+
- Stripe checkout success redirect fixed
203+
- Removed deprecated Contacts page and all references
204+
205+
### Fixed
206+
207+
- Stabilized Leaderboard layout, spacing, and mobile behavior
208+
- Fixed quiz timer persistence and anti-cheat messaging UX
209+
- Improved accessibility and visual consistency across components
210+
- Resolved locale duplication in Stripe checkout redirects
211+
- Cleaned up redundant UI states, placeholders, and legacy styles

frontend/.env.example

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# --- Core / Environment
2+
APP_ADDITIONAL_ORIGINS=https://admin.example.test
23
APP_ENV=
4+
APP_ORIGIN=https://example.test
35
APP_URL=
46
NEXT_PUBLIC_SITE_URL=
57

@@ -83,10 +85,17 @@ STRIPE_WEBHOOK_RL_WINDOW_SECONDS=60
8385
STRIPE_WEBHOOK_INVALID_SIG_RL_MAX=30
8486
STRIPE_WEBHOOK_INVALID_SIG_RL_WINDOW_SECONDS=60
8587

88+
# SECURITY: If true, trust Cloudflare's cf-connecting-ip header for rate limiting.
89+
# Enable ONLY when traffic is fronted by Cloudflare (header is set by Cloudflare at the edge).
90+
# Default: false (0). Keep 0 in untrusted environments to avoid IP spoofing.
91+
TRUST_CF_CONNECTING_IP=0
92+
8693
# SECURITY: If true, trust x-real-ip / x-forwarded-for headers for rate limiting.
8794
# Enable ONLY behind Cloudflare or a trusted reverse proxy that overwrites these headers.
8895
# Default: false (empty/0/false).
8996
TRUST_FORWARDED_HEADERS=0
9097

9198
# emergency switch
9299
RATE_LIMIT_DISABLED=0
100+
101+
GROQ_API_KEY=

frontend/.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
# testing
1414
/coverage
15+
/coverage-quiz
1516

1617
# next.js
1718
/.next/
@@ -45,5 +46,5 @@ next-env.d.ts
4546

4647
# Documentation (only for development)
4748
CLAUDE.md
48-
docs/
49-
.claude
49+
_dev-notes/
50+
.claude

0 commit comments

Comments
 (0)