@@ -155,8 +155,8 @@ export default function HomePage() {
const currentSkillCategory = skillCategories.find(
(sc) => sc.category === category.category
);
- const CategoryIcon = currentSkillCategory
- ? getCategoryIcon(currentSkillCategory.icon)
+ const CategoryIcon = currentSkillCategory
+ ? getCategoryIcon(currentSkillCategory.icon)
: null;
return (
diff --git a/components/radar-chart.tsx b/components/radar-chart.tsx
index 4edfa8e..bb16955 100644
--- a/components/radar-chart.tsx
+++ b/components/radar-chart.tsx
@@ -15,9 +15,13 @@ interface SkillsRadarChartProps {
}
export function SkillsRadarChart({ data }: SkillsRadarChartProps) {
- // Transform data for the chart
+ // Transform data for the chart with abbreviated labels
const chartData = data.map((item) => ({
category: item.category,
+ shortLabel:
+ item.category.length > 8
+ ? item.category.substring(0, 8) + "..."
+ : item.category,
score: item.score,
maxScore: item.maxScore,
}));
@@ -31,34 +35,105 @@ export function SkillsRadarChart({ data }: SkillsRadarChartProps) {
}
return (
-
+
-
-
+
+ {/* Category labels with better positioning */}
+ {
+ return chartData[index]?.category || value;
+ }}
+ />
+
+ {/* Radial axis with custom ticks */}
{
+ if (value === 0) return "";
+ if (value === 1) return "Débutant";
+ if (value === 2) return "Autonome";
+ if (value === 3) return "Expert";
+ return value.toString();
+ }}
/>
+
+ {/* Main radar area with gradient */}
+
+ {/* Background reference radar for max score */}
+
+
+ {/* Gradient definition */}
+
+
+
+
+
+
+
+ {/* Legend */}
+
);
}
diff --git a/data/skills/backend.json b/data/skills/backend.json
index 23e98c8..a82633b 100644
--- a/data/skills/backend.json
+++ b/data/skills/backend.json
@@ -66,28 +66,19 @@
"id": "golang",
"name": "Go",
"description": "Langage de programmation développé par Google",
- "links": [
- "https://golang.org/",
- "https://golang.org/doc/"
- ]
+ "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/"
- ]
+ "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/"
- ]
+ "links": ["https://spring.io/", "https://docs.spring.io/"]
},
{
"id": "csharp-dotnet",
@@ -102,64 +93,43 @@
"id": "php-laravel",
"name": "PHP Laravel",
"description": "Framework PHP moderne pour applications web",
- "links": [
- "https://laravel.com/",
- "https://laravel.com/docs"
- ]
+ "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/"
- ]
+ "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/"
- ]
+ "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"
- ]
+ "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"
- ]
+ "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/"
- ]
+ "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/"
- ]
+ "links": ["https://www.fastify.io/", "https://www.fastify.io/docs/"]
},
{
"id": "rabbitmq",
diff --git a/data/skills/cloud.json b/data/skills/cloud.json
index 04915d4..a37ab02 100644
--- a/data/skills/cloud.json
+++ b/data/skills/cloud.json
@@ -6,10 +6,7 @@
"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/"]
},
{
"id": "azure",
@@ -24,10 +21,7 @@
"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"]
},
{
"id": "terraform",
@@ -69,10 +63,7 @@
"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/"]
},
{
"id": "ec2",
diff --git a/data/skills/devops.json b/data/skills/devops.json
index fd5ae1d..0dcf0bb 100644
--- a/data/skills/devops.json
+++ b/data/skills/devops.json
@@ -66,19 +66,13 @@
"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/"]
},
{
"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/"]
},
{
"id": "gitlab-ci",
@@ -93,19 +87,13 @@
"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/"]
},
{
"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/"]
},
{
"id": "elk-stack",
@@ -120,46 +108,31 @@
"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/"]
},
{
"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/"]
},
{
"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/"]
},
{
"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/"]
},
{
"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/"]
},
{
"id": "vault",
@@ -174,10 +147,7 @@
"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"]
},
{
"id": "nomad",