chore: datas are ok and sync also

This commit is contained in:
Julien Froidefond
2025-08-27 12:18:40 +02:00
parent aee5d74445
commit 88dc00a44b
11 changed files with 385 additions and 211 deletions

View File

@@ -11,7 +11,8 @@
"https://nodejs.org/", "https://nodejs.org/",
"https://nodejs.org/en/docs/", "https://nodejs.org/en/docs/",
"https://github.com/nodejs/node" "https://github.com/nodejs/node"
] ],
"importance": "majeure"
}, },
{ {
"id": "python", "id": "python",
@@ -22,7 +23,8 @@
"https://www.python.org/", "https://www.python.org/",
"https://docs.python.org/3/", "https://docs.python.org/3/",
"https://github.com/python/cpython" "https://github.com/python/cpython"
] ],
"importance": "majeure"
}, },
{ {
"id": "express", "id": "express",
@@ -33,28 +35,32 @@
"https://expressjs.com/", "https://expressjs.com/",
"https://expressjs.com/en/guide/routing.html", "https://expressjs.com/en/guide/routing.html",
"https://github.com/expressjs/express" "https://github.com/expressjs/express"
] ],
"importance": "standard"
}, },
{ {
"id": "golang", "id": "golang",
"name": "Go", "name": "Go",
"description": "Langage de programmation développé par Google", "description": "Langage de programmation développé par Google",
"icon": "fab-golang", "icon": "fab-golang",
"links": ["https://golang.org/", "https://golang.org/doc/"] "links": ["https://golang.org/", "https://golang.org/doc/"],
"importance": "standard"
}, },
{ {
"id": "rust", "id": "rust",
"name": "Rust", "name": "Rust",
"description": "Langage de programmation système sûr et performant", "description": "Langage de programmation système sûr et performant",
"icon": "fab-rust", "icon": "fab-rust",
"links": ["https://www.rust-lang.org/", "https://doc.rust-lang.org/"] "links": ["https://www.rust-lang.org/", "https://doc.rust-lang.org/"],
"importance": "standard"
}, },
{ {
"id": "java-spring", "id": "java-spring",
"name": "Java Spring", "name": "Java Spring",
"description": "Framework Java pour applications d'entreprise", "description": "Framework Java pour applications d'entreprise",
"icon": "fab-java", "icon": "fab-java",
"links": ["https://spring.io/", "https://docs.spring.io/"] "links": ["https://spring.io/", "https://docs.spring.io/"],
"importance": "majeure"
}, },
{ {
"id": "csharp-dotnet", "id": "csharp-dotnet",
@@ -64,56 +70,64 @@
"links": [ "links": [
"https://dotnet.microsoft.com/", "https://dotnet.microsoft.com/",
"https://docs.microsoft.com/dotnet/" "https://docs.microsoft.com/dotnet/"
] ],
"importance": "incontournable"
}, },
{ {
"id": "php-laravel", "id": "php-laravel",
"name": "PHP Laravel", "name": "PHP Laravel",
"description": "Framework PHP moderne pour applications web", "description": "Framework PHP moderne pour applications web",
"icon": "fab-php", "icon": "fab-php",
"links": ["https://laravel.com/", "https://laravel.com/docs"] "links": ["https://laravel.com/", "https://laravel.com/docs"],
"importance": "standard"
}, },
{ {
"id": "ruby-rails", "id": "ruby-rails",
"name": "Ruby on Rails", "name": "Ruby on Rails",
"description": "Framework web en Ruby", "description": "Framework web en Ruby",
"icon": "fas-code", "icon": "fas-code",
"links": ["https://rubyonrails.org/", "https://guides.rubyonrails.org/"] "links": ["https://rubyonrails.org/", "https://guides.rubyonrails.org/"],
"importance": "standard"
}, },
{ {
"id": "graphql", "id": "graphql",
"name": "GraphQL", "name": "GraphQL",
"description": "Langage de requête pour APIs", "description": "Langage de requête pour APIs",
"icon": "fas-sitemap", "icon": "fas-sitemap",
"links": ["https://graphql.org/", "https://graphql.org/learn/"] "links": ["https://graphql.org/", "https://graphql.org/learn/"],
"importance": "standard"
}, },
{ {
"id": "prisma", "id": "prisma",
"name": "Prisma", "name": "Prisma",
"description": "ORM moderne pour Node.js et TypeScript", "description": "ORM moderne pour Node.js et TypeScript",
"icon": "fas-database", "icon": "fas-database",
"links": ["https://www.prisma.io/", "https://www.prisma.io/docs"] "links": ["https://www.prisma.io/", "https://www.prisma.io/docs"],
"importance": "standard"
}, },
{ {
"id": "trpc", "id": "trpc",
"name": "tRPC", "name": "tRPC",
"description": "Framework TypeScript pour APIs type-safe", "description": "Framework TypeScript pour APIs type-safe",
"icon": "fas-plug", "icon": "fas-plug",
"links": ["https://trpc.io/", "https://trpc.io/docs"] "links": ["https://trpc.io/", "https://trpc.io/docs"],
"importance": "standard"
}, },
{ {
"id": "nest-js", "id": "nest-js",
"name": "NestJS", "name": "NestJS",
"description": "Framework Node.js pour applications scalables", "description": "Framework Node.js pour applications scalables",
"icon": "fas-layers", "icon": "fas-layers",
"links": ["https://nestjs.com/", "https://docs.nestjs.com/"] "links": ["https://nestjs.com/", "https://docs.nestjs.com/"],
"importance": "standard"
}, },
{ {
"id": "fastify", "id": "fastify",
"name": "Fastify", "name": "Fastify",
"description": "Framework web rapide pour Node.js", "description": "Framework web rapide pour Node.js",
"icon": "fas-bolt", "icon": "fas-bolt",
"links": ["https://www.fastify.io/", "https://www.fastify.io/docs/"] "links": ["https://www.fastify.io/", "https://www.fastify.io/docs/"],
"importance": "standard"
}, },
{ {
"id": "rabbitmq", "id": "rabbitmq",
@@ -123,9 +137,9 @@
"links": [ "links": [
"https://www.rabbitmq.com/", "https://www.rabbitmq.com/",
"https://www.rabbitmq.com/documentation.html" "https://www.rabbitmq.com/documentation.html"
] ],
"importance": "standard"
}, },
{ {
"id": "semantic-kernel", "id": "semantic-kernel",
"name": "Semantic Kernel", "name": "Semantic Kernel",
@@ -134,7 +148,8 @@
"links": [ "links": [
"https://github.com/microsoft/semantic-kernel", "https://github.com/microsoft/semantic-kernel",
"https://learn.microsoft.com/en-us/semantic-kernel/" "https://learn.microsoft.com/en-us/semantic-kernel/"
] ],
"importance": "standard"
}, },
{ {
"id": "dotnet-core", "id": "dotnet-core",
@@ -144,7 +159,8 @@
"links": [ "links": [
"https://dotnet.microsoft.com/", "https://dotnet.microsoft.com/",
"https://docs.microsoft.com/dotnet/" "https://docs.microsoft.com/dotnet/"
] ],
"importance": "incontournable"
}, },
{ {
"id": "asp-net-mvc", "id": "asp-net-mvc",
@@ -154,7 +170,8 @@
"links": [ "links": [
"https://dotnet.microsoft.com/apps/aspnet/mvc", "https://dotnet.microsoft.com/apps/aspnet/mvc",
"https://docs.microsoft.com/aspnet/mvc/" "https://docs.microsoft.com/aspnet/mvc/"
] ],
"importance": "incontournable"
}, },
{ {
"id": "spring-boot", "id": "spring-boot",
@@ -164,7 +181,8 @@
"links": [ "links": [
"https://spring.io/projects/spring-boot", "https://spring.io/projects/spring-boot",
"https://docs.spring.io/spring-boot/docs/current/reference/html/" "https://docs.spring.io/spring-boot/docs/current/reference/html/"
] ],
"importance": "majeure"
}, },
{ {
"id": "kafka-connect", "id": "kafka-connect",
@@ -174,14 +192,19 @@
"links": [ "links": [
"https://docs.confluent.io/platform/current/connect/index.html", "https://docs.confluent.io/platform/current/connect/index.html",
"https://kafka.apache.org/documentation/#connect" "https://kafka.apache.org/documentation/#connect"
] ],
"importance": "majeure"
}, },
{ {
"id": "oas-swagger", "id": "oas-swagger",
"name": "OAS Swagger", "name": "OAS Swagger",
"description": "Spécification OpenAPI pour la documentation et la conception d'API RESTful", "description": "Spécification OpenAPI pour la documentation et la conception d'API RESTful",
"icon": "fas-file-code", "icon": "fas-file-code",
"links": ["https://swagger.io/specification/", "https://swagger.io/docs/"] "links": [
"https://swagger.io/specification/",
"https://swagger.io/docs/"
],
"importance": "incontournable"
} }
] ]
} }

