- {(() => {
- const TechIcon = getTechIcon(skill.id);
- return (
-
- );
- })()}
+
{skill.name}
diff --git a/data/skills/backend.json b/data/skills/backend.json
index a82633b..9ec01f3 100644
--- a/data/skills/backend.json
+++ b/data/skills/backend.json
@@ -6,6 +6,7 @@
"id": "nodejs",
"name": "Node.js",
"description": "Runtime JavaScript côté serveur construit sur le moteur V8 de Chrome",
+ "icon": "fab-node",
"links": [
"https://nodejs.org/",
"https://nodejs.org/en/docs/",
@@ -16,6 +17,7 @@
"id": "python",
"name": "Python",
"description": "Langage de programmation interprété de haut niveau",
+ "icon": "fab-python",
"links": [
"https://www.python.org/",
"https://docs.python.org/3/",
@@ -26,6 +28,7 @@
"id": "express",
"name": "Express.js",
"description": "Framework web rapide, non-opinionated et minimaliste pour Node.js",
+ "icon": "fas-server",
"links": [
"https://expressjs.com/",
"https://expressjs.com/en/guide/routing.html",
@@ -36,6 +39,7 @@
"id": "postgresql",
"name": "PostgreSQL",
"description": "Système de gestion de base de données relationnelle open source",
+ "icon": "fas-database",
"links": [
"https://www.postgresql.org/",
"https://www.postgresql.org/docs/",
@@ -46,6 +50,7 @@
"id": "mongodb",
"name": "MongoDB",
"description": "Base de données NoSQL orientée document",
+ "icon": "fas-database",
"links": [
"https://www.mongodb.com/",
"https://docs.mongodb.com/",
@@ -56,6 +61,7 @@
"id": "redis",
"name": "Redis",
"description": "Structure de données en mémoire utilisée comme base de données, cache et broker de messages",
+ "icon": "fas-memory",
"links": [
"https://redis.io/",
"https://redis.io/documentation",
@@ -66,24 +72,28 @@
"id": "golang",
"name": "Go",
"description": "Langage de programmation développé par Google",
+ "icon": "fab-golang",
"links": ["https://golang.org/", "https://golang.org/doc/"]
},
{
"id": "rust",
"name": "Rust",
"description": "Langage de programmation système sûr et performant",
+ "icon": "fab-rust",
"links": ["https://www.rust-lang.org/", "https://doc.rust-lang.org/"]
},
{
"id": "java-spring",
"name": "Java Spring",
"description": "Framework Java pour applications d'entreprise",
+ "icon": "fab-java",
"links": ["https://spring.io/", "https://docs.spring.io/"]
},
{
"id": "csharp-dotnet",
"name": "C# .NET",
"description": "Plateforme de développement Microsoft",
+ "icon": "fab-microsoft",
"links": [
"https://dotnet.microsoft.com/",
"https://docs.microsoft.com/dotnet/"
@@ -93,48 +103,56 @@
"id": "php-laravel",
"name": "PHP Laravel",
"description": "Framework PHP moderne pour applications web",
+ "icon": "fab-php",
"links": ["https://laravel.com/", "https://laravel.com/docs"]
},
{
"id": "ruby-rails",
"name": "Ruby on Rails",
"description": "Framework web en Ruby",
+ "icon": "fas-code",
"links": ["https://rubyonrails.org/", "https://guides.rubyonrails.org/"]
},
{
"id": "graphql",
"name": "GraphQL",
"description": "Langage de requête pour APIs",
+ "icon": "fas-sitemap",
"links": ["https://graphql.org/", "https://graphql.org/learn/"]
},
{
"id": "prisma",
"name": "Prisma",
"description": "ORM moderne pour Node.js et TypeScript",
+ "icon": "fas-database",
"links": ["https://www.prisma.io/", "https://www.prisma.io/docs"]
},
{
"id": "trpc",
"name": "tRPC",
"description": "Framework TypeScript pour APIs type-safe",
+ "icon": "fas-plug",
"links": ["https://trpc.io/", "https://trpc.io/docs"]
},
{
"id": "nest-js",
"name": "NestJS",
"description": "Framework Node.js pour applications scalables",
+ "icon": "fas-layers",
"links": ["https://nestjs.com/", "https://docs.nestjs.com/"]
},
{
"id": "fastify",
"name": "Fastify",
"description": "Framework web rapide pour Node.js",
+ "icon": "fas-bolt",
"links": ["https://www.fastify.io/", "https://www.fastify.io/docs/"]
},
{
"id": "rabbitmq",
"name": "RabbitMQ",
"description": "Broker de messages open source",
+ "icon": "fas-stream",
"links": [
"https://www.rabbitmq.com/",
"https://www.rabbitmq.com/documentation.html"
@@ -144,6 +162,7 @@
"id": "apache-kafka",
"name": "Apache Kafka",
"description": "Plateforme de streaming distribuée",
+ "icon": "fas-broadcast",
"links": [
"https://kafka.apache.org/",
"https://kafka.apache.org/documentation/"
@@ -153,6 +172,7 @@
"id": "microservices",
"name": "Microservices",
"description": "Architecture en microservices",
+ "icon": "fas-boxes",
"links": [
"https://microservices.io/",
"https://martinfowler.com/articles/microservices.html"
diff --git a/data/skills/cloud.json b/data/skills/cloud.json
index a37ab02..cc847da 100644
--- a/data/skills/cloud.json
+++ b/data/skills/cloud.json
@@ -6,7 +6,11 @@
"id": "aws",
"name": "Amazon Web Services",
"description": "Plateforme de services cloud d'Amazon",
- "links": ["https://aws.amazon.com/", "https://docs.aws.amazon.com/"]
+ "links": [
+ "https://aws.amazon.com/",
+ "https://docs.aws.amazon.com/"
+ ],
+ "icon": "fab-aws"
},
{
"id": "azure",
@@ -15,13 +19,18 @@
"links": [
"https://azure.microsoft.com/",
"https://docs.microsoft.com/azure/"
- ]
+ ],
+ "icon": "fab-microsoft"
},
{
"id": "gcp",
"name": "Google Cloud Platform",
"description": "Services cloud de Google",
- "links": ["https://cloud.google.com/", "https://cloud.google.com/docs"]
+ "links": [
+ "https://cloud.google.com/",
+ "https://cloud.google.com/docs"
+ ],
+ "icon": "fab-google"
},
{
"id": "terraform",
@@ -30,7 +39,8 @@
"links": [
"https://www.terraform.io/",
"https://learn.hashicorp.com/terraform"
- ]
+ ],
+ "icon": "fas-tools"
},
{
"id": "serverless",
@@ -39,7 +49,8 @@
"links": [
"https://www.serverless.com/",
"https://www.serverless.com/framework/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "lambda",
@@ -48,7 +59,8 @@
"links": [
"https://aws.amazon.com/lambda/",
"https://docs.aws.amazon.com/lambda/"
- ]
+ ],
+ "icon": "fas-bolt"
},
{
"id": "cloudformation",
@@ -57,13 +69,18 @@
"links": [
"https://aws.amazon.com/cloudformation/",
"https://docs.aws.amazon.com/cloudformation/"
- ]
+ ],
+ "icon": "fas-layers"
},
{
"id": "s3",
"name": "Amazon S3",
"description": "Service de stockage d'objets d'AWS",
- "links": ["https://aws.amazon.com/s3/", "https://docs.aws.amazon.com/s3/"]
+ "links": [
+ "https://aws.amazon.com/s3/",
+ "https://docs.aws.amazon.com/s3/"
+ ],
+ "icon": "fas-cog"
},
{
"id": "ec2",
@@ -72,7 +89,8 @@
"links": [
"https://aws.amazon.com/ec2/",
"https://docs.aws.amazon.com/ec2/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "cloudfront",
@@ -81,7 +99,8 @@
"links": [
"https://aws.amazon.com/cloudfront/",
"https://docs.aws.amazon.com/cloudfront/"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file
diff --git a/data/skills/data.json b/data/skills/data.json
index 471f2c6..ba66dd4 100644
--- a/data/skills/data.json
+++ b/data/skills/data.json
@@ -9,7 +9,8 @@
"links": [
"https://www.postgresql.org/docs/",
"https://dev.mysql.com/doc/"
- ]
+ ],
+ "icon": "fas-database"
},
{
"id": "postgresql",
@@ -18,7 +19,8 @@
"links": [
"https://www.postgresql.org/",
"https://www.postgresql.org/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "mongodb",
@@ -27,7 +29,8 @@
"links": [
"https://www.mongodb.com/",
"https://docs.mongodb.com/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "redis",
@@ -36,7 +39,8 @@
"links": [
"https://redis.io/",
"https://redis.io/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "elasticsearch",
@@ -45,7 +49,8 @@
"links": [
"https://www.elastic.co/elasticsearch/",
"https://www.elastic.co/guide/"
- ]
+ ],
+ "icon": "fas-search"
},
{
"id": "python-data",
@@ -54,7 +59,8 @@
"links": [
"https://pandas.pydata.org/",
"https://scikit-learn.org/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "tableau",
@@ -63,7 +69,8 @@
"links": [
"https://www.tableau.com/",
"https://help.tableau.com/"
- ]
+ ],
+ "icon": "fas-chart"
},
{
"id": "powerbi",
@@ -72,7 +79,8 @@
"links": [
"https://powerbi.microsoft.com/",
"https://docs.microsoft.com/power-bi/"
- ]
+ ],
+ "icon": "fab-microsoft"
},
{
"id": "spark",
@@ -81,7 +89,8 @@
"links": [
"https://spark.apache.org/",
"https://spark.apache.org/docs/"
- ]
+ ],
+ "icon": "fas-bolt"
},
{
"id": "airflow",
@@ -90,7 +99,8 @@
"links": [
"https://airflow.apache.org/",
"https://airflow.apache.org/docs/"
- ]
+ ],
+ "icon": "fas-stream"
}
]
-}
+}
\ No newline at end of file
diff --git a/data/skills/design.json b/data/skills/design.json
index 6b9f94a..879bb6d 100644
--- a/data/skills/design.json
+++ b/data/skills/design.json
@@ -9,7 +9,8 @@
"links": [
"https://www.figma.com/",
"https://help.figma.com/"
- ]
+ ],
+ "icon": "fab-figma"
},
{
"id": "sketch",
@@ -18,7 +19,8 @@
"links": [
"https://www.sketch.com/",
"https://www.sketch.com/docs/"
- ]
+ ],
+ "icon": "fab-sketch"
},
{
"id": "adobe-xd",
@@ -27,7 +29,8 @@
"links": [
"https://www.adobe.com/products/xd.html",
"https://helpx.adobe.com/xd/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "ux-ui",
@@ -36,7 +39,8 @@
"links": [
"https://www.nngroup.com/",
"https://material.io/design/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "design-system",
@@ -45,7 +49,8 @@
"links": [
"https://designsystemsrepo.com/",
"https://www.designbetter.co/design-systems-handbook"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "prototyping",
@@ -54,7 +59,8 @@
"links": [
"https://www.prototypr.io/",
"https://www.invisionapp.com/"
- ]
+ ],
+ "icon": "fas-palette"
},
{
"id": "user-research",
@@ -63,7 +69,8 @@
"links": [
"https://www.nngroup.com/articles/",
"https://www.usability.gov/"
- ]
+ ],
+ "icon": "fas-users"
},
{
"id": "accessibility",
@@ -72,7 +79,8 @@
"links": [
"https://www.w3.org/WAI/",
"https://webaim.org/"
- ]
+ ],
+ "icon": "fas-eye"
},
{
"id": "responsive-design",
@@ -81,7 +89,8 @@
"links": [
"https://developers.google.com/web/fundamentals/design-and-ux/responsive",
"https://responsivedesign.is/"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "motion-design",
@@ -90,7 +99,8 @@
"links": [
"https://material.io/design/motion/",
"https://www.framer.com/"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file
diff --git a/data/skills/devops.json b/data/skills/devops.json
index 0dcf0bb..6da2fc2 100644
--- a/data/skills/devops.json
+++ b/data/skills/devops.json
@@ -10,7 +10,8 @@
"https://www.docker.com/",
"https://docs.docker.com/",
"https://github.com/docker/docker-ce"
- ]
+ ],
+ "icon": "fab-docker"
},
{
"id": "kubernetes",
@@ -20,7 +21,8 @@
"https://kubernetes.io/",
"https://kubernetes.io/docs/",
"https://github.com/kubernetes/kubernetes"
- ]
+ ],
+ "icon": "fas-layers"
},
{
"id": "aws",
@@ -30,7 +32,8 @@
"https://aws.amazon.com/",
"https://docs.aws.amazon.com/",
"https://github.com/aws"
- ]
+ ],
+ "icon": "fab-aws"
},
{
"id": "terraform",
@@ -40,7 +43,8 @@
"https://www.terraform.io/",
"https://learn.hashicorp.com/terraform",
"https://github.com/hashicorp/terraform"
- ]
+ ],
+ "icon": "fas-tools"
},
{
"id": "jenkins",
@@ -50,7 +54,8 @@
"https://www.jenkins.io/",
"https://www.jenkins.io/doc/",
"https://github.com/jenkinsci/jenkins"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "githubactions",
@@ -60,19 +65,28 @@
"https://github.com/features/actions",
"https://docs.github.com/en/actions",
"https://github.com/actions"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "ansible",
"name": "Ansible",
"description": "Outil d'automatisation IT et de gestion de configuration",
- "links": ["https://www.ansible.com/", "https://docs.ansible.com/"]
+ "links": [
+ "https://www.ansible.com/",
+ "https://docs.ansible.com/"
+ ],
+ "icon": "fas-cog"
},
{
"id": "jenkins",
"name": "Jenkins",
"description": "Serveur d'automatisation open source",
- "links": ["https://www.jenkins.io/", "https://www.jenkins.io/doc/"]
+ "links": [
+ "https://www.jenkins.io/",
+ "https://www.jenkins.io/doc/"
+ ],
+ "icon": "fas-cog"
},
{
"id": "gitlab-ci",
@@ -81,19 +95,28 @@
"links": [
"https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/",
"https://docs.gitlab.com/ee/ci/"
- ]
+ ],
+ "icon": "fab-gitlab"
},
{
"id": "prometheus",
"name": "Prometheus",
"description": "Système de monitoring et d'alerting",
- "links": ["https://prometheus.io/", "https://prometheus.io/docs/"]
+ "links": [
+ "https://prometheus.io/",
+ "https://prometheus.io/docs/"
+ ],
+ "icon": "fas-chart-line"
},
{
"id": "grafana",
"name": "Grafana",
"description": "Plateforme de visualisation et monitoring",
- "links": ["https://grafana.com/", "https://grafana.com/docs/"]
+ "links": [
+ "https://grafana.com/",
+ "https://grafana.com/docs/"
+ ],
+ "icon": "fas-chart-line"
},
{
"id": "elk-stack",
@@ -102,37 +125,58 @@
"links": [
"https://www.elastic.co/what-is/elk-stack",
"https://www.elastic.co/guide/"
- ]
+ ],
+ "icon": "fas-search"
},
{
"id": "nginx",
"name": "Nginx",
"description": "Serveur web et proxy inverse",
- "links": ["https://nginx.org/", "https://nginx.org/en/docs/"]
+ "links": [
+ "https://nginx.org/",
+ "https://nginx.org/en/docs/"
+ ],
+ "icon": "fas-server"
},
{
"id": "apache",
"name": "Apache HTTP Server",
"description": "Serveur web open source",
- "links": ["https://httpd.apache.org/", "https://httpd.apache.org/docs/"]
+ "links": [
+ "https://httpd.apache.org/",
+ "https://httpd.apache.org/docs/"
+ ],
+ "icon": "fas-server"
},
{
"id": "traefik",
"name": "Traefik",
"description": "Proxy inverse moderne et load balancer",
- "links": ["https://traefik.io/", "https://doc.traefik.io/"]
+ "links": [
+ "https://traefik.io/",
+ "https://doc.traefik.io/"
+ ],
+ "icon": "fas-cog"
},
{
"id": "helm",
"name": "Helm",
"description": "Gestionnaire de packages pour Kubernetes",
- "links": ["https://helm.sh/", "https://helm.sh/docs/"]
+ "links": [
+ "https://helm.sh/",
+ "https://helm.sh/docs/"
+ ],
+ "icon": "fas-cog"
},
{
"id": "istio",
"name": "Istio",
"description": "Service mesh pour microservices",
- "links": ["https://istio.io/", "https://istio.io/latest/docs/"]
+ "links": [
+ "https://istio.io/",
+ "https://istio.io/latest/docs/"
+ ],
+ "icon": "fas-cog"
},
{
"id": "vault",
@@ -141,13 +185,18 @@
"links": [
"https://www.vaultproject.io/",
"https://learn.hashicorp.com/vault"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "consul",
"name": "HashiCorp Consul",
"description": "Service discovery et configuration",
- "links": ["https://www.consul.io/", "https://learn.hashicorp.com/consul"]
+ "links": [
+ "https://www.consul.io/",
+ "https://learn.hashicorp.com/consul"
+ ],
+ "icon": "fas-cog"
},
{
"id": "nomad",
@@ -156,7 +205,8 @@
"links": [
"https://www.nomadproject.io/",
"https://learn.hashicorp.com/nomad"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file
diff --git a/data/skills/frontend.json b/data/skills/frontend.json
index 56599bc..310138d 100644
--- a/data/skills/frontend.json
+++ b/data/skills/frontend.json
@@ -6,6 +6,7 @@
"id": "react",
"name": "React",
"description": "Bibliothèque JavaScript pour créer des interfaces utilisateur",
+ "icon": "fab-react",
"links": [
"https://react.dev/",
"https://react.dev/learn",
@@ -16,6 +17,7 @@
"id": "vue",
"name": "Vue.js",
"description": "Framework JavaScript progressif pour construire des interfaces utilisateur",
+ "icon": "fab-vue",
"links": [
"https://vuejs.org/",
"https://vuejs.org/guide/",
@@ -26,6 +28,7 @@
"id": "typescript",
"name": "TypeScript",
"description": "Superset typé de JavaScript qui compile en JavaScript plain",
+ "icon": "fab-js",
"links": [
"https://www.typescriptlang.org/",
"https://www.typescriptlang.org/docs/",
@@ -36,6 +39,7 @@
"id": "nextjs",
"name": "Next.js",
"description": "Framework React pour la production avec SSR, SSG et plus",
+ "icon": "fab-react",
"links": [
"https://nextjs.org/",
"https://nextjs.org/docs",
@@ -46,6 +50,7 @@
"id": "tailwindcss",
"name": "Tailwind CSS",
"description": "Framework CSS utility-first pour créer rapidement des designs personnalisés",
+ "icon": "fas-palette",
"links": [
"https://tailwindcss.com/",
"https://tailwindcss.com/docs",
@@ -56,6 +61,7 @@
"id": "webpack",
"name": "Webpack",
"description": "Bundler de modules pour les applications JavaScript modernes",
+ "icon": "fas-cube",
"links": [
"https://webpack.js.org/",
"https://webpack.js.org/concepts/",
@@ -66,105 +72,84 @@
"id": "vite",
"name": "Vite",
"description": "Outil de build rapide pour applications modernes",
- "links": [
- "https://vitejs.dev/",
- "https://vitejs.dev/guide/"
- ]
+ "icon": "fas-bolt",
+ "links": ["https://vitejs.dev/", "https://vitejs.dev/guide/"]
},
{
"id": "svelte",
"name": "Svelte",
"description": "Framework de compilation pour interfaces utilisateur",
- "links": [
- "https://svelte.dev/",
- "https://svelte.dev/docs"
- ]
+ "icon": "fas-code",
+ "links": ["https://svelte.dev/", "https://svelte.dev/docs"]
},
{
"id": "solidjs",
"name": "SolidJS",
"description": "Framework JavaScript réactif et performant",
- "links": [
- "https://www.solidjs.com/",
- "https://www.solidjs.com/docs"
- ]
+ "icon": "fas-atom",
+ "links": ["https://www.solidjs.com/", "https://www.solidjs.com/docs"]
},
{
"id": "astro",
"name": "Astro",
"description": "Framework statique multi-framework",
- "links": [
- "https://astro.build/",
- "https://docs.astro.build/"
- ]
+ "icon": "fas-rocket",
+ "links": ["https://astro.build/", "https://docs.astro.build/"]
},
{
"id": "remix",
"name": "Remix",
"description": "Framework full-stack centré sur les standards web",
- "links": [
- "https://remix.run/",
- "https://remix.run/docs"
- ]
+ "icon": "fas-sync",
+ "links": ["https://remix.run/", "https://remix.run/docs"]
},
{
"id": "storybook",
"name": "Storybook",
"description": "Outil de développement pour composants UI",
- "links": [
- "https://storybook.js.org/",
- "https://storybook.js.org/docs"
- ]
+ "icon": "fas-book",
+ "links": ["https://storybook.js.org/", "https://storybook.js.org/docs"]
},
{
"id": "cypress",
"name": "Cypress",
"description": "Framework de tests end-to-end",
- "links": [
- "https://www.cypress.io/",
- "https://docs.cypress.io/"
- ]
+ "icon": "fas-bug",
+ "links": ["https://www.cypress.io/", "https://docs.cypress.io/"]
},
{
"id": "playwright",
"name": "Playwright",
"description": "Framework de tests pour applications web",
- "links": [
- "https://playwright.dev/",
- "https://playwright.dev/docs/"
- ]
+ "icon": "fas-flask",
+ "links": ["https://playwright.dev/", "https://playwright.dev/docs/"]
},
{
"id": "three-js",
"name": "Three.js",
"description": "Bibliothèque JavaScript pour 3D dans le navigateur",
- "links": [
- "https://threejs.org/",
- "https://threejs.org/docs/"
- ]
+ "icon": "fas-cube",
+ "links": ["https://threejs.org/", "https://threejs.org/docs/"]
},
{
"id": "d3",
"name": "D3.js",
"description": "Bibliothèque de visualisation de données",
- "links": [
- "https://d3js.org/",
- "https://github.com/d3/d3/wiki"
- ]
+ "icon": "fas-chart-line",
+ "links": ["https://d3js.org/", "https://github.com/d3/d3/wiki"]
},
{
"id": "gsap",
"name": "GSAP",
"description": "Bibliothèque d'animations web performantes",
- "links": [
- "https://greensock.com/gsap/",
- "https://greensock.com/docs/"
- ]
+ "icon": "fas-bolt",
+ "links": ["https://greensock.com/gsap/", "https://greensock.com/docs/"]
},
{
"id": "web-components",
"name": "Web Components",
"description": "Standards natifs pour composants réutilisables",
+ "icon": "fas-puzzle",
"links": [
"https://developer.mozilla.org/en-US/docs/Web/Web_Components",
"https://web.dev/web-components/"
@@ -174,6 +159,7 @@
"id": "pwa",
"name": "Progressive Web Apps",
"description": "Applications web progressives",
+ "icon": "fas-mobile",
"links": [
"https://web.dev/progressive-web-apps/",
"https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps"
diff --git a/data/skills/mobile.json b/data/skills/mobile.json
index 43f1918..47a6b1b 100644
--- a/data/skills/mobile.json
+++ b/data/skills/mobile.json
@@ -10,7 +10,8 @@
"https://reactnative.dev/",
"https://reactnative.dev/docs/getting-started",
"https://github.com/facebook/react-native"
- ]
+ ],
+ "icon": "fab-react"
},
{
"id": "flutter",
@@ -20,7 +21,8 @@
"https://flutter.dev/",
"https://docs.flutter.dev/",
"https://github.com/flutter/flutter"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "swift",
@@ -30,7 +32,8 @@
"https://developer.apple.com/swift/",
"https://docs.swift.org/swift-book/",
"https://github.com/apple/swift"
- ]
+ ],
+ "icon": "fab-swift"
},
{
"id": "kotlin",
@@ -40,7 +43,8 @@
"https://kotlinlang.org/",
"https://kotlinlang.org/docs/",
"https://github.com/JetBrains/kotlin"
- ]
+ ],
+ "icon": "fab-android"
},
{
"id": "expo",
@@ -50,7 +54,8 @@
"https://expo.dev/",
"https://docs.expo.dev/",
"https://github.com/expo/expo"
- ]
+ ],
+ "icon": "fab-react"
},
{
"id": "ionic",
@@ -59,7 +64,8 @@
"links": [
"https://ionicframework.com/",
"https://ionicframework.com/docs"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "xamarin",
@@ -68,7 +74,8 @@
"links": [
"https://dotnet.microsoft.com/apps/xamarin",
"https://docs.microsoft.com/xamarin/"
- ]
+ ],
+ "icon": "fab-microsoft"
},
{
"id": "unity",
@@ -77,7 +84,8 @@
"links": [
"https://unity.com/",
"https://docs.unity3d.com/"
- ]
+ ],
+ "icon": "fas-cube"
},
{
"id": "cordova",
@@ -86,7 +94,8 @@
"links": [
"https://cordova.apache.org/",
"https://cordova.apache.org/docs/"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "capacitor",
@@ -95,7 +104,8 @@
"links": [
"https://capacitorjs.com/",
"https://capacitorjs.com/docs"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "fastlane",
@@ -104,7 +114,8 @@
"links": [
"https://fastlane.tools/",
"https://docs.fastlane.tools/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "firebase",
@@ -113,7 +124,8 @@
"links": [
"https://firebase.google.com/",
"https://firebase.google.com/docs"
- ]
+ ],
+ "icon": "fab-google"
},
{
"id": "app-store-optimization",
@@ -122,7 +134,8 @@
"links": [
"https://developer.apple.com/app-store/",
"https://play.google.com/console/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "mobile-testing",
@@ -131,7 +144,8 @@
"links": [
"https://appium.io/",
"https://detox.js.org/"
- ]
+ ],
+ "icon": "fas-bug"
},
{
"id": "mobile-performance",
@@ -140,7 +154,8 @@
"links": [
"https://developers.google.com/web/tools/lighthouse",
"https://developer.android.com/topic/performance"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "push-notifications",
@@ -149,7 +164,8 @@
"links": [
"https://firebase.google.com/docs/cloud-messaging",
"https://developer.apple.com/notifications/"
- ]
+ ],
+ "icon": "fas-bell"
}
]
-}
+}
\ No newline at end of file
diff --git a/data/skills/security.json b/data/skills/security.json
index 4c68394..b6ed546 100644
--- a/data/skills/security.json
+++ b/data/skills/security.json
@@ -9,7 +9,8 @@
"links": [
"https://oauth.net/2/",
"https://tools.ietf.org/html/rfc6749"
- ]
+ ],
+ "icon": "fas-key"
},
{
"id": "jwt",
@@ -18,7 +19,8 @@
"links": [
"https://jwt.io/",
"https://tools.ietf.org/html/rfc7519"
- ]
+ ],
+ "icon": "fas-shield"
},
{
"id": "https-ssl",
@@ -27,7 +29,8 @@
"links": [
"https://developer.mozilla.org/en-US/docs/Web/Security",
"https://letsencrypt.org/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "owasp",
@@ -36,7 +39,8 @@
"links": [
"https://owasp.org/",
"https://owasp.org/www-project-top-ten/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "csrf-xss",
@@ -45,7 +49,8 @@
"links": [
"https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html",
"https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "penetration-testing",
@@ -54,7 +59,8 @@
"links": [
"https://owasp.org/www-community/Penetration_Testing_Methodologies",
"https://www.kali.org/"
- ]
+ ],
+ "icon": "fas-user-shield"
},
{
"id": "cryptography",
@@ -63,7 +69,8 @@
"links": [
"https://cryptography.io/",
"https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "auth0",
@@ -72,7 +79,8 @@
"links": [
"https://auth0.com/",
"https://auth0.com/docs"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "keycloak",
@@ -81,7 +89,8 @@
"links": [
"https://www.keycloak.org/",
"https://www.keycloak.org/documentation"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "vault",
@@ -90,7 +99,8 @@
"links": [
"https://www.vaultproject.io/",
"https://learn.hashicorp.com/vault"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file
diff --git a/lib/fontawesome.ts b/lib/fontawesome.ts
new file mode 100644
index 0000000..ea1d803
--- /dev/null
+++ b/lib/fontawesome.ts
@@ -0,0 +1,6 @@
+// Configuration Font Awesome
+import { config } from '@fortawesome/fontawesome-svg-core';
+import '@fortawesome/fontawesome-svg-core/styles.css';
+
+// Empêche Font Awesome d'ajouter automatiquement du CSS (Next.js le gère)
+config.autoAddCss = false;
diff --git a/lib/types.ts b/lib/types.ts
index c5c2819..b4ba515 100644
--- a/lib/types.ts
+++ b/lib/types.ts
@@ -23,6 +23,7 @@ export interface Skill {
id: string;
name: string;
description: string;
+ icon?: string;
links: string[];
}
diff --git a/package.json b/package.json
index df5134a..b459580 100644
--- a/package.json
+++ b/package.json
@@ -9,6 +9,10 @@
"start": "next start"
},
"dependencies": {
+ "@fortawesome/fontawesome-svg-core": "^7.0.0",
+ "@fortawesome/free-brands-svg-icons": "^7.0.0",
+ "@fortawesome/free-solid-svg-icons": "^7.0.0",
+ "@fortawesome/react-fontawesome": "^0.2.5",
"@hookform/resolvers": "^3.10.0",
"@radix-ui/react-accordion": "1.2.2",
"@radix-ui/react-alert-dialog": "1.1.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6aed5f9..9e2d658 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,18 @@ importers:
.:
dependencies:
+ '@fortawesome/fontawesome-svg-core':
+ specifier: ^7.0.0
+ version: 7.0.0
+ '@fortawesome/free-brands-svg-icons':
+ specifier: ^7.0.0
+ version: 7.0.0
+ '@fortawesome/free-solid-svg-icons':
+ specifier: ^7.0.0
+ version: 7.0.0
+ '@fortawesome/react-fontawesome':
+ specifier: ^0.2.5
+ version: 0.2.5(@fortawesome/fontawesome-svg-core@7.0.0)(react@19.1.1)
'@hookform/resolvers':
specifier: ^3.10.0
version: 3.10.0(react-hook-form@7.62.0(react@19.1.1))
@@ -215,6 +227,28 @@ packages:
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+ '@fortawesome/fontawesome-common-types@7.0.0':
+ resolution: {integrity: sha512-PGMrIYXLGA5K8RWy8zwBkd4vFi4z7ubxtet6Yn13Plf6krRTwPbdlCwlcfmoX0R7B4Z643QvrtHmdQ5fNtfFCg==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/fontawesome-svg-core@7.0.0':
+ resolution: {integrity: sha512-obBEF+zd98r/KtKVW6A+8UGWeaOoyMpl6Q9P3FzHsOnsg742aXsl8v+H/zp09qSSu/a/Hxe9LNKzbBaQq1CEbA==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-brands-svg-icons@7.0.0':
+ resolution: {integrity: sha512-C8oY28gq/Qx/cHReJa2AunKJUHvUZDVoPlSTHtAvjriaNfi+5nugW4cx7yA/xN3f/nYkElw11gFBoJ2xUDDFgg==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-solid-svg-icons@7.0.0':
+ resolution: {integrity: sha512-njSLAllkOddYDCXgTFboXn54Oe5FcvpkWq+FoetOHR64PbN0608kM02Lze0xtISGpXgP+i26VyXRQA0Irh3Obw==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/react-fontawesome@0.2.5':
+ resolution: {integrity: sha512-55xAmidU/xWPVUK2IlG0c4LK+7pk75Qnwh7PcmjxlUTUibbI0+txjAB2ucF3TQZOXHOcjBcpoF8R75b59OxNmg==}
+ peerDependencies:
+ '@fortawesome/fontawesome-svg-core': ~1 || ~6 || ~7
+ react: ^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
'@hookform/resolvers@3.10.0':
resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==}
peerDependencies:
@@ -1765,6 +1799,26 @@ snapshots:
'@floating-ui/utils@0.2.10': {}
+ '@fortawesome/fontawesome-common-types@7.0.0': {}
+
+ '@fortawesome/fontawesome-svg-core@7.0.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.0.0
+
+ '@fortawesome/free-brands-svg-icons@7.0.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.0.0
+
+ '@fortawesome/free-solid-svg-icons@7.0.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.0.0
+
+ '@fortawesome/react-fontawesome@0.2.5(@fortawesome/fontawesome-svg-core@7.0.0)(react@19.1.1)':
+ dependencies:
+ '@fortawesome/fontawesome-svg-core': 7.0.0
+ prop-types: 15.8.1
+ react: 19.1.1
+
'@hookform/resolvers@3.10.0(react-hook-form@7.62.0(react@19.1.1))':
dependencies:
react-hook-form: 7.62.0(react@19.1.1)
diff --git a/public/data/skills/backend.json b/public/data/skills/backend.json
index 23e98c8..9ec01f3 100644
--- a/public/data/skills/backend.json
+++ b/public/data/skills/backend.json
@@ -6,6 +6,7 @@
"id": "nodejs",
"name": "Node.js",
"description": "Runtime JavaScript côté serveur construit sur le moteur V8 de Chrome",
+ "icon": "fab-node",
"links": [
"https://nodejs.org/",
"https://nodejs.org/en/docs/",
@@ -16,6 +17,7 @@
"id": "python",
"name": "Python",
"description": "Langage de programmation interprété de haut niveau",
+ "icon": "fab-python",
"links": [
"https://www.python.org/",
"https://docs.python.org/3/",
@@ -26,6 +28,7 @@
"id": "express",
"name": "Express.js",
"description": "Framework web rapide, non-opinionated et minimaliste pour Node.js",
+ "icon": "fas-server",
"links": [
"https://expressjs.com/",
"https://expressjs.com/en/guide/routing.html",
@@ -36,6 +39,7 @@
"id": "postgresql",
"name": "PostgreSQL",
"description": "Système de gestion de base de données relationnelle open source",
+ "icon": "fas-database",
"links": [
"https://www.postgresql.org/",
"https://www.postgresql.org/docs/",
@@ -46,6 +50,7 @@
"id": "mongodb",
"name": "MongoDB",
"description": "Base de données NoSQL orientée document",
+ "icon": "fas-database",
"links": [
"https://www.mongodb.com/",
"https://docs.mongodb.com/",
@@ -56,6 +61,7 @@
"id": "redis",
"name": "Redis",
"description": "Structure de données en mémoire utilisée comme base de données, cache et broker de messages",
+ "icon": "fas-memory",
"links": [
"https://redis.io/",
"https://redis.io/documentation",
@@ -66,33 +72,28 @@
"id": "golang",
"name": "Go",
"description": "Langage de programmation développé par Google",
- "links": [
- "https://golang.org/",
- "https://golang.org/doc/"
- ]
+ "icon": "fab-golang",
+ "links": ["https://golang.org/", "https://golang.org/doc/"]
},
{
"id": "rust",
"name": "Rust",
"description": "Langage de programmation système sûr et performant",
- "links": [
- "https://www.rust-lang.org/",
- "https://doc.rust-lang.org/"
- ]
+ "icon": "fab-rust",
+ "links": ["https://www.rust-lang.org/", "https://doc.rust-lang.org/"]
},
{
"id": "java-spring",
"name": "Java Spring",
"description": "Framework Java pour applications d'entreprise",
- "links": [
- "https://spring.io/",
- "https://docs.spring.io/"
- ]
+ "icon": "fab-java",
+ "links": ["https://spring.io/", "https://docs.spring.io/"]
},
{
"id": "csharp-dotnet",
"name": "C# .NET",
"description": "Plateforme de développement Microsoft",
+ "icon": "fab-microsoft",
"links": [
"https://dotnet.microsoft.com/",
"https://docs.microsoft.com/dotnet/"
@@ -102,69 +103,56 @@
"id": "php-laravel",
"name": "PHP Laravel",
"description": "Framework PHP moderne pour applications web",
- "links": [
- "https://laravel.com/",
- "https://laravel.com/docs"
- ]
+ "icon": "fab-php",
+ "links": ["https://laravel.com/", "https://laravel.com/docs"]
},
{
"id": "ruby-rails",
"name": "Ruby on Rails",
"description": "Framework web en Ruby",
- "links": [
- "https://rubyonrails.org/",
- "https://guides.rubyonrails.org/"
- ]
+ "icon": "fas-code",
+ "links": ["https://rubyonrails.org/", "https://guides.rubyonrails.org/"]
},
{
"id": "graphql",
"name": "GraphQL",
"description": "Langage de requête pour APIs",
- "links": [
- "https://graphql.org/",
- "https://graphql.org/learn/"
- ]
+ "icon": "fas-sitemap",
+ "links": ["https://graphql.org/", "https://graphql.org/learn/"]
},
{
"id": "prisma",
"name": "Prisma",
"description": "ORM moderne pour Node.js et TypeScript",
- "links": [
- "https://www.prisma.io/",
- "https://www.prisma.io/docs"
- ]
+ "icon": "fas-database",
+ "links": ["https://www.prisma.io/", "https://www.prisma.io/docs"]
},
{
"id": "trpc",
"name": "tRPC",
"description": "Framework TypeScript pour APIs type-safe",
- "links": [
- "https://trpc.io/",
- "https://trpc.io/docs"
- ]
+ "icon": "fas-plug",
+ "links": ["https://trpc.io/", "https://trpc.io/docs"]
},
{
"id": "nest-js",
"name": "NestJS",
"description": "Framework Node.js pour applications scalables",
- "links": [
- "https://nestjs.com/",
- "https://docs.nestjs.com/"
- ]
+ "icon": "fas-layers",
+ "links": ["https://nestjs.com/", "https://docs.nestjs.com/"]
},
{
"id": "fastify",
"name": "Fastify",
"description": "Framework web rapide pour Node.js",
- "links": [
- "https://www.fastify.io/",
- "https://www.fastify.io/docs/"
- ]
+ "icon": "fas-bolt",
+ "links": ["https://www.fastify.io/", "https://www.fastify.io/docs/"]
},
{
"id": "rabbitmq",
"name": "RabbitMQ",
"description": "Broker de messages open source",
+ "icon": "fas-stream",
"links": [
"https://www.rabbitmq.com/",
"https://www.rabbitmq.com/documentation.html"
@@ -174,6 +162,7 @@
"id": "apache-kafka",
"name": "Apache Kafka",
"description": "Plateforme de streaming distribuée",
+ "icon": "fas-broadcast",
"links": [
"https://kafka.apache.org/",
"https://kafka.apache.org/documentation/"
@@ -183,6 +172,7 @@
"id": "microservices",
"name": "Microservices",
"description": "Architecture en microservices",
+ "icon": "fas-boxes",
"links": [
"https://microservices.io/",
"https://martinfowler.com/articles/microservices.html"
diff --git a/public/data/skills/cloud.json b/public/data/skills/cloud.json
index 04915d4..cc847da 100644
--- a/public/data/skills/cloud.json
+++ b/public/data/skills/cloud.json
@@ -9,7 +9,8 @@
"links": [
"https://aws.amazon.com/",
"https://docs.aws.amazon.com/"
- ]
+ ],
+ "icon": "fab-aws"
},
{
"id": "azure",
@@ -18,7 +19,8 @@
"links": [
"https://azure.microsoft.com/",
"https://docs.microsoft.com/azure/"
- ]
+ ],
+ "icon": "fab-microsoft"
},
{
"id": "gcp",
@@ -27,7 +29,8 @@
"links": [
"https://cloud.google.com/",
"https://cloud.google.com/docs"
- ]
+ ],
+ "icon": "fab-google"
},
{
"id": "terraform",
@@ -36,7 +39,8 @@
"links": [
"https://www.terraform.io/",
"https://learn.hashicorp.com/terraform"
- ]
+ ],
+ "icon": "fas-tools"
},
{
"id": "serverless",
@@ -45,7 +49,8 @@
"links": [
"https://www.serverless.com/",
"https://www.serverless.com/framework/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "lambda",
@@ -54,7 +59,8 @@
"links": [
"https://aws.amazon.com/lambda/",
"https://docs.aws.amazon.com/lambda/"
- ]
+ ],
+ "icon": "fas-bolt"
},
{
"id": "cloudformation",
@@ -63,7 +69,8 @@
"links": [
"https://aws.amazon.com/cloudformation/",
"https://docs.aws.amazon.com/cloudformation/"
- ]
+ ],
+ "icon": "fas-layers"
},
{
"id": "s3",
@@ -72,7 +79,8 @@
"links": [
"https://aws.amazon.com/s3/",
"https://docs.aws.amazon.com/s3/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "ec2",
@@ -81,7 +89,8 @@
"links": [
"https://aws.amazon.com/ec2/",
"https://docs.aws.amazon.com/ec2/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "cloudfront",
@@ -90,7 +99,8 @@
"links": [
"https://aws.amazon.com/cloudfront/",
"https://docs.aws.amazon.com/cloudfront/"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file
diff --git a/public/data/skills/data.json b/public/data/skills/data.json
index 471f2c6..ba66dd4 100644
--- a/public/data/skills/data.json
+++ b/public/data/skills/data.json
@@ -9,7 +9,8 @@
"links": [
"https://www.postgresql.org/docs/",
"https://dev.mysql.com/doc/"
- ]
+ ],
+ "icon": "fas-database"
},
{
"id": "postgresql",
@@ -18,7 +19,8 @@
"links": [
"https://www.postgresql.org/",
"https://www.postgresql.org/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "mongodb",
@@ -27,7 +29,8 @@
"links": [
"https://www.mongodb.com/",
"https://docs.mongodb.com/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "redis",
@@ -36,7 +39,8 @@
"links": [
"https://redis.io/",
"https://redis.io/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "elasticsearch",
@@ -45,7 +49,8 @@
"links": [
"https://www.elastic.co/elasticsearch/",
"https://www.elastic.co/guide/"
- ]
+ ],
+ "icon": "fas-search"
},
{
"id": "python-data",
@@ -54,7 +59,8 @@
"links": [
"https://pandas.pydata.org/",
"https://scikit-learn.org/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "tableau",
@@ -63,7 +69,8 @@
"links": [
"https://www.tableau.com/",
"https://help.tableau.com/"
- ]
+ ],
+ "icon": "fas-chart"
},
{
"id": "powerbi",
@@ -72,7 +79,8 @@
"links": [
"https://powerbi.microsoft.com/",
"https://docs.microsoft.com/power-bi/"
- ]
+ ],
+ "icon": "fab-microsoft"
},
{
"id": "spark",
@@ -81,7 +89,8 @@
"links": [
"https://spark.apache.org/",
"https://spark.apache.org/docs/"
- ]
+ ],
+ "icon": "fas-bolt"
},
{
"id": "airflow",
@@ -90,7 +99,8 @@
"links": [
"https://airflow.apache.org/",
"https://airflow.apache.org/docs/"
- ]
+ ],
+ "icon": "fas-stream"
}
]
-}
+}
\ No newline at end of file
diff --git a/public/data/skills/design.json b/public/data/skills/design.json
index 6b9f94a..879bb6d 100644
--- a/public/data/skills/design.json
+++ b/public/data/skills/design.json
@@ -9,7 +9,8 @@
"links": [
"https://www.figma.com/",
"https://help.figma.com/"
- ]
+ ],
+ "icon": "fab-figma"
},
{
"id": "sketch",
@@ -18,7 +19,8 @@
"links": [
"https://www.sketch.com/",
"https://www.sketch.com/docs/"
- ]
+ ],
+ "icon": "fab-sketch"
},
{
"id": "adobe-xd",
@@ -27,7 +29,8 @@
"links": [
"https://www.adobe.com/products/xd.html",
"https://helpx.adobe.com/xd/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "ux-ui",
@@ -36,7 +39,8 @@
"links": [
"https://www.nngroup.com/",
"https://material.io/design/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "design-system",
@@ -45,7 +49,8 @@
"links": [
"https://designsystemsrepo.com/",
"https://www.designbetter.co/design-systems-handbook"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "prototyping",
@@ -54,7 +59,8 @@
"links": [
"https://www.prototypr.io/",
"https://www.invisionapp.com/"
- ]
+ ],
+ "icon": "fas-palette"
},
{
"id": "user-research",
@@ -63,7 +69,8 @@
"links": [
"https://www.nngroup.com/articles/",
"https://www.usability.gov/"
- ]
+ ],
+ "icon": "fas-users"
},
{
"id": "accessibility",
@@ -72,7 +79,8 @@
"links": [
"https://www.w3.org/WAI/",
"https://webaim.org/"
- ]
+ ],
+ "icon": "fas-eye"
},
{
"id": "responsive-design",
@@ -81,7 +89,8 @@
"links": [
"https://developers.google.com/web/fundamentals/design-and-ux/responsive",
"https://responsivedesign.is/"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "motion-design",
@@ -90,7 +99,8 @@
"links": [
"https://material.io/design/motion/",
"https://www.framer.com/"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file
diff --git a/public/data/skills/devops.json b/public/data/skills/devops.json
index fd5ae1d..6da2fc2 100644
--- a/public/data/skills/devops.json
+++ b/public/data/skills/devops.json
@@ -10,7 +10,8 @@
"https://www.docker.com/",
"https://docs.docker.com/",
"https://github.com/docker/docker-ce"
- ]
+ ],
+ "icon": "fab-docker"
},
{
"id": "kubernetes",
@@ -20,7 +21,8 @@
"https://kubernetes.io/",
"https://kubernetes.io/docs/",
"https://github.com/kubernetes/kubernetes"
- ]
+ ],
+ "icon": "fas-layers"
},
{
"id": "aws",
@@ -30,7 +32,8 @@
"https://aws.amazon.com/",
"https://docs.aws.amazon.com/",
"https://github.com/aws"
- ]
+ ],
+ "icon": "fab-aws"
},
{
"id": "terraform",
@@ -40,7 +43,8 @@
"https://www.terraform.io/",
"https://learn.hashicorp.com/terraform",
"https://github.com/hashicorp/terraform"
- ]
+ ],
+ "icon": "fas-tools"
},
{
"id": "jenkins",
@@ -50,7 +54,8 @@
"https://www.jenkins.io/",
"https://www.jenkins.io/doc/",
"https://github.com/jenkinsci/jenkins"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "githubactions",
@@ -60,7 +65,8 @@
"https://github.com/features/actions",
"https://docs.github.com/en/actions",
"https://github.com/actions"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "ansible",
@@ -69,7 +75,8 @@
"links": [
"https://www.ansible.com/",
"https://docs.ansible.com/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "jenkins",
@@ -78,7 +85,8 @@
"links": [
"https://www.jenkins.io/",
"https://www.jenkins.io/doc/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "gitlab-ci",
@@ -87,7 +95,8 @@
"links": [
"https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/",
"https://docs.gitlab.com/ee/ci/"
- ]
+ ],
+ "icon": "fab-gitlab"
},
{
"id": "prometheus",
@@ -96,7 +105,8 @@
"links": [
"https://prometheus.io/",
"https://prometheus.io/docs/"
- ]
+ ],
+ "icon": "fas-chart-line"
},
{
"id": "grafana",
@@ -105,7 +115,8 @@
"links": [
"https://grafana.com/",
"https://grafana.com/docs/"
- ]
+ ],
+ "icon": "fas-chart-line"
},
{
"id": "elk-stack",
@@ -114,7 +125,8 @@
"links": [
"https://www.elastic.co/what-is/elk-stack",
"https://www.elastic.co/guide/"
- ]
+ ],
+ "icon": "fas-search"
},
{
"id": "nginx",
@@ -123,7 +135,8 @@
"links": [
"https://nginx.org/",
"https://nginx.org/en/docs/"
- ]
+ ],
+ "icon": "fas-server"
},
{
"id": "apache",
@@ -132,7 +145,8 @@
"links": [
"https://httpd.apache.org/",
"https://httpd.apache.org/docs/"
- ]
+ ],
+ "icon": "fas-server"
},
{
"id": "traefik",
@@ -141,7 +155,8 @@
"links": [
"https://traefik.io/",
"https://doc.traefik.io/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "helm",
@@ -150,7 +165,8 @@
"links": [
"https://helm.sh/",
"https://helm.sh/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "istio",
@@ -159,7 +175,8 @@
"links": [
"https://istio.io/",
"https://istio.io/latest/docs/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "vault",
@@ -168,7 +185,8 @@
"links": [
"https://www.vaultproject.io/",
"https://learn.hashicorp.com/vault"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "consul",
@@ -177,7 +195,8 @@
"links": [
"https://www.consul.io/",
"https://learn.hashicorp.com/consul"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "nomad",
@@ -186,7 +205,8 @@
"links": [
"https://www.nomadproject.io/",
"https://learn.hashicorp.com/nomad"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file
diff --git a/public/data/skills/frontend.json b/public/data/skills/frontend.json
index 56599bc..310138d 100644
--- a/public/data/skills/frontend.json
+++ b/public/data/skills/frontend.json
@@ -6,6 +6,7 @@
"id": "react",
"name": "React",
"description": "Bibliothèque JavaScript pour créer des interfaces utilisateur",
+ "icon": "fab-react",
"links": [
"https://react.dev/",
"https://react.dev/learn",
@@ -16,6 +17,7 @@
"id": "vue",
"name": "Vue.js",
"description": "Framework JavaScript progressif pour construire des interfaces utilisateur",
+ "icon": "fab-vue",
"links": [
"https://vuejs.org/",
"https://vuejs.org/guide/",
@@ -26,6 +28,7 @@
"id": "typescript",
"name": "TypeScript",
"description": "Superset typé de JavaScript qui compile en JavaScript plain",
+ "icon": "fab-js",
"links": [
"https://www.typescriptlang.org/",
"https://www.typescriptlang.org/docs/",
@@ -36,6 +39,7 @@
"id": "nextjs",
"name": "Next.js",
"description": "Framework React pour la production avec SSR, SSG et plus",
+ "icon": "fab-react",
"links": [
"https://nextjs.org/",
"https://nextjs.org/docs",
@@ -46,6 +50,7 @@
"id": "tailwindcss",
"name": "Tailwind CSS",
"description": "Framework CSS utility-first pour créer rapidement des designs personnalisés",
+ "icon": "fas-palette",
"links": [
"https://tailwindcss.com/",
"https://tailwindcss.com/docs",
@@ -56,6 +61,7 @@
"id": "webpack",
"name": "Webpack",
"description": "Bundler de modules pour les applications JavaScript modernes",
+ "icon": "fas-cube",
"links": [
"https://webpack.js.org/",
"https://webpack.js.org/concepts/",
@@ -66,105 +72,84 @@
"id": "vite",
"name": "Vite",
"description": "Outil de build rapide pour applications modernes",
- "links": [
- "https://vitejs.dev/",
- "https://vitejs.dev/guide/"
- ]
+ "icon": "fas-bolt",
+ "links": ["https://vitejs.dev/", "https://vitejs.dev/guide/"]
},
{
"id": "svelte",
"name": "Svelte",
"description": "Framework de compilation pour interfaces utilisateur",
- "links": [
- "https://svelte.dev/",
- "https://svelte.dev/docs"
- ]
+ "icon": "fas-code",
+ "links": ["https://svelte.dev/", "https://svelte.dev/docs"]
},
{
"id": "solidjs",
"name": "SolidJS",
"description": "Framework JavaScript réactif et performant",
- "links": [
- "https://www.solidjs.com/",
- "https://www.solidjs.com/docs"
- ]
+ "icon": "fas-atom",
+ "links": ["https://www.solidjs.com/", "https://www.solidjs.com/docs"]
},
{
"id": "astro",
"name": "Astro",
"description": "Framework statique multi-framework",
- "links": [
- "https://astro.build/",
- "https://docs.astro.build/"
- ]
+ "icon": "fas-rocket",
+ "links": ["https://astro.build/", "https://docs.astro.build/"]
},
{
"id": "remix",
"name": "Remix",
"description": "Framework full-stack centré sur les standards web",
- "links": [
- "https://remix.run/",
- "https://remix.run/docs"
- ]
+ "icon": "fas-sync",
+ "links": ["https://remix.run/", "https://remix.run/docs"]
},
{
"id": "storybook",
"name": "Storybook",
"description": "Outil de développement pour composants UI",
- "links": [
- "https://storybook.js.org/",
- "https://storybook.js.org/docs"
- ]
+ "icon": "fas-book",
+ "links": ["https://storybook.js.org/", "https://storybook.js.org/docs"]
},
{
"id": "cypress",
"name": "Cypress",
"description": "Framework de tests end-to-end",
- "links": [
- "https://www.cypress.io/",
- "https://docs.cypress.io/"
- ]
+ "icon": "fas-bug",
+ "links": ["https://www.cypress.io/", "https://docs.cypress.io/"]
},
{
"id": "playwright",
"name": "Playwright",
"description": "Framework de tests pour applications web",
- "links": [
- "https://playwright.dev/",
- "https://playwright.dev/docs/"
- ]
+ "icon": "fas-flask",
+ "links": ["https://playwright.dev/", "https://playwright.dev/docs/"]
},
{
"id": "three-js",
"name": "Three.js",
"description": "Bibliothèque JavaScript pour 3D dans le navigateur",
- "links": [
- "https://threejs.org/",
- "https://threejs.org/docs/"
- ]
+ "icon": "fas-cube",
+ "links": ["https://threejs.org/", "https://threejs.org/docs/"]
},
{
"id": "d3",
"name": "D3.js",
"description": "Bibliothèque de visualisation de données",
- "links": [
- "https://d3js.org/",
- "https://github.com/d3/d3/wiki"
- ]
+ "icon": "fas-chart-line",
+ "links": ["https://d3js.org/", "https://github.com/d3/d3/wiki"]
},
{
"id": "gsap",
"name": "GSAP",
"description": "Bibliothèque d'animations web performantes",
- "links": [
- "https://greensock.com/gsap/",
- "https://greensock.com/docs/"
- ]
+ "icon": "fas-bolt",
+ "links": ["https://greensock.com/gsap/", "https://greensock.com/docs/"]
},
{
"id": "web-components",
"name": "Web Components",
"description": "Standards natifs pour composants réutilisables",
+ "icon": "fas-puzzle",
"links": [
"https://developer.mozilla.org/en-US/docs/Web/Web_Components",
"https://web.dev/web-components/"
@@ -174,6 +159,7 @@
"id": "pwa",
"name": "Progressive Web Apps",
"description": "Applications web progressives",
+ "icon": "fas-mobile",
"links": [
"https://web.dev/progressive-web-apps/",
"https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps"
diff --git a/public/data/skills/mobile.json b/public/data/skills/mobile.json
index 43f1918..47a6b1b 100644
--- a/public/data/skills/mobile.json
+++ b/public/data/skills/mobile.json
@@ -10,7 +10,8 @@
"https://reactnative.dev/",
"https://reactnative.dev/docs/getting-started",
"https://github.com/facebook/react-native"
- ]
+ ],
+ "icon": "fab-react"
},
{
"id": "flutter",
@@ -20,7 +21,8 @@
"https://flutter.dev/",
"https://docs.flutter.dev/",
"https://github.com/flutter/flutter"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "swift",
@@ -30,7 +32,8 @@
"https://developer.apple.com/swift/",
"https://docs.swift.org/swift-book/",
"https://github.com/apple/swift"
- ]
+ ],
+ "icon": "fab-swift"
},
{
"id": "kotlin",
@@ -40,7 +43,8 @@
"https://kotlinlang.org/",
"https://kotlinlang.org/docs/",
"https://github.com/JetBrains/kotlin"
- ]
+ ],
+ "icon": "fab-android"
},
{
"id": "expo",
@@ -50,7 +54,8 @@
"https://expo.dev/",
"https://docs.expo.dev/",
"https://github.com/expo/expo"
- ]
+ ],
+ "icon": "fab-react"
},
{
"id": "ionic",
@@ -59,7 +64,8 @@
"links": [
"https://ionicframework.com/",
"https://ionicframework.com/docs"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "xamarin",
@@ -68,7 +74,8 @@
"links": [
"https://dotnet.microsoft.com/apps/xamarin",
"https://docs.microsoft.com/xamarin/"
- ]
+ ],
+ "icon": "fab-microsoft"
},
{
"id": "unity",
@@ -77,7 +84,8 @@
"links": [
"https://unity.com/",
"https://docs.unity3d.com/"
- ]
+ ],
+ "icon": "fas-cube"
},
{
"id": "cordova",
@@ -86,7 +94,8 @@
"links": [
"https://cordova.apache.org/",
"https://cordova.apache.org/docs/"
- ]
+ ],
+ "icon": "fas-mobile"
},
{
"id": "capacitor",
@@ -95,7 +104,8 @@
"links": [
"https://capacitorjs.com/",
"https://capacitorjs.com/docs"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "fastlane",
@@ -104,7 +114,8 @@
"links": [
"https://fastlane.tools/",
"https://docs.fastlane.tools/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "firebase",
@@ -113,7 +124,8 @@
"links": [
"https://firebase.google.com/",
"https://firebase.google.com/docs"
- ]
+ ],
+ "icon": "fab-google"
},
{
"id": "app-store-optimization",
@@ -122,7 +134,8 @@
"links": [
"https://developer.apple.com/app-store/",
"https://play.google.com/console/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "mobile-testing",
@@ -131,7 +144,8 @@
"links": [
"https://appium.io/",
"https://detox.js.org/"
- ]
+ ],
+ "icon": "fas-bug"
},
{
"id": "mobile-performance",
@@ -140,7 +154,8 @@
"links": [
"https://developers.google.com/web/tools/lighthouse",
"https://developer.android.com/topic/performance"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "push-notifications",
@@ -149,7 +164,8 @@
"links": [
"https://firebase.google.com/docs/cloud-messaging",
"https://developer.apple.com/notifications/"
- ]
+ ],
+ "icon": "fas-bell"
}
]
-}
+}
\ No newline at end of file
diff --git a/public/data/skills/security.json b/public/data/skills/security.json
index 4c68394..b6ed546 100644
--- a/public/data/skills/security.json
+++ b/public/data/skills/security.json
@@ -9,7 +9,8 @@
"links": [
"https://oauth.net/2/",
"https://tools.ietf.org/html/rfc6749"
- ]
+ ],
+ "icon": "fas-key"
},
{
"id": "jwt",
@@ -18,7 +19,8 @@
"links": [
"https://jwt.io/",
"https://tools.ietf.org/html/rfc7519"
- ]
+ ],
+ "icon": "fas-shield"
},
{
"id": "https-ssl",
@@ -27,7 +29,8 @@
"links": [
"https://developer.mozilla.org/en-US/docs/Web/Security",
"https://letsencrypt.org/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "owasp",
@@ -36,7 +39,8 @@
"links": [
"https://owasp.org/",
"https://owasp.org/www-project-top-ten/"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "csrf-xss",
@@ -45,7 +49,8 @@
"links": [
"https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html",
"https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "penetration-testing",
@@ -54,7 +59,8 @@
"links": [
"https://owasp.org/www-community/Penetration_Testing_Methodologies",
"https://www.kali.org/"
- ]
+ ],
+ "icon": "fas-user-shield"
},
{
"id": "cryptography",
@@ -63,7 +69,8 @@
"links": [
"https://cryptography.io/",
"https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "auth0",
@@ -72,7 +79,8 @@
"links": [
"https://auth0.com/",
"https://auth0.com/docs"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "keycloak",
@@ -81,7 +89,8 @@
"links": [
"https://www.keycloak.org/",
"https://www.keycloak.org/documentation"
- ]
+ ],
+ "icon": "fas-cog"
},
{
"id": "vault",
@@ -90,7 +99,8 @@
"links": [
"https://www.vaultproject.io/",
"https://learn.hashicorp.com/vault"
- ]
+ ],
+ "icon": "fas-cog"
}
]
-}
+}
\ No newline at end of file