Skip to content

feat(astro): scaffold static Astro site for migration#82

Merged
ncrmro merged 8 commits into
mainfrom
worktree-recursive-toasting-puddle
May 16, 2026
Merged

feat(astro): scaffold static Astro site for migration#82
ncrmro merged 8 commits into
mainfrom
worktree-recursive-toasting-puddle

Conversation

@ncrmro

@ncrmro ncrmro commented May 13, 2026

Copy link
Copy Markdown
Owner

Summary

Phase 1 of the Next.js → Bun + Astro + Cloudflare Workers migration: a fully-static Astro 6 app under astro/, deployed in parallel to the existing Next.js site at a staging subdomain.

  • All public routes ported: /, /about, /posts, /posts/{[slug],food,tech,travel}, /projects + 4 sub-pages, /resume, /rss.xml, /sitemap-index.xml.
  • Posts source-of-truth becomes MDX files in astro/src/content/blog/ (content collection). Resume jobs likewise via a second collection sourced from public/jobs/*.md.
  • Tailwind v4 via @tailwindcss/vite. Umami analytics ported into BaseHead; OG/Twitter metadata, manifest, favicon set, R2 image URLs preserved verbatim.
  • Devshell: bun added to flake.nix.
  • LFS: .gitattributes extended with webp/avif for new image authoring workflow.

A single placeholder MDX keeps the blog collection non-empty so the build is warning-clean. The intended migration step (separate, by hand) is npm run sync-posts -- -d astro/src/content/blog followed by .md.mdx rename, then delete the placeholder.

Out of scope for phase 1 (stays on Next.js until phase 2): dashboard, journal, auth, R2 upload API, posts CRUD UI, sync API endpoints, PWA service worker. DNS cutover to root domain is a separate later change.

Plan file: ~/.claude/plans/recursive-toasting-puddle.md.

Test plan

  • cd astro && bun install && bun run build produces clean output (verified locally).
  • bun run dev renders all routes; navbar links, RSS feed, sitemap are correct.
  • bun run deploy lands at ncrmro-website-astro.workers.dev; smoke test each public URL returns 200.
  • After running sync-posts dump, audit posts for stray component refs: rg '<[A-Z][a-zA-Z]+' astro/src/content/blog/.
  • Compare visible text of post pages against the production Next.js site for parity.
  • Configure astro.ncrmro.com custom domain in Cloudflare dashboard; verify TLS + cache.

🤖 Generated with Claude Code

ncrmro and others added 2 commits May 13, 2026 12:12
Provide bun in the dev shell so the upcoming Astro app (which uses
bun for installs and `bun run` scripts) works inside the standard
devshell without ad-hoc PATH munging.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop a fully-static Astro 6 + Cloudflare Workers app under `astro/`,
in parallel to the existing Next.js site, as phase 1 of the migration
plan. Posts now live as MDX files in a content collection rather than
the Turso DB; the existing Next.js site stays online and writable
until the Astro deploy reaches parity, at which point DNS swaps.

Public routes ported: /, /about, /posts, /posts/{[slug],food,tech,
travel}, /projects + 4 sub-pages, /resume, /rss.xml, /sitemap-index.xml.
Resume jobs become a second content collection sourced from the
existing public/jobs markdown.

Tailwind v4 via @tailwindcss/vite for parity with the Next.js styling.
Umami analytics ported into BaseHead; Google Analytics and PostHog
deferred. OG/Twitter metadata, manifest, favicon set, R2 image URLs
preserved verbatim (no asset migration this phase).

A single placeholder MDX keeps the `blog` collection non-empty so the
build is warning-clean before `npm run sync-posts -- -d astro/src/
content/blog` is run to populate real posts. Out of scope: dashboard,
journal, auth, R2 uploads, posts CRUD — all stay on Next.js.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented May 13, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
ncrmro-website e13f8bf May 16 2026, 01:25 PM

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Scaffolds a new fully-static Astro app (built with Bun, deployed via Cloudflare Workers) under astro/ to run in parallel with the existing Next.js site as the first phase of the migration.

Changes:

  • Added Bun to the Nix devshell for local development.
  • Introduced a new Astro project with Cloudflare Wrangler config, Tailwind styling, layouts/components, and content collections for blog + resume.
  • Added initial migrated content/assets (jobs, posts, images) plus repo ignore/LFS adjustments.

Reviewed changes

Copilot reviewed 140 out of 150 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
flake.nix Adds bun to the devshell toolchain.
astro/wrangler.jsonc Cloudflare Workers deployment config for the Astro build.
astro/tsconfig.json Astro TS config (currently references generated worker types).
astro/src/styles/global.css Global Tailwind import + base font family.
astro/src/pages/rss.xml.js RSS feed endpoint backed by the blog content collection.
astro/src/pages/resume.astro Resume page rendering jobs collection entries.
astro/src/pages/projects/meze.astro Project detail page.
astro/src/pages/projects/latinum.astro Project detail page.
astro/src/pages/projects/keystone.astro Project detail page.
astro/src/pages/projects/index.astro Projects index page.
astro/src/pages/projects/catalyst.astro Project detail page.
astro/src/pages/posts/travel.astro Category page for travel posts.
astro/src/pages/posts/tech.astro Category page for tech posts.
astro/src/pages/posts/index.astro Posts index page.
astro/src/pages/posts/food.astro Category page for food posts.
astro/src/pages/posts/[slug].astro Blog post route using static paths + content rendering.
astro/src/pages/index.astro Home page listing posts.
astro/src/pages/about.astro About page route.
astro/src/layouts/ProjectLayout.astro Shared layout for project subpages.
astro/src/layouts/BlogPost.astro Starter blog layout (currently appears unused).
astro/src/layouts/BaseLayout.astro Base layout wiring head metadata + navbar + slot.
astro/src/env.d.ts Cloudflare runtime locals typing (currently missing Env).
astro/src/data/techUrls.ts Map of tech badge labels to reference URLs.
astro/src/data/projects.ts Projects metadata used by the projects index.
astro/src/content/jobs/2020_08_01_Merck.md Resume job content entry.
astro/src/content/jobs/2019_12_01_Embold-Health.md Resume job content entry.
astro/src/content/jobs/2019_01_01_Travis.md Resume job content entry.
astro/src/content/jobs/2018_08_01_Shell.md Resume job content entry.
astro/src/content/jobs/2018_02_01_Poetic.md Resume job content entry.
astro/src/content/jobs/2017_11_01_Pycon-India.md Resume job content entry.
astro/src/content/jobs/2017_05_01_Pathlight.md Resume job content entry.
astro/src/content/blog/placeholder.mdx Placeholder blog post to keep the collection non-empty.
astro/src/content.config.ts Content collections + Zod schemas for blog/jobs.
astro/src/consts.ts Site constants (title/description/url).
astro/src/components/SmallBadge.astro Badge component for tech tags.
astro/src/components/PostListItem.astro Post list item component for post indexes.
astro/src/components/Navbar.astro Primary site navbar + social links.
astro/src/components/JobItem.astro Resume job renderer (markdown + tech badges).
astro/src/components/Icons/Twitter.astro Twitter icon component.
astro/src/components/Icons/Linkedin.astro LinkedIn icon component.
astro/src/components/Icons/Instagram.astro Instagram icon component.
astro/src/components/Icons/Github.astro GitHub icon component.
astro/src/components/HeaderLink.astro Starter header link component (active state).
astro/src/components/Header.astro Starter header/navigation (currently appears unused).
astro/src/components/FormattedDate.astro Date formatting component.
astro/src/components/Footer.astro Starter footer (currently appears unused / placeholder).
astro/src/components/CategoryPosts.astro Category post list component by tag.
astro/src/components/BaseHead.astro Shared head metadata (OG/Twitter/manifest/fonts/Umami).
astro/src/assets/blog-placeholder-about.jpg LFS placeholder image asset.
astro/src/assets/blog-placeholder-5.jpg LFS placeholder image asset.
astro/src/assets/blog-placeholder-4.jpg LFS placeholder image asset.
astro/src/assets/blog-placeholder-3.jpg LFS placeholder image asset.
astro/src/assets/blog-placeholder-2.jpg LFS placeholder image asset.
astro/src/assets/blog-placeholder-1.jpg LFS placeholder image asset.
astro/README.md Starter README for the Astro template.
astro/public/resume/pycon-india.jpg Resume asset (LFS).
astro/public/resume/poetic.png Resume asset (LFS).
astro/public/resume/pathlight.png Resume asset (LFS).
astro/public/resume/embold.png Resume asset (LFS).
astro/public/posts/2023_01_12_growing-out-of-tech.md Imported post content (public/).
astro/public/posts/2022_12_21_choosing-the-best-multi-os-setup.md Imported post content (public/).
astro/public/posts/2022_12_13_contemplating_dunning_krugger.md Imported post content (public/).
astro/public/posts/2022_11_20_vo2-max-training-with-apple-watch/media/IMG_0524.jpeg Post media (LFS).
astro/public/posts/2022_11_20_vo2-max-training-with-apple-watch/media/IMG_0523.jpeg Post media (LFS).
astro/public/posts/2022_11_20_vo2-max-training-with-apple-watch/media/IMG_0522.jpeg Post media (LFS).
astro/public/posts/2022_11_20_vo2-max-training-with-apple-watch/media/IMG_0521.jpeg Post media (LFS).
astro/public/posts/2022_11_20_vo2-max-training-with-apple-watch/document.md Imported post content (public/).
astro/public/posts/2022_08_10_backing-up-zfs-snapshots-remotly-without-root.md Imported post content (public/).
astro/public/posts/2022_08_08_las-vegas-evo-2022.md Imported post content (public/).
astro/public/posts/2022_07_27_quecent.md Imported post content (public/).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0654.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0652.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0639.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0626.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0620.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0619.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0601.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0599.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0597.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0586.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/media/IMG_0579.jpeg Post media (LFS).
astro/public/posts/2022_07_16_summertime-adventure-new-orleans/document.md Imported post content (public/).
astro/public/posts/2022_06_01_kilimanjaro-1-two-weeks-before/document.md Imported post content (public/).
astro/public/posts/2022_02_02_straight-forward-reusable-components/media/Screen Shot 2022-02-02 at 17.21.18.png Post media (LFS).
astro/public/posts/2022_02_02_straight-forward-reusable-components/media/horizontal-rule-in-form.png Post media (LFS).
astro/public/posts/2022_02_02_straight-forward-reusable-components/document.md Imported post content (public/).
astro/public/posts/2021_03_24_scheduled-ci-e2e-test-failure-slack-notification/media/slack-notification-for-failed-e2e-tests.jpg Post media (LFS).
astro/public/posts/2021_03_24_scheduled-ci-e2e-test-failure-slack-notification/document.md Imported post content (public/).
astro/public/posts/2021_02_07_alpine-k3s.md Imported post content (public/).
astro/public/posts/2021_02_06_docker_linux_workstation_development.md Imported post content (public/).
astro/public/posts/2021_01_18_typescript_enum_form_stepper.md Imported post content (public/).
astro/public/posts/2021_01_07_wireguard-based-vpn-intranets.md Imported post content (public/).
astro/public/posts/2021_01_02_apollo-cache-overview/media/mutation_example.gif Post media (LFS).
astro/public/posts/2021_01_02_apollo-cache-overview/document.md Imported post content (public/).
astro/public/posts/2020_12_17_typescript-react-grid-areas.md Imported post content (public/).
astro/public/posts/2020_12_04_rsync-code-directories.md Imported post content (public/).
astro/public/posts/2020_08_23_scytale-automated-private-key-infrastructure.md Imported post content (public/).
astro/public/posts/2020_08_14_multi-arch-docker-buildx-ci-cd.md Imported post content (public/).
astro/public/posts/2020_07_22_gondola-ansible-playbook-for-emulating-raspberry-pi-os-with-kvm.md Imported post content (public/).
astro/public/posts/2020_07_02_writing-a-gear-torque-calculator/media/gear_in_opencad.png Post media (LFS).
astro/public/posts/2020_07_02_writing-a-gear-torque-calculator/document.md Imported post content (public/).
astro/public/posts/2020_06_24_developing-on-remote-microcontroller.md Imported post content (public/).
astro/public/posts/2020_06_16_driving-stepper-motors-with-microcontroller/media/working-motor.gif Post media (LFS).
astro/public/posts/2020_06_16_driving-stepper-motors-with-microcontroller/media/nema-stepper-motors.jpg Post media (LFS).
astro/public/posts/2020_06_16_driving-stepper-motors-with-microcontroller/media/header_image.jpeg Post media (LFS).
astro/public/posts/2020_06_16_driving-stepper-motors-with-microcontroller/media/drv8833.jpeg Post media (LFS).
astro/public/posts/2020_06_16_driving-stepper-motors-with-microcontroller/document.md Imported post content (public/).
astro/public/posts/2020_06_15_evaluating-rust.md Imported post content (public/).
astro/public/posts/2019_04_15_how-homekit-led-to-learning-about-network-security.md Imported post content (public/).
astro/public/posts/2019_04_09_macos-fast-user-switching.md Imported post content (public/).
astro/public/posts/2019_03_10_new-site-stack.md Imported post content (public/).
astro/public/posts/2019_03_07_hello-world-2019.md Imported post content (public/).
astro/public/posts/2017_11_01_india-1/media/PyCon_India/IMG_0155.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/PyCon_India/IMG_0144.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/PyCon_India/IMG_0142.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/PyCon_India/IMG_0138.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/PyCon_India/IMG_0137.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/PyCon_India/IMG_0135.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/PyCon_India/IMG_0133.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/IMG_0127.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/IMG_0118.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/IMG_0117.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/media/IMG_0113.jpeg Post media (LFS).
astro/public/posts/2017_11_01_india-1/document.md Imported post content (public/).
astro/public/manifest.json Web app manifest for icons/name/theme.
astro/public/hold/2022_11_16-docker-rootless-etherium-node.md Held/draft content.
astro/public/hold/2022_08_02_typescript-workspaces.md Held/draft content.
astro/public/favicon.svg Site favicon (SVG).
astro/public/favicon.png Site favicon (PNG, LFS).
astro/public/favicon-32x32.png Favicon size variant (LFS).
astro/public/favicon-16x16.png Favicon size variant (LFS).
astro/public/apple-touch-icon.png Apple touch icon (LFS).
astro/public/android-chrome-512x512.png PWA icon (LFS).
astro/public/android-chrome-192x192.png PWA icon (LFS).
astro/public/about/avatar.jpg About avatar asset (LFS).
astro/public/.assetsignore Prevents Wrangler from uploading worker routing artifacts.
astro/package.json Astro app dependencies/scripts (Bun usage).
astro/astro.config.mjs Astro config: site URL, integrations, Tailwind, Cloudflare adapter, fonts.
astro/.vscode/launch.json VS Code launch config for astro dev.
astro/.vscode/extensions.json VS Code extension recommendations.
astro/.gitignore Astro project ignores.
.gitignore Root ignore updates for Astro artifacts.
.gitattributes LFS extensions expanded for webp/avif.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +5 to +9
<footer>
&copy; {today.getFullYear()} Your name here. All rights reserved.
<div class="social-links">
<a href="https://m.webtoo.ls/@astro" target="_blank">
<span class="sr-only">Follow Astro on Mastodon</span>
Comment on lines +7 to +10
start: 2020-08
end: Present
tech: Node,Typescript,GraphQL,React,Next.JS,Kubernetes,Helm,Playwright,Gitlab,CI,Backstage
---
Comment on lines +13 to +16
- Traveled for a month in India's states of
[Rajasthan](https://en.wikipedia.org/wiki/Rajasthan) and
[Uttar Pradesh](ttps://en.wikipedia.org/wiki/Uttar_Pradesh)
- Went to wedding in [Kashmir](https://en.wikipedia.org/wiki/Kashmir)
Comment thread astro/tsconfig.json Outdated
Comment on lines +12 to +16
"strictNullChecks": true,
"types": [
"./worker-configuration.d.ts"
]
}
Comment on lines +8 to +12

type Props = CollectionEntry<'blog'>['data'];

const { title, description, pubDate, updatedDate, heroImage } = Astro.props;
---
Comment on lines +26 to +30
<a href="https://www.linkedin.com/in/ncrmro/" aria-label="Linkedin profile">
<LinkedinIcon class="fill-current text-gray-300" />
</a>
<a href="https://github.com/ncrmro" aria-label="Github profile" rel="me">
<GithubIcon class="fill-current text-gray-300" />
ncrmro and others added 5 commits May 14, 2026 11:12
Pulls the markdown bodies from the static-markdown-migration branch
(originally Turso post rows) into Astro's blog content collection so
the deployed Astro site has real posts instead of just the placeholder.

- src/content/blog/<slug>.mdx — 52 files, frontmatter transformed:
  date -> publish_date, slug field dropped (filename is the id),
  featuredImage -> heroImage.
- content.config.ts — schema gains `places` (3 travel posts) and
  loosens `heroImage` to a plain string filename.
- public/posts/ — renamed 9 date-prefixed media dirs to slug-only
  to match the absolute paths used in markdown image references.
  Stale top-level <date>_<slug>.md dumps and per-dir document.md
  companions removed; the content collection is now the single source.
- Drops src/content/blog/placeholder.mdx.

`astro build` prerenders 37 published post pages plus tag/index/RSS.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Mirrors ncrmro/plant-caravan's three-file pattern, adapted for Astro:
- bun (project lockfile) instead of pnpm
- `astro build` + raw `wrangler deploy` / `wrangler versions upload`,
  no OpenNext wrapper
- working directory `astro/`; path filter `astro/**`
- worker name `ncrmro-website-astro` (per astro/wrangler.jsonc)

Files:
- .github/actions/astro-cloudflare-deploy/action.yml — composite action,
  handles both `mode: deploy` (production promote) and `mode: upload`
  (versioned preview). Extracts the preview URL from wrangler output
  with three fallback regexes (alias URL → versioned URL → generic
  workers.dev match) so a wrangler log-format change degrades to "no
  comment" rather than a hard failure.
- .github/workflows/astro-deploy.yml — push-to-main → production.
  Uses `astro-production` environment so its secrets/vars stay separate
  from the existing Next.js `production` environment during cutover.
- .github/workflows/astro-preview.yml — PRs from the same repo only
  (skipped for forks to avoid leaking the Cloudflare token). Derives
  a DNS-safe slug from the head branch, uploads a versioned preview,
  then upserts a single PR comment marked with an HTML sentinel so
  reruns don't pile up duplicate comments.

Required repo configuration before first run:
- Secret: CLOUDFLARE_API_TOKEN (Workers Scripts:Edit)
- Variable: CLOUDFLARE_ACCOUNT_ID
- Environment: astro-production (can be empty; just for protection rules)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Rename workflows + composite action to canonical names: deploy / preview
  / cloudflare-deploy. The astro site is the site — no disambiguator
  needed.
- Switch concurrency groups to `production` and `preview-<n>`, and the
  deploy environment to `production`.
- Add validate.yml: runs `astro build` on PRs touching `astro/**`. No
  secrets, so it runs on fork PRs too — a green/red signal that covers
  the full content-collection schema + MDX parser + adapter bundling
  without granting deploy access.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Merges the standalone deploy-cloudflare.yml (Turso migration only) into
deploy.yml so production push triggers a single job that runs migrations
and then promotes the Astro worker. Migrations stay around — even with
the static-export plan, the schema work might come back.

- Path filter adds drizzle/** and root package-lock.json so DB-only
  changes still fire the workflow.
- Migration step runs from repo root with npm (root package); the
  composite action then handles bun + astro/ on its own.
- Concurrency group `production` already prevents overlap with the
  preview workflow.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The [slug].astro template already had `prose prose-invert max-w-none`
classes but the typography plugin wasn't installed, so the classes were
no-ops and post bodies rendered without heading hierarchy, list spacing,
or code block styling.

- Add @tailwindcss/typography devDependency.
- Wire it via `@plugin "@tailwindcss/typography"` in src/styles/global.css
  (Tailwind 4 uses CSS-side plugin registration, not the v3 JS config).
- Change wrapper from `prose prose-invert` to `prose dark:prose-invert`
  so light mode renders normal prose and dark mode flips invert,
  matching the BaseLayout's `dark:bg-gray-900 dark:text-white` scheme.
- Drop the redundant `text-gray-500 dark:text-gray-400` from the wrapper;
  prose now owns body text color.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The Astro replacement (#82) is live and serving all 37 published posts.
This drops the Next.js 15 + Drizzle/Turso + OpenNext stack and promotes
`astro/` to the repo root so there's one obvious project.

What's gone:
- `src/` (Next.js App Router, components, models, auth, lib),
  `tests/` (Playwright), `bin/` (sync-posts CLI + helpers).
- Framework configs: `next.config.js`, `open-next.config.ts`,
  `wrangler.jsonc` (root), `tsconfig.json` (root),
  `playwright.config.ts`, `playwright.fixtures.ts`, `.eslintrc.json`,
  `postcss.config.js`, `tailwind.config.js`, `next-env.d.ts`,
  `worker-configuration.d.ts` (root), `instrumentation-client.ts`.
- Build artifacts in version control: root `package.json` +
  `package-lock.json`, `public/` (manifest, PWA, jobs, uploads).
- Historical notes: `BLOG_SYNC.md`, `BUGFIX_SUMMARY.md`,
  `PREVIEW_TAB_FIX.md`, `TASKS.md`, `Makefile`, `.lighthouserc.js`,
  `.dockerignore`, `.env.example`.

What's salvaged:
- `src/database/schema*.ts` → `db/schema*.ts`. The runtime client
  (`src/database/index.ts`) is dropped — it switched dialects based on
  Next.js-runtime env vars and is trivial to rebuild.

What's kept (DB scaffolding, intentionally inert):
- `drizzle/` migrations, `drizzle.config.ts` (now pointing at
  `./db/schema.ts`), `bun run db:migrate` script, and the migration
  step in `Deploy`. No live client today; ready to wire up if schema
  work returns.

What's flattened (~150 renames):
- Everything that was under `astro/` is now at the repo root:
  `src/`, `public/`, `package.json`, `bun.lock`, `astro.config.mjs`,
  `tsconfig.json`, `wrangler.jsonc`, `README.md`, `.vscode/`.

CI/meta updates:
- All workflows + the composite action drop the `astro/` working-dir
  and `hashFiles('astro/...')` cache keys.
- `deploy.yml` now runs migrations + deploy using bun (was npm+drizzle
  via the deleted root package). Path filter widened to the new flat
  layout.
- `flake.nix` drops `sqld`, `concurrently`, `pnpm`; keeps `bun`,
  `nodejs_22`, `playwright-driver.browsers`, `claude-code`.
- README.md and CLAUDE.md rewritten for the Astro project.
- `.gitignore` slimmed to Astro/Cloudflare patterns.

Verified locally:
- `bun install` clean.
- `bun run astro build` prerenders 37 posts + tag/index/RSS.
- `bunx wrangler deploy --dry-run` succeeds.
- `bunx drizzle-kit generate --help` loads `drizzle.config.ts`.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

@ncrmro
ncrmro merged commit c62f0b1 into main May 16, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants