@@ -14556,175 +14556,6 @@ tsconfig.json
145561455619: }
1455714557````
1455814558
14559- ## File: README.md
14560- ````markdown
14561- 1: [](https://github.com/w3bdesign/dfweb-v4/actions/workflows/cypress.yml)
14562- 2: [](https://github.com/w3bdesign/dfweb-v4/actions/workflows/lighthouse.yml)
14563- 3: [](https://app.codacy.com/gh/w3bdesign/dfweb-v4/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
14564- 4: [](https://codecov.io/gh/w3bdesign/dfweb-v4)
14565- 5: [](https://github.com/w3bdesign/dfweb-v4/actions/workflows/pa11y.yml)
14566- 6: [](https://codeclimate.com/github/w3bdesign/dfweb-v4/maintainability)
14567- 7:
14568- 8: # Dfweb.no Portfolio Version 4
14569- 9:
14570- 10: Fourth version of my personal portfolio website with Next.js, Motion, Sanity.io and Typescript.
14571- 11:
14572- 12: ## Table of Contents
14573- 13:
14574- 14: - [Live URL](#live-url)
14575- 15: - [Frontend](#frontend)
14576- 16: - [Backend](#backend)
14577- 17: - [Google Lighthouse](#google-lighthouse)
14578- 18: - [Features](#features)
14579- 19: - [General](#general)
14580- 20: - [Design](#design)
14581- 21: - [Accessibility](#accessibility)
14582- 22: - [Devops and Code quality](#devops-and-code-quality)
14583- 23: - [Environment Variables](#environment-variables)
14584- 24: - [Testing Standards](#testing-standards)
14585- 25:
14586- 26: ## Live URL
14587- 27:
14588- 28: <https://www.dfweb.no>
14589- 29:
14590- 30: ## Frontend (Next.js)
14591- 31:
14592- 32: <img src="/public/images/frontend.png" alt="Frontend Image" />
14593- 33:
14594- 34: ---
14595- 35:
14596- 36: ## Backend (Sanity headless CMS)
14597- 37:
14598- 38: <img src="https://github.com/user-attachments/assets/67099a89-0cda-458a-9fcd-ab09b016ace4" alt="Backend Image" />
14599- 39:
14600- 40: ---
14601- 41:
14602- 42: ## Google Lighthouse
14603- 43:
14604- 44: 
14605- 45:
14606- 46: ## Features
14607- 47:
14608- 48: ### General
14609- 49:
14610- 50: - Clean, modern, responsive and Matrix-inspired design
14611- 51: - The application is 100% typescript (the types are generated from Sanity typegen)
14612- 52: - Matrix canvas rain effect on front page
14613- 53: - Custom 404 page with Matrix rain effect
14614- 54: - Next.js 15 with Typescript and App router
14615- 55: - Server Components implementation for improved performance
14616- 56: - Streaming with Suspense boundaries
14617- 57: - Automatic static optimization with revalidation
14618- 58: - Server-side data fetching with proper error handling
14619- 59: - React 19
14620- 60: - Sanity headless CMS for all of the content, projects and navigation links
14621- 61: - Ladle for component documentation
14622- 62: - Animations with Motion
14623- 63: - React testing library for unit testing
14624- 64: - Cypress for E2E testing
14625- 65: - Playwright for cross-browser E2E testing
14626- 66: - Contact form with Email.js
14627- 67: - Polymorphic components
14628- 68: - Automatic sitemap generation (see /api/siteMapGenerator.ts)
14629- 69: - Google rich results for each individual page
14630- 70: - 100% / 100% / 100% / 100% score in Google Lighthouse
14631- 71: - Automated Lighthouse CI testing integrated with GitHub Actions
14632- 72: - React Hook Form with Typescript and Zod for efficient form handling and validation
14633- 73: - Reusable GenericForm component for easy form creation and management
14634- 74: - Error handling with react-error-boundary for improved user experience and easier debugging
14635- 75: - AI-friendly repository documentation with automated updates (Repomix with Github action workflow)
14636- 76:
14637- 77: ### Design
14638- 78:
14639- 79: - Fully responsive design tested on all devices
14640- 80: - React Icons for project icons
14641- 81: - Tailwind CSS for styling
14642- 82: - Animated reusable input fields
14643- 83: - Matrix-inspired animated cursor with dynamic trailing effect with fading Matrix characters
14644- 84:
14645- 85: ### Accessibility
14646- 86:
14647- 87: - WCAG accessibility tested
14648- 88: - Accessibility testing with Cypress Axe and Pa11y
14649- 89: - Automated Pa11y accessibility testing on every PR and push to main
14650- 90: - Tests all main pages against WCAG2AA standards
14651- 91: - Captures screenshots for visual reference
14652- 92: - Detailed reports available as GitHub Actions artifacts
14653- 93: - Builds will fail if any a11y errors are found
14654- 94:
14655- 95: ### Devops and Code quality
14656- 96:
14657- 97: - Continuous Integration with CircleCI
14658- 98: - CircleCI will warn before deploy if tests fail (setup for React testing library)
14659- 99: - Github action workflow for Cypress
14660- 100: - Code quality analysis with Codacy, Sonarcloud and Codeclimate
14661- 101: - E2E testing with Cypress and Playwright integrated with Github actions
14662- 102: - Unit testing with Jest and React Testing Library integrated with CircleCI
14663- 103: - Test coverage setup with Codecov
14664- 104: - 100% test coverage with Jest and React testing library
14665- 105: - AI-powered commit message generation following Conventional Commits with gitmojis
14666- 106: - Automated performance monitoring with Lighthouse CI
14667- 107: - Performance, accessibility, best practices, and SEO checks on every PR
14668- 108: - Configurable thresholds for quality metrics
14669- 109: - Both desktop and performance-focused testing
14670- 110: - Automated repository documentation with Repomix
14671- 111: - AI-friendly documentation generation on every push to main
14672- 112: - Comprehensive repository context maintained in `DOCS/repository_context.txt`
14673- 113: - Automated PR analysis with repository structure insights
14674- 114: - Security-focused documentation with sensitive information filtering
14675- 115: - Markdown formatting for improved readability
14676- 116:
14677- 117: ### Environment Variables
14678- 118:
14679- 119: - Type-safe environment variable validation with envalid
14680- 120:
14681- 121: - Runtime validation of required environment variables
14682- 122: - Clear error messages with examples for missing variables
14683- 123: - Separate handling of client-side and server-side variables
14684- 124: - Default values where appropriate
14685- 125: - Required variables:
14686- 126:
14687- 127: ```env
14688- 128: # Email Configuration (client-side)
14689- 129: NEXT_PUBLIC_EMAIL_API_KEY=user_xxx # EmailJS API key
14690- 130: NEXT_PUBLIC_EMAIL_TEMPLATE_KEY=template_xxx # EmailJS template key
14691- 131: NEXT_PUBLIC_EMAIL_SERVICE_KEY=service_xxx # EmailJS service key
14692- 132:
14693- 133: # AI Configuration (server-side)
14694- 134: AI_API_KEY=xxx # AI service API key
14695- 135: AI_BASE_URL=https://xxx # AI service base URL
14696- 136: MODEL_NAME=claude-3.7-sonnet@anthropic # Optional, has default value
14697- 137: ```
14698- 138:
14699- 139: - Validation prevents application startup if required variables are missing
14700- 140: - TypeScript integration for type-safe access to environment variables
14701- 141:
14702- 142: ### Testing Standards
14703- 143:
14704- 144: - ISTQB-aligned comprehensive test strategy
14705- 145: - Detailed test strategy documentation in `DOCS/TEST_STRATEGY.md`
14706- 146: - Multi-level test approach (Unit, Component, E2E)
14707- 147: - Risk-based testing methodology
14708- 148: - Defined test metrics and reporting
14709- 149: - Clear roles and responsibilities
14710- 150: - Structured defect management process
14711- 151:
14712- 152: - Enforced AAA (Arrange-Act-Assert) pattern in all test files
14713- 153: - Each test must include the following comments:
14714- 154: ```typescript
14715- 155: // Arrange - Set up test data and conditions
14716- 156: // Act - Perform the action being tested
14717- 157: // Assert - Verify the results
14718- 158: ```
14719- 159: - This pattern ensures:
14720- 160: - Clear test structure and readability
14721- 161: - Consistent test organization across the codebase
14722- 162: - Easy identification of test setup, execution, and verification
14723- 163: - Simplified test maintenance and debugging
14724- 164: - Automated validation through custom ESLint rules
14725- 165: - Tests will fail if AAA pattern is not followed
14726- ````
14727-
1472814559## File: src/components/Layout/MobileMenu.component.tsx
1472914560````typescript
1473014561 1: "use client";
@@ -14911,6 +14742,176 @@ tsconfig.json
149111474216: }
1491214743````
1491314744
14745+ ## File: README.md
14746+ ````markdown
14747+ 1: [](https://github.com/w3bdesign/dfweb-v4/actions/workflows/cypress.yml)
14748+ 2: [](https://github.com/w3bdesign/dfweb-v4/actions/workflows/lighthouse.yml)
14749+ 3: [](https://app.codacy.com/gh/w3bdesign/dfweb-v4/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
14750+ 4: [](https://codecov.io/gh/w3bdesign/dfweb-v4)
14751+ 5: [](https://github.com/w3bdesign/dfweb-v4/actions/workflows/pa11y.yml)
14752+ 6: [](https://codeclimate.com/github/w3bdesign/dfweb-v4/maintainability)
14753+ 7:
14754+ 8: # Dfweb.no Portfolio Version 4
14755+ 9:
14756+ 10: Fourth version of my personal portfolio website with Next.js, Motion, Sanity.io and Typescript.
14757+ 11:
14758+ 12: ## Table of Contents
14759+ 13:
14760+ 14: - [Live URL](#live-url)
14761+ 15: - [Frontend](#frontend)
14762+ 16: - [Backend](#backend)
14763+ 17: - [Google Lighthouse](#google-lighthouse)
14764+ 18: - [Features](#features)
14765+ 19: - [General](#general)
14766+ 20: - [Design](#design)
14767+ 21: - [Accessibility](#accessibility)
14768+ 22: - [Devops and Code quality](#devops-and-code-quality)
14769+ 23: - [Environment Variables](#environment-variables)
14770+ 24: - [Testing Standards](#testing-standards)
14771+ 25:
14772+ 26: ## Live URL
14773+ 27:
14774+ 28: <https://www.dfweb.no>
14775+ 29:
14776+ 30: ## Frontend (Next.js)
14777+ 31:
14778+ 32: <img src="/public/images/frontend.png" alt="Frontend Image" />
14779+ 33:
14780+ 34: ---
14781+ 35:
14782+ 36: ## Backend (Sanity headless CMS)
14783+ 37:
14784+ 38: <img src="https://github.com/user-attachments/assets/67099a89-0cda-458a-9fcd-ab09b016ace4" alt="Backend Image" />
14785+ 39:
14786+ 40: ---
14787+ 41:
14788+ 42: ## Google Lighthouse
14789+ 43:
14790+ 44: 
14791+ 45:
14792+ 46: ## Features
14793+ 47:
14794+ 48: ### General
14795+ 49:
14796+ 50: - Clean, modern, responsive and Matrix-inspired design
14797+ 51: - The application is 100% typescript (the types are generated from Sanity typegen)
14798+ 52: - Matrix canvas rain effect on front page
14799+ 53: - Custom 404 page with Matrix rain effect
14800+ 54: - Next.js 15 with Typescript and App router
14801+ 55: - Server Components implementation for improved performance
14802+ 56: - Streaming with Suspense boundaries
14803+ 57: - Automatic static optimization with revalidation
14804+ 58: - Server-side data fetching with proper error handling
14805+ 59: - React 19
14806+ 60: - Sanity headless CMS for all of the content, projects and navigation links
14807+ 61: - Ladle for component documentation
14808+ 62: - Animations with Motion
14809+ 63: - React testing library for unit testing
14810+ 64: - Cypress for E2E testing
14811+ 65: - Playwright for cross-browser E2E testing
14812+ 66: - Contact form with Email.js
14813+ 67: - Polymorphic components
14814+ 68: - Automatic sitemap generation (see /api/siteMapGenerator.ts)
14815+ 69: - Google rich results for each individual page
14816+ 70: - 100% / 100% / 100% / 100% score in Google Lighthouse
14817+ 71: - Automated Lighthouse CI testing integrated with GitHub Actions
14818+ 72: - React Hook Form with Typescript and Zod for efficient form handling and validation
14819+ 73: - Reusable GenericForm component for easy form creation and management
14820+ 74: - Error handling with react-error-boundary for improved user experience and easier debugging
14821+ 75: - AI-friendly repository documentation with automated updates (Repomix with Github action workflow)
14822+ 76: - Sanity image URL generation with automatic resizing via `@sanity/image-url`.
14823+ 77:
14824+ 78: ### Design
14825+ 79:
14826+ 80: - Fully responsive design tested on all devices
14827+ 81: - React Icons for project icons
14828+ 82: - Tailwind CSS for styling
14829+ 83: - Animated reusable input fields
14830+ 84: - Matrix-inspired animated cursor with dynamic trailing effect with fading Matrix characters
14831+ 85:
14832+ 86: ### Accessibility
14833+ 87:
14834+ 88: - WCAG accessibility tested
14835+ 89: - Accessibility testing with Cypress Axe and Pa11y
14836+ 90: - Automated Pa11y accessibility testing on every PR and push to main
14837+ 91: - Tests all main pages against WCAG2AA standards
14838+ 92: - Captures screenshots for visual reference
14839+ 93: - Detailed reports available as GitHub Actions artifacts
14840+ 94: - Builds will fail if any a11y errors are found
14841+ 95:
14842+ 96: ### Devops and Code quality
14843+ 97:
14844+ 98: - Continuous Integration with CircleCI
14845+ 99: - CircleCI will warn before deploy if tests fail (setup for React testing library)
14846+ 100: - Github action workflow for Cypress
14847+ 101: - Code quality analysis with Codacy, Sonarcloud and Codeclimate
14848+ 102: - E2E testing with Cypress and Playwright integrated with Github actions
14849+ 103: - Unit testing with Jest and React Testing Library integrated with CircleCI
14850+ 104: - Test coverage setup with Codecov
14851+ 105: - 100% test coverage with Jest and React testing library
14852+ 106: - AI-powered commit message generation following Conventional Commits with gitmojis
14853+ 107: - Automated performance monitoring with Lighthouse CI
14854+ 108: - Performance, accessibility, best practices, and SEO checks on every PR
14855+ 109: - Configurable thresholds for quality metrics
14856+ 110: - Both desktop and performance-focused testing
14857+ 111: - Automated repository documentation with Repomix
14858+ 112: - AI-friendly documentation generation on every push to main
14859+ 113: - Comprehensive repository context maintained in `DOCS/repository_context.txt`
14860+ 114: - Automated PR analysis with repository structure insights
14861+ 115: - Security-focused documentation with sensitive information filtering
14862+ 116: - Markdown formatting for improved readability
14863+ 117:
14864+ 118: ### Environment Variables
14865+ 119:
14866+ 120: - Type-safe environment variable validation with envalid
14867+ 121:
14868+ 122: - Runtime validation of required environment variables
14869+ 123: - Clear error messages with examples for missing variables
14870+ 124: - Separate handling of client-side and server-side variables
14871+ 125: - Default values where appropriate
14872+ 126: - Required variables:
14873+ 127:
14874+ 128: ```env
14875+ 129: # Email Configuration (client-side)
14876+ 130: NEXT_PUBLIC_EMAIL_API_KEY=user_xxx # EmailJS API key
14877+ 131: NEXT_PUBLIC_EMAIL_TEMPLATE_KEY=template_xxx # EmailJS template key
14878+ 132: NEXT_PUBLIC_EMAIL_SERVICE_KEY=service_xxx # EmailJS service key
14879+ 133:
14880+ 134: # AI Configuration (server-side)
14881+ 135: AI_API_KEY=xxx # AI service API key
14882+ 136: AI_BASE_URL=https://xxx # AI service base URL
14883+ 137: MODEL_NAME=claude-3.7-sonnet@anthropic # Optional, has default value
14884+ 138: ```
14885+ 139:
14886+ 140: - Validation prevents application startup if required variables are missing
14887+ 141: - TypeScript integration for type-safe access to environment variables
14888+ 142:
14889+ 143: ### Testing Standards
14890+ 144:
14891+ 145: - ISTQB-aligned comprehensive test strategy
14892+ 146: - Detailed test strategy documentation in `DOCS/TEST_STRATEGY.md`
14893+ 147: - Multi-level test approach (Unit, Component, E2E)
14894+ 148: - Risk-based testing methodology
14895+ 149: - Defined test metrics and reporting
14896+ 150: - Clear roles and responsibilities
14897+ 151: - Structured defect management process
14898+ 152:
14899+ 153: - Enforced AAA (Arrange-Act-Assert) pattern in all test files
14900+ 154: - Each test must include the following comments:
14901+ 155: ```typescript
14902+ 156: // Arrange - Set up test data and conditions
14903+ 157: // Act - Perform the action being tested
14904+ 158: // Assert - Verify the results
14905+ 159: ```
14906+ 160: - This pattern ensures:
14907+ 161: - Clear test structure and readability
14908+ 162: - Consistent test organization across the codebase
14909+ 163: - Easy identification of test setup, execution, and verification
14910+ 164: - Simplified test maintenance and debugging
14911+ 165: - Automated validation through custom ESLint rules
14912+ 166: - Tests will fail if AAA pattern is not followed
14913+ ````
14914+
1491414915## File: src/components/Prosjekter/ProsjektCard.component.tsx
1491514916````typescript
1491614917 1: "use client";
0 commit comments