What It Actually Took to Ship This Site
The goal was simple: I wanted to point a script at any of my GitHub repos and get a draft article back. Human enough that I’d want to edit it rather than throw it away. Specific enough that it actually says something.
This is what I built to make that happen.
The constraint that mattered most
I wanted this to work from my phone. Not a full dev environment — just a GitHub Action I could trigger from a Shortcuts button or a mobile browser. That constraint shaped everything.
If the “backend” was a deployed API, I’d have to host it, secure it, maintain it. If it was a local CLI only, I couldn’t run it from the road. The answer was to make the CLI the primary interface but expose it as a GitHub Actions workflow that I can dispatch manually.
Write a file into the repo → Astro rebuilds → Cloudflare Pages deploys. The whole pipeline is just files and git.
How the ingest script works
npm run ingest -- https://github.com/jamesgeneva/some-project
- Parses the URL to get
owner/repo - Hits the GitHub API for metadata (stars, description, language, topics), the file tree, recent commits, and key files (README, package.json, etc.)
- Skips binaries, lockfiles, generated files
- Builds a context object and sends it to Claude with a prompt I can tune
- Writes a Markdown draft to
drafts/YYYY-MM-DD-slug.md
The prompt lives in scripts/prompts/article-prompt.md. That’s the part I’ll keep editing. The goal is writing that sounds like I wrote it — present tense, specific, honest about the messy parts.
The social drafts
Once there’s an article draft:
npm run social -- drafts/2026-05-29-some-project.md
Outputs a .social.json file with tweet, LinkedIn, and thread drafts. I pick one, edit it, post it.
Publishing
npm run publish -- drafts/2026-05-29-some-project.md
Moves the draft to src/content/posts/, removes the draft: true frontmatter flag, commits and pushes. The push triggers the rebuild and deploy.
What’s not here
No database. No auth. No CMS. No admin panel. The source of truth is Markdown files in a git repo, which means I can edit from any device that can push to GitHub, including the GitHub web editor on my phone.
The tradeoff is that there’s no pretty UI for editing drafts. But I use iA Writer for that, which syncs with the repo via Working Copy. Good enough.
What I didn’t expect: the most valuable part isn’t the article. It’s re-reading the commit history that the script pulls. It forces me to remember what I was actually thinking when I wrote the code.