Updated Job layout to show it was all done within the same contract. Added entries for personal projects

This commit is contained in:
TehRiehlDeal committed 2026-01-11 14:30:48 -08:00
1 parent cbd5a1e42c
commit feb1c4effc
1 file changed
+136 -29
+136 -29
View File
@@ -16,10 +16,21 @@ export interface TreeNode {
endDate?: string; // Use "Present" for current role endDate?: string; // Use "Present" for current role
highlights?: string[]; // Key achievements or responsibilities highlights?: string[]; // Key achievements or responsibilities
// ========== PROJECT-SPECIFIC FIELDS ========== // ========== CONTRACT-SPECIFIC FIELDS ==========
contractName?: string;
client?: string;
contractStart?: string;
contractEnd?: string;
// ========== PROJECT-SPECIFIC FIELDS (extended) ==========
techStack?: string[]; techStack?: string[];
projectUrl?: string; projectUrl?: string;
repoUrl?: string; repoUrl?: string;
npmUrl?: string; // For npm packages
pypiUrl?: string; // For PyPI packages
downloads?: string; // "1,000+ downloads"
stars?: number; // GitHub stars
status?: 'active' | 'maintained' | 'archived';
// ========== SKILL-SPECIFIC FIELDS ========== // ========== SKILL-SPECIFIC FIELDS ==========
proficiency?: 'beginner' | 'intermediate' | 'advanced' | 'expert'; proficiency?: 'beginner' | 'intermediate' | 'advanced' | 'expert';
@@ -39,6 +50,7 @@ export interface TreeNode {
linkedIn?: string; linkedIn?: string;
github?: string; github?: string;
website?: string; website?: string;
resumeUrl?: string;
} }
// The center of our tree is at (0, 0) // The center of our tree is at (0, 0)
@@ -65,9 +77,10 @@ export const treeNodes: TreeNode[] = [
linkedIn: 'https://www.linkedin.com/in/kevinriehl', linkedIn: 'https://www.linkedin.com/in/kevinriehl',
github: 'https://github.com/TehRiehlDeal', github: 'https://github.com/TehRiehlDeal',
website: 'https://tehriehldeal.com', website: 'https://tehriehldeal.com',
resumeUrl: '/kevin-riehl-resume.pdf',
}, },
// ========== EXPERIENCE (Upper Right - Timeline Path) ========== // ========== EXPERIENCE (Upper Right - Contract-Based) ==========
{ {
id: 'exp-branch', id: 'exp-branch',
label: 'Experience', label: 'Experience',
@@ -79,13 +92,32 @@ export const treeNodes: TreeNode[] = [
size: 'large', size: 'large',
icon: '/icons/experience.svg', icon: '/icons/experience.svg',
}, },
// Contract Parent Node
{
id: 'exp-contract',
label: 'DHA - Web and Mobile Technology',
description: 'Continuous work supporting the same government client through multiple contracting companies as the contract was re-competed and awarded.',
x: 320,
y: -220,
parentId: 'exp-branch',
category: 'experience',
size: 'medium',
icon: '/icons/contract.svg',
contractName: 'DHA WMT',
client: 'Defense Health Agency',
contractStart: 'October 2020',
contractEnd: 'Present',
},
// Job 1 - First company (starting point of the arc)
{ {
id: 'exp-job1', id: 'exp-job1',
label: 'Software Engineer', label: 'Software Engineer',
description: 'Junior developer at the start of my career.', description: 'Junior developer at the start of my career.',
x: 300, x: 420,
y: -200, y: -280,
parentId: 'exp-branch', parentId: 'exp-contract',
category: 'experience', category: 'experience',
size: 'small', size: 'small',
icon: '/icons/insightglobal.webp', icon: '/icons/insightglobal.webp',
@@ -98,12 +130,14 @@ export const treeNodes: TreeNode[] = [
'Executed a critical database migration from MySQL to MSSQL, ensuring data integrity during the transfer and optimizing schema definitions for the new environment', 'Executed a critical database migration from MySQL to MSSQL, ensuring data integrity during the transfer and optimizing schema definitions for the new environment',
], ],
}, },
// Job 2 - Arc continues upward
{ {
id: 'exp-job2', id: 'exp-job2',
label: 'Software Engineer', label: 'Software Engineer',
description: 'Slightly more experienced still early in my career.', description: 'Growing my skills and taking on more responsibility.',
x: 400, x: 500,
y: -280, y: -350,
parentId: 'exp-job1', parentId: 'exp-job1',
category: 'experience', category: 'experience',
size: 'small', size: 'small',
@@ -118,12 +152,14 @@ export const treeNodes: TreeNode[] = [
'Supported engineering team growth by conducting code reviews and leading the onboarding process for new developers, ensuring smooth knowledge transfer and adherence to coding standards', 'Supported engineering team growth by conducting code reviews and leading the onboarding process for new developers, ensuring smooth knowledge transfer and adherence to coding standards',
], ],
}, },
// Job 3 - Peak of the arc
{ {
id: 'exp-job3', id: 'exp-job3',
label: 'Intermediate Software Engineer', label: 'Intermediate Software Engineer',
description: 'Stepping into a more senior role.', description: 'Stepping into a more senior role.',
x: 500, x: 560,
y: -220, y: -430,
parentId: 'exp-job2', parentId: 'exp-job2',
category: 'experience', category: 'experience',
size: 'small', size: 'small',
@@ -138,12 +174,14 @@ export const treeNodes: TreeNode[] = [
"Supported the engineering team's migration to containerized workflows by configuring, testing, and troubleshooting custom Docker environments, ensuring consistent application behavior across development and production", "Supported the engineering team's migration to containerized workflows by configuring, testing, and troubleshooting custom Docker environments, ensuring consistent application behavior across development and production",
], ],
}, },
// Job 4 - Continuing upward and right
{ {
id: 'exp-job4', id: 'exp-job4',
label: 'Intermediate Software Engineer', label: 'Intermediate Software Engineer',
description: 'Where one journey ends, another begins.', description: 'Where one journey ends, another begins.',
x: 580, x: 600,
y: -300, y: -510,
parentId: 'exp-job3', parentId: 'exp-job3',
category: 'experience', category: 'experience',
size: 'small', size: 'small',
@@ -158,12 +196,14 @@ export const treeNodes: TreeNode[] = [
'Engineered adaptive network logic that monitors packet loss in real-time and dynamically adjusts video stream quality, ensuring connection stability and optimal user experience during bandwidth fluctuations', 'Engineered adaptive network logic that monitors packet loss in real-time and dynamically adjusts video stream quality, ensuring connection stability and optimal user experience during bandwidth fluctuations',
], ],
}, },
// Job 5 - Current (highest point, prominent)
{ {
id: 'exp-job5', id: 'exp-job5',
label: 'Lead Associate', label: 'Lead Associate',
description: 'Where I am now.', description: 'Where I am now.',
x: 650, x: 620,
y: -380, y: -590,
parentId: 'exp-job4', parentId: 'exp-job4',
category: 'experience', category: 'experience',
size: 'medium', size: 'medium',
@@ -177,37 +217,104 @@ export const treeNodes: TreeNode[] = [
], ],
}, },
// ========== PROJECTS (Top Left Quadrant) ========== // ========== PROJECTS (Upper Left Quadrant) ==========
{ {
id: 'proj-branch', id: 'proj-branch',
label: 'Projects', label: 'Projects',
description: 'Things I have built.', description: 'Personal projects and open-source contributions.',
x: -150, x: -200,
y: -100, y: -150,
parentId: 'origin', parentId: 'origin',
category: 'projects', category: 'projects',
size: 'large', size: 'large',
icon: '/icons/projects.svg' icon: '/icons/projects.svg',
}, },
// Open Source Libraries
{ {
id: 'proj-1', id: 'proj-opensource',
label: 'Portfolio Site', label: 'Open Source',
description: 'This very skill tree you are exploring right now!', description: 'Published packages and libraries available for the community.',
x: -300, x: -350,
y: -180, y: -220,
parentId: 'proj-branch', parentId: 'proj-branch',
category: 'projects', category: 'projects',
size: 'small', size: 'medium',
icon: '/icons/opensource.svg',
}, },
// Personal Tools
{ {
id: 'proj-2', id: 'proj-tools',
label: 'Side Project', label: 'Personal Tools',
description: 'A passion project I built to learn new technologies.', description: 'Applications built to solve real problems.',
x: -320, x: -350,
y: -80, y: -80,
parentId: 'proj-branch', parentId: 'proj-branch',
category: 'projects', category: 'projects',
size: 'medium',
icon: '/icons/tools.svg',
},
// ========== OPEN SOURCE CHILDREN ==========
{
id: 'proj-tvdbapi',
label: 'tvdbAPI',
description: 'Python library for accessing The TVDB API. Fetch show info, episodes, actors, and images with a simple interface. Published on PyPI.',
x: -420,
y: -310,
parentId: 'proj-opensource',
category: 'projects',
size: 'small', size: 'small',
icon: '/icons/python.svg',
techStack: ['Python', 'REST API', 'PyPI', 'GitHub Actions', 'Unit Testing'],
repoUrl: 'https://github.com/TehRiehlDeal/TVDB-API',
pypiUrl: 'https://pypi.org/project/tvdbAPI/',
status: 'maintained'
},
{
id: 'proj-tmdbapi',
label: 'tmdbAPI',
description: 'Python library for The Movie Database API. Search for movies, TV shows, actors, and collections with comprehensive query options.',
x: -500,
y: -250,
parentId: 'proj-opensource',
category: 'projects',
size: 'small',
icon: '/icons/python.svg',
techStack: ['Python', 'REST API', 'PyPI', 'GitHub Actions', 'Unit Testing'],
repoUrl: 'https://github.com/TehRiehlDeal/tmdbAPI',
pypiUrl: 'https://pypi.org/project/tvdbAPI/',
status: 'maintained'
},
// ========== PERSONAL TOOLS CHILDREN ==========
{
id: 'proj-renameshow',
label: 'Rename Show',
description: 'Desktop application for batch renaming TV show files using metadata from TVDB and TMDB. Features undo support, multi-episode detection, and automatic show searching.',
x: -450,
y: -130,
parentId: 'proj-tools',
category: 'projects',
size: 'small',
icon: '/icons/desktop.svg',
techStack: ['Python', 'Tkinter', 'tvdbAPI', 'tmdbAPI', 'PIL'],
repoUrl: 'https://github.com/TehRiehlDeal/python-file-rename',
},
{
id: 'proj-portfolio',
label: 'Skill Tree Portfolio',
description: 'This interactive portfolio you\'re exploring right now! A Path of Exile inspired skill tree built with modern web technologies.',
x: -450,
y: -50,
parentId: 'proj-tools',
category: 'projects',
size: 'small',
icon: '/icons/svelte.svg',
techStack: ['SvelteKit', 'TypeScript', 'PixiJS', 'GSAP', 'Tailwind CSS'],
projectUrl: 'https://yourportfolio.com',
repoUrl: 'https://github.com/yourusername/skill-tree-portfolio',
}, },
// ========== SKILLS (Bottom Right Quadrant) ========== // ========== SKILLS (Bottom Right Quadrant) ==========