mirror of
				https://github.com/theoludwig/theoludwig.git
				synced 2025-10-14 20:23:25 +02:00 
			
		
		
		
	chore: clean up
This commit is contained in:
		
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/BUG.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/BUG.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | |||||||
| --- |  | ||||||
| name: "🐛 Bug Report" |  | ||||||
| about: "Report an unexpected problem or unintended behavior." |  | ||||||
| title: "[Bug]" |  | ||||||
| labels: "bug" |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| <!-- |  | ||||||
| Please provide a clear and concise description of what the bug is. Include |  | ||||||
| screenshots if needed. Please make sure your issue has not already been fixed. |  | ||||||
| --> |  | ||||||
|  |  | ||||||
| ## Steps To Reproduce |  | ||||||
|  |  | ||||||
| 1. Step 1 |  | ||||||
| 2. Step 2 |  | ||||||
|  |  | ||||||
| ## The current behavior |  | ||||||
|  |  | ||||||
| ## The expected behavior |  | ||||||
							
								
								
									
										18
									
								
								.github/ISSUE_TEMPLATE/DOCUMENTATION.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/ISSUE_TEMPLATE/DOCUMENTATION.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +0,0 @@ | |||||||
| --- |  | ||||||
| name: "📜 Documentation" |  | ||||||
| about: "Correct spelling errors, improvements or additions to documentation files (README, CONTRIBUTING...)." |  | ||||||
| title: "[Documentation]" |  | ||||||
| labels: "documentation" |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| <!-- Please make sure your issue has not already been fixed. --> |  | ||||||
|  |  | ||||||
| ## Documentation |  | ||||||
|  |  | ||||||
| <!-- Please uncomment the type of documentation problem this issue address --> |  | ||||||
|  |  | ||||||
| <!-- Documentation is Missing --> |  | ||||||
| <!-- Documentation is Confusing --> |  | ||||||
| <!-- Documentation has Typo errors --> |  | ||||||
|  |  | ||||||
| ## Proposal |  | ||||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | |||||||
| --- |  | ||||||
| name: "✨ Feature Request" |  | ||||||
| about: "Suggest a new feature idea." |  | ||||||
| title: "[Feature]" |  | ||||||
| labels: "feature request" |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| <!-- Please make sure your issue has not already been fixed. --> |  | ||||||
|  |  | ||||||
| ## Description |  | ||||||
|  |  | ||||||
| <!-- A clear and concise description of the problem or missing capability... --> |  | ||||||
|  |  | ||||||
| ## Describe the solution you'd like |  | ||||||
|  |  | ||||||
| <!-- If you have a solution in mind, please describe it. --> |  | ||||||
|  |  | ||||||
| ## Describe alternatives you've considered |  | ||||||
|  |  | ||||||
| <!-- Have you considered any alternative solutions or workarounds? --> |  | ||||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/IMPROVEMENT.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/IMPROVEMENT.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | |||||||
| --- |  | ||||||
| name: "🔧 Improvement" |  | ||||||
| about: "Improve structure/format/performance/refactor/tests of the code." |  | ||||||
| title: "[Improvement]" |  | ||||||
| labels: "improvement" |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| <!-- Please make sure your issue has not already been fixed. --> |  | ||||||
|  |  | ||||||
| ## Type of Improvement |  | ||||||
|  |  | ||||||
| <!-- Please uncomment the type of improvements this issue address --> |  | ||||||
|  |  | ||||||
| <!-- Files and Folders Structure --> |  | ||||||
| <!-- Performance --> |  | ||||||
| <!-- Refactoring code --> |  | ||||||
| <!-- Tests --> |  | ||||||
| <!-- Not Sure? --> |  | ||||||
|  |  | ||||||
| ## Proposal |  | ||||||
							
								
								
									
										8
									
								
								.github/ISSUE_TEMPLATE/QUESTION.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/ISSUE_TEMPLATE/QUESTION.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +0,0 @@ | |||||||
| --- |  | ||||||
| name: "🙋 Question" |  | ||||||
| about: "Further information is requested." |  | ||||||
| title: "[Question]" |  | ||||||
| labels: "question" |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| ### Question |  | ||||||
							
								
								
									
										7
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,7 +0,0 @@ | |||||||
| <!-- Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time. --> |  | ||||||
|  |  | ||||||
| # What changes this PR introduce? |  | ||||||
|  |  | ||||||
| ## List any relevant issue numbers |  | ||||||
|  |  | ||||||
| ## Is there anything you'd like reviewers to focus on? |  | ||||||
							
								
								
									
										5
									
								
								.github/workflows/chromatic.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/chromatic.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,11 +11,14 @@ jobs: | |||||||
