prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

commit 167073c01010d60b6b9e5690c4edc7a0cb311a9f
parent fbcdb246a430ba8df8fb11667fb8c0c26c3e213f
Author: Damian Myrda <damian@prime8.dev>
Date:   Tue, 17 Feb 2026 21:59:13 -0600

ci: auto-deploy on push; fix api networking, dates and readme images

Diffstat:
A.gitlab-ci.yml | 13+++++++++++++
Menv.example | 2++
Msrc/blogs/building-my-portfolio.md | 2+-
Msrc/config/experience.ts | 4++--
Msrc/constants/website.ts | 2+-
Msrc/external/git.ts | 10++++++++--
Msrc/layouts/tabs/Experience.astro | 4+++-
Msrc/layouts/tabs/Projects.astro | 2+-
Msrc/pages/projects/[id].astro | 8+++++---
Msrc/tabs/projects.ts | 5++++-
10 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml @@ -0,0 +1,13 @@ +stages: + - deploy + +deploy: + stage: deploy + script: + - | + curl -X POST "${DOKPLOY_DEPLOY_URL}" \ + -H "Content-Type: application/json" \ + -H "X-Gitlab-Event: Push Hook" \ + -d '{"ref": "refs/heads/master"}' + only: + - master diff --git a/env.example b/env.example @@ -1 +1,3 @@ +NODE_ENV=dev|prod +GITLAB_HOST=https://gitlab.com WAKATIME_API_KEY=your_wakatime_api_key_here diff --git a/src/blogs/building-my-portfolio.md b/src/blogs/building-my-portfolio.md @@ -2,7 +2,7 @@ id: building-my-portfolio title: Building a TUI-Inspired Portfolio description: How I built this terminal-style portfolio with Astro -date: 2026-01-16 +date: 2026-01-31 tags: - Astro - TypeScript diff --git a/src/config/experience.ts b/src/config/experience.ts @@ -15,9 +15,9 @@ export interface Experience { export const experience = [ { id: "stealth", - company: "Stealth", + company: "Stealth Startup", role: "SWE Intern", - startDate: "2025-02", + startDate: "2026-02", description: [], tech: [], }, diff --git a/src/constants/website.ts b/src/constants/website.ts @@ -1,3 +1,3 @@ -export const SITE_DOMAIN = "prime8.dev"; +export const SITE_DOMAIN = "www.prime8.dev"; export const SITE_URL = `https://${SITE_DOMAIN}`; diff --git a/src/external/git.ts b/src/external/git.ts @@ -15,7 +15,7 @@ export async function fetchGitMetadataForProject( project: Project, ): Promise<GitMetadata | null> { try { - const response = await fetch(project.apiUrl, { + const response = await fetch(getInternalGitLabUrl(project.apiUrl), { headers: { "User-Agent": "prime8dev-portfolio" }, }); @@ -43,12 +43,18 @@ export async function fetchGitMetadataForProject( } } +function getInternalGitLabUrl(externalUrl: string): string { + const internalHost = process.env.GITLAB_HOST; + if (!internalHost) return externalUrl; + return externalUrl.replace(/https?:\/\/[^/]+/, internalHost); +} + async function fetchReadme( urls: RepoUrls, readmeUrl: string, ): Promise<string | null> { try { - const response = await fetch(readmeUrl, { + const response = await fetch(getInternalGitLabUrl(readmeUrl), { headers: { "User-Agent": "prime8dev-portfolio" }, }); if (!response.ok) return null; diff --git a/src/layouts/tabs/Experience.astro b/src/layouts/tabs/Experience.astro @@ -74,7 +74,9 @@ while (current <= timelineEnd) { <span class="exp-dates"> {startStr} → {endStr} </span> - <span class="exp-duration">{months} months</span> + <span class="exp-duration"> + {months} {months === 1 ? "month" : "months"} + </span> {exp.url && ( <a class="external-link" diff --git a/src/layouts/tabs/Projects.astro b/src/layouts/tabs/Projects.astro @@ -321,7 +321,7 @@ const metadata = Object.fromEntries( } .readme-content :global(img) { - max-width: 100%; + max-width: min(720px, 100%); height: auto; margin: 12px 0; } diff --git a/src/pages/projects/[id].astro b/src/pages/projects/[id].astro @@ -7,7 +7,7 @@ import { SITE_URL } from "../../constants/website"; import schemas from "../../schemas/index"; import { getTagClass } from "../../utils/tags"; -import { parseMarkdown } from "../../utils/markdown"; +import { parseMarkdown, removeFirstH1 } from "../../utils/markdown"; const project = projects.find((p) => p.id === Astro.params.id); if (!project) { return new Response(null, { @@ -59,7 +59,9 @@ const { getSchemaForProject, getBreadcrumbSchema } = schemas.project; <div class="readme-content"> { metadata?.readme ? ( - <Fragment set:html={parseMarkdown(metadata.readme)} /> + <Fragment + set:html={parseMarkdown(removeFirstH1(metadata.readme))} + /> ) : ( <p class="color-dim">README not available</p> ) @@ -250,7 +252,7 @@ const { getSchemaForProject, getBreadcrumbSchema } = schemas.project; } .readme-content :global(img) { - max-width: 100%; + max-width: min(1024px, 100%); height: auto; margin: 16px 0; } diff --git a/src/tabs/projects.ts b/src/tabs/projects.ts @@ -58,7 +58,10 @@ function select(index: number): void { function setupClicks(): void { $$("#projects .list-item").forEach((item, i) => { - item.addEventListener("click", () => select(i)); + item.addEventListener("click", () => { + select(i); + setRoute("projects", getId(i)); + }); }); }