16 Commits

Author SHA1 Message Date
52cb73be47 Merge pull request #33 from jimeh/dependabot/npm_and_yarn/tar-7.5.9
Bump tar from 7.5.3 to 7.5.9
2026-02-19 00:33:49 +00:00
dependabot[bot]
3e689ed0b2 Bump tar from 7.5.3 to 7.5.9
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.3 to 7.5.9.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.3...v7.5.9)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-19 00:32:03 +00:00
5d7068ae1d Merge pull request #34 from jimeh/dependabot/npm_and_yarn/npm-development-ad1342459c
Bump the npm-development group across 1 directory with 7 updates
2026-02-19 00:30:52 +00:00
dependabot[bot]
201700f27b Bump the npm-development group across 1 directory with 7 updates
Bumps the npm-development group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.39.2` | `10.0.1` |
| [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.1.18` | `4.2.0` |
| [eslint](https://github.com/eslint/eslint) | `9.39.2` | `10.0.0` |
| [eslint-plugin-astro](https://github.com/ota-meshi/eslint-plugin-astro) | `1.5.0` | `1.6.0` |
| [prettier](https://github.com/prettier/prettier) | `3.7.4` | `3.8.1` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.53.0` | `8.56.0` |



Updates `@eslint/js` from 9.39.2 to 10.0.1
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/commits/HEAD/packages/js)

Updates `@tailwindcss/vite` from 4.1.18 to 4.2.0
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.0/packages/@tailwindcss-vite)

Updates `eslint` from 9.39.2 to 10.0.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.2...v10.0.0)

Updates `eslint-plugin-astro` from 1.5.0 to 1.6.0
- [Release notes](https://github.com/ota-meshi/eslint-plugin-astro/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-astro/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-astro/compare/v1.5.0...v1.6.0)

Updates `prettier` from 3.7.4 to 3.8.1
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.7.4...3.8.1)

Updates `tailwindcss` from 4.1.18 to 4.2.0
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.0/packages/tailwindcss)

Updates `typescript-eslint` from 8.53.0 to 8.56.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 10.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-development
- dependency-name: "@tailwindcss/vite"
  dependency-version: 4.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: eslint
  dependency-version: 10.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-development
- dependency-name: eslint-plugin-astro
  dependency-version: 1.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: prettier
  dependency-version: 3.8.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: tailwindcss
  dependency-version: 4.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
- dependency-name: typescript-eslint
  dependency-version: 8.56.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-19 00:29:42 +00:00
540efeac89 Merge pull request #26 from jimeh/dependabot/npm_and_yarn/tar-7.5.7
Bump tar from 7.5.3 to 7.5.7
2026-02-19 00:28:36 +00:00
0ff81cccbd Merge pull request #29 from jimeh/dependabot/github_actions/actions/setup-node-6.2.0
Bump actions/setup-node from 6.1.0 to 6.2.0
2026-02-19 00:28:17 +00:00
501f89d3a0 Merge pull request #28 from jimeh/dependabot/github_actions/actions/checkout-6.0.2
Bump actions/checkout from 6.0.1 to 6.0.2
2026-02-19 00:28:04 +00:00
ba92e6c212 Merge pull request #31 from jimeh/dependabot/npm_and_yarn/npm-production-5c46221419
Bump the npm-production group with 3 updates
2026-02-19 00:27:48 +00:00
7bed32b60a Merge pull request #32 from jimeh/feat/theme-toggle-sun-moon-icon
feat: replace theme toggle system icon with custom sun-moon SVG
2026-02-19 00:24:15 +00:00
9652714455 feat: replace theme toggle system icon with custom sun-moon SVG
The computer-desktop icon for the system/auto theme state didn't visually
relate to the sun (light) and moon (dark) icons used for the other states.

