AI prompt templates & Superprez zip packaging
Everything below is written so an assistant can understand Superprez hosting from the first run: Git/zip layout, build/start contracts, networking, entry HTML, and the two supported deployment patterns — plus copy-ready prompts.
Making a presentation compatible with Superprez
Superprez hosts your deck as a real web app cloned from GitHub. After you upload a zip (or connect a repo), our builders install dependencies, build if needed, and start a process that serves HTML to your audience. The human title of the presentation is set in the Superprez UI; your app's <title> tag is separate and should still be sensible.
You must satisfy both: Git / zip packaging rules (so the repo imports cleanly) and runtime rules (so Superprez and our hosting stack can reach your app and find an entry page). Failure on (1) is usually wrong folder nesting or missing required files. Failure on (2) is usually nothing listening on the right port, binding only to localhost, serving the wrong folder, or skipping build so no dist/ exists.
Superengine ports & examples
Decks run on Superengine-compatible layouts (manifest + compose templates, or Node build/start flows). Before authoring Pattern 1, skim Superengine documentation— official docs explain port manifests, compose.yaml.hbs, nginx/static patterns, and link to example repositories that match production expectations.
Tip: keep this page open next to your IDE — every numbered subsection maps directly to the one-shot prompt in section G.
A. Canonical zip / repository layout
Topology (most common failure)
Either: package.json at the root of the zip, or exactly one top-level folder that directly contains package.json. Do not double-nest (e.g. MyDeck/MyDeck/package.json).
Exclude from the archive
Do not commit: node_modules, dist, build, .next, coverage, other generated output, __MACOSX, .DS_Store, Thumbs.db, stray zip files.
Required at the project root (after unzip / clone)
| File | Purpose |
|---|---|
| package.json | Must define scripts (see below). Use engines if Node version matters. |
| package-lock.json or pnpm-lock.yaml | Committed lockfile; dependencies must install deterministically on Linux builders. |
| README.md | Exact commands: install, build, start; which URL and port to open locally; note if the server binds 0.0.0.0. |
| picture.png | Small cover image for the catalog (simple graphic is fine). |
| .env.example | Every environment variable your app or scripts read, with placeholders only (no secrets). |
| Dockerfile | Include one only if your stack truly needs a container build. If present, it must match what README.md says. |
Size
Keep the uncompressed project under ~12 MB before base64 upload limits.
Path characters
Use only safe path segments: [A-Za-z0-9._-] per segment (avoid spaces and exotic Unicode in file and folder names) so zip import sanitization does not strip or break paths.
B. Required package.json scripts
Your root package.json must expose:
"scripts": {
"build": "...",
"start": "..."
}Contract
- build — Produces runnable static assets and/or a runnable server build (e.g.
dist/,.next, compiled output). It must exit 0 on a clean Linux machine with only repo + lockfile +npm install(orpnpm install) already run. - start — Starts the HTTP server your audience will hit. It must listen on
process.env.PORTwhenPORTis set (recommended). IfPORTis not set, document a single default port in README.md and use that consistently in code.
Order
Hosting runs npm install (or pnpm install), then npm run build, then npm run start (exact package manager depends on lockfile — document which one you use in README.md).
Critical: start must serve the tree that exists after build.
If HTML is only generated under dist/, start must serve dist/, and you must never rely on “there is already a dist/ in the zip” — generated folders must not be committed.
C. Networking (preview and live viewing)
Browsers reach your deck through Superprez; our API may fetch your app from the host/port advertised by our hosting/runtime layer.
Your server MUST
- Listen on
0.0.0.0(all interfaces), not only127.0.0.1, unless our documentation for your specific template says otherwise. - Honor
PORTfrom the environment when provided. - If you document a default port in README.md (e.g. 8080 or 4173), state clearly: “In production, Superprez sets PORT; locally you may use the default.”
D. Entry HTML and URL paths
After clone and build, our tooling must be able to resolve a useful index.html for the root URL of your server.
Practical rules
- Prefer either
index.htmlat the repository root and serve it from start, orindex.htmlunderdist/(orbuild/) after build, and start must serve that folder as the site root. - Do not leave
index.htmlonly at repo root while start only servesdist/unless build copiesindex.html(and assets) intodist/every time. - All static assets you reference (JS, CSS, JSON, images) must be part of the repo or produced by build, with paths that work when served from your chosen root (avoid hard-coded absolute URLs to localhost).
E. Two supported patterns (choose one explicitly)
To avoid ambiguity for authors and for AI tools, Superprez documents two compatible patterns.
Pattern 1 — Superengine port (static site under public/, nginx)
Use this when you want maximum compatibility with our default “app port” flow: static files + official compose template.
You MUST include (names exact)
manifest.json— app-spec-version, subject, entitlements, templates listing at leastcompose.yaml.hbs(and any other required templates).compose.yaml.hbs— Typically an nginx (or equivalent) service that bind-mounts./publicread-only to the web root inside the container.public/— Containspublic/index.htmland the rest of your static site (CSS, JS, data JSON, etc.).
package.json may still provide build: validate that public/index.html exists (or run a trivial static asset step). start: optional local static server serving public/ for development.
Do not require a committed dist/ for Pattern 1; the live docroot is public/.
Reference: align with official Superengine port examples — see Superengine documentation.
Pattern 2 — Node / framework app (build → output dir, then start)
Use this for Vite, Next, custom Node servers, etc.
You MUST
- Implement
buildso the full site (includingindex.htmlat the served root) exists under a known directory (e.g.dist/,build/,.nextwith the correct start command for that stack). - Implement
startso it serves that directory (or runs the framework production server documented in README.md). - Document Node version in
enginesand in README.md if relevant.
Pattern 2 fails most often when authors assume npm start alone is enough without a prior npm run build on the server, or when start serves the wrong folder.
F. Interactive decks and /data
If you ship JSON or CSV for charts:
- Put files under a clear path (
public/data/…for Pattern 1, ordist/data/…after build for Pattern 2). - Load them with relative URLs from your app root (e.g.
/data/foo.json). - Document in README.md where authoring files live in Git vs where they appear after build.
G. AI / collaborator prompt
Paste into your AI assistant (ChatGPT, Claude, Copilot, Gemini, etc.). Same content ships in the Add presentation modal as “Copy prompt”.
Full prose contract (topology, scripts, networking, patterns): sections A–F above. Superengine port references: superengine.tech/docs.
Additional templates
1) Flagship narrative deck from legacy slides/PDFs
Use when leadership supplies PDFs/PPTX plus brand guidance.
2) Prepare a repo before linking GitHub in Superprez
3) Edit an exported Superprez zip and ship it back
4) Debugging a failed Superprez build
5) Collaborator onboarding without GitHub CLI
6) Presenter dashboard title vs in-app headline
Product context: Packaging overview, Drop code & zip updates.