Documentation
From zip to shipped
Everything below assumes zero Astro experience. If you get stuck anywhere, email contact@alohapixel.com and a human answers.
Start in 5 minutes
You need Node 22.18 or newer and pnpm (npm i -g pnpm). Then, inside the unzipped folder:
pnpm install
pnpm dev # http://localhost:4321
pnpm build # production build in dist/
pnpm preview # serve the production build locally
pnpm check # type-check everything
pnpm test # the theme's checks
pnpm verify # render bench on the build (390, 768 and 1440 px)
pnpm lint:house # house code rules
pnpm dev:moteur # the site with its back office, locally
pnpm build:moteur # the build of the site with its back officeWith the engine off, your copy lives in plain files: site identity in src/config/siteData.json.ts, navigation in navData.json.ts, the rest next to them or in src/data/ depending on the theme (Reef and Aloha posts, Kai products, Koa projects). With the engine on, everything visitors see lives in the database and is changed from the back office, without touching a file. pnpm dev:moteur opens it locally, at http://localhost:4321/_emdash/admin.
Two ways to run your site
Every theme builds two ways, and one variable chooses: ALOHA_MOTEUR. The design, the addresses and the SEO are the same in both: you switch from one to the other without rewriting a page.
Engine off: the static site
The default. The build is plain HTML files: fast, no server, no database, hosted for free wherever you like (Cloudflare, Netlify, Vercel). Your copy lives in text files, and a change means an edit, then a new build. The right choice for a site you run yourself.
Engine on: the managed site
With ALOHA_MOTEUR=emdash, the same code becomes a site on Cloudflare, with its database and its media. Everything visitors see is changed in the EmDash back office and goes live on publish, with no build. The right choice for a site your client runs without you.
EmDash is an open source content management system (MIT licence), made for Astro and Cloudflare. The themes do not rewrite it: they plug into it, dress it in the theme's colours and fonts, ship it in French and English, and add what EmDash does not do on its own: the edit bar on every block, the site's emails, Kai's shop, the "Mettre le site à jour" button.
With the engine on, you need a Cloudflare account with Workers, D1 (the database) and R2 (the media); Cloudflare Images is recommended to lighten photos, and the site's emails go through Cloudflare Email Sending, which requires the Workers Paid plan. The cost depends on your account and on Cloudflare's pricing.
Where everything lives
src/
config/ your content: identity, nav, and depending on the theme pricing, FAQ, legal
data/ the file seed, depending on the theme: posts, products, projects
components/
Sections/ the page blocks you rearrange
ui/ the interface primitives (buttons, dialogs...)
pages/ one file per route
styles/ tokens.css = the whole design system
moteur/ the EmDash back office: settings, menus, edit bar
docs/ administer.md, the back office guide for your client; moteur.md, putting it online
migrations/ one SQL file per release, to update an online database
scripts/ rebrand.mjs, og.mjs, moteur-import.mjs, base-3.4.0.mjs, deployer-frontal.sh
seed/ the back office seed: collections, menus, content
wiki/ the theme's technical documentation
socle.lock.json the list of files shared by the seven themesRebrand in one command
Give the theme your brand color and the entire palette regenerates: components, dark mode, even the generated social images follow. With the engine on, your client also picks the brand colour in the back office, among five colours, with no command.
pnpm rebrand "#7a59ff" # your accent color
pnpm rebrand "#7a59ff" --dark "#140a2e"
pnpm rebrand --restore # back to the original Aloha palette
pnpm og # regenerate the OG images to match
pnpm favicon # regenerate the favicons to matchDeploy the static site for free
With the engine off, the build is plain static files, so the free tier of any modern host carries it. Cloudflare: create a project, point it at your repo, build command pnpm build, output dist. Netlify and Vercel: same two values. Set site in astro.config.mjs to your real domain so canonical URLs, the sitemap and OG links are right. The site with its back office goes online on Cloudflare: that is the next section.
Put the back office online
Once, from the theme folder, with your Cloudflare account. Replace site.example.com with your domain: the database and the media storage are created on the first deploy.
# 1. Install, then sign in to Cloudflare
pnpm install
pnpm wrangler login
# 2. Build the site with its back office, then deploy it
pnpm build:moteur
pnpm wrangler deploy
# 3. Put it on your domain. First, copy the database id
# (pnpm wrangler d1 list) into wrangler.frontal.jsonc
DOMAINE=site.example.com bash scripts/deployer-frontal.sh --a-sec # dry run
DOMAINE=site.example.com bash scripts/deployer-frontal.sh
# 4. Open https://site.example.com/_emdash/admin and create the first
# administrator (a passkey, no password), leaving the
# "Include sample content" box ticked
# 5. Create an API token in the back office (content:write and
# schema:write), then pour the theme's content in, once
EMDASH_TOKEN=... node scripts/moteur-import.mjs --url https://site.example.com
# 6. Check: the version and the build time actually online
curl -s https://site.example.com/version.jsonLater deploys use the same command, DOMAINE=site.example.com bash scripts/deployer-frontal.sh, after pnpm build:moteur: it stops at the first step that fails, and the previous version stays online. Without Cloudflare Images on the account, build with ALOHA_IMAGES=origine pnpm build:moteur and remove the "images" line from wrangler.moteur.jsonc. From then on, content published from the back office is live without rebuilding the site. The full step by step, with the theme's own names and the wiring of the "Mettre le site à jour" button, is in its docs/moteur.md.
Would you rather have us put it online for you? The turnkey installation is ordered on alohapixel.com.
Connect selling
Three themes sell, each in its own way.
Kai: the full shop, with your own Stripe account
With the engine on, Kai takes payment through Stripe Checkout and manages orders, stock, refunds and invoices in the back office. Two secrets to set once, then a webhook address to declare at Stripe, with three events: checkout.session.completed, checkout.session.async_payment_succeeded and charge.refunded. The "Brancher Stripe" screen of the back office gives the exact commands again. Without those two secrets, the cart stays the demonstration one and nobody can pay.
Kona: the storefront of your Shopify store
Catalogue, prices, taxes and payment stay at Shopify. One value only: your storefront address in .env (SHOPIFY_STORE_URL). No API key, no app to install: Kona reads the store's public catalogue. pnpm shopify:check shows what the store answers before any build.
Nalu: the storefront of your WooCommerce store
Same idea: WOO_STORE_URL in .env, no API key, and the WordPress plugin wordpress/nalu-headless.php to install on your WordPress, so that the cart is accepted there. pnpm woo:check checks the connection.
# Kai: the two Stripe secrets, once
pnpm wrangler secret put STRIPE_SECRET_KEY --config wrangler.moteur.jsonc
pnpm wrangler secret put STRIPE_WEBHOOK_SECRET --config wrangler.moteur.jsonc
# the webhook address to declare at Stripe:
# https://site.example.com/_commerce/stripe/webhook
# Kona and Nalu: check the store before building
pnpm shopify:check
pnpm woo:checkThe theme drives these services, it does not replace them: opening the account, the fees, the payout and refund delays remain those of Stripe, Shopify or WooCommerce.
Manage your site
With the engine on, everything visitors see is changed from the EmDash back office, without touching a file: texts, photos, videos, buttons and their links, blocks to hide, menus, footer, logo, brand colour, new pages, SEO, redirections. The "Edit" bar changes the page in front of you. Depending on the theme, add the Reef, Aloha and Swell newsletter (sign-up confirmed by email, unsubscribing through a confirmation page), post tags, an author or a category picked by name, and, for Kai, the whole shop: products, stock per option, orders, refunds and invoices, through your own Stripe account. The cookie banner asks again after 182 days. Every theme ships the step by step guide for your client: docs/administer.md (and docs/administrer.md in French).
All about the back office: edit bar, emails, Stripe orders, updating a live site
Run the site with Claude
With the engine on, every theme carries EmDash's MCP server: Claude, or any compatible assistant, reads and edits the site's content, publishes it, manages media and menus, with the rights of the token you give it.
Server address : https://site.example.com/_emdash/api/mcp
Header : Authorization: Bearer <your token>Create the token in the back office, with only the permissions the assistant needs. In Claude, add a custom connector: a name (the site's domain), the address above and the Authorization header. You then write "change the home page title" or "translate the FAQ into French and publish it", and the assistant does it in the back office, as a draft or published, as you ask.
The token is a secret: it is never pasted into a document or a conversation.
Ship it as a native app
The seven themes ship a Capacitor configuration (capacitor.config.ts) and the pnpm app command, which builds the static site for the app. The app only carries that static site: no back office, no Kai Stripe checkout (it lives on the server), and the Shopify or WooCommerce checkout of Kona and Nalu opens outside the app. The Aloha video scene uses remote media: bundle your own files for offline use. Native builds, signing and publication remain your responsibility.
pnpm app
pnpm add @capacitor/core @capacitor/ios @capacitor/android
pnpm add -D @capacitor/cli
# Customize capacitor.config.ts before continuing
npx cap add ios && npx cap open ios
npx cap add android && npx cap open androidAfter each content change: pnpm app && npx cap sync.
Work with an AI agent
Open the folder in any coding agent that reads AGENTS.md, the repo's operating manual. It points at the theme's conventions (Astro, Tailwind, TypeScript, motion, SEO), its design doctrine and its technical documentation. Ask for a new section and the agent builds it inside the design system instead of inventing its own.
If something gets stuck
The build stops on a photo
The themes that have demonstration photos download them at build time, and stop rather than publish a blurred or missing image. Check the connection and run it again, or replace the photo with yours: the theme's PHOTOS.md says where each one comes from.
Kona still shows the demonstration catalogue
SHOPIFY_STORE_URL is empty, or the store is password protected, which is the default for a development store: it then does not publish its catalogue (Online Store, Preferences, Password protection). pnpm shopify:check tells you which.
A change made in Shopify or WooCommerce does not show
Kona and Nalu read products, prices and collections at build time: click "Mettre le site à jour" in the back office. Only availability is read again at each visit.
Nobody can pay on Kai
The two Stripe secrets are missing, or the webhook is not declared at Stripe with its three events: see "Connect selling". The "Brancher Stripe" screen of the back office says what is missing.
The site's emails do not go out
The sending domain is not registered with Cloudflare Email Sending yet. The "Brancher les courriels" screen of the back office says what is missing, DNS records included.
Choosing the back office language
It opens in French by default. Built with ALOHA_BO_LANGUE=en pnpm build:moteur, it opens in English, and every editor can still change their language in their settings. A few words written by EmDash itself stay in English whatever the language; the edit bar of the site follows the language of the back office ("Modifier" and "Publier" in French).
A deploy failed
The script stops at the first step that fails and leaves the previous version online: your visitors never see a broken site. Fix what the message says, then run the same command again.
Updates and support
Every release up to the next major version is included with your licence: you get an email with a fresh download link, and the changelog tells you what changed in plain language. Support is by email, contact@alohapixel.com, answered by the person who wrote the code.
Ready to build on solid ground?
Buy once, own it, ship as many end products as you like.
14 day refund, no questions asked.