Replace it with a custom half-sun icon that shows a sun circle with the
right half filled dark and left-side rays only, conveying "both light and
dark" to better represent the automatic/system theme preference.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 00:21:55 +00:00
dependabot[bot]
b33a02991c Bump the npm-production group with 3 updates
Bumps the npm-production group with 3 updates: [@astrojs/sitemap](https://github.com/withastro/astro/tree/HEAD/packages/integrations/sitemap), [@iconify-json/simple-icons](https://github.com/iconify/icon-sets) and [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro).


Updates `@astrojs/sitemap` from 3.6.1 to 3.7.0
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/integrations/sitemap/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/@astrojs/sitemap@3.7.0/packages/integrations/sitemap)

Updates `@iconify-json/simple-icons` from 1.2.66 to 1.2.69
- [Commits](https://github.com/iconify/icon-sets/commits)

Updates `astro` from 5.16.11 to 5.17.1
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/astro@5.17.1/packages/astro)

---
updated-dependencies:
- dependency-name: "@astrojs/sitemap"
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-production
- dependency-name: "@iconify-json/simple-icons"
  dependency-version: 1.2.69
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-production
- dependency-name: astro
  dependency-version: 5.17.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm-production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-01 07:29:23 +00:00
dependabot[bot]
fc393caa5b Bump actions/setup-node from 6.1.0 to 6.2.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](395ad32622...6044e13b5d)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-01 07:28:21 +00:00
dependabot[bot]
b6dfa4b787 Bump actions/checkout from 6.0.1 to 6.0.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8e8c483db8...de0fac2e45)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-01 07:28:13 +00:00
dependabot[bot]
c4bb1ae3f1 Bump tar from 7.5.3 to 7.5.7
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.3 to 7.5.7.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.3...v7.5.7)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-01 02:51:10 +00:00
3a64fee42e Merge pull request #27 from jimeh/feat/astro-experimental-fonts 2026-02-01 02:50:04 +00:00
e5d2604edc feat: migrate to Astro's experimental font API
Replace @fontsource-variable NPM packages with Astro's built-in
experimental font API using the Fontsource provider. Fonts are now
fetched at build time, cached locally, and served with the site.

This provides automatic @font-face generation, preload link injection,
and metric-adjusted fallback fonts (size-adjust, ascent-override, etc.)
to reduce CLS during font loading.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 02:43:48 +00:00
9 changed files with 486 additions and 528 deletions

View File

@@ -15,12 +15,12 @@ jobs:
private-key: ${{ secrets.BOT_PRIVATE_KEY }}
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
token: ${{ steps.app-token.outputs.token }}
- name: Setup Node.js
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version-file: ".node-version"
cache: "npm"

View File

@@ -47,7 +47,7 @@ The site is built to `dist/` and deployed to Cloudflare Workers.
- **Astro 5.x** static site generator
- **Tailwind CSS 4.x** for styling with dark mode support
- **astro-icon** with Heroicons and Simple Icons for icons
- **astro-icon** with Heroicons, Simple Icons, and custom local SVGs (`src/icons/`)
- **Content Collections** for spec markdown files
- **TypeScript** throughout
- **Node.js** as JavaScript runtime (managed via mise)

View File

@@ -1,4 +1,4 @@
import { defineConfig } from "astro/config";
import { defineConfig, fontProviders } from "astro/config";
import tailwindcss from "@tailwindcss/vite";
import sitemap from "@astrojs/sitemap";
import icon from "astro-icon";
@@ -10,4 +10,29 @@ export default defineConfig({
vite: {
plugins: [tailwindcss()],
},
experimental: {
fonts: [
{
provider: fontProviders.fontsource(),
name: "Bricolage Grotesque",
cssVariable: "--font-bricolage",
weights: ["200 800"],
fallbacks: ["system-ui", "sans-serif"],
},
{
provider: fontProviders.fontsource(),
name: "DM Sans",
cssVariable: "--font-dm-sans",
weights: ["100 1000"],
fallbacks: ["system-ui", "sans-serif"],
},
{
provider: fontProviders.fontsource(),
name: "JetBrains Mono",
cssVariable: "--font-jetbrains",
weights: ["100 800"],
fallbacks: ["SF Mono", "Consolas", "monospace"],
},
],
},
});

