What this sample demonstrates
Every article approved in the Hadiati SEO platform lands in this repository as a markdown file under content/blog/ (English) or content/ar/blog/ (Arabic). A GitHub Action then renders it into a real page that matches the hand-built posts exactly — same hero panel, same 720px prose column, same footer and navigation chrome.
The renderer handles the markdown our platform actually produces:
- Section headings become styled H2s in the brand blue
- Bold text and italic text carry through
- Links like this one render with the site's underline style
- Ordered and unordered lists keep the prose rhythm
What happens on every push
- The platform commits a markdown file to content/blog/ on main
- The render workflow wakes up, parses frontmatter and body
- A full page is written to blog/, the listing card is added to blogs.html, and sitemap.xml gets a new entry
- Coolify sees the push and redeploys the static site
The whole chain is deterministic: running the renderer twice in a row produces zero diff, so the Action only ever commits when something actually changed.
Technical notes
The renderer is a zero-dependency Node script at scripts/render-blog.mjs. It escapes raw HTML in the markdown, so content like <script>alert(1)</script> renders as harmless text. Code blocks survive too:
node scripts/render-blog.mjs
How to remove this sample
Delete this markdown file and push. The renderer garbage-collects the generated page, the card on the blog listing, and the sitemap entry. Hand-made pages are never touched — only files the renderer itself generated.