mirror of
https://github.com/mmahdium/portfolio.git
synced 2026-08-17 05:24:30 +03:30
implement ssg config for blog posts in project ,
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# Requirements Document
|
||||
|
||||
## Introduction
|
||||
|
||||
This document specifies the requirements for fixing i18n routing and hydration issues in the Nuxt 4 portfolio application. The issues include Vue Router warnings when switching languages, hydration mismatches in the Footer component, and accessibility warnings in the language switcher.
|
||||
|
||||
## Glossary
|
||||
|
||||
- **i18n System**: The internationalization system using @nuxtjs/i18n module for bilingual support (English and Persian)
|
||||
- **Hydration Mismatch**: A Vue.js error that occurs when server-rendered HTML doesn't match client-side rendered content
|
||||
- **Vue Router**: The official router for Vue.js applications, integrated with Nuxt
|
||||
- **Language Switcher**: The UI component that allows users to switch between English and Persian languages
|
||||
- **Route Prefix**: The language code prefix in URLs (e.g., /en/blog or /fa/blog)
|
||||
- **localePath**: A helper function from @nuxtjs/i18n that generates locale-aware paths
|
||||
- **ColorMode**: The dark/light theme system using @nuxtjs/color-mode module
|
||||
- **ARIA**: Accessible Rich Internet Applications attributes for accessibility
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement 1: Fix Vue Router Warnings for Blog Routes
|
||||
|
||||
**User Story:** As a visitor switching languages, I want the blog routes to work correctly, so that I don't encounter navigation errors.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a visitor switches from English to Persian, THE i18n System SHALL correctly resolve blog post routes with /fa/ prefix
|
||||
2. WHEN a visitor switches from Persian to English, THE i18n System SHALL correctly resolve blog post routes with /en/ prefix
|
||||
3. THE i18n System SHALL use localePath() helper for all blog navigation links to maintain locale context
|
||||
4. WHERE a blog post exists in the current language, THE i18n System SHALL navigate to the localized version
|
||||
5. WHERE a blog post does not exist in the target language, THE i18n System SHALL display a fallback message or redirect to the available version
|
||||
6. THE i18n System SHALL not generate Vue Router warnings in the browser console during language switching
|
||||
7. THE i18n System SHALL maintain the current page context when switching languages (e.g., stay on blog listing when switching from /blog to /fa/blog)
|
||||
|
||||
### Requirement 2: Fix Hydration Mismatch in Footer Component
|
||||
|
||||
**User Story:** As a visitor loading the page, I want the Footer to render without hydration errors, so that I have a smooth initial page load experience.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN the page initially loads, THE Footer Component SHALL render identical HTML on server and client
|
||||
2. THE Footer Component SHALL handle colorMode state without causing hydration mismatches
|
||||
3. WHERE colorMode is accessed during SSR, THE Footer Component SHALL use a consistent default value
|
||||
4. THE Footer Component SHALL update colorMode-dependent content only after hydration is complete
|
||||
5. THE Footer Component SHALL not generate hydration mismatch warnings in the browser console
|
||||
6. THE Footer Component SHALL display correctly in both light and dark modes after hydration
|
||||
|
||||
### Requirement 3: Fix ARIA Accessibility Warning in Language Switcher
|
||||
|
||||
**User Story:** As a visitor using assistive technology, I want the language switcher to be properly accessible, so that I can switch languages without accessibility issues.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Language Switcher SHALL not use aria-hidden on focusable or interactive elements
|
||||
2. WHERE aria-hidden is used, THE Language Switcher SHALL ensure the element is not focusable
|
||||
3. THE Language Switcher SHALL provide appropriate ARIA labels for screen readers
|
||||
4. THE Language Switcher SHALL use semantic HTML for language selection
|
||||
5. THE Language Switcher SHALL be keyboard navigable (Tab, Enter, Space keys)
|
||||
6. THE Language Switcher SHALL announce language changes to screen readers
|
||||
7. THE Language Switcher SHALL not generate ARIA-related warnings in the browser console
|
||||
|
||||
### Requirement 4: Improve i18n Route Configuration
|
||||
|
||||
**User Story:** As a developer, I want the i18n routing configuration to be correct, so that all routes work properly with language prefixes.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE i18n System SHALL configure route prefixes correctly in nuxt.config.ts
|
||||
2. THE i18n System SHALL use strategy: 'prefix' or 'prefix_except_default' for consistent URL structure
|
||||
3. THE i18n System SHALL define all routes with proper locale prefixes
|
||||
4. THE i18n System SHALL handle dynamic routes (like blog slugs) with locale awareness
|
||||
5. THE i18n System SHALL provide fallback routes when content is not available in a locale
|
||||
6. THE i18n System SHALL generate correct sitemap with all localized routes
|
||||
|
||||
### Requirement 5: Ensure Consistent Client-Server Rendering
|
||||
|
||||
**User Story:** As a visitor, I want the page to load without visual flashes or content shifts, so that I have a smooth browsing experience.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN the page loads, THE Application SHALL render identical content on server and client
|
||||
2. THE Application SHALL defer client-only content until after hydration using ClientOnly component
|
||||
3. WHERE dynamic content depends on browser APIs, THE Application SHALL use onMounted lifecycle hook
|
||||
4. THE Application SHALL not cause layout shifts during hydration
|
||||
5. THE Application SHALL handle localStorage and cookies consistently between server and client
|
||||
6. THE Application SHALL not generate Suspense-related warnings during hydration
|
||||
|
||||
### Requirement 6: Fix Language Switcher Implementation
|
||||
|
||||
**User Story:** As a visitor, I want to switch languages smoothly, so that I can view content in my preferred language.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a visitor clicks the language switcher, THE Application SHALL navigate to the equivalent page in the target language
|
||||
2. THE Language Switcher SHALL use switchLocalePath() helper from @nuxtjs/i18n
|
||||
3. THE Language Switcher SHALL maintain the current route context (e.g., /blog/post-slug becomes /fa/blog/post-slug)
|
||||
4. WHERE the current page doesn't exist in the target language, THE Language Switcher SHALL navigate to the home page of that locale
|
||||
5. THE Language Switcher SHALL update the HTML lang attribute
|
||||
6. THE Language Switcher SHALL update the document direction (ltr/rtl) for Persian
|
||||
7. THE Language Switcher SHALL provide visual feedback during language switching
|
||||
|
||||
### Requirement 7: Testing and Validation
|
||||
|
||||
**User Story:** As a developer, I want to verify that all i18n and routing issues are resolved, so that I can ensure a quality user experience.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Application SHALL pass manual testing for language switching on all pages
|
||||
2. THE Application SHALL not generate any hydration warnings in the browser console
|
||||
3. THE Application SHALL not generate any Vue Router warnings in the browser console
|
||||
4. THE Application SHALL not generate any ARIA accessibility warnings in the browser console
|
||||
5. THE Application SHALL maintain proper URL structure with locale prefixes
|
||||
6. THE Application SHALL handle browser back/forward navigation correctly with localized routes
|
||||
7. THE Application SHALL work correctly in both development and production builds
|
||||
Reference in New Issue
Block a user