Skip to content

Latest commit

 

History

History
66 lines (45 loc) · 2.12 KB

File metadata and controls

66 lines (45 loc) · 2.12 KB

jk.com

Personal site and blog for Jayson Knight, built on a modern edge-first stack.


Tech Stack

Layer Technology
Framework Astro 7 — server-rendered, edge-optimised
UI Components Svelte 5
Styling Tailwind CSS 4
Language TypeScript 6
Runtime / Deploy Cloudflare Workers (via @astrojs/cloudflare)
CMS EmDash — headless blog CMS for Astro
Database Cloudflare D1 (SQLite at the edge)
Media Storage Cloudflare R2
Edge Cache / Sessions Cloudflare KV
Analytics Cloudflare Analytics Engine
Build tooling Vite 8 w/ Rolldown (Rust compiler, default in Astro 7)
Fonts Google Fonts via Astro's built-in Fonts API (Space Grotesk, JetBrains Mono)
API layer Hono
Validation Zod 4
Syntax highlighting Shiki 4

Blog

The blog is powered by EmDash, a headless CMS built for Astro. Content is stored in a Cloudflare D1 database; media assets live in R2.


Content Conventions

No emoji in copy, UI chrome, or documentation — icons use the mono-glyph system (▸ ▾ • → █) documented in the Phosphorous design system. Adding emoji anywhere in this repo requires explicit approval via a GitHub issue or PR.


Getting Started

# Install dependencies
npm install

# Start local dev server
npm run dev

# Build for production
npm run build

# Run unit tests
npm run test

# Deploy to Cloudflare Workers
npm run deploy

Requires Node ≥ 24 and a Cloudflare account with D1, R2, KV, and Analytics Engine resources provisioned. See wrangler.jsonc for binding names and npm run db:create to initialise the D1 database.


Environment

Copy .env.example to .env and populate the required values. Secrets should be set via wrangler secret put for production deployments.