|     timeout-minutes: 30 |     timeout-minutes: 30 | ||||||
|     runs-on: "ubuntu-latest" |     runs-on: "ubuntu-latest" | ||||||
|     env: |     env: | ||||||
|  |       CI: "1" | ||||||
|  |       TZ: "Europe/Paris" | ||||||
|       DO_NOT_TRACK: "1" |       DO_NOT_TRACK: "1" | ||||||
|       TURBO_TELEMETRY_DISABLED: "1" |       TURBO_TELEMETRY_DISABLED: "1" | ||||||
|       NEXT_TELEMETRY_DISABLED: "1" |       NEXT_TELEMETRY_DISABLED: "1" | ||||||
|  |       STORYBOOK_DISABLE_TELEMETRY: "1" | ||||||
|     steps: |     steps: | ||||||
|       - uses: "actions/checkout@v4.2.2" |       - uses: "actions/checkout@v5.0.0" | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @@ -16,8 +16,9 @@ jobs: | |||||||
|       DO_NOT_TRACK: "1" |       DO_NOT_TRACK: "1" | ||||||
|       TURBO_TELEMETRY_DISABLED: "1" |       TURBO_TELEMETRY_DISABLED: "1" | ||||||
|       NEXT_TELEMETRY_DISABLED: "1" |       NEXT_TELEMETRY_DISABLED: "1" | ||||||
|  |       STORYBOOK_DISABLE_TELEMETRY: "1" | ||||||
|     steps: |     steps: | ||||||
|       - uses: "actions/checkout@v4.2.2" |       - uses: "actions/checkout@v5.0.0" | ||||||
|  |  | ||||||
|       - uses: "pnpm/action-setup@v4.1.0" |       - uses: "pnpm/action-setup@v4.1.0" | ||||||
|  |  | ||||||
| @@ -40,10 +41,3 @@ jobs: | |||||||
|       - run: "node --run lint:prettier" |       - run: "node --run lint:prettier" | ||||||
|       - run: "node --run test" |       - run: "node --run test" | ||||||
|       - run: "node --run build" |       - run: "node --run build" | ||||||
|  |  | ||||||
|   commitlint: |  | ||||||
|     runs-on: "ubuntu-latest" |  | ||||||
|     steps: |  | ||||||
|       - uses: "actions/checkout@v4.2.2" |  | ||||||
|  |  | ||||||
|       - uses: "wagoid/commitlint-github-action@v6.1.2" |  | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,10 @@ | |||||||
| # dependencies | # dependencies | ||||||
| node_modules | node_modules | ||||||
| .npm | .npm | ||||||
|  | .cache | ||||||
| package-lock.json | package-lock.json | ||||||
| .pnpm-store | .pnpm-store | ||||||
|  | .apt | ||||||
| .pnp | .pnp | ||||||
| .pnp.js | .pnp.js | ||||||
| .yarn/install-state.gz | .yarn/install-state.gz | ||||||
| @@ -15,12 +17,16 @@ coverage | |||||||
| out/ | out/ | ||||||
| dist/ | dist/ | ||||||
| build/ | build/ | ||||||
|  | .swc/ | ||||||
|  | .react-email/ | ||||||
|  |  | ||||||
| # misc | # misc | ||||||
| .DS_Store | .DS_Store | ||||||
| *.pem | *.pem | ||||||
|  | *.bak | ||||||
| .turbo | .turbo | ||||||
| bin/ | bin/ | ||||||
|  | dump_* | ||||||
|  |  | ||||||
| # debug | # debug | ||||||
| npm-debug.log* | npm-debug.log* | ||||||
| @@ -30,6 +36,7 @@ yarn-error.log* | |||||||
| # Storybook | # Storybook | ||||||
| *storybook.log | *storybook.log | ||||||
| storybook-static | storybook-static | ||||||
|  | /public | ||||||
|  |  | ||||||
| # IDEs and editors | # IDEs and editors | ||||||
| .idea | .idea | ||||||
| @@ -42,6 +49,7 @@ storybook-static | |||||||
|  |  | ||||||
| # local env files | # local env files | ||||||
| .env | .env | ||||||
|  | .env.dev | ||||||
| .env.production | .env.production | ||||||
| .env*.local | .env*.local | ||||||
|  |  | ||||||
| @@ -50,4 +58,5 @@ storybook-static | |||||||
|  |  | ||||||
| # typescript | # typescript | ||||||
| *.tsbuildinfo | *.tsbuildinfo | ||||||
| # next-env.d.ts | next-env.d.ts | ||||||
|  | packages/i18n/src/translations/*.d.json.ts | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							| @@ -5,7 +5,6 @@ | |||||||
|     "dbaeumer.vscode-eslint", |     "dbaeumer.vscode-eslint", | ||||||
|     "davidanson.vscode-markdownlint", |     "davidanson.vscode-markdownlint", | ||||||
|     "bradlc.vscode-tailwindcss", |     "bradlc.vscode-tailwindcss", | ||||||
|     "mikestead.dotenv", |  | ||||||
|     "antfu.pnpm-catalog-lens", |     "antfu.pnpm-catalog-lens", | ||||||
|     "Lokalise.i18n-ally" |     "Lokalise.i18n-ally" | ||||||
|   ] |   ] | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @@ -9,11 +9,19 @@ | |||||||
|     "source.fixAll": "explicit", |     "source.fixAll": "explicit", | ||||||
|     "source.organizeImports": "never" |     "source.organizeImports": "never" | ||||||
|   }, |   }, | ||||||
|   "tailwindCSS.experimental.configFile": "./configs/config-tailwind/styles.css", |   "eslint.workingDirectories": [ | ||||||
|   "tailwindCSS.experimental.classRegex": [ |     { | ||||||
|     ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], |       "mode": "auto" | ||||||
|     ["cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"] |     } | ||||||
|   ], |   ], | ||||||
|  |   "files.associations": { | ||||||
|  |     "*.css": "tailwindcss" | ||||||
|  |   }, | ||||||
|  |   "editor.quickSuggestions": { | ||||||
|  |     "strings": "on" | ||||||
|  |   }, | ||||||
|  |   "tailwindCSS.classFunctions": ["classNames", "cva"], | ||||||
|  |   "tailwindCSS.experimental.configFile": "./configs/config-tailwind/styles.css", | ||||||
|   "i18n-ally.localesPaths": ["./packages/i18n/src/translations/"], |   "i18n-ally.localesPaths": ["./packages/i18n/src/translations/"], | ||||||
|   "i18n-ally.keystyle": "nested", |   "i18n-ally.keystyle": "nested", | ||||||
|   "i18n-ally.sortKeys": false, |   "i18n-ally.sortKeys": false, | ||||||
|   | |||||||
| @@ -1,127 +0,0 @@ | |||||||
| # Contributor Covenant Code of Conduct |  | ||||||
|  |  | ||||||
| ## Our Pledge |  | ||||||
|  |  | ||||||
| We as members, contributors, and leaders pledge to make participation in our |  | ||||||
| community a harassment-free experience for everyone, regardless of age, body |  | ||||||
| size, visible or invisible disability, ethnicity, sex characteristics, gender |  | ||||||
| identity and expression, level of experience, education, socio-economic status, |  | ||||||
| nationality, personal appearance, race, religion, or sexual identity |  | ||||||
| and orientation. |  | ||||||
|  |  | ||||||
| We pledge to act and interact in ways that contribute to an open, welcoming, |  | ||||||
| diverse, inclusive, and healthy community. |  | ||||||
|  |  | ||||||
| ## Our Standards |  | ||||||
|  |  | ||||||
| Examples of behavior that contributes to a positive environment for our |  | ||||||
| community include: |  | ||||||
|  |  | ||||||
| - Demonstrating empathy and kindness toward other people |  | ||||||
| - Being respectful of differing opinions, viewpoints, and experiences |  | ||||||
| - Giving and gracefully accepting constructive feedback |  | ||||||
| - Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience |  | ||||||
| - Focusing on what is best not just for us as individuals, but for the overall community |  | ||||||
|  |  | ||||||
| Examples of unacceptable behavior include: |  | ||||||
|  |  | ||||||
| - The use of sexualized language or imagery, and sexual attention or advances of any kind |  | ||||||
| - Trolling, insulting or derogatory comments, and personal or political attacks |  | ||||||
| - Public or private harassment |  | ||||||
| - Publishing others' private information, such as a physical or email address, without their explicit permission |  | ||||||
| - Other conduct which could reasonably be considered inappropriate in a professional setting |  | ||||||
|  |  | ||||||
| ## Enforcement Responsibilities |  | ||||||
|  |  | ||||||
| Community leaders are responsible for clarifying and enforcing our standards of |  | ||||||
| acceptable behavior and will take appropriate and fair corrective action in |  | ||||||
| response to any behavior that they deem inappropriate, threatening, offensive, |  | ||||||
| or harmful. |  | ||||||
|  |  | ||||||
| Community leaders have the right and responsibility to remove, edit, or reject |  | ||||||
| comments, commits, code, wiki edits, issues, and other contributions that are |  | ||||||
| not aligned to this Code of Conduct, and will communicate reasons for moderation |  | ||||||
| decisions when appropriate. |  | ||||||
|  |  | ||||||
| ## Scope |  | ||||||
|  |  | ||||||
| This Code of Conduct applies within all community spaces, and also applies when |  | ||||||
| an individual is officially representing the community in public spaces. |  | ||||||
| Examples of representing our community include using an official e-mail address, |  | ||||||
| posting via an official social media account, or acting as an appointed |  | ||||||
| representative at an online or offline event. |  | ||||||
|  |  | ||||||
| ## Enforcement |  | ||||||
|  |  | ||||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be |  | ||||||
| reported to the community leaders responsible for enforcement at |  | ||||||
| <contact@theoludwig.fr>. |  | ||||||
| All complaints will be reviewed and investigated promptly and fairly. |  | ||||||
|  |  | ||||||
| All community leaders are obligated to respect the privacy and security of the |  | ||||||
| reporter of any incident. |  | ||||||
|  |  | ||||||
| ## Enforcement Guidelines |  | ||||||
|  |  | ||||||
| Community leaders will follow these Community Impact Guidelines in determining |  | ||||||
| the consequences for any action they deem in violation of this Code of Conduct: |  | ||||||
|  |  | ||||||
| ### 1. Correction |  | ||||||
|  |  | ||||||
| **Community Impact**: Use of inappropriate language or other behavior deemed |  | ||||||
| unprofessional or unwelcome in the community. |  | ||||||
|  |  | ||||||
| **Consequence**: A private, written warning from community leaders, providing |  | ||||||
| clarity around the nature of the violation and an explanation of why the |  | ||||||
| behavior was inappropriate. A public apology may be requested. |  | ||||||
|  |  | ||||||
| ### 2. Warning |  | ||||||
|  |  | ||||||
| **Community Impact**: A violation through a single incident or series |  | ||||||
| of actions. |  | ||||||
|  |  | ||||||
| **Consequence**: A warning with consequences for continued behavior. No |  | ||||||
| interaction with the people involved, including unsolicited interaction with |  | ||||||
| those enforcing the Code of Conduct, for a specified period of time. This |  | ||||||
| includes avoiding interactions in community spaces as well as external channels |  | ||||||
| like social media. Violating these terms may lead to a temporary or |  | ||||||
| permanent ban. |  | ||||||
|  |  | ||||||
| ### 3. Temporary Ban |  | ||||||
|  |  | ||||||
| **Community Impact**: A serious violation of community standards, including |  | ||||||
| sustained inappropriate behavior. |  | ||||||
|  |  | ||||||
| **Consequence**: A temporary ban from any sort of interaction or public |  | ||||||
| communication with the community for a specified period of time. No public or |  | ||||||
| private interaction with the people involved, including unsolicited interaction |  | ||||||
| with those enforcing the Code of Conduct, is allowed during this period. |  | ||||||
| Violating these terms may lead to a permanent ban. |  | ||||||
|  |  | ||||||
| ### 4. Permanent Ban |  | ||||||
|  |  | ||||||
| **Community Impact**: Demonstrating a pattern of violation of community |  | ||||||
| standards, including sustained inappropriate behavior, harassment of an |  | ||||||
| individual, or aggression toward or disparagement of classes of individuals. |  | ||||||
|  |  | ||||||
| **Consequence**: A permanent ban from any sort of public interaction within |  | ||||||
| the community. |  | ||||||
|  |  | ||||||
| ## Attribution |  | ||||||
|  |  | ||||||
| This Code of Conduct is adapted from the [Contributor Covenant][homepage], |  | ||||||
| version 2.0, available at |  | ||||||
| [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0]. |  | ||||||
|  |  | ||||||
| Community Impact Guidelines were inspired by |  | ||||||
| [Mozilla's code of conduct enforcement ladder][mozilla coc]. |  | ||||||
|  |  | ||||||
| For answers to common questions about this code of conduct, see the FAQ at |  | ||||||
| [https://www.contributor-covenant.org/faq][faq]. Translations are available |  | ||||||
| at [https://www.contributor-covenant.org/translations][translations]. |  | ||||||
|  |  | ||||||
| [homepage]: https://www.contributor-covenant.org |  | ||||||
| [v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html |  | ||||||
| [mozilla coc]: https://github.com/mozilla/diversity |  | ||||||
| [faq]: https://www.contributor-covenant.org/faq |  | ||||||
| [translations]: https://www.contributor-covenant.org/translations |  | ||||||
| @@ -1,10 +1,6 @@ | |||||||
| # 💡 Contributing | # Contributing | ||||||
|  |  | ||||||
| Thanks a lot for your interest in contributing to **theoludwig.fr**! 🎉 | Thanks a lot for your interest in contributing to **theoludwig.fr**! | ||||||
|  |  | ||||||
| ## Code of Conduct |  | ||||||
|  |  | ||||||
| **theoludwig.fr** adopted the [Contributor Covenant](https://www.contributor-covenant.org/) as its Code of Conduct, and we expect project participants to adhere to it. Please read [the full text](./CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated. |  | ||||||
|  |  | ||||||
| ## Types of contributions | ## Types of contributions | ||||||
|  |  | ||||||
| @@ -32,7 +28,7 @@ The commit message guidelines adheres to [Conventional Commits](https://www.conv | |||||||
| ### Prerequisites | ### Prerequisites | ||||||
|  |  | ||||||
| - [Node.js](https://nodejs.org/) >= v24.0.0 [(`nvm install 24`)](https://nvm.sh) | - [Node.js](https://nodejs.org/) >= v24.0.0 [(`nvm install 24`)](https://nvm.sh) | ||||||
| - [pnpm](https://pnpm.io/) v10.11.0 [(`npm install --global corepack@0.32.0 && corepack enable`)](https://github.com/nodejs/corepack) | - [pnpm](https://pnpm.io/) v10.15.0 [(`npm install --global corepack@0.34.0 && corepack enable`)](https://github.com/nodejs/corepack) | ||||||
| - [Docker](https://www.docker.com/) | - [Docker](https://www.docker.com/) | ||||||
|  |  | ||||||
| ### Installation | ### Installation | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -1,21 +0,0 @@ | |||||||
| # MIT License |  | ||||||
|  |  | ||||||
| Copyright (c) Théo LUDWIG <contact@theoludwig.fr> |  | ||||||
|  |  | ||||||
| Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
| of this software and associated documentation files (the "Software"), to deal |  | ||||||
| in the Software without restriction, including without limitation the rights |  | ||||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
| copies of the Software, and to permit persons to whom the Software is |  | ||||||
| furnished to do so, subject to the following conditions: |  | ||||||
|  |  | ||||||
| The above copyright notice and this permission notice shall be included in all |  | ||||||
| copies or substantial portions of the Software. |  | ||||||
|  |  | ||||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
| SOFTWARE. |  | ||||||
| @@ -17,7 +17,7 @@ | |||||||
|  |  | ||||||
| <hr /> | <hr /> | ||||||
|  |  | ||||||
| ## 📜 About | ## About | ||||||
|  |  | ||||||
| ```json | ```json | ||||||
| { | { | ||||||
| @@ -48,7 +48,7 @@ | |||||||
|  |  | ||||||
| <hr /> | <hr /> | ||||||
|  |  | ||||||
| ## 📈 Statistics | ## Statistics | ||||||
|  |  | ||||||
| <p align=center> | <p align=center> | ||||||
|     <img height=175 align="center" src="https://github-readme-stats.vercel.app/api?username=theoludwig&show_icons=true&theme=dark" alt="Théo LUDWIG's GitHub Stats" /> |     <img height=175 align="center" src="https://github-readme-stats.vercel.app/api?username=theoludwig&show_icons=true&theme=dark" alt="Théo LUDWIG's GitHub Stats" /> | ||||||
|   | |||||||
| @@ -5,7 +5,6 @@ import { LOCALE_DEFAULT, TIMEZONE } from "@repo/utils/constants" | |||||||
| import type { Preview } from "@storybook/nextjs" | import type { Preview } from "@storybook/nextjs" | ||||||
| import { NextIntlClientProvider } from "next-intl" | import { NextIntlClientProvider } from "next-intl" | ||||||
| import { ThemeProvider as NextThemeProvider } from "next-themes" | import { ThemeProvider as NextThemeProvider } from "next-themes" | ||||||
| import React from "react" |  | ||||||
|  |  | ||||||
| const preview: Preview = { | const preview: Preview = { | ||||||
|   initialGlobals: { |   initialGlobals: { | ||||||
| @@ -14,6 +13,9 @@ const preview: Preview = { | |||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
|   parameters: { |   parameters: { | ||||||
|  |     a11y: { | ||||||
|  |       test: "error", | ||||||
|  |     }, | ||||||
|     docs: { |     docs: { | ||||||
|       codePanel: true, |       codePanel: true, | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -1,35 +0,0 @@ | |||||||
| import type { TestRunnerConfig } from "@storybook/test-runner" |  | ||||||
| import { getStoryContext } from "@storybook/test-runner" |  | ||||||
|  |  | ||||||
| import { checkA11y, configureAxe, injectAxe } from "axe-playwright" |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * See https://storybook.js.org/docs/writing-tests/test-runner#test-hook-api |  | ||||||
|  */ |  | ||||||
| const config: TestRunnerConfig = { |  | ||||||
|   async preVisit(page) { |  | ||||||
|     await injectAxe(page) |  | ||||||
|   }, |  | ||||||
|   async postVisit(page, context) { |  | ||||||
|     const storyContext = await getStoryContext(page, context) |  | ||||||
|  |  | ||||||
|     const isA11yDisabled = storyContext.parameters?.a11y?.disable as boolean |  | ||||||
|     if (isA11yDisabled) { |  | ||||||
|       return |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     await configureAxe(page, { |  | ||||||
|       rules: storyContext.parameters?.a11y?.config?.rules, |  | ||||||
|     }) |  | ||||||
|  |  | ||||||
|     await checkA11y(page, "#storybook-root", { |  | ||||||
|       verbose: false, |  | ||||||
|       detailedReport: true, |  | ||||||
|       detailedReportOptions: { |  | ||||||
|         html: true, |  | ||||||
|       }, |  | ||||||
|     }) |  | ||||||
|   }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| export default config |  | ||||||
| @@ -38,7 +38,6 @@ | |||||||
|     "@types/node": "catalog:", |     "@types/node": "catalog:", | ||||||
|     "@types/react": "catalog:", |     "@types/react": "catalog:", | ||||||
|     "@types/react-dom": "catalog:", |     "@types/react-dom": "catalog:", | ||||||
|     "axe-playwright": "catalog:", |  | ||||||
|     "chromatic": "catalog:", |     "chromatic": "catalog:", | ||||||
|     "eslint": "catalog:", |     "eslint": "catalog:", | ||||||
|     "start-server-and-test": "catalog:", |     "start-server-and-test": "catalog:", | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| FROM node:24.1.0-slim AS node-pnpm | FROM node:24.7.0-slim AS node-pnpm | ||||||
| ENV PNPM_HOME="/pnpm" | ENV PNPM_HOME="/pnpm" | ||||||
| ENV PATH="$PNPM_HOME:$PATH" | ENV PATH="$PNPM_HOME:$PATH" | ||||||
| RUN npm install --global corepack@0.32.0 && corepack enable | RUN npm install --global corepack@0.34.0 && corepack enable | ||||||
| ENV TURBO_TELEMETRY_DISABLED=1 | ENV TURBO_TELEMETRY_DISABLED=1 | ||||||
| ENV NEXT_TELEMETRY_DISABLED=1 | ENV NEXT_TELEMETRY_DISABLED=1 | ||||||
| ENV DO_NOT_TRACK=1 | ENV DO_NOT_TRACK=1 | ||||||
| @@ -9,7 +9,7 @@ WORKDIR /usr/src/app | |||||||
|  |  | ||||||
| FROM node-pnpm AS builder | FROM node-pnpm AS builder | ||||||
| COPY ./ ./ | COPY ./ ./ | ||||||
| RUN pnpm install --global turbo@2.5.3 | RUN pnpm install --global turbo@2.5.6 | ||||||
| RUN turbo prune @repo/website --docker | RUN turbo prune @repo/website --docker | ||||||
|  |  | ||||||
| FROM node-pnpm AS installer | FROM node-pnpm AS installer | ||||||
| @@ -34,7 +34,7 @@ ENV IS_STANDALONE=true | |||||||
|  |  | ||||||
| RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 applicationrunner | RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 applicationrunner | ||||||
| USER applicationrunner | USER applicationrunner | ||||||
| COPY --from=installer /usr/src/app/apps/website/next.config.js ./ | COPY --from=installer /usr/src/app/apps/website/next.config.ts ./ | ||||||
| COPY --from=installer /usr/src/app/apps/website/package.json ./ | COPY --from=installer /usr/src/app/apps/website/package.json ./ | ||||||
| COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/.next/standalone ./ | COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/.next/standalone ./ | ||||||
| COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/.next/static ./apps/website/.next/static | COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/.next/static ./apps/website/.next/static | ||||||
|   | |||||||
| @@ -1,19 +1,23 @@ | |||||||
| import "@repo/config-tailwind/styles.css" | import "@repo/config-tailwind/styles.css" | ||||||
| import type { LocaleProps } from "@repo/i18n/routing" | import type { Locale } from "@repo/utils/constants" | ||||||
| import { Footer } from "@repo/ui/Layout/Footer" | import { Footer } from "@repo/ui/Layout/Footer" | ||||||
| import { Header } from "@repo/ui/Layout/Header" | import { Header } from "@repo/ui/Layout/Header" | ||||||
| import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme" | import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme" | ||||||
| import { VERSION } from "@repo/utils/constants" | import { VERSION } from "@repo/utils/constants" | ||||||
| import { setRequestLocale } from "next-intl/server" | import { setRequestLocale } from "next-intl/server" | ||||||
|  |  | ||||||
| interface MainLayoutProps extends React.PropsWithChildren, LocaleProps {} | interface MainLayoutProps extends React.PropsWithChildren { | ||||||
|  |   params: Promise<{ | ||||||
|  |     locale: string | ||||||
|  |   }> | ||||||
|  | } | ||||||
|  |  | ||||||
| const MainLayout: React.FC<MainLayoutProps> = async (props) => { | const MainLayout: React.FC<MainLayoutProps> = async (props) => { | ||||||
|   const { children, params } = props |   const { children, params } = props | ||||||
|  |  | ||||||
|   const { locale } = await params |   const { locale } = await params | ||||||
|   // Enable static rendering |   // Enable static rendering | ||||||
|   setRequestLocale(locale) |   setRequestLocale(locale as Locale) | ||||||
|  |  | ||||||
|   return ( |   return ( | ||||||
|     <ThemeProvider> |     <ThemeProvider> | ||||||
|   | |||||||
| @@ -1,11 +1,13 @@ | |||||||
| import "@repo/config-tailwind/styles.css" | import "@repo/config-tailwind/styles.css" | ||||||
| import type { LocaleProps } from "@repo/i18n/routing" | import type { Locale } from "@repo/utils/constants" | ||||||
| import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme" | import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme" | ||||||
| import { setRequestLocale } from "next-intl/server" | import { setRequestLocale } from "next-intl/server" | ||||||
|  |  | ||||||
| interface CurriculumVitaeLayoutProps | interface CurriculumVitaeLayoutProps extends React.PropsWithChildren { | ||||||
|   extends React.PropsWithChildren, |   params: Promise<{ | ||||||
|     LocaleProps {} |     locale: string | ||||||
|  |   }> | ||||||
|  | } | ||||||
|  |  | ||||||
| const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async ( | const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async ( | ||||||
|   props, |   props, | ||||||
| @@ -14,7 +16,7 @@ const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async ( | |||||||
|  |  | ||||||
|   const { locale } = await params |   const { locale } = await params | ||||||
|   // Enable static rendering |   // Enable static rendering | ||||||
|   setRequestLocale(locale) |   setRequestLocale(locale as Locale) | ||||||
|  |  | ||||||
|   return <ThemeProvider forcedTheme="light">{children}</ThemeProvider> |   return <ThemeProvider forcedTheme="light">{children}</ThemeProvider> | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,4 @@ | |||||||
| import "@repo/config-tailwind/styles.css" | import "@repo/config-tailwind/styles.css" | ||||||
| import type { LocaleProps } from "@repo/i18n/routing" |  | ||||||
| import type { Locale } from "@repo/utils/constants" | import type { Locale } from "@repo/utils/constants" | ||||||
| import { LOCALES } from "@repo/utils/constants" | import { LOCALES } from "@repo/utils/constants" | ||||||
| import type { Metadata, Viewport } from "next" | import type { Metadata, Viewport } from "next" | ||||||
| @@ -19,9 +18,13 @@ export const viewport: Viewport = { | |||||||
|  |  | ||||||
| export const generateMetadata = async ({ | export const generateMetadata = async ({ | ||||||
|   params, |   params, | ||||||
| }: LocaleProps): Promise<Metadata> => { | }: { | ||||||
|  |   params: Promise<{ | ||||||
|  |     locale: string | ||||||
|  |   }> | ||||||
|  | }): Promise<Metadata> => { | ||||||
|   const { locale } = await params |   const { locale } = await params | ||||||
|   const t = await getTranslations({ locale }) |   const t = await getTranslations({ locale: locale as Locale }) | ||||||
|   const title = t("meta.title") |   const title = t("meta.title") | ||||||
|   const description = `${title} - ${t("meta.description")}` |   const description = `${title} - ${t("meta.description")}` | ||||||
|   const image = "/images/logo.webp" |   const image = "/images/logo.webp" | ||||||
| @@ -64,14 +67,18 @@ export const generateStaticParams = (): Array<{ locale: Locale }> => { | |||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
| interface LocaleLayoutProps extends React.PropsWithChildren, LocaleProps {} | interface LocaleLayoutProps extends React.PropsWithChildren { | ||||||
|  |   params: Promise<{ | ||||||
|  |     locale: string | ||||||
|  |   }> | ||||||
|  | } | ||||||
|  |  | ||||||
| const LocaleLayout: React.FC<LocaleLayoutProps> = async (props) => { | const LocaleLayout: React.FC<LocaleLayoutProps> = async (props) => { | ||||||
|   const { children, params } = props |   const { children, params } = props | ||||||
|  |  | ||||||
|   const { locale } = await params |   const { locale } = await params | ||||||
|   // Enable static rendering |   // Enable static rendering | ||||||
|   setRequestLocale(locale) |   setRequestLocale(locale as Locale) | ||||||
|  |  | ||||||
|   const messages = await getMessages() |   const messages = await getMessages() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import typescriptESLint from "typescript-eslint" | import typescriptESLint from "typescript-eslint" | ||||||
| import configNextjs from "@repo/config-eslint/nextjs" | import config from "@repo/config-eslint" | ||||||
|  |  | ||||||
| export default typescriptESLint.config(...configNextjs, { | export default typescriptESLint.config(...config, { | ||||||
|   files: ["**/*.ts", "**/*.tsx"], |   files: ["**/*.ts", "**/*.tsx"], | ||||||
|   languageOptions: { |   languageOptions: { | ||||||
|     parser: typescriptESLint.parser, |     parser: typescriptESLint.parser, | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								apps/website/next-env.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								apps/website/next-env.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +0,0 @@ | |||||||
| /// <reference types="next" /> |  | ||||||
| /// <reference types="next/image-types/global" /> |  | ||||||
|  |  | ||||||
| // NOTE: This file should not be edited |  | ||||||
| // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| import createNextIntlPlugin from "next-intl/plugin" |  | ||||||
|  |  | ||||||
| const IS_STANDALONE = process.env.IS_STANDALONE === "true" |  | ||||||
|  |  | ||||||
| /** @type {import('next').NextConfig} */ |  | ||||||
| const nextConfig = { |  | ||||||
|   output: IS_STANDALONE ? "standalone" : undefined, |  | ||||||
|   images: { |  | ||||||
|     unoptimized: true, |  | ||||||
|   }, |  | ||||||
|   eslint: { |  | ||||||
|     ignoreDuringBuilds: true, |  | ||||||
|   }, |  | ||||||
|   typescript: { |  | ||||||
|     ignoreBuildErrors: true, |  | ||||||
|   }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const withNextIntl = createNextIntlPlugin() |  | ||||||
|  |  | ||||||
| export default withNextIntl(nextConfig) |  | ||||||
							
								
								
									
										37
									
								
								apps/website/next.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								apps/website/next.config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | import { LOCALE_DEFAULT } from "@repo/utils/constants" | ||||||
|  | import type { NextConfig } from "next" | ||||||
|  | import createNextIntlPlugin from "next-intl/plugin" | ||||||
|  | import path from "node:path" | ||||||
|  |  | ||||||
|  | const IS_STANDALONE = process.env.IS_STANDALONE === "true" | ||||||
|  |  | ||||||
|  | const nextConfig: NextConfig = { | ||||||
|  |   output: IS_STANDALONE ? "standalone" : undefined, | ||||||
|  |   typedRoutes: true, | ||||||
|  |   images: { | ||||||
|  |     unoptimized: true, | ||||||
|  |   }, | ||||||
|  |   eslint: { | ||||||
|  |     ignoreDuringBuilds: true, | ||||||
|  |   }, | ||||||
|  |   typescript: { | ||||||
|  |     ignoreBuildErrors: true, | ||||||
|  |   }, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const withNextIntl = createNextIntlPlugin({ | ||||||
|  |   experimental: { | ||||||
|  |     createMessagesDeclaration: path.join( | ||||||
|  |       process.cwd(), | ||||||
|  |       "..", | ||||||
|  |       "..", | ||||||
|  |       "packages", | ||||||
|  |       "i18n", | ||||||
|  |       "src", | ||||||
|  |       "translations", | ||||||
|  |       `${LOCALE_DEFAULT}.json`, | ||||||
|  |     ), | ||||||
|  |   }, | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | export default withNextIntl(nextConfig) | ||||||
| @@ -8,10 +8,11 @@ | |||||||
|   }, |   }, | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "dev": "next dev --port 3000 --turbopack", |     "dev": "next dev --port 3000 --turbopack", | ||||||
|     "build": "next build", |     "build": "next build --turbopack", | ||||||
|     "start": "next start --port 3000", |     "start": "next start --port 3000", | ||||||
|  |     "typegen": "next typegen", | ||||||
|     "lint:eslint": "eslint . --max-warnings 0", |     "lint:eslint": "eslint . --max-warnings 0", | ||||||
|     "lint:typescript": "tsc --noEmit" |     "lint:typescript": "next typegen && tsc --noEmit" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@repo/blog": "workspace:*", |     "@repo/blog": "workspace:*", | ||||||
|   | |||||||
| @@ -14,5 +14,5 @@ | |||||||
|     ] |     ] | ||||||
|   }, |   }, | ||||||
|   "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], |   "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], | ||||||
|   "exclude": ["node_modules", ".next"] |   "exclude": ["node_modules"] | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,25 +1,75 @@ | |||||||
| import typescriptESLint from "typescript-eslint" | import nextPlugin from "@next/eslint-plugin-next" | ||||||
| import configConventions from "eslint-config-conventions" | import configConventions from "eslint-config-conventions" | ||||||
| import importX from "eslint-plugin-import-x" | import importXPlugin from "eslint-plugin-import-x" | ||||||
|  | import reactPlugin from "eslint-plugin-react" | ||||||
|  | import reactHooksPlugin from "eslint-plugin-react-hooks" | ||||||
|  | import typescriptESLint from "typescript-eslint" | ||||||
|  |  | ||||||
| export default typescriptESLint.config( | export default typescriptESLint.config( | ||||||
|  |   ...configConventions, | ||||||
|  |   reactHooksPlugin.configs.recommended, | ||||||
|  |   reactPlugin.configs.flat.recommended, | ||||||
|   { |   { | ||||||
|     ignores: [ |     ignores: [ | ||||||
|       ".next", |       ".next", | ||||||
|       "**/next.config.js", |       "**/next.config.ts", | ||||||
|       "**/eslint.config.js", |       "**/eslint.config.js", | ||||||
|       "**/tailwind.config.js", |       "**/tailwind.config.js", | ||||||
|       "**/postcss.config.js", |       "**/postcss.config.js", | ||||||
|       "**/kysely.config.ts", |       "**/kysely.config.ts", | ||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
|   ...configConventions, |  | ||||||
|   { |   { | ||||||
|     name: "config-eslint", |     name: "config-eslint", | ||||||
|  |     settings: { | ||||||
|  |       react: { | ||||||
|  |         version: "19.1.1", | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|     plugins: { |     plugins: { | ||||||
|       "import-x": importX, |       "@next/next": nextPlugin, | ||||||
|  |       "import-x": importXPlugin, | ||||||
|     }, |     }, | ||||||
|     rules: { |     rules: { | ||||||
|  |       ...nextPlugin.configs.recommended.rules, | ||||||
|  |       ...nextPlugin.configs["core-web-vitals"].rules, | ||||||
|  |       "@next/next/no-html-link-for-pages": "off", | ||||||
|  |       "@next/next/no-img-element": "off", | ||||||
|  |  | ||||||
|  |       "react-hooks/react-compiler": "error", | ||||||
|  |  | ||||||
|  |       "react/jsx-no-target-blank": "off", | ||||||
|  |       "react/no-unknown-property": "off", | ||||||
|  |       "react/react-in-jsx-scope": "off", | ||||||
|  |       "react/prop-types": "off", | ||||||
|  |       "react/self-closing-comp": [ | ||||||
|  |         "error", | ||||||
|  |         { | ||||||
|  |           component: true, | ||||||
|  |           html: true, | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |       "react/void-dom-elements-no-children": "error", | ||||||
|  |       "react/jsx-boolean-value": "error", | ||||||
|  |       "react/iframe-missing-sandbox": "off", | ||||||
|  |  | ||||||
|  |       "no-restricted-imports": [ | ||||||
|  |         "error", | ||||||
|  |         { | ||||||
|  |           paths: [ | ||||||
|  |             { | ||||||
|  |               name: "next/navigation", | ||||||
|  |               importNames: [ | ||||||
|  |                 "redirect", | ||||||
|  |                 "permanentRedirect", | ||||||
|  |                 "useRouter", | ||||||
|  |                 "usePathname", | ||||||
|  |               ], | ||||||
|  |               message: "Please import from `@repo/i18n/routing` instead.", | ||||||
|  |             }, | ||||||
|  |           ], | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|       "import-x/extensions": [ |       "import-x/extensions": [ | ||||||
|         "error", |         "error", | ||||||
|         "ignorePackages", |         "ignorePackages", | ||||||
|   | |||||||
| @@ -1,54 +0,0 @@ | |||||||
| import { FlatCompat } from "@eslint/eslintrc" |  | ||||||
| import typescriptESLint from "typescript-eslint" |  | ||||||
| import config from "../eslint.config.js" |  | ||||||
|  |  | ||||||
| const flatCompat = new FlatCompat({ |  | ||||||
|   baseDirectory: import.meta.dirname, |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| export default typescriptESLint.config( |  | ||||||
|   ...config, |  | ||||||
|   ...flatCompat.extends("next/core-web-vitals"), |  | ||||||
|   { |  | ||||||
|     name: "config-eslint/nextjs", |  | ||||||
|     settings: { |  | ||||||
|       react: { |  | ||||||
|         version: "detect", |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     rules: { |  | ||||||
|       "@next/next/no-html-link-for-pages": "off", |  | ||||||
|       "@next/next/no-img-element": "off", |  | ||||||
|       "react/self-closing-comp": [ |  | ||||||
|         "error", |  | ||||||
|         { |  | ||||||
|           component: true, |  | ||||||
|           html: true, |  | ||||||
|         }, |  | ||||||
|       ], |  | ||||||
|       "react/void-dom-elements-no-children": "error", |  | ||||||
|       "react/jsx-boolean-value": "error", |  | ||||||
|       "no-restricted-imports": [ |  | ||||||
|         "error", |  | ||||||
|         { |  | ||||||
|           paths: [ |  | ||||||
|             { |  | ||||||
|               name: "next/link", |  | ||||||
|               message: "Please import from `@repo/i18n/routing` instead.", |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|               name: "next/navigation", |  | ||||||
|               importNames: [ |  | ||||||
|                 "redirect", |  | ||||||
|                 "permanentRedirect", |  | ||||||
|                 "useRouter", |  | ||||||
|                 "usePathname", |  | ||||||
|               ], |  | ||||||
|               message: "Please import from `@repo/i18n/routing` instead.", |  | ||||||
|             }, |  | ||||||
|           ], |  | ||||||
|         }, |  | ||||||
|       ], |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| ) |  | ||||||
| @@ -9,23 +9,18 @@ | |||||||
|       "import": "./eslint.config.js", |       "import": "./eslint.config.js", | ||||||
|       "require": "./eslint.config.js", |       "require": "./eslint.config.js", | ||||||
|       "default": "./eslint.config.js" |       "default": "./eslint.config.js" | ||||||
|     }, |  | ||||||
|     "./nextjs": { |  | ||||||
|       "types": "./index.d.ts", |  | ||||||
|       "import": "./nextjs/eslint.config.js", |  | ||||||
|       "require": "./nextjs/eslint.config.js", |  | ||||||
|       "default": "./nextjs/eslint.config.js" |  | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@eslint/eslintrc": "catalog:", |  | ||||||
|     "typescript-eslint": "catalog:", |     "typescript-eslint": "catalog:", | ||||||
|     "eslint": "catalog:", |     "eslint": "catalog:", | ||||||
|     "eslint-config-conventions": "catalog:", |     "eslint-config-conventions": "catalog:", | ||||||
|     "eslint-plugin-promise": "catalog:", |     "eslint-plugin-promise": "catalog:", | ||||||
|     "eslint-plugin-unicorn": "catalog:", |     "eslint-plugin-unicorn": "catalog:", | ||||||
|     "eslint-config-next": "catalog:", |  | ||||||
|     "eslint-plugin-import-x": "catalog:", |     "eslint-plugin-import-x": "catalog:", | ||||||
|  |     "@next/eslint-plugin-next": "catalog:", | ||||||
|  |     "eslint-plugin-react": "catalog:", | ||||||
|  |     "eslint-plugin-react-hooks": "catalog:", | ||||||
|     "typescript": "catalog:", |     "typescript": "catalog:", | ||||||
|     "globals": "catalog:" |     "globals": "catalog:" | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ | |||||||
|     "allowImportingTsExtensions": true, |     "allowImportingTsExtensions": true, | ||||||
|     "skipLibCheck": true, |     "skipLibCheck": true, | ||||||
|     "jsx": "preserve", |     "jsx": "preserve", | ||||||
|     "incremental": true, |     "incremental": false, | ||||||
|     "noEmit": true, |     "noEmit": true, | ||||||
|  |  | ||||||
|     "target": "ESNext", |     "target": "ESNext", | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
|   "version": "0.0.0-develop", |   "version": "0.0.0-develop", | ||||||
|   "private": true, |   "private": true, | ||||||
|   "type": "module", |   "type": "module", | ||||||
|   "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977", |   "packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b", | ||||||
|   "engines": { |   "engines": { | ||||||
|     "node": ">=24.0.0" |     "node": ">=24.0.0" | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import typescriptESLint from "typescript-eslint" | import typescriptESLint from "typescript-eslint" | ||||||
| import configNextjs from "@repo/config-eslint/nextjs" | import config from "@repo/config-eslint" | ||||||
|  |  | ||||||
| export default typescriptESLint.config(...configNextjs, { | export default typescriptESLint.config(...config, { | ||||||
|   files: ["**/*.ts", "**/*.tsx"], |   files: ["**/*.ts", "**/*.tsx"], | ||||||
|   languageOptions: { |   languageOptions: { | ||||||
|     parser: typescriptESLint.parser, |     parser: typescriptESLint.parser, | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import typescriptESLint from "typescript-eslint" | import typescriptESLint from "typescript-eslint" | ||||||
| import configNextjs from "@repo/config-eslint/nextjs" | import config from "@repo/config-eslint" | ||||||
|  |  | ||||||
| export default typescriptESLint.config(...configNextjs, { | export default typescriptESLint.config(...config, { | ||||||
|   files: ["**/*.ts", "**/*.tsx"], |   files: ["**/*.ts", "**/*.tsx"], | ||||||
|   languageOptions: { |   languageOptions: { | ||||||
|     parser: typescriptESLint.parser, |     parser: typescriptESLint.parser, | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import typescriptESLint from "typescript-eslint" | import typescriptESLint from "typescript-eslint" | ||||||
| import configNextjs from "@repo/config-eslint/nextjs" | import config from "@repo/config-eslint" | ||||||
|  |  | ||||||
| export default typescriptESLint.config(...configNextjs, { | export default typescriptESLint.config(...config, { | ||||||
|   files: ["**/*.ts", "**/*.tsx"], |   files: ["**/*.ts", "**/*.tsx"], | ||||||
|   languageOptions: { |   languageOptions: { | ||||||
|     parser: typescriptESLint.parser, |     parser: typescriptESLint.parser, | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ export const BirthDate: React.FC<BirthDateProps> = () => { | |||||||
|   }, []) |   }, []) | ||||||
|  |  | ||||||
|   return t("home.about.birth-date.value", { |   return t("home.about.birth-date.value", { | ||||||
|     age, |     age: age.toString(), | ||||||
|     birthDate: BIRTH_DATE_STRING, |     birthDate: BIRTH_DATE_STRING, | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										5037
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5037
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -3,29 +3,36 @@ packages: | |||||||
|   - "configs/*" |   - "configs/*" | ||||||
|   - "packages/*" |   - "packages/*" | ||||||
|  |  | ||||||
|  | catalogMode: "strict" | ||||||
|  |  | ||||||
| catalog: | catalog: | ||||||
|   # Turborepo |   # Turborepo | ||||||
|   "turbo": "2.5.3" |   "turbo": "2.5.6" | ||||||
|  |  | ||||||
|  |   # TypeScript | ||||||
|  |   "typescript": "5.9.2" | ||||||
|  |   "@total-typescript/ts-reset": "0.6.1" | ||||||
|  |   "@types/node": "24.3.0" | ||||||
|  |  | ||||||
|   # Utils |   # Utils | ||||||
|   "mime": "4.0.7" |   "mime": "4.0.7" | ||||||
|  |  | ||||||
|   # React.js/Next.js |   # React.js/Next.js | ||||||
|   "next": &next "15.3.2" |   "next": &next "15.5.2" | ||||||
|   "next-intl": "4.1.0" |   "next-intl": "4.3.5" | ||||||
|   "next-themes": "0.4.6" |   "next-themes": "0.4.6" | ||||||
|   "react": "19.1.0" |   "react": "19.1.1" | ||||||
|   "react-dom": "19.1.0" |   "react-dom": "19.1.1" | ||||||
|  |   "@types/react": "19.1.12" | ||||||
|  |   "@types/react-dom": "19.1.9" | ||||||
|   "react-icons": "5.5.0" |   "react-icons": "5.5.0" | ||||||
|   "@types/react": "19.1.6" |  | ||||||
|   "@types/react-dom": "19.1.5" |  | ||||||
|  |  | ||||||
|   # Blog |   # Blog | ||||||
|   "@giscus/react": "3.1.0" |   "@giscus/react": "3.1.0" | ||||||
|   "gray-matter": "4.0.3" |   "gray-matter": "4.0.3" | ||||||
|   "katex": "0.16.22" |   "katex": "0.16.22" | ||||||
|   "next-mdx-remote": "5.0.0" |   "next-mdx-remote": "5.0.0" | ||||||
|   "@mdx-js/mdx": "3.1.0" |   "@mdx-js/mdx": "3.1.1" | ||||||
|   "rehype-katex": "7.0.1" |   "rehype-katex": "7.0.1" | ||||||
|   "rehype-raw": "7.0.0" |   "rehype-raw": "7.0.0" | ||||||
|   "rehype-slug": "6.0.0" |   "rehype-slug": "6.0.0" | ||||||
| @@ -39,52 +46,47 @@ catalog: | |||||||
|   "markdownlint": "0.38.0" |   "markdownlint": "0.38.0" | ||||||
|   "markdownlint-rule-relative-links": "4.2.0" |   "markdownlint-rule-relative-links": "4.2.0" | ||||||
|  |  | ||||||
|   # TypeScript |  | ||||||
|   "typescript": "5.8.3" |  | ||||||
|   "@total-typescript/ts-reset": "0.6.1" |  | ||||||
|   "@types/node": "22.15.24" |  | ||||||
|  |  | ||||||
|   # ESLint |   # ESLint | ||||||
|   "globals": "16.2.0" |   "globals": "16.3.0" | ||||||
|   "typescript-eslint": "8.33.0" |   "typescript-eslint": "8.41.0" | ||||||
|   "@eslint/eslintrc": "3.3.1" |   "eslint": "9.34.0" | ||||||
|   "eslint": "9.27.0" |   "eslint-config-conventions": "20.1.3" | ||||||
|   "eslint-config-conventions": "19.2.0" |  | ||||||
|   "eslint-plugin-promise": "7.2.1" |   "eslint-plugin-promise": "7.2.1" | ||||||
|   "eslint-plugin-unicorn": "59.0.1" |   "eslint-plugin-unicorn": "60.0.0" | ||||||
|   "eslint-config-next": *next |   "eslint-plugin-import-x": "4.16.1" | ||||||
|   "eslint-plugin-import-x": "4.13.3" |   "@next/eslint-plugin-next": *next | ||||||
|  |   "eslint-plugin-react": "7.37.5" | ||||||
|  |   "eslint-plugin-react-hooks": "6.0.0-rc.1" | ||||||
|  |  | ||||||
|   # Prettier |   # Prettier | ||||||
|   "prettier": "3.5.3" |   "prettier": "3.6.2" | ||||||
|   "prettier-plugin-tailwindcss": "0.6.11" |   "prettier-plugin-tailwindcss": "0.6.14" | ||||||
|   "editorconfig-checker": "6.0.1" |   "editorconfig-checker": "6.1.0" | ||||||
|  |  | ||||||
|   # Storybook |   # Storybook | ||||||
|   "storybook": &storybook "9.0.0" |   "storybook": &storybook "9.1.3" | ||||||
|   "@storybook/addon-docs": *storybook |   "@storybook/addon-docs": *storybook | ||||||
|   "@storybook/addon-a11y": *storybook |   "@storybook/addon-a11y": *storybook | ||||||
|   "@storybook/nextjs": *storybook |   "@storybook/nextjs": *storybook | ||||||
|   "@storybook/addon-themes": *storybook |   "@storybook/addon-themes": *storybook | ||||||
|   "@storybook/test-runner": "0.22.0" |   "@storybook/test-runner": "0.23.0" | ||||||
|   "@chromatic-com/storybook": "4.0.0" |   "@chromatic-com/storybook": "4.1.1" | ||||||
|   "chromatic": "12.0.0" |   "chromatic": "13.1.4" | ||||||
|  |  | ||||||
|   # Testing |   # Testing | ||||||
|   "playwright": &playwright "1.52.0" |   "playwright": &playwright "1.55.0" | ||||||
|   "@playwright/test": *playwright |   "@playwright/test": *playwright | ||||||
|   "axe-playwright": "2.1.0" |   "start-server-and-test": "2.0.13" | ||||||
|   "start-server-and-test": "2.0.12" |  | ||||||
|  |  | ||||||
|   # CSS |   # CSS | ||||||
|   "postcss": "8.5.4" |   "postcss": "8.5.6" | ||||||
|   "@tailwindcss/postcss": "4.1.8" |   "@tailwindcss/postcss": "4.1.12" | ||||||
|   "@tailwindcss/typography": "0.5.16" |   "@tailwindcss/typography": "0.5.16" | ||||||
|   "tailwindcss": "4.1.8" |   "tailwindcss": "4.1.12" | ||||||
|   "tailwind-merge": "3.3.0" |   "tailwind-merge": "3.3.1" | ||||||
|   "clsx": "2.1.1" |   "clsx": "2.1.1" | ||||||
|   "cva": "1.0.0-beta.4" |   "cva": "1.0.0-beta.4" | ||||||
|   "@fontsource/montserrat": "5.2.5" |   "@fontsource/montserrat": "5.2.6" | ||||||
|  |  | ||||||
| onlyBuiltDependencies: | onlyBuiltDependencies: | ||||||
|   - "@swc/core" |   - "@swc/core" | ||||||
|   | |||||||
| @@ -27,7 +27,11 @@ | |||||||
|       "dependsOn": ["^lint:typescript-transit-node"] |       "dependsOn": ["^lint:typescript-transit-node"] | ||||||
|     }, |     }, | ||||||
|     "lint:typescript": { |     "lint:typescript": { | ||||||
|       "dependsOn": ["lint:typescript-transit-node"] |       "dependsOn": ["typegen", "lint:typescript-transit-node"] | ||||||
|  |     }, | ||||||
|  |     "typegen": { | ||||||
|  |       "dependsOn": ["^typegen"], | ||||||
|  |       "outputs": [] | ||||||
|     }, |     }, | ||||||
|     "dev": { |     "dev": { | ||||||
|       "cache": false, |       "cache": false, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user