Compare commits
353 Commits
Author | SHA1 | Date | |
---|---|---|---|
df42311429 | |||
90008a1fef | |||
7ce2783bf2 | |||
ae8c57a888 | |||
1c8f370c61 | |||
afe3c0bed6 | |||
b7a4a0c99a | |||
fce5e2abfe | |||
d439c6f030 | |||
a5a368fd31 | |||
c9b071cd8d | |||
58d74e76bb | |||
81045f6d31 | |||
b967bb134e | |||
d184317982 | |||
e2a3ecb1d7 | |||
d45ac2aa06 | |||
49ba9e4d5d | |||
e06b3aa65b | |||
7e2447415f | |||
655e87fa52 | |||
79f42686de | |||
585223d18e | |||
69044e7077 | |||
ed2ccdfc3e | |||
d5fa6c6900 | |||
8948ec3f23 | |||
![]() |
732991213c | ||
![]() |
806f75a5af | ||
![]() |
a388e7952b | ||
![]() |
39cea7859e | ||
21da07eb4c | |||
![]() |
6fb0f69f6f | ||
a5a6476557 | |||
c86a601800 | |||
6372c1a512 | |||
![]() |
6a84ebd8a7 | ||
![]() |
26a91bbedd | ||
![]() |
bfce14f3f5 | ||
04069faa62 | |||
ee7711083b | |||
![]() |
96b1e28d8e | ||
af872f75fd | |||
c0468654cd | |||
0afb2402ab | |||
![]() |
c8e63e28d6 | ||
1cd5741a2d | |||
cb4c54bd3f | |||
e86964980e | |||
![]() |
e46cf3f5a6 | ||
![]() |
ced5a64e2b | ||
008fc40adb | |||
e8dddc7103 | |||
54cadc072f | |||
c6a239608f | |||
![]() |
b530f196c6 | ||
3596338dfb | |||
eebb5ed6b5 | |||
d7a9029a42 | |||
6db8878b3d | |||
45b3b37d89 | |||
![]() |
4fa78d504f | ||
![]() |
3b4571902b | ||
![]() |
e1929dd46b | ||
![]() |
a441986786 | ||
e00c967274 | |||
d7c9d8994e | |||
806d63a4fd | |||
27828625b1 | |||
e1f4433705 | |||
7bf65448d7 | |||
28151c4e2d | |||
d4b99aae41 | |||
18ea7f0938 | |||
1148353c9c | |||
b3969ddad3 | |||
824946e6a0 | |||
![]() |
290ad1d3a9 | ||
![]() |
a689047c23 | ||
1764a3439b | |||
2afd9f05c4 | |||
62fcdd55c7 | |||
![]() |
f1cdd79565 | ||
![]() |
f1607a74f4 | ||
![]() |
4213859932 | ||
999476cdd5 | |||
32486235f0 | |||
63659cdc02 | |||
6254856b6b | |||
5b1564beb6 | |||
fecefb843b | |||
543fe1cb94 | |||
b4868009ad | |||
58935df630 | |||
193aea1587 | |||
86c0df290d | |||
![]() |
494736140d | ||
c41d1835aa | |||
8160e1b6ac | |||
b44f29bfbf | |||
8b1c7d0d3f | |||
41295484a7 | |||
0486904e88 | |||
c36c00a344 | |||
2428e40904 | |||
82b7281125 | |||
![]() |
b4d5a92117 | ||
![]() |
3f047ffbbf | ||
8e0ff70d47 | |||
![]() |
ab3871f032 | ||
![]() |
722b88a4ef | ||
![]() |
77eac34ccd | ||
4e63639d1b | |||
6431437c0f | |||
6f37950710 | |||
50694f94ce | |||
b9cca4bd59 | |||
20cf9686a9 | |||
![]() |
600076d10a | ||
![]() |
b4c80a575a | ||
2d27652dbd | |||
298552e4b7 | |||
64150d9d04 | |||
a9348b8a56 | |||
7c36803040 | |||
128ec98da5 | |||
f23b8c6ce5 | |||
a812242786 | |||
![]() |
77009b74f4 | ||
c120eaa4ea | |||
c1ae173799 | |||
8fc22a92d8 | |||
281f670218 | |||
392666d05a | |||
8851f060b3 | |||
![]() |
f78a3533a3 | ||
![]() |
d1fb80b35a | ||
c7bfdd8f1a | |||
bb219cb5e2 | |||
5e361660f0 | |||
88598e61d9 | |||
![]() |
58081b6cad | ||
961eb17a7f | |||
115b432771 | |||
accaf328c2 | |||
31922417b6 | |||
b7e3edab98 | |||
159ab318e3 | |||
68b0083d77 | |||
![]() |
d5cc534a54 | ||
513e43f127 | |||
176450d36d | |||
![]() |
56ba5dc9c2 | ||
0e498334a0 | |||
f90d84d120 | |||
ba2ab435e9 | |||
![]() |
f4f9ff66f9 | ||
93da461b96 | |||
![]() |
d173aea719 | ||
39d9a4ef1f | |||
![]() |
2438a8e0ce | ||
![]() |
f47b0a669b | ||
dc3b470884 | |||
![]() |
d4eaeb9055 | ||
a02b2b9319 | |||
![]() |
848ebad566 | ||
9348099de5 | |||
255bff9b76 | |||
ea1f0a3b92 | |||
98247c2505 | |||
9bb0855adc | |||
2f3f7edcf3 | |||
110c20ed0c | |||
ba9d1b45ec | |||
32a3ac4d89 | |||
b76d44206a | |||
32e92c2151 | |||
fd2fcc5dc7 | |||
267a0c2a25 | |||
b84c3f5128 | |||
52cf674651 | |||
63c12beed4 | |||
3de49504d0 | |||
8e71e2c9d3 | |||
79007f0d0a | |||
449c0e7f88 | |||
b1dbe1f601 | |||
![]() |
3e27184388 | ||
![]() |
0d849c757c | ||
![]() |
96419b43ac | ||
![]() |
f4f3e6e10f | ||
![]() |
25b22da05e | ||
![]() |
ec1aaf85fa | ||
![]() |
9f9534a427 | ||
![]() |
c16cade4a2 | ||
![]() |
efbc5d55ad | ||
![]() |
e8cd992860 | ||
3c65a189e1 | |||
![]() |
25056cd8dc | ||
73eece2fe9 | |||
2b3e1b0926 | |||
1e8b47b6d3 | |||
5b3c140900 | |||
043e7bfbf6 | |||
18d2b9c33f | |||
9b5eb16253 | |||
65a55ce377 | |||
cd36f42dce | |||
9e243dbd53 | |||
109d6dbf95 | |||
671dcbf035 | |||
6df91e5404 | |||
6a5f8d6883 | |||
0fc60c1c02 | |||
5686f10e00 | |||
aa2fcc421e | |||
2033dd0471 | |||
3e06b87325 | |||
4b974fd05a | |||
b35cf0758d | |||
d9a6166f12 | |||
8804be802c | |||
1d77ce47a4 | |||
69284d3300 | |||
8e2865cf19 | |||
cb8dcd4c58 | |||
4a951b5499 | |||
eca9015f8c | |||
dff91f1168 | |||
d14bc4e49d | |||
41738a2dd0 | |||
62f59f59b3 | |||
b85a6a2710 | |||
d31495388e | |||
aaa583f9b1 | |||
46f6ba749f | |||
d89388e8ec | |||
f0246b2829 | |||
b14a044d60 | |||
5111261e43 | |||
3bd016e772 | |||
d5cdf9dd5e | |||
0eb2057b54 | |||
e8966bc04c | |||
d9c609f295 | |||
b38e9ad355 | |||
767119966a | |||
f9ec73b120 | |||
aa8fe201c9 | |||
9dcae07598 | |||
e2991419ee | |||
e6eb8c1530 | |||
063e6f27bd | |||
6a7a33bde2 | |||
2200615d9d | |||
dff3920bc6 | |||
4da53c3823 | |||
d97a91789d | |||
a929d2d0df | |||
2866f6da13 | |||
d7464b2731 | |||
555d908d44 | |||
d05a778952 | |||
cf102f5a41 | |||
8ea78fb498 | |||
![]() |
047045e666 | ||
34d4100427 | |||
bf9e354ac5 | |||
![]() |
da62c9e6e1 | ||
![]() |
7ea153d4c3 | ||
eaeec2639c | |||
ce9e186d53 | |||
d79b6fb7d8 | |||
52117384a1 | |||
4a8458f052 | |||
56ecad0d60 | |||
aa2d4cfeca | |||
d32000e2ff | |||
9fb7859fca | |||
4bb73cc0c7 | |||
df3457a64a | |||
e52dd83108 | |||
![]() |
33a039bb1a | ||
fe679d0be6 | |||
6c1b35972b | |||
3e239bd6c7 | |||
![]() |
721a78db32 | ||
6ca29265f0 | |||
930eb31630 | |||
bdcdf33639 | |||
501c221afd | |||
48950d281d | |||
![]() |
811013ffb3 | ||
8fa293ea77 | |||
352b34628f | |||
59be57fe24 | |||
9ed4bc3c77 | |||
0bca29c656 | |||
6e6cc1ab3f | |||
c0910f319a | |||
06ae35500b | |||
9663030a4c | |||
7e9d143ea1 | |||
6087e28ed5 | |||
40a0573847 | |||
4b6f24d510 | |||
c186559110 | |||
48faca6e52 | |||
b11f439fee | |||
22ea974ac3 | |||
342521fc92 | |||
b5fb29d5b5 | |||
e43295a04a | |||
7cf9310ef0 | |||
5a2f9ee674 | |||
![]() |
e5c36772e7 | ||
53ca3ac7af | |||
ea3495b697 | |||
b9ccbff550 | |||
4d50e85656 | |||
cdbe283902 | |||
760c6652cc | |||
a01e875a59 | |||
a950909864 | |||
b9213586c0 | |||
92c16ec5e4 | |||
703955aa9d | |||
f74afc8350 | |||
e5a8853a90 | |||
218ad94f21 | |||
844257fe5e | |||
865a116379 | |||
a6a573dfeb | |||
c28440e637 | |||
4eb0f0f371 | |||
556d313e16 | |||
cb6e8a6761 | |||
ef819b2ed7 | |||
![]() |
71f73e7f83 | ||
7bb9faaa82 | |||
82591c9d62 | |||
f352a641fe | |||
![]() |
e39dec5dc6 | ||
9fae286c11 | |||
772f57b04e | |||
2a0ee5cd0f | |||
1e01d5df94 | |||
78c10f645c | |||
![]() |
85332f3939 | ||
![]() |
07dad0dca2 | ||
![]() |
6b27365acd | ||
![]() |
39acb9d85f | ||
![]() |
aa0e3c9879 |
1
.eslintcache
Normal file
32
.gitignore
vendored
@ -1,14 +1,24 @@
|
||||
# Files
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.ruby-version
|
||||
npm-debug.log
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# Folders
|
||||
|
||||
.idea/
|
||||
.sass-cache
|
||||
_gh_pages
|
||||
_site
|
||||
node_modules
|
||||
.vscode/settings.json
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.eslintcache
|
17
.gitlab-ci.yml
Normal file
@ -0,0 +1,17 @@
|
||||
# Official framework image. Look for the different tagged releases at:
|
||||
# https://hub.docker.com/r/library/node/tags/
|
||||
image: node:latest
|
||||
|
||||
# This folder is cached between builds
|
||||
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
|
||||
cache:
|
||||
paths:
|
||||
- node_modules/
|
||||
|
||||
test_async:
|
||||
script:
|
||||
- npm install
|
||||
|
||||
test_db:
|
||||
script:
|
||||
- npm install
|
9
.gitpod.yml
Normal file
@ -0,0 +1,9 @@
|
||||
# This configuration file was automatically generated by Gitpod.
|
||||
# Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file)
|
||||
# and commit this file to your remote git repository to share the goodness with others.
|
||||
|
||||
tasks:
|
||||
- init: npm install && npm run build
|
||||
command: npm run start
|
||||
|
||||
|
18
.reactgenerator
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"componentDestination": "./src/components/",
|
||||
"styledComponentDestination": "./src/components/",
|
||||
"tscomponentDestination": "./components/",
|
||||
"viewDestination": "./src/view/",
|
||||
"storeDestination": "./src/store/",
|
||||
"pageDestination": "./pages/",
|
||||
"tspageDestination": "./pages/",
|
||||
"reduxDestination": "./src/",
|
||||
"setupDestination": "./src/",
|
||||
"reduxModuleDestination": "./src/store/",
|
||||
"serviceModuleDestination": "./src/services/",
|
||||
"servicesDestination": "./src/",
|
||||
"configDestination": "./src/services/",
|
||||
"requestDestination": "./src/services/config/",
|
||||
"storageDestination": "./src/services/config/",
|
||||
"templatePath": ""
|
||||
}
|
10
.travis.yml
@ -1,10 +0,0 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- "11"
|
||||
before_script:
|
||||
- npm install
|
||||
script:
|
||||
- npm test
|
||||
after_success:
|
||||
- npm run report-coverage
|
16
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.
|
||||
// Pointez pour afficher la description des attributs existants.
|
||||
// Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Launch localhost",
|
||||
"type": "firefox",
|
||||
"request": "launch",
|
||||
"reAttach": true,
|
||||
"url": "http://192.168.0.3:3000",
|
||||
"webRoot": "${workspaceFolder}"
|
||||
}
|
||||
]
|
||||
}
|
19
.woodpecker/maintenance.yaml
Normal 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
@ -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
@ -0,0 +1 @@
|
||||
* @AdamasFR
|
14
Dockerfile
Normal 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"]
|
70
INSTRUCTIONS.md
Normal file
@ -0,0 +1,70 @@
|
||||
# Getting Started with Create React App
|
||||
|
||||
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||
|
||||
## Available Scripts
|
||||
|
||||
In the project directory, you can run:
|
||||
|
||||
### `npm start`
|
||||
|
||||
Runs the app in the development mode.\
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
||||
|
||||
The page will reload if you make edits.\
|
||||
You will also see any lint errors in the console.
|
||||
|
||||
### `npm test`
|
||||
|
||||
Launches the test runner in the interactive watch mode.\
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `npm run build`
|
||||
|
||||
Builds the app for production to the `build` folder.\
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.\
|
||||
Your app is ready to be deployed!
|
||||
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### `npm run eject`
|
||||
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
|
||||
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
|
||||
|
||||
## Learn More
|
||||
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||
|
||||
### Code Splitting
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
|
||||
|
||||
### Analyzing the Bundle Size
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
|
||||
|
||||
### Making a Progressive Web App
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
|
||||
|
||||
### Deployment
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
|
||||
|
||||
### `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)
|
13
README.md
@ -1,10 +1,11 @@
|
||||
# Portfolio Anthony Dumas
|
||||
# anthony-dumas.fr
|
||||
|
||||
Je met a disposition le code de mon portfolio pour review et également garder une trace de l'évolution de la qualité de mon code.
|
||||
Bonjour,
|
||||
|
||||
La monture 2019 de mon site ce veux être simple. Je veux un site pratique a utiliser, a développer mais je veux également qu'il soit **accessible** par tous.
|
||||
Vous trouverez ci-joint le code source de mon portefolio en ligne.
|
||||
|
||||
## Développement
|
||||
Je vous souhaite une excellente journée,
|
||||
|
||||
- yarn start ou npm start
|
||||
> Watcher de fichier & serveur Browsersync
|
||||
**Anthony Yvon Dumas**
|
||||
|
||||
Senior Engineer @ Sopra Steria
|
@ -1,16 +0,0 @@
|
||||
var $btnMail = $("#btn-mail");
|
||||
|
||||
$btnMail.removeAttr("disabled");
|
||||
|
||||
$btnMail.click(function (evt) {
|
||||
evt.preventDefault();
|
||||
Swal.fire({
|
||||
title: 'Email',
|
||||
html: "Vous pouvez m'envoyer un mail à <strong><a href='mailto:anthony@dumas.cc'>anthony@dumas.cc</a></strong> !",
|
||||
imageUrl: './images/mail.jpg',
|
||||
imageWidth: 400,
|
||||
imageHeight: 200,
|
||||
imageAlt: 'Custom image',
|
||||
animation: false
|
||||
})
|
||||
});
|
@ -1,47 +0,0 @@
|
||||
@font-face {
|
||||
font-family: "icomoon";
|
||||
src: url("../font/fonts/icomoon.eot");
|
||||
src: url("../font/fonts/icomoon.eot?#iefix") format("embedded-opentype"), url("../font/fonts/icomoon.woff") format("woff"), url("../fonts/icomoon.ttf") format("truetype"), url("../font/fonts/icomoon.svg#icomoon") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.icon .fab {
|
||||
font-family: "icomoon";
|
||||
content: attr(data-icon);
|
||||
speak: none;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.icon-github-alt:before {
|
||||
content: "\e903";
|
||||
}
|
||||
|
||||
.icon-linke-square:before {
|
||||
content: "\e902";
|
||||
}
|
||||
|
||||
.icon-envelope-open:before {
|
||||
content: "\e901";
|
||||
}
|
||||
|
||||
.icon-twit:before {
|
||||
content: "\e904";
|
||||
}
|
||||
|
||||
.icon-teleg:before {
|
||||
content: "\e900";
|
||||
}
|
||||
|
||||
.icon-file-pdf-o:before {
|
||||
content: "\e905";
|
||||
}
|
||||
|
||||
.icon-print:before {
|
||||
content: "\e906";
|
||||
}
|
119
_sass/main.scss
@ -1,119 +0,0 @@
|
||||
@charset "utf-8";
|
||||
|
||||
// Customization
|
||||
|
||||
// You can easily customize Bulma with your own variables.
|
||||
// Just uncomment the following block to see the result.
|
||||
|
||||
/*
|
||||
// 1. Import the initial variables
|
||||
@import "../node_modules/bulma/sass/utilities/initial-variables";
|
||||
|
||||
// 2. Set your own initial variables
|
||||
// Update the blue shade, used for links
|
||||
$blue: #06bcef;
|
||||
// Add pink and its invert
|
||||
$pink: #ff8080;
|
||||
$pink-invert: #fff;
|
||||
// Update the sans-serif font family
|
||||
$family-sans-serif: "Helvetica", "Arial", sans-serif;
|
||||
|
||||
// 3. Set the derived variables
|
||||
// Use the new pink as the primary color
|
||||
$primary: $pink;
|
||||
$primary-invert: $pink-invert;
|
||||
|
||||
// 4. Import the rest of Bulma
|
||||
*/
|
||||
|
||||
/**
|
||||
Thème
|
||||
**/
|
||||
$deep-koamaru:#2b4162;
|
||||
$myrtle-green:#326273;
|
||||
$cadet-blue:#5c9ead;
|
||||
$neon-carrot:#fa9f42;
|
||||
$white:#ffffff;
|
||||
|
||||
/**
|
||||
Variables Bulma
|
||||
**/
|
||||
$primary:$cadet-blue;
|
||||
$primary-invert:#fff;
|
||||
$info:$myrtle-green;
|
||||
$info-invert:#fff;
|
||||
$footer-color:$deep-koamaru;
|
||||
$link:$neon-carrot;
|
||||
$link-hover:"";
|
||||
|
||||
html {
|
||||
background-color: $primary;
|
||||
}
|
||||
|
||||
@import "../node_modules/bulma/bulma";
|
||||
@import "icon";
|
||||
|
||||
#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
|
||||
#experiences .media-content {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: $footer-color !important;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
footer strong {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.media-content {
|
||||
margin-top: -6px;
|
||||
}
|
||||
|
||||
// Pour devices iOS qui ont un notch (si c'est pas un device avec un notch, it's no-tch your problem)
|
||||
div.hero-body {
|
||||
margin-left: env(safe-area-inset-left);
|
||||
margin-right: env(safe-area-inset-right);
|
||||
}
|
||||
|
||||
section#contact .button {
|
||||
min-width: 155px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.button.is-fullw-mobile {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.displayOnlyOnPrint {
|
||||
display:none;
|
||||
}
|
||||
|
||||
#buttonsUnderPhoto a {
|
||||
padding-left: 16px;
|
||||
padding-bottom:0;
|
||||
}
|
||||
|
||||
#photosAndButtons .media-content p + p {
|
||||
margin-top:-16px;
|
||||
}
|
||||
|
||||
.tile p.title{
|
||||
font-size: 25px;
|
||||
}
|
BIN
bulma-start.png
Before Width: | Height: | Size: 39 KiB |
7041
css/main.css
@ -1,9 +0,0 @@
|
||||
.dontPrint,
|
||||
a.button,
|
||||
p.buttons {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.displayOnlyOnPrint {
|
||||
display: inline-block;
|
||||
}
|
30
docker-compose.yml
Normal 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
|
||||
|
@ -1,7 +0,0 @@
|
||||
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
|
||||
|
||||
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts
|
||||
|
||||
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
|
||||
|
||||
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.
|
@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icomoon" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="telegram" d="M679.429 204l84 396c7.429 34.857-12.571 48.571-35.429 40l-493.714-190.286c-33.714-13.143-33.143-32-5.714-40.571l126.286-39.429 293.143 184.571c13.714 9.143 26.286 4 16-5.143l-237.143-214.286-9.143-130.286c13.143 0 18.857 5.714 25.714 12.571l61.714 59.429 128-94.286c23.429-13.143 40-6.286 46.286 21.714zM1024 438.857c0-282.857-229.143-512-512-512s-512 229.143-512 512 229.143 512 512 512 512-229.143 512-512z" />
|
||||
<glyph unicode="" glyph-name="envelope-open" d="M1024 577.143v-558.857c0-50.286-41.143-91.429-91.429-91.429h-841.143c-50.286 0-91.429 41.143-91.429 91.429v558.857c0 5.143 2.286 10.286 6.286 13.714 60 52.571 60.571 58.857 358.857 276.571 36 26.286 99.429 83.429 146.857 83.429s111.429-57.714 146.857-83.429c298.286-217.714 298.857-224 358.857-276.571 4-3.429 6.286-8.571 6.286-13.714zM701.714 242.857c89.143 64.571 151.429 109.714 197.143 144 8 5.714 9.714 17.143 3.429 25.143l-21.714 29.714c-6.286 8-17.714 9.714-25.714 3.429-45.143-33.143-106.857-78.857-196-142.857-35.429-25.714-99.429-82.857-146.857-82.857s-111.429 57.143-146.857 82.857c-89.143 64.571-150.857 109.714-196 142.857-8 6.286-19.429 4.571-25.714-3.429l-21.714-29.714c-6.286-8-4.571-19.429 3.429-25.143 45.714-34.286 108-79.429 197.143-144 44.571-32 114.857-96.571 189.714-96.571 75.429 0 147.429 65.714 189.714 96.571z" />
|
||||
<glyph unicode="" glyph-name="linkedin-square" horiz-adv-x="878" d="M135.429 142.857h132v396.571h-132v-396.571zM276 661.714c-0.571 38.857-28.571 68.571-73.714 68.571s-74.857-29.714-74.857-68.571c0-37.714 28.571-68.571 73.143-68.571h0.571c46.286 0 74.857 30.857 74.857 68.571zM610.286 142.857h132v227.429c0 121.714-65.143 178.286-152 178.286-70.857 0-102.286-39.429-119.429-66.857h1.143v57.714h-132s1.714-37.143 0-396.571v0h132v221.714c0 11.429 0.571 23.429 4 32 9.714 23.429 31.429 48 68 48 47.429 0 66.286-36 66.286-89.714v-212zM877.714 713.143v-548.571c0-90.857-73.714-164.571-164.571-164.571h-548.571c-90.857 0-164.571 73.714-164.571 164.571v548.571c0 90.857 73.714 164.571 164.571 164.571h548.571c90.857 0 164.571-73.714 164.571-164.571z" />
|
||||
<glyph unicode="" glyph-name="github-alt" horiz-adv-x="951" d="M365.714 256c0-41.714-21.714-109.714-73.143-109.714s-73.143 68-73.143 109.714 21.714 109.714 73.143 109.714 73.143-68 73.143-109.714zM731.429 256c0-41.714-21.714-109.714-73.143-109.714s-73.143 68-73.143 109.714 21.714 109.714 73.143 109.714 73.143-68 73.143-109.714zM822.857 256c0 87.429-53.143 164.571-146.286 164.571-37.714 0-73.714-6.857-111.429-12-29.714-4.571-59.429-6.286-89.714-6.286s-60 1.714-89.714 6.286c-37.143 5.143-73.714 12-111.429 12-93.143 0-146.286-77.143-146.286-164.571 0-174.857 160-201.714 299.429-201.714h96c139.429 0 299.429 26.857 299.429 201.714zM950.857 356.571c0-63.429-6.286-130.857-34.857-189.143-75.429-152.571-282.857-167.429-431.429-167.429-150.857 0-370.857 13.143-449.143 167.429-29.143 57.714-35.429 125.714-35.429 189.143 0 83.429 22.857 162.286 77.714 226.286-10.286 31.429-15.429 64.571-15.429 97.143 0 42.857 9.714 85.714 29.143 124.571 90.286 0 148-39.429 216.571-93.143 57.714 13.714 117.143 20 176.571 20 53.714 0 108-5.714 160-18.286 68 53.143 125.714 91.429 214.857 91.429 19.429-38.857 29.143-81.714 29.143-124.571 0-32.571-5.143-65.143-15.429-96 54.857-64.571 77.714-144 77.714-227.429z" />
|
||||
<glyph unicode="" glyph-name="twitter" horiz-adv-x="951" d="M925.714 717.714c-25.143-36.571-56.571-69.143-92.571-95.429 0.571-8 0.571-16 0.571-24 0-244-185.714-525.143-525.143-525.143-104.571 0-201.714 30.286-283.429 82.857 14.857-1.714 29.143-2.286 44.571-2.286 86.286 0 165.714 29.143 229.143 78.857-81.143 1.714-149.143 54.857-172.571 128 11.429-1.714 22.857-2.857 34.857-2.857 16.571 0 33.143 2.286 48.571 6.286-84.571 17.143-148 91.429-148 181.143v2.286c24.571-13.714 53.143-22.286 83.429-23.429-49.714 33.143-82.286 89.714-82.286 153.714 0 34.286 9.143 65.714 25.143 93.143 90.857-112 227.429-185.143 380.571-193.143-2.857 13.714-4.571 28-4.571 42.286 0 101.714 82.286 184.571 184.571 184.571 53.143 0 101.143-22.286 134.857-58.286 41.714 8 81.714 23.429 117.143 44.571-13.714-42.857-42.857-78.857-81.143-101.714 37.143 4 73.143 14.286 106.286 28.571z" />
|
||||
<glyph unicode="" glyph-name="file-pdf-o" horiz-adv-x="878" d="M838.857 733.714c21.143-21.143 38.857-63.429 38.857-93.714v-658.286c0-30.286-24.571-54.857-54.857-54.857h-768c-30.286 0-54.857 24.571-54.857 54.857v914.286c0 30.286 24.571 54.857 54.857 54.857h512c30.286 0 72.571-17.714 93.714-38.857zM585.143 873.143v-214.857h214.857c-3.429 9.714-8.571 19.429-12.571 23.429l-178.857 178.857c-4 4-13.714 9.143-23.429 12.571zM804.571 0v585.143h-237.714c-30.286 0-54.857 24.571-54.857 54.857v237.714h-438.857v-877.714h731.429zM510.857 338.857c14.286-11.429 30.286-21.714 48-32 24 2.857 46.286 4 66.857 4 38.286 0 86.857-4.571 101.143-28 4-5.714 7.429-16 1.143-29.714-0.571-0.571-1.143-1.714-1.714-2.286v-0.571c-1.714-10.286-10.286-21.714-40.571-21.714-36.571 0-92 16.571-140 41.714-79.429-8.571-162.857-26.286-224-47.429-58.857-100.571-104-149.714-138.286-149.714-5.714 0-10.857 1.143-16 4l-13.714 6.857c-1.714 0.571-2.286 1.714-3.429 2.857-2.857 2.857-5.143 9.143-3.429 20.571 5.714 26.286 36.571 70.286 107.429 107.429 4.571 2.857 10.286 1.143 13.143-3.429 0.571-0.571 1.143-1.714 1.143-2.286 17.714 29.143 38.286 66.286 61.143 112.571 25.714 51.429 45.714 101.714 59.429 149.714-18.286 62.286-24 126.286-13.714 164 4 14.286 12.571 22.857 24 22.857h12.571c8.571 0 15.429-2.857 20-8.571 6.857-8 8.571-20.571 5.143-38.857-0.571-1.714-1.143-3.429-2.286-4.571 0.571-1.714 0.571-2.857 0.571-4.571v-17.143c-0.571-36-1.143-70.286-8-109.714 20-60 49.714-108.571 83.429-136zM181.714 104c17.143 8 41.714 32.571 78.286 90.286-42.857-33.143-69.714-70.857-78.286-90.286zM409.143 629.714c-5.714-16-5.714-43.429-1.143-75.429 1.714 9.143 2.857 17.714 4 25.143 1.143 9.714 2.857 17.714 4 24.571 0.571 1.714 1.143 2.857 2.286 4.571-0.571 0.571-0.571 1.714-1.143 2.857-0.571 10.286-4 16.571-7.429 20.571 0-1.143-0.571-1.714-0.571-2.286zM338.286 252c50.286 20 106.286 36 162.286 46.286-5.714 4.571-11.429 8.571-16.571 13.143-28 24.571-53.143 58.857-72.571 100.571-10.857-34.857-26.857-72-47.429-112.571-8.571-16-17.143-32-25.714-47.429zM707.429 261.143c-2.857 2.857-17.714 13.714-80 13.714 28-10.286 53.714-16 70.857-16 5.143 0 8 0 10.286 0.571 0 0.571-0.571 1.143-1.143 1.714z" />
|
||||
<glyph unicode="" glyph-name="print" horiz-adv-x="951" d="M219.429 73.143h512v146.286h-512v-146.286zM219.429 438.857h512v219.429h-91.429c-30.286 0-54.857 24.571-54.857 54.857v91.429h-365.714v-365.714zM877.714 402.286c0 20-16.571 36.571-36.571 36.571s-36.571-16.571-36.571-36.571 16.571-36.571 36.571-36.571 36.571 16.571 36.571 36.571zM950.857 402.286v-237.714c0-9.714-8.571-18.286-18.286-18.286h-128v-91.429c0-30.286-24.571-54.857-54.857-54.857h-548.571c-30.286 0-54.857 24.571-54.857 54.857v91.429h-128c-9.714 0-18.286 8.571-18.286 18.286v237.714c0 60 49.714 109.714 109.714 109.714h36.571v310.857c0 30.286 24.571 54.857 54.857 54.857h384c30.286 0 72-17.143 93.714-38.857l86.857-86.857c21.714-21.714 38.857-63.429 38.857-93.714v-146.286h36.571c60 0 109.714-49.714 109.714-109.714z" />
|
||||
</font></defs></svg>
|
Before Width: | Height: | Size: 7.4 KiB |
@ -1,47 +0,0 @@
|
||||
@font-face {
|
||||
font-family: 'icomoon';
|
||||
src: url('fonts/icomoon.eot?uh9w96');
|
||||
src: url('fonts/icomoon.eot?uh9w96#iefix') format('embedded-opentype'),
|
||||
url('fonts/icomoon.ttf?uh9w96') format('truetype'),
|
||||
url('fonts/icomoon.woff?uh9w96') format('woff'),
|
||||
url('fonts/icomoon.svg?uh9w96#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
/* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'icomoon' !important;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
|
||||
/* Better Font Rendering =========== */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-file-pdf-o:before {
|
||||
content: "\e905";
|
||||
}
|
||||
.icon-twitter:before {
|
||||
content: "\e904";
|
||||
}
|
||||
.icon-telegram:before {
|
||||
content: "\e900";
|
||||
}
|
||||
.icon-envelope-open:before {
|
||||
content: "\e901";
|
||||
}
|
||||
.icon-linkedin-square:before {
|
||||
content: "\e902";
|
||||
}
|
||||
.icon-github-alt:before {
|
||||
content: "\e903";
|
||||
}
|
||||
.icon-print:before {
|
||||
content: "\e906";
|
||||
}
|
14
generate-react-cli.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"usesTypeScript": false,
|
||||
"usesStyledComponents": true,
|
||||
"testLibrary": "None",
|
||||
"component": {
|
||||
"default": {
|
||||
"path": "src/components",
|
||||
"withStyle": true,
|
||||
"withTest": false,
|
||||
"withStory": false,
|
||||
"withLazy": false
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 19 KiB |
BIN
images/mail.jpg
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 563 KiB |
Before Width: | Height: | Size: 29 KiB |
342
index.html
@ -1,342 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name='viewport' content='initial-scale=1, viewport-fit=cover'>
|
||||
<title>Anthony Dumas - Portfolio</title>
|
||||
<meta name="description" content="Anthony Dumas - Portfolio">
|
||||
<meta name="keywords" content="Anthony,Dumas,Portfolio,Developpeur,Clermont-Ferrand,Auvergne,Web,Javascript">
|
||||
<meta name="author" content="Anthony Dumas">
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="css/main.css">
|
||||
<link rel="stylesheet" href="css/print.css" media="print">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section id="menu" class="hero is-primary dontPrint is-bold">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<h1 class="title">
|
||||
Anthony Dumas
|
||||
</h1>
|
||||
<h2 class="subtitle">
|
||||
Développeur sur les internets
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="idCard" class="hero is-medium is-primary-inverted is-bold">
|
||||
<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-3-tablet">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<figure id="photoProfil" class="image">
|
||||
<img src="images/profile_opt.jpg" alt="Une Photo de moi">
|
||||
</figure>
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<div class="media">
|
||||
<div class="media-content">
|
||||
<p id="buttonsUnderPhoto" class="buttons are-large ">
|
||||
<a class="button" rel="noopener" href="https://github.com/AdamasFR"
|
||||
target="_blank" aria-label="Profil Github">
|
||||
<span class="icon is-large">
|
||||
<i class="fab icon-github-alt"></i>
|
||||
</span>
|
||||
</a>
|
||||
<a class="button" rel="noopener"
|
||||
href="https://www.linkedin.com/in/anthonyyvondumas/" target="_blank">
|
||||
<span class="icon" aria-label="Profil LinkedIn">
|
||||
<i class="fab icon-linke-square"></i>
|
||||
</span>
|
||||
</a>
|
||||
<a class="button" rel="noopener"
|
||||
href="https://www.twitter.com/anthony__dumas"
|
||||
aria-label="Profil Twitter" target="_blank">
|
||||
<span class="icon">
|
||||
<i class="fab icon-twit"></i>
|
||||
</span>
|
||||
</a>
|
||||
</p>
|
||||
<p id="boutonCV" class="buttons are-large">
|
||||
<a class="button is-fullwidth" rel="noopener"
|
||||
href="./asset/anthony-dumas-cv.pdf" target="_blank">
|
||||
<span class="icon">
|
||||
<i class="fab icon-file-pdf-o"></i>
|
||||
</span>
|
||||
<span>CV</span>
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<p class="displayOnlyOnPrint">Anthony Dumas</p>
|
||||
<p class="displayOnlyOnPrint">anthony[arobase]dumas.cc</p>
|
||||
<p class="dontPrint"><noscript>anthony[arobase]dumas.cc</noscript></p>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column is-7" id="experiences">
|
||||
<span class="title">Experience</span>
|
||||
<div class="card-content" id="harvest">
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<figure class="image is-48x48">
|
||||
<img src="images/logos/harvest.fr.png" alt="Logo Harvest">
|
||||
</figure>
|
||||
</div>
|
||||
<div class="media-content">
|
||||
<p class="title is-4">Développeur Web</p>
|
||||
<p class="subtitle is-6">Harvest - Clermont-Ferrand - (2016 - Actuel)</p>
|
||||
<div class="tags">
|
||||
<span class="tag">Java</span>
|
||||
<span class="tag">JQuery</span>
|
||||
<span class="tag">Spring</span>
|
||||
<span class="tag">Jira</span>
|
||||
<span class="tag">Excel</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
Développement de simulateurs bancaires responsives.
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-content" id="michelin">
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<figure class="image is-48x48">
|
||||
<img src="images/logos/michelin.png" alt="Logo Michelin">
|
||||
</figure>
|
||||
</div>
|
||||
<div class="media-content">
|
||||
<p class="title is-4">Développeur Internet des Objets</p>
|
||||
<p class="subtitle is-6">Michelin - Clermont-Ferrand - (Ete 2015)</p>
|
||||
<div class="tags">
|
||||
<span class="tag">MongoDB</span>
|
||||
<span class="tag">Node.JS</span>
|
||||
<span class="tag">Word</span>
|
||||
<span class="tag">Powerpoint</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
Etude du marché des objets connectés, création d'un prototype.
|
||||
</div>
|
||||
</div>
|
||||
<span class="title">Education</span>
|
||||
<div class="card-content" id="dutInformatique">
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<figure class="image is-48x48">
|
||||
<img src="images/logos/www.iut-clermont.png" alt="Logo IUT Puy en Velay">
|
||||
</figure>
|
||||
</div>
|
||||
<div class="media-content">
|
||||
<p class="title is-4">DUT Informatique - Imagerie Numérique</p>
|
||||
<p class="subtitle is-6">IUT du Puy en Velay - (2013 - 2015)</p>
|
||||
<div class="tags">
|
||||
<span class="tag">Unity</span>
|
||||
<span class="tag">3DSMax</span>
|
||||
<span class="tag">Visual Studio</span>
|
||||
<span class="tag">Photoshop</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
Programmation 3D temps réel, Web, infographie 3D, retouche d'image.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="projets" class="hero is-primary">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<div class="tile is-ancestor">
|
||||
<div class="tile is-vertical is-4">
|
||||
<div class="tile">
|
||||
<div class="tile is-parent">
|
||||
<article class="tile is-child notification is-info">
|
||||
<a href="//adamas.dev" target="_blank" rel="noopener">
|
||||
<p class="title">adamas.dev</p>
|
||||
<figure class="image is-4by3">
|
||||
<img src="./images/portfolio/vinyls.jpg"
|
||||
alt="Des mains parcourant des vinyles sur un étalage"
|
||||
title="Photo by Florencia Viadana on Unsplash" />
|
||||
</figure>
|
||||
</a>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tile is-vertical is-4">
|
||||
<div class="tile">
|
||||
<div class="tile is-parent">
|
||||
<article class="tile is-child notification is-info">
|
||||
<a href="https://prezi.com/m/o8ey8mmpnkvp/" target="_blank" rel="noopener">
|
||||
<p class="title">IOT@Michelin</p>
|
||||
<figure class="image is-4by3">
|
||||
<img alt="Une photo d'un micro ordinateur dans ma main"
|
||||
src="./images/portfolio/computerNonSense.jpg" />
|
||||
</figure>
|
||||
</a>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tile is-vertical is-4">
|
||||
<div class="tile">
|
||||
<div class="tile is-parent">
|
||||
<article class="tile is-child notification is-info">
|
||||
<a href="//adm.photos" target="_blank" rel="noopener">
|
||||
<p class="title">adm.photos</p>
|
||||
<figure class="image is-4by3">
|
||||
<img alt="Une photo du village de mon enfance"
|
||||
src="./images/portfolio/admPhotos.jpg" />
|
||||
</figure>
|
||||
</a>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="hero is-info dontPrint" id="contact">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<h1 class="title">
|
||||
Contact
|
||||
</h1>
|
||||
<h2 class="subtitle">
|
||||
Vous pouvez me contacter de nombreuses façons !
|
||||
</h2>
|
||||
<div class="columns">
|
||||
<div class="column is-3 is-offset-2-widescreen">
|
||||
<a id="btn-mail" disabled class="button is-large is-fullw-mobile"
|
||||
alt="Contactez moi par mail a anthony arobase dumas point cc !">
|
||||
<span class="icon">
|
||||
<i class="fab icon-envelope-open"></i>
|
||||
</span>
|
||||
<span>Email</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="column is-3">
|
||||
<a class="button is-large is-fullw-mobile" rel="noopener"
|
||||
href="https://www.linkedin.com/in/anthonyyvondumas/" target="_blank" alt="Profil LinkedIn">
|
||||
<span class="icon">
|
||||
<i class="fab icon-linke-square"></i>
|
||||
</span>
|
||||
<span>LinkedIn</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="column is-3">
|
||||
<a class="button is-large is-fullw-mobile" rel="noopener" href="https://t.me/adamas_FR"
|
||||
target="_blank" alt="Profil Telegram.me">
|
||||
<span class="icon">
|
||||
<i class="fab icon-teleg"></i>
|
||||
</span>
|
||||
<span>Telegram</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="column is-3">
|
||||
<a class="button is-large is-fullw-mobile is-hidden-tablet" rel="noopener"
|
||||
href="https://github.com/AdamasFR" target="_blank" alt="Profil Github">
|
||||
<span class="icon">
|
||||
<i class="fab icon-github-alt"></i>
|
||||
</span>
|
||||
<span>Github</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Footer -->
|
||||
<footer class="footer has-text-centered dontPrint">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column is-8-desktop is-offset-2-desktop">
|
||||
<p>
|
||||
<strong class="has-text-weight-semibold">
|
||||
<a rel="noopener" href="https://anthony-dumas.fr">anthony-dumas.fr</a>
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<small>
|
||||
Auteur : <strong>Anthony Dumas</strong>
|
||||
</small>
|
||||
</p>
|
||||
<p>
|
||||
<small>
|
||||
Source code licensed <a rel="noopener" href="http://opensource.org/licenses/mit-license.php"
|
||||
target="_blank">MIT</a>
|
||||
</small>
|
||||
</p>
|
||||
<p style="margin-top: 1rem;">
|
||||
<a rel="noopener" href="http://bulma.io" target="_blank">
|
||||
<img src="images/made-with-bulma.png" alt="Made with Bulma" width="128" height="24">
|
||||
</a>
|
||||
<a rel="noopener" href="https://www.infomaniak.com/fr" target="_blank">
|
||||
<img src="images/poweredByInfomaniak.bmp" alt="Powered By Infomaniak.com" width="70">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<!-- Matomo -->
|
||||
<script type="text/javascript">
|
||||
var trackingIsOkay = true;
|
||||
if (window.doNotTrack || navigator.doNotTrack || navigator.msDoNotTrack || 'msTrackingProtectionEnabled' in
|
||||
window.external) {
|
||||
// The browser supports Do Not Track!
|
||||
if (window.doNotTrack == "1" || navigator.doNotTrack == "yes" || navigator.doNotTrack == "1" || navigator
|
||||
.msDoNotTrack == "1" || window.external.msTrackingProtectionEnabled()) {
|
||||
// Do Not Track is enabled!
|
||||
trackingIsOkay = false;
|
||||
}
|
||||
}
|
||||
if (trackingIsOkay) {
|
||||
var _paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
var _paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function () {
|
||||
var u = "//adm.ink/statistiques/";
|
||||
_paq.push(['setTrackerUrl', u + 'matomo.php']);
|
||||
_paq.push(['setSiteId', '3']);
|
||||
var d = document,
|
||||
g = d.createElement('script'),
|
||||
s = d.getElementsByTagName('script')[0];
|
||||
g.type = 'text/javascript';
|
||||
g.async = true;
|
||||
g.defer = true;
|
||||
g.src = u + 'matomo.js';
|
||||
s.parentNode.insertBefore(g, s);
|
||||
})();
|
||||
}
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
<script type="text/javascript" src="node_modules/jquery/dist/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="lib/main.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@8"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
18
lib/main.js
@ -1,18 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
var $btnMail = $("#btn-mail");
|
||||
|
||||
$btnMail.removeAttr("disabled");
|
||||
|
||||
$btnMail.click(function (evt) {
|
||||
evt.preventDefault();
|
||||
Swal.fire({
|
||||
title: 'Email',
|
||||
html: "Vous pouvez m'envoyer un mail à <strong><a href='mailto:anthony@dumas.cc'>anthony@dumas.cc</a></strong> !",
|
||||
imageUrl: './images/mail.jpg',
|
||||
imageWidth: 400,
|
||||
imageHeight: 200,
|
||||
imageAlt: 'Custom image',
|
||||
animation: false
|
||||
});
|
||||
});
|
32271
package-lock.json
generated
88
package.json
@ -1,58 +1,44 @@
|
||||
{
|
||||
"name": "anthony-dumas-portfolio",
|
||||
"version": "2.0.0-SNAPSHOT",
|
||||
"description": "anthony-dumas-portfolio",
|
||||
"keywords": [
|
||||
"sass",
|
||||
"bulma",
|
||||
"css",
|
||||
"start"
|
||||
],
|
||||
"author": "Anthony Dumas <anthony@dumas.css>",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/AdamasFR/CV_Web_Dumas.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^9.5.1",
|
||||
"ava": "^1.4.1",
|
||||
"babel-cli": "^6.26.0",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"babel-preset-es2015-ie": "^6.7.0",
|
||||
"bulma": "^0.7.2",
|
||||
"co-exec": "^1.0",
|
||||
"codecov": "^1.0.1",
|
||||
"ghooks": "^1.2.4",
|
||||
"node-sass": "^4.12.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"nyc": "^14.1.0",
|
||||
"postcss-cli": "^6.1.1",
|
||||
"standard": "^8.4.0"
|
||||
"name": "anthony-dumas.fr",
|
||||
"version": "2023.1.001",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@testing-library/jest-dom": "^5.11.6",
|
||||
"@testing-library/react": "^11.2.2",
|
||||
"@testing-library/user-event": "^12.5.0",
|
||||
"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.71.1",
|
||||
"web-vitals": "^0.2.4"
|
||||
},
|
||||
"scripts": {
|
||||
"css-deploy": "npm run css-build && npm run css-postcss",
|
||||
"css-build": "node-sass _sass/main.scss css/main.css",
|
||||
"css-postcss": "postcss --use autoprefixer --output css/main.css css/main.css",
|
||||
"css-watch": "npm run css-build -- --watch",
|
||||
"deploy": "npm run css-deploy && npm run js-build",
|
||||
"js-build": "babel _javascript --out-dir lib",
|
||||
"js-watch": "npm run js-build -- --watch",
|
||||
"auto-loading": "npx browser-sync start --server --files '*.html' --files 'css/*.css'",
|
||||
"start": "npm-run-all --parallel css-watch js-watch auto-loading",
|
||||
"report-coverage": "nyc report --reporter=lcov > coverage.lcov && codecov",
|
||||
"standard": "standard index.js",
|
||||
"test": "nyc ./node_modules/.bin/ava -v"
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject",
|
||||
"prod": "forever start $(which npx) serve -l 80 -s build",
|
||||
"jetstart": "rm -r node_* && npm i && clear && npm run start"
|
||||
},
|
||||
"dependencies": {
|
||||
"browser-sync": "^2.26.5",
|
||||
"global": "^4.3.2",
|
||||
"jquery": "^3.4.1",
|
||||
"npx": "^10.2.0"
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"ghooks": {
|
||||
"pre-commit": "npm run standard"
|
||||
}
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
BIN
public/images/logos/harvest.fr.webp
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
public/images/logos/ingroupe.webp
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
public/images/logos/laclameur.org.webp
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
public/images/logos/michelin.webp
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
public/images/logos/soprasteria.co.uk.webp
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
public/images/logos/www.iut-clermont.webp
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
public/images/logos/www.uca.fr.webp
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
public/images/mail.webp
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
public/images/portfolio/admPhotos.webp
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
public/images/portfolio/blog.webp
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
public/images/portfolio/computerNonSense.webp
Normal file
After Width: | Height: | Size: 7.3 KiB |
66
public/index.html
Normal file
@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#326273" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Anthony Dumas - Programmeur de les Internet."
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
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 - Portfolio</title>
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = (window._paq = window._paq || []);
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(["trackPageView"]);
|
||||
_paq.push(["enableLinkTracking"]);
|
||||
(function () {
|
||||
var u = "//matomo.adm.ink/";
|
||||
_paq.push(["setTrackerUrl", u + "matomo.php"]);
|
||||
_paq.push(["setSiteId", "1"]);
|
||||
var d = document,
|
||||
g = d.createElement("script"),
|
||||
s = d.getElementsByTagName("script")[0];
|
||||
g.async = true;
|
||||
g.src = u + "matomo.js";
|
||||
s.parentNode.insertBefore(g, s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<h1>Ce site requiert Javascript (désolé !)</h1>
|
||||
Dirigez vous vers
|
||||
<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://social.adm.ink/@adamas">Mastodon</a>!
|
||||
</noscript>
|
||||
<div id="root"></div>
|
||||
<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>
|
25
public/manifest.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
3
public/robots.txt
Normal file
@ -0,0 +1,3 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
5
robots.txt
Normal file
@ -0,0 +1,5 @@
|
||||
User-agent: GPTBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: ClaudeBot
|
||||
Disallow: /
|
0
src/App.css
Normal file
31
src/App.js
Normal file
@ -0,0 +1,31 @@
|
||||
import './App.css';
|
||||
import './_sass/index.scss';
|
||||
|
||||
import { lazy, Suspense } from 'react';
|
||||
|
||||
|
||||
const MenuComponent = lazy(() => import('./components/MenuComponent/index'));
|
||||
const MainCard = lazy(() => import('./components/MainCard/MainCard'));
|
||||
const ProjectsCard = lazy(() => import('./components/ProjectsCard'));
|
||||
const ContactCard = lazy(() => import('./components/ContactCard'));
|
||||
const FooterCard = lazy(() => import('./components/FooterCard'));
|
||||
|
||||
const renderLoader = () => <p>Loading</p>;
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<Suspense className="topNavigation" fallback={renderLoader()}>
|
||||
<MenuComponent />
|
||||
<MainCard />
|
||||
</Suspense>
|
||||
<Suspense fallback={renderLoader()}>
|
||||
<ProjectsCard />
|
||||
<ContactCard />
|
||||
<FooterCard />
|
||||
</Suspense>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
18
src/App.test.js
Normal file
@ -0,0 +1,18 @@
|
||||
import React from 'react';
|
||||
import { IntlProvider } from 'react-intl';
|
||||
|
||||
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();
|
||||
});
|
||||
|
1
src/_sass/index.scss
Normal file
@ -0,0 +1 @@
|
||||
@use "main.scss";
|
106
src/_sass/main.scss
Normal file
@ -0,0 +1,106 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/**
|
||||
Thème
|
||||
**/
|
||||
$deep-koamaru: #152528;
|
||||
$myrtle-green: #1d353a;
|
||||
$cadet-blue: #25444b;
|
||||
$neon-carrot: #142225;
|
||||
$admink-brand: #f38d68;
|
||||
|
||||
@use "bulma/sass" with (
|
||||
$primary: $cadet-blue,
|
||||
$info: $myrtle-green,
|
||||
$footer-color: $deep-koamaru,
|
||||
$success: $deep-koamaru,
|
||||
$link: $neon-carrot
|
||||
);
|
||||
|
||||
html {
|
||||
background-color: $myrtle-green;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
#idCard {
|
||||
.hero-body {
|
||||
padding-bottom: 2rem;
|
||||
padding-top: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
// retire les barres de scroll des panneaux experience/education
|
||||
#experiences .media-content {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: $deep-koamaru !important;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
footer strong {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.media-content {
|
||||
margin-top: -6px;
|
||||
}
|
||||
|
||||
// Pour devices iOS qui ont un notch (si c'est pas un device avec un notch, it's no-tch your problem)
|
||||
div.hero-body {
|
||||
margin-left: env(safe-area-inset-left);
|
||||
margin-right: env(safe-area-inset-right);
|
||||
}
|
||||
|
||||
section#contact .button {
|
||||
min-width: 155px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.button.is-fullw-mobile {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.displayOnlyOnPrint {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tile p.title {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
//
|
||||
footer small {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
// Photo de Profil
|
||||
#photoProfil {
|
||||
background-color: $myrtle-green;
|
||||
}
|
||||
|
||||
.tile.is-vertical {
|
||||
background-color: unset;
|
||||
}
|
||||
|
||||
// fix d'un affichage désagréable sur la carte Bulma
|
||||
#photosAndButtons .card {
|
||||
border-radius: unset;
|
||||
box-shadow: unset;
|
||||
background-color: $deep-koamaru;
|
||||
}
|
||||
|
||||
#mailWhenNoJavascript {
|
||||
text-align: left;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
p.title a {
|
||||
color: $admink-brand !important;
|
||||
}
|
21
src/components/ButtonIcon/ButtonIcon.js
Normal file
@ -0,0 +1,21 @@
|
||||
import './ButtonIcon.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
|
||||
|
||||
export default class ButtonIcon extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
return <a rel="noopener noreferrer me" href={this.props.lien} target="_blank">
|
||||
<button className="button" aria-label="Bouton {this.props.aria-label}">
|
||||
<span className="icon">
|
||||
<ion-icon name={this.props.icon}></ion-icon>
|
||||
</span>
|
||||
</button>
|
||||
</a>;
|
||||
|
||||
}
|
||||
}
|
0
src/components/ButtonIcon/ButtonIcon.scss
Normal file
2
src/components/ButtonIcon/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ButtonIcon from "./ButtonIcon"
|
||||
export default ButtonIcon;
|
30
src/components/ContactButton/ContactButton.js
Normal file
@ -0,0 +1,30 @@
|
||||
import './ContactButton.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
|
||||
|
||||
// import { connect } from "react-redux";
|
||||
// import { bindActionCreators } from "redux";
|
||||
// import * as contactButtonActions from "../../store/contactButton/actions";
|
||||
export default class ContactButton extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
const data = this.props.data;
|
||||
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 className="icon">
|
||||
<ion-icon name={data.icon}></ion-icon>
|
||||
</span>
|
||||
<span>{data.title}</span>
|
||||
</a>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
// export default connect(
|
||||
// ({ contactButton }) => ({ ...contactButton }),
|
||||
// dispatch => bindActionCreators({ ...contactButtonActions }, dispatch)
|
||||
// )( contactButton );
|
4
src/components/ContactButton/ContactButton.scss
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
.component-contact-button{
|
||||
|
||||
}
|
2
src/components/ContactButton/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ContactButton from "./ContactButton"
|
||||
export default ContactButton;
|
40
src/components/ContactCard/ContactCard.js
Normal file
@ -0,0 +1,40 @@
|
||||
import './ContactCard.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
import { injectIntl } from 'react-intl';
|
||||
|
||||
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 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>;
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(ContactCard)
|
4
src/components/ContactCard/ContactCard.scss
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
.component-contact-card{
|
||||
|
||||
}
|
2
src/components/ContactCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ContactCard from "./ContactCard"
|
||||
export default ContactCard;
|
51
src/components/ExperienceCard/ExperienceCard.js
Normal file
@ -0,0 +1,51 @@
|
||||
import './ExperienceCard.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import ExperienceSlimSpanWrapper from '../ExperienceSlimSpan/ExperienceSlimSpan';
|
||||
|
||||
|
||||
export default class ExperienceCard extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
var data = this.props.data;
|
||||
var imgSrc = data.logo;
|
||||
return <div className="card-content">
|
||||
<div className="media">
|
||||
<div className="media-left">
|
||||
<a href={data.url} target="_blank" rel="noreferrer">
|
||||
<figure className="image is-48x48">
|
||||
<img src={imgSrc} alt="Logo Entreprise" />
|
||||
</figure>
|
||||
</a>
|
||||
</div>
|
||||
<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} 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>
|
||||
}
|
||||
}
|
28
src/components/ExperienceCard/ExperienceCard.scss
Normal file
@ -0,0 +1,28 @@
|
||||
.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;
|
||||
}
|
2
src/components/ExperienceCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ExperienceCard from "./ExperienceCard"
|
||||
export default ExperienceCard;
|
23
src/components/ExperienceSlimSpan/ExperienceSlimSpan.js
Normal 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>
|
||||
}
|
||||
};
|
52
src/components/FooterCard/FooterCard.js
Normal file
@ -0,0 +1,52 @@
|
||||
import './FooterCard.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
import { injectIntl } from 'react-intl';
|
||||
|
||||
import bulmaLogo from '../../images/made-with-bulma.webp';
|
||||
import scalewayLogo from '../../images/scaleway_logo.webp';
|
||||
|
||||
|
||||
// import { connect } from "react-redux";
|
||||
// import { bindActionCreators } from "redux";
|
||||
// import * as FooterCardActions from "../../store/FooterCard/actions";
|
||||
class FooterCard extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
render() {
|
||||
const footerMessage = this.props.intl.messages.footer;
|
||||
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 className="has-text-weight-semibold">
|
||||
anthony-dumas.fr
|
||||
</strong>
|
||||
</p>
|
||||
<p>
|
||||
<small className="sosumi">
|
||||
{footerMessage.legalNotice}
|
||||
</small>
|
||||
</p>
|
||||
<p id="footer-credits">
|
||||
<small>powered by</small>
|
||||
<br />
|
||||
<a rel="noopener noreferrer" href="http://bulma.io" alt="Framework used on this website" target="_blank">
|
||||
<img src={bulmaLogo} alt="Made with Bulma" width="128" height="24" />
|
||||
</a>
|
||||
<br />
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</footer>;
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(FooterCard)
|
3
src/components/FooterCard/FooterCard.scss
Normal file
@ -0,0 +1,3 @@
|
||||
#footer-credits{
|
||||
margin-top: 1rem;
|
||||
}
|
2
src/components/FooterCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import FooterCard from "./FooterCard"
|
||||
export default FooterCard;
|
128
src/components/MainCard/MainCard.js
Normal file
@ -0,0 +1,128 @@
|
||||
import './MainCard.scss';
|
||||
|
||||
import { PowerGlitch } from 'powerglitch';
|
||||
import React, { Component } from 'react';
|
||||
import { FormattedMessage, injectIntl } from 'react-intl';
|
||||
|
||||
import headshotFond from '../../images/headshot_fond.webp';
|
||||
import headshotMain from '../../images/headshot_main.webp';
|
||||
import ButtonIcon from '../ButtonIcon/index';
|
||||
import ExperienceCard from '../ExperienceCard/index';
|
||||
|
||||
|
||||
class MainCard extends Component {
|
||||
|
||||
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]");
|
||||
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" 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 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 className="control">
|
||||
<ButtonIcon
|
||||
icon="logo-linkedin"
|
||||
aria-label="Linkedin"
|
||||
lien="https://www.linkedin.com/in/anthonyyvondumas/" />
|
||||
</p>
|
||||
<p className="control">
|
||||
<ButtonIcon
|
||||
icon="logo-mastodon"
|
||||
aria-label="Mastodon"
|
||||
lien="https://social.adm.ink/@adamas" />
|
||||
</p>
|
||||
</div>
|
||||
<p id="boutonCV" className="field">
|
||||
<a rel="noreferrer noopener" target="_blank"
|
||||
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>
|
||||
</button>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="content">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<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 key={index}
|
||||
data={experience} />;
|
||||
})}
|
||||
<span className="title">{experienceCardMessage.title.education}</span>
|
||||
{experienceCardMessage.education.map(function (education, index) {
|
||||
return <ExperienceCard key={index}
|
||||
data={education} />;
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default injectIntl(MainCard)
|
13
src/components/MainCard/MainCard.scss
Normal file
@ -0,0 +1,13 @@
|
||||
#photoProfil {
|
||||
overflow: clip;
|
||||
border: 1px solid #3c3c3c;
|
||||
|
||||
.background {
|
||||
position: absolute;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
#boutonCV a {
|
||||
display: flex;
|
||||
}
|
2
src/components/MainCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import mainCard from "./mainCard"
|
||||
export default mainCard;
|
62
src/components/MenuComponent/MenuComponent.js
Normal file
@ -0,0 +1,62 @@
|
||||
import './MenuComponent.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
import { FormattedMessage, injectIntl } from 'react-intl';
|
||||
|
||||
import { URL_add_parameter } from '../../services/parameters.service';
|
||||
|
||||
|
||||
class MenuComponent extends Component {
|
||||
// constructor(props) {
|
||||
// super(props);
|
||||
// this.state = {};
|
||||
// }
|
||||
honhonhon() {
|
||||
window.location.href = URL_add_parameter(window.location.href, "lang", "fr");
|
||||
}
|
||||
|
||||
heygovna() {
|
||||
window.location.href = URL_add_parameter(window.location.href, "lang", "en");
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
const buttonsLanguagesMessage = this.props.intl.messages.global.buttons.languages;
|
||||
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 className="subtitle">
|
||||
{currentJob.occupation} @ {currentJob.entreprise}
|
||||
</h2>
|
||||
</div>
|
||||
<div className="column is-hidden-touch">
|
||||
<div id="langButtons">
|
||||
<div className="buttons">
|
||||
<span className="button is-light" onClick={this.honhonhon} aria-label="Visiter le site en Français">
|
||||
{buttonsLanguagesMessage.fr}
|
||||
</span>
|
||||
<span className="button is-light" onClick={this.heygovna} aria-label="Visit the website in English">
|
||||
{buttonsLanguagesMessage.en}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
}
|
||||
// export default connect(
|
||||
// ({ MenuComponent }) => ({ ...MenuComponent }),
|
||||
// dispatch => bindActionCreators({ ...MenuComponentActions }, dispatch)
|
||||
// )( MenuComponent );
|
||||
|
||||
export default injectIntl(MenuComponent)
|
5
src/components/MenuComponent/MenuComponent.scss
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
#langButtons {
|
||||
font-weight: bold;
|
||||
float:right;
|
||||
}
|
2
src/components/MenuComponent/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import MenuComponent from "./MenuComponent"
|
||||
export default MenuComponent;
|
29
src/components/ProjectCard/ProjectCard.js
Normal file
@ -0,0 +1,29 @@
|
||||
import './ProjectCard.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
|
||||
|
||||
export default class ProjectCard extends Component {
|
||||
|
||||
render() {
|
||||
const data = this.props.data;
|
||||
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>;
|
||||
}
|
||||
}
|
0
src/components/ProjectCard/ProjectCard.scss
Normal file
2
src/components/ProjectCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ProjectCard from "./ProjectCard"
|
||||
export default ProjectCard;
|
28
src/components/ProjectsCard/ProjectsCard.js
Normal file
@ -0,0 +1,28 @@
|
||||
import './ProjectsCard.scss';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
import { injectIntl } from 'react-intl';
|
||||
|
||||
import ProjectCard from '../ProjectCard/index';
|
||||
|
||||
|
||||
class ProjectsCard extends Component {
|
||||
render() {
|
||||
const projectCardsMessage = this.props.intl.messages.projectCard;
|
||||
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 key={index}
|
||||
data={projects}
|
||||
/>;
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
}
|
||||
|
||||
export default injectIntl(ProjectsCard)
|
0
src/components/ProjectsCard/ProjectsCard.scss
Normal file
2
src/components/ProjectsCard/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ProjectsCard from "./ProjectsCard"
|
||||
export default ProjectsCard;
|
9
src/components/Template/Template.js
Normal file
@ -0,0 +1,9 @@
|
||||
import React, {Component} from 'react';
|
||||
import './Template.scss'
|
||||
|
||||
export default class Template extends Component {
|
||||
|
||||
render() {
|
||||
return ;
|
||||
}
|
||||
}
|
0
src/components/Template/Template.scss
Normal file
2
src/components/Template/index.js
Normal file
@ -0,0 +1,2 @@
|
||||
import ProjectsCard from "./ProjectsCard"
|
||||
export default ProjectsCard;
|
BIN
src/images/headshot_fond.webp
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
src/images/headshot_main.webp
Normal file
After Width: | Height: | Size: 347 KiB |