mirror of
				https://github.com/theoludwig/theoludwig.git
				synced 2025-10-14 20:23:25 +02:00 
			
		
		
		
	feat: migrate progressively to full name instead of nickname
This commit is contained in:
		| @@ -1,5 +1,5 @@ | ||||
| { | ||||
|   "name": "Divlo", | ||||
|   "name": "theoludwig", | ||||
|   "dockerComposeFile": "./docker-compose.yml", | ||||
|   "service": "workspace", | ||||
|   "workspaceFolder": "/workspace", | ||||
|   | ||||
| @@ -1,2 +1,2 @@ | ||||
| COMPOSE_PROJECT_NAME=divlo | ||||
| COMPOSE_PROJECT_NAME=theoludwig | ||||
| PORT=3000 | ||||
|   | ||||
| @@ -60,7 +60,7 @@ representative at an online or offline event. | ||||
|  | ||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||
| reported to the community leaders responsible for enforcement at | ||||
| <contact@divlo.fr>. | ||||
| <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 | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| # 💡 Contributing | ||||
|  | ||||
| Thanks a lot for your interest in contributing to **divlo.fr**! 🎉 | ||||
| Thanks a lot for your interest in contributing to **theoludwig.fr**! 🎉 | ||||
|  | ||||
| ## Code of Conduct | ||||
|  | ||||
| **divlo.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. | ||||
| **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 | ||||
|  | ||||
| @@ -21,7 +21,7 @@ Thanks a lot for your interest in contributing to **divlo.fr**! 🎉 | ||||
|  | ||||
| - Make sure your **code passes the tests**. | ||||
|  | ||||
| If you're adding new features to **divlo.fr**, please include tests. | ||||
| If you're adding new features to **theoludwig.fr**, please include tests. | ||||
|  | ||||
| ## Commits | ||||
|  | ||||
| @@ -68,4 +68,4 @@ docker compose up --build | ||||
|  | ||||
| ### Services started | ||||
|  | ||||
| - website: `http://127.0.0.1:3000` | ||||
| - `website`: <http://127.0.0.1:3000> | ||||
|   | ||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| MIT License | ||||
|  | ||||
| Copyright (c) Divlo | ||||
| Copyright (c) Théo LUDWIG | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <h1 align="center"><a href="https://divlo.fr/">Théo LUDWIG (Divlo)</a></h1> | ||||
| <h1 align="center"><a href="https://theoludwig.fr/">Théo LUDWIG</a></h1> | ||||
|  | ||||
| <p align="center"> | ||||
|   <strong>Developer Full Stack • Open-Source enthusiast</strong> | ||||
| @@ -11,8 +11,8 @@ | ||||
|   <a href="https://twitter.com/Divlo_FR"><img alt="Twitter" src="https://img.shields.io/badge/-Twitter-1ca0f1?style=flat&labelColor=1ca0f1&logo=twitter&logoColor=white"/></a> | ||||
|   <a href="https://www.youtube.com/channel/UCfEKQzI3c8vmZOrsTOi5spA"><img alt="YouTube" src="https://img.shields.io/badge/-YouTube-c4302b?style=flat&labelColor=c4302b&logo=youtube&logoColor=white"/></a> | ||||
|   <a href="https://www.twitch.tv/divlo"><img alt="Twitch" src="https://img.shields.io/badge/-Twitch-9147FF?style=flat&labelColor=9147FF&logo=twitch&logoColor=white"/></a> | ||||
|   <a href="https://www.divlo.fr"><img alt="Website" src="https://img.shields.io/badge/-Website-181818?style=flat&labelColor=181818&logo=Google-Chrome&logoColor=white"/></a> | ||||
|   <a href="mailto:contact@divlo.fr"><img alt="Email" src="https://img.shields.io/badge/-contact@divlo.fr-2F7EBE?style=flat&labelColor=2F7EBE&logo=minutemailer&logoColor=white"/></a> | ||||
|   <a href="https://theoludwig.fr/"><img alt="Website" src="https://img.shields.io/badge/-Website-181818?style=flat&labelColor=181818&logo=Google-Chrome&logoColor=white"/></a> | ||||
|   <a href="mailto:contact@theoludwig.fr"><img alt="Email" src="https://img.shields.io/badge/-contact@theoludwig.fr-2F7EBE?style=flat&labelColor=2F7EBE&logo=minutemailer&logoColor=white"/></a> | ||||
| </p> | ||||
|  | ||||
| <hr /> | ||||
| @@ -21,7 +21,7 @@ | ||||
|  | ||||
| ```json | ||||
| { | ||||
|   "name": "Théo LUDWIG (Divlo)", | ||||
|   "name": "Théo LUDWIG", | ||||
|   "pronouns": "He/Him", | ||||
|   "birthDate": "31/03/2003", | ||||
|   "nationality": "Alsace, France", | ||||
|   | ||||
| @@ -21,7 +21,7 @@ export const Footer: React.FC<FooterProps> = (props) => { | ||||
|           href='/' | ||||
|           className='text-yellow hover:underline dark:text-yellow-dark' | ||||
|         > | ||||
|           Théo LUDWIG (Divlo) | ||||
|           Théo LUDWIG | ||||
|         </Link>{' '} | ||||
|         | {t('common:all-rights-reserved')} | ||||
|       </p> | ||||
|   | ||||
| @@ -9,10 +9,10 @@ interface HeadProps { | ||||
|  | ||||
| export const Head: React.FC<HeadProps> = (props) => { | ||||
|   const { | ||||
|     title = 'Théo LUDWIG (Divlo)', | ||||
|     image = 'https://divlo.fr/images/icon-96x96.png', | ||||
|     description = 'Théo LUDWIG (Divlo) - Developer Full Stack • Passionate about High-Tech', | ||||
|     url = 'https://divlo.fr/' | ||||
|     title = 'Théo LUDWIG', | ||||
|     image = 'https://theoludwig.fr/images/icon-96x96.png', | ||||
|     description = 'Théo LUDWIG - Developer Full Stack • Passionate about High-Tech', | ||||
|     url = 'https://theoludwig.fr/' | ||||
|   } = props | ||||
|  | ||||
|   return ( | ||||
|   | ||||
| @@ -20,11 +20,11 @@ export const Header: React.FC<HeaderProps> = (props) => { | ||||
|             width={60} | ||||
|             height={60} | ||||
|             src='/images/divlo_icon_small.png' | ||||
|             alt='Divlo' | ||||
|             alt='Théo LUDWIG' | ||||
|             priority | ||||
|           /> | ||||
|           <strong className='ml-1 hidden font-headline font-semibold text-yellow dark:text-yellow-dark xs:block'> | ||||
|             Théo LUDWIG (Divlo) | ||||
|             Théo LUDWIG | ||||
|           </strong> | ||||
|         </div> | ||||
|       </Link> | ||||
|   | ||||
| @@ -6,7 +6,7 @@ export const ProfileInformation: React.FC = () => { | ||||
|   return ( | ||||
|     <div className='mb-6 border-b-2 border-gray-600 pb-2 font-headline dark:border-gray-400'> | ||||
|       <h1 className='mb-2 text-4xl font-semibold text-yellow dark:text-yellow-dark'> | ||||
|         Théo LUDWIG (Divlo) | ||||
|         Théo LUDWIG | ||||
|       </h1> | ||||
|       <h2 className='mb-3 text-base'>{t('home:about.description')}</h2> | ||||
|     </div> | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import useTranslation from 'next-translate/useTranslation' | ||||
| import { useMemo } from 'react' | ||||
|  | ||||
| import { DIVLO_BIRTH_DATE, DIVLO_BIRTH_DATE_STRING, getAge } from 'utils/getAge' | ||||
| import { BIRTH_DATE, BIRTH_DATE_STRING, getAge } from 'utils/getAge' | ||||
|  | ||||
| import { ProfileItem } from './ProfileItem' | ||||
|  | ||||
| @@ -9,7 +9,7 @@ export const ProfileList: React.FC = () => { | ||||
|   const { t } = useTranslation('home') | ||||
|  | ||||
|   const age = useMemo(() => { | ||||
|     return getAge(DIVLO_BIRTH_DATE) | ||||
|     return getAge(BIRTH_DATE) | ||||
|   }, []) | ||||
|  | ||||
|   return ( | ||||
| @@ -20,15 +20,13 @@ export const ProfileList: React.FC = () => { | ||||
|       /> | ||||
|       <ProfileItem | ||||
|         title={t('home:about.birth-date')} | ||||
|         value={`${DIVLO_BIRTH_DATE_STRING} (${age} ${t( | ||||
|           'home:about.years-old' | ||||
|         )})`} | ||||
|         value={`${BIRTH_DATE_STRING} (${age} ${t('home:about.years-old')})`} | ||||
|       /> | ||||
|       <ProfileItem title={t('home:about.nationality')} value='Alsace, France' /> | ||||
|       <ProfileItem | ||||
|         title='Email' | ||||
|         value='contact@divlo.fr' | ||||
|         link='mailto:contact@divlo.fr' | ||||
|         value='contact@theoludwig.fr' | ||||
|         link='mailto:contact@theoludwig.fr' | ||||
|       /> | ||||
|     </ul> | ||||
|   ) | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| import Image from 'next/image' | ||||
|  | ||||
| import DivloLogo from 'public/images/divlo_logo.png' | ||||
| import Logo from 'public/images/divlo_logo.png' | ||||
|  | ||||
| export const ProfileLogo: React.FC = () => { | ||||
|   return ( | ||||
|     <div className='max-h-[370px] max-w-[370px] px-2 py-6'> | ||||
|       <Image quality={100} src={DivloLogo} alt='Divlo' priority /> | ||||
|       <Image quality={100} src={Logo} alt='Théo LUDWIG' priority /> | ||||
|     </div> | ||||
|   ) | ||||
| } | ||||
|   | ||||
| @@ -31,7 +31,7 @@ export const SocialMediaList: React.FC = () => { | ||||
|       <SocialMediaItem link='https://www.twitch.tv/divlo' ariaLabel='Twitch'> | ||||
|         <TwitchIcon /> | ||||
|       </SocialMediaItem> | ||||
|       <SocialMediaItem link='mailto:contact@divlo.fr' ariaLabel='Email'> | ||||
|       <SocialMediaItem link='mailto:contact@theoludwig.fr' ariaLabel='Email'> | ||||
|         <EmailIcon /> | ||||
|       </SocialMediaItem> | ||||
|     </ul> | ||||
|   | ||||
| @@ -88,16 +88,12 @@ export const skills = { | ||||
|   }, | ||||
|   'Visual Studio Code': { | ||||
|     link: 'https://code.visualstudio.com/', | ||||
|     image: '/images/skills/Visual_Studio_Code.png' | ||||
|     image: '/images/skills/VisualStudioCode.png' | ||||
|   }, | ||||
|   Git: { | ||||
|     link: 'https://git-scm.com/', | ||||
|     image: '/images/skills/Git.png' | ||||
|   }, | ||||
|   Hyper: { | ||||
|     link: 'https://hyper.is/', | ||||
|     image: '/images/skills/Hyper.svg' | ||||
|   }, | ||||
|   Ubuntu: { | ||||
|     link: 'https://ubuntu.com/', | ||||
|     image: '/images/skills/Ubuntu.png' | ||||
|   | ||||
| @@ -4,7 +4,7 @@ describe('<Footer />', () => { | ||||
|   it('should render with appropriate link tag version', () => { | ||||
|     const version = '1.0.0' | ||||
|     cy.mount(<Footer version={version} />) | ||||
|     cy.contains('Divlo') | ||||
|     cy.contains('Théo LUDWIG') | ||||
|       .get('[data-cy=version-link]') | ||||
|       .should('have.text', version) | ||||
|       .should( | ||||
|   | ||||
| @@ -38,7 +38,7 @@ describe('Common > Header', () => { | ||||
|  | ||||
|   describe('Switch Language', () => { | ||||
|     it('should switch language from EN (default) to FR', () => { | ||||
|       cy.get('h1').contains('Divlo') | ||||
|       cy.get('h1').contains('Théo LUDWIG') | ||||
|       cy.get('[data-cy=language-flag-text]').contains('EN') | ||||
|       cy.get('[data-cy=languages-list]').should('not.be.visible') | ||||
|       cy.get('[data-cy=language-click]').click() | ||||
| @@ -46,7 +46,7 @@ describe('Common > Header', () => { | ||||
|       cy.get('[data-cy=languages-list] > li:first-child').contains('FR').click() | ||||
|       cy.get('[data-cy=languages-list]').should('not.be.visible') | ||||
|       cy.get('[data-cy=language-flag-text]').contains('FR') | ||||
|       cy.get('h1').contains('Divlo') | ||||
|       cy.get('h1').contains('Théo LUDWIG') | ||||
|     }) | ||||
|  | ||||
|     it('should close the language list menu when clicking outside', () => { | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| services: | ||||
|   divlo: | ||||
|   theoludwig: | ||||
|     container_name: ${COMPOSE_PROJECT_NAME} | ||||
|     image: 'divlo' | ||||
|     image: 'theoludwig' | ||||
|     build: | ||||
|       context: './' | ||||
|     ports: | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import { DIVLO_BIRTH_DATE, getAge } from '../../utils/getAge.ts' | ||||
| import { BIRTH_DATE, getAge } from '../../utils/getAge.ts' | ||||
|  | ||||
| const yearOld = document.getElementById('year-old') | ||||
|  | ||||
| yearOld.textContent = getAge(DIVLO_BIRTH_DATE).toString() | ||||
| yearOld.textContent = getAge(BIRTH_DATE).toString() | ||||
|   | ||||
							
								
								
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,11 +1,11 @@ | ||||
| { | ||||
|   "name": "divlo", | ||||
|   "name": "theoludwig", | ||||
|   "version": "2.7.3", | ||||
|   "lockfileVersion": 3, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "divlo", | ||||
|       "name": "theoludwig", | ||||
|       "version": "2.7.3", | ||||
|       "hasInstallScript": true, | ||||
|       "dependencies": { | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| { | ||||
|   "name": "divlo", | ||||
|   "name": "theoludwig", | ||||
|   "version": "2.7.3", | ||||
|   "private": true, | ||||
|   "repository": { | ||||
|   | ||||
| @@ -13,7 +13,7 @@ const Error404: NextPage<Error404Props> = (props) => { | ||||
|  | ||||
|   return ( | ||||
|     <> | ||||
|       <Head title='404 | Théo LUDWIG (Divlo)' /> | ||||
|       <Head title='404 | Théo LUDWIG' /> | ||||
|       <ErrorPage | ||||
|         statusCode={404} | ||||
|         message={t('errors:not-found')} | ||||
|   | ||||
| @@ -13,7 +13,7 @@ const Error500: NextPage<Error500Props> = (props) => { | ||||
|  | ||||
|   return ( | ||||
|     <> | ||||
|       <Head title='500 | Théo LUDWIG (Divlo)' /> | ||||
|       <Head title='500 | Théo LUDWIG' /> | ||||
|       <ErrorPage | ||||
|         statusCode={500} | ||||
|         message={t('errors:server-error')} | ||||
|   | ||||
| @@ -25,7 +25,7 @@ const BlogPostPage: NextPage<BlogPostPageProps> = (props) => { | ||||
|   return ( | ||||
|     <> | ||||
|       <Head | ||||
|         title={`${post.frontmatter.title} | Théo LUDWIG (Divlo)`} | ||||
|         title={`${post.frontmatter.title} | Théo LUDWIG`} | ||||
|         description={post.frontmatter.description} | ||||
|       /> | ||||
|  | ||||
|   | ||||
| @@ -21,7 +21,7 @@ const BlogPage: NextPage<BlogPageProps> = (props) => { | ||||
|  | ||||
|   return ( | ||||
|     <> | ||||
|       <Head title='Blog | Divlo' description={blogDescription} /> | ||||
|       <Head title='Blog | Théo LUDWIG' description={blogDescription} /> | ||||
|  | ||||
|       <Header /> | ||||
|       <main className='flex flex-1 flex-col flex-wrap items-center'> | ||||
|   | ||||
| @@ -7,13 +7,13 @@ publishedOn: '2022-04-11T10:24:55.206Z' | ||||
|  | ||||
| Hello! 👋 | ||||
|  | ||||
| After months of hard work, [Thream v1.0.0](https://www.thream.divlo.fr/) has been released! 🎉 | ||||
| After months of hard work, [Thream v1.0.0](https://thream.divlo.fr/) has been released! 🎉 | ||||
|  | ||||
| [**Thream**](https://www.thream.divlo.fr/) is your open-source platform to stay close with your friends and communities, talk, chat, collaborate, share and have fun. | ||||
| [**Thream**](https://thream.divlo.fr/) is your open-source platform to stay close with your friends and communities, talk, chat, collaborate, share and have fun. | ||||
|  | ||||
| ## Presentation | ||||
|  | ||||
| [**Thream**](https://www.thream.divlo.fr/) is a social network to stay close with your friends and communities to talk, chat, collaborate and share. | ||||
| [**Thream**](https://thream.divlo.fr/) is a social network to stay close with your friends and communities to talk, chat, collaborate and share. | ||||
|  | ||||
| The project is largely inspired by [Discord](https://discord.com), a proprietary instant messaging service, but differentiates itself by its **non-profit open source philosophy** and will integrate special features. | ||||
|  | ||||
| @@ -23,11 +23,11 @@ The idea is that a user can create an account to authenticate with an email addr | ||||
|  | ||||
|  | ||||
|  | ||||
| [**Thream**](https://www.thream.divlo.fr/) is a website that works on any recent browser, accessible on [thream.divlo.fr](https://www.thream.divlo.fr/). | ||||
| [**Thream**](https://thream.divlo.fr/) is a website that works on any recent browser, accessible on [thream.divlo.fr](https://thream.divlo.fr/). | ||||
|  | ||||
| ## History | ||||
|  | ||||
| The idea for the project has existed since May 13, 2020, symbolized by a [publication on Twitter](https://twitter.com/Divlo_FR/status/1260638175246135296) by the creator: Divlo. | ||||
| The idea for the project has existed since May 13, 2020, symbolized by a [publication on Twitter](https://twitter.com/Divlo_FR/status/1260638175246135296) by the creator: Théo LUDWIG. | ||||
|  | ||||
| The main goal is to put into **practice knowledge in web development** and computer science in general on a concrete project that can **easily evolve over time** where you can add many features. | ||||
|  | ||||
| @@ -116,4 +116,4 @@ The other interest of the project is that it is completely **open-source**, and | ||||
|  | ||||
| Feel free to give feebacks and suggestions to improve the project, and to report any bug you find. | ||||
|  | ||||
| **Thream** is available: [**thream.divlo.fr**](https://www.thream.divlo.fr/). | ||||
| **Thream** is available: [**thream.divlo.fr**](https://thream.divlo.fr/). | ||||
|   | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| Before Width: | Height: | Size: 5.7 KiB | 
| Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB | 
| @@ -6,14 +6,14 @@ | ||||
|   "basics": { | ||||
|     "name": "Théo LUDWIG", | ||||
|     "label": "Développeur Full Stack • Étudiant", | ||||
|     "image": "https://divlo.fr/images/logo_orange.png", | ||||
|     "email": "contact@divlo.fr", | ||||
|     "image": "https://theoludwig.fr/images/logo_orange.png", | ||||
|     "email": "contact@theoludwig.fr", | ||||
|     "age": "31/03/2003", | ||||
|     "location": { | ||||
|       "address": "Alsace, France" | ||||
|     }, | ||||
|     "url": "https://divlo.fr", | ||||
|     "summary": "Je suis étudiant à l'université suivant la formation \"BUT Informatique\" et me forme en autodidacte dans l'informatique en suivant des formations en ligne. <br/> Je mets en pratique tout ce que j'apprends et réalise de nombreux projets (disponible sur <a href=\"https://divlo.fr\">divlo.fr</a>)." | ||||
|     "url": "https://theoludwig.fr", | ||||
|     "summary": "Je suis étudiant à l'université suivant la formation \"BUT Informatique\" et me forme en autodidacte dans l'informatique en suivant des formations en ligne. <br/> Je mets en pratique tout ce que j'apprends et réalise de nombreux projets (disponible sur <a href=\"https://theoludwig.fr\">theoludwig.fr</a>)." | ||||
|   }, | ||||
|   "education": [ | ||||
|     { | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| export const DIVLO_BIRTH_DATE_DAY = '31' as const | ||||
| export const DIVLO_BIRTH_DATE_MONTH = '03' as const | ||||
| export const DIVLO_BIRTH_DATE_YEAR = '2003' as const | ||||
| export const DIVLO_BIRTH_DATE_STRING = | ||||
|   `${DIVLO_BIRTH_DATE_DAY}/${DIVLO_BIRTH_DATE_MONTH}/${DIVLO_BIRTH_DATE_YEAR}` as const | ||||
| export const DIVLO_BIRTH_DATE_ISO_8601 = | ||||
|   `${DIVLO_BIRTH_DATE_YEAR}-${DIVLO_BIRTH_DATE_MONTH}-${DIVLO_BIRTH_DATE_DAY}` as const | ||||
| export const DIVLO_BIRTH_DATE = new Date(DIVLO_BIRTH_DATE_ISO_8601) | ||||
| export const BIRTH_DATE_DAY = '31' as const | ||||
| export const BIRTH_DATE_MONTH = '03' as const | ||||
| export const BIRTH_DATE_YEAR = '2003' as const | ||||
| export const BIRTH_DATE_STRING = | ||||
|   `${BIRTH_DATE_DAY}/${BIRTH_DATE_MONTH}/${BIRTH_DATE_YEAR}` as const | ||||
| export const BIRTH_DATE_ISO_8601 = | ||||
|   `${BIRTH_DATE_YEAR}-${BIRTH_DATE_MONTH}-${BIRTH_DATE_DAY}` as const | ||||
| export const BIRTH_DATE = new Date(BIRTH_DATE_ISO_8601) | ||||
|  | ||||
| /** | ||||
|  * Calculates the age of a person based on their birth date | ||||
|   | ||||
		Reference in New Issue
	
	Block a user