diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fd82f4f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +target/ +node_modules/ +Dockerfile \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..07cad43 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,43 @@ +# Get started with a build env with Rust nightly +FROM docker.io/rustlang/rust:nightly-bullseye as builder + +# If you’re using stable, use this instead +# FROM docker.io/rust:1.70-bullseye as builder + +# Install cargo-binstall, which makes it easier to install other +# cargo extensions like cargo-leptos +RUN wget https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz +RUN tar -xvf cargo-binstall-x86_64-unknown-linux-musl.tgz +RUN cp cargo-binstall /usr/local/cargo/bin + +# Install cargo-leptos +RUN cargo binstall cargo-leptos -y + +# Add the WASM target +RUN rustup target add wasm32-unknown-unknown + +# Make an /app dir, which everything will eventually live in +RUN mkdir -p /app +WORKDIR /app +COPY . . + +# Build the app +RUN cargo leptos build --release -vv + +FROM rustlang/rust:nightly-bullseye as runner +# Copy the server binary to the /app directory +COPY --from=builder /app/target/release/portfolio /app/ +# /target/site contains our JS/WASM/CSS, etc. +COPY --from=builder /app/target/site /app/site +# Copy Cargo.toml if it’s needed at runtime +COPY --from=builder /app/Cargo.toml /app/ +WORKDIR /app + +# Set any required env variables and +ENV RUST_LOG="info" +ENV APP_ENVIRONMENT="production" +ENV LEPTOS_SITE_ADDR="0.0.0.0:8080" +ENV LEPTOS_SITE_ROOT="site" +EXPOSE 8080 +# Run the server +CMD ["/app/portfolio"] \ No newline at end of file diff --git a/src_old/App.scss b/src_old/App.scss deleted file mode 100644 index 82e5123..0000000 --- a/src_old/App.scss +++ /dev/null @@ -1,3 +0,0 @@ -#root { - @apply m-0 p-0 bg-surface dark:bg-dark_surface text-on_surface dark:text-dark_on_surface; -} \ No newline at end of file diff --git a/src_old/App.tsx b/src_old/App.tsx deleted file mode 100644 index 7bc7d87..0000000 --- a/src_old/App.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import './App.scss' -import TopComponent from "./components/TopComponent"; -import MonParcours from './components/MonParcours'; - -function App() { - return ( - <> - - - - ) -} - -export default App diff --git a/src_old/components/MonParcours.tsx b/src_old/components/MonParcours.tsx deleted file mode 100644 index e539ce2..0000000 --- a/src_old/components/MonParcours.tsx +++ /dev/null @@ -1,422 +0,0 @@ -import react from 'react' -import Timeline from './timeline/Timeline' -import TimelineElement from './timeline/TimelineElement' -import TimelineLabel from './timeline/TimelineLabel' -import TimelineCard from './timeline/TimelineCard' -import TimelineCardSummary from './timeline/TimelineCardSummary' -import TimelineCardContent from './timeline/TimelineCardContent' -import Tag from './Tag' -import ProjectList from './project/ProjectList' -import ProjectElement from './project/ProjectElement' -import Link from './Link' - -// Lang -const RUST_TAG = -const JAVA_TAG = -const CPP_TAG = - -// Other -const REACT_TAG = -const SYMFONY_4_TAG = -const FLUTTER_TAG = -const RUBY_ON_RAILS_TAG = -const HOTWIRED_TAG = -const DOCKER_TAG = -const STEAM_TAG = -const GITLAB_CI_TAG = -const UNITY_TAG = -const WORDPRESS_TAG = -const CORDOVA_TAG = -const ELECTRON_TAG = -const LWJGL_TAG = -const OPENGL_TAG = -const VULKAN_TAG = -const MIDI_TAG = -const REQUIREJS_TAG = -const WEBPACK_TAG = -const VITE_TAG = -const MAVEN_TAG = -const GRADLE_TAG = -const BABYLONJG_TAG = -const ROCKET_RS_TAG = -const ACTIX_WEB_TAG = - - -function MonParcours() { - return ( -
- - - 2019 - Aujourd’hui - - - Développeur d’application Web, Mobile et Système (CDI) - - -

