Git-backed blog content for www.elsaworkflows.io.
GitHub is the canonical source of truth for all blog content. Posts are authored as Markdown files with YAML frontmatter, then built into portable static artifacts that the website can fetch and render.
Lovable currently renders the public blog UI, but it does not own blog content. The content model is intentionally host-agnostic so the blog can later move to Astro, Next.js, Orchard Core, an Elsa-powered CMS, or another renderer.
content/
authors/ Author profiles referenced by posts.
posts/ Markdown posts with frontmatter.
assets/ Post-specific images and other media.
schemas/ JSON schemas for content validation.
scripts/ Validation and build scripts.
dist/ Generated artifacts published by GitHub Actions.
npm install
npm run validate
npm run buildGenerated files are written to dist/.
After changes are merged into main, GitHub Actions publishes the generated artifacts through GitHub Pages:
https://elsa-workflows.github.io/elsa-blog/index.json
https://elsa-workflows.github.io/elsa-blog/posts/{slug}.json
https://elsa-workflows.github.io/elsa-blog/rss.xml
https://elsa-workflows.github.io/elsa-blog/sitemap-blog.xml
Canonical blog URLs remain on the website:
https://www.elsaworkflows.io/blog/{slug}
- Create or update a Markdown file under
content/posts. - Add post assets under
content/assets/YYYY-MM-DD-post-slug. - Open a pull request.
- Wait for validation and build checks.
- Merge to
mainto publish.
Draft posts use status: "draft" and are excluded from public artifacts.
Merging a post in content/posts/YYYY-MM-DD-slug.md to main runs the Build blog workflow (validate, build, deploy to GitHub Pages), which updates https://elsa-workflows.github.io/elsa-blog/index.json and posts/<slug>.json that www.elsaworkflows.io/blog (elsa-workflows/elsa-hub, published via Lovable) reads client-side, so the post shows to readers right away. Elsa-hub only writes the crawler-facing prerendered /blog/<slug>.html and the sitemap entry at its own build, and Lovable only rebuilds on a new elsa-hub commit, so bump root blog-sync.json (latestSlug, blogCommit as the full elsa-blog main SHA, syncedAt as YYYY-MM-DD) in a one-line PR to trigger that rebuild.
- Merge the post PR to
main. - Wait for the
Build blogrun on that commit to go green (validate, build, deploy), for examplegh run list -R elsa-workflows/elsa-blog --branch main. - Check the post is in
index.jsonandposts/<slug>.jsonreturns 200. - Open a PR on
elsa-workflows/elsa-hubthat updatesblog-sync.json(latestSlug,blogCommit= the merge commit SHA,syncedAt) and merge it. - Publish elsa-hub in Lovable. A publish with no new elsa-hub commit does not rebuild, so step 4 is required.
- Verify:
https://www.elsaworkflows.io/blog/<slug>loads;https://www.elsaworkflows.io/blog/<slug>.htmlreturns 200 and containsdata-prerendered, a single<title>and canonical, and og tags (curl with a Googlebot user agent);https://www.elsaworkflows.io/sitemap.xmllists/blog/<slug>.
Code and automation in this repository are licensed under MIT.
Content under content/ is licensed under CC BY 4.0 unless otherwise stated.