View File

@@ -10,7 +10,8 @@
"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html", "https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html",
"https://martinfowler.com/articles/practical-test-pyramid.html" "https://martinfowler.com/articles/practical-test-pyramid.html"
], ],
"icon": "fas-layer-group" "icon": "fas-layer-group",
"importance": "standard"
}, },
{ {
"id": "ddd", "id": "ddd",
@@ -20,7 +21,8 @@
"https://martinfowler.com/bliki/DomainDrivenDesign.html", "https://martinfowler.com/bliki/DomainDrivenDesign.html",
"https://www.domainlanguage.com/ddd/" "https://www.domainlanguage.com/ddd/"
], ],
"icon": "fas-sitemap" "icon": "fas-sitemap",
"importance": "standard"
}, },
{ {
"id": "event-sourcing", "id": "event-sourcing",
@@ -30,7 +32,8 @@
"https://martinfowler.com/eaaDev/EventSourcing.html", "https://martinfowler.com/eaaDev/EventSourcing.html",
"https://eventstore.com/docs/getting-started/" "https://eventstore.com/docs/getting-started/"
], ],
"icon": "fas-history" "icon": "fas-history",
"importance": "standard"
}, },
{ {
"id": "cqrs", "id": "cqrs",
@@ -40,7 +43,8 @@
"https://martinfowler.com/bliki/CQRS.html", "https://martinfowler.com/bliki/CQRS.html",
"https://docs.microsoft.com/azure/architecture/patterns/cqrs" "https://docs.microsoft.com/azure/architecture/patterns/cqrs"
], ],
"icon": "fas-exchange-alt" "icon": "fas-exchange-alt",
"importance": "standard"
}, },
{ {
"id": "hexagonal-architecture", "id": "hexagonal-architecture",
@@ -50,7 +54,8 @@
"https://alistair.cockburn.us/hexagonal-architecture/", "https://alistair.cockburn.us/hexagonal-architecture/",
"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html" "https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"
], ],
"icon": "fas-hexagon" "icon": "fas-hexagon",
"importance": "standard"
}, },
{ {
"id": "tdd", "id": "tdd",
@@ -60,7 +65,8 @@
"https://martinfowler.com/bliki/TestDrivenDevelopment.html", "https://martinfowler.com/bliki/TestDrivenDevelopment.html",
"https://www.agilealliance.org/glossary/tdd/" "https://www.agilealliance.org/glossary/tdd/"
], ],
"icon": "fas-vial" "icon": "fas-vial",
"importance": "standard"
}, },
{ {
"id": "bdd", "id": "bdd",
@@ -70,7 +76,8 @@
"https://cucumber.io/docs/bdd/", "https://cucumber.io/docs/bdd/",
"https://www.agilealliance.org/glossary/bdd/" "https://www.agilealliance.org/glossary/bdd/"
], ],
"icon": "fas-comments" "icon": "fas-comments",
"importance": "standard"
}, },
{ {
"id": "pair-programming", "id": "pair-programming",
@@ -80,7 +87,8 @@
"https://martinfowler.com/bliki/PairProgramming.html", "https://martinfowler.com/bliki/PairProgramming.html",
"https://www.agilealliance.org/glossary/pair-programming/" "https://www.agilealliance.org/glossary/pair-programming/"
], ],
"icon": "fas-users" "icon": "fas-users",
"importance": "standard"
}, },
{ {
"id": "code-review", "id": "code-review",
@@ -90,7 +98,8 @@
"https://martinfowler.com/articles/code-review.html", "https://martinfowler.com/articles/code-review.html",
"https://github.com/features/code-review" "https://github.com/features/code-review"
], ],
"icon": "fas-search" "icon": "fas-search",
"importance": "standard"
}, },
{ {
"id": "refactoring", "id": "refactoring",
@@ -100,7 +109,8 @@
"https://refactoring.com/", "https://refactoring.com/",
"https://martinfowler.com/books/refactoring.html" "https://martinfowler.com/books/refactoring.html"
], ],
"icon": "fas-tools" "icon": "fas-tools",
"importance": "standard"
}, },
{ {
"id": "design-patterns", "id": "design-patterns",
@@ -110,7 +120,8 @@
"https://refactoring.guru/design-patterns", "https://refactoring.guru/design-patterns",
"https://www.oodesign.com/" "https://www.oodesign.com/"
], ],
"icon": "fas-puzzle-piece" "icon": "fas-puzzle-piece",
"importance": "standard"
}, },
{ {
"id": "solid-principles", "id": "solid-principles",
@@ -120,7 +131,8 @@
"https://en.wikipedia.org/wiki/SOLID", "https://en.wikipedia.org/wiki/SOLID",
"https://blog.cleancoder.com/uncle-bob/2020/10/18/SolidPrinciples.html" "https://blog.cleancoder.com/uncle-bob/2020/10/18/SolidPrinciples.html"
], ],
"icon": "fas-cube" "icon": "fas-cube",
"importance": "standard"
}, },
{ {
"id": "agile", "id": "agile",
@@ -130,14 +142,19 @@
"https://agilemanifesto.org/", "https://agilemanifesto.org/",
"https://www.agilealliance.org/" "https://www.agilealliance.org/"
], ],
"icon": "fas-running" "icon": "fas-running",
"importance": "standard"
}, },
{ {
"id": "scrum", "id": "scrum",
"name": "Scrum", "name": "Scrum",
"description": "Framework agile pour le développement de produits complexes avec des équipes auto-organisées", "description": "Framework agile pour le développement de produits complexes avec des équipes auto-organisées",
"links": ["https://www.scrum.org/", "https://www.scrumguides.org/"], "links": [
"icon": "fas-sync" "https://www.scrum.org/",
"https://www.scrumguides.org/"
],
"icon": "fas-sync",
"importance": "standard"
}, },
{ {
"id": "kanban", "id": "kanban",
@@ -147,7 +164,8 @@
"https://kanbanize.com/kanban-resources/getting-started/what-is-kanban", "https://kanbanize.com/kanban-resources/getting-started/what-is-kanban",
"https://www.atlassian.com/agile/kanban" "https://www.atlassian.com/agile/kanban"
], ],
"icon": "fas-columns" "icon": "fas-columns",
"importance": "standard"
}, },
{ {
"id": "devops-culture", "id": "devops-culture",
@@ -157,7 +175,8 @@
"https://aws.amazon.com/devops/what-is-devops/", "https://aws.amazon.com/devops/what-is-devops/",
"https://www.atlassian.com/devops" "https://www.atlassian.com/devops"
], ],
"icon": "fas-handshake" "icon": "fas-handshake",
"importance": "standard"
}, },
{ {
"id": "continuous-learning", "id": "continuous-learning",
@@ -167,7 +186,8 @@
"https://www.thoughtworks.com/insights/blog/continuous-learning-software-development", "https://www.thoughtworks.com/insights/blog/continuous-learning-software-development",
"https://martinfowler.com/articles/developer-productivity.html" "https://martinfowler.com/articles/developer-productivity.html"
], ],
"icon": "fas-graduation-cap" "icon": "fas-graduation-cap",
"importance": "standard"
}, },
{ {
"id": "knowledge-sharing", "id": "knowledge-sharing",
@@ -177,7 +197,8 @@
"https://www.atlassian.com/team-playbook/plays/knowledge-sharing", "https://www.atlassian.com/team-playbook/plays/knowledge-sharing",
"https://confluence.atlassian.com/" "https://confluence.atlassian.com/"
], ],
"icon": "fas-share-alt" "icon": "fas-share-alt",
"importance": "standard"
}, },
{ {
"id": "mob-programming", "id": "mob-programming",
@@ -187,7 +208,8 @@
"https://mobprogramming.org/", "https://mobprogramming.org/",
"https://www.agilealliance.org/glossary/mob-programming/" "https://www.agilealliance.org/glossary/mob-programming/"
], ],
"icon": "fas-users-cog" "icon": "fas-users-cog",
"importance": "standard"
}, },
{ {
"id": "technical-debt", "id": "technical-debt",
@@ -197,7 +219,8 @@
"https://martinfowler.com/bliki/TechnicalDebt.html", "https://martinfowler.com/bliki/TechnicalDebt.html",
"https://www.agilealliance.org/glossary/technical-debt/" "https://www.agilealliance.org/glossary/technical-debt/"
], ],
"icon": "fas-credit-card" "icon": "fas-credit-card",
"importance": "standard"
}, },
{ {
"id": "code-quality", "id": "code-quality",
@@ -207,7 +230,8 @@
"https://martinfowler.com/articles/is-quality-worth-cost.html", "https://martinfowler.com/articles/is-quality-worth-cost.html",
"https://www.sonarqube.org/" "https://www.sonarqube.org/"
], ],
"icon": "fas-star" "icon": "fas-star",
"importance": "standard"
}, },
{ {
"id": "documentation", "id": "documentation",
@@ -217,7 +241,8 @@
"https://www.atlassian.com/software/confluence", "https://www.atlassian.com/software/confluence",
"https://docs.github.com/" "https://docs.github.com/"
], ],
"icon": "fas-book" "icon": "fas-book",
"importance": "standard"
} }
] ]
} }

