feat: add sync-profile script to populate default CV from persons repo
This commit is contained in:
@@ -24,157 +24,209 @@ export async function initDB() {
|
|||||||
await db('cv_data').insert({
|
await db('cv_data').insert({
|
||||||
id: 1,
|
id: 1,
|
||||||
data: JSON.stringify({
|
data: JSON.stringify({
|
||||||
personal: {
|
"personal": {
|
||||||
name: "Tuan-Dat Tran",
|
"name": "Tuan-Dat Tran",
|
||||||
title: "DevOps Engineer",
|
"title": "Junior DevOps Engineer",
|
||||||
intro: "DevOps Engineer and Homelab Enthusiast based in Essen, Germany. Primary owner of a production aviation SaaS platform on Azure AKS, with a research background in P4 programmable networks and a co-authored IEEE publication.",
|
"intro": "DevOps Engineer and Homelab Enthusiast based in Essen, Germany. Primary owner of a production aviation SaaS platform on Azure AKS, with a research background in P4 programmable networks and a co-authored IEEE publication.",
|
||||||
email: "tuan-dat.tran@dextradata.com",
|
"email": "tuan-dat.tran@dextradata.com",
|
||||||
github: "https://github.com/TuDatTr",
|
"github": "https://github.com/TuDatTr",
|
||||||
linkedin: "https://www.linkedin.com/in/tudattr/",
|
"linkedin": "https://www.linkedin.com/in/tudattr/",
|
||||||
location: "Essen, Germany"
|
"location": "Essen, Germany"
|
||||||
},
|
},
|
||||||
experience: [
|
"experience": [
|
||||||
{
|
{
|
||||||
id: 1,
|
"id": 1,
|
||||||
role: "DevOps Engineer",
|
"role": "Junior DevOps Engineer",
|
||||||
company: "DextraData GmbH",
|
"company": "DextraData GRC Technologies GmbH",
|
||||||
period: "2025 – present",
|
"period": "2025 – present",
|
||||||
type: "Full-time",
|
"type": "Full-time",
|
||||||
description: "Primary owner of the Logipad aviation SaaS platform and secondary owner of the GRASP GRC platform, both running on Azure AKS and Rancher-managed Kubernetes clusters.",
|
"description": "Primary owner of the GRASP GRC platform and Logipad aviation SaaS platform, running on Azure AKS and Rancher-managed Kubernetes clusters.",
|
||||||
highlights: [
|
"highlights": [
|
||||||
"Drives GitOps adoption with ArgoCD across production Kubernetes clusters",
|
"Drives GitOps adoption with ArgoCD across production Kubernetes clusters",
|
||||||
"Manages CI/CD pipelines with Jenkins and Bitbucket Pipelines",
|
"Manages CI/CD pipelines with Bitbucket Pipelines",
|
||||||
"Leads incident response for production outages",
|
"Leads incident response and on-call for production outages",
|
||||||
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits",
|
"Reduced GRASP frontend pipeline from 30 to 16 minutes",
|
||||||
"Built internal AI tooling with LiteLLM and Ollama",
|
"Eliminated ~$2k/month Azure logging costs via workspace restructuring",
|
||||||
"Promoted from Junior DevOps Engineer in January 2026"
|
"Built internal AI tooling with LiteLLM and Ollama",
|
||||||
]
|
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits"
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
id: 2,
|
{
|
||||||
role: "Research Assistant",
|
"id": 2,
|
||||||
company: "NCS Group, Universität Duisburg-Essen",
|
"role": "Research Assistant",
|
||||||
period: "2021 – 2024",
|
"company": "NCS Group, Universität Duisburg-Essen",
|
||||||
type: "Part-time",
|
"period": "2021 – 2024",
|
||||||
description: "Hands-on P4 and programmable data plane research on Intel Tofino ASICs and BMv2, culminating in a co-authored publication at IEEE LCN 2023 (Reverse Path Congestion Marking).",
|
"type": "Part-time",
|
||||||
highlights: [
|
"description": "Hands-on P4 and programmable data plane research on Intel Tofino ASICs and BMv2, culminating in a co-authored publication at IEEE LCN 2023 (Reverse Path Congestion Marking).",
|
||||||
"Co-authored RPM paper published at IEEE LCN 2023",
|
"highlights": [
|
||||||
"Built a Dockerized federated LSTM system with custom client-selection strategies for 5G network research",
|
"Co-authored RPM: Reverse Path Congestion Marking on P4 Programmable Switches — IEEE LCN 2023",
|
||||||
"Implemented low-latency DASH video streaming on Kubernetes and WebRTC SVC simulcast",
|
"Built a Dockerized federated LSTM system with custom client-selection strategies for 5G network research",
|
||||||
"Managed lab infrastructure: Ansible-automated servers, 100G NIC testbeds (Intel E810, Netronome)",
|
"Implemented low-latency DASH video streaming on Kubernetes and WebRTC SVC simulcast via Janus",
|
||||||
"Administered AWS accounts, PartDB inventory system, and the group website"
|
"Managed lab infrastructure: Ansible-automated servers, 100G NIC testbeds (Intel E810, Netronome), DPDK",
|
||||||
]
|
"Administered AWS accounts, PartDB inventory system, and the group website"
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
id: 3,
|
{
|
||||||
role: "Student Mentor",
|
"id": 3,
|
||||||
company: "Universität Duisburg-Essen",
|
"role": "Student Mentor",
|
||||||
period: "2021 – 2022",
|
"company": "Universität Duisburg-Essen",
|
||||||
type: "Volunteer",
|
"period": "2021 – 2022",
|
||||||
description: "Introduced groups of ~20 freshmen to their new academic environment at the start of each semester, providing organizational and technical guidance throughout their first year in the computer science programme.",
|
"type": "Volunteer",
|
||||||
highlights: [
|
"description": "Introduced groups of ~20 freshmen to their new academic environment each semester, providing organizational and technical guidance throughout their first year.",
|
||||||
"Guided new students through academic orientation each semester",
|
"highlights": [
|
||||||
"Provided technical and organizational support throughout the first year"
|
"Guided new students through academic orientation each semester",
|
||||||
]
|
"Provided technical and organizational support throughout the first year"
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
id: 4,
|
{
|
||||||
role: "Software Engineer",
|
"id": 4,
|
||||||
company: "gefeba Engineering GmbH",
|
"role": "Software Engineer",
|
||||||
period: "2018 – 2020",
|
"company": "gefeba Engineering GmbH",
|
||||||
type: "Part-time",
|
"period": "2018 – 2020",
|
||||||
description: "Worked on the company's main product — a frame-based data exchange system for monitoring industrial machinery — and developed a real-time log visualization application.",
|
"type": "Part-time",
|
||||||
highlights: [
|
"description": "Worked on the company's main product — a frame-based data exchange system for monitoring industrial machinery — and developed a real-time log visualization application.",
|
||||||
"Developed features for a frame-based industrial data exchange system",
|
"highlights": [
|
||||||
"Built a real-time log visualization application for industrial machinery",
|
"Developed features for a frame-based industrial data exchange system",
|
||||||
"Stack: C#, Angular, Bootstrap, Entity Framework"
|
"Built a real-time log visualization application for industrial machinery",
|
||||||
]
|
"Stack: C#, Angular, Bootstrap, Entity Framework"
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
id: 5,
|
{
|
||||||
role: "Student Council Member",
|
"id": 5,
|
||||||
company: "Universität Duisburg-Essen",
|
"role": "Student Council Member",
|
||||||
period: "2016 – 2019",
|
"company": "Universität Duisburg-Essen",
|
||||||
type: "Volunteer",
|
"period": "2016 – 2019",
|
||||||
description: "Participated in faculty committees and organized social events. Main responsibilities included managing the faculty's IT infrastructure and providing support to fellow students.",
|
"type": "Volunteer",
|
||||||
highlights: [
|
"description": "Participated in faculty committees and organized social events. Managed the faculty's IT infrastructure and provided support to fellow students.",
|
||||||
"Managed faculty IT infrastructure (Linux, Networking)",
|
"highlights": [
|
||||||
"Organized social events and participated in faculty committees",
|
"Managed faculty IT infrastructure (Linux, Networking, LaTeX)",
|
||||||
"Provided subject-specific and organizational support to fellow students"
|
"Organized social events and participated in faculty committees",
|
||||||
]
|
"Provided subject-specific and organizational support to fellow students"
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
id: 6,
|
{
|
||||||
role: "Software Engineer",
|
"id": 6,
|
||||||
company: "gefeba Engineering GmbH",
|
"role": "Software Engineer",
|
||||||
period: "2013 – 2015",
|
"company": "gefeba Engineering GmbH",
|
||||||
type: "Part-time",
|
"period": "2013 – 2015",
|
||||||
description: "Joined after a school internship. Worked on internal ERP projects, designed a mail traffic management tool, and contributed to the internal master data management tool.",
|
"type": "Part-time",
|
||||||
highlights: [
|
"description": "Joined after a school internship. Worked on internal ERP projects, designed a mail traffic management tool, and contributed to master data management tooling.",
|
||||||
"Developed internal ERP project features",
|
"highlights": [
|
||||||
"Designed a tool for managing project-related mail traffic",
|
"Developed internal ERP project features",
|
||||||
"Contributed to internal master data management tooling",
|
"Designed a tool for managing project-related mail traffic",
|
||||||
"Stack: C#, HTML, CSS, JavaScript"
|
"Contributed to internal master data management tooling",
|
||||||
]
|
"Stack: C#, HTML, CSS, JavaScript"
|
||||||
}
|
]
|
||||||
],
|
}
|
||||||
skills: {
|
],
|
||||||
"Container & Orchestration": ["Kubernetes", "Docker", "Helm"],
|
"skills": {
|
||||||
"CI/CD & GitOps": ["ArgoCD", "Jenkins", "Bitbucket Pipelines", "Git"],
|
"Container & Orchestration": [
|
||||||
"Cloud": ["Azure", "Azure AKS"],
|
"Kubernetes",
|
||||||
"Infrastructure as Code": ["Ansible"],
|
"Docker",
|
||||||
"Observability": ["ELK Stack"],
|
"Helm",
|
||||||
"Programming": ["Rust", "Python", "Bash", "P4"],
|
"ArgoCD"
|
||||||
"Research": ["Intel Tofino", "BMv2", "DPDK"]
|
],
|
||||||
},
|
"CI/CD": [
|
||||||
education: [
|
"Bitbucket Pipelines",
|
||||||
{
|
"Git"
|
||||||
id: 1,
|
],
|
||||||
degree: "B.Sc. Systems Engineering",
|
"Cloud": [
|
||||||
institution: "Universität Duisburg-Essen",
|
"Azure",
|
||||||
period: "2015 – present",
|
"Azure AKS",
|
||||||
status: "Bachelor thesis ongoing"
|
"Azure App Gateway",
|
||||||
}
|
"Azure Entra ID"
|
||||||
],
|
],
|
||||||
projects: [
|
"Infrastructure as Code": [
|
||||||
{
|
"Ansible"
|
||||||
id: 1,
|
],
|
||||||
name: "Ethereum Smart Contract Fuzzer",
|
"Observability": [
|
||||||
description: "A fuzzer for Ethereum smart contracts built as part of the bachelor thesis project.",
|
"ELK Stack",
|
||||||
url: "#",
|
"Checkmk",
|
||||||
tech: ["Rust"]
|
"UptimeRobot"
|
||||||
},
|
],
|
||||||
{
|
"Databases": [
|
||||||
id: 2,
|
"PostgreSQL",
|
||||||
name: "Homelab",
|
"MongoDB",
|
||||||
description: "Ansible-managed homelab serving as a platform for learning and experimenting with new technologies through automated provisioning and configuration management.",
|
"CouchDB"
|
||||||
url: "https://git.tudattr.dev",
|
],
|
||||||
tech: ["Ansible", "Kubernetes"]
|
"Programming": [
|
||||||
},
|
"Rust",
|
||||||
{
|
"Python",
|
||||||
id: 3,
|
"Bash",
|
||||||
name: ".dotfiles",
|
"P4"
|
||||||
description: "Configuration files for daily-use tools providing a reproducible baseline for any personal ArchLinux system, including NeoVim (LazyVim), Zellij, and k9s setups.",
|
],
|
||||||
url: "https://github.com/TuDatTr",
|
"Research": [
|
||||||
tech: ["Shell", "NeoVim", "ArchLinux"]
|
"Intel Tofino",
|
||||||
},
|
"BMv2",
|
||||||
{
|
"DPDK"
|
||||||
id: 4,
|
]
|
||||||
name: "tudattr.dev",
|
},
|
||||||
description: "Full-stack WebAssembly personal website built with the Rust-based Dioxus framework and Tailwind CSS.",
|
"education": [
|
||||||
url: "https://www.tudattr.dev",
|
{
|
||||||
tech: ["Rust", "Dioxus", "Tailwind CSS"]
|
"id": 1,
|
||||||
},
|
"degree": "B.Sc. Systems Engineering",
|
||||||
{
|
"institution": "Universität Duisburg-Essen",
|
||||||
id: 5,
|
"period": "2015 – present",
|
||||||
name: "mtg-builder",
|
"status": "Bachelor thesis ongoing"
|
||||||
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"]
|
"projects": [
|
||||||
}
|
{
|
||||||
]
|
"id": 1,
|
||||||
})
|
"name": "Ethereum Smart Contract Fuzzer",
|
||||||
});
|
"description": "A fuzzer for Ethereum smart contracts built as part of the bachelor thesis project.",
|
||||||
|
"url": "#",
|
||||||
|
"tech": [
|
||||||
|
"Rust"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "Homelab",
|
||||||
|
"description": "Ansible-managed homelab running on Debian Linux with Raspberry Pi, Mikrotik networking, Pihole, and self-hosted services.",
|
||||||
|
"url": "https://git.tudattr.dev/tudattr/ansible",
|
||||||
|
"tech": [
|
||||||
|
"Ansible",
|
||||||
|
"Kubernetes",
|
||||||
|
"Debian Linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": ".dotfiles",
|
||||||
|
"description": "Configuration files for daily-use tools providing a reproducible baseline for any personal ArchLinux system, including NeoVim (LazyVim), Zellij, and k9s.",
|
||||||
|
"url": "https://github.com/TuDatTr/dotfiles",
|
||||||
|
"tech": [
|
||||||
|
"Zsh",
|
||||||
|
"NeoVim",
|
||||||
|
"Zellij",
|
||||||
|
"ArchLinux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"name": "tudattr.dev",
|
||||||
|
"description": "Full-stack WebAssembly personal website built with the Rust-based Dioxus framework and Tailwind CSS.",
|
||||||
|
"url": "https://www.tudattr.dev",
|
||||||
|
"tech": [
|
||||||
|
"Rust",
|
||||||
|
"Dioxus",
|
||||||
|
"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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
});
|
||||||
console.log('Initialized database with default CV data');
|
console.log('Initialized database with default CV data');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"sync-profile": "node scripts/sync-profile.mjs",
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
|
|||||||
60
scripts/sync-profile.mjs
Normal file
60
scripts/sync-profile.mjs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
/**
|
||||||
|
* Reads cv-data.json from the persons profile directory and writes it into:
|
||||||
|
* - src/lib/cv.json (frontend default / compile-time fallback)
|
||||||
|
* - backend/db/init.js (backend DB seed on first boot)
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* node scripts/sync-profile.mjs [path/to/cv-data.json]
|
||||||
|
*
|
||||||
|
* Default source path: ~/workspace/persons/tuan-dat.tran/cv-data.json
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { readFileSync, writeFileSync } from 'fs';
|
||||||
|
import { resolve } from 'path';
|
||||||
|
import { homedir } from 'os';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import { dirname } from 'path';
|
||||||
|
|
||||||
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
|
const root = resolve(__dirname, '..');
|
||||||
|
|
||||||
|
const sourcePath = process.argv[2]
|
||||||
|
?? resolve(homedir(), 'workspace/persons/tuan-dat.tran/cv-data.json');
|
||||||
|
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
data = JSON.parse(readFileSync(sourcePath, 'utf8'));
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`Failed to read ${sourcePath}: ${e.message}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. Write src/lib/cv.json
|
||||||
|
const cvJsonPath = resolve(root, 'src/lib/cv.json');
|
||||||
|
writeFileSync(cvJsonPath, JSON.stringify(data, null, 2) + '\n');
|
||||||
|
console.log(`wrote ${cvJsonPath}`);
|
||||||
|
|
||||||
|
// 2. Rewrite the seed block in backend/db/init.js
|
||||||
|
const initPath = resolve(root, 'backend/db/init.js');
|
||||||
|
const initSrc = readFileSync(initPath, 'utf8');
|
||||||
|
|
||||||
|
const seedJson = JSON.stringify(data, null, 8)
|
||||||
|
.split('\n')
|
||||||
|
.map((line, i) => i === 0 ? line : ' ' + line)
|
||||||
|
.join('\n');
|
||||||
|
|
||||||
|
const updated = initSrc.replace(
|
||||||
|
/data: JSON\.stringify\([\s\S]*?\)\s*\}\);/,
|
||||||
|
`data: JSON.stringify(${seedJson})\n });`
|
||||||
|
);
|
||||||
|
|
||||||
|
if (updated === initSrc) {
|
||||||
|
console.error('Could not find seed block in backend/db/init.js — pattern mismatch');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeFileSync(initPath, updated);
|
||||||
|
console.log(`wrote ${initPath}`);
|
||||||
|
|
||||||
|
console.log('done — rebuild Docker images and restart with a fresh volume to apply');
|
||||||
114
src/lib/cv.json
114
src/lib/cv.json
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"personal": {
|
"personal": {
|
||||||
"name": "Tuan-Dat Tran",
|
"name": "Tuan-Dat Tran",
|
||||||
"title": "DevOps Engineer",
|
"title": "Junior DevOps Engineer",
|
||||||
"intro": "DevOps Engineer and Homelab Enthusiast based in Essen, Germany. Primary owner of a production aviation SaaS platform on Azure AKS, with a research background in P4 programmable networks and a co-authored IEEE publication.",
|
"intro": "DevOps Engineer and Homelab Enthusiast based in Essen, Germany. Primary owner of a production aviation SaaS platform on Azure AKS, with a research background in P4 programmable networks and a co-authored IEEE publication.",
|
||||||
"email": "tuan-dat.tran@dextradata.com",
|
"email": "tuan-dat.tran@dextradata.com",
|
||||||
"github": "https://github.com/TuDatTr",
|
"github": "https://github.com/TuDatTr",
|
||||||
@@ -11,18 +11,19 @@
|
|||||||
"experience": [
|
"experience": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"role": "DevOps Engineer",
|
"role": "Junior DevOps Engineer",
|
||||||
"company": "DextraData GmbH",
|
"company": "DextraData GRC Technologies GmbH",
|
||||||
"period": "2025 – present",
|
"period": "2025 – present",
|
||||||
"type": "Full-time",
|
"type": "Full-time",
|
||||||
"description": "Primary owner of the Logipad aviation SaaS platform and secondary owner of the GRASP GRC platform, both running on Azure AKS and Rancher-managed Kubernetes clusters.",
|
"description": "Primary owner of the GRASP GRC platform and Logipad aviation SaaS platform, running on Azure AKS and Rancher-managed Kubernetes clusters.",
|
||||||
"highlights": [
|
"highlights": [
|
||||||
"Drives GitOps adoption with ArgoCD across production Kubernetes clusters",
|
"Drives GitOps adoption with ArgoCD across production Kubernetes clusters",
|
||||||
"Manages CI/CD pipelines with Jenkins and Bitbucket Pipelines",
|
"Manages CI/CD pipelines with Bitbucket Pipelines",
|
||||||
"Leads incident response for production outages",
|
"Leads incident response and on-call for production outages",
|
||||||
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits",
|
"Reduced GRASP frontend pipeline from 30 to 16 minutes",
|
||||||
|
"Eliminated ~$2k/month Azure logging costs via workspace restructuring",
|
||||||
"Built internal AI tooling with LiteLLM and Ollama",
|
"Built internal AI tooling with LiteLLM and Ollama",
|
||||||
"Promoted from Junior DevOps Engineer in January 2026"
|
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -33,10 +34,10 @@
|
|||||||
"type": "Part-time",
|
"type": "Part-time",
|
||||||
"description": "Hands-on P4 and programmable data plane research on Intel Tofino ASICs and BMv2, culminating in a co-authored publication at IEEE LCN 2023 (Reverse Path Congestion Marking).",
|
"description": "Hands-on P4 and programmable data plane research on Intel Tofino ASICs and BMv2, culminating in a co-authored publication at IEEE LCN 2023 (Reverse Path Congestion Marking).",
|
||||||
"highlights": [
|
"highlights": [
|
||||||
"Co-authored RPM paper published at IEEE LCN 2023",
|
"Co-authored RPM: Reverse Path Congestion Marking on P4 Programmable Switches — IEEE LCN 2023",
|
||||||
"Built a Dockerized federated LSTM system with custom client-selection strategies for 5G network research",
|
"Built a Dockerized federated LSTM system with custom client-selection strategies for 5G network research",
|
||||||
"Implemented low-latency DASH video streaming on Kubernetes and WebRTC SVC simulcast",
|
"Implemented low-latency DASH video streaming on Kubernetes and WebRTC SVC simulcast via Janus",
|
||||||
"Managed lab infrastructure: Ansible-automated servers, 100G NIC testbeds (Intel E810, Netronome)",
|
"Managed lab infrastructure: Ansible-automated servers, 100G NIC testbeds (Intel E810, Netronome), DPDK",
|
||||||
"Administered AWS accounts, PartDB inventory system, and the group website"
|
"Administered AWS accounts, PartDB inventory system, and the group website"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -46,7 +47,7 @@
|
|||||||
"company": "Universität Duisburg-Essen",
|
"company": "Universität Duisburg-Essen",
|
||||||
"period": "2021 – 2022",
|
"period": "2021 – 2022",
|
||||||
"type": "Volunteer",
|
"type": "Volunteer",
|
||||||
"description": "Introduced groups of ~20 freshmen to their new academic environment at the start of each semester, providing organizational and technical guidance throughout their first year in the computer science programme.",
|
"description": "Introduced groups of ~20 freshmen to their new academic environment each semester, providing organizational and technical guidance throughout their first year.",
|
||||||
"highlights": [
|
"highlights": [
|
||||||
"Guided new students through academic orientation each semester",
|
"Guided new students through academic orientation each semester",
|
||||||
"Provided technical and organizational support throughout the first year"
|
"Provided technical and organizational support throughout the first year"
|
||||||
@@ -71,9 +72,9 @@
|
|||||||
"company": "Universität Duisburg-Essen",
|
"company": "Universität Duisburg-Essen",
|
||||||
"period": "2016 – 2019",
|
"period": "2016 – 2019",
|
||||||
"type": "Volunteer",
|
"type": "Volunteer",
|
||||||
"description": "Participated in faculty committees and organized social events. Main responsibilities included managing the faculty's IT infrastructure and providing support to fellow students.",
|
"description": "Participated in faculty committees and organized social events. Managed the faculty's IT infrastructure and provided support to fellow students.",
|
||||||
"highlights": [
|
"highlights": [
|
||||||
"Managed faculty IT infrastructure (Linux, Networking)",
|
"Managed faculty IT infrastructure (Linux, Networking, LaTeX)",
|
||||||
"Organized social events and participated in faculty committees",
|
"Organized social events and participated in faculty committees",
|
||||||
"Provided subject-specific and organizational support to fellow students"
|
"Provided subject-specific and organizational support to fellow students"
|
||||||
]
|
]
|
||||||
@@ -84,7 +85,7 @@
|
|||||||
"company": "gefeba Engineering GmbH",
|
"company": "gefeba Engineering GmbH",
|
||||||
"period": "2013 – 2015",
|
"period": "2013 – 2015",
|
||||||
"type": "Part-time",
|
"type": "Part-time",
|
||||||
"description": "Joined after a school internship. Worked on internal ERP projects, designed a mail traffic management tool, and contributed to the internal master data management tool.",
|
"description": "Joined after a school internship. Worked on internal ERP projects, designed a mail traffic management tool, and contributed to master data management tooling.",
|
||||||
"highlights": [
|
"highlights": [
|
||||||
"Developed internal ERP project features",
|
"Developed internal ERP project features",
|
||||||
"Designed a tool for managing project-related mail traffic",
|
"Designed a tool for managing project-related mail traffic",
|
||||||
@@ -94,13 +95,46 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"skills": {
|
"skills": {
|
||||||
"Container & Orchestration": ["Kubernetes", "Docker", "Helm"],
|
"Container & Orchestration": [
|
||||||
"CI/CD & GitOps": ["ArgoCD", "Jenkins", "Bitbucket Pipelines", "Git"],
|
"Kubernetes",
|
||||||
"Cloud": ["Azure", "Azure AKS"],
|
"Docker",
|
||||||
"Infrastructure as Code": ["Ansible"],
|
"Helm",
|
||||||
"Observability": ["ELK Stack"],
|
"ArgoCD"
|
||||||
"Programming": ["Rust", "Python", "Bash", "P4"],
|
],
|
||||||
"Research": ["Intel Tofino", "BMv2", "DPDK"]
|
"CI/CD": [
|
||||||
|
"Bitbucket Pipelines",
|
||||||
|
"Git"
|
||||||
|
],
|
||||||
|
"Cloud": [
|
||||||
|
"Azure",
|
||||||
|
"Azure AKS",
|
||||||
|
"Azure App Gateway",
|
||||||
|
"Azure Entra ID"
|
||||||
|
],
|
||||||
|
"Infrastructure as Code": [
|
||||||
|
"Ansible"
|
||||||
|
],
|
||||||
|
"Observability": [
|
||||||
|
"ELK Stack",
|
||||||
|
"Checkmk",
|
||||||
|
"UptimeRobot"
|
||||||
|
],
|
||||||
|
"Databases": [
|
||||||
|
"PostgreSQL",
|
||||||
|
"MongoDB",
|
||||||
|
"CouchDB"
|
||||||
|
],
|
||||||
|
"Programming": [
|
||||||
|
"Rust",
|
||||||
|
"Python",
|
||||||
|
"Bash",
|
||||||
|
"P4"
|
||||||
|
],
|
||||||
|
"Research": [
|
||||||
|
"Intel Tofino",
|
||||||
|
"BMv2",
|
||||||
|
"DPDK"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"education": [
|
"education": [
|
||||||
{
|
{
|
||||||
@@ -117,35 +151,53 @@
|
|||||||
"name": "Ethereum Smart Contract Fuzzer",
|
"name": "Ethereum Smart Contract Fuzzer",
|
||||||
"description": "A fuzzer for Ethereum smart contracts built as part of the bachelor thesis project.",
|
"description": "A fuzzer for Ethereum smart contracts built as part of the bachelor thesis project.",
|
||||||
"url": "#",
|
"url": "#",
|
||||||
"tech": ["Rust"]
|
"tech": [
|
||||||
|
"Rust"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "Homelab",
|
"name": "Homelab",
|
||||||
"description": "Ansible-managed homelab serving as a platform for learning and experimenting with new technologies through automated provisioning and configuration management.",
|
"description": "Ansible-managed homelab running on Debian Linux with Raspberry Pi, Mikrotik networking, Pihole, and self-hosted services.",
|
||||||
"url": "https://git.tudattr.dev",
|
"url": "https://git.tudattr.dev/tudattr/ansible",
|
||||||
"tech": ["Ansible", "Kubernetes"]
|
"tech": [
|
||||||
|
"Ansible",
|
||||||
|
"Kubernetes",
|
||||||
|
"Debian Linux"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": ".dotfiles",
|
"name": ".dotfiles",
|
||||||
"description": "Configuration files for daily-use tools providing a reproducible baseline for any personal ArchLinux system, including NeoVim (LazyVim), Zellij, and k9s setups.",
|
"description": "Configuration files for daily-use tools providing a reproducible baseline for any personal ArchLinux system, including NeoVim (LazyVim), Zellij, and k9s.",
|
||||||
"url": "https://github.com/TuDatTr",
|
"url": "https://github.com/TuDatTr/dotfiles",
|
||||||
"tech": ["Shell", "NeoVim", "ArchLinux"]
|
"tech": [
|
||||||
|
"Zsh",
|
||||||
|
"NeoVim",
|
||||||
|
"Zellij",
|
||||||
|
"ArchLinux"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"name": "tudattr.dev",
|
"name": "tudattr.dev",
|
||||||
"description": "Full-stack WebAssembly personal website built with the Rust-based Dioxus framework and Tailwind CSS.",
|
"description": "Full-stack WebAssembly personal website built with the Rust-based Dioxus framework and Tailwind CSS.",
|
||||||
"url": "https://www.tudattr.dev",
|
"url": "https://www.tudattr.dev",
|
||||||
"tech": ["Rust", "Dioxus", "Tailwind CSS"]
|
"tech": [
|
||||||
|
"Rust",
|
||||||
|
"Dioxus",
|
||||||
|
"Tailwind CSS",
|
||||||
|
"WebAssembly"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "mtg-builder",
|
"name": "mtg-builder",
|
||||||
"description": "CLI Magic: The Gathering (Commander/EDH) deck-builder and collection manager using the Scryfall API, with exponential backoff retry logic.",
|
"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",
|
"url": "https://git.tudattr.dev/tudattr/mtg-builder",
|
||||||
"tech": ["Rust"]
|
"tech": [
|
||||||
|
"Rust"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user