fix: English headings, remove scroll-gated animations, reduce padding, drop mtg-builder
This commit is contained in:
@@ -214,15 +214,6 @@ export async function initDB() {
|
||||
"Tailwind CSS",
|
||||
"WebAssembly"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "mtg-builder",
|
||||
"description": "CLI Magic: The Gathering (Commander/EDH) deck-builder and collection manager using the Scryfall API, with exponential backoff retry logic.",
|
||||
"url": "https://git.tudattr.dev/tudattr/mtg-builder",
|
||||
"tech": [
|
||||
"Rust"
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
@@ -7,25 +7,20 @@ export default function Education() {
|
||||
const { education } = data;
|
||||
|
||||
return (
|
||||
<section id="education" className="py-20 px-6">
|
||||
<section id="education" className="py-12 px-6">
|
||||
<div className="max-w-4xl mx-auto">
|
||||
<motion.h2
|
||||
<motion.h2
|
||||
initial={{ opacity: 0 }}
|
||||
whileInView={{ opacity: 1 }}
|
||||
viewport={{ once: true }}
|
||||
animate={{ opacity: 1 }}
|
||||
className="text-3xl font-bold text-slate-900 mb-12 text-center"
|
||||
>
|
||||
Ausbildung
|
||||
Education
|
||||
</motion.h2>
|
||||
|
||||
|
||||
<div className="grid md:grid-cols-2 gap-6">
|
||||
{education.map((edu, index) => (
|
||||
<motion.div
|
||||
<div
|
||||
key={edu.id}
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: index * 0.2 }}
|
||||
className="bg-white rounded-xl p-6 shadow-sm border border-slate-100"
|
||||
>
|
||||
<div className="flex items-start gap-4">
|
||||
@@ -44,7 +39,7 @@ export default function Education() {
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -7,25 +7,20 @@ export default function Experience() {
|
||||
const { experience } = data;
|
||||
|
||||
return (
|
||||
<section id="experience" className="py-20 px-6">
|
||||
<section id="experience" className="py-12 px-6">
|
||||
<div className="max-w-4xl mx-auto">
|
||||
<motion.h2
|
||||
<motion.h2
|
||||
initial={{ opacity: 0 }}
|
||||
whileInView={{ opacity: 1 }}
|
||||
viewport={{ once: true }}
|
||||
animate={{ opacity: 1 }}
|
||||
className="text-3xl font-bold text-slate-900 mb-12 text-center"
|
||||
>
|
||||
Berufserfahrung
|
||||
Experience
|
||||
</motion.h2>
|
||||
|
||||
|
||||
<div className="relative">
|
||||
{experience.map((exp, index) => (
|
||||
<motion.div
|
||||
<div
|
||||
key={exp.id}
|
||||
initial={{ opacity: 0, x: -20 }}
|
||||
whileInView={{ opacity: 1, x: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: index * 0.2 }}
|
||||
className="relative pl-8 pb-12 last:pb-0"
|
||||
>
|
||||
<div className="absolute left-0 top-2 w-4 h-4 rounded-full bg-primary-500 border-4 border-primary-100" />
|
||||
@@ -63,7 +58,7 @@ export default function Experience() {
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</motion.div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -7,7 +7,7 @@ export default function Hero() {
|
||||
const { personal } = data;
|
||||
|
||||
return (
|
||||
<section className="min-h-screen flex items-center justify-center px-6 py-20">
|
||||
<section className="flex items-center justify-center px-6 py-16">
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
|
||||
@@ -7,17 +7,16 @@ export default function Projects() {
|
||||
const { projects } = data;
|
||||
|
||||
return (
|
||||
<section id="projects" className="py-20 px-6 bg-white">
|
||||
<section id="projects" className="py-12 px-6 bg-white">
|
||||
<div className="max-w-4xl mx-auto">
|
||||
<motion.h2
|
||||
<motion.h2
|
||||
initial={{ opacity: 0 }}
|
||||
whileInView={{ opacity: 1 }}
|
||||
viewport={{ once: true }}
|
||||
animate={{ opacity: 1 }}
|
||||
className="text-3xl font-bold text-slate-900 mb-12 text-center"
|
||||
>
|
||||
Projekte
|
||||
Projects
|
||||
</motion.h2>
|
||||
|
||||
|
||||
<div className="grid md:grid-cols-2 gap-6">
|
||||
{projects.map((project, index) => (
|
||||
<motion.a
|
||||
@@ -25,10 +24,6 @@ export default function Projects() {
|
||||
href={project.url}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: index * 0.2 }}
|
||||
whileHover={{ y: -4 }}
|
||||
className="group bg-slate-50 rounded-xl p-6 border border-slate-100 hover:border-primary-200 hover:shadow-md transition-all"
|
||||
>
|
||||
|
||||
@@ -5,17 +5,22 @@ const skillIcons = {
|
||||
"Docker": "🐳",
|
||||
"Kubernetes": "☸️",
|
||||
"Helm": "⛵",
|
||||
"Jenkins": "🔧",
|
||||
"Bitbucket": "📘",
|
||||
"ArgoCD": "🔄",
|
||||
"Jenkins": "🔧",
|
||||
"Bitbucket Pipelines": "📘",
|
||||
"Git": "📝",
|
||||
"Azure": "☁️",
|
||||
"Azure Resource Manager": "🏗️",
|
||||
"Release Engineering": "🚀",
|
||||
"Linux Administration": "🐧",
|
||||
"Azure AKS": "☁️",
|
||||
"Ansible": "⚙️",
|
||||
"ELK Stack": "📊",
|
||||
"PostgreSQL": "🐘",
|
||||
"MongoDB": "🍃",
|
||||
"Rust": "🦀",
|
||||
"Python": "🐍",
|
||||
"Bash": "💻",
|
||||
"Rust": "🦀"
|
||||
"P4": "🔬",
|
||||
"Intel Tofino": "🔬",
|
||||
"Linux Administration": "🐧",
|
||||
};
|
||||
|
||||
export default function Skills() {
|
||||
@@ -23,25 +28,20 @@ export default function Skills() {
|
||||
const { skills } = data;
|
||||
|
||||
return (
|
||||
<section id="skills" className="py-20 px-6 bg-white">
|
||||
<section id="skills" className="py-12 px-6 bg-white">
|
||||
<div className="max-w-4xl mx-auto">
|
||||
<motion.h2
|
||||
<motion.h2
|
||||
initial={{ opacity: 0 }}
|
||||
whileInView={{ opacity: 1 }}
|
||||
viewport={{ once: true }}
|
||||
animate={{ opacity: 1 }}
|
||||
className="text-3xl font-bold text-slate-900 mb-12 text-center"
|
||||
>
|
||||
Skills
|
||||
</motion.h2>
|
||||
|
||||
|
||||
<div className="grid md:grid-cols-2 gap-8">
|
||||
{Object.entries(skills).map(([category, items], catIndex) => (
|
||||
<motion.div
|
||||
<div
|
||||
key={category}
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: catIndex * 0.1 }}
|
||||
className="bg-slate-50 rounded-xl p-6"
|
||||
>
|
||||
<h3 className="text-lg font-semibold text-primary-600 mb-4">
|
||||
@@ -51,10 +51,6 @@ export default function Skills() {
|
||||
{items.map((skill, i) => (
|
||||
<motion.span
|
||||
key={skill}
|
||||
initial={{ opacity: 0, scale: 0.8 }}
|
||||
whileInView={{ opacity: 1, scale: 1 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ delay: i * 0.05 }}
|
||||
whileHover={{ scale: 1.05 }}
|
||||
className="px-3 py-1.5 bg-white rounded-lg text-sm text-slate-700 shadow-sm border border-slate-100 flex items-center gap-1.5 cursor-default"
|
||||
>
|
||||
@@ -63,7 +59,7 @@ export default function Skills() {
|
||||
</motion.span>
|
||||
))}
|
||||
</div>
|
||||
</motion.div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -189,15 +189,6 @@
|
||||
"Tailwind CSS",
|
||||
"WebAssembly"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "mtg-builder",
|
||||
"description": "CLI Magic: The Gathering (Commander/EDH) deck-builder and collection manager using the Scryfall API, with exponential backoff retry logic.",
|
||||
"url": "https://git.tudattr.dev/tudattr/mtg-builder",
|
||||
"tech": [
|
||||
"Rust"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user