View File

@@ -10,7 +10,8 @@
"https://www.postgresql.org/docs/", "https://www.postgresql.org/docs/",
"https://dev.mysql.com/doc/" "https://dev.mysql.com/doc/"
], ],
"icon": "fas-database" "icon": "fas-database",
"importance": "incontournable"
}, },
{ {
"id": "postgresql", "id": "postgresql",
@@ -20,21 +21,24 @@
"https://www.postgresql.org/", "https://www.postgresql.org/",
"https://www.postgresql.org/docs/" "https://www.postgresql.org/docs/"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "mongodb", "id": "mongodb",
"name": "MongoDB", "name": "MongoDB",
"description": "Base de données NoSQL orientée documents", "description": "Base de données NoSQL orientée documents",
"links": ["https://www.mongodb.com/", "https://docs.mongodb.com/"], "links": ["https://www.mongodb.com/", "https://docs.mongodb.com/"],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "incontournable"
}, },
{ {
"id": "redis", "id": "redis",
"name": "Redis", "name": "Redis",
"description": "Base de données en mémoire, cache et courtier de messages", "description": "Base de données en mémoire, cache et courtier de messages",
"links": ["https://redis.io/", "https://redis.io/docs/"], "links": ["https://redis.io/", "https://redis.io/docs/"],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "elasticsearch", "id": "elasticsearch",
@@ -44,21 +48,24 @@
"https://www.elastic.co/elasticsearch/", "https://www.elastic.co/elasticsearch/",
"https://www.elastic.co/guide/" "https://www.elastic.co/guide/"
], ],
"icon": "fas-search" "icon": "fas-search",
"importance": "standard"
}, },
{ {
"id": "python-data", "id": "python-data",
"name": "Python (Data Science)", "name": "Python (Data Science)",
"description": "Python pour l'analyse de données et machine learning", "description": "Python pour l'analyse de données et machine learning",
"links": ["https://pandas.pydata.org/", "https://scikit-learn.org/"], "links": ["https://pandas.pydata.org/", "https://scikit-learn.org/"],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "tableau", "id": "tableau",
"name": "Tableau", "name": "Tableau",
"description": "Plateforme de visualisation de données", "description": "Plateforme de visualisation de données",
"links": ["https://www.tableau.com/", "https://help.tableau.com/"], "links": ["https://www.tableau.com/", "https://help.tableau.com/"],
"icon": "fas-chart" "icon": "fas-chart",
"importance": "standard"
}, },
{ {
"id": "powerbi", "id": "powerbi",
@@ -68,14 +75,16 @@
"https://powerbi.microsoft.com/", "https://powerbi.microsoft.com/",
"https://docs.microsoft.com/power-bi/" "https://docs.microsoft.com/power-bi/"
], ],
"icon": "fab-microsoft" "icon": "fab-microsoft",
"importance": "standard"
}, },
{ {
"id": "spark", "id": "spark",
"name": "Apache Spark", "name": "Apache Spark",
"description": "Moteur de traitement de données distribuées", "description": "Moteur de traitement de données distribuées",
"links": ["https://spark.apache.org/", "https://spark.apache.org/docs/"], "links": ["https://spark.apache.org/", "https://spark.apache.org/docs/"],
"icon": "fas-bolt" "icon": "fas-bolt",
"importance": "standard"
}, },
{ {
"id": "airflow", "id": "airflow",
@@ -85,14 +94,16 @@
"https://airflow.apache.org/", "https://airflow.apache.org/",
"https://airflow.apache.org/docs/" "https://airflow.apache.org/docs/"
], ],
"icon": "fas-stream" "icon": "fas-stream",
"importance": "standard"
}, },
{ {
"id": "talend", "id": "talend",
"name": "Talend", "name": "Talend",
"description": "Plateforme open source et commerciale d'intégration de données offrant une interface graphique pour l'ETL, le traitement batch et temps réel", "description": "Plateforme open source et commerciale d'intégration de données offrant une interface graphique pour l'ETL, le traitement batch et temps réel",
"links": ["https://www.talend.com/", "https://help.talend.com/"], "links": ["https://www.talend.com/", "https://help.talend.com/"],
"icon": "fas-database" "icon": "fas-database",
"importance": "majeure"
}, },
{ {
"id": "kafka", "id": "kafka",
@@ -102,7 +113,8 @@
"https://kafka.apache.org/", "https://kafka.apache.org/",
"https://kafka.apache.org/documentation/" "https://kafka.apache.org/documentation/"
], ],
"icon": "fas-stream" "icon": "fas-stream",
"importance": "incontournable"
}, },
{ {
"id": "dragonfly", "id": "dragonfly",
@@ -112,7 +124,8 @@
"https://www.dragonflydb.io/", "https://www.dragonflydb.io/",
"https://www.dragonflydb.io/docs" "https://www.dragonflydb.io/docs"
], ],
"icon": "fas-database" "icon": "fas-database",
"importance": "standard"
}, },
{ {
"id": "sqlserver", "id": "sqlserver",
@@ -122,29 +135,32 @@
"https://www.microsoft.com/fr-fr/sql-server/", "https://www.microsoft.com/fr-fr/sql-server/",
"https://docs.microsoft.com/sql/" "https://docs.microsoft.com/sql/"
], ],
"icon": "fab-microsoft" "icon": "fab-microsoft",
"importance": "majeure"
}, },
{ {
"id": "snowflake", "id": "snowflake",
"name": "Snowflake", "name": "Snowflake",
"description": "Plateforme de data warehouse cloud-native permettant l'analyse de données à grande échelle", "description": "Plateforme de data warehouse cloud-native permettant l'analyse de données à grande échelle",
"links": ["https://www.snowflake.com/", "https://docs.snowflake.com/"], "links": ["https://www.snowflake.com/", "https://docs.snowflake.com/"],
"icon": "fas-cloud" "icon": "fas-cloud",
"importance": "standard"
}, },
{ {
"id": "solr", "id": "solr",
"name": "SolR", "name": "SolR",
"description": "Plateforme de recherche open source basée sur Apache Lucene, optimisée pour la recherche en texte intégral", "description": "Plateforme de recherche open source basée sur Apache Lucene, optimisée pour la recherche en texte intégral",
"links": ["https://solr.apache.org/", "https://solr.apache.org/guide/"], "links": ["https://solr.apache.org/", "https://solr.apache.org/guide/"],
"icon": "fas-search" "icon": "fas-search",
"importance": "standard"
}, },
{ {
"id": "opensearch", "id": "opensearch",
"name": "OpenSearch", "name": "OpenSearch",
"description": "Fork d'Elasticsearch, offrant des fonctionnalités de recherche et d'analyse de données distribuées", "description": "Fork d'Elasticsearch, offrant des fonctionnalités de recherche et d'analyse de données distribuées",
"links": ["https://opensearch.org/", "https://opensearch.org/docs/"], "links": ["https://opensearch.org/", "https://opensearch.org/docs/"],
"icon": "fas-search" "icon": "fas-search",
"importance": "standard"
} }
] ]
} }

View File

