Source for craigthacker.dev — my personal engineering site covering who I am, what I work on, and the projects I care about.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, static export) |
| Styling | Tailwind CSS v4 |
| Hosting | GitHub Pages via GitHub Actions |
| Theme | Dark/light via next-themes |
| Icons | Lucide React |
app/ # Next.js App Router pages
memes/ # Memes gallery
globals.css # Tailwind imports + base styles
layout.tsx # Root layout (ThemeProvider, metadata)
page.tsx # Homepage
providers.tsx # next-themes ThemeProvider
components/ # Shared React components
about.tsx # About / bio section
footer.tsx # Site footer
hero.tsx # Hero section (photo, intro, CTAs)
libre-devops.tsx # Libre DevOps callout section
navbar.tsx # Site header
skills.tsx # Skills grid
social-links.tsx # Social icon strip (config-driven)
terminal.tsx # Animated terminal widget
theme-toggle.tsx # Dark/light toggle button
lib/
site.ts # Site config + social links definition
public/ # Static assets (photo, meme images)
npm install
npm run devOpen http://localhost:3000.
npm run build # static export → out/
npm run lint # ESLint
npx tsc --noEmit # type checkUpdate bio or links — edit lib/site.ts for URLs/config, or the relevant component in components/ for copy changes.
Add a social link — add an entry to socialLinks in lib/site.ts and map the icon key in components/social-links.tsx.
Add a meme — drop the image into public/memes/ and increment the array length in components/memes/page.tsx.
Issues and pull requests are welcome. Use the issue templates for bug reports, feature requests, or content change suggestions.
MIT