diff --git a/src/lib/components/ProjectEntry.svelte b/src/lib/components/ProjectEntry.svelte index 4be4138..a5045de 100644 --- a/src/lib/components/ProjectEntry.svelte +++ b/src/lib/components/ProjectEntry.svelte @@ -70,7 +70,7 @@ transition: box-shadow ease-in-out 0.1s, transform ease-in-out 0.3s 0.5s; transform: translateY(-0.5rem); - box-shadow: var(--color-project-card-box-shadow); + box-shadow: var(--color-card-box-shadow); } } diff --git a/src/lib/components/SkillEntry.svelte b/src/lib/components/SkillEntry.svelte new file mode 100644 index 0000000..c30c3fe --- /dev/null +++ b/src/lib/components/SkillEntry.svelte @@ -0,0 +1,154 @@ + + +
+
+
+ + + +
+
+ {title} + {subtitle} +
+
+ +
+ + \ No newline at end of file diff --git a/src/lib/components/Skills.svelte b/src/lib/components/Skills.svelte new file mode 100644 index 0000000..8b43ade --- /dev/null +++ b/src/lib/components/Skills.svelte @@ -0,0 +1,80 @@ + + +
+

{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; - \ No newline at end of file + + \ No newline at end of file