feat: terminal-noir redesign — widget system + design token overhaul
Replace cyan-green modern theme with terminal-noir aesthetic aligned to style-guide.md. Hard edges, monospace-first, linear transitions, no gradients. Introduce Widget component as the single repeatable section primitive: title bar with horizontal rule, optional badge/meta — all pages and sections now use this pattern (Glance-inspired data-driven layout). Design system changes (globals.css): - Palette: #0a0a0a bg, #111111 surface, #00cc44 status green, #cc2200 alert red - Drop Montserrat; Source Code Pro primary, system sans for prose only - Transitions: linear 120ms; no eased animations, no border-radius Component changes: - Nav: flat, border-bottom only, lowercase links - Hero: 56px square photo, status dot, @ email glyph - ProjectCard: flat bordered card, 2-col grid, no gradient tile - Skills: key-value rows with dot-separated values - Footer: minimal text links Pages: all sections wrapped in Widget; homelab uses gap-px grid for at-a-glance, services, and ADRs sections. Archive uses flat list layout. Data: remove gradient field from Project type; add optional year field
This commit is contained in:
@@ -2,10 +2,11 @@ import type { Metadata } from "next";
|
||||
import Hero from "@/components/Hero";
|
||||
import Skills from "@/components/Skills";
|
||||
import ProjectCard from "@/components/ProjectCard";
|
||||
import Widget from "@/components/Widget";
|
||||
import { featuredProjects } from "@/data/projects";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Tyler Koenig | Portfolio",
|
||||
title: "Tyler Koenig",
|
||||
description:
|
||||
"SOC Helpdesk I by day, building beyond the title. Projects in AI tooling, mobile apps, infrastructure, and more.",
|
||||
};
|
||||
@@ -15,18 +16,13 @@ export default function Home() {
|
||||
<>
|
||||
<Hero />
|
||||
<Skills />
|
||||
|
||||
<section aria-labelledby="projects-heading">
|
||||
<h2
|
||||
id="projects-heading"
|
||||
className="font-mono text-xs text-[var(--color-green)] tracking-widest uppercase mb-10"
|
||||
>
|
||||
Projects
|
||||
</h2>
|
||||
{featuredProjects.map((project, i) => (
|
||||
<ProjectCard key={project.slug} project={project} reversed={i % 2 !== 0} />
|
||||
))}
|
||||
</section>
|
||||
<Widget title="projects" badge={featuredProjects.length}>
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
||||
{featuredProjects.map((project) => (
|
||||
<ProjectCard key={project.slug} project={project} />
|
||||
))}
|
||||
</div>
|
||||
</Widget>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user