mirror of
https://github.com/theoludwig/theoludwig.git
synced 2024-11-09 14:51:30 +01:00
build(deps): bump Next.js to v13
This commit is contained in:
parent
28d9211583
commit
213a3fa182
@ -30,10 +30,11 @@ export const ErrorPage: React.FC<ErrorPageProps> = (props) => {
|
|||||||
</h1>
|
</h1>
|
||||||
<p className='text-center text-lg'>
|
<p className='text-center text-lg'>
|
||||||
{message}{' '}
|
{message}{' '}
|
||||||
<Link href='/'>
|
<Link
|
||||||
<a className='text-yellow hover:underline dark:text-yellow-dark'>
|
href='/'
|
||||||
|
className='text-yellow hover:underline dark:text-yellow-dark'
|
||||||
|
>
|
||||||
{t('errors:return-to-home-page')}
|
{t('errors:return-to-home-page')}
|
||||||
</a>
|
|
||||||
</Link>
|
</Link>
|
||||||
</p>
|
</p>
|
||||||
</main>
|
</main>
|
||||||
|
@ -17,10 +17,11 @@ export const Footer: React.FC<FooterProps> = (props) => {
|
|||||||
return (
|
return (
|
||||||
<footer className='flex flex-col items-center justify-center border-t-2 border-gray-600 bg-white py-6 text-lg dark:border-gray-400 dark:bg-black'>
|
<footer className='flex flex-col items-center justify-center border-t-2 border-gray-600 bg-white py-6 text-lg dark:border-gray-400 dark:bg-black'>
|
||||||
<p>
|
<p>
|
||||||
<Link href='/'>
|
<Link
|
||||||
<a className='text-yellow hover:underline dark:text-yellow-dark'>
|
href='/'
|
||||||
|
className='text-yellow hover:underline dark:text-yellow-dark'
|
||||||
|
>
|
||||||
Divlo
|
Divlo
|
||||||
</a>
|
|
||||||
</Link>{' '}
|
</Link>{' '}
|
||||||
| {t('common:all-rights-reserved')}
|
| {t('common:all-rights-reserved')}
|
||||||
</p>
|
</p>
|
||||||
|
@ -14,7 +14,6 @@ export const Header: React.FC<HeaderProps> = (props) => {
|
|||||||
return (
|
return (
|
||||||
<header className='sticky top-0 z-50 flex w-full justify-between border-b-2 border-gray-600 bg-white px-6 py-2 dark:border-gray-400 dark:bg-black'>
|
<header className='sticky top-0 z-50 flex w-full justify-between border-b-2 border-gray-600 bg-white px-6 py-2 dark:border-gray-400 dark:bg-black'>
|
||||||
<Link href='/'>
|
<Link href='/'>
|
||||||
<a>
|
|
||||||
<div className='flex items-center justify-center'>
|
<div className='flex items-center justify-center'>
|
||||||
<Image
|
<Image
|
||||||
quality={100}
|
quality={100}
|
||||||
@ -27,17 +26,15 @@ export const Header: React.FC<HeaderProps> = (props) => {
|
|||||||
Divlo
|
Divlo
|
||||||
</strong>
|
</strong>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
|
||||||
</Link>
|
</Link>
|
||||||
<div className='flex justify-between'>
|
<div className='flex justify-between'>
|
||||||
<div className='flex flex-col items-center justify-center px-6'>
|
<div className='flex flex-col items-center justify-center px-6'>
|
||||||
<Link href='/blog'>
|
<Link
|
||||||
<a
|
href='/blog'
|
||||||
data-cy='header-blog-link'
|
data-cy='header-blog-link'
|
||||||
className='text-yellow hover:underline dark:text-yellow-dark'
|
className='text-yellow hover:underline dark:text-yellow-dark'
|
||||||
>
|
>
|
||||||
Blog
|
Blog
|
||||||
</a>
|
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
{showLanguage && <Language />}
|
{showLanguage && <Language />}
|
||||||
|
@ -24,7 +24,7 @@ export const PortfolioItem: React.FC<PortfolioItemProps> = (props) => {
|
|||||||
<div className='flex justify-center'>
|
<div className='flex justify-center'>
|
||||||
<Image
|
<Image
|
||||||
quality={100}
|
quality={100}
|
||||||
className='transition-opacity duration-500 group-hover:opacity-20 dark:group-hover:opacity-5'
|
className='h-auto w-auto transition-opacity duration-500 group-hover:opacity-20 dark:group-hover:opacity-5'
|
||||||
width={300}
|
width={300}
|
||||||
height={300}
|
height={300}
|
||||||
src={image}
|
src={image}
|
||||||
|
@ -5,7 +5,7 @@ import DivloLogo from 'public/images/divlo_logo.png'
|
|||||||
export const ProfileLogo: React.FC = () => {
|
export const ProfileLogo: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
<div className='max-h-[370px] max-w-[370px] px-2 py-6'>
|
<div className='max-h-[370px] max-w-[370px] px-2 py-6'>
|
||||||
<Image quality={100} src={DivloLogo} alt='Divlo' />
|
<Image quality={100} src={DivloLogo} alt='Divlo' priority />
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,14 @@ export const SkillComponent: React.FC<SkillComponentProps> = (props) => {
|
|||||||
rel='noopener noreferrer'
|
rel='noopener noreferrer'
|
||||||
>
|
>
|
||||||
<div className='text-center'>
|
<div className='text-center'>
|
||||||
<Image quality={100} width={60} height={60} alt={skill} src={image} />
|
<Image
|
||||||
|
className='inline h-auto w-auto'
|
||||||
|
quality={100}
|
||||||
|
width={60}
|
||||||
|
height={60}
|
||||||
|
alt={skill}
|
||||||
|
src={image}
|
||||||
|
/>
|
||||||
<p className='mt-1'>{skill}</p>
|
<p className='mt-1'>{skill}</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
@ -4,12 +4,7 @@ describe('Page /', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should reveals the sections while scrolling except the about section', () => {
|
it('should reveals the sections while scrolling except the about section', () => {
|
||||||
const sectionsReveals = [
|
const sectionsReveals = ['#interests', '#skills', '#portfolio']
|
||||||
'#interests',
|
|
||||||
'#skills',
|
|
||||||
'#portfolio',
|
|
||||||
'#open-source'
|
|
||||||
]
|
|
||||||
cy.get('#about').should('be.visible')
|
cy.get('#about').should('be.visible')
|
||||||
for (const section of sectionsReveals) {
|
for (const section of sectionsReveals) {
|
||||||
cy.get(section)
|
cy.get(section)
|
||||||
|
64
jsonresume-theme-custom/package-lock.json
generated
64
jsonresume-theme-custom/package-lock.json
generated
@ -11,9 +11,9 @@
|
|||||||
"modern-normalize": "1.1.0"
|
"modern-normalize": "1.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "18.11.3",
|
"@types/node": "18.11.7",
|
||||||
"date-and-time": "2.4.1",
|
"date-and-time": "2.4.1",
|
||||||
"vite": "3.1.8",
|
"vite": "3.2.0",
|
||||||
"vite-plugin-html": "3.2.0"
|
"vite-plugin-html": "3.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -156,15 +156,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "18.11.3",
|
"version": "18.11.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.7.tgz",
|
||||||
"integrity": "sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==",
|
"integrity": "sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/acorn": {
|
"node_modules/acorn": {
|
||||||
"version": "8.8.0",
|
"version": "8.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
|
||||||
"integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
|
"integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"acorn": "bin/acorn"
|
"acorn": "bin/acorn"
|
||||||
@ -1301,9 +1301,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rollup": {
|
"node_modules/rollup": {
|
||||||
"version": "2.78.1",
|
"version": "2.79.1",
|
||||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
|
||||||
"integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
|
"integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"rollup": "dist/bin/rollup"
|
"rollup": "dist/bin/rollup"
|
||||||
@ -1442,15 +1442,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "3.1.8",
|
"version": "3.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-3.1.8.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-3.2.0.tgz",
|
||||||
"integrity": "sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==",
|
"integrity": "sha512-Ovj7+cqIdM1I0LPCk2CWxzgADXMix3NLXpUT6g7P7zg/a9grk/TaC3qn9YMg7w7M0POIVCBOp1aBANJW+RH7oA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.15.9",
|
"esbuild": "^0.15.9",
|
||||||
"postcss": "^8.4.16",
|
"postcss": "^8.4.18",
|
||||||
"resolve": "^1.22.1",
|
"resolve": "^1.22.1",
|
||||||
"rollup": "~2.78.0"
|
"rollup": "^2.79.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite": "bin/vite.js"
|
"vite": "bin/vite.js"
|
||||||
@ -1465,6 +1465,7 @@
|
|||||||
"less": "*",
|
"less": "*",
|
||||||
"sass": "*",
|
"sass": "*",
|
||||||
"stylus": "*",
|
"stylus": "*",
|
||||||
|
"sugarss": "*",
|
||||||
"terser": "^5.4.0"
|
"terser": "^5.4.0"
|
||||||
},
|
},
|
||||||
"peerDependenciesMeta": {
|
"peerDependenciesMeta": {
|
||||||
@ -1477,6 +1478,9 @@
|
|||||||
"stylus": {
|
"stylus": {
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"sugarss": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"terser": {
|
"terser": {
|
||||||
"optional": true
|
"optional": true
|
||||||
}
|
}
|
||||||
@ -1607,15 +1611,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "18.11.3",
|
"version": "18.11.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.7.tgz",
|
||||||
"integrity": "sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==",
|
"integrity": "sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"acorn": {
|
"acorn": {
|
||||||
"version": "8.8.0",
|
"version": "8.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
|
||||||
"integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
|
"integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ansi-styles": {
|
"ansi-styles": {
|
||||||
@ -2365,9 +2369,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"rollup": {
|
"rollup": {
|
||||||
"version": "2.78.1",
|
"version": "2.79.1",
|
||||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
|
||||||
"integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
|
"integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
@ -2461,16 +2465,16 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"vite": {
|
"vite": {
|
||||||
"version": "3.1.8",
|
"version": "3.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-3.1.8.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-3.2.0.tgz",
|
||||||
"integrity": "sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==",
|
"integrity": "sha512-Ovj7+cqIdM1I0LPCk2CWxzgADXMix3NLXpUT6g7P7zg/a9grk/TaC3qn9YMg7w7M0POIVCBOp1aBANJW+RH7oA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"esbuild": "^0.15.9",
|
"esbuild": "^0.15.9",
|
||||||
"fsevents": "~2.3.2",
|
"fsevents": "~2.3.2",
|
||||||
"postcss": "^8.4.16",
|
"postcss": "^8.4.18",
|
||||||
"resolve": "^1.22.1",
|
"resolve": "^1.22.1",
|
||||||
"rollup": "~2.78.0"
|
"rollup": "^2.79.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vite-plugin-html": {
|
"vite-plugin-html": {
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
"modern-normalize": "1.1.0"
|
"modern-normalize": "1.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "18.11.3",
|
"@types/node": "18.11.7",
|
||||||
"date-and-time": "2.4.1",
|
"date-and-time": "2.4.1",
|
||||||
"vite": "3.1.8",
|
"vite": "3.2.0",
|
||||||
"vite-plugin-html": "3.2.0"
|
"vite-plugin-html": "3.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
979
package-lock.json
generated
979
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
16
package.json
16
package.json
@ -42,7 +42,7 @@
|
|||||||
"date-and-time": "2.4.1",
|
"date-and-time": "2.4.1",
|
||||||
"gray-matter": "4.0.3",
|
"gray-matter": "4.0.3",
|
||||||
"html-react-parser": "3.0.4",
|
"html-react-parser": "3.0.4",
|
||||||
"next": "12.3.1",
|
"next": "13.0.0",
|
||||||
"next-mdx-remote": "4.1.0",
|
"next-mdx-remote": "4.1.0",
|
||||||
"next-pwa": "5.6.0",
|
"next-pwa": "5.6.0",
|
||||||
"next-themes": "0.2.1",
|
"next-themes": "0.2.1",
|
||||||
@ -66,16 +66,16 @@
|
|||||||
"@saithodev/semantic-release-backmerge": "2.1.2",
|
"@saithodev/semantic-release-backmerge": "2.1.2",
|
||||||
"@semantic-release/git": "10.0.1",
|
"@semantic-release/git": "10.0.1",
|
||||||
"@tailwindcss/typography": "0.5.7",
|
"@tailwindcss/typography": "0.5.7",
|
||||||
"@types/node": "18.11.3",
|
"@types/node": "18.11.7",
|
||||||
"@types/react": "18.0.21",
|
"@types/react": "18.0.24",
|
||||||
"@types/unist": "2.0.6",
|
"@types/unist": "2.0.6",
|
||||||
"@typescript-eslint/eslint-plugin": "5.40.1",
|
"@typescript-eslint/eslint-plugin": "5.41.0",
|
||||||
"autoprefixer": "10.4.12",
|
"autoprefixer": "10.4.12",
|
||||||
"cypress": "10.10.0",
|
"cypress": "10.11.0",
|
||||||
"editorconfig-checker": "4.0.2",
|
"editorconfig-checker": "4.0.2",
|
||||||
"eslint": "8.25.0",
|
"eslint": "8.26.0",
|
||||||
"eslint-config-conventions": "5.0.0",
|
"eslint-config-conventions": "5.0.0",
|
||||||
"eslint-config-next": "12.3.1",
|
"eslint-config-next": "13.0.0",
|
||||||
"eslint-config-prettier": "8.5.0",
|
"eslint-config-prettier": "8.5.0",
|
||||||
"eslint-plugin-import": "2.26.0",
|
"eslint-plugin-import": "2.26.0",
|
||||||
"eslint-plugin-prettier": "4.2.1",
|
"eslint-plugin-prettier": "4.2.1",
|
||||||
@ -91,7 +91,7 @@
|
|||||||
"prettier-plugin-tailwindcss": "0.1.13",
|
"prettier-plugin-tailwindcss": "0.1.13",
|
||||||
"semantic-release": "19.0.5",
|
"semantic-release": "19.0.5",
|
||||||
"start-server-and-test": "1.14.0",
|
"start-server-and-test": "1.14.0",
|
||||||
"tailwindcss": "3.2.0",
|
"tailwindcss": "3.2.1",
|
||||||
"typescript": "4.8.4",
|
"typescript": "4.8.4",
|
||||||
"vercel": "28.4.12"
|
"vercel": "28.4.12"
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,12 @@ const BlogPage: NextPage<BlogPageProps> = (props) => {
|
|||||||
'DD/MM/YYYY'
|
'DD/MM/YYYY'
|
||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
<Link href={`/blog/${post.slug}`} key={index} locale='en'>
|
<Link
|
||||||
<a data-cy={post.slug}>
|
href={`/blog/${post.slug}`}
|
||||||
|
key={index}
|
||||||
|
locale='en'
|
||||||
|
data-cy={post.slug}
|
||||||
|
>
|
||||||
<ShadowContainer className='cursor-pointer p-6 transition duration-200 ease-in-out hover:-translate-y-2'>
|
<ShadowContainer className='cursor-pointer p-6 transition duration-200 ease-in-out hover:-translate-y-2'>
|
||||||
<h2
|
<h2
|
||||||
data-cy='blog-post-title'
|
data-cy='blog-post-title'
|
||||||
@ -55,7 +59,6 @@ const BlogPage: NextPage<BlogPageProps> = (props) => {
|
|||||||
{post.frontmatter.description}
|
{post.frontmatter.description}
|
||||||
</p>
|
</p>
|
||||||
</ShadowContainer>
|
</ShadowContainer>
|
||||||
</a>
|
|
||||||
</Link>
|
</Link>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
@ -9,7 +9,7 @@ Hello! 👋
|
|||||||
|
|
||||||
Welcome to the Ultimate Guide to master `git` in your daily workflow, we will see what are the most used commands, what are the best practices, and tips and tricks.
|
Welcome to the Ultimate Guide to master `git` in your daily workflow, we will see what are the most used commands, what are the best practices, and tips and tricks.
|
||||||
|
|
||||||
This guide is a summary of the most important things to know when working with `git`, and in general, will link to the official documentation of `git` or other resources for more details (you can use it as a `git` cheatsheet).
|
This guide is a summary of the most important things to know when working with `git`, and in general, will link to the official documentation of `git` or other resources for more details, it is on purpose to not go in depth in each topic, it allows to summarize `git` and vocabulary about it (you can use it as a `git` cheatsheet).
|
||||||
|
|
||||||
**Note:** Sources used to write this blog post are available at the [end of this post](#sources).
|
**Note:** Sources used to write this blog post are available at the [end of this post](#sources).
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
"email": "contact@divlo.fr",
|
"email": "contact@divlo.fr",
|
||||||
"location": {},
|
"location": {},
|
||||||
"url": "https://divlo.fr",
|
"url": "https://divlo.fr",
|
||||||
"summary": "Je me forme en autodidacte dans l'informatique en suivant des formations en ligne et je suis aussi un étudiant à l'université suivant la formation \"BUT Informatique\" (première année). <br/> Je mets en pratique tout ce que j'apprends et réalise de nombreux projets."
|
"summary": "Je me forme en autodidacte dans l'informatique en suivant des formations en ligne et je suis aussi un étudiant à l'université suivant la formation \"BUT Informatique\" (deuxième année). <br/> Je mets en pratique tout ce que j'apprends et réalise de nombreux projets."
|
||||||
},
|
},
|
||||||
"education": [
|
"education": [
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user