This commit is contained in:
matthieu42morin 2024-04-28 13:52:38 +02:00
parent e1c965efb4
commit e2794dae17
3 changed files with 227 additions and 0 deletions

View File

@ -0,0 +1,56 @@
<script lang="ts">
import type { Skill } from '$lib/config/skills';
import list from '$lib/config/skills';
function sortSkills(skills: Skill[]): Skill[] {
return skills.sort((a, b) => {
if (a.level < b.level) return -1;
if (a.level > b.level) return 1;
return 0;
});
}
</script>
{#each list as category}
<div class="collapse collapse-arrow outline-1 outline-secondary">
<input type="radio" name="skillAccordion" />
<div class=" flex flex-row collapse-title font-semibold space-x-4">
<i class="text-2xl">{category.icon}</i>
<h2 class="text-2xl">{category.title}</h2>
<!-- Progresses are stupidly subjective and I don't know how to grade this so no progress bars for now.
<ProgressBar class="min-w-[100px] h-2" value={category.level} max={100} /> -->
</div>
<div class="collapse-content">
<div class="flex flex-col justify-center m-2 space-y-8">
{#if category.subCategories}
{#each category.subCategories as subCategory (subCategory.title)}
<div class="flex flex-col space-y-2">
<div class="flex flex-row justify-center items-center">
<p class="text-xl font-medium m-2">{subCategory.title}</p>
<!-- <ProgressBar value={subCategory.level} max={100} /> -->
</div>
<div class="flex flex-wrap justify-center space-x-2 m-2">
{#if subCategory.skills}
{#each sortSkills(subCategory.skills) as skill (skill.title)}
<span
class="mt-2 badge {skill.level === 'A'
? 'badge-primary'
: skill.level === 'B'
? 'badge-accent'
: 'badge-primary badge-ghost'}"
>
{skill.title}
</span>
{/each}
{/if}
</div>
</div>
{/each}
{/if}
</div>
</div>
</div>
{/each}

View File

@ -0,0 +1,25 @@
<script lang="ts">
import IndividualSkills from './IndividualSkills.svelte';
</script>
<section
class="card flex flex-col items-center justify-center mx-auto w-full bg-base-300 p-8 m-8 space-y-4"
id="skills"
>
<h2 class="text-4xl m-2">My skillset</h2>
<p class="text-center">
Below is a list of tools, frameworks, languages and skills <br />I use or have used to
varying degrees and a subjective rating
</p>
<span class="h6 m-2">based on my proficiency:</span>
<div class="flex flex-wrap justify-center space-x-2 m-2">
<span class="badge badge-primary badge-lg">Proficient</span>
<span class="badge badge-accent badge-lg">Experienced</span>
<span class="badge-ghost badge-lg">Limited Experience</span>
</div>
<div class="flex flex-col items-center justify-center mx-auto space-x-2 space-y-2">
<IndividualSkills />
</div>
</section>

146
src/lib/config/skills.ts Normal file
View File

@ -0,0 +1,146 @@
export type Level = 'A' | 'B' | 'C' // A: Proficient, B: Experienced, C: limited Experience
export interface Skill {
title: string
level: Level
}
export interface SubCategory {
title: string
level: number
skills: Skill[]
}
export interface Category {
icon: string
title: string
level: number
subCategories: SubCategory[]
}
// prettier-ignore
const list: Category[] = [
{ icon: '🚀', title:'Software Development', level: 70, subCategories: [
{ title:'Programming Languages', level: 75, skills: [
{ title: 'JavaScript/TypeScript', level: 'A' },
{ title: 'Python', level: 'B' },
{ title: 'Bash', level: 'B' },
{ title: 'SQL', level: 'B' },
{ title: 'Rust', level: 'C' },
]},
{ title:'Web Frameworks', level: 70, skills: [
{ title: 'Svelte(Kit)', level: 'A' },
{ title: 'React', level: 'C'},
]},
{ title:'Configuration and Performance', level: 70, skills: [
{ title: 'SEO', level: 'B'},
{ title: 'Performance', level: 'B'},
{ title: 'Obfuscation', level: 'B'},
]},
{ title:'Databases', level: 70, skills: [
{ title: 'PostgreSQL', level: 'A' },
{ title: 'MariaDB', level: 'B' },
{ title: 'MongoDB', level: 'C' }
]},
{ title:'Testing & Validation', level: 50, skills: [
{ title: 'ajv', level: 'A' },
{ title: 'Playwright', level: 'B'},
{ title: 'SEO, performance optimizations', level: 'B'},
]},
]},
{ icon: '🔁🔁', title:'DevOps', level: 70, subCategories: [
{ title:'Infrastructure & Configuration Management', level: 80, skills: [
{ title: 'Terraform & tooling', level: 'A'},
{ title: 'Ansible', level: 'A'},
{ title: 'Docker, Docker-Compose', level: 'A' },
{ title: 'Kubernetes', level: 'C'},
]},
{ title: 'Version Control & CI/CD', level: 90, skills: [
{ title: 'Git', level: 'A' },
{ title: 'GitHub & Gitea Ecosystem', level: 'A' },
{ title: 'Gitlab Ecosystem', level: 'B' }
]},
{ title: 'Monitoring & Observability ', level: 90, skills: [
{ title: 'Grafana', level: 'B' },
{ title: 'Prometheus', level: 'B' },
]},
]},
{ icon: '⛅', title:'Cloud Computing', level: 70, subCategories: [
{ title:'AWS', level: 80, skills: [
{ title: 'EC2', level: 'A' },
{ title: 'RDS', level: 'A'},
{ title: 'S3', level: 'A'},
{ title: 'CloudFormation', level: 'C'},
]},
{ title: 'Azure (C)', skills: [
{ title: 'Azure OpenAI API', level: 'B' },
{ title: 'AKS', level: 'B' }
]},
{ title: 'Hashicorp', skills: [
{ title: 'Vault', level: 'B' },
{ title: 'Consul', level: 'C' },
]},
{ title:'Vercel', level: 100, skills: []},
{ title:'DigitalOcean', level: 100, skills: []},
]},
{ icon: '💻⚙️', title:'System Administration', level: 75, subCategories: [
{ title:'Operating Systems', level: 80, skills: [
{ title: 'Debian / Ubuntu', level: 'A' },
{ title: 'Nix(OS)', level: 'B' },
{ title: 'Arch Linux', level: 'B' },
{ title: 'Alpine', level: 'B' },
{ title: 'MicroSuck Winbloats', level: 'B' },
]},
{ title: 'Version Control & CI/CD', level: 90, skills: [
{ title: 'Git', level: 'A' },
{ title: 'GitHub & Gitea Ecosystem', level: 'A' },
{ title: 'Gitlab Ecosystem', level: 'B' }
]},
{ title: 'Monitoring & Observability ', level: 90, skills: [
{ title: 'Grafana', level: 'B' },
{ title: 'Prometheus', level: 'B' },
]},
{ title: 'Secrets Man. & Cryptography', level: 70, skills: [
{ title: 'Hashicorp Vault', level: 'A' },
{ title: 'Sops', level: 'B' },
{ title: 'AWS Secrets Manager', level: 'B' },
]}
]},
{ icon: '🔧', title:"Some fun geek skillz", level: 70, subCategories: [
{ title:'mini hardware', level: 80, skills: [
{ title: 'Raspberry Pi', level: 'A' },
{ title: 'ESP8266, ESP32', level: 'A' },
{ title: 'Arduino', level: 'A' },
{ title: 'MQTT', level: 'B' },
{ title: 'Wifi & BLE', level: 'B' }
]},
{ title: '3D printing', level: 90, skills: [
{ title: 'knowledge, theory', level: 'A' },
{ title: 'materials - PLA, PETG', level: 'A' },
{ title: 'Autodesk Inventor', level: 'B' },
{ title: 'OctoPrint and Klipper', level: 'B' },
{ title: 'Ultimaker Cura', level: 'B' },
]},
]},
{ icon: '💬', title:'Languages', level: 70, subCategories: [
{ title: 'English', level: 'A' },
{ title: 'Czech', level: 'A' },
{ title: 'French', level: 'B' },
{ title: 'German', level: 'C' }
]},
{ icon: '🎨', title:'Design', level: 70, subCategories: [
{ title: 'UI/UX', level: 'B' },
{ title: 'LaTeX', level: 'C' },
{ title: 'Wireframing, Prototyping, Diagramming', level: 'B', skills: [
{ title: 'Figma', level: 'A' },
{ title: 'Devops diagram tool - '}
] },
{ title: 'Images, Diagrams, Vectors', level: 'B', skills: [
//only foss
{ title: 'Inkscape', level: 'A' },
{ title: 'Gimp', level: 'A' },
{ title: 'Blender', level: 'B'},
{ title: 'Adobe PS, AI, InDesign'}
]},
]}
];
export default list