A Git-backed, Obsidian-powered, Astro-built blog. Content lives in markdown files forever. No databases, no vendor lock-in, just files.
Stack:
- Astro: Static site generator (fast, modern, tweakable)
- Markdown/MDX: Blog posts in
src/content/blog/ - Obsidian: Beautiful markdown editor for writing
- GitHub Actions: Auto-deploy on push
- GitHub Pages: Free hosting at raulsperoni.me
Philosophy:
- Content is sacred → stored as markdown in Git
- Future-proof → files can move anywhere
- Tweakable → it's just code
- Simple workflow → write, commit, push, deployed
Write on your phone, auto-publish to the web!
- Open Obsidian mobile app
- Write your post
- Close app (or wait 5 minutes)
- Auto-magic: GitHub Sync plugin commits → GitHub Actions deploys → Live in 2-3 min
Setup required: See SETUP-MOBILE.md for detailed setup instructions
Tech: Uses the GitHub Sync plugin for Obsidian - no Mac needed, works on Android
Option 1: Obsidian with GitHub Sync Plugin
- Write in Obsidian
- Plugin auto-commits and pushes (or manual commit)
- Auto-deploys
Option 2: Manual Git Workflow
- Create
.mdfile insrc/content/blog/ - Add frontmatter:
--- title: 'Your Post Title' description: 'Brief description' pubDate: 'Nov 27 2025' ---
- Write content
- Commit and push:
git add . git commit -m "New post: Your Title" git push
- GitHub Actions deploys automatically
Just create a .md file in src/content/blog/ and follow the frontmatter format above.
# Install dependencies
npm install
# Start dev server (localhost:4321)
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewsrc/
content/
blog/ # ← Your blog posts (markdown files)
pages/ # Routes/pages
components/ # Reusable components
layouts/ # Page layouts (BlogPost.astro is the main one)
styles/ # CSS
.github/
workflows/
deploy.yml # Auto-deployment workflow
- Automatic: Push to
main→ GitHub Actions builds → deploys to GitHub Pages - Custom domain: Configured for
raulsperoni.meinastro.config.mjs - First-time setup:
- Go to repo Settings → Pages
- Source: "GitHub Actions"
- (Optional) Add custom domain and configure DNS
All code is yours to tweak:
- Styling: Edit
src/styles/global.css - Layout: Edit
src/layouts/BlogPost.astro - Components: Edit files in
src/components/ - Add pages: Create
.astrofiles insrc/pages/
Ready to import your existing Ghost posts? See MIGRATION.md for complete instructions.
Quick version:
- Export from Ghost Admin → Settings → Labs → Export
- Save JSON as
scripts/ghost-export.json - Run
npm run migrate(migrates posts) - Run
npm run migrate:images(downloads images locally) - Review posts and push to deploy
- ✅ Content safety: Files in Git, never locked in a database
- ✅ Future-proof: Markdown is universal, will work in 2050
- ✅ No vendor lock-in: Move to any platform that reads markdown
- ✅ Free hosting: GitHub Pages is free forever
- ✅ Fast: Static sites are instant
- ✅ Tweakable: Full control over every line of code
- ✅ Great writing experience: Obsidian is beautiful
- ✅ Mobile-first: Write on your phone, auto-publishes
- ✅ Simple workflow: Write → auto-commit → auto-deploy → live
- ✅ No Mac required: GitHub Sync plugin handles everything