// SPDX-FileCopyrightText: 2025 Ethan Reece // // SPDX-License-Identifier: MIT #import "@preview/linguify:0.4.2": linguify #import "../../../base/lib.typ": item-heading #import "../../../base/months/lib.typ": ( April, August, December, January, July, June, March, May, Present, ) #import "../categories/lib.typ": ( Course_Group_Project, Course_Group_Projects, Course_Project, Course_Projects, Productivity, Research_Lab_Project, Robotics_Team_Project, Senior_Project, ) #import "../education/lib.typ": cvcs-title, utd-title #import "../experience/lib.typ": syssec-name, team1790-name #import "../skills/lib.typ": ( C, CSS, C_Sharp_WPF, Cloudflare, Debian, Docker, Docker_Compose, Dokku, ExpressJS, GDB, GNU_Make, Git, GitHub, GitLab, Guix, Hetzner, JavaScript_ExpressJS, LaTeX, LaTeX_TikZ, Linux, MIPS, MongoDB, MySQL, Nix, NixFlakes_devenv, NixFlakes_flake-parts, NixOS, Nix_Flakes, PHP, Pijul, PostgreSQL, Proxmox, Python, Python_pwntools, React_SigmaJS, Rust, Rust_Tokio_Serde, SOPS, TCP, Tailwind_CSS, Terraform, TypeScript, Typst, Valgrind, Verilog, flake-parts, x86, ) #let lang-data = toml("lang.toml") #let l(content) = linguify(content, from: lang-data) #let armcfi-category = Research_Lab_Project #let armcfi-location = syssec-name #let armcfi-name = l("armcfi") #let armcfi-skills = ( GNU_Make, Python, NixFlakes_flake-parts, Valgrind, Linux, GitLab, ) #let armcfi-timeframe = [#July 2025 -- #Present] #let armcfi( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: armcfi-name, subtitle: armcfi-category, timeframe: armcfi-timeframe, location: armcfi-location, skills: armcfi-skills, above: item-heading-above, below: item-heading-below, ) #let cs2340-mips-category = Course_Project #let cs2340-mips-location = utd-title #let cs2340-mips-name = l("cs2340-mips") #let cs2340-mips-skills = (MIPS,) #let cs2340-mips-timeframe = [#January -- #May 2023] #let cs2340-mips( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs2340-mips-name, subtitle: cs2340-mips-category, timeframe: cs2340-mips-timeframe, skills: cs2340-mips-skills, location: cs2340-mips-location, above: item-heading-above, below: item-heading-below, ) #let cs3377-linux-category = Course_Projects #let cs3377-linux-location = utd-title #let cs3377-linux-name = l("cs3377-linux") #let cs3377-linux-skills = (C, Linux) #let cs3377-linux-timeframe = [#August -- #December 2023] #let cs3377-linux( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs3377-linux-name, subtitle: cs3377-linux-category, timeframe: cs3377-linux-timeframe, skills: cs3377-linux-skills, location: cs3377-linux-location, above: item-heading-above, below: item-heading-below, ) #let cs4341-digitallogic-category = Course_Group_Projects #let cs4341-digitallogic-location = utd-title #let cs4341-digitallogic-name = l("cs4341-digitallogic") #let cs4341-digitallogic-skills = (Verilog, Python) #let cs4341-digitallogic-timeframe = [#January -- #May 2024] #let cs4341-digitallogic( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs4341-digitallogic-name, subtitle: cs4341-digitallogic-category, timeframe: cs4341-digitallogic-timeframe, skills: cs4341-digitallogic-skills, location: cs4341-digitallogic-location, above: item-heading-above, below: item-heading-below, ) #let cs4347-database-category = Course_Project #let cs4347-database-location = utd-title #let cs4347-database-name = l("cs4347-database") #let cs4347-database-skills = ( PHP, MySQL, Tailwind_CSS, NixFlakes_devenv, LaTeX_TikZ, Guix, ) #let cs4347-database-timeframe = [#August -- #December 2024] #let cs4347-database( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs4347-database-name, subtitle: cs4347-database-category, timeframe: cs4347-database-timeframe, skills: cs4347-database-skills, location: cs4347-database-location, above: item-heading-above, below: item-heading-below, ) #let cs4348-computer-category = Course_Project #let cs4348-computer-location = utd-title #let cs4348-computer-name = l("cs4348-computer") #let cs4348-computer-skills = (C, Linux, Pijul) #let cs4348-computer-timeframe = [#January -- #May 2024] #let cs4348-computer( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs4348-computer-name, subtitle: cs4348-computer-category, timeframe: cs4348-computer-timeframe, skills: cs4348-computer-skills, location: cs4348-computer-location, above: item-heading-above, below: item-heading-below, ) #let cs4348-mutex-category = Course_Project #let cs4348-mutex-location = utd-title #let cs4348-mutex-name = l("cs4348-mutex") #let cs4348-mutex-skills = (C, Linux) #let cs4348-mutex-timeframe = [#January -- #May 2024] #let cs4348-mutex( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs4348-mutex-name, subtitle: cs4348-mutex-category, timeframe: cs4348-mutex-timeframe, skills: cs4348-mutex-skills, location: cs4348-mutex-location, above: item-heading-above, below: item-heading-below, ) #let cs4348-scheduling-category = Course_Project #let cs4348-scheduling-location = utd-title #let cs4348-scheduling-name = l("cs4348-scheduling") #let cs4348-scheduling-skills = (C, Linux) #let cs4348-scheduling-timeframe = [#January -- #May 2024] #let cs4348-scheduling( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs4348-scheduling-name, subtitle: cs4348-scheduling-category, timeframe: cs4348-scheduling-timeframe, skills: cs4348-scheduling-skills, location: cs4348-scheduling-location, above: item-heading-above, below: item-heading-below, ) #let cs4459-hacking-category = Course_Projects #let cs4459-hacking-location = utd-title #let cs4459-hacking-name = l("cs4459-hacking") #let cs4459-hacking-skills = (Python_pwntools, x86, GDB, Linux, Git, C) #let cs4459-hacking-timeframe = [#January -- #May 2025] #let cs4459-hacking( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs4459-hacking-name, subtitle: cs4459-hacking-category, timeframe: cs4459-hacking-timeframe, skills: cs4459-hacking-skills, location: cs4459-hacking-location, above: item-heading-above, below: item-heading-below, ) #let cs6378-database-category = Course_Group_Project #let cs6378-database-location = utd-title #let cs6378-database-name = l("database") #let cs6378-database-name-cs6378 = l("cs6378-database") #let cs6378-database-skills = ( Rust_Tokio_Serde, Nix_Flakes, TCP, Linux, GitHub, LaTeX, ) #let cs6378-database-timeframe = [#April -- #May 2025] #let cs6378-database( item-heading-above: 0em, item-heading-below: 0em, course: true, ) = item-heading( title: if course { cs6378-database-name-cs6378 } else { cs6378-database-name }, subtitle: cs6378-database-category, timeframe: cs6378-database-timeframe, skills: cs6378-database-skills, location: cs6378-database-location, above: item-heading-above, below: item-heading-below, ) #let cs6378-ordering-category = Course_Projects #let cs6378-ordering-location = utd-title #let cs6378-ordering-name = l("cs6378-ordering") #let cs6378-ordering-skills = ( Rust, Nix_Flakes, TCP, LaTeX_TikZ, Guix, Linux, Git, ) #let cs6378-ordering-timeframe = [#January -- #April 2025] #let cs6378-ordering( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: cs6378-ordering-name, subtitle: cs6378-ordering-category, timeframe: cs6378-ordering-timeframe, skills: cs6378-ordering-skills, location: cs6378-ordering-location, above: item-heading-above, below: item-heading-below, ) #let scoretracker-category = Senior_Project #let scoretracker-location = cvcs-title #let scoretracker-name = l("scoretracker") #let scoretracker-skills = ( JavaScript_ExpressJS, CSS, PostgreSQL, GitLab, Dokku, ) #let scoretracker-timeframe = [#May 2021 -- #March 2022] #let scoretracker( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: scoretracker-name, subtitle: scoretracker-category, timeframe: scoretracker-timeframe, skills: scoretracker-skills, location: scoretracker-location, above: item-heading-above, below: item-heading-below, ) #let provviz-category = Research_Lab_Project #let provviz-location = syssec-name #let provviz-name = l("provviz") #let provviz-skills = ( TypeScript, React_SigmaJS, Tailwind_CSS, ExpressJS, Docker_Compose, GitLab, ) #let provviz-timeframe = [#June 2025 -- #Present] #let provviz( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: provviz-name, subtitle: provviz-category, timeframe: provviz-timeframe, location: provviz-location, skills: provviz-skills, above: item-heading-above, below: item-heading-below, ) #let resume-category = Productivity #let resume-name = l("resume") #let resume-skills = (Typst, NixFlakes_flake-parts, Linux, Git) #let resume-timeframe = [#August 2024 -- #Present] #let resume(item-heading-above: 0em, item-heading-below: 0em) = item-heading( title: resume-name, subtitle: resume-category, timeframe: resume-timeframe, skills: resume-skills, above: item-heading-above, below: item-heading-below, ) #let server-category = Productivity #let server-name = l("server") #let server-skills = ( Linux, Docker, NixOS, Terraform, Git, Proxmox, Hetzner, Cloudflare, SOPS, ) #let server-timeframe = [2020 -- #Present] #let server(item-heading-above: 0em, item-heading-below: 0em) = item-heading( title: server-name, subtitle: server-category, timeframe: server-timeframe, skills: server-skills, above: item-heading-above, below: item-heading-below, ) #let syscfg-category = Productivity #let syscfg-name = l("syscfg") #let syscfg-skills = ( NixFlakes_flake-parts, Linux, Terraform, SOPS, Git, ) #let syscfg-timeframe = [#July 2024 -- #Present] #let syscfg( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: syscfg-name, subtitle: syscfg-category, timeframe: syscfg-timeframe, skills: syscfg-skills, above: item-heading-above, below: item-heading-below, ) #let workspace-category = Productivity #let workspace-name = l("workspace") #let workspace-skills = (NixFlakes_flake-parts, Linux, Git) #let workspace-timeframe = [#July 2025 -- #Present] #let workspace( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: workspace-name, subtitle: workspace-category, timeframe: workspace-timeframe, skills: workspace-skills, above: item-heading-above, below: item-heading-below, ) #let zipversioncontrol-category = Robotics_Team_Project #let zipversioncontrol-location = team1790-name #let zipversioncontrol-name = l("zipversioncontrol") #let zipversioncontrol-skills = (C_Sharp_WPF, Python, Git) #let zipversioncontrol-timeframe = [#June 2017 -- #April 2019] #let zipversioncontrol( item-heading-above: 0em, item-heading-below: 0em, ) = item-heading( title: zipversioncontrol-name, subtitle: zipversioncontrol-category, timeframe: zipversioncontrol-timeframe, skills: zipversioncontrol-skills, location: zipversioncontrol-location, above: item-heading-above, below: item-heading-below, )