feat: add sync-profile script to populate default CV from persons repo
This commit is contained in:
@@ -24,93 +24,94 @@ export async function initDB() {
|
||||
await db('cv_data').insert({
|
||||
id: 1,
|
||||
data: JSON.stringify({
|
||||
personal: {
|
||||
name: "Tuan-Dat Tran",
|
||||
title: "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.",
|
||||
email: "tuan-dat.tran@dextradata.com",
|
||||
github: "https://github.com/TuDatTr",
|
||||
linkedin: "https://www.linkedin.com/in/tudattr/",
|
||||
location: "Essen, Germany"
|
||||
"personal": {
|
||||
"name": "Tuan-Dat Tran",
|
||||
"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.",
|
||||
"email": "tuan-dat.tran@dextradata.com",
|
||||
"github": "https://github.com/TuDatTr",
|
||||
"linkedin": "https://www.linkedin.com/in/tudattr/",
|
||||
"location": "Essen, Germany"
|
||||
},
|
||||
experience: [
|
||||
"experience": [
|
||||
{
|
||||
id: 1,
|
||||
role: "DevOps Engineer",
|
||||
company: "DextraData GmbH",
|
||||
period: "2025 – present",
|
||||
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.",
|
||||
highlights: [
|
||||
"id": 1,
|
||||
"role": "Junior DevOps Engineer",
|
||||
"company": "DextraData GRC Technologies GmbH",
|
||||
"period": "2025 – present",
|
||||
"type": "Full-time",
|
||||
"description": "Primary owner of the GRASP GRC platform and Logipad aviation SaaS platform, running on Azure AKS and Rancher-managed Kubernetes clusters.",
|
||||
"highlights": [
|
||||
"Drives GitOps adoption with ArgoCD across production Kubernetes clusters",
|
||||
"Manages CI/CD pipelines with Jenkins and Bitbucket Pipelines",
|
||||
"Leads incident response for production outages",
|
||||
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits",
|
||||
"Manages CI/CD pipelines with Bitbucket Pipelines",
|
||||
"Leads incident response and on-call for production outages",
|
||||
"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",
|
||||
"Promoted from Junior DevOps Engineer in January 2026"
|
||||
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits"
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
role: "Research Assistant",
|
||||
company: "NCS Group, Universität Duisburg-Essen",
|
||||
period: "2021 – 2024",
|
||||
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).",
|
||||
highlights: [
|
||||
"Co-authored RPM paper published at IEEE LCN 2023",
|
||||
"id": 2,
|
||||
"role": "Research Assistant",
|
||||
"company": "NCS Group, Universität Duisburg-Essen",
|
||||
"period": "2021 – 2024",
|
||||
"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).",
|
||||
"highlights": [
|
||||
"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",
|
||||
"Implemented low-latency DASH video streaming on Kubernetes and WebRTC SVC simulcast",
|
||||
"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",
|
||||
"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",
|
||||
company: "Universität Duisburg-Essen",
|
||||
period: "2021 – 2022",
|
||||
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.",
|
||||
highlights: [
|
||||
"id": 3,
|
||||
"role": "Student Mentor",
|
||||
"company": "Universität Duisburg-Essen",
|
||||
"period": "2021 – 2022",
|
||||
"type": "Volunteer",
|
||||
"description": "Introduced groups of ~20 freshmen to their new academic environment each semester, providing organizational and technical guidance throughout their first year.",
|
||||
"highlights": [
|
||||
"Guided new students through academic orientation each semester",
|
||||
"Provided technical and organizational support throughout the first year"
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
role: "Software Engineer",
|
||||
company: "gefeba Engineering GmbH",
|
||||
period: "2018 – 2020",
|
||||
type: "Part-time",
|
||||
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.",
|
||||
highlights: [
|
||||
"id": 4,
|
||||
"role": "Software Engineer",
|
||||
"company": "gefeba Engineering GmbH",
|
||||
"period": "2018 – 2020",
|
||||
"type": "Part-time",
|
||||
"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.",
|
||||
"highlights": [
|
||||
"Developed features for a frame-based industrial data exchange system",
|
||||
"Built a real-time log visualization application for industrial machinery",
|
||||
"Stack: C#, Angular, Bootstrap, Entity Framework"
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
role: "Student Council Member",
|
||||
company: "Universität Duisburg-Essen",
|
||||
period: "2016 – 2019",
|
||||
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.",
|
||||
highlights: [
|
||||
"Managed faculty IT infrastructure (Linux, Networking)",
|
||||
"id": 5,
|
||||
"role": "Student Council Member",
|
||||
"company": "Universität Duisburg-Essen",
|
||||
"period": "2016 – 2019",
|
||||
"type": "Volunteer",
|
||||
"description": "Participated in faculty committees and organized social events. Managed the faculty's IT infrastructure and provided support to fellow students.",
|
||||
"highlights": [
|
||||
"Managed faculty IT infrastructure (Linux, Networking, LaTeX)",
|
||||
"Organized social events and participated in faculty committees",
|
||||
"Provided subject-specific and organizational support to fellow students"
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
role: "Software Engineer",
|
||||
company: "gefeba Engineering GmbH",
|
||||
period: "2013 – 2015",
|
||||
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.",
|
||||
highlights: [
|
||||
"id": 6,
|
||||
"role": "Software Engineer",
|
||||
"company": "gefeba Engineering GmbH",
|
||||
"period": "2013 – 2015",
|
||||
"type": "Part-time",
|
||||
"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": [
|
||||
"Developed internal ERP project features",
|
||||
"Designed a tool for managing project-related mail traffic",
|
||||
"Contributed to internal master data management tooling",
|
||||
@@ -118,59 +119,110 @@ export async function initDB() {
|
||||
]
|
||||
}
|
||||
],
|
||||
skills: {
|
||||
"Container & Orchestration": ["Kubernetes", "Docker", "Helm"],
|
||||
"CI/CD & GitOps": ["ArgoCD", "Jenkins", "Bitbucket Pipelines", "Git"],
|
||||
"Cloud": ["Azure", "Azure AKS"],
|
||||
"Infrastructure as Code": ["Ansible"],
|
||||
"Observability": ["ELK Stack"],
|
||||
"Programming": ["Rust", "Python", "Bash", "P4"],
|
||||
"Research": ["Intel Tofino", "BMv2", "DPDK"]
|
||||
"skills": {
|
||||
"Container & Orchestration": [
|
||||
"Kubernetes",
|
||||
"Docker",
|
||||
"Helm",
|
||||
"ArgoCD"
|
||||
],
|
||||
"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": [
|
||||
{
|
||||
id: 1,
|
||||
degree: "B.Sc. Systems Engineering",
|
||||
institution: "Universität Duisburg-Essen",
|
||||
period: "2015 – present",
|
||||
status: "Bachelor thesis ongoing"
|
||||
"id": 1,
|
||||
"degree": "B.Sc. Systems Engineering",
|
||||
"institution": "Universität Duisburg-Essen",
|
||||
"period": "2015 – present",
|
||||
"status": "Bachelor thesis ongoing"
|
||||
}
|
||||
],
|
||||
projects: [
|
||||
"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": 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 serving as a platform for learning and experimenting with new technologies through automated provisioning and configuration management.",
|
||||
url: "https://git.tudattr.dev",
|
||||
tech: ["Ansible", "Kubernetes"]
|
||||
"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 setups.",
|
||||
url: "https://github.com/TuDatTr",
|
||||
tech: ["Shell", "NeoVim", "ArchLinux"]
|
||||
"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"]
|
||||
"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"]
|
||||
"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"
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"version": "1.1.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"sync-profile": "node scripts/sync-profile.mjs",
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"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": {
|
||||
"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.",
|
||||
"email": "tuan-dat.tran@dextradata.com",
|
||||
"github": "https://github.com/TuDatTr",
|
||||
@@ -11,18 +11,19 @@
|
||||
"experience": [
|
||||
{
|
||||
"id": 1,
|
||||
"role": "DevOps Engineer",
|
||||
"company": "DextraData GmbH",
|
||||
"role": "Junior DevOps Engineer",
|
||||
"company": "DextraData GRC Technologies GmbH",
|
||||
"period": "2025 – present",
|
||||
"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": [
|
||||
"Drives GitOps adoption with ArgoCD across production Kubernetes clusters",
|
||||
"Manages CI/CD pipelines with Jenkins and Bitbucket Pipelines",
|
||||
"Leads incident response for production outages",
|
||||
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits",
|
||||
"Manages CI/CD pipelines with Bitbucket Pipelines",
|
||||
"Leads incident response and on-call for production outages",
|
||||
"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",
|
||||
"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",
|
||||
"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": [
|
||||
"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",
|
||||
"Implemented low-latency DASH video streaming on Kubernetes and WebRTC SVC simulcast",
|
||||
"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",
|
||||
"Managed lab infrastructure: Ansible-automated servers, 100G NIC testbeds (Intel E810, Netronome), DPDK",
|
||||
"Administered AWS accounts, PartDB inventory system, and the group website"
|
||||
]
|
||||
},
|
||||
@@ -46,7 +47,7 @@
|
||||
"company": "Universität Duisburg-Essen",
|
||||
"period": "2021 – 2022",
|
||||
"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": [
|
||||
"Guided new students through academic orientation each semester",
|
||||
"Provided technical and organizational support throughout the first year"
|
||||
@@ -71,9 +72,9 @@
|
||||
"company": "Universität Duisburg-Essen",
|
||||
"period": "2016 – 2019",
|
||||
"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": [
|
||||
"Managed faculty IT infrastructure (Linux, Networking)",
|
||||
"Managed faculty IT infrastructure (Linux, Networking, LaTeX)",
|
||||
"Organized social events and participated in faculty committees",
|
||||
"Provided subject-specific and organizational support to fellow students"
|
||||
]
|
||||
@@ -84,7 +85,7 @@
|
||||
"company": "gefeba Engineering GmbH",
|
||||
"period": "2013 – 2015",
|
||||
"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": [
|
||||
"Developed internal ERP project features",
|
||||
"Designed a tool for managing project-related mail traffic",
|
||||
@@ -94,13 +95,46 @@
|
||||
}
|
||||
],
|
||||
"skills": {
|
||||
"Container & Orchestration": ["Kubernetes", "Docker", "Helm"],
|
||||
"CI/CD & GitOps": ["ArgoCD", "Jenkins", "Bitbucket Pipelines", "Git"],
|
||||
"Cloud": ["Azure", "Azure AKS"],
|
||||
"Infrastructure as Code": ["Ansible"],
|
||||
"Observability": ["ELK Stack"],
|
||||
"Programming": ["Rust", "Python", "Bash", "P4"],
|
||||
"Research": ["Intel Tofino", "BMv2", "DPDK"]
|
||||
"Container & Orchestration": [
|
||||
"Kubernetes",
|
||||
"Docker",
|
||||
"Helm",
|
||||
"ArgoCD"
|
||||
],
|
||||
"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": [
|
||||
{
|
||||
@@ -117,35 +151,53 @@
|
||||
"name": "Ethereum Smart Contract Fuzzer",
|
||||
"description": "A fuzzer for Ethereum smart contracts built as part of the bachelor thesis project.",
|
||||
"url": "#",
|
||||
"tech": ["Rust"]
|
||||
"tech": [
|
||||
"Rust"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Homelab",
|
||||
"description": "Ansible-managed homelab serving as a platform for learning and experimenting with new technologies through automated provisioning and configuration management.",
|
||||
"url": "https://git.tudattr.dev",
|
||||
"tech": ["Ansible", "Kubernetes"]
|
||||
"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 setups.",
|
||||
"url": "https://github.com/TuDatTr",
|
||||
"tech": ["Shell", "NeoVim", "ArchLinux"]
|
||||
"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"]
|
||||
"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"]
|
||||
"tech": [
|
||||
"Rust"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user