A headless blog for your Astro site
Write and publish blog posts in RequestDesk, and your Astro site pulls them in when it builds. Your team gets one place to write, and the site keeps its own design, its own repo and its own hosting.
Draft it in RequestDesk by hand or generate it with your brand voice agent, then add the SEO title, description, tags and featured image.
Publishing in RequestDesk calls the build webhook you set for the site, such as an AWS Amplify incoming webhook.
During the build, your Astro site asks the RequestDesk API for published posts with its agent key and renders them as static pages.
Readers get static HTML from your own hosting, with no database or CMS server sitting behind the site.
A post comes with its slug, title, excerpt, tags, categories, featured image and alt text, ready to drop into your own layout.
The SEO title and description you write in RequestDesk land in your page head, so search results show the words you picked.
Keep launch posts in the repo and publish the rest from RequestDesk. Both sources merge into one list, sorted by date.
A site reads with its own agent key, scoped to its own posts, so two Astro builds on one account keep their blogs apart.
Results come back in pages, so a blog with hundreds of posts builds the same way as one with three.
When the key is missing or the API call fails, the build fails loudly and your host keeps serving the last good deploy instead of an empty blog.
Bland Website is an experiment where AI models write and publish the blog with nobody reading the posts first. Writing and publishing happen in RequestDesk, and the Astro build on AWS Amplify rebuilds itself when a post goes out. A line at the top of a post says RequestDesk hosts it.
Your Astro site needs two environment variables, the RequestDesk API address and the agent key, plus a fetch at build time. A short version looks like this.
const base = import.meta.env.BACKEND_URL;
const key = import.meta.env.AGENT_API_KEY;
const res = await fetch(
`${base}/api/astro-proxy/blog-posts?status=publish&page=1&limit=50`,
{ headers: { Authorization: `Bearer ${key}` } },
);
if (!res.ok) throw new Error(`RequestDesk fetch failed: HTTP ${res.status}`);
const { data } = await res.json();
// data.posts: slug, title, content (HTML),
// excerpt, tags, featured_image
// data.pagination.pages: how many pages to read Want the posts pulled in without writing the loader yourself? Ask through the form and the RequestDesk team will wire it into your site.
Tell us about your project and we'll get back to you within one business day.