Développement d’application Symfony, React, Flutter, Rust et Ruby on rails (6 et 7) pour des clients.


-

Je développe surtout des applications Flutter et Ruby on rails avec l’aide de Hotwired.


- - Unova France
- 11 Septembre 2019 - Toujours en CDI -
-
- - - Développement 3D (Perso) - - -

Je développe un petit moteur 3D pour apprendre à utiliser Vulkan, mais aussi pour prendre en expérience en Rust


- - - - - -
-
- - - Développement Web en Rust (Perso) - - -

Je teste quelques technologies Web en Rust


- - - - - -
-
- - - Développement d’un outil d’accès serveur sécurisé en Rust (Perso) - - -

Le but du projet était de proposer un programme en tant que shell et de vérifier la connexion entrante avec un Service dédié.


-

L’ensemble des sessions étaient enregistrées pour permettre à n'importe qui de savoir ce qui s'est passé.


-

Les administrateurs pouvaient également gérer les connexions avec une ligne de commande.


- - Le projet a été abandonné au profit de The Bastion - - - - -
-
-
- - 2018 - 2019 - - - Développeur Web et d’application 2D (CDI) - - -

Développement du Site en Symfony 4 (Changement graphique, ajout de fonctionnalité)


-

Intégration du déploiement continue de la nouvelle application Limouzik refaite sous Unity 3D sur Steam


- - Limouzik SAS
- 03 Septembre 2018 - 31 Juillet 2019 (Rupture pour raison économique) -
-
- - - Global Game Jam édition 2019 (Concours) - - -

Participation au Global Gam Jam édition 2019.


-

Le but du concours est de developper un Jeu en 48h à partir d’un thème donné au départ du concours.


- - 3iL - Limoges
- 25 janvier - 27 janvier
- Thème : What home means to you
- Participants : Ezyrath, Fabien87, Flavien, MrDev023 (Moi), php4ever, spoutnik87
- - - - -
-
-
- - 2017 - 2018 - - License Dev. Web et du Big Data - -

Licence professionnelle en alternance de développeur d’application web et du Big Data (LP DWBD).


-

Utilisation de docker, Mysql, PHP avancé, Symfony 3 et 4, AngularJS, NodeJS, Cassandra, MongoDB, …


- - IUT du Limousin à Limoges -
-
- - - Développeur Web (Projet Tuteuré) - - -

Développement du site sliz.me avec Symfony 4.


-

Ajout de QRCode sur l'ensemble des pages d'un fichier PDF pour que d'autres personnes puissent télécharger le PDF ou une page en question durant une conférence.


-

Il fallait également pouvoir générer des QrCode simple à scanner pour qu’un étudiant puisse le scanner à l’autre bout de l’amphi.


- - Onegate
- Octobre 2017 - Février 2017 -
-
- - - Développeur Web et d’application 2D (Alternance) - - -

Maintenance de la version du site en Wordpress + Refonte complète du site (Graphique et technique) avec Symfony 4.


- -

Maintenance de la première version de l’application React ainsi que la migration des modules RequireJS vers Webpack pour fortement améliorer le temps de chargement


-

Pour permettre l’évolution future de l’application (Intégration avec d’autre boite de jeu VR + Gamification), l’application a dû être refaite de A à Z en C# avec le moteur 3D Unity.


-

Ajout de l’application Limouzik sur le Play Store (Android), AppStore (iOS) et sur Steam (PC) avec l’intégration de SteamAPI


- - L’ensemble du travail a été effectué par mes soins

- - - Limouzik SAS
- 04 Septembre 2017 - 24 Aout 2018 -
-
- - - Global Game Jam édition 2017 (Concours) - - -

Participation au Global Gam Jam édition 2017.


-

Le but du concours est de developper un Jeu en 48h à partir d’un thème donné au départ du concours.


- - 3iL - Limoges
- 20 janvier - 22 janvier
- Thème : Waves
- Participants : emiko, Fiesta87, MrDev023 (Moi), TheKitolex
- - - - -
-
-
- - 2015 - 2017 - - DUT Informatique - -

