One block, or nothing
Either every file is accepted and the site switches together, or nothing switches and the previous site stays exactly as it was. There is no half-deployed state to catch a visitor in.
Deployment
A static front end deposited straight from GitHub, with no key stored anywhere and no copy kept on our side.
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
id-token: writeGitHub signs a short-lived token naming the repository the run is in. We check three things: its signature against GitHub’s public keys, its audience as an exact string, and the link between that repository and the project in the URL. Nothing is stored on either side.
The link is anchored on the repository’s numeric id, never its name — a renamed repository keeps its id, and the name it frees can be registered by anyone. The GitHub App only reads which repositories exist: never your code, never a secret, never your workflows.
not on pull_request, on purpose — a PR could ask for the same token
Either every file is accepted and the site switches together, or nothing switches and the previous site stays exactly as it was. There is no half-deployed state to catch a visitor in.
No password, no allow-list, no staging URL. Your repository is the only place the site exists — which is the same reason your export is your backup.
proj-<id>.manybases.online · 500 files · 10 MiB a site · automatic HTTPS
No rollback. To go back, run the workflow on an earlier commit — we keep no copy of a site, which is also why nothing of yours sits on a server you cannot reach.
No password and no allow-list. A site is public the second the upload succeeds. A second project is how you stage.
No custom domain yet, and the address is not a name you pick: it is computed from the project id, so it never changes.
No. The workflow asks GitHub for a short-lived token that names the run’s own repository, and we accept the upload because that repository is linked to your project. There is no secret to store on either side.
Yes, and nothing changes. Both hosts answer browsers from any origin, so a site on Vercel, Netlify or your own server talks to the API exactly as one hosted here does.
By running the workflow again on an earlier commit. We keep no copy of a site. The deposit is atomic, so a refused push leaves the previous site untouched — but there is no previous-version button.
Give it a backend.