@@ -6,21 +6,17 @@
"id": "figma", "id": "figma",
"name": "Figma", "name": "Figma",
"description": "Outil de design d'interface collaboratif", "description": "Outil de design d'interface collaboratif",
"links": [ "links": ["https://www.figma.com/", "https://help.figma.com/"],
"https://www.figma.com/", "icon": "fab-figma",
"https://help.figma.com/" "importance": "standard"
],
"icon": "fab-figma"
}, },
{ {
"id": "sketch", "id": "sketch",
"name": "Sketch", "name": "Sketch",
"description": "Outil de design d'interface pour macOS", "description": "Outil de design d'interface pour macOS",
"links": [ "links": ["https://www.sketch.com/", "https://www.sketch.com/docs/"],
"https://www.sketch.com/", "icon": "fab-sketch",
"https://www.sketch.com/docs/" "importance": "standard"
],
"icon": "fab-sketch"
}, },
{ {
"id": "adobe-xd", "id": "adobe-xd",
@@ -30,17 +26,16 @@
"https://www.adobe.com/products/xd.html", "https://www.adobe.com/products/xd.html",
"https://helpx.adobe.com/xd/" "https://helpx.adobe.com/xd/"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "ux-ui", "id": "ux-ui",
"name": "UX/UI Design", "name": "UX/UI Design",
"description": "Conception d'expérience et d'interface utilisateur", "description": "Conception d'expérience et d'interface utilisateur",
"links": [ "links": ["https://www.nngroup.com/", "https://material.io/design/"],
"https://www.nngroup.com/", "icon": "fas-cog",
"https://material.io/design/" "importance": "standard"
],
"icon": "fas-cog"
}, },
{ {
"id": "design-system", "id": "design-system",
@@ -50,17 +45,16 @@
"https://designsystemsrepo.com/", "https://designsystemsrepo.com/",
"https://www.designbetter.co/design-systems-handbook" "https://www.designbetter.co/design-systems-handbook"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "majeure"
}, },
{ {
"id": "prototyping", "id": "prototyping",
"name": "Prototypage", "name": "Prototypage",
"description": "Création de prototypes interactifs", "description": "Création de prototypes interactifs",
"links": [ "links": ["https://www.prototypr.io/", "https://www.invisionapp.com/"],
"https://www.prototypr.io/", "icon": "fas-palette",
"https://www.invisionapp.com/" "importance": "standard"
],
"icon": "fas-palette"
}, },
{ {
"id": "user-research", "id": "user-research",
@@ -70,17 +64,16 @@
"https://www.nngroup.com/articles/", "https://www.nngroup.com/articles/",
"https://www.usability.gov/" "https://www.usability.gov/"
], ],
"icon": "fas-users" "icon": "fas-users",
"importance": "standard"
}, },
{ {
"id": "accessibility", "id": "accessibility",
"name": "Accessibilité", "name": "Accessibilité",
"description": "Design accessible et inclusive", "description": "Design accessible et inclusive",
"links": [ "links": ["https://www.w3.org/WAI/", "https://webaim.org/"],
"https://www.w3.org/WAI/", "icon": "fas-eye",
"https://webaim.org/" "importance": "majeure"
],
"icon": "fas-eye"
}, },
{ {
"id": "responsive-design", "id": "responsive-design",
@@ -90,7 +83,8 @@
"https://developers.google.com/web/fundamentals/design-and-ux/responsive", "https://developers.google.com/web/fundamentals/design-and-ux/responsive",
"https://responsivedesign.is/" "https://responsivedesign.is/"
], ],
"icon": "fas-mobile" "icon": "fas-mobile",
"importance": "majeure"
}, },
{ {
"id": "motion-design", "id": "motion-design",
@@ -100,7 +94,8 @@
"https://material.io/design/motion/", "https://material.io/design/motion/",
"https://www.framer.com/" "https://www.framer.com/"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
} }
] ]
} }

View File

@@ -11,7 +11,8 @@
"https://docs.docker.com/", "https://docs.docker.com/",
"https://github.com/docker/docker-ce" "https://github.com/docker/docker-ce"
], ],
"icon": "fab-docker" "icon": "fab-docker",
"importance": "incontournable"
}, },
{ {
"id": "kubernetes", "id": "kubernetes",
@@ -22,7 +23,8 @@
"https://kubernetes.io/docs/", "https://kubernetes.io/docs/",
"https://github.com/kubernetes/kubernetes" "https://github.com/kubernetes/kubernetes"
], ],
"icon": "fas-layers" "icon": "fas-layers",
"importance": "incontournable"
}, },
{ {
"id": "aws", "id": "aws",
@@ -33,7 +35,8 @@
"https://docs.aws.amazon.com/", "https://docs.aws.amazon.com/",
"https://github.com/aws" "https://github.com/aws"
], ],
"icon": "fab-aws" "icon": "fab-aws",
"importance": "standard"
}, },
{ {
"id": "terraform", "id": "terraform",
@@ -44,7 +47,8 @@
"https://learn.hashicorp.com/terraform", "https://learn.hashicorp.com/terraform",
"https://github.com/hashicorp/terraform" "https://github.com/hashicorp/terraform"
], ],
"icon": "fas-tools" "icon": "fas-tools",
"importance": "standard"
}, },
{ {
"id": "jenkins", "id": "jenkins",
@@ -55,7 +59,8 @@
"https://www.jenkins.io/doc/", "https://www.jenkins.io/doc/",
"https://github.com/jenkinsci/jenkins" "https://github.com/jenkinsci/jenkins"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "githubactions", "id": "githubactions",
@@ -66,14 +71,16 @@
"https://docs.github.com/en/actions", "https://docs.github.com/en/actions",
"https://github.com/actions" "https://github.com/actions"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "ansible", "id": "ansible",
"name": "Ansible", "name": "Ansible",
"description": "Outil d'automatisation IT et de gestion de configuration", "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" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "gitlab-ci", "id": "gitlab-ci",
@@ -83,21 +90,24 @@
"https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/", "https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/",
"https://docs.gitlab.com/ee/ci/" "https://docs.gitlab.com/ee/ci/"
], ],
"icon": "fab-gitlab" "icon": "fab-gitlab",
"importance": "standard"
}, },
{ {
"id": "prometheus", "id": "prometheus",
"name": "Prometheus", "name": "Prometheus",
"description": "Système de monitoring et d'alerting", "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" "icon": "fas-chart-line",
"importance": "majeure"
}, },
{ {
"id": "grafana", "id": "grafana",
"name": "Grafana", "name": "Grafana",
"description": "Plateforme de visualisation et monitoring", "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" "icon": "fas-chart-line",
"importance": "incontournable"
}, },
{ {
"id": "elk-stack", "id": "elk-stack",
@@ -107,50 +117,56 @@
"https://www.elastic.co/what-is/elk-stack", "https://www.elastic.co/what-is/elk-stack",
"https://www.elastic.co/guide/" "https://www.elastic.co/guide/"
], ],
"icon": "fas-search" "icon": "fas-search",
"importance": "standard"
}, },
{ {
"id": "nginx", "id": "nginx",
"name": "Nginx", "name": "Nginx",
"description": "Serveur web et proxy inverse", "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" "icon": "fas-server",
"importance": "majeure"
}, },
{ {
"id": "apache", "id": "apache",
"name": "Apache HTTP Server", "name": "Apache HTTP Server",
"description": "Serveur web open source", "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" "icon": "fas-server",
"importance": "standard"
}, },
{ {
"id": "traefik", "id": "traefik",
"name": "Traefik", "name": "Traefik",
"description": "Proxy inverse moderne et load balancer", "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" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "helm", "id": "helm",
"name": "Helm", "name": "Helm",
"description": "Gestionnaire de packages pour Kubernetes", "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" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "istio", "id": "istio",
"name": "Istio", "name": "Istio",
"description": "Service mesh pour microservices", "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" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "consul", "id": "consul",
"name": "HashiCorp Consul", "name": "HashiCorp Consul",
"description": "Service discovery et configuration", "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" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "nomad", "id": "nomad",
@@ -160,29 +176,32 @@
"https://www.nomadproject.io/", "https://www.nomadproject.io/",
"https://learn.hashicorp.com/nomad" "https://learn.hashicorp.com/nomad"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "kong", "id": "kong",
"name": "Kong", "name": "Kong",
"description": "Gateway API open source pour la gestion, la sécurisation et le monitoring des API avec support de plugins", "description": "Gateway API open source pour la gestion, la sécurisation et le monitoring des API avec support de plugins",
"links": ["https://konghq.com/", "https://docs.konghq.com/"], "links": ["https://konghq.com/", "https://docs.konghq.com/"],
"icon": "fas-door-open" "icon": "fas-door-open",
"importance": "majeure"
}, },
{ {
"id": "ceph", "id": "ceph",
"name": "Ceph", "name": "Ceph",
"description": "Système de stockage distribué open source offrant des services d'objets, de blocs et de fichiers", "description": "Système de stockage distribué open source offrant des services d'objets, de blocs et de fichiers",
"links": ["https://ceph.io/", "https://docs.ceph.com/"], "links": ["https://ceph.io/", "https://docs.ceph.com/"],
"icon": "fas-hdd" "icon": "fas-hdd",
"importance": "majeure"
}, },
{ {
"id": "harbor", "id": "harbor",
"name": "Harbor", "name": "Harbor",
"description": "Registre de conteneurs open source pour le stockage et la distribution sécurisée des images Docker", "description": "Registre de conteneurs open source pour le stockage et la distribution sécurisée des images Docker",
"links": ["https://goharbor.io/", "https://goharbor.io/docs/"], "links": ["https://goharbor.io/", "https://goharbor.io/docs/"],
"icon": "fas-ship" "icon": "fas-ship",
"importance": "incontournable"
}, },
{ {
"id": "zabbix", "id": "zabbix",
@@ -192,7 +211,8 @@
"https://www.zabbix.com/", "https://www.zabbix.com/",
"https://www.zabbix.com/documentation" "https://www.zabbix.com/documentation"
], ],
"icon": "fas-chart-line" "icon": "fas-chart-line",
"importance": "standard"
}, },
{ {
"id": "nutanix", "id": "nutanix",
@@ -202,14 +222,16 @@
"https://www.nutanix.com/", "https://www.nutanix.com/",
"https://portal.nutanix.com/page/documents" "https://portal.nutanix.com/page/documents"
], ],
"icon": "fas-server" "icon": "fas-server",
"importance": "standard"
}, },
{ {
"id": "backstage", "id": "backstage",
"name": "Backstage", "name": "Backstage",
"description": "Plateforme de portail développeur open source pour centraliser la documentation, les services et les outils de développement", "description": "Plateforme de portail développeur open source pour centraliser la documentation, les services et les outils de développement",
"links": ["https://backstage.io/", "https://backstage.io/docs/"], "links": ["https://backstage.io/", "https://backstage.io/docs/"],
"icon": "fas-home" "icon": "fas-home",
"importance": "standard"
}, },
{ {
"id": "cohesity", "id": "cohesity",
@@ -219,22 +241,24 @@
"https://www.cohesity.com/", "https://www.cohesity.com/",
"https://www.cohesity.com/support/" "https://www.cohesity.com/support/"
], ],
"icon": "fas-database" "icon": "fas-database",
"importance": "standard"
}, },
{ {
"id": "sonar", "id": "sonar",
"name": "Sonar", "name": "Sonar",
"description": "Plateforme d'analyse statique de code multi-langage pour la détection des bugs, vulnérabilités et code smells", "description": "Plateforme d'analyse statique de code multi-langage pour la détection des bugs, vulnérabilités et code smells",
"links": ["https://www.sonarsource.com/", "https://docs.sonarqube.org/"], "links": ["https://www.sonarsource.com/", "https://docs.sonarqube.org/"],
"icon": "fas-search" "icon": "fas-search",
"importance": "majeure"
}, },
{ {
"id": "git", "id": "git",
"name": "Git", "name": "Git",
"description": "Système de contrôle de version distribué pour le suivi des modifications du code source", "description": "Système de contrôle de version distribué pour le suivi des modifications du code source",
"links": ["https://git-scm.com/", "https://git-scm.com/doc"], "links": ["https://git-scm.com/", "https://git-scm.com/doc"],
"icon": "fab-git" "icon": "fab-git",
"importance": "incontournable"
}, },
{ {
"id": "trivy", "id": "trivy",
@@ -244,30 +268,32 @@
"https://aquasecurity.github.io/trivy/", "https://aquasecurity.github.io/trivy/",
"https://aquasecurity.github.io/trivy/latest/docs/" "https://aquasecurity.github.io/trivy/latest/docs/"
], ],
"icon": "fas-shield-alt" "icon": "fas-shield-alt",
"importance": "standard"
}, },
{ {
"id": "checkmarx", "id": "checkmarx",
"name": "Checkmarx", "name": "Checkmarx",
"description": "Solution d'analyse de sécurité applicative (SAST) pour la détection des vulnérabilités dans le code source", "description": "Solution d'analyse de sécurité applicative (SAST) pour la détection des vulnérabilités dans le code source",
"links": ["https://checkmarx.com/", "https://checkmarx.com/resources/"], "links": ["https://checkmarx.com/", "https://checkmarx.com/resources/"],
"icon": "fas-shield-alt" "icon": "fas-shield-alt",
"importance": "standard"
}, },
{ {
"id": "liquibase", "id": "liquibase",
"name": "Liquibase", "name": "Liquibase",
"description": "Outil de gestion des changements de base de données pour le versioning et le déploiement des schémas", "description": "Outil de gestion des changements de base de données pour le versioning et le déploiement des schémas",
"links": ["https://www.liquibase.org/", "https://docs.liquibase.com/"], "links": ["https://www.liquibase.org/", "https://docs.liquibase.com/"],
"icon": "fas-database" "icon": "fas-database",
"importance": "standard"
}, },
{ {
"id": "puppet", "id": "puppet",
"name": "Puppet", "name": "Puppet",
"description": "Plateforme de gestion de configuration et d'automatisation infrastructure permettant le déploiement et la conformité des systèmes", "description": "Plateforme de gestion de configuration et d'automatisation infrastructure permettant le déploiement et la conformité des systèmes",
"links": ["https://puppet.com/", "https://puppet.com/docs/"], "links": ["https://puppet.com/", "https://puppet.com/docs/"],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "azure-devops", "id": "azure-devops",
@@ -277,7 +303,8 @@
"https://azure.microsoft.com/fr-fr/services/devops/server/", "https://azure.microsoft.com/fr-fr/services/devops/server/",
"https://docs.microsoft.com/azure/devops/" "https://docs.microsoft.com/azure/devops/"
], ],
"icon": "fab-microsoft" "icon": "fab-microsoft",
"importance": "majeure"
}, },
{ {
"id": "nexus", "id": "nexus",
@@ -287,7 +314,8 @@
"https://www.sonatype.com/products/sonatype-nexus-repository", "https://www.sonatype.com/products/sonatype-nexus-repository",
"https://help.sonatype.com/repomanager3/" "https://help.sonatype.com/repomanager3/"
], ],
"icon": "fas-archive" "icon": "fas-archive",
"importance": "standard"
} }
] ]
} }