Conception de programme en Java, C++, C, Android, PHP, NodeJS et l’utilisation de Mysql. Apprentissage des bases scientifiques dans l’informatique.


- IUT du Limousin à Limoges -
-
- - - Développement d’application Web + Site (Stage + CDD) - - -

Développement d’une application musicale en utilisant le protocole MIDI (+ Synthèse sonore).


-

La partie affichage a été développé avec React et RequireJS (Gestion de module).


-

Administration du Site en Wordpress avec les Plugins (Woocommerce et PaidMembership Pro) ainsi que le développement d’un plugin propriétaire pour l’intégration de l’application dans Wordpress


- - Limouzik SAS
- 03 Avril 2017 - 30 Juin 2017 (Stage)
- 01 Juillet 2017 - 31 Juillet 2017 (CDD) -
- -
- - - Global Game Jam édition 2016 (Concours) - - -

Participation au Global Gam Jam édition 2016.


-

Le but du concours est de developper un Jeu en 48h à partir d’un thème donné au départ du concours.


- - 3iL - Limoges
- 29 janvier - 31 janvier
- Thème : Ritual
- Participants : Aliths, dikaios, Fiesta87, MrDev023 (Moi), TheKitolex
- - - - -
-
- - - Nuit de l’info édition 2016 (Concours) - - -

Participation à la Nuit de l’info édition 2016.


-

Le but de ce concours était de développer un projet WebGL en 8h.


- - Bordeaux
- 1 Décembre 2016 - 2 Décembre 2016
- Sujet : Venir en aide aux réfugiés
- Nom de l’équipe : echo "Avis de template"
- Slogan : Qui sème le vent récolte le Template
- WebGL : 1er - Méthode agile : 1er - - - - -
-
- - - Utilisation de l’API graphique OpenGL (Perso) - - -

Après avoir appris à faire de l’OpenGL en Java , j’ai voulu tester en C++


- - - - -
-
-
- - 2012 - 2015 - - Bac STI2D spécialité SIN - -

Passage du Bac sciences et technologies de l’industrie et du développement durable (STI2D).

-

Spécialité systèmes d’information et numérique (SIN).


- - Lycée Jean Favard à Guéret -
-
- - - Développement en Java (Perso) - - -

Apprentissage dans un premier temps du langage avec le site du zéro et les quelques vidéos sur Youtube.


-

Ensuite, j'ai commencé à développer des projets Perso (Plugin Minecraft, Mod Minecraft) dans un premier temps.


-

Puis, j'ai commencé à développer des petits jeux de A à Z (Petit moteur de physique + graphique + audio) et à m'entrainer avec des amis pour participer à des concours comme le Ludum dare et la Global Game Jam.

-
-
- - - Utilisation de l’API graphique OpenGL (Perso) - - -

Après avoir développé quelques trucs sur Minecraft. Je me suis interessé à son fonctionnement et j'ai découvert la librairie LWJGL utilisé dans Minecraft.


-

J'ai très vite voulu développer mes propres Mini-Jeux en OpenGL avec cette librairie.

