1
1
mirror of https://github.com/theoludwig/theoludwig.git synced 2025-02-08 21:59:39 +01:00

Compare commits

...

386 Commits

Author SHA1 Message Date
f70a66e251
fix: replace standard open source contributions by nodejs.org 2025-02-08 20:56:56 +01:00
38eb296088
feat: themeColor metadata 2025-02-08 20:51:22 +01:00
43d91bfc28
chore: fix storybook configuration 2025-02-08 20:48:19 +01:00
b63cc3a66e
chore: cleaner setup 2025-02-08 20:00:47 +01:00
semantic-release-bot
270920111a
chore(release): 4.1.3 [skip ci] 2025-01-23 12:17:18 +00:00
d91feb8de4
fix: use Plausible 2025-01-23 13:16:20 +01:00
e68cb08a6f
fix: update Node.js to v22.13.1 (security release)
Ref: https://nodejs.org/en/blog/release/v22.13.1
2025-01-23 13:11:57 +01:00
semantic-release-bot
09d677bd37
chore(release): 4.1.2 [skip ci] 2024-12-06 22:22:48 +00:00
db1159f20c
fix(blog): issue with CSS loading
Ref: https://github.com/nodejs/node/issues/56155
2024-12-06 23:16:40 +01:00
semantic-release-bot
af5c845e4b
chore(release): 4.1.1 [skip ci] 2024-12-06 08:35:37 +00:00
3f66dfe46e
fix: error 404 not found 2024-12-06 09:30:49 +01:00
d52a0c6f08
build(deps): update latest 2024-12-06 09:30:44 +01:00
semantic-release-bot
251b0b4038
chore(release): 4.1.0 [skip ci] 2024-11-09 20:10:23 +00:00
a5baffe9eb
fix(ui): button outline, hover effect 2024-11-09 21:01:31 +01:00
1351e4122d
fix(blog): shiki syntax highlighting for txt 2024-11-09 20:21:09 +01:00
4c69d5a852
refactor(ui): allow all tailwind css colors 2024-11-09 20:14:30 +01:00
9e840b8dae
build(deps): update Next.js to v15 and ESLint to v9 2024-11-09 19:50:22 +01:00
59153a7a69
style: fix ESLint 2024-10-13 00:00:44 +02:00
0a7094005c
chore: config updates 2024-10-12 23:51:58 +02:00
12f1d6cdf2
chore: try to fix CI with Playwright 2024-09-12 00:14:58 +02:00
0d7b33727b
feat: add in progress Engineering study + IRCAD until 2027 on CV 2024-09-12 00:05:59 +02:00
386f407f21
chore: simplify TypeScript config 2024-09-11 23:53:26 +02:00
semantic-release-bot
6853ac6884
chore(release): 4.0.0 [skip ci] 2024-07-31 22:55:33 +00:00
b199aedf77
feat: add Locale switch to Curriculum Vitae (not visible in print mode) 2024-08-01 00:48:22 +02:00
da4b483a3c
fix: a11y issues with curriculum-vitae 2024-08-01 00:36:45 +02:00
012fea869f
feat: translate Curriculum Vitae in both English and French 2024-08-01 00:26:46 +02:00
a596d1c443
feat: components structure Curriculum Vitae 2024-07-31 22:27:51 +02:00
b4611e4a7f
feat: init Curriculum Vitae 2024-07-31 19:23:14 +02:00
b5c50728de
refactor: components struture 2024-07-31 11:41:39 +02:00
ceeeb2f9c5
fix: add missing unstable_setRequestLocale to enable static rendering 2024-07-31 11:00:30 +02:00
semantic-release-bot
c094b37bca
chore(release): 4.0.0-staging.1 [skip ci] 2024-07-30 22:57:33 +00:00
8dde7f5b42
ci: install playwright --with-deps 2024-07-31 00:47:05 +02:00
cef5ead09f
chore: ignore curriculum-vitae 2024-07-30 23:59:33 +02:00
7bde328b96
perf!: monorepo setup + fully static + webp images
BREAKING CHANGE: minimum supported Node.js >= 22.0.0 and pnpm >= 9.5.0
2024-07-30 23:59:06 +02:00
semantic-release-bot
0f44e64c0c
chore(release): 3.3.2 [skip ci] 2024-07-20 08:34:00 +00:00
84c192bbef
chore: usage of main instead of master 2024-07-20 10:31:14 +02:00
6f78a0686c
fix: locale text with font-semibold 2024-07-20 10:28:17 +02:00
2897d181c5
Revert "fix: stop using flag image, use emoji instead"
This reverts commit f64acb68c72869a7461757668d5c4c0ceb30ee96.
2024-07-20 10:26:19 +02:00
f94ce7d7bc
fix: update Node.js to v20.15.1 (security release) 2024-07-20 10:21:16 +02:00
semantic-release-bot
dd09092842
chore(release): 3.3.1 [skip ci] 2024-07-06 21:01:51 +00:00
f64acb68c7
fix: stop using flag image, use emoji instead 2024-07-06 02:33:49 +02:00
semantic-release-bot
3074945c54
chore(release): 3.3.0 [skip ci] 2024-05-23 20:35:01 +00:00
fc0dfdda5f
chore(blog): update shiki to v1.6.0 and update next-mdx-remote to v5.0.0 2024-05-23 22:30:13 +02:00
f62964c62a
ci: update GitHub Actions 2024-05-23 21:41:05 +02:00
8ec113c9cb
feat(blog): update Git Ultimate Guide to add trick about cherry-pick and diff-commits alias 2024-05-23 10:29:35 +02:00
semantic-release-bot
8a59e9034f
chore(release): 3.2.6 [skip ci] 2024-05-21 18:23:28 +00:00
d7121ea833
style: fix tailwindcss linting 2024-05-21 20:18:05 +02:00
c10f690622
build(deps): update dependencies to latest 2024-05-21 20:15:57 +02:00
6915072ab9
chore: delete unused config 2024-05-21 19:31:45 +02:00
dd803bcc51
test: fix should display hello-world blog post 2024-05-21 19:17:29 +02:00
efa33f26ec
fix(blog): headings should be aligned with the text, not shifted 2024-05-21 19:06:12 +02:00
semantic-release-bot
5f3dfad988
chore(release): 3.2.5 [skip ci] 2024-05-16 08:09:25 +00:00
b231381cb3
fix: client-side age calculation, more glanular check for isMounted
Allows to render as much as possible on the server side.
While keeping the calculation of the age on the client side to avoid hydratation mismatch.
2024-05-16 10:06:43 +02:00
bbb2e56512
fix: usage of correct heading levels and html tags 2024-05-16 09:56:19 +02:00
66cf6d7438
fix: add scroll behavior: smooth 2024-05-16 09:32:20 +02:00
2a635bf3ba
fix: add hover effects 2024-05-16 09:26:05 +02:00
semantic-release-bot
9f79b88202
chore(release): 3.2.4 [skip ci] 2024-04-13 17:17:11 +00:00
23d9caf578
style: fix eslint 2024-04-13 19:13:48 +02:00
7febe6d1f9
fix(blog): typos in posts 2024-04-13 19:03:18 +02:00
c4650c34d9
build(deps): update latest 2024-04-13 18:54:36 +02:00
0eb780485c
fix(footer): show 0.0.0-development version in Footer in development 2024-04-06 20:40:25 +02:00
cd5e92b64a
fix: hydratation error with age calculation 2024-04-06 20:32:09 +02:00
982b148329
Revert "fix(portfolio): update link to Carolo (carolo.org)"
This reverts commit c2c9b59c7aa4ad0c185a9901a2bde4dd16a9d80c.
2024-04-06 20:27:04 +02:00
0febee5b51
refactor: rename to primary color 2024-04-06 20:25:02 +02:00
semantic-release-bot
3502f51735
chore(release): 3.2.3 [skip ci] 2024-02-15 08:41:01 +00:00
493df4e2f2
style: fix prettier 2024-02-15 09:35:58 +01:00
c2c9b59c7a
fix(portfolio): update link to Carolo (carolo.org) 2024-02-15 09:34:02 +01:00
f6e3008ab9
fix(blog): add command to commit in the past in Git Ultimate Guide 2024-02-15 09:30:34 +01:00
15e94cec64
fix: update dependencies to latest to address security issues Node.js v20.11.1
Ref: https://nodejs.org/en/blog/vulnerability/february-2024-security-releases
2024-02-15 09:27:03 +01:00
semantic-release-bot
5185c6758b
chore(release): 3.2.2 [skip ci] 2024-02-02 16:31:35 +00:00
b633eef833
fix: remove npm vulnerability by updating html-w3c-validator 2024-02-02 17:30:25 +01:00
d2e627ff13
chore: cleaner configs 2024-01-29 21:26:59 +01:00
semantic-release-bot
1e0567b538
chore(release): 3.2.1 [skip ci] 2024-01-28 15:15:48 +00:00
c8d32c6acc
test: correct selector for Main Title of page 2024-01-28 16:13:02 +01:00
05503cda26
chore: only report errors for html validation 2024-01-28 16:04:00 +01:00
303b6f3011
fix: correct responsive for Header Title 2024-01-28 15:45:45 +01:00
0272cf7080
docs(license): add email address 2024-01-28 15:42:23 +01:00
e8ea42a260
fix: wrong font weight on hover link 2024-01-28 15:42:01 +01:00
semantic-release-bot
f337e14260
chore(release): 3.2.0 [skip ci] 2024-01-28 12:16:11 +00:00
f5020cad19
chore: usage of eslint-plugin-tailwindcss 2024-01-28 03:21:11 +01:00
b8ceefb2f6
feat: new logo v1 2024-01-28 01:56:47 +01:00
1523c8cac0
fix: wording typos 2024-01-25 14:46:03 +01:00
548ddc8425
style: format JSONC files with Prettier correctly 2024-01-24 21:49:30 +01:00
bac65ad61a
fix: improve wording 2024-01-23 23:59:10 +01:00
b91f3165b7
fix(blog): add depreciation notice on Thream post 2024-01-23 22:29:21 +01:00
5478e202a7
fix(open source): replace nrwl/nx by DefinitelyTyped 2024-01-23 22:13:39 +01:00
a89b5932c2
fix: update dependencies to latest 2024-01-23 22:01:50 +01:00
semantic-release-bot
339e42acfa
chore(release): 3.1.2 [skip ci] 2023-12-28 05:24:14 +00:00
c123815a86
fix(portfolio): remove Thream project as it is now deprecated 2023-12-28 06:21:32 +01:00
dd26a277a2
fix: update dependencies to latest 2023-12-28 06:21:24 +01:00
semantic-release-bot
62222dbb0c
chore(release): 3.1.1 [skip ci] 2023-11-07 20:34:11 +00:00
ee0a02bc8b
chore: downgrade commitlint temporarily to release new versions 2023-11-07 21:33:05 +01:00
2e04053ec3
fix: update CV with latest education courses 2023-11-07 21:14:43 +01:00
45a9a69122
fix: update dependencies to latest 2023-11-07 20:57:52 +01:00
e566ef6c38
chore: better Prettier config for easier reviews 2023-10-23 23:11:59 +02:00
semantic-release-bot
c7ad15a465
chore(release): 3.1.0 [skip ci] 2023-09-18 20:09:29 +00:00
f4a842efb5
build: downgrade semantic-release to v21.1.2
Ref: https://github.com/semantic-release/semantic-release/issues/2968
2023-09-18 22:08:04 +02:00
424c97019b
fix: update dependencies to latest 2023-09-18 22:00:11 +02:00
c0508dc0b9
build: ignore ESLint errors for Production build
It improves performance when extra checking is not necessary.
2023-09-14 12:26:19 +02:00
f04d8a0c11
Revert "build: ignore ESLint and TypeScript errors for Production build"
This reverts commit fdab2a7ea8026867cdc493361c85ba907dfe998b.
2023-09-14 12:19:26 +02:00
d29064745c
feat: add IRCAD as work experience 2023-09-14 12:11:18 +02:00
95febe2a99
feat: add 3rd year of BUT Informatique as education 2023-09-14 12:01:20 +02:00
fdab2a7ea8
build: ignore ESLint and TypeScript errors for Production build
It improves performance when extra checking is not necessary.
2023-09-14 11:49:52 +02:00
35211fa279
fix: try/catch inside middleware when checking locale 2023-08-24 23:09:33 +02:00
137cceffa1
build(deps): update latest 2023-08-24 22:38:09 +02:00
semantic-release-bot
f6bfc466de
chore(release): 3.0.0 [skip ci] 2023-08-01 17:41:12 +00:00
e4cf714d95
test: fix styles import for unit tests 2023-08-01 19:39:09 +02:00
d3c86b2a26
chore: update Dockerfile 2023-08-01 19:34:58 +02:00
d2578abeec
fix: loader improvements 2023-08-01 18:59:45 +02:00
e51e3bdc19
test: fix e2e tests + 500 error page 2023-08-01 18:18:16 +02:00
56520830e9
refactor: blog directory 2023-08-01 17:44:08 +02:00
2e0138194c
refactor: avoid usage of React.FC to use JSX.Element (to stay consistent) 2023-08-01 17:22:09 +02:00
4b2e7bae90
feat: rewrite blog to Next.js v13 app directory
Improvement: Support light theme in code block
2023-08-01 17:07:19 +02:00
caa6a90418
refactor: implement light/dark themes using cookies 2023-08-01 14:11:46 +02:00
e82db952db
docs: update interests 2023-08-01 13:15:03 +02:00
6b29ce9b15
feat: rewrite to Next.js v13 app directory
Improvements:
- Hide switch theme input (ugly little white square)
- i18n without subpath (e.g: /fr or /en), same url whatever the locale used
2023-07-31 19:06:46 +02:00
5640f1b434
build(deps): bump Node.js to 20.0.0 and npm to 9.0.0
BREAKING CHANGE: minimum supported Node.js >= 20.0.0 and npm >= 9.0.0
2023-07-30 19:03:36 +02:00
6d0dcb50a7
refactor: 'use client' when appropriate 2023-07-30 18:50:14 +02:00
70603f1444
chore: remove build error with Docker copy wrong node_modules 2023-07-30 18:27:15 +02:00
f42fdbfd0c
chore: rename jsonresume-theme-custom to curriculum-vitae 2023-07-28 11:53:04 +02:00
6a3f335f9f
fix(posts): update git blog post 2023-07-28 11:40:19 +02:00
f1509d0af1
chore: rename docker-compose.yml to compose.yaml
Ref: https://docs.docker.com/compose/compose-file/03-compose-file/
2023-07-28 11:38:34 +02:00
semantic-release-bot
49599d25ed
chore(release): 2.13.0 [skip ci] 2023-07-22 17:47:02 +00:00
65e0f4f8b6
fix: avoid scrolling when changing language 2023-07-22 19:40:28 +02:00
8d60c2d53a
feat: add Carolo project in Portfolio 2023-07-22 19:39:57 +02:00
0bbebeab99
build(deps): update latest
Some checks failed
Analyze / analyze (javascript) (push) Failing after 1m24s
Build / build (push) Successful in 3m0s
Lint / lint (push) Successful in 2m6s
Test / test-unit (push) Successful in 1m56s
Test / test-e2e (push) Successful in 3m17s
2023-07-19 00:09:28 +02:00
semantic-release-bot
643e0e5821
chore(release): 2.12.1 [skip ci] 2023-07-14 22:03:03 +00:00
872b018673
style: fix prettier 2023-07-14 23:58:50 +02:00
2644cb0fb5
fix: update /curriculum-vitae to /curriculum-vitae/index.html 2023-07-14 23:54:29 +02:00
bc719578d2
fix: remove vercel cli + update dependencies to latest 2023-07-14 23:50:20 +02:00
semantic-release-bot
117c41b1c3
chore(release): 2.12.0 [skip ci] 2023-07-02 14:59:12 +00:00
b92704b77d
feat: increase duration work experience Numerize 2023-07-02 16:50:32 +02:00
bab7581283
fix: update dependencies to latest 2023-07-02 16:42:39 +02:00
semantic-release-bot
988fceb2aa
chore(release): 2.11.0 [skip ci] 2023-06-18 10:23:59 +00:00
5211ba1489
feat(skills): add Arch Linux 2023-06-18 12:18:24 +02:00
semantic-release-bot
6886480cef
chore(release): 2.10.0 [skip ci] 2023-06-16 21:30:51 +00:00
d78e50638e
test: fix with new anchor link behavior in blog posts 2023-06-16 23:26:09 +02:00
3b76195d71
feat(blog): add anchor links for titles/headers 2023-06-16 23:14:25 +02:00
2dc63ba933
chore: maintenance 2023-06-16 22:56:53 +02:00
336f067c52
fix(posts): add explanations for Git (cherry-pick + merge squash) 2023-06-16 22:36:20 +02:00
5fd7f77b6d
fix: justify align text in blog posts 2023-06-16 21:48:47 +02:00
semantic-release-bot
db0c708c04
chore(release): 2.9.0 [skip ci] 2023-05-31 18:39:59 +00:00
9d44671fed
feat: continue migrating to full name instead of nickname 2023-05-31 20:09:08 +02:00
semantic-release-bot
7bcc5f972c
chore(release): 2.8.0 [skip ci] 2023-05-30 19:57:02 +00:00
61172d59e3
feat: migrate progressively to full name instead of nickname 2023-05-30 21:51:27 +02:00
semantic-release-bot
7c0f11ab7d
chore(release): 2.7.3 [skip ci] 2023-05-29 15:45:42 +00:00
Divlo
670897fa78
fix: improve spelling consistency 2023-05-29 17:44:26 +02:00
Divlo
b88246b668
chore: usage of next start 2023-05-29 17:33:45 +02:00
semantic-release-bot
87fbfe4940
chore(release): 2.7.2 [skip ci] 2023-05-29 15:29:07 +00:00
Divlo
271aa60247
test: update with new changes 2023-05-29 17:26:06 +02:00
Divlo
ba34e314c9
fix: update name with full name and nickname 2023-05-29 17:10:14 +02:00
Divlo
f41bc644b1
fix(deps): remove next-pwa dependency 2023-05-29 16:24:49 +02:00
semantic-release-bot
a18cec4826
chore(release): 2.7.1 [skip ci] 2023-05-21 16:27:24 +00:00
Divlo
61e589f0f4
fix: responsive on blog post with code blocks and katex 2023-05-21 18:21:46 +02:00
semantic-release-bot
dc5c3cee41
chore(release): 2.7.0 [skip ci] 2023-05-21 12:49:17 +00:00
Divlo
20cb0c21d5
feat(posts): add programming-challenges 2023-05-21 14:42:53 +02:00
Divlo
e5232c1394
build(deps): update latest 2023-05-21 12:15:08 +02:00
semantic-release-bot
fd51609713
chore(release): 2.6.1 [skip ci] 2023-05-13 17:15:54 +00:00
Divlo
edf16c2562
fix(deps): update latest 2023-05-13 19:09:54 +02:00
semantic-release-bot
94e0d190ae
chore(release): 2.6.0 [skip ci] 2023-05-10 18:12:22 +00:00
Divlo
b1cf7f8517
chore: remove unneeded Lighthouse checking 2023-05-09 23:22:33 +02:00
Divlo
a1a715d3b9
feat: add Numerize as work experience 2023-05-09 23:06:10 +02:00
Divlo
eede46fb41
build(deps): update latest 2023-05-09 22:56:42 +02:00
semantic-release-bot
e32c53caa1
chore(release): 2.5.6 [skip ci] 2023-04-02 21:18:14 +00:00
Divlo
361ea37deb
chore: fix CI issues 2023-04-02 23:16:51 +02:00
Divlo
d49a8a7470
fix: update dependencies to latest 2023-04-02 22:44:09 +02:00
Divlo
a4996c8251
chore: remove useless runner-dependencies in Dockerfile 2023-01-11 17:42:29 +01:00
semantic-release-bot
b25451e631
chore(release): 2.5.5 [skip ci] 2023-01-10 23:05:24 +00:00
Divlo
042a861f58
fix: update dependencies to latest 2023-01-10 23:56:46 +01:00
semantic-release-bot
d76db36dbc
chore(release): 2.5.4 [skip ci] 2022-12-08 08:54:03 +00:00
Divlo
99d9dcf334
fix: improve Resume 2022-12-08 09:52:39 +01:00
semantic-release-bot
ece5ded1b4
chore(release): 2.5.3 [skip ci] 2022-11-29 09:33:10 +00:00
Divlo
1514600998
fix: improve Resume 2022-11-29 10:29:02 +01:00
semantic-release-bot
5f5b328895
chore(release): 2.5.2 [skip ci] 2022-11-19 19:43:26 +00:00
Divlo
c88887a322
fix: better resume 2022-11-19 20:24:13 +01:00
semantic-release-bot
014044573a
chore(release): 2.5.1 [skip ci] 2022-11-10 11:35:11 +00:00
Divlo
df009c3f7b
fix(posts): update broken link in thream-v1.0.0.md 2022-11-10 12:31:48 +01:00
Divlo
5c85ca2ef1
chore: fix cypress unit tests 2022-11-08 11:00:31 +01:00
semantic-release-bot
07f7942496
chore(release): 2.5.0 [skip ci] 2022-10-27 17:24:30 +00:00
Divlo
213a3fa182
build(deps): bump Next.js to v13 2022-10-27 19:13:29 +02:00
Divlo
28d9211583
fix(posts): update git-ultimate-guide 2022-10-23 20:15:07 +02:00
Divlo
4d085cb148
fix: update biography description 2022-10-23 18:38:37 +02:00
Divlo
e6c583f2cd
ci: fix timeout 2022-10-20 23:57:53 +02:00
Divlo
232b54588a
feat(skills): add PHP and Laravel 2022-10-20 22:44:40 +02:00
Divlo
c419fb3bb4
chore: remove usage of styled-jsx 2022-10-20 22:44:32 +02:00
Divlo
03e7e22d74
chore: reduce docker image size 2022-10-20 22:44:32 +02:00
Divlo
e85c241ed1
feat(posts): add git-ultimate-guide 2022-10-20 22:43:25 +02:00
Divlo
c1877297f8
refactor: minor changes 2022-08-27 02:30:55 +02:00
semantic-release-bot
83231197dd
chore(release): 2.4.1 [skip ci] 2022-08-23 11:33:38 +00:00
Divlo
a2fe2205bc
fix(resume): wrong base path for assets 2022-08-23 13:31:17 +02:00
semantic-release-bot
e1f3dceb07
chore(release): 2.4.0 [skip ci] 2022-08-23 10:33:09 +00:00
Divlo
0f89fee52f
feat: add giscus comments system for blog posts 2022-08-23 12:23:31 +02:00
semantic-release-bot
2fcc7ac384
chore(release): 2.3.2 [skip ci] 2022-07-28 21:06:12 +00:00
Divlo
9351edf626
chore: use the right resume.json 2022-07-28 23:01:19 +02:00
Divlo
1f4aa54211
chore: remove jest -> cypress for unit tests 2022-07-28 22:51:12 +02:00
Divlo
8bc1471cbb
chore: easier development for jsonresume-theme-custom thanks to vite 2022-07-28 21:20:41 +02:00
Divlo
1ebdab18a5
fix: update about, now second year of university 2022-07-23 23:00:58 +02:00
Divlo
b9b76e839a
build(deps): update latest 2022-07-01 23:12:47 +02:00
semantic-release-bot
bc065a2e19
chore(release): 2.3.1 [skip ci] 2022-05-03 08:12:15 +00:00
Divlo
5d3a287b27
fix(resume): wrong dates 2022-05-03 10:05:11 +02:00
semantic-release-bot
fb689c9bc1
chore(release): 2.3.0 [skip ci] 2022-04-11 10:35:55 +00:00
Divlo
2c3a70df2a
feat(posts): add thream-v1-0-0 2022-04-11 12:31:19 +02:00
semantic-release-bot
bce254a355
chore(release): 2.2.1 [skip ci] 2022-03-24 18:00:10 +00:00
Divlo
f67d331416
fix: calculate age client side so it updates "automatically" (not only on rebuild) 2022-03-24 18:57:27 +01:00
semantic-release-bot
6abc881e94
chore(release): 2.2.0 [skip ci] 2022-03-24 10:49:45 +00:00
Divlo
a67d6665ea
feat: display age nearby the birth date 2022-03-24 11:45:19 +01:00
semantic-release-bot
1152039663
chore(release): 2.1.0 [skip ci] 2022-03-14 08:15:56 +00:00
Divlo
919ebd5f3e
feat(posts): add mistakes-as-junior-developer 2022-03-14 09:09:46 +01:00
semantic-release-bot
94212f9b5c
chore(release): 2.0.2 [skip ci] 2022-02-23 18:52:16 +00:00
Divlo
bf9347f685
ci: multiple workflows instead of one 2022-02-23 19:46:44 +01:00
Divlo
896b6051e8
fix: redirect /curriculum-vitae.html to /curriculum-vitae 2022-02-23 19:31:18 +01:00
semantic-release-bot
b5f3552c07
chore(release): 2.0.1 [skip ci] 2022-02-23 10:55:50 +00:00
Divlo
5fbae8601f
fix(posts): spelling mistakes 2022-02-23 11:51:00 +01:00
Divlo
48d35776a9
fix(resume): usage of experience website 2022-02-23 11:14:53 +01:00
semantic-release-bot
8b9e58c47c
chore(release): 2.0.0 [skip ci] 2022-02-23 08:14:21 +00:00
Divlo
33078ece66
chore: temporarily support Node.js v14 to deploy on Vercel 2022-02-23 09:06:12 +01:00
Divlo
a2da9618af
test(e2e): header should always be visible (sticky) 2022-02-23 09:03:10 +01:00
Divlo
a467ea7aff
feat: usage of VSCode Dark+ syntax highlighting in posts 2022-02-23 00:38:50 +01:00
Divlo
0e0036b737
feat: add Curriculum vitae 2022-02-22 21:19:42 +01:00
Divlo
729e540d04
chore: maintenance 2022-02-20 15:12:10 +01:00
Xc165543337
e5f4615f7f
fix(posts): grammar and orthograph in clean-code (#321) 2022-02-20 15:12:10 +01:00
Divlo
0bf89f4df5
feat(posts): add clean-code 2022-02-20 15:12:10 +01:00
Divlo
bcb184e49c
feat: add blog (#320) 2022-02-20 15:12:10 +01:00
Divlo
1505b81233
build(deps): bump Node.js to 16.0.0 and npm to 8.0.0
BREAKING CHANGE: minimum supported Node.js >= 16.0.0 and npm >= 8.0.0

fixes #74
2022-02-20 15:12:10 +01:00
Divlo
a30355582e
feat(skills): add C/C++ 2022-02-20 15:12:10 +01:00
Divlo
a4effb52f9
feat(skills): add GNU/Linux 2022-02-20 15:12:10 +01:00
dependabot[bot]
52bba0ef9c
build(deps): update latest 2022-02-20 15:08:48 +01:00
semantic-release-bot
8ecfeca50d
chore(release): 1.3.6 [skip ci] 2021-09-09 08:15:20 +00:00
Divlo
fd0740d12a
fix: add text that I'm a student at University 2021-09-09 10:08:42 +02:00
dependabot[bot]
bd2dc9c9af
build(deps-dev): bump babel-jest from 27.1.0 to 27.1.1 (#212) 2021-09-09 08:46:48 +02:00
dependabot[bot]
a53888ab42
build(deps-dev): bump @types/node from 16.7.13 to 16.9.0 (#213) 2021-09-09 08:46:16 +02:00
dependabot[bot]
624e79eecd
build(deps-dev): bump jest from 27.1.0 to 27.1.1 (#214) 2021-09-09 08:46:02 +02:00
dependabot[bot]
049ec367fc
build(deps-dev): bump tailwindcss from 2.2.11 to 2.2.14 (#211) 2021-09-08 21:27:01 +02:00
dependabot[bot]
56f22d0c9b
build(deps-dev): bump tailwindcss from 2.2.9 to 2.2.11 (#207) 2021-09-08 21:17:25 +02:00
dependabot[bot]
9adb67662e
build(deps-dev): bump @types/node from 16.7.10 to 16.7.13 (#208) 2021-09-08 21:17:14 +02:00
dependabot[bot]
010087088f
build(deps): bump html-react-parser from 1.2.8 to 1.3.0 (#209) 2021-09-08 21:17:00 +02:00
dependabot[bot]
35d4396e80
build(deps): bump sharp from 0.29.0 to 0.29.1 (#210) 2021-09-08 21:16:48 +02:00
dependabot[bot]
934118737a
build(deps-dev): bump @typescript-eslint/eslint-plugin (#204) 2021-09-08 21:16:31 +02:00
dependabot[bot]
b692dac926
build(deps): bump crazy-max/ghaction-import-gpg from 3.2.0 to 4 (#200)
Co-authored-by: Divlo <contact@divlo.fr>
2021-09-06 16:37:10 +02:00
dependabot[bot]
dd582652ab
build(deps-dev): bump @types/react from 17.0.19 to 17.0.20 (#201) 2021-09-06 16:28:01 +02:00
dependabot[bot]
337352de0c
build(deps-dev): bump @semantic-release/git from 9.0.0 to 9.0.1 (#202) 2021-09-06 16:27:44 +02:00
dependabot[bot]
c513268cbb
build(deps-dev): bump autoprefixer from 10.3.3 to 10.3.4 (#199) 2021-09-03 09:54:38 +02:00
dependabot[bot]
4fdcb2b667
build(deps-dev): bump start-server-and-test from 1.13.1 to 1.14.0 (#198) 2021-09-03 09:54:17 +02:00
semantic-release-bot
377b8e91a6
chore(release): 1.3.5 [skip ci] 2021-09-01 22:17:55 +00:00
Divlo
fce29c9d4a
build(deps): update latest 2021-09-02 00:13:20 +02:00
dependabot[bot]
c198f47aa9
build(deps-dev): eslint-config-standard-with-typescript to 21.0.1 (#195) 2021-09-01 16:38:44 +02:00
dependabot[bot]
8e051332cd
build(deps-dev): bump @typescript-eslint/eslint-plugin to 4.30.0 (#197) 2021-09-01 16:37:39 +02:00
dependabot[bot]
9f3436e1df
build(deps-dev): bump tailwindcss from 2.2.8 to 2.2.9 (#196) 2021-09-01 16:37:17 +02:00
dependabot[bot]
2f2373e62f
build(deps-dev): bump cypress from 8.3.0 to 8.3.1 (#187) 2021-09-01 16:36:12 +02:00
dependabot[bot]
c6b455dd10
build(deps-dev): bump eslint-plugin-prettier from 3.4.1 to 4.0.0 (#189) 2021-09-01 16:35:35 +02:00
dependabot[bot]
4e089b41f2
build(deps-dev): bump @types/node from 16.7.2 to 16.7.10 (#193) 2021-09-01 16:35:19 +02:00
dependabot[bot]
6c102b1b35
build(deps-dev): bump eslint-config-next from 11.1.0 to 11.1.2 (#194) 2021-09-01 16:35:03 +02:00
dependabot[bot]
52b10944b7
build(deps): bump next from 11.1.0 to 11.1.2 (#192) 2021-09-01 16:34:50 +02:00
dependabot[bot]
db36eb3e7a
build(deps-dev): bump jest from 27.0.6 to 27.1.0 (#185) 2021-08-27 12:45:18 +02:00
dependabot[bot]
c739ad951d
build(deps-dev): bump babel-jest from 27.0.6 to 27.1.0 (#184) 2021-08-27 12:45:07 +02:00
dependabot[bot]
2802ff029f
build(deps-dev): bump tailwindcss from 2.2.7 to 2.2.8 (#182) 2021-08-27 12:43:05 +02:00
dependabot[bot]
1a7457b44b
build(deps-dev): bump @types/node from 16.7.1 to 16.7.2 (#183) 2021-08-27 12:41:56 +02:00
dependabot[bot]
ff210f879d
build(deps-dev): bump semantic-release from 17.4.6 to 17.4.7 (#178) 2021-08-27 12:41:43 +02:00
dependabot[bot]
607454b360
build(deps-dev): bump eslint-plugin-import from 2.24.1 to 2.24.2 (#176) 2021-08-27 12:41:29 +02:00
dependabot[bot]
d1522fbf44
build(deps): bump node from 16.7.0 to 16.8.0 (#179) 2021-08-27 12:41:06 +02:00
dependabot[bot]
b82eae7499
build(deps-dev): bump autoprefixer from 10.3.2 to 10.3.3 (#181) 2021-08-27 12:40:52 +02:00
dependabot[bot]
73527ce8fe
build(deps-dev): bump husky from 7.0.1 to 7.0.2 (#177) 2021-08-27 12:40:30 +02:00
dependabot[bot]
0cd885ee70
build(deps-dev): bump typescript from 4.3.5 to 4.4.2 (#180) 2021-08-27 12:40:16 +02:00
dependabot[bot]
2cb2df975f
build(deps-dev): bump @typescript-eslint/eslint-plugin to 4.29.3 (#175) 2021-08-24 02:30:24 +02:00
dependabot[bot]
37f5843adb
build(deps-dev): bump semantic-release from 17.4.5 to 17.4.6 (#174) 2021-08-24 02:30:06 +02:00
Divlo
d794d38f14
test(e2e): visible instead of exist 2021-08-23 19:48:15 +02:00
Divlo
fc5ba28b8a
perf: remove unnecessary fonts weight 2021-08-23 19:41:39 +02:00
Divlo
b5945150b8
fix: remove Hyper Terminal from tools used 2021-08-23 19:25:17 +02:00
Divlo
aa12d626d2
perf: uses-responsive-images 2021-08-23 19:17:30 +02:00
dependabot[bot]
6ac4782b7d
build(deps-dev): bump @types/node from 16.6.2 to 16.7.1 (#171) 2021-08-23 12:00:52 +02:00
dependabot[bot]
0aa998d593
build(deps-dev): bump eslint-plugin-prettier from 3.4.0 to 3.4.1 (#172) 2021-08-23 12:00:39 +02:00
dependabot[bot]
56f975e53c
build(deps-dev): bump autoprefixer from 10.3.1 to 10.3.2 (#173) 2021-08-23 12:00:26 +02:00
dependabot[bot]
5a16d24ea1
build(deps-dev): bump eslint-plugin-import from 2.24.0 to 2.24.1 (#170) 2021-08-20 10:37:53 +02:00
dependabot[bot]
52267005ec
build(deps-dev): bump @types/react from 17.0.18 to 17.0.19 (#169) 2021-08-20 10:37:38 +02:00
dependabot[bot]
99b9b12ac9
build(deps-dev): bump @types/node from 16.6.1 to 16.6.2 (#168) 2021-08-19 10:56:35 +02:00
dependabot[bot]
2cae77481f
build(deps): bump node from 16.6.2 to 16.7.0 (#167) 2021-08-19 10:55:46 +02:00
dependabot[bot]
e98b47a459
build(deps): bump sharp from 0.28.3 to 0.29.0 (#166) 2021-08-18 11:26:24 +02:00
dependabot[bot]
4cc87758c1
build(deps): bump next-pwa from 5.2.24 to 5.3.1 (#164) 2021-08-17 20:49:12 +02:00
dependabot[bot]
1bb0f31223
build(deps-dev): bump @typescript-eslint/eslint-plugin (#165) 2021-08-17 20:48:56 +02:00
dependabot[bot]
af2dd0bd60
build(deps-dev): bump cypress from 8.2.0 to 8.3.0 (#163) 2021-08-17 20:48:39 +02:00
Divlo
63d7485c8d
build(deps): bump next-pwa from 5.3.0 to 5.2.24 2021-08-16 15:38:56 +02:00
Divlo
74fde0ea40
build(deps): update latest version 2021-08-16 15:31:35 +02:00
dependabot[bot]
0d2b318818
build(deps): bump node from 16.6.1 to 16.6.2 (#155) 2021-08-13 15:50:10 +02:00
Divlo
266b3f8589
test: add cypress e2e (#159) 2021-08-13 15:48:29 +02:00
dependabot[bot]
f7d304ca80
build(deps): bump read-pkg from 5.2.0 to 6.0.0 (#136) 2021-08-12 11:03:37 +02:00
semantic-release-bot
63017953d7
chore(release): 1.3.4 [skip ci] 2021-08-11 23:29:15 +00:00
dependabot[bot]
20600eb976
build(deps): bump crazy-max/ghaction-import-gpg from 3.1.0 to 3.2.0 (#154) 2021-08-12 01:21:54 +02:00
dependabot[bot]
7f920b77aa
build(deps): bump actions/setup-node from 2.3.1 to 2.4.0 (#152) 2021-08-12 01:21:40 +02:00
Divlo
4f5dfc63ea
perf: reduce build size + add next-secure-headers 2021-08-12 01:19:11 +02:00
dependabot[bot]
712805df93
build(deps): bump actions/setup-node from 2.3.0 to 2.3.1 (#144) 2021-08-04 10:39:56 +02:00
dependabot[bot]
cd68f597c9
build(deps-dev): bump @typescript-eslint/eslint-plugin (#143) 2021-08-04 10:39:35 +02:00
dependabot[bot]
7ec3fe8ced
build(deps-dev): bump eslint from 7.31.0 to 7.32.0 (#141) 2021-08-04 10:39:12 +02:00
dependabot[bot]
90d22b2c7f
build(deps-dev): bump @types/node from 16.4.7 to 16.4.10 (#142) 2021-08-04 10:38:47 +02:00
dependabot[bot]
4b06fd0522
build(deps): bump node from 16.5.0 to 16.6.1 (#145) 2021-08-04 10:38:28 +02:00
dependabot[bot]
b4427f36c2
build(deps): bump @fortawesome/react-fontawesome to 0.1.15 (#146) 2021-08-04 10:38:07 +02:00
dependabot[bot]
b758c64e02
build(deps-dev): bump @types/node from 16.4.6 to 16.4.7 (#139) 2021-07-30 07:21:41 +02:00
dependabot[bot]
04469b83ea
build(deps-dev): bump @types/node from 16.4.4 to 16.4.6 (#138) 2021-07-29 08:16:05 +02:00
dependabot[bot]
36d54666a0
build(deps-dev): bump @types/node from 16.4.3 to 16.4.4 (#137) 2021-07-28 08:17:45 +02:00
Divlo
a34cefec6e
chore(release): set correctly env [skip ci] 2021-07-27 21:34:08 +02:00
Divlo
5c343395df
chore(release): 1.3.3 [skip ci] 2021-07-27 19:06:15 +00:00
Divlo
028815a7b6
fix: sign release commit and backmerge to develop 2021-07-27 21:01:33 +02:00
Divlo
a2ad591d6d chore(release): 1.3.2 [skip ci] 2021-07-27 18:04:31 +00:00
Divlo
7087911756
ci(release): add GH_TOKEN 2021-07-27 20:01:21 +02:00
Divlo
35b1c4169f
ci(release): persist-credentials: false 2021-07-27 19:52:24 +02:00
Divlo
4c351b8179
chore: update message of release commit 2021-07-27 19:35:08 +02:00
Divlo
701dccc018
fix: include version in release 2021-07-27 19:26:08 +02:00
Divlo
5133765f94
chore: add Vercel CLI 2021-07-27 19:00:21 +02:00
Divlo
3b208c6614
fix: disable hover:underline on link of Respository (open source) 2021-07-27 18:31:41 +02:00
Divlo
52870fd6a4 fix: replace facebook/jest to vercel/styled-jsx 2021-07-27 11:44:44 +00:00
Divlo
3a278fec10 feat: add version number in footer 2021-07-27 11:36:35 +00:00
dependabot[bot]
669f592a9f
build(deps-dev): bump @typescript-eslint/eslint-plugin (#135) 2021-07-27 11:02:51 +02:00
dependabot[bot]
9c0a3ea1af
build(deps-dev): bump @types/react from 17.0.14 to 17.0.15 (#134) 2021-07-26 06:50:08 +02:00
dependabot[bot]
fa8d70bf82
build(deps-dev): bump @commitlint/cli from 12.1.4 to 13.1.0 (#129) 2021-07-26 06:49:55 +02:00
dependabot[bot]
3293fd488e
build(deps-dev): bump lint-staged from 11.1.0 to 11.1.1 (#130) 2021-07-26 06:49:39 +02:00
dependabot[bot]
426bee09da
build(deps-dev): bump tailwindcss from 2.2.6 to 2.2.7 (#133) 2021-07-26 06:49:16 +02:00
dependabot[bot]
dbc6c84895
build(deps-dev): bump @commitlint/config-conventional to 13.1.0 (#128) 2021-07-26 06:48:57 +02:00
dependabot[bot]
fab539c9d7
build(deps-dev): bump @types/node from 16.4.1 to 16.4.3 (#132) 2021-07-26 06:48:32 +02:00
dependabot[bot]
176ab64a37
build(deps-dev): bump markdownlint-cli from 0.27.1 to 0.28.1 (#131) 2021-07-26 06:48:10 +02:00
dependabot[bot]
1b56bbc694
build(deps-dev): bump @types/node from 16.4.0 to 16.4.1 (#126) 2021-07-23 08:11:04 +02:00
dependabot[bot]
0f9a968081
build(deps-dev): bump lint-staged from 11.0.1 to 11.1.0 (#127) 2021-07-23 08:10:52 +02:00
dependabot[bot]
6b9ff4100d
build(deps-dev): bump tailwindcss from 2.2.4 to 2.2.6 (#124) 2021-07-22 07:57:57 +02:00
dependabot[bot]
870bc3d26b
build(deps-dev): bump postcss from 8.3.5 to 8.3.6 (#125) 2021-07-22 07:55:45 +02:00
dependabot[bot]
41e4b93427
build(deps-dev): bump @typescript-eslint/eslint-plugin (#120) 2021-07-21 12:57:31 +02:00
dependabot[bot]
72ae4ef01d
build(deps): bump next-pwa from 5.2.23 to 5.2.24 (#121) 2021-07-21 12:57:20 +02:00
dependabot[bot]
748259b57c
build(deps): bump actions/setup-node from 2.2.0 to 2.3.0 (#122) 2021-07-21 12:57:09 +02:00
dependabot[bot]
fafd606c18
build(deps-dev): bump @types/node from 16.3.3 to 16.4.0 (#123) 2021-07-21 12:56:56 +02:00
dependabot[bot]
b8c3022532
build(deps-dev): bump @types/node from 16.3.2 to 16.3.3 (#119) 2021-07-19 11:32:26 +02:00
dependabot[bot]
46adaee53f
build(deps-dev): bump eslint from 7.30.0 to 7.31.0 (#118) 2021-07-19 11:32:04 +02:00
dependabot[bot]
508114152c
build(deps-dev): bump @types/node from 16.3.1 to 16.3.2 (#116) 2021-07-15 17:19:26 +02:00
dependabot[bot]
b2852d172c
build(deps-dev): bump lint-staged from 11.0.0 to 11.0.1 (#115) 2021-07-15 17:19:13 +02:00
dependabot[bot]
16e3b1e465
build(deps): bump node from 16.4.2 to 16.5.0 (#117) 2021-07-15 17:19:01 +02:00
dependabot[bot]
ae610ff816
build(deps-dev): bump @typescript-eslint/eslint-plugin to 4.28.3 (#114) 2021-07-13 23:24:17 +02:00
dependabot[bot]
7c001f3c30
build(deps-dev): bump autoprefixer from 10.3.0 to 10.3.1 (#113) 2021-07-13 23:18:52 +02:00
dependabot[bot]
7eada755e1
build(deps-dev): bump autoprefixer from 10.2.6 to 10.3.0 (#112) 2021-07-12 13:28:27 +02:00
dependabot[bot]
6909304f15
build(deps-dev): bump @types/node from 16.0.3 to 16.3.1 (#111) 2021-07-10 19:07:50 +02:00
dependabot[bot]
25b2f05170
build(deps-dev): bump @types/react from 17.0.13 to 17.0.14 (#107) 2021-07-10 19:06:30 +02:00
dependabot[bot]
0cc83a811c
build(deps): bump node from 16.4.0 to 16.4.2 (#106) 2021-07-10 19:06:10 +02:00
dependabot[bot]
78b14c2620
build(deps-dev): bump @types/node from 16.0.0 to 16.0.3 (#110) 2021-07-10 19:05:51 +02:00
dependabot[bot]
eebdf0edd2
build(deps): bump @fontsource/montserrat from 4.4.5 to 4.5.0 (#109) 2021-07-10 19:05:40 +02:00
dependabot[bot]
62e8005081
build(deps-dev): bump @types/jest from 26.0.23 to 26.0.24 (#105) 2021-07-07 19:04:04 +02:00
dependabot[bot]
6473e9da7d
build(deps-dev): bump husky from 7.0.0 to 7.0.1 (#104) 2021-07-07 19:03:52 +02:00
dependabot[bot]
1805997f59
build(deps): bump node from 16.3.0 to 16.4.0 (#103) 2021-07-07 19:03:39 +02:00
dependabot[bot]
fb25c12883
build(deps-dev): bump @typescript-eslint/eslint-plugin to 4.28.2 (#102) 2021-07-06 09:02:07 +02:00
dependabot[bot]
849b758fab
build(deps): bump next-pwa to 5.2.23 (#101) 2021-07-06 09:01:44 +02:00
Divlo
ccf5d42c19
feat: add Open source section 2021-07-04 19:56:05 +02:00
Divlo
2d68ce59ca
docs(readme): usage of json instead of TypeScript (About) 2021-07-04 15:42:52 +02:00
dependabot[bot]
4e6531e341
build(deps-dev): bump @types/react from 17.0.11 to 17.0.13 (#98) 2021-07-02 10:39:07 +02:00
dependabot[bot]
8f2d0817ce
build(deps-dev): bump husky from 6.0.0 to 7.0.0 (#99) 2021-07-02 10:38:56 +02:00
dependabot[bot]
7674401e7c
build(deps-dev): bump @types/node from 15.12.5 to 15.14.0 (#100) 2021-07-02 10:37:50 +02:00
dependabot[bot]
61983dfc4a
build(deps): bump actions/setup-node from 2.1.5 to 2.2.0 (#96) 2021-07-01 09:14:38 +02:00
dependabot[bot]
ed47407b7d
build(deps-dev): bump typescript from 4.3.4 to 4.3.5 (#97) 2021-07-01 09:00:18 +02:00
dependabot[bot]
0a79754978
build(deps-dev): bump babel-jest to 27.0.6 (#94) 2021-06-29 11:40:39 +02:00
dependabot[bot]
725afecbf3
build(deps-dev): bump jest to 27.0.6 (#95) 2021-06-29 11:39:23 +02:00
dependabot[bot]
1bf79e55e1
build(deps-dev): bump @typescript-eslint/eslint-plugin to 4.28.1 (#93) 2021-06-29 11:38:57 +02:00
dependabot[bot]
3a369c49fa
build(deps-dev): bump prettier from 2.3.1 to 2.3.2 (#90) 2021-06-28 12:03:12 +02:00
dependabot[bot]
e78ccf3db4
build(deps-dev): bump @types/node from 15.12.4 to 15.12.5 (#91) 2021-06-28 12:02:52 +02:00
dependabot[bot]
acafe71f31
build(deps): bump next-themes from 0.0.14 to 0.0.15 (#92) 2021-06-28 12:02:15 +02:00
divlo
3ef876b737
feat: add GitLab and npm social medias like README 2021-06-24 20:10:53 +02:00
divlo
b30bbc99e9
feat: add new Leon portfolio 2021-06-24 19:57:06 +02:00
divlo
235c072c21
feat: add new skills 2021-06-24 19:46:44 +02:00
divlo
f5bdd85b73
fix: set Divlo in Header in yellow 2021-06-24 18:39:08 +02:00
divlo
b81ae5a9a6
fix: replace "My section" to "Section", delete "My" 2021-06-24 18:32:13 +02:00
dependabot[bot]
1ea5e3f323
build(deps-dev): bump tailwindcss to 2.2.4 (#89) 2021-06-24 09:26:46 +02:00
dependabot[bot]
f6eaef54b9
build(deps-dev): bump @testing-library/react to 12.0.0 (#88) 2021-06-24 09:26:31 +02:00
dependabot[bot]
5b14361d74
build(deps-dev): bump eslint-config-next to 11.0.1 (#84) 2021-06-23 13:28:18 +02:00
dependabot[bot]
d1f9c0eb2f
build(deps-dev): bump @typescript-eslint/eslint-plugin to 4.28.0 (#83) 2021-06-23 13:28:02 +02:00
dependabot[bot]
95b27abec1
build(deps-dev): bump babel-jest to 27.0.5 (#85) 2021-06-23 13:27:45 +02:00
dependabot[bot]
228e987d8b
build(deps): bump next to 11.0.1 (#86) 2021-06-23 13:27:29 +02:00
dependabot[bot]
7c44102afd
build(deps-dev): bump jest to 27.0.5 (#87) 2021-06-23 13:27:14 +02:00
dependabot[bot]
b8410e5628
build(deps-dev): bump tailwindcss to 2.2.2 (#81) 2021-06-21 07:05:31 +02:00
dependabot[bot]
d6f0b12b17
build(deps-dev): bump @types/node to 15.12.4 (#80) 2021-06-21 07:04:50 +02:00
dependabot[bot]
b02e31c373
build(deps-dev): bump eslint to 7.29.0 (#82) 2021-06-21 07:04:09 +02:00
dependabot[bot]
e012d41929
build(deps): bump html-react-parser to 1.2.7 (#79) 2021-06-21 07:03:36 +02:00
dependabot[bot]
4bd77b45e4
build(deps-dev): bump tailwindcss to 2.2.0 (#77) 2021-06-18 11:19:52 +02:00
dependabot[bot]
e43f572588
build(deps-dev): bump postcss to 8.3.5 (#78) 2021-06-18 11:18:44 +02:00
dependabot[bot]
9aecb3cab9
build(deps-dev): bump typescript to 4.3.4 (#76) 2021-06-18 11:18:21 +02:00
dependabot[bot]
f1256ab23f
build(deps-dev): bump typescript to 4.3.3 (#75) 2021-06-17 12:21:16 +02:00
divlo
892bf0e87a build(deps): bump next to 11.0.0 2021-06-15 20:35:52 +02:00
dependabot[bot]
61ef6c5525
build(deps-dev): bump postcss from 8.3.3 to 8.3.4 (#73) 2021-06-15 11:54:11 +02:00
dependabot[bot]
38405d658e
build(deps-dev): bump @typescript-eslint/eslint-plugin to 4.27.0 (#72) 2021-06-15 11:54:01 +02:00
dependabot[bot]
f3b7c315f0
build(deps-dev): bump postcss from 8.3.2 to 8.3.3 (#71) 2021-06-14 10:20:21 +02:00
divlo
6950286eec chore: fix some imperfections 2021-06-13 01:53:13 +02:00
divlo
60f966c493 chore: usage of node >= 14.0.0 2021-06-12 22:31:34 +00:00
divlo
7af4d3c512 chore: add devcontainer 2021-06-12 22:30:02 +00:00
dependabot[bot]
d9b53480be
build(deps-dev): bump postcss from 8.3.1 to 8.3.2 (#70) 2021-06-11 09:02:51 +02:00
dependabot[bot]
a574a8ffd1
build(deps-dev): bump postcss from 8.3.0 to 8.3.1 (#69) 2021-06-10 08:48:34 +02:00
336 changed files with 22611 additions and 43581 deletions

View File

@ -1,3 +0,0 @@
{
"presets": ["next/babel"]
}

View File

@ -1 +0,0 @@
{ "extends": ["@commitlint/config-conventional"] }

View File

@ -1,11 +1,38 @@
**/.git
**/.turbo
**/.next
**/out
**/dist
**/build
**/storybook-static
**/coverage
**/node_modules
# envs
.env
.env.production
.env.development
secrets
# IDEs and editors
.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
.vscode
.git
.next
build
coverage
dist
node_modules
out
**/workbox-*.js
**/sw.js
**/__test__/**
# misc
.DS_Store
*.pem
Dockerfile
README.md
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

View File

@ -1,4 +1,4 @@
# For more information see: https://editorconfig.org/
# https://editorconfig.org/
root = true

View File

@ -1,2 +1,2 @@
COMPOSE_PROJECT_NAME=divlo.fr
PORT=3000
TZ=Europe/Paris
WEBSITE_PORT=3000

View File

@ -1,6 +0,0 @@
.next
.lighthouseci
node_modules
next-env.d.ts
**/workbox-*.js
**/sw.js

View File

@ -1,15 +0,0 @@
{
"extends": ["standard-with-typescript", "eslint-config-prettier"],
"plugins": ["eslint-plugin-prettier"],
"parserOptions": {
"project": "./tsconfig.json"
},
"env": {
"node": true,
"browser": true,
"jest": true
},
"rules": {
"prettier/prettier": "error"
}
}

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
* text=auto eol=lf

View File

@ -1,8 +1,8 @@
---
name: '🐛 Bug Report'
about: 'Report an unexpected problem or unintended behavior.'
title: '[Bug]'
labels: 'bug'
name: "🐛 Bug Report"
about: "Report an unexpected problem or unintended behavior."
title: "[Bug]"
labels: "bug"
---
<!--

View File

@ -1,8 +1,8 @@
---
name: '📜 Documentation'
about: 'Correct spelling errors, improvements or additions to documentation files (README, CONTRIBUTING...).'
title: '[Documentation]'
labels: 'documentation'
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. -->

View File

@ -1,8 +1,8 @@
---
name: '✨ Feature Request'
about: 'Suggest a new feature idea.'
title: '[Feature]'
labels: 'feature request'
name: "✨ Feature Request"
about: "Suggest a new feature idea."
title: "[Feature]"
labels: "feature request"
---
<!-- Please make sure your issue has not already been fixed. -->

View File

@ -1,8 +1,8 @@
---
name: '🔧 Improvement'
about: 'Improve structure/format/performance/refactor/tests of the code.'
title: '[Improvement]'
labels: 'improvement'
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. -->

View File

@ -1,8 +1,8 @@
---
name: '🙋 Question'
about: 'Further information is requested.'
title: '[Question]'
labels: 'question'
name: "🙋 Question"
about: "Further information is requested."
title: "[Question]"
labels: "question"
---
### Question

View File

@ -1,13 +1,6 @@
<!--
<!-- Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time. -->
Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time.
Before submitting your contribution, please take a moment to review this document:
https://github.com/Divlo/Divlo/blob/master/.github/CONTRIBUTING.md
-->
## What changes this PR introduce?
# What changes this PR introduce?
## List any relevant issue numbers

View File

@ -1,16 +0,0 @@
version: 2
updates:
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'daily'
- package-ecosystem: 'docker'
directory: '/'
schedule:
interval: 'daily'
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'daily'

View File

@ -1,126 +0,0 @@
name: 'Divlo'
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
analyze:
name: 'Analyze'
runs-on: 'ubuntu-latest'
strategy:
fail-fast: false
matrix:
language: ['javascript']
steps:
- uses: 'actions/checkout@v2.3.4'
- name: 'Initialize CodeQL'
uses: 'github/codeql-action/init@v1'
with:
languages: ${{ matrix.language }}
- name: 'Perform CodeQL Analysis'
uses: 'github/codeql-action/analyze@v1'
lint:
runs-on: 'ubuntu-latest'
steps:
- uses: 'actions/checkout@v2.3.4'
- name: 'Use Node.js'
uses: 'actions/setup-node@v2.1.5'
with:
node-version: '14.x'
- name: 'Cache dependencies'
uses: 'actions/cache@v2.1.6'
with:
path: '.npm'
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: 'Install'
run: 'npm ci --cache .npm --prefer-offline'
- run: 'npm run lint:commit -- --to "${{ github.sha }}"'
- run: 'npm run lint:docker'
- run: 'npm run lint:editorconfig'
- run: 'npm run lint:markdown'
- run: 'npm run lint:typescript'
build:
runs-on: 'ubuntu-latest'
steps:
- uses: 'actions/checkout@v2.3.4'
- name: 'Use Node.js'
uses: 'actions/setup-node@v2.1.5'
with:
node-version: '14.x'
- name: 'Cache dependencies'
uses: 'actions/cache@v2.1.6'
with:
path: '.npm'
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: 'Install'
run: 'npm ci --cache .npm --prefer-offline'
- name: 'Build'
run: 'npm run build'
- name: 'Lighthouse'
run: 'npm run lighthouse'
test:
runs-on: 'ubuntu-latest'
steps:
- uses: 'actions/checkout@v2.3.4'
- name: 'Use Node.js'
uses: 'actions/setup-node@v2.1.5'
with:
node-version: '14.x'
- name: 'Cache dependencies'
uses: 'actions/cache@v2.1.6'
with:
path: '.npm'
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: 'Install'
run: 'npm ci --cache .npm --prefer-offline'
- name: 'Test'
run: 'npm run test'
release:
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
needs: [analyze, lint, build, test]
runs-on: 'ubuntu-latest'
steps:
- uses: 'actions/checkout@v2.3.4'
- name: 'Use Node.js'
uses: 'actions/setup-node@v2.1.5'
with:
node-version: '14.x'
- name: 'Cache dependencies'
uses: 'actions/cache@v2.1.6'
with:
path: '.npm'
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: 'Install'
run: 'npm ci --cache .npm --prefer-offline'
- name: 'Release'
run: 'npm run release'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

37
.github/workflows/chromatic.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: "Chromatic"
on:
push:
branches: [develop]
pull_request:
branches: [develop, staging, main]
jobs:
chromatic:
timeout-minutes: 30
runs-on: "ubuntu-latest"
env:
DO_NOT_TRACK: "1"
TURBO_TELEMETRY_DISABLED: "1"
NEXT_TELEMETRY_DISABLED: "1"
steps:
- uses: "actions/checkout@v4.2.2"
with:
fetch-depth: 0
- uses: "pnpm/action-setup@v4.1.0"
- name: "Setup Node.js"
uses: "actions/setup-node@v4.2.0"
with:
node-version: "22.x"
cache: "pnpm"
- name: "Install dependencies"
run: "pnpm install --frozen-lockfile"
- name: "Run Chromatic"
uses: "chromaui/action@latest"
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
workingDir: "apps/storybook"

47
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,47 @@
name: "CI"
on:
push:
branches: [develop]
pull_request:
branches: [develop, staging, main]
jobs:
ci:
timeout-minutes: 30
runs-on: "ubuntu-latest"
env:
DO_NOT_TRACK: "1"
TURBO_TELEMETRY_DISABLED: "1"
NEXT_TELEMETRY_DISABLED: "1"
steps:
- uses: "actions/checkout@v4.2.2"
- uses: "pnpm/action-setup@v4.1.0"
- name: "Setup Node.js"
uses: "actions/setup-node@v4.2.0"
with:
node-version: "22.x"
cache: "pnpm"
- name: "Install dependencies"
run: "pnpm install --frozen-lockfile"
- name: "Install Playwright"
run: "pnpm exec playwright install --with-deps"
- run: "node --run lint:editorconfig"
- run: "node --run lint:markdown"
- run: "node --run lint:typescript"
- run: "node --run lint:eslint"
- run: "node --run lint:prettier"
- run: "node --run test"
- run: "node --run build"
commitlint:
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v4.2.2"
- uses: "wagoid/commitlint-github-action@v6.1.2"

58
.gitignore vendored
View File

@ -1,33 +1,38 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
node_modules
.npm
# next.js
.next
out
# production
build
dist
package-lock.json
.pnpm-store
.pnp
.pnp.js
.yarn/install-state.gz
# testing
coverage
# PWA
**/workbox-*.js
**/sw.js
# production
.next/
out/
dist/
build/
# envs
.env
.env.production
# misc
.DS_Store
*.pem
.turbo
bin/
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Storybook
*storybook.log
storybook-static
# IDEs and editors
/.idea
.idea
.project
.classpath
.c9/
@ -35,13 +40,14 @@ npm-debug.log*
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# local env files
.env
.env.production
.env*.local
# misc
.DS_Store
.lighthouseci
# vercel
.vercel
# typescript
*.tsbuildinfo
# next-env.d.ts

View File

@ -1,20 +0,0 @@
image: 'gitpod/workspace-full'
tasks:
- before: 'cp .env.example .env && npm install --global npm@7'
init: 'npm clean-install'
command: 'npm run dev'
ports:
- port: 3000
onOpen: 'open-preview'
github:
prebuilds:
master: true
branches: true
pullRequests: true
pullRequestsFromForks: true
addComment: true
addBadge: true
addLabel: true

1
.husky/.gitignore vendored
View File

@ -1 +0,0 @@
_

View File

@ -1,4 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run lint:commit -- --edit

View File

@ -1,4 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run lint:staged

View File

@ -1,30 +0,0 @@
{
"ci": {
"collect": {
"startServerCommand": "npm run start",
"startServerReadyPattern": "ready on",
"startServerReadyTimeout": 20000,
"url": ["http://localhost:3000/"],
"numberOfRuns": 3
},
"assert": {
"preset": "lighthouse:recommended",
"assertions": {
"legacy-javascript": "off",
"unused-javascript": "off",
"uses-rel-preload": "off",
"csp-xss": "off",
"canonical": "off",
"unsized-images": "off",
"uses-responsive-images": "off",
"bypass": "warning",
"color-contrast": "warning",
"preload-lcp-image": "warning"
}
},
"upload": {
"target": "temporary-public-storage"
},
"server": {}
}
}

View File

@ -1,11 +0,0 @@
{
"*": ["editorconfig-checker"],
"*.{js,ts,jsx,tsx}": [
"prettier --write",
"eslint --fix",
"jest --findRelatedTests"
],
"*.{css,yml,json}": ["prettier --write"],
"*.{md}": ["prettier --write", "markdownlint --dot --fix"],
"./Dockerfile": ["dockerfilelint"]
}

16
.markdownlint-cli2.mjs Normal file
View File

@ -0,0 +1,16 @@
import relativeLinksRule from "markdownlint-rule-relative-links"
const config = {
config: {
extends: "markdownlint/style/prettier",
default: true,
"relative-links": true,
"no-duplicate-heading": false,
"no-inline-html": false,
},
globs: ["**/*.md"],
ignores: ["**/node_modules"],
customRules: [relativeLinksRule],
}
export default config

View File

@ -1,7 +0,0 @@
{
"default": true,
"MD013": false,
"MD024": false,
"MD033": false,
"MD041": false
}

1
.npmrc
View File

@ -1 +0,0 @@
save-exact=true

View File

@ -1,8 +0,0 @@
.next
.lighthouseci
node_modules
next-env.d.ts
package.json
package-lock.json
**/workbox-*.js
**/sw.js

13
.prettierrc.json Normal file → Executable file
View File

@ -1,6 +1,13 @@
{
"singleQuote": true,
"jsxSingleQuote": true,
"semi": false,
"trailingComma": "none"
"plugins": ["prettier-plugin-tailwindcss"],
"tailwindFunctions": ["classNames", "cva"],
"overrides": [
{
"files": "pnpm-lock.yaml",
"options": {
"rangeEnd": 0
}
}
]
}

View File

@ -1,18 +0,0 @@
{
"branches": ["master"],
"plugins": [
[
"@semantic-release/commit-analyzer",
{
"preset": "conventionalcommits"
}
],
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits"
}
],
"@semantic-release/github"
]
}

View File

@ -3,11 +3,11 @@
"editorconfig.editorconfig",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"divlo.vscode-styled-jsx-syntax",
"divlo.vscode-styled-jsx-languageserver",
"davidanson.vscode-markdownlint",
"bradlc.vscode-tailwindcss",
"mikestead.dotenv",
"coenraads.bracket-pair-colorizer",
"davidanson.vscode-markdownlint"
"ms-azuretools.vscode-docker",
"antfu.pnpm-catalog-lens",
"Lokalise.i18n-ally"
]
}

43
.vscode/react.code-snippets vendored Normal file
View File

@ -0,0 +1,43 @@
{
"React Component": {
"scope": "typescriptreact",
"prefix": "rfc",
"body": [
"export interface ${1:ComponentName}Props {}",
"",
"export const ${1:ComponentName}: React.FC<${1:ComponentName}Props> = () => {",
" return (",
" <div>",
" <h1>${1:ComponentName}</h1>",
" </div>",
" )",
"}",
"",
],
"description": "React Component",
},
"React Component Story": {
"scope": "typescriptreact",
"prefix": "rfcs",
"body": [
"import type { Meta, StoryObj } from \"@storybook/react\"",
"",
"import { ${1:ComponentName} as ${1:ComponentName}Component } from \"./${1:ComponentName}.tsx\"",
"",
"const meta = {",
" title: \"${1:ComponentName}\",",
" component: ${1:ComponentName}Component",
"} satisfies Meta<typeof ${1:ComponentName}Component>",
"",
"export default meta",
"",
"type Story = StoryObj<typeof meta>",
"",
"export const ${1:ComponentName}: Story = {",
" args: {}",
"}",
"",
],
"description": "React Component Story",
},
}

20
.vscode/settings.json vendored
View File

@ -1,9 +1,23 @@
{
"typescript.tsdk": "node_modules/typescript/lib",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.bracketPairColorization.enabled": true,
"editor.wordWrap": "on",
"prettier.configPath": ".prettierrc.json",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": true
}
"source.fixAll": "explicit",
"source.organizeImports": "never"
},
"tailwindCSS.experimental.classRegex": [
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
["cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
],
"i18n-ally.localesPaths": ["./packages/i18n/src/translations/"],
"i18n-ally.keystyle": "nested",
"i18n-ally.sortKeys": false,
"i18n-ally.sourceLanguage": "en-US",
"i18n-ally.displayLanguage": "en-US",
"i18n-ally.enabledFrameworks": ["next-intl", "general"],
"i18n-ally.extract.autoDetect": true
}

View File

@ -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

View File

@ -1,6 +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
**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
@ -11,64 +15,77 @@ Thanks a lot for your interest in contributing to **divlo.fr**! 🎉
## Pull Requests
- **Please first discuss** the change you wish to make via [issue](https://github.com/Divlo/Divlo/issues) before making a change. It might avoid a waste of your time.
- **Please first discuss** the change you wish to make via [issue](https://github.com/theoludwig/theoludwig/issues) before making a change. It might avoid a waste of your time.
- Ensure your code respect [Typescript Standard Style](https://www.npmjs.com/package/ts-standard).
- Ensure your code respect linting.
- 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
The commit message guidelines respect [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional) and [Semantic Versioning](https://semver.org/) for releases.
### Types
Types define which kind of changes you made to the project.
| Types | Description |
| -------- | ------------------------------------------------------------------------------------------------------------ |
| feat | A new feature. |
| fix | A bug fix. |
| docs | Documentation only changes. |
| style | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc). |
| refactor | A code change that neither fixes a bug nor adds a feature. |
| perf | A code change that improves performance. |
| test | Adding missing tests or correcting existing tests. |
| build | Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm). |
| ci | Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs). |
| chore | Other changes that don't modify src or test files. |
| revert | Reverts a previous commit. |
### Scopes
Scopes define what part of the code changed.
The commit message guidelines adheres to [Conventional Commits](https://www.conventionalcommits.org/) and [Semantic Versioning](https://semver.org/) for releases.
## Getting Started
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Divlo/Divlo)
### Prerequisites
- [Node.js](https://nodejs.org/) >= 22.12.0 [(`nvm install 22`)](https://nvm.sh)
- [pnpm](https://pnpm.io/) >= 10.2.1 [(`corepack enable`)](https://nodejs.org/docs/latest-v22.x/api/corepack.html)
- [Docker](https://www.docker.com/)
### Installation
```sh
# Clone the repository
git clone https://github.com/Divlo/Divlo.git
git clone git@github.com:theoludwig/theoludwig.git
# Go to the project root
cd Divlo
cd theoludwig
# Configure environment variables
cp .env.example .env
cp apps/website/.env.example apps/website/.env
# Install dependencies
pnpm install --frozen-lockfile
# Install Playwright browser binaries and their dependencies (tests)
pnpm exec playwright install --with-deps
```
### Development environment with [Docker](https://www.docker.com/)
### Development
```sh
# Start the development server
node --run dev
# Lint
node --run lint:editorconfig
node --run lint:markdown
node --run lint:typescript
node --run lint:eslint
node --run lint:prettier
# Tests
node --run test
# Build
node --run build
# To execute a command in a specific package (e.g: packages/utils)
cd packages/utils
node --run test
```
### Production environment with [Docker](https://www.docker.com/)
```sh
# Setup and run all the services for you
docker-compose up --build
VERSION=$(git describe --tags) docker compose up --build --detach
```
### Services started
#### Services started
- website : `http://localhost:3000`
`theoludwig`: <http://localhost:3000>

View File

@ -1,11 +0,0 @@
FROM node:16.3.0
WORKDIR /usr/src/app
RUN chown --recursive node:node /usr/src/app
COPY --chown=node:node ./package*.json ./
RUN npm install
COPY --chown=node:node ./ ./
USER node
RUN npm run build
CMD ["npm", "run", "start", "--", "--port", "${PORT}"]

View File

@ -1,6 +1,6 @@
MIT License
# MIT License
Copyright (c) Divlo
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

View File

@ -1,49 +1,45 @@
<h1 align="center"><a href="https://divlo.fr/">Divlo</a></h1>
<h1 align="center"><a href="https://theoludwig.fr/">Théo LUDWIG</a></h1>
<p align="center">
<strong>Developer Full Stack Junior • Passionate about High-Tech</strong>
<strong>Developer Full Stack • Open-Source Enthusiast</strong>
</p>
<p align="center">
<a href="https://github.com/Divlo/Divlo/actions?query=workflow%3A%22Divlo%22"><img src="https://github.com/Divlo/Divlo/actions/workflows/Divlo.yml/badge.svg?branch=master" alt="Divlo's CI" /></a>
<a href="https://github.com/Divlo"><img alt="GitHub" src="https://img.shields.io/badge/-GitHub-5A5A5A?style=flat&labelColor=5A5A5A&logo=github&logoColor=white"/></a>
<a href="https://gitlab.com/Divlo"><img alt="GitLab" src="https://img.shields.io/badge/-GitLab-303030?style=flat&labelColor=303030&logo=gitlab&logoColor=white"/></a>
<a href="https://www.npmjs.com/~divlo"><img alt="npm" src="https://img.shields.io/badge/-npm-c4302b?style=flat&labelColor=c4302b&logo=npm&logoColor=white"/></a>
<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://github.com/theoludwig"><img alt="GitHub" src="https://img.shields.io/badge/-GitHub-5A5A5A?style=flat&labelColor=5A5A5A&logo=github&logoColor=white"/></a>
<a href="https://gitlab.com/theoludwig"><img alt="GitLab" src="https://img.shields.io/badge/-GitLab-303030?style=flat&labelColor=303030&logo=gitlab&logoColor=white"/></a>
<a href="https://www.npmjs.com/~theoludwig"><img alt="npm" src="https://img.shields.io/badge/-npm-c4302b?style=flat&labelColor=c4302b&logo=npm&logoColor=white"/></a>
<a href="https://twitter.com/theoludwig_"><img alt="Twitter" src="https://img.shields.io/badge/-Twitter-1ca0f1?style=flat&labelColor=1ca0f1&logo=x&logoColor=white"/></a>
<a href="https://www.youtube.com/@theo_ludwig"><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/theoludwig"><img alt="Twitch" src="https://img.shields.io/badge/-Twitch-9147FF?style=flat&labelColor=9147FF&logo=twitch&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 />
## 📜 About
```typescript
export interface Divlo {
pronouns: 'He' | 'Him'
birthDate: '31/03/2003'
nationality: 'Alsace, France'
interests: [
'Developer Full Stack Junior',
'Passionate about High-Tech',
'Open-Source enthusiast'
]
skills: {
languages: ['JavaScript', 'TypeScript', 'Python', 'Dart']
frontEnd: ['HTML', 'CSS', 'SASS', 'React.js (+ Next.js)', 'Flutter']
backEnd: ['Node.js', 'Strapi', 'MySQL']
tools: ['Ubuntu', 'Hyper Terminal', 'VSCode', 'Git', 'Docker']
```json
{
"name": "Théo LUDWIG",
"pronouns": "He/Him",
"birthDate": "2003-03-31",
"nationality": "Alsace, France",
"interests": ["Developer Full Stack", "Open-Source Enthusiast"],
"skills": {
"programmingLanguages": ["JavaScript/TypeScript", "Python", "C/C++", "PHP"],
"frontend": ["HTML/CSS", "Tailwind CSS", "React.js/Next.js"],
"backend": ["Laravel", "Node.js", "Fastify", "PostgreSQL"],
"tools": ["GNU/Linux", "Arch Linux", "Visual Studio Code", "Git", "Docker"]
}
}
```
<hr />
## 📈 Stats
## 📈 Statistics
<p align=center>
<img height=175 align="center" src="https://github-readme-stats.vercel.app/api?username=Divlo&show_icons=true&theme=dark" />
<img height=175 align="center" src="https://github-readme-stats.vercel.app/api/top-langs/?username=Divlo&hide=html,css&langs_count=8&layout=compact&theme=dark" />
<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/top-langs/?username=theoludwig&hide=html,css,javascript&langs_count=8&layout=compact&theme=dark" alt="Théo LUDWIG's Programming Languages" />
</p>

View File

@ -1,10 +0,0 @@
import { render } from '@testing-library/react'
import Error404 from 'pages/404'
describe('GET /404', () => {
it('should render', async () => {
const { getByText } = render(<Error404 />)
expect(getByText('404')).toBeInTheDocument()
})
})

View File

@ -1,10 +0,0 @@
import { render } from '@testing-library/react'
import Error500 from 'pages/500'
describe('GET /500', () => {
it('should render', async () => {
const { getByText } = render(<Error500 />)
expect(getByText('500')).toBeInTheDocument()
})
})

View File

@ -0,0 +1,37 @@
import type { StorybookConfig } from "@storybook/nextjs"
const config: StorybookConfig = {
core: {
disableTelemetry: true,
},
docs: {
defaultName: "Documentation",
},
stories: [
"../../../packages/ui/src/**/*.stories.tsx",
"../../../packages/blog/src/**/*.stories.tsx",
"../stories/*.mdx",
],
addons: [
"@chromatic-com/storybook",
"@storybook/addon-essentials",
"@storybook/addon-storysource",
"@storybook/addon-a11y",
"@storybook/addon-interactions",
"storybook-dark-mode",
],
framework: {
name: "@storybook/nextjs",
options: {},
},
features: {
experimentalRSC: true,
},
typescript: {
check: false,
reactDocgen: "react-docgen-typescript",
},
staticDirs: ["../../website/public"],
}
export default config

View File

@ -0,0 +1,57 @@
import "@repo/config-tailwind/styles.css"
import "./storybook-css-overrides.css"
import i18nMessages from "@repo/i18n/translations/en-US.json"
import { LOCALE_DEFAULT, TIMEZONE } from "@repo/utils/constants"
import type { Preview } from "@storybook/react"
import { NextIntlClientProvider } from "next-intl"
import { ThemeProvider as NextThemeProvider } from "next-themes"
import React from "react"
const preview: Preview = {
globals: {
a11y: {
manual: true,
},
},
parameters: {
nextjs: {
appDirectory: true,
},
options: {
storySort: {
order: ["Design System", "Layout", "Errors"],
},
},
backgrounds: { disable: true },
darkMode: {
darkClass: "dark",
lightClass: "light",
classTarget: "html",
stylePreview: true,
},
controls: {
disableSaveFromUI: true,
matchers: {
color: /(background|color)$/i,
date: /date$/i,
},
},
},
decorators: [
(Story) => {
return (
<NextThemeProvider enableColorScheme={false}>
<NextIntlClientProvider
messages={i18nMessages}
locale={LOCALE_DEFAULT}
timeZone={TIMEZONE}
>
<Story />
</NextIntlClientProvider>
</NextThemeProvider>
)
},
],
}
export default preview

View File

@ -0,0 +1,3 @@
body {
overflow: auto !important;
}

View File

@ -0,0 +1,35 @@
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

View File

@ -0,0 +1,7 @@
{
"projectId": "Project:66a7a85ea85df74afbec7682",
"buildScriptName": "build",
"storybookBaseDir": "apps/storybook",
"onlyChanged": true,
"zip": true
}

View File

@ -0,0 +1,13 @@
import typescriptESLint from "typescript-eslint"
import config from "@repo/config-eslint"
export default typescriptESLint.config(...config, {
files: ["**/*.ts", "**/*.tsx"],
languageOptions: {
parser: typescriptESLint.parser,
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
})

View File

@ -0,0 +1,84 @@
import http from "node:http"
import fs from "node:fs"
import path from "node:path"
import util from "node:util"
import mime from "mime"
const MIMETYPE_DEFAULT = "application/octet-stream"
const args = util.parseArgs({
options: {
path: { type: "string", default: "public", required: true },
port: { type: "string", default: "3000", required: true },
host: { type: "string", default: "0.0.0.0" },
},
})
const host = args.values.host
const basePath = args.values.path
const port = Number.parseInt(args.values.port, 10)
if (Number.isNaN(port)) {
console.error("Error: Invalid port number.")
process.exit(1)
}
const serverURL = `http://${host}:${port}`
const server = http.createServer(async (request, response) => {
if (request.url == null) {
response.writeHead(400, { "Content-Type": "text/plain" })
response.end("Bad Request")
return
}
const url = new URL(request.url, serverURL)
const urlPath = url.pathname
const filePath = path.join(process.cwd(), basePath, urlPath)
try {
const stat = await fs.promises.stat(filePath)
if (stat.isDirectory()) {
const indexFile = path.join(filePath, "index.html")
try {
const fileContent = await fs.promises.readFile(indexFile)
response.writeHead(200, { "Content-Type": "text/html" })
response.end(fileContent)
} catch {
response.writeHead(403, { "Content-Type": "text/plain" })
response.end("Error: Directory listing not allowed.")
}
} else {
const mimeType = mime.getType(filePath) ?? MIMETYPE_DEFAULT
const fileContent = await fs.promises.readFile(filePath)
response.writeHead(200, { "Content-Type": mimeType })
response.end(fileContent)
}
} catch (error) {
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
response.writeHead(404, { "Content-Type": "text/plain" })
response.end("Error: File not found.")
} else {
response.writeHead(500, { "Content-Type": "text/plain" })
response.end("Error: Internal Server Error.")
}
}
})
const gracefulShutdown = (): void => {
server.close()
process.exit(0)
}
process.on("SIGTERM", gracefulShutdown)
process.on("SIGINT", gracefulShutdown)
server.listen(
{
host,
port,
},
() => {
console.log(
`HTTP Server is listening at ${util.styleText("cyan", serverURL)}`,
)
console.log(`Serving files from: \`${basePath}\``)
},
)

View File

@ -0,0 +1,57 @@
{
"name": "@repo/storybook",
"version": "0.0.0-develop",
"private": true,
"type": "module",
"scripts": {
"build": "storybook build",
"dev": "storybook dev --port 6006 --no-open",
"start": "node --experimental-strip-types http-server.ts --path=storybook-static --port=6006",
"test": "start-server-and-test \"start\" http://localhost:6006 \"test:storybook\"",
"test:dev": "start-server-and-test \"dev\" http://localhost:6006 \"test:storybook\"",
"test:storybook": "test-storybook --testTimeout=60000 --maxWorkers=2",
"chromatic": "chromatic"
},
"dependencies": {
"@repo/config-tailwind": "workspace:*",
"@repo/i18n": "workspace:*",
"@repo/ui": "workspace:*",
"@repo/utils": "workspace:*",
"@repo/blog": "workspace:*",
"next": "catalog:",
"next-intl": "catalog:",
"next-themes": "catalog:",
"react": "catalog:",
"react-dom": "catalog:",
"mime": "catalog:"
},
"devDependencies": {
"@repo/config-eslint": "workspace:*",
"@repo/config-typescript": "workspace:*",
"@chromatic-com/storybook": "catalog:",
"@playwright/test": "catalog:",
"@storybook/addon-essentials": "catalog:",
"@storybook/addon-storysource": "catalog:",
"@storybook/addon-a11y": "catalog:",
"@storybook/addon-interactions": "catalog:",
"@storybook/addon-themes": "catalog:",
"@storybook/blocks": "catalog:",
"@storybook/nextjs": "catalog:",
"@storybook/react": "catalog:",
"@storybook/test": "catalog:",
"@storybook/test-runner": "catalog:",
"@types/node": "catalog:",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"axe-playwright": "catalog:",
"chromatic": "catalog:",
"eslint": "catalog:",
"start-server-and-test": "catalog:",
"storybook": "catalog:",
"storybook-dark-mode": "catalog:",
"postcss": "catalog:",
"tailwindcss": "catalog:",
"typescript-eslint": "catalog:",
"typescript": "catalog:"
}
}

View File

@ -0,0 +1,7 @@
const config = {
plugins: {
tailwindcss: {},
},
}
export default config

View File

@ -0,0 +1,31 @@
import { Meta, Title, ColorPalette, ColorItem } from "@storybook/blocks"
import tailwindConfig from "@repo/config-tailwind"
<Meta title="Design System/Colors" />
<Title>Colors</Title>
<ColorPalette>
{Object.entries(tailwindConfig.theme.extend.colors).map(
([colorName, colorValue]) => {
const colors = {}
if (typeof colorValue === "string") {
colors[colorName] = colorValue
} else {
colors.light = colorValue.DEFAULT
colors.dark = colorValue.dark
}
return (
<ColorItem
key={colorName}
title={colorName}
colors={colors}
/>
)
}
)}
</ColorPalette>

View File

@ -0,0 +1,13 @@
import sharedConfig from "@repo/config-tailwind"
/** @type {Pick<import('tailwindcss').Config, "presets" | "content">} */
const config = {
content: [
".storybook/preview.tsx",
"../../packages/ui/src/**/*.tsx",
"../../packages/blog/src/**/*.tsx",
],
presets: [sharedConfig],
}
export default config

View File

@ -0,0 +1,7 @@
{
"extends": "@repo/config-typescript/tsconfig.json",
"compilerOptions": {
"lib": ["DOM", "DOM.Iterable", "ESNext"]
},
"include": ["http-server.ts", "./.storybook/**/*.ts", "./.storybook/**/*.tsx"]
}

View File

@ -0,0 +1,9 @@
{
"$schema": "../../node_modules/turbo/schema.json",
"extends": ["//"],
"tasks": {
"test": {
"dependsOn": ["^test", "build"]
}
}
}

View File

@ -0,0 +1,4 @@
TZ=Europe/Paris
HOSTNAME=0.0.0.0
PORT=3000
NEXT_TELEMETRY_DISABLED=1

42
apps/website/Dockerfile Normal file
View File

@ -0,0 +1,42 @@
FROM node:22.13.1-slim AS node-pnpm
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN npm install --global corepack@0.31.0 && corepack enable
ENV TURBO_TELEMETRY_DISABLED=1
ENV NEXT_TELEMETRY_DISABLED=1
ENV DO_NOT_TRACK=1
WORKDIR /usr/src/app
FROM node-pnpm AS builder
COPY ./ ./
RUN pnpm install --global turbo@2.4.0
RUN turbo prune @repo/website --docker
FROM node-pnpm AS installer
ENV IS_STANDALONE=true
COPY .gitignore .gitignore
COPY --from=builder /usr/src/app/out/json/ ./
COPY --from=builder /usr/src/app/out/pnpm-lock.yaml ./pnpm-lock.yaml
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
COPY --from=builder /usr/src/app/out/full/ ./
COPY turbo.json turbo.json
ARG VERSION="0.0.0-develop"
RUN pnpm install --global replace-in-files-cli@3.0.0
RUN VERSION_STRIPPED=${VERSION#v} && replace-in-files --regex='version": *"[^"]*' --replacement='"version": "'"$VERSION_STRIPPED"'"' '**/package.json' '!**/node_modules/**'
RUN pnpm --filter=@repo/website... exec turbo run build
FROM node-pnpm AS runner
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV IS_STANDALONE=true
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 applicationrunner
USER applicationrunner
COPY --from=installer /usr/src/app/apps/website/next.config.js ./
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/static ./apps/website/.next/static
COPY --from=installer --chown=applicationrunner:nodejs /usr/src/app/apps/website/public ./apps/website/public
CMD ["node", "apps/website/server.js"]

View File

@ -0,0 +1,7 @@
import { notFound } from "next/navigation"
const CatchAllPage: React.FC = () => {
return notFound()
}
export default CatchAllPage

View File

@ -0,0 +1,66 @@
import type { Metadata } from "next"
import { notFound } from "next/navigation"
import { getBlogPostBySlug, getBlogPosts } from "@repo/blog"
import { BlogPostUI } from "@repo/blog/BlogPostUI"
import type { Locale } from "@repo/utils/constants"
import { setRequestLocale } from "next-intl/server"
interface BlogPostPageProps {
params: Promise<{
slug: string
locale: Locale
}>
}
export const generateMetadata = async (
props: BlogPostPageProps,
): Promise<Metadata> => {
const { slug } = await props.params
const blogPost = await getBlogPostBySlug(slug)
if (blogPost == null) {
return notFound()
}
const title = `${blogPost.frontmatter.title} | Théo LUDWIG`
const description = blogPost.frontmatter.description
return {
title,
description,
openGraph: {
title,
description,
},
twitter: {
title,
description,
},
}
}
export const generateStaticParams = async (): Promise<
Array<{ slug: string }>
> => {
const posts = await getBlogPosts()
return posts.map((post) => {
return {
slug: post.slug,
}
})
}
const BlogPostPage: React.FC<BlogPostPageProps> = async (props) => {
const { params } = props
const { locale, slug } = await params
// Enable static rendering
setRequestLocale(locale)
const blogPost = await getBlogPostBySlug(slug)
if (blogPost == null) {
return notFound()
}
return <BlogPostUI blogPost={blogPost} />
}
export default BlogPostPage

View File

@ -0,0 +1,57 @@
import { getBlogPosts } from "@repo/blog"
import { BlogPosts } from "@repo/blog/BlogPosts"
import type { LocaleProps } from "@repo/i18n/routing"
import { MainLayout } from "@repo/ui/Layout/MainLayout"
import {
Section,
SectionDescription,
SectionTitle,
} from "@repo/ui/Layout/Section"
import { LOCALE_DEFAULT } from "@repo/utils/constants"
import type { Metadata } from "next"
import { setRequestLocale } from "next-intl/server"
const title = "Blog | Théo LUDWIG"
const description =
"The latest news about my journey of learning computer science."
export const generateMetadata = async (): Promise<Metadata> => {
return {
title,
description,
openGraph: {
title,
description,
locale: LOCALE_DEFAULT,
},
twitter: {
title,
description,
},
}
}
interface BlogPageProps extends LocaleProps {}
const BlogPage: React.FC<BlogPageProps> = async (props) => {
const { params } = props
const { locale } = await params
// Enable static rendering
setRequestLocale(locale)
const posts = await getBlogPosts()
return (
<MainLayout>
<Section verticalSpacing horizontalSpacing>
<SectionTitle>Blog</SectionTitle>
<SectionDescription>{description}</SectionDescription>
<BlogPosts posts={posts} />
</Section>
</MainLayout>
)
}
export default BlogPage

View File

@ -0,0 +1,10 @@
"use client"
import type { ErrorServerProps } from "@repo/ui/Errors/ErrorServer"
import { ErrorServer } from "@repo/ui/Errors/ErrorServer"
const ErrorBoundaryPage: React.FC<ErrorServerProps> = (props) => {
return <ErrorServer {...props} />
}
export default ErrorBoundaryPage

View File

@ -0,0 +1,27 @@
import "@repo/config-tailwind/styles.css"
import type { LocaleProps } from "@repo/i18n/routing"
import { Footer } from "@repo/ui/Layout/Footer"
import { Header } from "@repo/ui/Layout/Header"
import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme"
import { VERSION } from "@repo/utils/constants"
import { setRequestLocale } from "next-intl/server"
interface MainLayoutProps extends React.PropsWithChildren, LocaleProps {}
const MainLayout: React.FC<MainLayoutProps> = async (props) => {
const { children, params } = props
const { locale } = await params
// Enable static rendering
setRequestLocale(locale)
return (
<ThemeProvider>
<Header />
{children}
<Footer version={VERSION} />
</ThemeProvider>
)
}
export default MainLayout

View File

@ -0,0 +1,12 @@
import { Spinner } from "@repo/ui/Design/Spinner"
import { MainLayout } from "@repo/ui/Layout/MainLayout"
const Loading: React.FC = () => {
return (
<MainLayout center>
<Spinner size={50} />
</MainLayout>
)
}
export default Loading

View File

@ -0,0 +1,10 @@
import { ErrorNotFound } from "@repo/ui/Errors/ErrorNotFound"
/**
* Note that `app/[locale]/[...rest]/page.tsx` is necessary for this page to render.
*/
const NotFound: React.FC = () => {
return <ErrorNotFound />
}
export default NotFound

View File

@ -0,0 +1,43 @@
import type { LocaleProps } from "@repo/i18n/routing"
import { About } from "@repo/ui/Home/About"
import { Interests } from "@repo/ui/Home/Interests"
import { OpenSource } from "@repo/ui/Home/OpenSource"
import { Portfolio } from "@repo/ui/Home/Portfolio"
import { Skills } from "@repo/ui/Home/Skills"
import { MainLayout } from "@repo/ui/Layout/MainLayout"
import { RevealFade } from "@repo/ui/Layout/Section"
import { setRequestLocale } from "next-intl/server"
interface HomePageProps extends LocaleProps {}
const HomePage: React.FC<HomePageProps> = async (props) => {
const { params } = props
const { locale } = await params
// Enable static rendering
setRequestLocale(locale)
return (
<MainLayout>
<About />
<RevealFade>
<Interests />
</RevealFade>
<RevealFade>
<Skills />
</RevealFade>
<RevealFade>
<Portfolio />
</RevealFade>
<RevealFade>
<OpenSource />
</RevealFade>
</MainLayout>
)
}
export default HomePage

View File

@ -0,0 +1,22 @@
import "@repo/config-tailwind/styles.css"
import type { LocaleProps } from "@repo/i18n/routing"
import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme"
import { setRequestLocale } from "next-intl/server"
interface CurriculumVitaeLayoutProps
extends React.PropsWithChildren,
LocaleProps {}
const CurriculumVitaeLayout: React.FC<CurriculumVitaeLayoutProps> = async (
props,
) => {
const { children, params } = props
const { locale } = await params
// Enable static rendering
setRequestLocale(locale)
return <ThemeProvider forcedTheme="light">{children}</ThemeProvider>
}
export default CurriculumVitaeLayout

View File

@ -0,0 +1,17 @@
import type { LocaleProps } from "@repo/i18n/routing"
import { CurriculumVitae } from "@repo/ui/CurriculumVitae"
import { setRequestLocale } from "next-intl/server"
interface CurriculumVitaeProps extends LocaleProps {}
const CurriculumVitaePage: React.FC<CurriculumVitaeProps> = async (props) => {
const { params } = props
const { locale } = await params
// Enable static rendering
setRequestLocale(locale)
return <CurriculumVitae />
}
export default CurriculumVitaePage

View File

@ -0,0 +1,95 @@
import "@repo/config-tailwind/styles.css"
import type { LocaleProps } from "@repo/i18n/routing"
import type { Locale } from "@repo/utils/constants"
import { LOCALES } from "@repo/utils/constants"
import type { Metadata, Viewport } from "next"
import { NextIntlClientProvider } from "next-intl"
import {
getMessages,
getTranslations,
setRequestLocale,
} from "next-intl/server"
import Script from "next/script"
const DOMAIN = "theoludwig.fr"
export const viewport: Viewport = {
themeColor: "#00aeff",
}
export const generateMetadata = async ({
params,
}: LocaleProps): Promise<Metadata> => {
const { locale } = await params
const t = await getTranslations({ locale })
const title = t("meta.title")
const description = `${title} - ${t("meta.description")}`
const image = "/images/logo.webp"
const url = new URL(`https://${DOMAIN}`)
const locales = LOCALES.join(", ")
return {
title,
description,
metadataBase: url,
openGraph: {
title,
description,
url,
siteName: title,
images: [
{
url: image,
width: 96,
height: 96,
},
],
locale: locales,
type: "website",
},
twitter: {
card: "summary",
title,
description,
images: [image],
},
}
}
export const generateStaticParams = (): Array<{ locale: Locale }> => {
return LOCALES.map((locale) => {
return {
locale,
}
})
}
interface LocaleLayoutProps extends React.PropsWithChildren, LocaleProps {}
const LocaleLayout: React.FC<LocaleLayoutProps> = async (props) => {
const { children, params } = props
const { locale } = await params
// Enable static rendering
setRequestLocale(locale)
const messages = await getMessages()
return (
<html lang={locale} suppressHydrationWarning>
<body>
<NextIntlClientProvider messages={messages}>
{children}
</NextIntlClientProvider>
<Script
defer
data-domain={DOMAIN}
src="https://plausible.theoludwig.fr/js/script.js"
/>
</body>
</html>
)
}
export default LocaleLayout

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,7 @@
interface RootLayoutProps extends React.PropsWithChildren {}
const RootLayout = ({ children }: RootLayoutProps): React.ReactNode => {
return children
}
export default RootLayout

View File

@ -0,0 +1,20 @@
"use client"
import Error from "next/error"
/**
* Render the default Next.js 404 page when a route
* is requested that doesn't match the middleware and
* therefore doesn't have a locale associated with it.
*/
const NotFound: React.FC = () => {
return (
<html lang="en">
<body>
<Error statusCode={404} />
</body>
</html>
)
}
export default NotFound

View File

@ -0,0 +1,13 @@
import typescriptESLint from "typescript-eslint"
import configNextjs from "@repo/config-eslint/nextjs"
export default typescriptESLint.config(...configNextjs, {
files: ["**/*.ts", "**/*.tsx"],
languageOptions: {
parser: typescriptESLint.parser,
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
})

View File

@ -0,0 +1,3 @@
import i18nRequestConfig from "@repo/i18n/request"
export default i18nRequestConfig

View File

@ -0,0 +1,26 @@
import { routing } from "@repo/i18n/routing"
import createIntlMiddleware from "next-intl/middleware"
const intlMiddleware = createIntlMiddleware(routing)
export default intlMiddleware
export const config = {
matcher: [
// Enable a redirect to a matching locale at the root
"/",
// Next.js issue, middleware matcher should support template literals:
// https://github.com/vercel/next.js/issues/56398
"/(en-US|fr-FR)/:path*",
/*
* Match all request paths except for the ones starting with:
* - api (API routes)
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico (favicon file)
*/
"/((?!api|_next/static|_next/image|images|favicon.ico).*)",
],
}

5
apps/website/next-env.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
/// <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.

View File

@ -0,0 +1,22 @@
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,
},
compress: false,
eslint: {
ignoreDuringBuilds: true,
},
typescript: {
ignoreBuildErrors: true,
},
}
const withNextIntl = createNextIntlPlugin()
export default withNextIntl(nextConfig)

43
apps/website/package.json Normal file
View File

@ -0,0 +1,43 @@
{
"name": "@repo/website",
"version": "0.0.0-develop",
"private": true,
"type": "module",
"imports": {
"#*": "./*"
},
"scripts": {
"dev": "next dev --port 3000 --turbopack",
"build": "next build",
"start": "next start --port 3000",
"lint:eslint": "eslint . --max-warnings 0",
"lint:typescript": "tsc --noEmit"
},
"dependencies": {
"@repo/blog": "workspace:*",
"@repo/config-tailwind": "workspace:*",
"@repo/utils": "workspace:*",
"@repo/i18n": "workspace:*",
"@repo/ui": "workspace:*",
"@mdx-js/mdx": "catalog:",
"next-mdx-remote": "catalog:",
"shiki": "catalog:",
"next": "catalog:",
"next-intl": "catalog:",
"react": "catalog:",
"react-dom": "catalog:"
},
"devDependencies": {
"@repo/config-eslint": "workspace:*",
"@repo/config-typescript": "workspace:*",
"@types/node": "catalog:",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"@total-typescript/ts-reset": "catalog:",
"eslint": "catalog:",
"postcss": "catalog:",
"tailwindcss": "catalog:",
"typescript-eslint": "catalog:",
"typescript": "catalog:"
}
}

View File

@ -0,0 +1,7 @@
const config = {
plugins: {
tailwindcss: {},
},
}
export default config

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 659 B

After

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Some files were not shown because too many files have changed in this diff Show More