+ {title}
+ {#if (subtitle)}
+ {subtitle}
+ {/if}
+
+ {#each entries as entry, i (i)}
+
+ {/each}
+
+
+
+
\ No newline at end of file
diff --git a/src/lib/data/data.json b/src/lib/data/data.json
index 82baeea..fc39a80 100644
--- a/src/lib/data/data.json
+++ b/src/lib/data/data.json
@@ -35,7 +35,7 @@
"projects": {
"title": "Projekte",
"anchorId": "projects",
- "subtitle": "Aktuelle und Vergangenne Projekte and denen ich erfolgreich mitgewirkt habe",
+ "subtitle": "Projekte and denen ich erfolgreich mitgewirkt habe",
"entries": [
{
"title": "Custom Frontend für GPT-Anwendung mit Dokumentenverwaltung",
@@ -114,5 +114,75 @@
]
}
]
+ },
+ "skills": {
+ "title": "Skills & Tools",
+ "anchorId": "skills",
+ "subtitle": "Meine Fähigkeiten und Werkzeuge zur Lösung individueller Probleme",
+ "entries": [
+ {
+ "title": "Programmiersprachen",
+ "icon": "language",
+ "items": ["Java", "JavaScript", "TypeScript", "Visual Basic", "C#", "SQL", "HTML", "CSS"]
+ },
+ {
+ "title": "Frameworks",
+ "icon": "language",
+ "items": [
+ "Spring Boot",
+ "NodeJs",
+ "React",
+ "Angular",
+ "Svelte",
+ "WPF .Net",
+ "Sap Commerce Cloud"
+ ]
+ },
+ {
+ "title": "Meta-Frameworks",
+ "icon": "language",
+ "items": ["Next.JS", "SvelteKit", "Express", "Fastify", "Sap Composable Storefront"]
+ },
+ {
+ "title": "Datenbanken",
+ "icon": "language",
+ "items": ["PostgreSQL", "MariaDB", "MySQL", "SQLite", "MongoDB", "Oracle", "MS SQL"]
+ },
+ {
+ "title": "CMS",
+ "icon": "language",
+ "items": ["Contentful", "Strapi", "Smartedit"]
+ },
+ {
+ "title": "Testing",
+ "icon": "language",
+ "items": ["JUnit", "Playwright", "Cypres"]
+ },
+ {
+ "title": "Sicherheitslösungen",
+ "icon": "language",
+ "items": ["Keycloak", "JWT", "OAuth2"]
+ },
+ {
+ "title": "Entwicklungs Tools",
+ "icon": "language",
+ "items": ["Git", "Podman", "Docker", "WSL", "IntelliJ Idea", "Figma"]
+ },
+ {
+ "title": "Restful APIs und Dokumentation",
+ "icon": "language",
+ "items": ["OpenAPI", "Swagger", "Confluence"]
+ },
+ {
+ "title": "Methoden",
+ "icon": "language",
+ "items": ["Scrum", "Kanban", "Jira"]
+ },
+ {
+ "title": "Sonstiges",
+ "icon": "language",
+ "items": ["SEO", "Accessibility", "KI-basierte Tools"]
+ }
+ ]
}
}
diff --git a/src/lib/styles/app.css b/src/lib/styles/app.css
index ceea3de..b9e498f 100644
--- a/src/lib/styles/app.css
+++ b/src/lib/styles/app.css
@@ -31,7 +31,21 @@
--color-project-card-front-background-secondary: oklch(0.373 0.034 259.733);
--color-project-card-back-background-primary: oklch(0.379 0.146 265.522);
--color-project-card-back-background-secondary: oklch(0.359 0.144 278.697);
- --color-project-card-box-shadow: 0 0 0 0 rgba(0,0,0,0), oklab(0.623 -0.0378409 -0.210628 / 0.5) 0 25px 50px -12px;
+
+ --color-skill-card-background: oklab(0.278 -0.00750867 -0.0321344 / 0.6);
+ --color-skill-card-border: oklab(0.373 -0.00606001 -0.0334556 / 0.5);
+ --color-skill-card-header-border: oklab(0.379 -0.0113992 -0.145554 / 0.3);
+ --color-skill-card-item-background: oklab(0.21 -0.00316128 -0.0338527 / 0.5);
+ --color-skill-card-item-hover-background: oklab(0.623 -0.0378409 -0.210628 / 0.1);
+ --color-skill-card-item-border: oklab(0.373 -0.00606001 -0.0334556 / 0.5);
+ --color-skill-card-item-hover-border: oklab(0.707 -0.0437502 -0.159094 / 0.5);
+ --color-skill-card-header-background-image: linear-gradient(
+ to right bottom,
+ oklab(0.623 -0.0378409 -0.210628 / 0.8) 0%,
+ oklch(0.511 0.262 276.966) 100%
+ );
+
+ --color-card-box-shadow: 0 0 0 0 rgba(0, 0, 0, 0), oklab(0.623 -0.0378409 -0.210628 / 0.5) 0 25px 50px -12px;
--z-index-header: 50;
}
@@ -54,6 +68,7 @@ html, body {
}
.icon {
+ display: block;
width: 1em;
height: 1em;
}
\ No newline at end of file
diff --git a/src/lib/types/data.ts b/src/lib/types/data.ts
index f923f9f..ce97537 100644
--- a/src/lib/types/data.ts
+++ b/src/lib/types/data.ts
@@ -1,8 +1,11 @@
+import type { icons } from '@lucide/svelte';
+
export type Data = {
header: Header;
footer: Footer;
profile: Profile;
projects: Projects;
+ skills: Skills;
};
export type Header = {
@@ -30,7 +33,7 @@ export type Profile = {
title: string;
anchorId: string;
text: string;
-}
+};
export type Projects = {
title: string;
@@ -46,4 +49,19 @@ export type ProjectEntry = {
tasks: string;
toolsHeadline: string;
tools: string[];
-}
\ No newline at end of file
+};
+
+export type Skills = {
+ title: string;
+ subtitle: string;
+ anchorId: string;
+ entries: SkillEntry[];
+};
+
+export type SkillEntry = {
+ title: string;
+ icon: LucideIconName;
+ items: string[];
+};
+
+export type LucideIconName = keyof typeof icons;
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 276a195..8f1adce 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -3,9 +3,11 @@
import type { Data } from '$lib/types/data';
import Profile from '$lib/components/Profile.svelte';
import Projects from '$lib/components/Projects.svelte';
+ import Skills from '$lib/components/Skills.svelte';
let data: Data = content;