diff --git a/components/icons/icons.templ b/components/icons/icons.templ index 9c021fe..1d510ca 100644 --- a/components/icons/icons.templ +++ b/components/icons/icons.templ @@ -12,3 +12,19 @@ templ ArrowUpRight(className string) { } + +templ Github(className string) { + + + +} + +templ Gitea(className string) { + + + +} diff --git a/components/image.templ b/components/image.templ new file mode 100644 index 0000000..240dedd --- /dev/null +++ b/components/image.templ @@ -0,0 +1,16 @@ +package components + +templ Image(src, alt, caption string) { +
+ { + if caption != "" { +
+ { caption } +
+ } +
+} diff --git a/components/layout.templ b/components/layout.templ index fe8a24f..6e4bf1c 100644 --- a/components/layout.templ +++ b/components/layout.templ @@ -4,43 +4,38 @@ import ( "fmt" "personal-site/constants" "time" + "personal-site/components/icons" ) templ navbar(params *constants.LayoutParams) {
-
+ diff --git a/constants/projects.go b/constants/projects.go index 8996467..edce5ea 100644 --- a/constants/projects.go +++ b/constants/projects.go @@ -5,4 +5,7 @@ type Project struct { Name string Description string TechTags []string + LinkGitea string + LinkGithub string + HostedOn string } diff --git a/deploy.sh b/deploy.sh index bd4071e..69f2bcf 100755 --- a/deploy.sh +++ b/deploy.sh @@ -5,7 +5,7 @@ echo "Pulling latest code..." git pull echo "Building and restarting containers..." -docker compose up -d --build +docker compose up -d --build --remove-orphans echo "Cleaning up old images..." docker image prune -f diff --git a/main.go b/main.go index 8ad029c..c24fb23 100644 --- a/main.go +++ b/main.go @@ -27,13 +27,19 @@ func setupRoutesAndMiddleware() *gin.Engine { { Url: "https://derrickgee.dev/projects/support-ticket-demo", Name: "Support Ticket System", - Description: "", + Description: "A sample of a robust support ticket system with the option to OAuth for database access. Authenticated users will be able to see other user created tickets. Guest mode will store tickets locally in your browser.", + HostedOn: "Home Server", + LinkGitea: "https://git.kokopi.dev/kokopi/personal-support-ticket-system", + LinkGithub: "https://github.com/kokopi-dev/personal-support-ticket-system", TechTags: []string{"typescript", "react", "fastify", "tailwindcss", "sqlite", "vite", "bun"}, }, { Url: "/projects/dotfiles", Name: "Linux Dotfiles", Description: "Configurations for Linux", + HostedOn: "", + LinkGitea: "https://git.kokopi.dev/kokopi/dotfiles", + LinkGithub: "https://github.com/kokopi-dev/dotfiles", TechTags: []string{"Linux", "Lua", "Bash", "Python"}, }, } @@ -41,10 +47,10 @@ func setupRoutesAndMiddleware() *gin.Engine { page := pages.ProjectPage(projects) page.Render(c.Request.Context(), c.Writer) }) - // r.GET("/projects/dotfiles", func(c *gin.Context) { - // page := pages.Dotfiles() - // page.Render(c.Request.Context(), c.Writer) - // }) + r.GET("/projects/dotfiles", func(c *gin.Context) { + page := pages.Dotfiles() + page.Render(c.Request.Context(), c.Writer) + }) r.NoRoute(handlers.NotFoundHandler) return r } diff --git a/pages/dotfiles.templ b/pages/dotfiles.templ new file mode 100644 index 0000000..3a7debc --- /dev/null +++ b/pages/dotfiles.templ @@ -0,0 +1,47 @@ +package pages + +import ( + "personal-site/components" + "personal-site/components/icons" + "personal-site/constants" +) + +templ Dotfiles() { + {{ params := constants.NewLayoutParams("Dotfiles") }} + @components.MainLayout(params) { +
+
+

Dotfiles

+ +

+ I have been using Linux since 2017, and have gone through several distros. Pretty early on, I have only used window managers (wm) and Arch Linux. Over time, I have gone through bspwm on x11, hyprland on wayland, and mangowc on wayland. Since getting into programming, I have also strictly used only vim + neovim for hobby projects. +

+
+
+ @components.Image("/static/assets/images/dotfiles-1-1.webp", "dotfiles-1-1", "Arch Linux with mangowc, showing fastfetch") + @components.Image("/static/assets/images/dotfiles-1-2.webp", "dotfiles-1-2", "Arch Linux with mangowc, showing neovim and a custom rofi launcher") + @components.Image("/static/assets/images/dotfiles-2.webp", "dotfiles-2", "Arch Linux with hyprland") + @components.Image("/static/assets/images/dotfiles-3.webp", "dotfiles-3", "Arch Linux with bspwm") +
+
+ } +} diff --git a/pages/index.templ b/pages/index.templ index d782331..5a2c1e3 100644 --- a/pages/index.templ +++ b/pages/index.templ @@ -5,245 +5,207 @@ import "personal-site/constants" import "personal-site/components/icons" templ heroSection() { -
-

- available for work -

-

- Derrick Gee -

-

Full Stack Software Engineer

-

- - - - - Japan · US Citizen -

-

- Full-stack software engineer who ships — from backend APIs to polished frontends. Aligned with US timezones and based in Japan, building things that - matter. -

- -
+
+

+ available for work +

+

+ Derrick Gee +

+

Full Stack Software Engineer

+

+ + + + + Japan · US Citizen +

+

+ Full-stack software engineer who ships — from backend APIs to polished frontends. Aligned with US timezones and + based in Japan, building things that + matter. +

+ +
} templ aboutSection() { -
- -
-

- I'm a full-stack software engineer specializing in Python and C# Blazor — I work across the whole stack, - from backend APIs to server-side rendering to the UI. -

-

- I'm also a Linux and Neovim enthusiast, which means I care just as much about the craft of writing code as I do about shipping it. -

-
- Python - - C# - / Blazor - - Golang - FastAPI - Tailwindcss - Javascript - Lua - Neovim - Linux -
-
-
+
+ +
+

+ I'm a full-stack software engineer specializing in Python and C# Blazor — I work across the whole stack, + from backend APIs to server-side rendering to the UI. +

+

+ I'm also a Linux and Neovim enthusiast, which means I care just as much about the craft of writing code as I + do about shipping it. +

+
+ Python + + C# + / Blazor + + Golang + FastAPI + Tailwindcss + Javascript + Lua + Neovim + Linux +
+
+
} templ expSection() { -
- -
- // westbold -
-
-
-

- - Westbold · Remote -

-

Full Stack Software Engineer

-
- Jul 2021 — Present -
-

- Full-stack development across customer-facing - workflows, frontend architecture, and internal tooling. Focused on improving usability, reducing - friction, and modernizing the codebase. -

-
- C# - Blazor - Tailwindcss - Golang - Javascript - Python -
-
- // tenchijin -
-
-
-

- - Tenchijin · Remote -

-

Full Stack Software Engineer

-
- Dec 2020 — Sep 2021 -
-

- Backend development with some frontend on an - enterprise satellite data platform. Improved performance, rewrote core services, and documented - workflows for faster onboarding. -

-
- Python - Django - VueJS -
-
- // hennge -
-
-
-

- - Hennge · Hybrid -

-

Software Engineer Intern

-
- Sep 2020 — Nov 2020 -
-

- Contributed to a production enterprise email platform - and built internal proof-of-concept projects to explore cloud infrastructure. -

-
- Python - VueJS - Terraform - AWS -
-
-
-
+
+ +
+ // westbold +
+
+
+

+ + Westbold · Remote +

+

Full Stack Software Engineer

+
+ Jul 2021 — Present +
+

+ Full-stack development across customer-facing + workflows, frontend architecture, and internal tooling. Focused on improving usability, reducing + friction, and modernizing the codebase. +

+
+ C# + Blazor + Tailwindcss + Golang + Javascript + Python +
+
+ // tenchijin +
+
+
+

+ + Tenchijin · Remote +

+

Full Stack Software Engineer

+
+ Dec 2020 — Sep 2021 +
+

+ Backend development with some frontend on an + enterprise satellite data platform. Improved performance, rewrote core services, and documented + workflows for faster onboarding. +

+
+ Python + Django + VueJS +
+
+ // hennge +
+
+
+

+ + Hennge · Hybrid +

+

Software Engineer Intern

+
+ Sep 2020 — Nov 2020 +
+

+ Contributed to a production enterprise email platform + and built internal proof-of-concept projects to explore cloud infrastructure. +

+
+ Python + VueJS + Terraform + AWS +
+
+
+
} templ Index() { - {{ params := constants.NewLayoutParams("Home") }} - @components.MainLayout(params) { - - @heroSection() - @aboutSection() - @expSection() - } +@heroSection() +@aboutSection() +@expSection() +} } diff --git a/pages/projects.templ b/pages/projects.templ index ea81b9f..e757eaf 100644 --- a/pages/projects.templ +++ b/pages/projects.templ @@ -3,46 +3,80 @@ package pages import "personal-site/constants" import "fmt" import "personal-site/components" +import "personal-site/components/icons" templ projectCard(idx int, project constants.Project) { - -
-
- { project.Name } -
-

{ project.Description }

-
- for _, tag := range project.TechTags { - { tag } - } -
-
-
- - - -
-
+
+ +
+
+ { project.Name } +
+

{ project.Description }

+
+ for _, tag := range project.TechTags { + { tag } + } +
+ if project.HostedOn != "" { +

+ hosted on { project.HostedOn } +

+ } + if project.LinkGitea != "" || project.LinkGithub != "" { + + } +
+
+ @icons.ArrowUpRight("size-4") +
+
} templ ProjectPage(projects []constants.Project) { - {{ params := constants.NewLayoutParams("Home") }} - @components.MainLayout(params) { -
-

derrickgee.dev/projects

-

Projects Directory

-

- A collection of projects built across different languages and frameworks. - Each runs as an independent service. -

-
-
- for idx, p := range projects { - @projectCard(idx, p) - } - } + {{ params := constants.NewLayoutParams("Home") }} + @components.MainLayout(params) { +
+
+

derrickgee.dev/projects

+

Projects Directory

+

+ A collection of projects built across different languages and frameworks. + Each runs as an independent service. +

+
+
+ for idx, p := range projects { + @projectCard(idx, p) + } +
+ } } diff --git a/static/assets/images/dotfiles-1-1.webp b/static/assets/images/dotfiles-1-1.webp new file mode 100644 index 0000000..9e8665a Binary files /dev/null and b/static/assets/images/dotfiles-1-1.webp differ diff --git a/static/assets/images/dotfiles-1-2.webp b/static/assets/images/dotfiles-1-2.webp new file mode 100644 index 0000000..a48c6e1 Binary files /dev/null and b/static/assets/images/dotfiles-1-2.webp differ diff --git a/static/assets/images/dotfiles-2.webp b/static/assets/images/dotfiles-2.webp new file mode 100644 index 0000000..0c4bd5e Binary files /dev/null and b/static/assets/images/dotfiles-2.webp differ diff --git a/static/assets/images/dotfiles-3.webp b/static/assets/images/dotfiles-3.webp new file mode 100644 index 0000000..1027255 Binary files /dev/null and b/static/assets/images/dotfiles-3.webp differ