Full-stack

How to deploy an EmDash marketing site on Rock8Cloud

Deploy a content-managed marketing site on EmDash, the Astro-native CMS, to Rock8Cloud in one click - PostgreSQL and S3 media provisioned and wired for you, every page editable as blocks in the admin.

Updated 14 October 2026
The Acme demo landing page next to the EmDash admin editing its Hero block

A marketing site you edit in the browser - EmDash, the Astro-native CMS, with Astro server-rendered on Bun. Every page is built from blocks in the EmDash admin. Rock8Cloud provisions the database and media storage and wires them in, so the site is live on the first deploy.

Deploy in one click#

The blueprint clones the repository to your GitHub and builds one service from its Dockerfile - the site and the EmDash admin together, on port 4321. PostgreSQL and an S3 media bucket are provisioned and connected for you.

EmDash marketing site example
rock8-cloud/astro-emdash-marketing-page

Or ask an agent instead of clicking. With Rock8Cloud connected over MCP, deploy_blueprint with the emdash-blueprint slug clones the same template into your GitHub account, creates the project with its services, and starts the first build.

Pro tip:Run the setup wizard at /_emdash/admin right after the first deploy. Until it is done, whoever opens the admin first becomes its owner.

What you get#

  • A private clone of the repository in your GitHub account.
  • One service running the site and the EmDash admin, with its own public URL.
  • A managed PostgreSQL database, pre-wired via DATABASE_URL.
  • A managed S3 bucket for media, pre-wired via S3_* env vars, so uploads survive redeploys.
  • Block-based pages - hero, features, testimonials, pricing and FAQ, seeded with demo content for a fictional product called Acme.
  • Deploy on push - every push to your default branch rebuilds and ships the site.

After it’s live#

Open /_emdash/admin, complete the setup wizard and register a passkey. The wizard applies the seed, so the home, pricing and contact pages render immediately. Edit them under Pages and publish - there is no rebuild.

Passkeys are bound to the domain in EMDASH_SITE_URL, which the blueprint sets to the service URL. If you add a custom domain, point EMDASH_SITE_URL at it and register a new passkey there. Login sessions live on the container disk, so a redeploy signs editors out.

Customize it#

Pages, menus and settings are content, so most changes happen in the admin. For new block types, add them to seed/seed.json and render them in src/components/blocks/ in your clone. Restyle by overriding design tokens in src/styles/theme.css. Push to your default branch and Rock8Cloud rebuilds. Need more services? PostgreSQL, Dragonfly, and S3 are one click each.

Frequently asked questions

Do I need to set anything up before deploying?
No. The blueprint clones the repo, provisions PostgreSQL and S3 media, and wires DATABASE_URL, the S3 variables and the site URL through env vars. After the first deploy you run the setup wizard in the admin, which takes a minute.
Do content changes need a rebuild?
No. The site is server-rendered, so publishing a page in the admin makes it live immediately. Code changes, like a new block type or a restyle, rebuild on push.
Where do uploaded images go?
To the S3-compatible bucket the blueprint provisions. The bucket stays private and the site serves media through its own media route, so uploads survive redeploys with no storage setup.
What happens to passkeys if I add a custom domain?
Passkeys are bound to the domain in EMDASH_SITE_URL. After adding a custom domain, set EMDASH_SITE_URL to it and register a new passkey there.
Do I need EMDASH_ENCRYPTION_KEY?
Not to run the site. It encrypts plugin secrets, so set it before you add a plugin with secret settings. Generate one with bunx emdash secrets generate and back it up together with the database.

More guides

Ship today

Ship your marketing site.Edit it in the admin.

An EmDash site, PostgreSQL and media storage - provisioned together, live on the first deploy, every page editable as blocks.

30 days free. No credit card required to start.