View File

@@ -11,7 +11,8 @@
"https://react.dev/", "https://react.dev/",
"https://react.dev/learn", "https://react.dev/learn",
"https://github.com/facebook/react" "https://github.com/facebook/react"
] ],
"importance": "incontournable"
}, },
{ {
"id": "vue", "id": "vue",
@@ -22,7 +23,8 @@
"https://vuejs.org/", "https://vuejs.org/",
"https://vuejs.org/guide/", "https://vuejs.org/guide/",
"https://github.com/vuejs/core" "https://github.com/vuejs/core"
] ],
"importance": "standard"
}, },
{ {
"id": "typescript", "id": "typescript",
@@ -33,7 +35,8 @@
"https://www.typescriptlang.org/", "https://www.typescriptlang.org/",
"https://www.typescriptlang.org/docs/", "https://www.typescriptlang.org/docs/",
"https://github.com/microsoft/TypeScript" "https://github.com/microsoft/TypeScript"
] ],
"importance": "incontournable"
}, },
{ {
"id": "nextjs", "id": "nextjs",
@@ -44,7 +47,8 @@
"https://nextjs.org/", "https://nextjs.org/",
"https://nextjs.org/docs", "https://nextjs.org/docs",
"https://github.com/vercel/next.js" "https://github.com/vercel/next.js"
] ],
"importance": "majeure"
}, },
{ {
"id": "tailwindcss", "id": "tailwindcss",
@@ -55,7 +59,8 @@
"https://tailwindcss.com/", "https://tailwindcss.com/",
"https://tailwindcss.com/docs", "https://tailwindcss.com/docs",
"https://github.com/tailwindlabs/tailwindcss" "https://github.com/tailwindlabs/tailwindcss"
] ],
"importance": "standard"
}, },
{ {
"id": "webpack", "id": "webpack",
@@ -66,78 +71,88 @@
"https://webpack.js.org/", "https://webpack.js.org/",
"https://webpack.js.org/concepts/", "https://webpack.js.org/concepts/",
"https://github.com/webpack/webpack" "https://github.com/webpack/webpack"
] ],
"importance": "majeure"
}, },
{ {
"id": "vite", "id": "vite",
"name": "Vite", "name": "Vite",
"description": "Outil de build rapide pour applications modernes", "description": "Outil de build rapide pour applications modernes",
"icon": "fas-bolt", "icon": "fas-bolt",
"links": ["https://vitejs.dev/", "https://vitejs.dev/guide/"] "links": ["https://vitejs.dev/", "https://vitejs.dev/guide/"],
"importance": "standard"
}, },
{ {
"id": "svelte", "id": "svelte",
"name": "Svelte", "name": "Svelte",
"description": "Framework de compilation pour interfaces utilisateur", "description": "Framework de compilation pour interfaces utilisateur",
"icon": "fas-code", "icon": "fas-code",
"links": ["https://svelte.dev/", "https://svelte.dev/docs"] "links": ["https://svelte.dev/", "https://svelte.dev/docs"],
"importance": "standard"
}, },
{ {
"id": "solidjs", "id": "solidjs",
"name": "SolidJS", "name": "SolidJS",
"description": "Framework JavaScript réactif et performant", "description": "Framework JavaScript réactif et performant",
"icon": "fas-atom", "icon": "fas-atom",
"links": ["https://www.solidjs.com/", "https://www.solidjs.com/docs"] "links": ["https://www.solidjs.com/", "https://www.solidjs.com/docs"],
"importance": "standard"
}, },
{ {
"id": "astro", "id": "astro",
"name": "Astro", "name": "Astro",
"description": "Framework statique multi-framework", "description": "Framework statique multi-framework",
"icon": "fas-rocket", "icon": "fas-rocket",
"links": ["https://astro.build/", "https://docs.astro.build/"] "links": ["https://astro.build/", "https://docs.astro.build/"],
"importance": "standard"
}, },
{ {
"id": "remix", "id": "remix",
"name": "Remix", "name": "Remix",
"description": "Framework full-stack centré sur les standards web", "description": "Framework full-stack centré sur les standards web",
"icon": "fas-sync", "icon": "fas-sync",
"links": ["https://remix.run/", "https://remix.run/docs"] "links": ["https://remix.run/", "https://remix.run/docs"],
"importance": "standard"
}, },
{ {
"id": "storybook", "id": "storybook",
"name": "Storybook", "name": "Storybook",
"description": "Outil de développement pour composants UI", "description": "Outil de développement pour composants UI",
"icon": "fas-book", "icon": "fas-book",
"links": ["https://storybook.js.org/", "https://storybook.js.org/docs"] "links": ["https://storybook.js.org/", "https://storybook.js.org/docs"],
"importance": "majeure"
}, },
{ {
"id": "playwright", "id": "playwright",
"name": "Playwright", "name": "Playwright",
"description": "Framework de tests pour applications web", "description": "Framework de tests pour applications web",
"icon": "fas-flask", "icon": "fas-flask",
"links": ["https://playwright.dev/", "https://playwright.dev/docs/"] "links": ["https://playwright.dev/", "https://playwright.dev/docs/"],
"importance": "standard"
}, },
{ {
"id": "three-js", "id": "three-js",
"name": "Three.js", "name": "Three.js",
"description": "Bibliothèque JavaScript pour 3D dans le navigateur", "description": "Bibliothèque JavaScript pour 3D dans le navigateur",
"icon": "fas-cube", "icon": "fas-cube",
"links": ["https://threejs.org/", "https://threejs.org/docs/"] "links": ["https://threejs.org/", "https://threejs.org/docs/"],
"importance": "standard"
}, },
{ {
"id": "d3", "id": "d3",
"name": "D3.js", "name": "D3.js",
"description": "Bibliothèque de visualisation de données", "description": "Bibliothèque de visualisation de données",
"icon": "fas-chart-line", "icon": "fas-chart-line",
"links": ["https://d3js.org/", "https://github.com/d3/d3/wiki"] "links": ["https://d3js.org/", "https://github.com/d3/d3/wiki"],
"importance": "standard"
}, },
{ {
"id": "gsap", "id": "gsap",
"name": "GSAP", "name": "GSAP",
"description": "Bibliothèque d'animations web performantes", "description": "Bibliothèque d'animations web performantes",
"icon": "fas-bolt", "icon": "fas-bolt",
"links": ["https://greensock.com/gsap/", "https://greensock.com/docs/"] "links": ["https://greensock.com/gsap/", "https://greensock.com/docs/"],
"importance": "standard"
}, },
{ {
"id": "web-components", "id": "web-components",
@@ -147,7 +162,8 @@
"links": [ "links": [
"https://developer.mozilla.org/en-US/docs/Web/Web_Components", "https://developer.mozilla.org/en-US/docs/Web/Web_Components",
"https://web.dev/web-components/" "https://web.dev/web-components/"
] ],
"importance": "standard"
}, },
{ {
"id": "pwa", "id": "pwa",
@@ -157,7 +173,8 @@
"links": [ "links": [
"https://web.dev/progressive-web-apps/", "https://web.dev/progressive-web-apps/",
"https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps" "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps"
] ],
"importance": "standard"
}, },
{ {
"id": "reactjs", "id": "reactjs",
@@ -167,9 +184,9 @@
"links": [ "links": [
"https://reactjs.org/", "https://reactjs.org/",
"https://reactjs.org/docs/getting-started.html" "https://reactjs.org/docs/getting-started.html"
] ],
"importance": "standard"
}, },
{ {
"id": "html5-javascript-css", "id": "html5-javascript-css",
"name": "HTML5/JavaScript/CSS", "name": "HTML5/JavaScript/CSS",
@@ -178,7 +195,8 @@
"links": [ "links": [
"https://developer.mozilla.org/fr/", "https://developer.mozilla.org/fr/",
"https://developer.mozilla.org/fr/docs/Web" "https://developer.mozilla.org/fr/docs/Web"
] ],
"importance": "standard"
} }
] ]
} }

View File

@@ -11,7 +11,8 @@
"https://reactnative.dev/docs/getting-started", "https://reactnative.dev/docs/getting-started",
"https://github.com/facebook/react-native" "https://github.com/facebook/react-native"
], ],
"icon": "fab-react" "icon": "fab-react",
"importance": "standard"
}, },
{ {
"id": "flutter", "id": "flutter",
@@ -22,7 +23,8 @@
"https://docs.flutter.dev/", "https://docs.flutter.dev/",
"https://github.com/flutter/flutter" "https://github.com/flutter/flutter"
], ],
"icon": "fas-mobile" "icon": "fas-mobile",
"importance": "standard"
}, },
{ {
"id": "swift", "id": "swift",
@@ -33,7 +35,8 @@
"https://docs.swift.org/swift-book/", "https://docs.swift.org/swift-book/",
"https://github.com/apple/swift" "https://github.com/apple/swift"
], ],
"icon": "fab-swift" "icon": "fab-swift",
"importance": "standard"
}, },
{ {
"id": "kotlin", "id": "kotlin",
@@ -44,7 +47,8 @@
"https://kotlinlang.org/docs/", "https://kotlinlang.org/docs/",
"https://github.com/JetBrains/kotlin" "https://github.com/JetBrains/kotlin"
], ],
"icon": "fab-android" "icon": "fab-android",
"importance": "standard"
}, },
{ {
"id": "expo", "id": "expo",
@@ -55,7 +59,8 @@
"https://docs.expo.dev/", "https://docs.expo.dev/",
"https://github.com/expo/expo" "https://github.com/expo/expo"
], ],
"icon": "fab-react" "icon": "fab-react",
"importance": "standard"
}, },
{ {
"id": "ionic", "id": "ionic",
@@ -65,7 +70,8 @@
"https://ionicframework.com/", "https://ionicframework.com/",
"https://ionicframework.com/docs" "https://ionicframework.com/docs"
], ],
"icon": "fas-mobile" "icon": "fas-mobile",
"importance": "standard"
}, },
{ {
"id": "xamarin", "id": "xamarin",
@@ -75,14 +81,19 @@
"https://dotnet.microsoft.com/apps/xamarin", "https://dotnet.microsoft.com/apps/xamarin",
"https://docs.microsoft.com/xamarin/" "https://docs.microsoft.com/xamarin/"
], ],
"icon": "fab-microsoft" "icon": "fab-microsoft",
"importance": "standard"
}, },
{ {
"id": "unity", "id": "unity",
"name": "Unity", "name": "Unity",
"description": "Moteur de jeu pour applications mobiles", "description": "Moteur de jeu pour applications mobiles",
"links": ["https://unity.com/", "https://docs.unity3d.com/"], "links": [
"icon": "fas-cube" "https://unity.com/",
"https://docs.unity3d.com/"
],
"icon": "fas-cube",
"importance": "standard"
}, },
{ {
"id": "cordova", "id": "cordova",
@@ -92,21 +103,30 @@
"https://cordova.apache.org/", "https://cordova.apache.org/",
"https://cordova.apache.org/docs/" "https://cordova.apache.org/docs/"
], ],
"icon": "fas-mobile" "icon": "fas-mobile",
"importance": "standard"
}, },
{ {
"id": "capacitor", "id": "capacitor",
"name": "Capacitor", "name": "Capacitor",
"description": "Runtime natif pour applications web", "description": "Runtime natif pour applications web",
"links": ["https://capacitorjs.com/", "https://capacitorjs.com/docs"], "links": [
"icon": "fas-cog" "https://capacitorjs.com/",
"https://capacitorjs.com/docs"
],
"icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "fastlane", "id": "fastlane",
"name": "Fastlane", "name": "Fastlane",
"description": "Automatisation pour développement mobile", "description": "Automatisation pour développement mobile",
"links": ["https://fastlane.tools/", "https://docs.fastlane.tools/"], "links": [
"icon": "fas-cog" "https://fastlane.tools/",
"https://docs.fastlane.tools/"
],
"icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "firebase", "id": "firebase",
@@ -116,7 +136,8 @@
"https://firebase.google.com/", "https://firebase.google.com/",
"https://firebase.google.com/docs" "https://firebase.google.com/docs"
], ],
"icon": "fab-google" "icon": "fab-google",
"importance": "standard"
}, },
{ {
"id": "app-store-optimization", "id": "app-store-optimization",
@@ -126,14 +147,19 @@
"https://developer.apple.com/app-store/", "https://developer.apple.com/app-store/",
"https://play.google.com/console/" "https://play.google.com/console/"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "mobile-testing", "id": "mobile-testing",
"name": "Tests Mobile", "name": "Tests Mobile",
"description": "Frameworks de tests pour applications mobiles", "description": "Frameworks de tests pour applications mobiles",
"links": ["https://appium.io/", "https://detox.js.org/"], "links": [
"icon": "fas-bug" "https://appium.io/",
"https://detox.js.org/"
],
"icon": "fas-bug",
"importance": "standard"
}, },
{ {
"id": "mobile-performance", "id": "mobile-performance",
@@ -143,7 +169,8 @@
"https://developers.google.com/web/tools/lighthouse", "https://developers.google.com/web/tools/lighthouse",
"https://developer.android.com/topic/performance" "https://developer.android.com/topic/performance"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "push-notifications", "id": "push-notifications",
@@ -153,7 +180,8 @@
"https://firebase.google.com/docs/cloud-messaging", "https://firebase.google.com/docs/cloud-messaging",
"https://developer.apple.com/notifications/" "https://developer.apple.com/notifications/"
], ],
"icon": "fas-bell" "icon": "fas-bell",
"importance": "standard"
} }
] ]
} }

View File

@@ -7,14 +7,16 @@
"name": "OAuth 2.0", "name": "OAuth 2.0",
"description": "Framework d'autorisation pour APIs", "description": "Framework d'autorisation pour APIs",
"links": ["https://oauth.net/2/", "https://tools.ietf.org/html/rfc6749"], "links": ["https://oauth.net/2/", "https://tools.ietf.org/html/rfc6749"],
"icon": "fas-key" "icon": "fas-key",
"importance": "standard"
}, },
{ {
"id": "jwt", "id": "jwt",
"name": "JSON Web Tokens", "name": "JSON Web Tokens",
"description": "Standard pour transmettre des informations de façon sécurisée", "description": "Standard pour transmettre des informations de façon sécurisée",
"links": ["https://jwt.io/", "https://tools.ietf.org/html/rfc7519"], "links": ["https://jwt.io/", "https://tools.ietf.org/html/rfc7519"],
"icon": "fas-shield" "icon": "fas-shield",
"importance": "standard"
}, },
{ {
"id": "https-ssl", "id": "https-ssl",
@@ -24,14 +26,16 @@
"https://developer.mozilla.org/en-US/docs/Web/Security", "https://developer.mozilla.org/en-US/docs/Web/Security",
"https://letsencrypt.org/" "https://letsencrypt.org/"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "owasp", "id": "owasp",
"name": "OWASP", "name": "OWASP",
"description": "Bonnes pratiques de sécurité des applications web", "description": "Bonnes pratiques de sécurité des applications web",
"links": ["https://owasp.org/", "https://owasp.org/www-project-top-ten/"], "links": ["https://owasp.org/", "https://owasp.org/www-project-top-ten/"],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "csrf-xss", "id": "csrf-xss",
@@ -41,7 +45,8 @@
"https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html", "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" "https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "penetration-testing", "id": "penetration-testing",
@@ -51,7 +56,8 @@
"https://owasp.org/www-community/Penetration_Testing_Methodologies", "https://owasp.org/www-community/Penetration_Testing_Methodologies",
"https://www.kali.org/" "https://www.kali.org/"
], ],
"icon": "fas-user-shield" "icon": "fas-user-shield",
"importance": "standard"
}, },
{ {
"id": "cryptography", "id": "cryptography",
@@ -61,14 +67,16 @@
"https://cryptography.io/", "https://cryptography.io/",
"https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API" "https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "auth0", "id": "auth0",
"name": "Auth0", "name": "Auth0",
"description": "Plateforme d'authentification et d'autorisation", "description": "Plateforme d'authentification et d'autorisation",
"links": ["https://auth0.com/", "https://auth0.com/docs"], "links": ["https://auth0.com/", "https://auth0.com/docs"],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "standard"
}, },
{ {
"id": "keycloak", "id": "keycloak",
@@ -78,7 +86,8 @@
"https://www.keycloak.org/", "https://www.keycloak.org/",
"https://www.keycloak.org/documentation" "https://www.keycloak.org/documentation"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "incontournable"
}, },
{ {
"id": "vault", "id": "vault",
@@ -88,7 +97,8 @@
"https://www.vaultproject.io/", "https://www.vaultproject.io/",
"https://learn.hashicorp.com/vault" "https://learn.hashicorp.com/vault"
], ],
"icon": "fas-cog" "icon": "fas-cog",
"importance": "incontournable"
}, },
{ {
"id": "sentinelone", "id": "sentinelone",
@@ -98,7 +108,8 @@
"https://www.sentinelone.com/", "https://www.sentinelone.com/",
"https://docs.sentinelone.com/" "https://docs.sentinelone.com/"
], ],
"icon": "fas-shield-alt" "icon": "fas-shield-alt",
"importance": "standard"
}, },
{ {
"id": "forescout", "id": "forescout",
@@ -108,7 +119,8 @@
"https://www.forescout.com/", "https://www.forescout.com/",
"https://www.forescout.com/support/" "https://www.forescout.com/support/"
], ],
"icon": "fas-network-wired" "icon": "fas-network-wired",
"importance": "standard"
} }
] ]
} }

View File

@@ -10,21 +10,24 @@
"https://www.selenium.dev/", "https://www.selenium.dev/",
"https://www.selenium.dev/documentation/" "https://www.selenium.dev/documentation/"
], ],
"icon": "fas-bug" "icon": "fas-bug",
"importance": "standard"
}, },
{ {
"id": "cypress", "id": "cypress",
"name": "Cypress", "name": "Cypress",
"description": "Framework de test JS end-to-end moderne pour les applications web avec interface de développement intégrée", "description": "Framework de test JS end-to-end moderne pour les applications web avec interface de développement intégrée",
"links": ["https://www.cypress.io/", "https://docs.cypress.io/"], "links": ["https://www.cypress.io/", "https://docs.cypress.io/"],
"icon": "fas-bug" "icon": "fas-bug",
"importance": "standard"
}, },
{ {
"id": "k6", "id": "k6",
"name": "K6", "name": "K6",
"description": "Outil de test de charge open source en JS pour la performance et le stress testing des applications", "description": "Outil de test de charge open source en JS pour la performance et le stress testing des applications",
"links": ["https://k6.io/", "https://k6.io/docs/"], "links": ["https://k6.io/", "https://k6.io/docs/"],
"icon": "fas-tachometer-alt" "icon": "fas-tachometer-alt",
"importance": "standard"
}, },
{ {
"id": "jmeter", "id": "jmeter",
@@ -34,7 +37,8 @@
"https://jmeter.apache.org/", "https://jmeter.apache.org/",
"https://jmeter.apache.org/usermanual/" "https://jmeter.apache.org/usermanual/"
], ],
"icon": "fas-chart-line" "icon": "fas-chart-line",
"importance": "standard"
}, },
{ {
"id": "robot-framework", "id": "robot-framework",
@@ -44,7 +48,8 @@
"https://robotframework.org/", "https://robotframework.org/",
"https://robotframework.org/robotframework/" "https://robotframework.org/robotframework/"
], ],
"icon": "fas-robot" "icon": "fas-robot",
"importance": "majeure"
}, },
{ {
"id": "mutation-testing", "id": "mutation-testing",
@@ -54,7 +59,8 @@
"https://en.wikipedia.org/wiki/Mutation_testing", "https://en.wikipedia.org/wiki/Mutation_testing",
"https://stryker-mutator.io/docs/mutation-testing-elements/what-is-mutation-testing" "https://stryker-mutator.io/docs/mutation-testing-elements/what-is-mutation-testing"
], ],
"icon": "fas-dna" "icon": "fas-dna",
"importance": "majeure"
}, },
{ {
"id": "stryker", "id": "stryker",
@@ -64,14 +70,16 @@
"https://stryker-mutator.io/", "https://stryker-mutator.io/",
"https://stryker-mutator.io/docs/" "https://stryker-mutator.io/docs/"
], ],
"icon": "fas-bug" "icon": "fas-bug",
"importance": "majeure"
}, },
{ {
"id": "pitest", "id": "pitest",
"name": "Pitest", "name": "Pitest",
"description": "Framework de tests de mutation pour Java et JVM", "description": "Framework de tests de mutation pour Java et JVM",
"links": ["https://pitest.org/", "https://pitest.org/quickstart/"], "links": ["https://pitest.org/", "https://pitest.org/quickstart/"],
"icon": "fab-java" "icon": "fab-java",
"importance": "majeure"
}, },
{ {
"id": "pytest-mutmut", "id": "pytest-mutmut",
@@ -81,7 +89,8 @@
"https://github.com/boxed/mutmut", "https://github.com/boxed/mutmut",
"https://mutmut.readthedocs.io/" "https://mutmut.readthedocs.io/"
], ],
"icon": "fab-python" "icon": "fab-python",
"importance": "standard"
} }
] ]
} }

