Compare commits

...

100 Commits

Author SHA1 Message Date
df42311429 Actualiser .woodpecker/maintenance.yaml
Some checks failed
ci/woodpecker/push/workflow Pipeline was successful
ci/woodpecker/cron/maintenance Pipeline failed
2025-05-21 16:21:37 +02:00
90008a1fef Actualiser .woodpecker/maintenance.yaml 2025-05-21 16:19:48 +02:00
7ce2783bf2 ci: update browserlist
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2025-05-21 16:19:38 +02:00
ae8c57a888 feat: update dates
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
2025-05-21 16:01:33 +02:00
1c8f370c61 fix: ionicons
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
2025-05-10 14:24:23 +02:00
afe3c0bed6 fix: update icons
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
2025-05-10 14:16:04 +02:00
b7a4a0c99a feat: messages
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
2025-05-10 14:08:58 +02:00
fce5e2abfe ci: woodpecker
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
2025-05-10 14:02:18 +02:00
d439c6f030 ci: woodpecker
Some checks failed
ci/woodpecker/push/workflow Pipeline failed
2025-05-10 14:00:10 +02:00
a5a368fd31 ci: woodpecker 2025-05-10 13:57:25 +02:00
c9b071cd8d ci: woodpecker
All checks were successful
ci/woodpecker/manual/workflow Pipeline was successful
2025-05-10 13:48:28 +02:00
58d74e76bb backblaze to scaleway 2025-04-23 19:26:33 +02:00
81045f6d31 Actualiser Dockerfile 2025-03-25 17:31:39 +01:00
b967bb134e Actualiser src/messages/fr.json 2025-03-25 17:01:14 +01:00
d184317982 Actualiser src/messages/en.json 2025-03-18 11:19:11 +01:00
e2a3ecb1d7 Actualiser src/messages/fr.json 2025-03-18 11:14:12 +01:00
d45ac2aa06 Actualiser src/messages/fr.json 2025-02-19 14:33:10 +01:00
49ba9e4d5d Actualiser src/messages/fr.json 2025-02-19 14:02:36 +01:00
e06b3aa65b Actualiser src/messages/fr.json 2025-02-19 14:01:37 +01:00
7e2447415f Actualiser INSTRUCTIONS.md 2025-02-19 13:34:02 +01:00
655e87fa52 Actualiser README.md 2025-02-19 13:31:26 +01:00
79f42686de Actualiser src/messages/fr.json 2025-02-19 12:21:22 +01:00
585223d18e Supprimer .github/workflows/act.yml 2025-02-19 12:18:09 +01:00
69044e7077 Actualiser src/messages/fr.json
Some checks failed
/ Test CV Web Dumas (push) Successful in 26s
/ Deploy app to the Multirisque main setup (push) Has been cancelled
2025-02-19 12:05:18 +01:00
ed2ccdfc3e Actualiser .github/workflows/act.yml
Some checks failed
/ Test CV Web Dumas (push) Successful in 34s
/ Deploy app to the Multirisque main setup (push) Has been cancelled
2025-02-17 16:51:09 +01:00
d5fa6c6900 Actualiser .github/workflows/act.yml 2025-02-17 16:47:49 +01:00
8948ec3f23 Actualiser README.md
Some checks failed
/ Test CV Web Dumas (push) Failing after 31s
/ Deploy app to the Multirisque main setup (push) Has been cancelled
2025-02-17 16:10:14 +01:00
dependabot[bot]
732991213c
Bump nanoid from 3.3.7 to 3.3.8 (#80)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-17 13:57:26 +01:00
dependabot[bot]
806f75a5af
Bump cookie and express (#77)
Bumps [cookie](https://github.com/jshttp/cookie) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.

Updates `cookie` from 0.6.0 to 0.7.1
- [Release notes](https://github.com/jshttp/cookie/releases)
- [Commits](https://github.com/jshttp/cookie/compare/v0.6.0...v0.7.1)

Updates `express` from 4.21.0 to 4.21.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.1)

---
updated-dependencies:
- dependency-name: cookie
  dependency-type: indirect
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-21 09:22:09 +01:00
dependabot[bot]
a388e7952b
Bump rollup from 2.79.1 to 2.79.2 (#76)
Bumps [rollup](https://github.com/rollup/rollup) from 2.79.1 to 2.79.2.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.79.1...v2.79.2)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-21 09:21:45 +01:00
dependabot[bot]
39cea7859e
Bump cross-spawn from 7.0.3 to 7.0.6 (#79)
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-21 09:21:26 +01:00
21da07eb4c fix readme 2024-11-06 11:21:01 +00:00
dependabot[bot]
6fb0f69f6f
Bump http-proxy-middleware from 2.0.6 to 2.0.7 (#78)
Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 2.0.6 to 2.0.7.
- [Release notes](https://github.com/chimurai/http-proxy-middleware/releases)
- [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/v2.0.7/CHANGELOG.md)
- [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v2.0.6...v2.0.7)

---
updated-dependencies:
- dependency-name: http-proxy-middleware
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-25 14:41:52 +02:00
a5a6476557
Update en.json 2024-09-24 13:04:27 +02:00
c86a601800
feat : remove telegram add signal 2024-09-24 12:29:22 +02:00
6372c1a512
feat : add signal remove telegram 2024-09-24 12:18:15 +02:00
dependabot[bot]
6a84ebd8a7
Bump micromatch from 4.0.5 to 4.0.8 (#74) 2024-09-17 14:56:36 +02:00
dependabot[bot]
26a91bbedd
Bump webpack from 5.93.0 to 5.94.0 (#73) 2024-09-17 14:56:13 +02:00
dependabot[bot]
bfce14f3f5
Bump serve-static and express (#75) 2024-09-17 14:55:20 +02:00
04069faa62
feat: change title 2024-08-03 01:04:40 +02:00
ee7711083b fix: npm audit fix 2024-07-30 14:17:33 +02:00
dependabot[bot]
96b1e28d8e
Bump braces from 3.0.2 to 3.0.3 (#72)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-30 14:06:21 +02:00
af872f75fd
Update robots.txt (#71) 2024-05-29 16:18:52 +02:00
c0468654cd feat: add referer to blog link 2024-05-21 10:27:27 +00:00
0afb2402ab feat: update headshot 2024-05-04 19:17:59 +02:00
dependabot[bot]
c8e63e28d6
Bump ejs from 3.1.9 to 3.1.10 (#70) 2024-05-02 12:15:49 +02:00
1cd5741a2d feat: be clearer about the situation of where i was for the subcontractor work 2024-04-30 00:18:13 +02:00
cb4c54bd3f feat: better css for the subcontractor thing 2024-04-30 00:15:46 +02:00
e86964980e feat: add subcontractor work 2024-04-30 00:05:31 +02:00
dependabot[bot]
e46cf3f5a6
Bump express from 4.18.2 to 4.19.2 (#67)
Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-20 18:45:45 +02:00
dependabot[bot]
ced5a64e2b
Bump webpack-dev-middleware from 5.3.3 to 5.3.4 (#66)
Bumps [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/webpack/webpack-dev-middleware/releases)
- [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v5.3.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: webpack-dev-middleware
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anthony Dumas <anthony@dumas.cc>
2024-04-20 18:45:35 +02:00
008fc40adb
Update CODEOWNERS 2024-04-20 18:44:23 +02:00
e8dddc7103
Create CODEOWNERS 2024-04-20 18:43:42 +02:00
54cadc072f
use: bulma v1 (#69)
* trying: pass the bulma breaking changes

* fix: bulma 1.0

* fix: some ui bullshits happened after bulma v1
2024-04-20 18:27:40 +02:00
c6a239608f feat: add subcontractor duties for Sopra 2024-04-16 08:48:14 +00:00
dependabot[bot]
b530f196c6
Bump follow-redirects from 1.15.5 to 1.15.6 (#65) 2024-03-17 10:00:45 +01:00
3596338dfb fix: description 2024-03-13 10:27:49 +00:00
eebb5ed6b5 feat: add powered by scaleway 2024-02-12 22:42:10 +01:00
d7a9029a42 feat: links should look like link 2024-02-12 22:18:47 +01:00
6db8878b3d feat: add blog link 2024-02-12 22:04:15 +01:00
45b3b37d89 feat: fixing education 2024-02-12 21:57:20 +01:00
dependabot[bot]
4fa78d504f
Bump @adobe/css-tools from 4.2.0 to 4.3.2 (#63)
Bumps [@adobe/css-tools](https://github.com/adobe/css-tools) from 4.2.0 to 4.3.2.
- [Changelog](https://github.com/adobe/css-tools/blob/main/History.md)
- [Commits](https://github.com/adobe/css-tools/commits)

---
updated-dependencies:
- dependency-name: "@adobe/css-tools"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Anthony Dumas <anthony@dumas.cc>
2024-01-30 13:40:50 +01:00
dependabot[bot]
3b4571902b
Bump follow-redirects from 1.15.2 to 1.15.5 (#64)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.2 to 1.15.5.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.2...v1.15.5)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-30 13:35:19 +01:00
dependabot[bot]
e1929dd46b
Bump @adobe/css-tools from 4.2.0 to 4.3.1 (#60)
Bumps [@adobe/css-tools](https://github.com/adobe/css-tools) from 4.2.0 to 4.3.1.
- [Changelog](https://github.com/adobe/css-tools/blob/main/History.md)
- [Commits](https://github.com/adobe/css-tools/commits)

---
updated-dependencies:
- dependency-name: "@adobe/css-tools"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-23 13:32:44 +01:00
dependabot[bot]
a441986786
Bump @babel/traverse from 7.21.2 to 7.23.2 (#61)
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-23 13:32:30 +01:00
e00c967274
New Year New Me (2/2) 2024-01-01 13:54:28 +01:00
d7c9d8994e
New Year New Me (1/2) 2024-01-01 13:54:10 +01:00
806d63a4fd update: tags 2023-12-12 15:11:04 +01:00
27828625b1
Create robots.txt 2023-11-22 14:44:12 +01:00
e1f4433705 fix: updating bullet points 2023-11-21 22:41:00 +01:00
7bf65448d7 feat: add tags for job @ Sopra 2023-11-04 16:07:07 +01:00
28151c4e2d
Update test.yml 2023-11-04 15:11:27 +01:00
d4b99aae41
feat: update github workflow 2023-11-04 15:09:17 +01:00
18ea7f0938 fix: url mastodon 2023-11-01 23:08:45 +01:00
1148353c9c Merge branch 'test' 2023-11-01 22:58:10 +01:00
b3969ddad3 feat: Update Link to CV 2023-11-01 21:55:07 +00:00
824946e6a0 test 2023-10-25 22:01:27 +02:00
Adamas
290ad1d3a9 add docker compose 2023-10-25 21:55:07 +02:00
Adamas
a689047c23 Docker things 2023-10-22 22:23:42 +02:00
1764a3439b
feat : make entreprise bolder
Update ExperienceCard.js
2023-10-19 12:16:10 +02:00
2afd9f05c4 Correction sur le titre du poste chez Sopra Steria 2023-08-08 14:05:07 +00:00
62fcdd55c7 MaJ wording Tags Experience 2023-08-02 14:13:49 +00:00
dependabot[bot]
f1cdd79565
Bump word-wrap from 1.2.3 to 1.2.4 (#59)
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-25 09:46:50 +02:00
dependabot[bot]
f1607a74f4
Bump semver from 6.3.0 to 6.3.1 (#58)
Bumps [semver](https://github.com/npm/node-semver) from 6.3.0 to 6.3.1.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v6.3.1/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v6.3.1)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-25 09:46:41 +02:00
dependabot[bot]
4213859932
Bump tough-cookie from 4.1.2 to 4.1.3 (#57)
Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 4.1.2 to 4.1.3.
- [Release notes](https://github.com/salesforce/tough-cookie/releases)
- [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md)
- [Commits](https://github.com/salesforce/tough-cookie/compare/v4.1.2...v4.1.3)

---
updated-dependencies:
- dependency-name: tough-cookie
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-18 09:37:51 +02:00
999476cdd5
fix mastodon verification (#56)
* Update index.html

* Update fr.json

* Update en.json
2023-07-07 14:37:08 +02:00
32486235f0
Update README.md
add Senior Software Engineer
2023-06-29 11:47:24 +02:00
63659cdc02
Update en.json
add Senior Software Engineer
2023-06-29 11:47:04 +02:00
6254856b6b
Update fr.json
add "Senior Software Engineer"
2023-06-29 11:46:47 +02:00
5b1564beb6
Update README.md 2023-06-26 19:55:28 +02:00
fecefb843b
New Job :party: (#55)
* New Job :party:

* Fix du test
+ petits fixes React
+ fix La Clameur
2023-06-26 19:54:54 +02:00
543fe1cb94 Mise à jour dates Harvest 2023-04-27 15:00:11 +00:00
b4868009ad npm audit 2023-04-09 20:41:52 +02:00
58935df630 Prettier thinks it's better, I guess 2023-04-09 20:31:37 +02:00
193aea1587
Merge pull request #54 from AdamasFR/dependabot/npm_and_yarn/webpack-5.76.3
Bump webpack from 5.75.0 to 5.76.3
2023-03-28 11:40:04 +02:00
86c0df290d
Update App.test.js 2023-03-27 23:26:27 +02:00
dependabot[bot]
494736140d
Bump webpack from 5.75.0 to 5.76.3
Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.76.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.76.3)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-27 21:24:42 +00:00
c41d1835aa
Update test.yml 2023-03-27 23:24:21 +02:00
8160e1b6ac
Create test.yml 2023-03-27 23:23:17 +02:00
b44f29bfbf Better glitching 2023-03-10 09:53:39 +00:00
41 changed files with 4448 additions and 3002 deletions

View File

@ -0,0 +1,19 @@
when:
- event: cron
cron: update browserlist
steps:
- name: update browserlist
image: node:20-slim
commands:
- npm ci
- npx update-browserslist-db@latest
- npm run test
- name: push commit
image: appleboy/drone-git-push
settings:
branch: master
remote: git@forge.adm.ink:adamas/curriculum.git
force: false
commit: true
commit_message: "dep: updatebrowserslist"

28
.woodpecker/workflow.yaml Normal file
View File

@ -0,0 +1,28 @@
when:
- event: push
branch: master
- event: manual
steps:
- name: test
image: node:20-slim
commands:
- npm ci
- npm run test
- name: build
image: node:20-slim
commands:
- npm run build
- name: publish
image: woodpeckerci/plugin-docker-buildx:5.2.2
settings:
username: adamas
registry: https://forge.adm.ink
password:
from_secret: DOCKER_PASSWORD
repo: forge.adm.ink/adamas/curriculum
purge: true
compress: true
tags: ${CI_COMMIT_TAG}

1
CODEOWNERS Normal file
View File

@ -0,0 +1 @@
* @AdamasFR

14
Dockerfile Normal file
View File

@ -0,0 +1,14 @@
FROM node:20-slim
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@5.0.1 -g --silent
# add app
COPY . ./
# start app
CMD ["npm", "start"]

View File

@ -67,4 +67,4 @@ This section has moved here: [https://facebook.github.io/create-react-app/docs/d
### `npm run build` fails to minify
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)

View File

@ -1,12 +1,11 @@
# anthony-dumas.fr
```
Bonjour,
Vous trouverez ci-joint le code source de mon portefolio en ligne.
Je vous souhaite une excellente journée,
**Anthony Dumas**
**Anthony Yvon Dumas**
Software Developer @ harvest.fr
```
Senior Engineer @ Sopra Steria

30
docker-compose.yml Normal file
View File

@ -0,0 +1,30 @@
version: '2'
services:
server:
image: forge.adm.ink/adamas/curriculum:latest
container_name: anthony-dumas.fr-server
networks:
- traefik_default
labels:
- "traefik.enable=true"
- "traefik.http.routers.portfolio.rule=Host(`anthony-dumas.fr`)"
- "traefik.http.routers.portfolio.entrypoints=websecure"
- "traefik.http.routers.portfolio.tls.certresolver=myresolver"
- "traefik.http.services.portfolio.loadbalancer.server.port=3000"
- "traefik.http.middlewares.redirect-to-non-www.redirectregex.regex=^https?://www.anthony-dumas.fr/(.*)"
- "traefik.http.middlewares.redirect-to-non-www.redirectregex.replacement=https://anthony-dumas.fr/$${1}"
- "traefik.http.middlewares.redirect-to-non-www.redirectregex.permanent=true"
- "traefik.http.routers.portfolio.rule=Host(`anthony-dumas.fr`) || Host(`www.anthony-dumas.fr`)"
- "traefik.http.routers.portfolio.middlewares=redirect-to-non-www"
watchtower:
image: containrrr/watchtower
container_name: watchtower-anthony-dumas.fr
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 30 anthony-dumas.fr-server
networks:
traefik_default:
external: true

14
generate-react-cli.json Normal file
View File

@ -0,0 +1,14 @@
{
"usesTypeScript": false,
"usesStyledComponents": true,
"testLibrary": "None",
"component": {
"default": {
"path": "src/components",
"withStyle": true,
"withTest": false,
"withStory": false,
"withLazy": false
}
}
}

6524
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -6,13 +6,13 @@
"@testing-library/jest-dom": "^5.11.6",
"@testing-library/react": "^11.2.2",
"@testing-library/user-event": "^12.5.0",
"bulma": "^0.9.4",
"bulma": "^1.0.0",
"powerglitch": "^2.3.2",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-intl": "^5.10.9",
"react-scripts": "5.0.1",
"sass": "^1.30.0",
"react-scripts": "^5.0.1",
"sass": "^1.71.1",
"web-vitals": "^0.2.4"
},
"scripts": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -7,7 +7,7 @@
<meta name="theme-color" content="#326273" />
<meta
name="description"
content="Web site created using create-react-app"
content="Anthony Dumas - Programmeur de les Internet."
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
@ -24,7 +24,7 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>Anthony Dumas</title>
<title>Anthony Dumas - Portfolio</title>
<!-- Matomo -->
<script>
var _paq = (window._paq = window._paq || []);
@ -49,15 +49,18 @@
<noscript>
<h1>Ce site requiert Javascript (désolé !)</h1>
Dirigez vous vers
<a href="https://files.adm.ink/anthony-dumas-cv.pdf"
>https://files.adm.ink/anthony-dumas-cv.pdf</a
<a
href="https://adamas-cdn.s3.fr-par.scw.cloud/portfolio/anthony-dumas-cv.pdf"
>ce lien</a
>
pour une version PDF.
Pour me parler directement, n'hésitez pas à m'envoyer un message sur <a rel="me" href="https://imaginair.es/@adamas">Mastodon</a>!
pour une version PDF. Pour me parler directement, n'hésitez pas à
m'envoyer un message sur
<a rel="me" href="https://social.adm.ink/@adamas">Mastodon</a>!
</noscript>
<div id="root"></div>
<script src="https://unpkg.com/ionicons@latest/dist/ionicons.js"></script>
<a style="display:none" rel="me" href="https://imaginair.es/@adamas">Mastodon</a>
<script src="https://unpkg.com/ionicons@7.4.0/dist/ionicons.js"></script>
<a style="display: none" rel="me" href="https://social.adm.ink/@adamas"
>Mastodon</a
>
</body>
</html>

5
robots.txt Normal file
View File

@ -0,0 +1,5 @@
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /

View File

@ -1,37 +0,0 @@
@charset "utf-8"
// Import a Google Font
@import url('https://fonts.googleapis.com/css?family=Nunito:400,700')
// Set your brand colors
$purple: #8a4d76
$pink: #fa7c91
$brown: #757763
$beige-light: #d0d1cd
$beige-lighter: #eff0eb
// Update Bulma's global variables
$family-sans-serif: 'Nunito', sans-serif
$grey-dark: $brown
$grey-light: $beige-light
$primary: $purple
$link: $pink
$widescreen-enabled: false
$fullhd-enabled: false
// Update some of Bulma's component variables
$body-background-color: $beige-lighter
$control-border-width: 2px
$input-border-color: transparent
$input-shadow: none
// Import only what you need from Bulma
@import '../node_modules/bulma/sass/utilities/_all.sass'
@import '../node_modules/bulma/sass/base/_all.sass'
@import '../node_modules/bulma/sass/elements/button.sass'
@import '../node_modules/bulma/sass/elements/container.sass'
@import '../node_modules/bulma/sass/elements/form.sass'
@import '../node_modules/bulma/sass/elements/title.sass'
@import '../node_modules/bulma/sass/components/navbar.sass'
@import '../node_modules/bulma/sass/layout/hero.sass'
@import '../node_modules/bulma/sass/layout/section.sass'

View File

@ -1,8 +1,18 @@
import { render, screen } from '@testing-library/react';
import App from './App';
import React from 'react';
import { IntlProvider } from 'react-intl';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
import { render, screen } from '@testing-library/react';
import MenuComponent from './App';
import { getTexts } from './services/message.service';
test('renders Anthony Yvon Dumas', async () => {
render(<IntlProvider locale={"fr"}
defaultLocale={"fr"}
messages={getTexts("fr")}>
<MenuComponent />
</IntlProvider>);
expect(await screen.findByText("Anthony Yvon Dumas")).toBeInTheDocument();
});

View File

@ -1 +1 @@
@import "main.scss";
@use "main.scss";

View File

@ -7,40 +7,29 @@ $deep-koamaru: #152528;
$myrtle-green: #1d353a;
$cadet-blue: #25444b;
$neon-carrot: #142225;
$white: #ffffff;
$admink-brand: #f38d68;
/**
Variables Bulma
**/
$primary: $cadet-blue;
$primary-invert: #fff;
$info: $myrtle-green;
$info-invert: #fff;
$footer-color: $deep-koamaru;
$success: $deep-koamaru;
$link: $neon-carrot;
$link-hover: "";
@use "bulma/sass" with (
$primary: $cadet-blue,
$info: $myrtle-green,
$footer-color: $deep-koamaru,
$success: $deep-koamaru,
$link: $neon-carrot
);
html {
background-color: $primary;
background-color: $myrtle-green;
}
body {
overflow-x: hidden;
}
@import "../../node_modules/bulma/bulma";
#idCard {
.hero-body {
padding-bottom: 2rem;
padding-top: 2rem;
}
// permet de re-aligner les tags avec les subtitles
.tags {
margin-top: -1.25rem;
}
}
// retire les barres de scroll des panneaux experience/education
@ -49,7 +38,7 @@ body {
}
footer {
background-color: $footer-color !important;
background-color: $deep-koamaru !important;
color: #fff;
}
@ -88,12 +77,12 @@ section#contact .button {
//
footer small {
color: $white;
color: #fff;
}
// Photo de Profil
#photoProfil {
background-color: $primary;
background-color: $myrtle-green;
}
.tile.is-vertical {
@ -111,3 +100,7 @@ footer small {
text-align: left;
font-size: 20px;
}
p.title a {
color: $admink-brand !important;
}

View File

@ -11,7 +11,7 @@ export default class ButtonIcon extends Component {
render() {
return <a rel="noopener noreferrer me" href={this.props.lien} target="_blank">
<button className="button" aria-label="Bouton {this.props.aria-label}">
<span class="icon">
<span className="icon">
<ion-icon name={this.props.icon}></ion-icon>
</span>
</button>

View File

@ -13,10 +13,10 @@ export default class ContactButton extends Component {
// }
render() {
const data = this.props.data;
return <div class="column is-3">
<a target="_blank" rel="noreferrer noopener" href={data.url} class="hide button is-large is-fullw-mobile"
return <div className="column is-3">
<a target="_blank" rel="noreferrer noopener" href={data.url} className="hide button is-large is-fullw-mobile"
title={`Go to ${data.title}`}>
<span class="icon">
<span className="icon">
<ion-icon name={data.icon}></ion-icon>
</span>
<span>{data.title}</span>

View File

@ -1,39 +1,40 @@
import React, {Component} from 'react';
import './ContactCard.scss';
import React, { Component } from 'react';
import { injectIntl } from 'react-intl';
import './ContactCard.scss'
import ContactButton from '../ContactButton/index';
// import { connect } from "react-redux";
// import { bindActionCreators } from "redux";
// import * as contactCardActions from "../../store/contactCard/actions";
class ContactCard extends Component {
// constructor(props) {
// super(props);
// this.state = {};
// }
render() {
const contactCardMessage = this.props.intl.messages.contactCard;
return <section class="hero is-info dontPrint" id="contact">
<div class="hero-body">
<div class="container">
<h1 class="title">
{contactCardMessage.title}
</h1>
<h2 class="subtitle">
{contactCardMessage.subtitle}
</h2>
<div class="columns">
{contactCardMessage.ways.map(function(button, index){
return <ContactButton
data={button}/>;
})}
</div>
// constructor(props) {
// super(props);
// this.state = {};
// }
render() {
const contactCardMessage = this.props.intl.messages.contactCard;
return <section className="hero is-info dontPrint" id="contact">
<div className="hero-body">
<div className="container">
<h1 className="title">
{contactCardMessage.title}
</h1>
<h2 className="subtitle">
{contactCardMessage.subtitle}
</h2>
<div className="columns">
{contactCardMessage.ways.map(function (button, index) {
return <ContactButton key={index}
data={button} />;
})}
</div>
</div>
</div>
</section>;
}
</section>;
}
}
export default injectIntl(ContactCard)
export default injectIntl(ContactCard)

View File

@ -1,9 +1,9 @@
import React, { Component } from 'react';
import './ExperienceCard.scss'
import './ExperienceCard.scss';
import React, { Component } from 'react';
import ExperienceSlimSpanWrapper from '../ExperienceSlimSpan/ExperienceSlimSpan';
// import { connect } from "react-redux";
// import { bindActionCreators } from "redux";
// import * as MenuComponentActions from "../../store/MenuComponent/actions";
export default class ExperienceCard extends Component {
// constructor(props) {
@ -13,36 +13,39 @@ export default class ExperienceCard extends Component {
render() {
var data = this.props.data;
var imgSrc = data.logo;
return <div class="card-content">
<div class="media">
<div class="media-left">
return <div className="card-content">
<div className="media">
<div className="media-left">
<a href={data.url} target="_blank" rel="noreferrer">
<figure class="image is-48x48">
<figure className="image is-48x48">
<img src={imgSrc} alt="Logo Entreprise" />
</figure>
</a>
</div>
<div class="media-content">
<p class="title is-4">{data.occupation}</p>
<p class="subtitle is-6">{data.entreprise} - {data.location} - {data.duration}</p>
<div class="tags">
<div className="media-content">
<p className="title is-4">{data.occupation}</p>
<p className="subtitle is-6"><strong>{data.entreprise}</strong> - {data.location} - {data.duration}</p>
<div className="tags">
{data.tags.map(function (name, index) {
return <span key={index} class="tag">{name}</span>;
return <span key={index} className="tag">{name}</span>;
})}
</div>
<div className='description content'>
<div dangerouslySetInnerHTML={{ __html: data.description }} />
</div>
{data.missions ?
data.missions.map(function (mission, index) {
return <ExperienceSlimSpanWrapper key={index}
data={mission} />;
}) : ''
}
{data.commentaire ? <div className="comment">
{data.commentaire}
</div> : ''}
</div>
</div>
<div class="content">
{data.description}
</div>
{data.commentaire ? <div class="comment">
{data.commentaire}
</div> : ''}
</div>
}
}
// export default connect(
// ({ MenuComponent }) => ({ ...MenuComponent }),
// dispatch => bindActionCreators({ ...MenuComponentActions }, dispatch)
// )( MenuComponent );
}

View File

@ -1,4 +1,28 @@
.comment{
font-style: italic;
margin-top: -25px;
}
.comment {
font-style: italic;
margin-top: -25px;
}
// permet de re-aligner les tags avec les subtitles
.tags,
.description,
.comment {
margin-top: -1.25rem;
}
.card-content {
margin-top: 1rem;
}
.mission.card-content {
margin-top: 0;
}
.mission .media {
border-top-style: none;
align-items: self-end;
}
.mission div.media {
padding-top: 2px;
}

View File

@ -0,0 +1,23 @@
import React, { Component } from 'react';
export default class ExperienceSlimSpan extends Component {
render() {
var data = this.props.data;
var imgSrc = data.logo;
return <div className="mission card-content">
<div className="media">
<div className="media-left">
<a href={data.url} target="_blank" rel="noreferrer">
<figure className="image is-24x24">
<img src={imgSrc} alt="Logo Entreprise" />
</figure>
</a>
</div>
<div className="media-content">
<p className="subtitle is-6">{data.occupation} {data.situation} <strong>{data.entreprise}</strong> - {data.duration}</p>
</div>
</div>
</div>
}
};

View File

@ -1,9 +1,10 @@
import './FooterCard.scss';
import React, { Component } from 'react';
import { injectIntl } from 'react-intl';
import React, { Component } from 'react';
import bulmaLogo from '../../images/made-with-bulma.webp';
import scalewayLogo from '../../images/scaleway_logo.webp';
// import { connect } from "react-redux";
@ -16,17 +17,17 @@ class FooterCard extends Component {
// }
render() {
const footerMessage = this.props.intl.messages.footer;
return <footer class="footer has-text-centered dontPrint">
<div class="container">
<div class="columns">
<div class="column is-8-desktop is-offset-2-desktop">
return <footer className="footer has-text-centered dontPrint">
<div className="container">
<div className="columns">
<div className="column is-8-desktop is-offset-2-desktop">
<p>
<strong class="has-text-weight-semibold">
<strong className="has-text-weight-semibold">
anthony-dumas.fr
</strong>
</p>
<p>
<small class="sosumi">
<small className="sosumi">
{footerMessage.legalNotice}
</small>
</p>
@ -37,8 +38,8 @@ class FooterCard extends Component {
<img src={bulmaLogo} alt="Made with Bulma" width="128" height="24" />
</a>
<br />
<a rel="noopener noreferrer" href="https://www.linode.com/" aria-label="Link to Linode.com" id="linode-logo" target="_blank">
<svg viewBox="0 0 230 90" width="115" height="30"><g fill="#FFF"><path d="M93.8 27.8l5.8-1.4v28c0 3.1.9 4.9 2.7 5.5-.9 1.7-2.4 2.6-4.6 2.6-2.6 0-4-1.8-4-5.5V27.8zM108.4 62V41.8h-3.2V37h9.1v25h-5.9zm3-34.6c.9 0 1.7.3 2.4 1s1 1.5 1 2.4c0 .9-.3 1.7-1 2.4s-1.5 1-2.4 1c-.9 0-1.7-.3-2.4-1s-1-1.5-1-2.4c0-.9.3-1.7 1-2.4s1.5-1 2.4-1zM137.1 62V47.6c0-2.1-.4-3.7-1.2-4.6-.8-1-2.1-1.5-4-1.5-.9 0-1.8.2-2.7.7-1 .5-1.7 1.1-2.3 1.8v18h-5.8V37.1h4.2l1.1 2.3c1.6-1.9 3.9-2.8 7-2.8 3 0 5.3.9 7 2.7 1.7 1.8 2.6 4.3 2.6 7.4V62h-5.9zM147.5 49.5c0-3.8 1.1-6.9 3.3-9.3 2.2-2.4 5.1-3.6 8.7-3.6 3.8 0 6.7 1.1 8.8 3.4 2.1 2.3 3.1 5.4 3.1 9.4s-1.1 7.1-3.2 9.5c-2.1 2.3-5 3.5-8.8 3.5-3.8 0-6.7-1.2-8.8-3.5-2-2.4-3.1-5.5-3.1-9.4zm6.1 0c0 5.5 2 8.2 5.9 8.2 1.8 0 3.2-.7 4.3-2.1 1.1-1.4 1.6-3.5 1.6-6.1 0-5.4-2-8.1-5.9-8.1-1.8 0-3.3.7-4.3 2.1-1.1 1.4-1.6 3.4-1.6 6zM192.1 62v-1.5c-.5.5-1.3 1-2.4 1.4-1.1.4-2.3.6-3.6.6-3.5 0-6.2-1.1-8.2-3.3-2-2.2-3-5.3-3-9.2 0-3.9 1.1-7.1 3.4-9.6s5.1-3.7 8.6-3.7c1.9 0 3.6.4 5.2 1.2v-10l5.8-1.4V62h-5.8zm0-19c-1.2-1-2.5-1.5-3.9-1.5-2.3 0-4.1.7-5.4 2.1-1.3 1.4-1.9 3.5-1.9 6.1 0 5.2 2.5 7.8 7.5 7.8.6 0 1.2-.2 2.1-.5.8-.3 1.3-.7 1.6-1V43zM226 51.3h-17.8c.1 2 .8 3.5 2 4.6 1.3 1.1 2.9 1.7 5.1 1.7 2.6 0 4.7-.7 6-2.1l2.3 4.4c-2 1.7-5.1 2.5-9.2 2.5-3.8 0-6.8-1.1-9-3.3-2.2-2.2-3.3-5.3-3.3-9.3 0-3.9 1.2-7.1 3.6-9.5 2.4-2.4 5.3-3.6 8.7-3.6 3.6 0 6.5 1.1 8.7 3.2 2.2 2.2 3.3 4.9 3.3 8.2.1.7-.1 1.7-.4 3.2zm-17.6-4.4h12.2c-.4-3.6-2.4-5.5-6-5.5-3.3.1-5.4 1.9-6.2 5.5z"></path></g><path fill="#004712" d="M65.9 47.4l-1 11.5-3.3-2.3.4-5.8v-.1-.1l-.1-.1-.1-.1-7.1-4.7.1-5.1 11.1 6.8zM48.5 59.9L43.4 56v.9c0 .2-.1.4-.2.5L39.4 60l4.2 3.4.1.1v.2l.2 4 4.7 3.9-.1-11.7zm-32.1 5l2.4 11.5 9.9 10.5L27 75.3 16.4 64.9zm9.3 1.7l-2.4-16.1-12-10 3.2 15.6 11.2 10.5zm-3.8-26l-3.3-22.8L4.8 9.2l4.5 21.5 12.6 9.9z"></path><path fill="#00B259" d="M75.7 41.2l-1.5 10.9-8.2 6.6 1-11.2 8.7-6.3zM49.6 59.9l.1 11.8 10.5-8.4.7-11.5-11.3 8.1zm-6.8 4.8L28 75.3l1.8 12.2 13.4-10.7-.4-12.1zm-.4-8l-.7-16-17.3 9.9 2.4 16.6 15.6-10.5zm-1.1-25.3l-.9-21.6-20.8 8L23 41l18.3-9.6z"></path><path d="M76.9 40c0-.1 0-.1 0 0v-.2s0-.1-.1-.1c0 0-.1 0-.1-.1l-12-6.7c-.2-.1-.4-.1-.5 0L54 39.1h-.1v.6l-.1 5.4-4.1-2.7c-.2-.1-.4-.1-.6 0L43 45.8l-.3-6v-.1-.1-.1-.1-.1h-.1l-6.2-4.1 5.8-3c.2-.1.3-.3.3-.5L41.4 9v-.1s0-.1-.1-.1c0 0 0-.1-.1-.1L25.5 1.1c-.1-.1-.2-.1-.3-.1L3.9 7.6s-.1 0-.1.1c0 0-.1 0-.1.1v.6l4.7 22.9c0 .1.1.2.2.3l6.4 5-4.7 2.2s-.1 0-.1.1c0 0 0 .1-.1.1v.2l3.6 17.2c0 .1.1.2.2.3l4.5 4.2-3 1.8-.1.1s0 .1-.1.1V63.2L18 76.5c0 .1.1.2.1.3l10.9 12h.1s.1 0 .1.1h.5l14.4-11.5c.1-.1.2-.3.2-.4l-.3-7.9 4.8 4s.1 0 .1.1h.5L61 64c.1-.1.2-.2.2-.4l.4-5.8 3.5 2.4h.4s.1 0 .1-.1l9.4-7.5c.1-.1.2-.2.2-.3L76.9 40c0 .1 0 .1 0 0zM66 58.7l1-11.2 8.8-6.3-1.5 10.9-8.3 6.6zm-4.4-2.1l.4-5.8v-.1-.1l-.1-.1-.1-.1-7.1-4.7.1-5.1 11.1 6.9-1 11.5-3.3-2.4zm-1.5 6.7l-10.5 8.4-.1-11.8 11.3-8.1-.7 11.5zM43.3 76.8L29.8 87.5 28 75.3l14.7-10.5.6 12zm-24.6-.4l-2.4-11.5L27 75.3l1.7 11.6-10-10.5zm-.2-58.6l3.3 22.8-12.5-9.9L4.8 9.2l13.7 8.6zm21.9-8l.9 21.6L23 41l-3.4-23.2 20.8-8zm2 46.9L26.8 67.1l-2.4-16.6 17.3-9.9.7 16.1zm-19.1-6.1l2.4 16.1-11.2-10.6-3.2-15.6 12 10.1zm20.5 13.1v-.1-.1l-.1-.1-4.2-3.4 3.8-2.6c.2-.1.2-.3.2-.5V56l5.1 3.9.1 11.8-4.7-3.9-.2-4.1z"></path></svg>
<a rel="noopener noreferrer" href="https://www.scaleway.com/fr/" aria-label="Link to scaleway.com" id="scaleway-logo" target="_blank">
<img src={scalewayLogo} alt="Powered by Scaleway" width="128" height="24" />
</a>
</p>
</div>

View File

@ -1,66 +1,94 @@
import './MainCard.scss';
import { PowerGlitch } from 'powerglitch';
import React, { Component } from 'react';
import { FormattedMessage, injectIntl } from 'react-intl';
import React, { Component } from 'react';
import headshotFond from '../../images/headshot_fond.webp';
import headshotMain from '../../images/headshot_main.webp';
import ButtonIcon from '../ButtonIcon/index';
import ExperienceCard from '../ExperienceCard/index';
import { PowerGlitch } from 'powerglitch';
class MainCard extends Component {
glitching() {
PowerGlitch.glitch('#photoProfil');
componentDidMount() {
PowerGlitch.glitch('#photoProfil img',
{
playMode: 'hover',
hideOverflow: true,
timing: {
duration: 1000,
iterations: 15,
easing: 'ease-in-out',
},
glitchTimeSpan: {
start: 0.0,
end: 0.7,
},
shake: {
velocity: 10,
amplitudeX: 0.4,
amplitudeY: 0.4,
},
slice: {
count: 4,
velocity: 10,
minHeight: 0.02,
maxHeight: 0.40,
hueRotate: true,
},
}
);
}
render() {
var metaThemeColor = document.querySelector("meta[name=theme-color]");
metaThemeColor.setAttribute("content", window.matchMedia('(prefers-color-scheme: dark)').matches ? "#25444b" : "#5c9ead");
if (metaThemeColor !== null) {
metaThemeColor.setAttribute("content", window.matchMedia('(prefers-color-scheme: dark)').matches ? "#25444b" : "#5c9ead");
}
const experienceCardMessage = this.props.intl.messages.experienceCard;
return <section id="idCard" class="hero is-medium is-info">
<div class="hero-body">
<div class="container">
<div class="columns">
<div class="column is-2 is-hidden-touch is-hidden-desktop-only dontPrint"></div>
<div id="photosAndButtons" class="column is-3-widescreen is-4-tablet is-success">
<div class="card">
<div class="card-image">
<figure id="photoProfil" class="image" onMouseOver={this.glitching} >
<img fetchpriority="high" class="background" src={headshotFond} alt="Anthony Dumas" />
<img fetchpriority="high" class="actor" src={headshotMain} alt="Anthony Dumas" />
return <section id="idCard" className="hero is-medium is-info">
<div className="hero-body">
<div className="container">
<div className="columns">
<div className="column is-1 is-hidden-touch is-hidden-desktop-only dontPrint"></div>
<div id="photosAndButtons" className="column is-3-widescreen is-4-tablet is-success">
<div className="card">
<div className="card-image">
<figure id="photoProfil" className="image" onMouseOver={this.glitching} >
<img fetchpriority="high" className="background" src={headshotFond} alt="Anthony Dumas" />
<img fetchpriority="high" className="actor" src={headshotMain} alt="Anthony Dumas" />
</figure>
</div>
<div class="card-content">
<div class="media">
<div class="media-content">
<p id="buttonsUnderPhoto" class="field is-grouped">
<p class="control">
<div className="card-content">
<div className="media">
<div className="media-content">
<div id="buttonsUnderPhoto" className="field is-grouped">
<p className="control">
<ButtonIcon
icon="logo-github"
aria-label="Github"
lien="https://github.com/AdamasFR" />
</p>
<p class="control">
<p className="control">
<ButtonIcon
icon="logo-linkedin"
aria-label="Linkedin"
lien="https://www.linkedin.com/in/anthonyyvondumas/" />
</p>
<p class="control">
<p className="control">
<ButtonIcon
icon="logo-mastodon"
aria-label="Mastodon"
lien="https://imaginair.es/@adamas" />
lien="https://social.adm.ink/@adamas" />
</p>
</p>
<p id="boutonCV" class="field">
</div>
<p id="boutonCV" className="field">
<a rel="noreferrer noopener" target="_blank"
href="https://files.adm.ink/anthony-dumas-cv.pdf" >
<button class="button is-fullwidth" aria-label="Bouton Curriculum Vitæ">
<span class="icon">
href="https://adamas-cdn.s3.fr-par.scw.cloud/portfolio/anthony-dumas-cv.pdf" >
<button className="button is-fullwidth" aria-label="Bouton Curriculum Vitæ">
<span className="icon">
<ion-icon name="document-attach-outline"></ion-icon>
</span>
<span><FormattedMessage id="curriculumVitaeLink" /></span>
@ -70,22 +98,22 @@ class MainCard extends Component {
</div>
</div>
<div class="content">
<div className="content">
</div>
</div>
</div>
</div>
<div class="column is-9-tablet is-7-widescreen" id="experiences">
<span class="title">{experienceCardMessage.title.experience}</span>
<div className="column is-9-tablet is-7-widescreen" id="experiences">
<span className="title">{experienceCardMessage.title.experience}</span>
{experienceCardMessage.experiences.map(function (experience, index) {
return <ExperienceCard
return <ExperienceCard key={index}
data={experience} />;
})}
<span class="title">{experienceCardMessage.title.education}</span>
<span className="title">{experienceCardMessage.title.education}</span>
{experienceCardMessage.education.map(function (education, index) {
return <ExperienceCard
return <ExperienceCard key={index}
data={education} />;
})}
</div>

View File

@ -1,5 +1,3 @@
@import "../../_sass/main.scss";
#photoProfil {
overflow: clip;
border: 1px solid #3c3c3c;

View File

@ -1,8 +1,8 @@
import './MenuComponent.scss';
import React, { Component } from 'react';
import { FormattedMessage, injectIntl } from 'react-intl';
import React, { Component } from 'react';
import { URL_add_parameter } from '../../services/parameters.service';
@ -22,21 +22,22 @@ class MenuComponent extends Component {
render() {
const buttonsLanguagesMessage = this.props.intl.messages.global.buttons.languages;
return <section id="menu" class="hero is-primary dontPrint">
<div class="hero-body">
<div class="container">
<div class="columns">
<div class="column">
<h1 class="title">
const currentJob = this.props.intl.messages.experienceCard.experiences[0];
return <section id="menu" className="hero is-primary dontPrint">
<div className="hero-body">
<div className="container">
<div className="columns">
<div className="column">
<h1 className="title">
<FormattedMessage id="title" />
</h1>
<h2 class="subtitle">
<FormattedMessage id="subtitle" />
<h2 className="subtitle">
{currentJob.occupation} @ {currentJob.entreprise}
</h2>
</div>
<div class="column is-hidden-touch">
<div className="column is-hidden-touch">
<div id="langButtons">
<div class="buttons">
<div className="buttons">
<span className="button is-light" onClick={this.honhonhon} aria-label="Visiter le site en Français">
{buttonsLanguagesMessage.fr}
</span>

View File

@ -1,25 +1,29 @@
import React, {Component} from 'react';
import './ProjectCard.scss'
import './ProjectCard.scss';
import React, { Component } from 'react';
export default class ProjectCard extends Component {
render() {
const data = this.props.data;
return <div class="tile is-vertical is-4">
<div class="tile">
<div class="tile is-parent">
<article class="tile is-child notification is-info">
<p class="title">{data.title}</p>
<a href={data.url} rel="noopener noreferrer" target="_blank">
<figure class="image is-4by3">
<img src={data.image}
alt={data.imgAlt}
title={data.imgTitle} />
</figure>
</a>
</article>
</div>
</div>
</div>;
return <div className="tile is-vertical is-4">
<div className="tile">
<div className="cell">
<article className="box notification is-info">
<p className="title">
<a href={data.url} rel="noopener noreferrer" target="_blank">{data.title}</a>
</p>
<a href={data.url} rel="noopener noreferrer" target="_blank">
<figure className="image is-4by3">
<img src={data.image}
alt={data.imgAlt}
title={data.imgTitle} />
</figure>
</a>
</article>
</div>
</div>
</div>;
}
}
}

View File

@ -1,20 +1,20 @@
import './ProjectsCard.scss';
import React, { Component } from 'react';
import { injectIntl } from 'react-intl';
import React, { Component } from 'react';
import ProjectCard from '../ProjectCard/index';
class ProjectsCard extends Component {
render() {
const projectCardsMessage = this.props.intl.messages.projectCard;
return <section id="projets" class="hero is-success">
<div class="hero-body">
<div class="container">
<div class="tile is-ancestor">
return <section id="projets" className="hero is-success">
<div className="hero-body">
<div className="container">
<div className="grid">
{projectCardsMessage.projects.map(function (projects, index) {
return <ProjectCard
return <ProjectCard key={index}
data={projects}
/>;
})}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 347 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1,6 +1,5 @@
{
"title": "Anthony Yvon Dumas",
"subtitle": "Software Developer @ Harvest",
"curriculumVitaeLink": "CV (in .pdf)",
"experienceCard": {
"title": {
@ -9,31 +8,41 @@
},
"experiences": [
{
"occupation": "Software Developer",
"logo": "../../images/logos/harvest.fr.webp",
"url": "https://www.harvest.fr",
"duration": "(since 2016)",
"entreprise": "Harvest",
"occupation": "Senior Engineer",
"logo": "../../images/logos/soprasteria.co.uk.webp",
"url": "https://www.soprasteria.com/",
"duration": "since June 2023",
"entreprise": "Sopra Steria Group",
"location": "Clermont-Ferrand",
"description": "Development of responsive websites and APIs for wealth management and finance professionals.",
"tags": [
"Java EE",
"Angular",
"OpenAPI",
"jQuery",
"Spring",
"Scrum Environment"
]
"description": "Fullstack Developer @ Michelin [since 02/24]<br/>Developer for Imprimerie Nationale [06/23 - 02/24]",
"tags": ["Java", "Angular", "Spring", "DevOps", "Linux", "Azure", "Scrum"]
},
{
"occupation": "Event Coordinator",
"occupation": "Distribution Coordinator",
"logo": "../../images/logos/laclameur.org.webp",
"url": "https://www.laclameur.org",
"duration": "since 2021",
"entreprise": "La Clameur (Non-Profit Law 1901)",
"location": "remote",
"description": "",
"tags": ["Notion", "CPanel", "Wordpress", "RSS"]
"tags": ["Notion", "CPanel", "Wordpress", "RSS", "Podcast Distribution"]
},
{
"occupation": "Software Developer",
"logo": "../../images/logos/harvest.fr.webp",
"url": "https://www.harvest.fr",
"duration": "July 2016 - June 2023",
"entreprise": "Harvest Group",
"location": "Clermont-Ferrand",
"description": "Development of responsive websites and APIs for wealth management and finance professionals.",
"tags": [
"Java",
"Angular",
"OpenAPI",
"jQuery",
"Spring",
"Scrum Environment"
]
},
{
"occupation": "Internship as IOT Developer",
@ -75,6 +84,13 @@
"image": "../../images/portfolio/admPhotos.webp",
"imgAlt": "A picture of a beautiful town.",
"imgTitle": "A picture of a beautiful town."
},
{
"title": "Blog",
"url": "https://blog.adm.ink/?referer=portfolio",
"image": "../../images/portfolio/blog.webp",
"imgAlt": "Screenshot of blog.adm.ink, you can see the title of the blog and various links. You can also see a plate of food, I think it was hummous.",
"imgTitle": "Screenshot of blog.adm.ink, you can see the title of the blog and various links. You can also see a plate of food, I think it was hummous."
}
]
},
@ -95,20 +111,20 @@
"aria-label": "LinkedIn"
},
{
"title": "Telegram",
"url": "https://t.me/adamas_FR",
"title": "Signal",
"url": "https://signal.me/#eu/cpQOzblF-DM6sltmP6s58NYmnxMUEQHE-IxRnLPHXXaE7oQJc_JHGrIlVulPwGgu",
"icon": "call-outline",
"aria-label": "Telegram"
"aria-label": "Signal"
},
{
"title": "Mastodon",
"url": "https://imaginair.es/@adamas",
"url": "https://social.adm.ink/@adamas",
"icon": "logo-mastodon",
"aria-label": "Mastodon"
}
]
},
"footer": {
"legalNotice": "© 2014 - 2023 Anthony Dumas."
"legalNotice": "© 2014 - 2024 Anthony Dumas."
}
}

View File

@ -1,6 +1,5 @@
{
"title": "Anthony Yvon Dumas",
"subtitle": "Software Developer @ Harvest",
"curriculumVitaeLink": "CV (.pdf)",
"experienceCard": {
"title": {
@ -9,31 +8,71 @@
},
"experiences": [
{
"occupation": "Software Developer",
"logo": "../../images/logos/harvest.fr.webp",
"url": "https://www.harvest.fr",
"duration": "depuis 2016",
"entreprise": "Harvest",
"occupation": "Senior Engineer",
"logo": "../../images/logos/soprasteria.co.uk.webp",
"url": "https://www.soprasteria.com/",
"duration": "depuis 06/2023",
"entreprise": "Sopra Steria Group",
"location": "Clermont-Ferrand",
"description": "Développement de simulateurs dédiés au conseil et à la vente de produits bancaires.",
"tags": [
"Java EE",
"Java",
"Angular",
"OpenAPI",
"jQuery",
"Spring",
"Environnement Scrum"
"DevOps",
"Linux",
"Azure",
"Scrum"
],
"missions": [
{
"entreprise": "Sprint Break",
"logo": "../../images/logos/soprasteria.co.uk.webp",
"url": "https://www.michelin.fr",
"occupation": "Trésorier",
"duration": "depuis 03/2025",
"situation": "@"
},
{
"entreprise": "Michelin",
"logo": "../../images/logos/michelin.webp",
"url": "https://www.michelin.fr",
"occupation": "Fullstack Developer",
"duration": "depuis 02/2024",
"situation": "@"
},
{
"entreprise": "IN Groupe",
"logo": "../../images/logos/ingroupe.webp",
"url": "https://ingroupe.com/fr/",
"occupation": "Maintenance Applicative",
"duration": "06/2023 - 02/2024",
"situation": "pour"
}
]
},
{
"occupation": "Coordinateur événementiel",
"occupation": "Responsable Distribution",
"logo": "../../images/logos/laclameur.org.webp",
"url": "https://www.laclameur.org",
"duration": "depuis 2021",
"entreprise": "La Clameur (Association Loi 1901)",
"location": "en distanciel",
"description": "Coordination des événements de l'association, maintenance du site Internet et des fluxs RSS.",
"tags": ["Notion", "CPanel", "Wordpress", "RSS"]
"description": "Maintenance du site Internet et des fluxs RSS, communication interne.",
"tags": [
"CPanel",
"Wordpress",
"Distribution de Podcast"
]
},
{
"occupation": "Software Developer",
"logo": "../../images/logos/harvest.fr.webp",
"url": "https://www.harvest.fr",
"duration": "2016 - 2023",
"entreprise": "Harvest Groupe",
"location": "Clermont-Ferrand",
"description": "Développement de simulateurs Web dédiés au conseil et à la vente de produits bancaires.",
"tags": ["Java", "Angular", "OpenAPI", "Accessibilité", "jQuery", "Spring", "Scrum"]
},
{
"occupation": "Stagiaire Développeur Internet des Objets",
@ -61,28 +100,18 @@
"entreprise": "Université d'Auvergne",
"location": "Le Puy-en-Velay",
"description": "Programmation 3D temps réel, Web, infographie 3D, retouche d'image.",
"tags": ["Unity", "3DSMax", "Photoshop", "C++", "Python", "Web Design"]
},
{
"occupation": "L2 Informatique",
"logo": "../../images/logos/www.uca.fr.webp",
"url": "https://www.uca.fr",
"duration": "2016",
"entreprise": "Université Clermont-Auvergne",
"location": "Clermont-Ferrand",
"description": "",
"tags": ["Python", "Linux"]
"tags": ["Web Design", "Unity", "3DSMax", "Photoshop", "C++", "Python", "Gestion de Projet"]
}
]
},
"projectCard": {
"projects": [
{
"title": "IOT@Michelin",
"url": "https://prezi.com/m/o8ey8mmpnkvp/",
"image": "../../images/portfolio/computerNonSense.webp",
"imgAlt": "Une photo d'un micro ordinateur dans ma main",
"imgTitle": "Une photo d'un micro ordinateur dans ma main"
"title": "adamas.dev",
"url": "https://adamas.dev/?referer=portfolio",
"image": "../../images/portfolio/blog.webp",
"imgAlt": "Capture d'écran de adamas.dev. On peut y voir le logo du blog, ainsi que quelques liens de navigations, ainsi que la photo accompagnant un article, une assiete de houmous.",
"imgTitle": "Capture d'écran de adamas.dev. On peut y voir le logo du blog, ainsi que quelques liens de navigations, ainsi que la photo accompagnant un article, une assiete de houmous"
},
{
"title": "ADM Photographie",
@ -90,6 +119,13 @@
"image": "../../images/portfolio/admPhotos.webp",
"imgAlt": "Une photo du village de mon enfance",
"imgTitle": "Une photo du village de mon enfance"
},
{
"title": "IOT@Michelin",
"url": "https://prezi.com/m/o8ey8mmpnkvp/",
"image": "../../images/portfolio/computerNonSense.webp",
"imgAlt": "Une photo d'un micro ordinateur dans ma main",
"imgTitle": "Une photo d'un micro ordinateur dans ma main"
}
]
},
@ -110,20 +146,20 @@
"aria-label": "LinkedIn"
},
{
"title": "Telegram",
"url": "https://t.me/adamas_FR",
"title": "Signal",
"url": "https://signal.me/#eu/cpQOzblF-DM6sltmP6s58NYmnxMUEQHE-IxRnLPHXXaE7oQJc_JHGrIlVulPwGgu",
"icon": "call-outline",
"aria-label": "Telegram"
"aria-label": "Signal"
},
{
"title": "Mastodon",
"url": "https://imaginair.es/@adamas",
"url": "https://social.adm.ink/@adamas",
"icon": "logo-mastodon",
"aria-label": "Mastodon"
}
]
},
"footer": {
"legalNotice": "© 2014 - 2023 Anthony Dumas."
"legalNotice": "© 2014 - 2025 Anthony Yvon Dumas."
}
}

138
src/messages/test.json Normal file
View File

@ -0,0 +1,138 @@
{
"title": "Anthony Yvon Dumas",
"curriculumVitaeLink": "CV (.pdf)",
"experienceCard": {
"title": {
"experience": "Expériences professionnelles",
"education": "Études et diplômes"
},
"experiences": [
{
"occupation": "Ingénieur Logiciel",
"logo": "../../images/logos/soprasteria.co.uk.webp",
"url": "https://www.soprasteria.com/",
"duration": "depuis Juin 2023",
"entreprise": "Sopra Steria",
"location": "Clermont-Ferrand",
"description": "",
"tags": ["Java EE"]
},
{
"occupation": "Software Developer",
"logo": "../../images/logos/harvest.fr.webp",
"url": "https://www.harvest.fr",
"duration": "Juillet 2016 - Juin 2023",
"entreprise": "Harvest Groupe",
"location": "Clermont-Ferrand",
"description": "Développement de simulateurs dédiés au conseil et à la vente de produits bancaires.",
"tags": [
"Java EE",
"Angular",
"OpenAPI",
"jQuery",
"Spring",
"Environnement Scrum"
]
},
{
"occupation": "Coordinateur événementiel",
"logo": "../../images/logos/laclameur.org.webp",
"url": "https://www.laclameur.org",
"duration": "depuis 2021",
"entreprise": "La Clameur (Association Loi 1901)",
"location": "en distanciel",
"description": "Coordination des événements de l'association, maintenance du site Internet et des fluxs RSS.",
"tags": ["Notion", "CPanel", "Wordpress", "RSS"]
},
{
"occupation": "Stagiaire Développeur Internet des Objets",
"logo": "../../images/logos/michelin.webp",
"url": "https://www.michelin.fr",
"duration": "2015",
"entreprise": "Michelin",
"location": "Clermont-Ferrand",
"description": "Stage de fin d'étude DUT, etude du marché des objets connectés, création d'un prototype embarqué.",
"tags": [
"MongoDB",
"Node.js",
"Word",
"Powerpoint",
"Environnement Scrum"
]
}
],
"education": [
{
"occupation": "DUT Informatique - Imagerie Numérique",
"logo": "../../images/logos/www.iut-clermont.webp",
"url": "https://www.iut-clermont.fr/",
"duration": "Promotion 2015",
"entreprise": "Université d'Auvergne",
"location": "Le Puy-en-Velay",
"description": "Programmation 3D temps réel, Web, infographie 3D, retouche d'image.",
"tags": ["Unity", "3DSMax", "Photoshop", "C++", "Python", "Web Design"]
},
{
"occupation": "L2 Informatique",
"logo": "../../images/logos/www.uca.fr.webp",
"url": "https://www.uca.fr",
"duration": "2016",
"entreprise": "Université Clermont-Auvergne",
"location": "Clermont-Ferrand",
"description": "",
"tags": ["Python", "Linux"]
}
]
},
"projectCard": {
"projects": [
{
"title": "IOT@Michelin",
"url": "https://prezi.com/m/o8ey8mmpnkvp/",
"image": "../../images/portfolio/computerNonSense.webp",
"imgAlt": "Une photo d'un micro ordinateur dans ma main",
"imgTitle": "Une photo d'un micro ordinateur dans ma main"
},
{
"title": "ADM Photographie",
"url": "https://photos.adm.ink/",
"image": "../../images/portfolio/admPhotos.webp",
"imgAlt": "Une photo du village de mon enfance",
"imgTitle": "Une photo du village de mon enfance"
}
]
},
"contactCard": {
"title": "Contact",
"subtitle": "Vous pouvez me contacter de nombreuses façons !",
"ways": [
{
"title": "Courriel",
"url": "mailto:anthony@dumas.cc",
"icon": "mail-outline",
"aria-label": "Email"
},
{
"title": "LinkedIn",
"url": "https://www.linkedin.com/in/anthonyyvondumas/",
"icon": "logo-linkedin",
"aria-label": "LinkedIn"
},
{
"title": "Telegram",
"url": "https://t.me/adamas_FR",
"icon": "call-outline",
"aria-label": "Telegram"
},
{
"title": "Mastodon",
"url": "https://imaginair.es/@adamas",
"icon": "logo-mastodon",
"aria-label": "Mastodon"
}
]
},
"footer": {
"legalNotice": "© 2014 - 2023 Anthony Dumas."
}
}

View File

@ -23,7 +23,11 @@ export const language = function () {
};
export const langJson = function () {
const messageLocalized = i18nConfig.messages[language()];
return getTexts(language());
};
export const getTexts = function (lang) {
const messageLocalized = i18nConfig.messages[lang];
const messageGlobal = i18nConfig.messages[GLOBAL_MESSAGE_KEY];
const messageMerged = {
...messageLocalized,

0
test Normal file
View File