chore: datas are ok and sync also
This commit is contained in:
@@ -11,7 +11,8 @@
|
||||
"https://nodejs.org/",
|
||||
"https://nodejs.org/en/docs/",
|
||||
"https://github.com/nodejs/node"
|
||||
]
|
||||
],
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "python",
|
||||
@@ -22,7 +23,8 @@
|
||||
"https://www.python.org/",
|
||||
"https://docs.python.org/3/",
|
||||
"https://github.com/python/cpython"
|
||||
]
|
||||
],
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "express",
|
||||
@@ -33,28 +35,32 @@
|
||||
"https://expressjs.com/",
|
||||
"https://expressjs.com/en/guide/routing.html",
|
||||
"https://github.com/expressjs/express"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "golang",
|
||||
"name": "Go",
|
||||
"description": "Langage de programmation développé par Google",
|
||||
"icon": "fab-golang",
|
||||
"links": ["https://golang.org/", "https://golang.org/doc/"]
|
||||
"links": ["https://golang.org/", "https://golang.org/doc/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"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/"]
|
||||
"links": ["https://www.rust-lang.org/", "https://doc.rust-lang.org/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "java-spring",
|
||||
"name": "Java Spring",
|
||||
"description": "Framework Java pour applications d'entreprise",
|
||||
"icon": "fab-java",
|
||||
"links": ["https://spring.io/", "https://docs.spring.io/"]
|
||||
"links": ["https://spring.io/", "https://docs.spring.io/"],
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "csharp-dotnet",
|
||||
@@ -64,56 +70,64 @@
|
||||
"links": [
|
||||
"https://dotnet.microsoft.com/",
|
||||
"https://docs.microsoft.com/dotnet/"
|
||||
]
|
||||
],
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "php-laravel",
|
||||
"name": "PHP Laravel",
|
||||
"description": "Framework PHP moderne pour applications web",
|
||||
"icon": "fab-php",
|
||||
"links": ["https://laravel.com/", "https://laravel.com/docs"]
|
||||
"links": ["https://laravel.com/", "https://laravel.com/docs"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "ruby-rails",
|
||||
"name": "Ruby on Rails",
|
||||
"description": "Framework web en Ruby",
|
||||
"icon": "fas-code",
|
||||
"links": ["https://rubyonrails.org/", "https://guides.rubyonrails.org/"]
|
||||
"links": ["https://rubyonrails.org/", "https://guides.rubyonrails.org/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "graphql",
|
||||
"name": "GraphQL",
|
||||
"description": "Langage de requête pour APIs",
|
||||
"icon": "fas-sitemap",
|
||||
"links": ["https://graphql.org/", "https://graphql.org/learn/"]
|
||||
"links": ["https://graphql.org/", "https://graphql.org/learn/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"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"]
|
||||
"links": ["https://www.prisma.io/", "https://www.prisma.io/docs"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "trpc",
|
||||
"name": "tRPC",
|
||||
"description": "Framework TypeScript pour APIs type-safe",
|
||||
"icon": "fas-plug",
|
||||
"links": ["https://trpc.io/", "https://trpc.io/docs"]
|
||||
"links": ["https://trpc.io/", "https://trpc.io/docs"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "nest-js",
|
||||
"name": "NestJS",
|
||||
"description": "Framework Node.js pour applications scalables",
|
||||
"icon": "fas-layers",
|
||||
"links": ["https://nestjs.com/", "https://docs.nestjs.com/"]
|
||||
"links": ["https://nestjs.com/", "https://docs.nestjs.com/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "fastify",
|
||||
"name": "Fastify",
|
||||
"description": "Framework web rapide pour Node.js",
|
||||
"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",
|
||||
@@ -123,9 +137,9 @@
|
||||
"links": [
|
||||
"https://www.rabbitmq.com/",
|
||||
"https://www.rabbitmq.com/documentation.html"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "semantic-kernel",
|
||||
"name": "Semantic Kernel",
|
||||
@@ -134,7 +148,8 @@
|
||||
"links": [
|
||||
"https://github.com/microsoft/semantic-kernel",
|
||||
"https://learn.microsoft.com/en-us/semantic-kernel/"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "dotnet-core",
|
||||
@@ -144,7 +159,8 @@
|
||||
"links": [
|
||||
"https://dotnet.microsoft.com/",
|
||||
"https://docs.microsoft.com/dotnet/"
|
||||
]
|
||||
],
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "asp-net-mvc",
|
||||
@@ -154,7 +170,8 @@
|
||||
"links": [
|
||||
"https://dotnet.microsoft.com/apps/aspnet/mvc",
|
||||
"https://docs.microsoft.com/aspnet/mvc/"
|
||||
]
|
||||
],
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "spring-boot",
|
||||
@@ -164,7 +181,8 @@
|
||||
"links": [
|
||||
"https://spring.io/projects/spring-boot",
|
||||
"https://docs.spring.io/spring-boot/docs/current/reference/html/"
|
||||
]
|
||||
],
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "kafka-connect",
|
||||
@@ -174,14 +192,19 @@
|
||||
"links": [
|
||||
"https://docs.confluent.io/platform/current/connect/index.html",
|
||||
"https://kafka.apache.org/documentation/#connect"
|
||||
]
|
||||
],
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "oas-swagger",
|
||||
"name": "OAS Swagger",
|
||||
"description": "Spécification OpenAPI pour la documentation et la conception d'API RESTful",
|
||||
"icon": "fas-file-code",
|
||||
"links": ["https://swagger.io/specification/", "https://swagger.io/docs/"]
|
||||
"links": [
|
||||
"https://swagger.io/specification/",
|
||||
"https://swagger.io/docs/"
|
||||
],
|
||||
"importance": "incontournable"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html",
|
||||
"https://martinfowler.com/articles/practical-test-pyramid.html"
|
||||
],
|
||||
"icon": "fas-layer-group"
|
||||
"icon": "fas-layer-group",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "ddd",
|
||||
@@ -20,7 +21,8 @@
|
||||
"https://martinfowler.com/bliki/DomainDrivenDesign.html",
|
||||
"https://www.domainlanguage.com/ddd/"
|
||||
],
|
||||
"icon": "fas-sitemap"
|
||||
"icon": "fas-sitemap",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "event-sourcing",
|
||||
@@ -30,7 +32,8 @@
|
||||
"https://martinfowler.com/eaaDev/EventSourcing.html",
|
||||
"https://eventstore.com/docs/getting-started/"
|
||||
],
|
||||
"icon": "fas-history"
|
||||
"icon": "fas-history",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "cqrs",
|
||||
@@ -40,7 +43,8 @@
|
||||
"https://martinfowler.com/bliki/CQRS.html",
|
||||
"https://docs.microsoft.com/azure/architecture/patterns/cqrs"
|
||||
],
|
||||
"icon": "fas-exchange-alt"
|
||||
"icon": "fas-exchange-alt",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "hexagonal-architecture",
|
||||
@@ -50,7 +54,8 @@
|
||||
"https://alistair.cockburn.us/hexagonal-architecture/",
|
||||
"https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"
|
||||
],
|
||||
"icon": "fas-hexagon"
|
||||
"icon": "fas-hexagon",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "tdd",
|
||||
@@ -60,7 +65,8 @@
|
||||
"https://martinfowler.com/bliki/TestDrivenDevelopment.html",
|
||||
"https://www.agilealliance.org/glossary/tdd/"
|
||||
],
|
||||
"icon": "fas-vial"
|
||||
"icon": "fas-vial",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "bdd",
|
||||
@@ -70,7 +76,8 @@
|
||||
"https://cucumber.io/docs/bdd/",
|
||||
"https://www.agilealliance.org/glossary/bdd/"
|
||||
],
|
||||
"icon": "fas-comments"
|
||||
"icon": "fas-comments",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "pair-programming",
|
||||
@@ -80,7 +87,8 @@
|
||||
"https://martinfowler.com/bliki/PairProgramming.html",
|
||||
"https://www.agilealliance.org/glossary/pair-programming/"
|
||||
],
|
||||
"icon": "fas-users"
|
||||
"icon": "fas-users",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "code-review",
|
||||
@@ -90,7 +98,8 @@
|
||||
"https://martinfowler.com/articles/code-review.html",
|
||||
"https://github.com/features/code-review"
|
||||
],
|
||||
"icon": "fas-search"
|
||||
"icon": "fas-search",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "refactoring",
|
||||
@@ -100,7 +109,8 @@
|
||||
"https://refactoring.com/",
|
||||
"https://martinfowler.com/books/refactoring.html"
|
||||
],
|
||||
"icon": "fas-tools"
|
||||
"icon": "fas-tools",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "design-patterns",
|
||||
@@ -110,7 +120,8 @@
|
||||
"https://refactoring.guru/design-patterns",
|
||||
"https://www.oodesign.com/"
|
||||
],
|
||||
"icon": "fas-puzzle-piece"
|
||||
"icon": "fas-puzzle-piece",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "solid-principles",
|
||||
@@ -120,7 +131,8 @@
|
||||
"https://en.wikipedia.org/wiki/SOLID",
|
||||
"https://blog.cleancoder.com/uncle-bob/2020/10/18/SolidPrinciples.html"
|
||||
],
|
||||
"icon": "fas-cube"
|
||||
"icon": "fas-cube",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "agile",
|
||||
@@ -130,14 +142,19 @@
|
||||
"https://agilemanifesto.org/",
|
||||
"https://www.agilealliance.org/"
|
||||
],
|
||||
"icon": "fas-running"
|
||||
"icon": "fas-running",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "scrum",
|
||||
"name": "Scrum",
|
||||
"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/"],
|
||||
"icon": "fas-sync"
|
||||
"links": [
|
||||
"https://www.scrum.org/",
|
||||
"https://www.scrumguides.org/"
|
||||
],
|
||||
"icon": "fas-sync",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "kanban",
|
||||
@@ -147,7 +164,8 @@
|
||||
"https://kanbanize.com/kanban-resources/getting-started/what-is-kanban",
|
||||
"https://www.atlassian.com/agile/kanban"
|
||||
],
|
||||
"icon": "fas-columns"
|
||||
"icon": "fas-columns",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "devops-culture",
|
||||
@@ -157,7 +175,8 @@
|
||||
"https://aws.amazon.com/devops/what-is-devops/",
|
||||
"https://www.atlassian.com/devops"
|
||||
],
|
||||
"icon": "fas-handshake"
|
||||
"icon": "fas-handshake",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "continuous-learning",
|
||||
@@ -167,7 +186,8 @@
|
||||
"https://www.thoughtworks.com/insights/blog/continuous-learning-software-development",
|
||||
"https://martinfowler.com/articles/developer-productivity.html"
|
||||
],
|
||||
"icon": "fas-graduation-cap"
|
||||
"icon": "fas-graduation-cap",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "knowledge-sharing",
|
||||
@@ -177,7 +197,8 @@
|
||||
"https://www.atlassian.com/team-playbook/plays/knowledge-sharing",
|
||||
"https://confluence.atlassian.com/"
|
||||
],
|
||||
"icon": "fas-share-alt"
|
||||
"icon": "fas-share-alt",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "mob-programming",
|
||||
@@ -187,7 +208,8 @@
|
||||
"https://mobprogramming.org/",
|
||||
"https://www.agilealliance.org/glossary/mob-programming/"
|
||||
],
|
||||
"icon": "fas-users-cog"
|
||||
"icon": "fas-users-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "technical-debt",
|
||||
@@ -197,7 +219,8 @@
|
||||
"https://martinfowler.com/bliki/TechnicalDebt.html",
|
||||
"https://www.agilealliance.org/glossary/technical-debt/"
|
||||
],
|
||||
"icon": "fas-credit-card"
|
||||
"icon": "fas-credit-card",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "code-quality",
|
||||
@@ -207,7 +230,8 @@
|
||||
"https://martinfowler.com/articles/is-quality-worth-cost.html",
|
||||
"https://www.sonarqube.org/"
|
||||
],
|
||||
"icon": "fas-star"
|
||||
"icon": "fas-star",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "documentation",
|
||||
@@ -217,7 +241,8 @@
|
||||
"https://www.atlassian.com/software/confluence",
|
||||
"https://docs.github.com/"
|
||||
],
|
||||
"icon": "fas-book"
|
||||
"icon": "fas-book",
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,8 @@
|
||||
"https://www.postgresql.org/docs/",
|
||||
"https://dev.mysql.com/doc/"
|
||||
],
|
||||
"icon": "fas-database"
|
||||
"icon": "fas-database",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "postgresql",
|
||||
@@ -20,21 +21,24 @@
|
||||
"https://www.postgresql.org/",
|
||||
"https://www.postgresql.org/docs/"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "mongodb",
|
||||
"name": "MongoDB",
|
||||
"description": "Base de données NoSQL orientée documents",
|
||||
"links": ["https://www.mongodb.com/", "https://docs.mongodb.com/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "redis",
|
||||
"name": "Redis",
|
||||
"description": "Base de données en mémoire, cache et courtier de messages",
|
||||
"links": ["https://redis.io/", "https://redis.io/docs/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "elasticsearch",
|
||||
@@ -44,21 +48,24 @@
|
||||
"https://www.elastic.co/elasticsearch/",
|
||||
"https://www.elastic.co/guide/"
|
||||
],
|
||||
"icon": "fas-search"
|
||||
"icon": "fas-search",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "python-data",
|
||||
"name": "Python (Data Science)",
|
||||
"description": "Python pour l'analyse de données et machine learning",
|
||||
"links": ["https://pandas.pydata.org/", "https://scikit-learn.org/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "tableau",
|
||||
"name": "Tableau",
|
||||
"description": "Plateforme de visualisation de données",
|
||||
"links": ["https://www.tableau.com/", "https://help.tableau.com/"],
|
||||
"icon": "fas-chart"
|
||||
"icon": "fas-chart",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "powerbi",
|
||||
@@ -68,14 +75,16 @@
|
||||
"https://powerbi.microsoft.com/",
|
||||
"https://docs.microsoft.com/power-bi/"
|
||||
],
|
||||
"icon": "fab-microsoft"
|
||||
"icon": "fab-microsoft",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "spark",
|
||||
"name": "Apache Spark",
|
||||
"description": "Moteur de traitement de données distribuées",
|
||||
"links": ["https://spark.apache.org/", "https://spark.apache.org/docs/"],
|
||||
"icon": "fas-bolt"
|
||||
"icon": "fas-bolt",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "airflow",
|
||||
@@ -85,14 +94,16 @@
|
||||
"https://airflow.apache.org/",
|
||||
"https://airflow.apache.org/docs/"
|
||||
],
|
||||
"icon": "fas-stream"
|
||||
"icon": "fas-stream",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "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",
|
||||
"links": ["https://www.talend.com/", "https://help.talend.com/"],
|
||||
"icon": "fas-database"
|
||||
"icon": "fas-database",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "kafka",
|
||||
@@ -102,7 +113,8 @@
|
||||
"https://kafka.apache.org/",
|
||||
"https://kafka.apache.org/documentation/"
|
||||
],
|
||||
"icon": "fas-stream"
|
||||
"icon": "fas-stream",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "dragonfly",
|
||||
@@ -112,7 +124,8 @@
|
||||
"https://www.dragonflydb.io/",
|
||||
"https://www.dragonflydb.io/docs"
|
||||
],
|
||||
"icon": "fas-database"
|
||||
"icon": "fas-database",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "sqlserver",
|
||||
@@ -122,29 +135,32 @@
|
||||
"https://www.microsoft.com/fr-fr/sql-server/",
|
||||
"https://docs.microsoft.com/sql/"
|
||||
],
|
||||
"icon": "fab-microsoft"
|
||||
"icon": "fab-microsoft",
|
||||
"importance": "majeure"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "snowflake",
|
||||
"name": "Snowflake",
|
||||
"description": "Plateforme de data warehouse cloud-native permettant l'analyse de données à grande échelle",
|
||||
"links": ["https://www.snowflake.com/", "https://docs.snowflake.com/"],
|
||||
"icon": "fas-cloud"
|
||||
"icon": "fas-cloud",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "solr",
|
||||
"name": "SolR",
|
||||
"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/"],
|
||||
"icon": "fas-search"
|
||||
"icon": "fas-search",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "opensearch",
|
||||
"name": "OpenSearch",
|
||||
"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/"],
|
||||
"icon": "fas-search"
|
||||
"icon": "fas-search",
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -6,21 +6,17 @@
|
||||
"id": "figma",
|
||||
"name": "Figma",
|
||||
"description": "Outil de design d'interface collaboratif",
|
||||
"links": [
|
||||
"https://www.figma.com/",
|
||||
"https://help.figma.com/"
|
||||
],
|
||||
"icon": "fab-figma"
|
||||
"links": ["https://www.figma.com/", "https://help.figma.com/"],
|
||||
"icon": "fab-figma",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "sketch",
|
||||
"name": "Sketch",
|
||||
"description": "Outil de design d'interface pour macOS",
|
||||
"links": [
|
||||
"https://www.sketch.com/",
|
||||
"https://www.sketch.com/docs/"
|
||||
],
|
||||
"icon": "fab-sketch"
|
||||
"links": ["https://www.sketch.com/", "https://www.sketch.com/docs/"],
|
||||
"icon": "fab-sketch",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "adobe-xd",
|
||||
@@ -30,17 +26,16 @@
|
||||
"https://www.adobe.com/products/xd.html",
|
||||
"https://helpx.adobe.com/xd/"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "ux-ui",
|
||||
"name": "UX/UI Design",
|
||||
"description": "Conception d'expérience et d'interface utilisateur",
|
||||
"links": [
|
||||
"https://www.nngroup.com/",
|
||||
"https://material.io/design/"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"links": ["https://www.nngroup.com/", "https://material.io/design/"],
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "design-system",
|
||||
@@ -50,17 +45,16 @@
|
||||
"https://designsystemsrepo.com/",
|
||||
"https://www.designbetter.co/design-systems-handbook"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "prototyping",
|
||||
"name": "Prototypage",
|
||||
"description": "Création de prototypes interactifs",
|
||||
"links": [
|
||||
"https://www.prototypr.io/",
|
||||
"https://www.invisionapp.com/"
|
||||
],
|
||||
"icon": "fas-palette"
|
||||
"links": ["https://www.prototypr.io/", "https://www.invisionapp.com/"],
|
||||
"icon": "fas-palette",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "user-research",
|
||||
@@ -70,17 +64,16 @@
|
||||
"https://www.nngroup.com/articles/",
|
||||
"https://www.usability.gov/"
|
||||
],
|
||||
"icon": "fas-users"
|
||||
"icon": "fas-users",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "accessibility",
|
||||
"name": "Accessibilité",
|
||||
"description": "Design accessible et inclusive",
|
||||
"links": [
|
||||
"https://www.w3.org/WAI/",
|
||||
"https://webaim.org/"
|
||||
],
|
||||
"icon": "fas-eye"
|
||||
"links": ["https://www.w3.org/WAI/", "https://webaim.org/"],
|
||||
"icon": "fas-eye",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "responsive-design",
|
||||
@@ -90,7 +83,8 @@
|
||||
"https://developers.google.com/web/fundamentals/design-and-ux/responsive",
|
||||
"https://responsivedesign.is/"
|
||||
],
|
||||
"icon": "fas-mobile"
|
||||
"icon": "fas-mobile",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "motion-design",
|
||||
@@ -100,7 +94,8 @@
|
||||
"https://material.io/design/motion/",
|
||||
"https://www.framer.com/"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
"https://docs.docker.com/",
|
||||
"https://github.com/docker/docker-ce"
|
||||
],
|
||||
"icon": "fab-docker"
|
||||
"icon": "fab-docker",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "kubernetes",
|
||||
@@ -22,7 +23,8 @@
|
||||
"https://kubernetes.io/docs/",
|
||||
"https://github.com/kubernetes/kubernetes"
|
||||
],
|
||||
"icon": "fas-layers"
|
||||
"icon": "fas-layers",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "aws",
|
||||
@@ -33,7 +35,8 @@
|
||||
"https://docs.aws.amazon.com/",
|
||||
"https://github.com/aws"
|
||||
],
|
||||
"icon": "fab-aws"
|
||||
"icon": "fab-aws",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "terraform",
|
||||
@@ -44,7 +47,8 @@
|
||||
"https://learn.hashicorp.com/terraform",
|
||||
"https://github.com/hashicorp/terraform"
|
||||
],
|
||||
"icon": "fas-tools"
|
||||
"icon": "fas-tools",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "jenkins",
|
||||
@@ -55,7 +59,8 @@
|
||||
"https://www.jenkins.io/doc/",
|
||||
"https://github.com/jenkinsci/jenkins"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "githubactions",
|
||||
@@ -66,14 +71,16 @@
|
||||
"https://docs.github.com/en/actions",
|
||||
"https://github.com/actions"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "ansible",
|
||||
"name": "Ansible",
|
||||
"description": "Outil d'automatisation IT et de gestion de configuration",
|
||||
"links": ["https://www.ansible.com/", "https://docs.ansible.com/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "gitlab-ci",
|
||||
@@ -83,21 +90,24 @@
|
||||
"https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/",
|
||||
"https://docs.gitlab.com/ee/ci/"
|
||||
],
|
||||
"icon": "fab-gitlab"
|
||||
"icon": "fab-gitlab",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "prometheus",
|
||||
"name": "Prometheus",
|
||||
"description": "Système de monitoring et d'alerting",
|
||||
"links": ["https://prometheus.io/", "https://prometheus.io/docs/"],
|
||||
"icon": "fas-chart-line"
|
||||
"icon": "fas-chart-line",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "grafana",
|
||||
"name": "Grafana",
|
||||
"description": "Plateforme de visualisation et monitoring",
|
||||
"links": ["https://grafana.com/", "https://grafana.com/docs/"],
|
||||
"icon": "fas-chart-line"
|
||||
"icon": "fas-chart-line",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "elk-stack",
|
||||
@@ -107,50 +117,56 @@
|
||||
"https://www.elastic.co/what-is/elk-stack",
|
||||
"https://www.elastic.co/guide/"
|
||||
],
|
||||
"icon": "fas-search"
|
||||
"icon": "fas-search",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "nginx",
|
||||
"name": "Nginx",
|
||||
"description": "Serveur web et proxy inverse",
|
||||
"links": ["https://nginx.org/", "https://nginx.org/en/docs/"],
|
||||
"icon": "fas-server"
|
||||
"icon": "fas-server",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "apache",
|
||||
"name": "Apache HTTP Server",
|
||||
"description": "Serveur web open source",
|
||||
"links": ["https://httpd.apache.org/", "https://httpd.apache.org/docs/"],
|
||||
"icon": "fas-server"
|
||||
"icon": "fas-server",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "traefik",
|
||||
"name": "Traefik",
|
||||
"description": "Proxy inverse moderne et load balancer",
|
||||
"links": ["https://traefik.io/", "https://doc.traefik.io/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "helm",
|
||||
"name": "Helm",
|
||||
"description": "Gestionnaire de packages pour Kubernetes",
|
||||
"links": ["https://helm.sh/", "https://helm.sh/docs/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "istio",
|
||||
"name": "Istio",
|
||||
"description": "Service mesh pour microservices",
|
||||
"links": ["https://istio.io/", "https://istio.io/latest/docs/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "consul",
|
||||
"name": "HashiCorp Consul",
|
||||
"description": "Service discovery et configuration",
|
||||
"links": ["https://www.consul.io/", "https://learn.hashicorp.com/consul"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "nomad",
|
||||
@@ -160,29 +176,32 @@
|
||||
"https://www.nomadproject.io/",
|
||||
"https://learn.hashicorp.com/nomad"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "kong",
|
||||
"name": "Kong",
|
||||
"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/"],
|
||||
"icon": "fas-door-open"
|
||||
"icon": "fas-door-open",
|
||||
"importance": "majeure"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "ceph",
|
||||
"name": "Ceph",
|
||||
"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/"],
|
||||
"icon": "fas-hdd"
|
||||
"icon": "fas-hdd",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "harbor",
|
||||
"name": "Harbor",
|
||||
"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/"],
|
||||
"icon": "fas-ship"
|
||||
"icon": "fas-ship",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "zabbix",
|
||||
@@ -192,7 +211,8 @@
|
||||
"https://www.zabbix.com/",
|
||||
"https://www.zabbix.com/documentation"
|
||||
],
|
||||
"icon": "fas-chart-line"
|
||||
"icon": "fas-chart-line",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "nutanix",
|
||||
@@ -202,14 +222,16 @@
|
||||
"https://www.nutanix.com/",
|
||||
"https://portal.nutanix.com/page/documents"
|
||||
],
|
||||
"icon": "fas-server"
|
||||
"icon": "fas-server",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "backstage",
|
||||
"name": "Backstage",
|
||||
"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/"],
|
||||
"icon": "fas-home"
|
||||
"icon": "fas-home",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "cohesity",
|
||||
@@ -219,22 +241,24 @@
|
||||
"https://www.cohesity.com/",
|
||||
"https://www.cohesity.com/support/"
|
||||
],
|
||||
"icon": "fas-database"
|
||||
"icon": "fas-database",
|
||||
"importance": "standard"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "sonar",
|
||||
"name": "Sonar",
|
||||
"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/"],
|
||||
"icon": "fas-search"
|
||||
"icon": "fas-search",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "git",
|
||||
"name": "Git",
|
||||
"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"],
|
||||
"icon": "fab-git"
|
||||
"icon": "fab-git",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "trivy",
|
||||
@@ -244,30 +268,32 @@
|
||||
"https://aquasecurity.github.io/trivy/",
|
||||
"https://aquasecurity.github.io/trivy/latest/docs/"
|
||||
],
|
||||
"icon": "fas-shield-alt"
|
||||
"icon": "fas-shield-alt",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "checkmarx",
|
||||
"name": "Checkmarx",
|
||||
"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/"],
|
||||
"icon": "fas-shield-alt"
|
||||
"icon": "fas-shield-alt",
|
||||
"importance": "standard"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "liquibase",
|
||||
"name": "Liquibase",
|
||||
"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/"],
|
||||
"icon": "fas-database"
|
||||
"icon": "fas-database",
|
||||
"importance": "standard"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "puppet",
|
||||
"name": "Puppet",
|
||||
"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/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "azure-devops",
|
||||
@@ -277,7 +303,8 @@
|
||||
"https://azure.microsoft.com/fr-fr/services/devops/server/",
|
||||
"https://docs.microsoft.com/azure/devops/"
|
||||
],
|
||||
"icon": "fab-microsoft"
|
||||
"icon": "fab-microsoft",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "nexus",
|
||||
@@ -287,7 +314,8 @@
|
||||
"https://www.sonatype.com/products/sonatype-nexus-repository",
|
||||
"https://help.sonatype.com/repomanager3/"
|
||||
],
|
||||
"icon": "fas-archive"
|
||||
"icon": "fas-archive",
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
"https://react.dev/",
|
||||
"https://react.dev/learn",
|
||||
"https://github.com/facebook/react"
|
||||
]
|
||||
],
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "vue",
|
||||
@@ -22,7 +23,8 @@
|
||||
"https://vuejs.org/",
|
||||
"https://vuejs.org/guide/",
|
||||
"https://github.com/vuejs/core"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "typescript",
|
||||
@@ -33,7 +35,8 @@
|
||||
"https://www.typescriptlang.org/",
|
||||
"https://www.typescriptlang.org/docs/",
|
||||
"https://github.com/microsoft/TypeScript"
|
||||
]
|
||||
],
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "nextjs",
|
||||
@@ -44,7 +47,8 @@
|
||||
"https://nextjs.org/",
|
||||
"https://nextjs.org/docs",
|
||||
"https://github.com/vercel/next.js"
|
||||
]
|
||||
],
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "tailwindcss",
|
||||
@@ -55,7 +59,8 @@
|
||||
"https://tailwindcss.com/",
|
||||
"https://tailwindcss.com/docs",
|
||||
"https://github.com/tailwindlabs/tailwindcss"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "webpack",
|
||||
@@ -66,78 +71,88 @@
|
||||
"https://webpack.js.org/",
|
||||
"https://webpack.js.org/concepts/",
|
||||
"https://github.com/webpack/webpack"
|
||||
]
|
||||
],
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "vite",
|
||||
"name": "Vite",
|
||||
"description": "Outil de build rapide pour applications modernes",
|
||||
"icon": "fas-bolt",
|
||||
"links": ["https://vitejs.dev/", "https://vitejs.dev/guide/"]
|
||||
"links": ["https://vitejs.dev/", "https://vitejs.dev/guide/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "svelte",
|
||||
"name": "Svelte",
|
||||
"description": "Framework de compilation pour interfaces utilisateur",
|
||||
"icon": "fas-code",
|
||||
"links": ["https://svelte.dev/", "https://svelte.dev/docs"]
|
||||
"links": ["https://svelte.dev/", "https://svelte.dev/docs"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "solidjs",
|
||||
"name": "SolidJS",
|
||||
"description": "Framework JavaScript réactif et performant",
|
||||
"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",
|
||||
"name": "Astro",
|
||||
"description": "Framework statique multi-framework",
|
||||
"icon": "fas-rocket",
|
||||
"links": ["https://astro.build/", "https://docs.astro.build/"]
|
||||
"links": ["https://astro.build/", "https://docs.astro.build/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "remix",
|
||||
"name": "Remix",
|
||||
"description": "Framework full-stack centré sur les standards web",
|
||||
"icon": "fas-sync",
|
||||
"links": ["https://remix.run/", "https://remix.run/docs"]
|
||||
"links": ["https://remix.run/", "https://remix.run/docs"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "storybook",
|
||||
"name": "Storybook",
|
||||
"description": "Outil de développement pour composants UI",
|
||||
"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",
|
||||
"name": "Playwright",
|
||||
"description": "Framework de tests pour applications web",
|
||||
"icon": "fas-flask",
|
||||
"links": ["https://playwright.dev/", "https://playwright.dev/docs/"]
|
||||
"links": ["https://playwright.dev/", "https://playwright.dev/docs/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "three-js",
|
||||
"name": "Three.js",
|
||||
"description": "Bibliothèque JavaScript pour 3D dans le navigateur",
|
||||
"icon": "fas-cube",
|
||||
"links": ["https://threejs.org/", "https://threejs.org/docs/"]
|
||||
"links": ["https://threejs.org/", "https://threejs.org/docs/"],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "d3",
|
||||
"name": "D3.js",
|
||||
"description": "Bibliothèque de visualisation de données",
|
||||
"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",
|
||||
"name": "GSAP",
|
||||
"description": "Bibliothèque d'animations web performantes",
|
||||
"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",
|
||||
@@ -147,7 +162,8 @@
|
||||
"links": [
|
||||
"https://developer.mozilla.org/en-US/docs/Web/Web_Components",
|
||||
"https://web.dev/web-components/"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "pwa",
|
||||
@@ -157,7 +173,8 @@
|
||||
"links": [
|
||||
"https://web.dev/progressive-web-apps/",
|
||||
"https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "reactjs",
|
||||
@@ -167,9 +184,9 @@
|
||||
"links": [
|
||||
"https://reactjs.org/",
|
||||
"https://reactjs.org/docs/getting-started.html"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
},
|
||||
|
||||
{
|
||||
"id": "html5-javascript-css",
|
||||
"name": "HTML5/JavaScript/CSS",
|
||||
@@ -178,7 +195,8 @@
|
||||
"links": [
|
||||
"https://developer.mozilla.org/fr/",
|
||||
"https://developer.mozilla.org/fr/docs/Web"
|
||||
]
|
||||
],
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
"https://reactnative.dev/docs/getting-started",
|
||||
"https://github.com/facebook/react-native"
|
||||
],
|
||||
"icon": "fab-react"
|
||||
"icon": "fab-react",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "flutter",
|
||||
@@ -22,7 +23,8 @@
|
||||
"https://docs.flutter.dev/",
|
||||
"https://github.com/flutter/flutter"
|
||||
],
|
||||
"icon": "fas-mobile"
|
||||
"icon": "fas-mobile",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "swift",
|
||||
@@ -33,7 +35,8 @@
|
||||
"https://docs.swift.org/swift-book/",
|
||||
"https://github.com/apple/swift"
|
||||
],
|
||||
"icon": "fab-swift"
|
||||
"icon": "fab-swift",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "kotlin",
|
||||
@@ -44,7 +47,8 @@
|
||||
"https://kotlinlang.org/docs/",
|
||||
"https://github.com/JetBrains/kotlin"
|
||||
],
|
||||
"icon": "fab-android"
|
||||
"icon": "fab-android",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "expo",
|
||||
@@ -55,7 +59,8 @@
|
||||
"https://docs.expo.dev/",
|
||||
"https://github.com/expo/expo"
|
||||
],
|
||||
"icon": "fab-react"
|
||||
"icon": "fab-react",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "ionic",
|
||||
@@ -65,7 +70,8 @@
|
||||
"https://ionicframework.com/",
|
||||
"https://ionicframework.com/docs"
|
||||
],
|
||||
"icon": "fas-mobile"
|
||||
"icon": "fas-mobile",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "xamarin",
|
||||
@@ -75,14 +81,19 @@
|
||||
"https://dotnet.microsoft.com/apps/xamarin",
|
||||
"https://docs.microsoft.com/xamarin/"
|
||||
],
|
||||
"icon": "fab-microsoft"
|
||||
"icon": "fab-microsoft",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "unity",
|
||||
"name": "Unity",
|
||||
"description": "Moteur de jeu pour applications mobiles",
|
||||
"links": ["https://unity.com/", "https://docs.unity3d.com/"],
|
||||
"icon": "fas-cube"
|
||||
"links": [
|
||||
"https://unity.com/",
|
||||
"https://docs.unity3d.com/"
|
||||
],
|
||||
"icon": "fas-cube",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "cordova",
|
||||
@@ -92,21 +103,30 @@
|
||||
"https://cordova.apache.org/",
|
||||
"https://cordova.apache.org/docs/"
|
||||
],
|
||||
"icon": "fas-mobile"
|
||||
"icon": "fas-mobile",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "capacitor",
|
||||
"name": "Capacitor",
|
||||
"description": "Runtime natif pour applications web",
|
||||
"links": ["https://capacitorjs.com/", "https://capacitorjs.com/docs"],
|
||||
"icon": "fas-cog"
|
||||
"links": [
|
||||
"https://capacitorjs.com/",
|
||||
"https://capacitorjs.com/docs"
|
||||
],
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "fastlane",
|
||||
"name": "Fastlane",
|
||||
"description": "Automatisation pour développement mobile",
|
||||
"links": ["https://fastlane.tools/", "https://docs.fastlane.tools/"],
|
||||
"icon": "fas-cog"
|
||||
"links": [
|
||||
"https://fastlane.tools/",
|
||||
"https://docs.fastlane.tools/"
|
||||
],
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "firebase",
|
||||
@@ -116,7 +136,8 @@
|
||||
"https://firebase.google.com/",
|
||||
"https://firebase.google.com/docs"
|
||||
],
|
||||
"icon": "fab-google"
|
||||
"icon": "fab-google",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "app-store-optimization",
|
||||
@@ -126,14 +147,19 @@
|
||||
"https://developer.apple.com/app-store/",
|
||||
"https://play.google.com/console/"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "mobile-testing",
|
||||
"name": "Tests Mobile",
|
||||
"description": "Frameworks de tests pour applications mobiles",
|
||||
"links": ["https://appium.io/", "https://detox.js.org/"],
|
||||
"icon": "fas-bug"
|
||||
"links": [
|
||||
"https://appium.io/",
|
||||
"https://detox.js.org/"
|
||||
],
|
||||
"icon": "fas-bug",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "mobile-performance",
|
||||
@@ -143,7 +169,8 @@
|
||||
"https://developers.google.com/web/tools/lighthouse",
|
||||
"https://developer.android.com/topic/performance"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "push-notifications",
|
||||
@@ -153,7 +180,8 @@
|
||||
"https://firebase.google.com/docs/cloud-messaging",
|
||||
"https://developer.apple.com/notifications/"
|
||||
],
|
||||
"icon": "fas-bell"
|
||||
"icon": "fas-bell",
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -7,14 +7,16 @@
|
||||
"name": "OAuth 2.0",
|
||||
"description": "Framework d'autorisation pour APIs",
|
||||
"links": ["https://oauth.net/2/", "https://tools.ietf.org/html/rfc6749"],
|
||||
"icon": "fas-key"
|
||||
"icon": "fas-key",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "jwt",
|
||||
"name": "JSON Web Tokens",
|
||||
"description": "Standard pour transmettre des informations de façon sécurisée",
|
||||
"links": ["https://jwt.io/", "https://tools.ietf.org/html/rfc7519"],
|
||||
"icon": "fas-shield"
|
||||
"icon": "fas-shield",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "https-ssl",
|
||||
@@ -24,14 +26,16 @@
|
||||
"https://developer.mozilla.org/en-US/docs/Web/Security",
|
||||
"https://letsencrypt.org/"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "owasp",
|
||||
"name": "OWASP",
|
||||
"description": "Bonnes pratiques de sécurité des applications web",
|
||||
"links": ["https://owasp.org/", "https://owasp.org/www-project-top-ten/"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"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_Scripting_Prevention_Cheat_Sheet.html"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "penetration-testing",
|
||||
@@ -51,7 +56,8 @@
|
||||
"https://owasp.org/www-community/Penetration_Testing_Methodologies",
|
||||
"https://www.kali.org/"
|
||||
],
|
||||
"icon": "fas-user-shield"
|
||||
"icon": "fas-user-shield",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "cryptography",
|
||||
@@ -61,14 +67,16 @@
|
||||
"https://cryptography.io/",
|
||||
"https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "auth0",
|
||||
"name": "Auth0",
|
||||
"description": "Plateforme d'authentification et d'autorisation",
|
||||
"links": ["https://auth0.com/", "https://auth0.com/docs"],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "keycloak",
|
||||
@@ -78,7 +86,8 @@
|
||||
"https://www.keycloak.org/",
|
||||
"https://www.keycloak.org/documentation"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "vault",
|
||||
@@ -88,7 +97,8 @@
|
||||
"https://www.vaultproject.io/",
|
||||
"https://learn.hashicorp.com/vault"
|
||||
],
|
||||
"icon": "fas-cog"
|
||||
"icon": "fas-cog",
|
||||
"importance": "incontournable"
|
||||
},
|
||||
{
|
||||
"id": "sentinelone",
|
||||
@@ -98,7 +108,8 @@
|
||||
"https://www.sentinelone.com/",
|
||||
"https://docs.sentinelone.com/"
|
||||
],
|
||||
"icon": "fas-shield-alt"
|
||||
"icon": "fas-shield-alt",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "forescout",
|
||||
@@ -108,7 +119,8 @@
|
||||
"https://www.forescout.com/",
|
||||
"https://www.forescout.com/support/"
|
||||
],
|
||||
"icon": "fas-network-wired"
|
||||
"icon": "fas-network-wired",
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -10,21 +10,24 @@
|
||||
"https://www.selenium.dev/",
|
||||
"https://www.selenium.dev/documentation/"
|
||||
],
|
||||
"icon": "fas-bug"
|
||||
"icon": "fas-bug",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "cypress",
|
||||
"name": "Cypress",
|
||||
"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/"],
|
||||
"icon": "fas-bug"
|
||||
"icon": "fas-bug",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "k6",
|
||||
"name": "K6",
|
||||
"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/"],
|
||||
"icon": "fas-tachometer-alt"
|
||||
"icon": "fas-tachometer-alt",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "jmeter",
|
||||
@@ -34,7 +37,8 @@
|
||||
"https://jmeter.apache.org/",
|
||||
"https://jmeter.apache.org/usermanual/"
|
||||
],
|
||||
"icon": "fas-chart-line"
|
||||
"icon": "fas-chart-line",
|
||||
"importance": "standard"
|
||||
},
|
||||
{
|
||||
"id": "robot-framework",
|
||||
@@ -44,7 +48,8 @@
|
||||
"https://robotframework.org/",
|
||||
"https://robotframework.org/robotframework/"
|
||||
],
|
||||
"icon": "fas-robot"
|
||||
"icon": "fas-robot",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "mutation-testing",
|
||||
@@ -54,7 +59,8 @@
|
||||
"https://en.wikipedia.org/wiki/Mutation_testing",
|
||||
"https://stryker-mutator.io/docs/mutation-testing-elements/what-is-mutation-testing"
|
||||
],
|
||||
"icon": "fas-dna"
|
||||
"icon": "fas-dna",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "stryker",
|
||||
@@ -64,14 +70,16 @@
|
||||
"https://stryker-mutator.io/",
|
||||
"https://stryker-mutator.io/docs/"
|
||||
],
|
||||
"icon": "fas-bug"
|
||||
"icon": "fas-bug",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "pitest",
|
||||
"name": "Pitest",
|
||||
"description": "Framework de tests de mutation pour Java et JVM",
|
||||
"links": ["https://pitest.org/", "https://pitest.org/quickstart/"],
|
||||
"icon": "fab-java"
|
||||
"icon": "fab-java",
|
||||
"importance": "majeure"
|
||||
},
|
||||
{
|
||||
"id": "pytest-mutmut",
|
||||
@@ -81,7 +89,8 @@
|
||||
"https://github.com/boxed/mutmut",
|
||||
"https://mutmut.readthedocs.io/"
|
||||
],
|
||||
"icon": "fab-python"
|
||||
"icon": "fab-python",
|
||||
"importance": "standard"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -85,6 +85,7 @@ async function syncSkillsToDatabase(): Promise<void> {
|
||||
const needsUpdate = existingSkill
|
||||
? existingSkill.description !== skillFromFile.description ||
|
||||
existingSkill.icon !== skillFromFile.icon ||
|
||||
existingSkill.importance !== skillFromFile.importance ||
|
||||
JSON.stringify(existingSkill.links?.sort()) !==
|
||||
JSON.stringify(skillFromFile.links?.sort())
|
||||
: true;
|
||||
|
||||
@@ -63,6 +63,7 @@ export class SkillsService {
|
||||
s.name,
|
||||
s.description,
|
||||
s.icon,
|
||||
s.importance,
|
||||
COALESCE(
|
||||
json_agg(sl.url ORDER BY sl.id) FILTER (WHERE sl.url IS NOT NULL),
|
||||
'[]'::json
|
||||
@@ -70,7 +71,7 @@ export class SkillsService {
|
||||
FROM skills s
|
||||
LEFT JOIN skill_links sl ON s.id = sl.skill_id
|
||||
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
|
||||
`;
|
||||
|
||||
@@ -81,6 +82,7 @@ export class SkillsService {
|
||||
name: row.name,
|
||||
description: row.description,
|
||||
icon: row.icon,
|
||||
importance: row.importance,
|
||||
links: row.links,
|
||||
}));
|
||||
} catch (error) {
|
||||
@@ -121,6 +123,7 @@ export class SkillsService {
|
||||
icon?: string;
|
||||
categoryId: string;
|
||||
links: string[];
|
||||
importance?: string;
|
||||
}): Promise<void> {
|
||||
const pool = getPool();
|
||||
const client = await pool.connect();
|
||||
@@ -130,8 +133,8 @@ export class SkillsService {
|
||||
|
||||
// Insert skill
|
||||
const skillQuery = `
|
||||
INSERT INTO skills (id, name, description, icon, category_id)
|
||||
VALUES ($1, $2, $3, $4, $5)
|
||||
INSERT INTO skills (id, name, description, icon, category_id, importance)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)
|
||||
`;
|
||||
await client.query(skillQuery, [
|
||||
skill.id,
|
||||
@@ -139,6 +142,7 @@ export class SkillsService {
|
||||
skill.description,
|
||||
skill.icon,
|
||||
skill.categoryId,
|
||||
skill.importance || "standard",
|
||||
]);
|
||||
|
||||
// Insert links
|
||||
@@ -194,13 +198,14 @@ export class SkillsService {
|
||||
// Insert skills
|
||||
for (const skill of categoryData.skills) {
|
||||
const skillQuery = `
|
||||
INSERT INTO skills (id, name, description, icon, category_id)
|
||||
VALUES ($1, $2, $3, $4, $5)
|
||||
INSERT INTO skills (id, name, description, icon, category_id, importance)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)
|
||||
ON CONFLICT (id) DO UPDATE SET
|
||||
name = EXCLUDED.name,
|
||||
description = EXCLUDED.description,
|
||||
icon = EXCLUDED.icon,
|
||||
category_id = EXCLUDED.category_id
|
||||
category_id = EXCLUDED.category_id,
|
||||
importance = EXCLUDED.importance
|
||||
`;
|
||||
await client.query(skillQuery, [
|
||||
skill.id,
|
||||
@@ -208,6 +213,7 @@ export class SkillsService {
|
||||
skill.description,
|
||||
skill.icon,
|
||||
categoryId,
|
||||
skill.importance || "standard",
|
||||
]);
|
||||
|
||||
// Delete existing links
|
||||
@@ -324,6 +330,7 @@ export class SkillsService {
|
||||
categoryId: string;
|
||||
description?: string;
|
||||
icon?: string;
|
||||
importance?: string;
|
||||
}): Promise<{
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -332,6 +339,7 @@ export class SkillsService {
|
||||
categoryId: string;
|
||||
category: string;
|
||||
usageCount: number;
|
||||
importance: string;
|
||||
}> {
|
||||
const pool = getPool();
|
||||
const client = await pool.connect();
|
||||
@@ -351,10 +359,16 @@ export class SkillsService {
|
||||
|
||||
// Créer la nouvelle skill
|
||||
const result = await client.query(
|
||||
`INSERT INTO skills (id, name, category_id, description, icon)
|
||||
VALUES (gen_random_uuid(), $1, $2, $3, $4)
|
||||
RETURNING id, name, description, icon, category_id`,
|
||||
[data.name, data.categoryId, data.description || "", data.icon || ""]
|
||||
`INSERT INTO skills (id, name, category_id, description, icon, importance)
|
||||
VALUES (gen_random_uuid(), $1, $2, $3, $4, $5)
|
||||
RETURNING id, name, description, icon, category_id, importance`,
|
||||
[
|
||||
data.name,
|
||||
data.categoryId,
|
||||
data.description || "",
|
||||
data.icon || "",
|
||||
data.importance || "standard",
|
||||
]
|
||||
);
|
||||
|
||||
const newSkill = result.rows[0];
|
||||
@@ -375,6 +389,7 @@ export class SkillsService {
|
||||
categoryId: newSkill.category_id,
|
||||
category: categoryResult.rows[0]?.name || "Inconnue",
|
||||
usageCount: 0,
|
||||
importance: newSkill.importance,
|
||||
};
|
||||
} catch (error) {
|
||||
await client.query("ROLLBACK");
|
||||
@@ -393,6 +408,7 @@ export class SkillsService {
|
||||
categoryId: string;
|
||||
description?: string;
|
||||
icon?: string;
|
||||
importance?: string;
|
||||
}): Promise<{
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -400,6 +416,7 @@ export class SkillsService {
|
||||
icon: string;
|
||||
categoryId: string;
|
||||
category: string;
|
||||
importance: string;
|
||||
}> {
|
||||
const pool = getPool();
|
||||
const client = await pool.connect();
|
||||
@@ -430,20 +447,21 @@ export class SkillsService {
|
||||
// Mettre à jour la skill
|
||||
await client.query(
|
||||
`UPDATE skills
|
||||
SET name = $1, category_id = $2, description = $3, icon = $4
|
||||
WHERE id = $5`,
|
||||
SET name = $1, category_id = $2, description = $3, icon = $4, importance = $5
|
||||
WHERE id = $6`,
|
||||
[
|
||||
data.name,
|
||||
data.categoryId,
|
||||
data.description || "",
|
||||
data.icon || "",
|
||||
data.importance || "standard",
|
||||
data.id,
|
||||
]
|
||||
);
|
||||
|
||||
// Récupérer la skill mise à jour
|
||||
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
|
||||
LEFT JOIN skill_categories sc ON s.category_id = sc.id
|
||||
WHERE s.id = $1`,
|
||||
@@ -460,6 +478,7 @@ export class SkillsService {
|
||||
icon: skill.icon,
|
||||
categoryId: skill.category_id,
|
||||
category: skill.category_name,
|
||||
importance: skill.importance,
|
||||
};
|
||||
} catch (error) {
|
||||
await client.query("ROLLBACK");
|
||||
@@ -503,4 +522,4 @@ export class SkillsService {
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user