View File

@@ -85,6 +85,7 @@ async function syncSkillsToDatabase(): Promise<void> {
const needsUpdate = existingSkill const needsUpdate = existingSkill
? existingSkill.description !== skillFromFile.description || ? existingSkill.description !== skillFromFile.description ||
existingSkill.icon !== skillFromFile.icon || existingSkill.icon !== skillFromFile.icon ||
existingSkill.importance !== skillFromFile.importance ||
JSON.stringify(existingSkill.links?.sort()) !== JSON.stringify(existingSkill.links?.sort()) !==
JSON.stringify(skillFromFile.links?.sort()) JSON.stringify(skillFromFile.links?.sort())
: true; : true;

View File

@@ -63,6 +63,7 @@ export class SkillsService {
s.name, s.name,
s.description, s.description,
s.icon, s.icon,
s.importance,
COALESCE( COALESCE(
json_agg(sl.url ORDER BY sl.id) FILTER (WHERE sl.url IS NOT NULL), json_agg(sl.url ORDER BY sl.id) FILTER (WHERE sl.url IS NOT NULL),
'[]'::json '[]'::json
@@ -70,7 +71,7 @@ export class SkillsService {
FROM skills s FROM skills s
LEFT JOIN skill_links sl ON s.id = sl.skill_id LEFT JOIN skill_links sl ON s.id = sl.skill_id
WHERE s.category_id = $1 WHERE s.category_id = $1
GROUP BY s.id, s.name, s.description, s.icon GROUP BY s.id, s.name, s.description, s.icon, s.importance
ORDER BY s.name ORDER BY s.name
`; `;
@@ -81,6 +82,7 @@ export class SkillsService {
name: row.name, name: row.name,
description: row.description, description: row.description,
icon: row.icon, icon: row.icon,
importance: row.importance,
links: row.links, links: row.links,
})); }));
} catch (error) { } catch (error) {
@@ -121,6 +123,7 @@ export class SkillsService {
icon?: string; icon?: string;
categoryId: string; categoryId: string;
links: string[]; links: string[];
importance?: string;
}): Promise<void> { }): Promise<void> {
const pool = getPool(); const pool = getPool();
const client = await pool.connect(); const client = await pool.connect();
@@ -130,8 +133,8 @@ export class SkillsService {
// Insert skill // Insert skill
const skillQuery = ` const skillQuery = `
INSERT INTO skills (id, name, description, icon, category_id) INSERT INTO skills (id, name, description, icon, category_id, importance)
VALUES ($1, $2, $3, $4, $5) VALUES ($1, $2, $3, $4, $5, $6)
`; `;
await client.query(skillQuery, [ await client.query(skillQuery, [
skill.id, skill.id,
@@ -139,6 +142,7 @@ export class SkillsService {
skill.description, skill.description,
skill.icon, skill.icon,
skill.categoryId, skill.categoryId,
skill.importance || "standard",
]); ]);
// Insert links // Insert links
@@ -194,13 +198,14 @@ export class SkillsService {
// Insert skills // Insert skills
for (const skill of categoryData.skills) { for (const skill of categoryData.skills) {
const skillQuery = ` const skillQuery = `
INSERT INTO skills (id, name, description, icon, category_id) INSERT INTO skills (id, name, description, icon, category_id, importance)
VALUES ($1, $2, $3, $4, $5) VALUES ($1, $2, $3, $4, $5, $6)
ON CONFLICT (id) DO UPDATE SET ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name, name = EXCLUDED.name,
description = EXCLUDED.description, description = EXCLUDED.description,
icon = EXCLUDED.icon, icon = EXCLUDED.icon,
category_id = EXCLUDED.category_id category_id = EXCLUDED.category_id,
importance = EXCLUDED.importance
`; `;
await client.query(skillQuery, [ await client.query(skillQuery, [
skill.id, skill.id,
@@ -208,6 +213,7 @@ export class SkillsService {
skill.description, skill.description,
skill.icon, skill.icon,
categoryId, categoryId,
skill.importance || "standard",
]); ]);
// Delete existing links // Delete existing links
@@ -324,6 +330,7 @@ export class SkillsService {
categoryId: string; categoryId: string;
description?: string; description?: string;
icon?: string; icon?: string;
importance?: string;
}): Promise<{ }): Promise<{
id: string; id: string;
name: string; name: string;
@@ -332,6 +339,7 @@ export class SkillsService {
categoryId: string; categoryId: string;
category: string; category: string;
usageCount: number; usageCount: number;
importance: string;
}> { }> {
const pool = getPool(); const pool = getPool();
const client = await pool.connect(); const client = await pool.connect();
@@ -351,10 +359,16 @@ export class SkillsService {
// Créer la nouvelle skill // Créer la nouvelle skill
const result = await client.query( const result = await client.query(
`INSERT INTO skills (id, name, category_id, description, icon) `INSERT INTO skills (id, name, category_id, description, icon, importance)
VALUES (gen_random_uuid(), $1, $2, $3, $4) VALUES (gen_random_uuid(), $1, $2, $3, $4, $5)
RETURNING id, name, description, icon, category_id`, RETURNING id, name, description, icon, category_id, importance`,
[data.name, data.categoryId, data.description || "", data.icon || ""] [
data.name,
data.categoryId,
data.description || "",
data.icon || "",
data.importance || "standard",
]
); );
const newSkill = result.rows[0]; const newSkill = result.rows[0];
@@ -375,6 +389,7 @@ export class SkillsService {
categoryId: newSkill.category_id, categoryId: newSkill.category_id,
category: categoryResult.rows[0]?.name || "Inconnue", category: categoryResult.rows[0]?.name || "Inconnue",
usageCount: 0, usageCount: 0,
importance: newSkill.importance,
}; };
} catch (error) { } catch (error) {
await client.query("ROLLBACK"); await client.query("ROLLBACK");
@@ -393,6 +408,7 @@ export class SkillsService {
categoryId: string; categoryId: string;
description?: string; description?: string;
icon?: string; icon?: string;
importance?: string;
}): Promise<{ }): Promise<{
id: string; id: string;
name: string; name: string;
@@ -400,6 +416,7 @@ export class SkillsService {
icon: string; icon: string;
categoryId: string; categoryId: string;
category: string; category: string;
importance: string;
}> { }> {
const pool = getPool(); const pool = getPool();
const client = await pool.connect(); const client = await pool.connect();
@@ -430,20 +447,21 @@ export class SkillsService {
// Mettre à jour la skill // Mettre à jour la skill
await client.query( await client.query(
`UPDATE skills `UPDATE skills
SET name = $1, category_id = $2, description = $3, icon = $4 SET name = $1, category_id = $2, description = $3, icon = $4, importance = $5
WHERE id = $5`, WHERE id = $6`,
[ [
data.name, data.name,
data.categoryId, data.categoryId,
data.description || "", data.description || "",
data.icon || "", data.icon || "",
data.importance || "standard",
data.id, data.id,
] ]
); );
// Récupérer la skill mise à jour // Récupérer la skill mise à jour
const result = await client.query( const result = await client.query(
`SELECT s.id, s.name, s.description, s.icon, s.category_id, sc.name as category_name `SELECT s.id, s.name, s.description, s.icon, s.category_id, sc.name as category_name, s.importance
FROM skills s FROM skills s
LEFT JOIN skill_categories sc ON s.category_id = sc.id LEFT JOIN skill_categories sc ON s.category_id = sc.id
WHERE s.id = $1`, WHERE s.id = $1`,
@@ -460,6 +478,7 @@ export class SkillsService {
icon: skill.icon, icon: skill.icon,
categoryId: skill.category_id, categoryId: skill.category_id,
category: skill.category_name, category: skill.category_name,
importance: skill.importance,
}; };
} catch (error) { } catch (error) {
await client.query("ROLLBACK"); await client.query("ROLLBACK");
@@ -503,4 +522,4 @@ export class SkillsService {
client.release(); client.release();
} }
} }
} }