- - - - - - -
-
-
-
-
- ) -} - -export default MonParcours \ No newline at end of file diff --git a/src_old/components/project/ProjectElement.tsx b/src_old/components/project/ProjectElement.tsx deleted file mode 100644 index bf0fe54..0000000 --- a/src_old/components/project/ProjectElement.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import react from 'react' - -type ProjectElementProps = { - image_src?: string, - description: string, - url: string -} - -function ProjectElement({ image_src, description, url }: ProjectElementProps) { - return ( - - { - image_src && - } -

{description}

-
- ) -} - -export default ProjectElement \ No newline at end of file diff --git a/src_old/components/project/ProjectList.scss b/src_old/components/project/ProjectList.scss deleted file mode 100644 index da1bf5d..0000000 --- a/src_old/components/project/ProjectList.scss +++ /dev/null @@ -1,22 +0,0 @@ -.project_list { - @apply grid grid-cols-1 gap-4 md:grid-cols-2 mt-3; - - & > a { - @apply rounded-lg p-5 flex flex-col items-center gap-2; - @apply bg-primary/10 dark:bg-dark_primary/10; - @apply shadow-md shadow-primary/5 dark:shadow-dark_primary/5; - - &:hover { - @apply bg-primary/20 dark:bg-dark_primary/20; - @apply shadow-md shadow-primary/10 dark:shadow-dark_primary/10; - } - - & > img { - @apply h-1/2; - } - - & > div { - @apply flex flex-col justify-center h-full; - } - } -} \ No newline at end of file diff --git a/src_old/components/project/ProjectList.tsx b/src_old/components/project/ProjectList.tsx deleted file mode 100644 index 32d9cf0..0000000 --- a/src_old/components/project/ProjectList.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import './ProjectList.scss' -import react from 'react' - -type ProjectListProps = { - children: react.ReactElement> | react.ReactElement>[] - } - -function ProjectList({ children } : ProjectListProps) { - return ( -
- { children } -
- ) -} - -export default ProjectList \ No newline at end of file diff --git a/src_old/components/timeline/Timeline.scss b/src_old/components/timeline/Timeline.scss deleted file mode 100644 index f249927..0000000 --- a/src_old/components/timeline/Timeline.scss +++ /dev/null @@ -1,14 +0,0 @@ -.timeline { - @apply w-full px-5; - - & > ul { - @apply list-none py-5 px-0 relative w-full max-w-5xl mx-auto; - - // Draw center line - &:before { - @apply top-0 bottom-0 left-0 md:left-1/2 absolute content-[""] w-2; - @apply bg-primary/10 dark:bg-dark_primary/10; - @apply shadow-md shadow-primary/5 dark:shadow-dark_primary/5; - } - } -} \ No newline at end of file diff --git a/src_old/components/timeline/Timeline.tsx b/src_old/components/timeline/Timeline.tsx deleted file mode 100644 index 9cc4a03..0000000 --- a/src_old/components/timeline/Timeline.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import './Timeline.scss' -import react, { ReactNode } from 'react' - -type TimelapseProps = { - children: ReactNode -} - -function Timeline({ children } : TimelapseProps) { - - return ( -
-
    - { children } -
-
- ) -} - -export default Timeline \ No newline at end of file diff --git a/src_old/components/timeline/TimelineCard.tsx b/src_old/components/timeline/TimelineCard.tsx deleted file mode 100644 index 0ee5daf..0000000 --- a/src_old/components/timeline/TimelineCard.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import react, {Children, ReactNode} from 'react' -import TimelineCardSummary from './TimelineCardSummary' -import { FaCaretDown } from 'react-icons/fa' - -type TimelineCardProps = { - children: react.ReactElement>[] -} - -function TimelineCard({ children } : TimelineCardProps) { - let titles : ReactNode[] = [] - let childrens : ReactNode[] = [] - Children.forEach(children, (c) => { - if (c.type === TimelineCardSummary) { - titles.push(c) - } else { - childrens.push(c) - } - }); - return ( -
- - {titles} - - -
{childrens}
-
- ) -} - -export default TimelineCard \ No newline at end of file diff --git a/src_old/components/timeline/TimelineCardContent.tsx b/src_old/components/timeline/TimelineCardContent.tsx deleted file mode 100644 index bd2375a..0000000 --- a/src_old/components/timeline/TimelineCardContent.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import react, {ReactNode} from 'react' - -type TimelineCardContentProps = { - children: ReactNode -} - -function TimelineCardContent({ children } : TimelineCardContentProps) { - return ( - <>{children} - ) -} - -export default TimelineCardContent \ No newline at end of file diff --git a/src_old/components/timeline/TimelineCardSummary.tsx b/src_old/components/timeline/TimelineCardSummary.tsx deleted file mode 100644 index 33639d5..0000000 --- a/src_old/components/timeline/TimelineCardSummary.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import react, {ReactNode} from 'react' - -type TimelineCardSummaryProps = { - children: ReactNode, - tags?: ReactNode[] -} - -function TimelineCardSummary({ children, tags } : TimelineCardSummaryProps) { - return ( - <> - {children} - { - tags &&
- { tags } -
- } - - ) -} - -export default TimelineCardSummary \ No newline at end of file diff --git a/src_old/components/timeline/TimelineElement.scss b/src_old/components/timeline/TimelineElement.scss deleted file mode 100644 index 9d70892..0000000 --- a/src_old/components/timeline/TimelineElement.scss +++ /dev/null @@ -1,83 +0,0 @@ -.timeline-element { - @apply relative flex flex-col md:flex-row justify-between; - - // Place point in center line - &:before { - @apply content-[""] w-6 h-6 rounded-[50%] absolute top-5 left-0 md:left-1/2 -ml-2 z-50; - @apply bg-primary/10 dark:bg-dark_primary/10; - @apply shadow-md shadow-primary/5 dark:shadow-dark_primary/5; - } - - &:nth-child(even) { - @apply md:flex-row-reverse; - - .timeline-element__category { - @apply md:flex-row-reverse; - } - } - - .timeline-element__info, .timeline-element__category { - @apply relative w-4/5 md:w-2/5 left-[10%] md:left-0; - @apply text-on_surface dark:text-dark_on_surface; - } - - .timeline-element__category { - @apply top-5 flex md:justify-end mb-12; - } - - .timeline-element__info { - & > details { - @apply mb-12 rounded-xl overflow-hidden relative; - @apply bg-primary/10 dark:bg-dark_primary/10; - @apply shadow-md shadow-primary/5 dark:shadow-dark_primary/5; - - & > summary, & > div { - @apply p-5; - } - - & > summary { - @apply relative block select-none cursor-pointer outline-none p-5 pr-10 font-semibold; - - &:hover { - @apply bg-primary/20 dark:bg-dark_primary/20; - } - - i { - @apply absolute right-5 h-full top-0 flex items-center; - - & > svg { - @apply scale-125; - transition: transform 300ms ease; - } - } - } - - &[open] { - & > summary { - & > i > svg { - @apply -rotate-180; - } - - & ~ * { - animation: toggle 0.4s ease-in-out; - } - } - } - } - } -} - -@keyframes toggle { - 0% { - font-size: 0; - opacity: 0; - } - 90% { - font-size: 1rem; - opacity: 0; - } - 100% { - font-size: 1rem; - opacity: 1; - } -} \ No newline at end of file diff --git a/src_old/components/timeline/TimelineElement.tsx b/src_old/components/timeline/TimelineElement.tsx deleted file mode 100644 index 1ec5f1c..0000000 --- a/src_old/components/timeline/TimelineElement.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import './TimelineElement.scss' -import react, {Children, ReactNode} from 'react' -import TimelineLabel from './TimelineLabel' - -type TimelineElementProps = { - children: react.ReactElement>[] -} - -function TimelineElement({ children } : TimelineElementProps) { - let labels : ReactNode[] = [] - let cards : ReactNode[] = [] - Children.forEach(children, (c) => { - if (c.type === TimelineLabel) { - labels.push(c) - } else { - cards.push(c) - } - }); - return ( -
  • -
    - { labels } -
    -
    - { cards } -
    -
  • - ) -} - -export default TimelineElement \ No newline at end of file diff --git a/src_old/components/timeline/TimelineLabel.tsx b/src_old/components/timeline/TimelineLabel.tsx deleted file mode 100644 index 1c83fa6..0000000 --- a/src_old/components/timeline/TimelineLabel.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import react, {ReactNode} from 'react' - -type TimelineLabelProps = { - children: ReactNode -} - -function TimelineLabel({ children } : TimelineLabelProps) { - return ( - <>{children} - ) -} - -export default TimelineLabel \ No newline at end of file diff --git a/src_old/index.html b/src_old/index.html deleted file mode 100644 index db44d52..0000000 --- a/src_old/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - Florian RICHER - - -
    - - - diff --git a/src_old/main.tsx b/src_old/main.tsx deleted file mode 100644 index 791f139..0000000 --- a/src_old/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App' -import './index.css' - -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - - - , -) diff --git a/src_old/vite-env.d.ts b/src_old/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/src_old/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -///