Files
portfolio/src/pages/projects.astro
T
lerko 32455bf7a7 feat(design): reader view — strip terminal chrome, add typography controls
Replace monospace-terminal aesthetic with clean reader layout. System
sans-serif default, typeface picker (sans/serif/mono) with per-face
optical tuning. Warm color palettes (slate dark, bone light), crafted
link underlines, WCAG AA contrast on all text tiers. Semantic HTML
throughout: proper heading hierarchy, <time> elements, role=group,
<dl>/<table>/<article> where appropriate. Net -140 lines.
2026-05-24 18:28:02 -04:00

65 lines
2.0 KiB
Plaintext

---
import Base from "@/layouts/Base.astro";
import Nav from "@/components/Nav.astro";
import Footer from "@/components/Footer.astro";
import Widget from "@/components/Widget.astro";
import ProjectCard from "@/components/ProjectCard.astro";
import { featuredProjects, archiveProjects } from "@/data/projects";
---
<Base
title="Projects | Tyler Koenig"
description="Featured projects and earlier work — homelab, open-pact, helm, and bootcamp/experiment archive."
>
<Nav slot="nav" />
<div class="mb-4lh">
<h1 class="text-xl font-bold mb-half-lh">Projects</h1>
<p class="text-[var(--color-text-label)] leading-relaxed max-w-xl">
Featured work first. Earlier experiments, browser extensions, and bootcamp projects below — kept for context.
</p>
</div>
<Widget title="Featured" badge={featuredProjects.length} as="section">
<div class="flex flex-col">
{featuredProjects.map((project) => (
<ProjectCard project={project} />
))}
</div>
</Widget>
<Widget title="Archive" badge={archiveProjects.length} as="section">
<div class="flex flex-col gap-2lh">
{archiveProjects.map((project) => (
<div>
<div class="flex items-baseline gap-1ch mb-half-lh">
{project.year && (
<span class="text-[var(--color-text-dim)] shrink-0">
{project.year}
</span>
)}
<h3>
<a
href={project.githubUrl}
target="_blank"
rel="noopener noreferrer"
class="font-semibold underline hover:text-[var(--color-text-label)]"
>
{project.title}
</a>
</h3>
</div>
<p class="text-[var(--color-text-label)] leading-relaxed mb-half-lh">
{project.description}
</p>
<p class="text-[var(--color-text-dim)]">
{project.tags.join(" · ")}
</p>
</div>
))}
</div>
</Widget>
<Footer slot="footer" />
</Base>