926
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -14,13 +14,10 @@
"astro": "astro"
},
"dependencies": {
"@astrojs/sitemap": "^3.6.1",
"@fontsource-variable/bricolage-grotesque": "^5.2.10",
"@fontsource-variable/dm-sans": "^5.2.8",
"@fontsource-variable/jetbrains-mono": "^5.2.8",
"@astrojs/sitemap": "^3.7.0",
"@iconify-json/heroicons": "^1.2.3",
"@iconify-json/simple-icons": "^1.2.65",
"astro": "^5.16.11",
"@iconify-json/simple-icons": "^1.2.69",
"astro": "^5.17.1",
"astro-icon": "^1.1.5",
"rehype-autolink-headings": "^7.1.0",
"rehype-slug": "^6.0.0",
@@ -32,18 +29,18 @@
},
"devDependencies": {
"@astrojs/check": "^0.9.6",
"@eslint/js": "^9.39.2",
"@eslint/js": "^10.0.1",
"@tailwindcss/typography": "^0.5.19",
"@tailwindcss/vite": "^4.1.18",
"@tailwindcss/vite": "^4.2.0",
"@types/semver": "^7.7.1",
"eslint": "^9.39.2",
"eslint-plugin-astro": "^1.5.0",
"prettier": "^3.7.4",
"eslint": "^10.0.0",
"eslint-plugin-astro": "^1.6.0",
"prettier": "^3.8.1",
"prettier-plugin-astro": "^0.14.1",
"svgo": "^4.0.0",
"tailwindcss": "^4.1.18",
"tsx": "^4.21.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.52.0"
"typescript-eslint": "^8.56.0"
}
}

View File

@@ -14,11 +14,7 @@ import { Icon } from "astro-icon/components";
>
<Icon name="heroicons:sun" data-theme-icon="light" class="hidden w-5 h-5" />
<Icon name="heroicons:moon" data-theme-icon="dark" class="hidden w-5 h-5" />
<Icon
name="heroicons:computer-desktop"
data-theme-icon="auto"
class="hidden w-5 h-5"
/>
<Icon name="sun-moon" data-theme-icon="auto" class="hidden w-5 h-5" />
</button>
<!-- Tooltip -->
<div

8
src/icons/sun-moon.svg Normal file
View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<!-- Circle outline -->
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"/>
<!-- Right half filled (dark/moon side) -->
<path fill="currentColor" d="M12 8.25a3.75 3.75 0 0 1 0 7.5z"/>
<!-- Left-side sun rays (top, top-left, left, bottom-left, bottom) -->
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 3v2.25M7.227 7.227 5.636 5.636M5.25 12H3M7.227 16.773l-1.591 1.591M12 18.75V21"/>
</svg>

After

Width:  |  Height:  |  Size: 633 B

View File

@@ -1,7 +1,5 @@
---
import "@fontsource-variable/bricolage-grotesque";
import "@fontsource-variable/dm-sans";
import "@fontsource-variable/jetbrains-mono";
import { Font } from "astro:assets";
import "../styles/global.css";
import { config } from "../config";
@@ -44,6 +42,14 @@ const canonicalUrl = Astro.url.href;
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<!-- Fonts -->
<Font
cssVariable="--font-bricolage"
preload={[{ weight: "700" }, { weight: "800" }]}
/>
<Font cssVariable="--font-dm-sans" preload={[{ weight: "400" }]} />
<Font cssVariable="--font-jetbrains" preload={[{ weight: "400" }]} />
<!-- Slot for page-specific head content -->
<slot name="head" />

View File

@@ -8,10 +8,10 @@
--color-accent: theme(colors.sky.500);
--color-accent-light: theme(colors.sky.400);
/* Fonts - self-hosted via fontsource */
--font-display: "Bricolage Grotesque Variable", system-ui, sans-serif;
--font-sans: "DM Sans Variable", system-ui, sans-serif;
--font-mono: "JetBrains Mono Variable", "SF Mono", Consolas, monospace;
/* Fonts - via Astro experimental font API (fontsource provider) */
--font-display: var(--font-bricolage);
--font-sans: var(--font-dm-sans);
--font-mono: var(--font-jetbrains);
/* Sizing */
--header-height: 4rem;