mirror of
				https://github.com/theoludwig/theoludwig.git
				synced 2025-11-04 00:19:01 +01: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