Build it with Claude, put it on GitHub, press Deploy. A few minutes later it is live on its own address with a padlock — no tickets, no waiting.
Claude will happily build something that cannot be published — an app that listens on the wrong port, or one with the password baked into the code. Paste this at the start of your project so it builds the right shape from the beginning. Fixing it afterwards is slower than starting right.
This project will be published on DGR Apps (Linux container, public address on dgr-apps.com). Please build it so it deploys without changes: - A static site, a Node app, or anything at all if you include a Dockerfile. - If it is a Node server: listen on process.env.PORT (it will be 8080), and include a "start" script in package.json. - If it is a built front end (Vite, React, Vue, Astro): include a "build" script that outputs to dist/. - Commit the lockfile (package-lock.json, pnpm-lock.yaml or yarn.lock). - Never put passwords, API keys or tokens in the code or in a committed file. Read them from environment variables and tell me which ones you used — I will add the values on the deploy page. - If this is a draft nobody should find on Google, put <meta name="robots" content="noindex"> in the page head.
If you are keeping the project around, ask Claude to drop the same text into a
CLAUDE.md file in the repo. It will then follow the rules every time you come back to it,
including months later.
The repo has to live in the DGR-Media organisation. New repos show up in the deploy page immediately — nobody has to grant access first.
Private is fine. Public is fine. It makes no difference to publishing, and the site itself is public either way once deployed.
The one thing that will stop you. If the repo contains something that looks like
a password or a key — a .env file, a certificate, a connection string with a password
in it — the deploy is refused and nothing is published. That is deliberate. Take the secret out of
the repo, and add it as an environment variable on the deploy page instead.
In Admin, open DGR Apps in the sidebar, then New app. Five fields, three of which you can usually ignore.
| Field | What to put |
|---|---|
| Repository | Pick yours from the list. Newest first. |
| Branch | Fills in automatically with the repo's default. Change it if you are publishing from somewhere else. |
| Address | The part before .dgr-apps.com. Suggested from the repo name — lowercase letters, numbers and dashes. You see the full address as you type. |
| App folder | Leave empty unless the app sits in a subfolder of the repo. |
| Environment variables | One NAME=value per line. This is where keys and passwords go. Values are stored and applied to the app, and never shown again on the page. |
Press Create and deploy and you land on the app's page, which updates itself while it works.
Each app has three buttons.
Deploys are not instant-swap: there are a few seconds where the app restarts. Fine for a marketing site, worth knowing if you are demoing live.
Failures are shown in plain language on the app's page, and every attempt keeps its full build log — click log next to any row in the history.
Nothing recognisable was found — no index.html, no package.json with a
usable script, no Dockerfile.
Fix: exactly what it says. Ask Claude for a Dockerfile that listens on port 8080, push, press Deploy.
A key, certificate or password was found in the repo. The message names the files.
Fix: remove them from the repo, read them from environment variables instead, and
add the values in the app's settings. If it was only ever an example file, rename it to something
like .env.example.
Your app did not compile. This is the ordinary kind of broken.
Fix: open the build log, give the error to Claude, push the fix, press Deploy. Your live site was never touched.
It built and started, but never answered. Almost always the wrong port.
Fix: make sure the app listens on process.env.PORT. The site stayed
up on the old version throughout.
There is a limit on how many apps run at once. Delete one you have finished with, or ask Ramy to make the plan bigger.
Live (no HTTPS) means the site is working, but the certificate has not come through yet. It is reachable — just not with a padlock. Press Deploy again a few minutes later and it usually sorts itself out.
Failed on an app that has never worked means the first deploy never succeeded. The address and certificate are kept so a retry is quick. On an app that has worked, the old version is still serving and visitors saw nothing.
<meta name="robots" content="noindex"> for drafts so they stay out of Google.