Static sites and SPAs
Publish a folder in one command, and the routing detail that decides whether you need an app instead.
If your build output is a folder of files, publish it. Do not make it an app.
marina sites deploy ./dist Your first site is free and stays free. It reserves no memory, so there is nothing to size and nothing to scale, and it is live in seconds at an address on sites.marinahost.app.
marina sites deploy takes a directory, a .zip, or a single .html file. Point it at a directory and it finds the index, including in a conventional output folder, so running it at the root of a project that builds into dist/ usually works.
Updating one
marina sites deploy ./dist --name yourname Publishing again to an address you already own is a free update in place. Only a new address costs anything, so deploying twenty times a day costs the same as deploying once.
Your own domain
marina domains attach example.com --target yourname HTTPS is issued and renewed for you. Domains and DNS is the whole story.
The thing that usually breaks
A single-page app that routes on the client. A site is served as files: a request for /settings looks for that file, does not find it, and returns 404. The app works when you click through from the home page and breaks on a hard refresh or a shared link, which makes it look intermittent when it is not.
Three ways out, in the order worth trying:
Pre-render your routes. Next’s static export, SvelteKit’s prerender, Astro and most static site generators write a real file per route, which makes the problem disappear and is better for search engines anyway.
Use hash routing. Everything after # never reaches the server. A quick fix, at the cost of the URLs.
Run it as an app. With a Staticfile at the root of the repo, unmatched paths fall back to your index:
root: dist
index_fallback: true marina vessels create web --repo acme/web That is a real app with real memory reserved and a monthly bill, so it is the answer when the first two are not available rather than the place to start.
When it needs a build step
marina sites deploy publishes what you point it at; it does not run your build. Either build locally or in CI and deploy the output, or deploy the repo as an app and let Marina build it. For a purely static result, building in CI and publishing the folder is cheaper.
