My Gatsby Deployment pipeline / build-and-deploy (push) Successful in 1m4s
Replace the single Gatsby page with a dark, terminal-style agent that answers questions about Dennis's work from one curated knowledge base. There is no model and no network call, so answers cannot be invented. A plain "Classic view" and an optional light theme sit one click away. Site - Terminal UI (React island): typed answers, tool-call lines, slash commands, autocomplete, history, deep links, a short /oncall game - Content focused on what recruiters scan for; personal and employer-internal details are left out - No profile photo anywhere, including the new link-preview card and icons - Corrected facts from the old page (dates, titles, tenses, skill tiers) Tooling - Migrate Gatsby 5 to Astro 7 (Node 22.23+); builds in about 1 second - Self-host fonts, so visitors make no request to third parties - Link-preview card, favicon set, web manifest and a service-worker clean-up for returning visitors - Deploy workflow builds with npm ci on Node 22 and uploads dist/ - Track package-lock.json Quality - Tests for routing and for markup injection from visitor input - A content guard scans every reachable answer; the list of things that must never be published lives in a git-ignored local file Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
// Regenerates the favicon, touch icon and app icons from public/icons/icon-512.png.
|
|
// Run it after changing the source icon: node scripts/make-icons.mjs
|
|
|
|
import { writeFile } from 'node:fs/promises'
|
|
import { fileURLToPath } from 'node:url'
|
|
|
|
import sharp from 'sharp'
|
|
|
|
const root = fileURLToPath(new URL('../public/', import.meta.url))
|
|
const source = `${root}icons/icon-512.png`
|
|
const BACKGROUND = '#0a0d12'
|
|
|
|
const resize = (size) => sharp(source).resize(size, size)
|
|
|
|
await resize(32).toFile(`${root}favicon-32x32.png`)
|
|
await resize(192).toFile(`${root}icons/icon-192.png`)
|
|
// iOS fills transparent corners with black, so flatten onto the site background.
|
|
await resize(180)
|
|
.flatten({ background: BACKGROUND })
|
|
.toFile(`${root}apple-touch-icon.png`)
|
|
|
|
const manifest = {
|
|
name: 'Dennis Thiessen',
|
|
short_name: 'D. Thiessen',
|
|
start_url: '/',
|
|
display: 'minimal-ui',
|
|
background_color: BACKGROUND,
|
|
theme_color: BACKGROUND,
|
|
icons: [
|
|
{ src: '/icons/icon-192.png', sizes: '192x192', type: 'image/png' },
|
|
{ src: '/icons/icon-512.png', sizes: '512x512', type: 'image/png' },
|
|
],
|
|
}
|
|
await writeFile(
|
|
`${root}manifest.webmanifest`,
|
|
`${JSON.stringify(manifest, null, 2)}\n`
|
|
)
|
|
|
|
console.log('icons and manifest written to public/')
|