Step 0
What you need
- A Tuploy account. Sign in at tuploy.com with Discord or Google. New accounts receive €1 of welcome credit, which covers the first deploy in full.
- Your project as a ZIP file. Max size: 50 MB. If your project includes
node_modules,.gitor.next, you can leave them in — the server strips them. To stay under the size limit, exclude them before zipping. - A modern browser. Chromium-based browsers, Firefox and Safari all work.
Walkthrough
From sign-in to a live URL
We'll deploy the same Next.js + Prisma sample used in the other guides. The flow is identical for any framework Tuploy supports.
Sign in & land on the dashboard
Click Sign in and pick Discord or Google. On first sign-in Tuploy provisions your Gitea organisation and Coolify project automatically — you don't need to configure anything.
Open the Deploy wizard
In the left sidebar, click Deploy. You land on a single-page wizard that walks you through Upload → Preview → Deploy.
Drop your ZIP
Drag the ZIP onto the wizard or click to pick it from your file picker. Tuploy uploads it (with a progress bar) and immediately starts analyzing it server-side: framework detection, database hints from package.json or prisma/, and a list of env vars it sees in .env.example.
Review the analysis & pick a database
The Preview step shows what Tuploy found and lets you adjust before deploying:
- App name — the subdomain becomes
{name}.tuploy.app. - App tier — Basic, Standard, Pro or Ultra. Resize anytime later.
- Database — if Tuploy detected a database dependency, pick an existing one from the dropdown or create a fresh one inline (PostgreSQL, MySQL, MariaDB, Redis or MongoDB).
- Environment variables — fill the values for each detected key. Tuploy injects them into the container at runtime, overriding any
.envin your ZIP.
Database auto-injection
When you attach a managed database, theDATABASE_URL / REDIS_URL / MONGO_URL connection string is wired into the container automatically — you don't need to copy it manually.Hit Deploy & watch the build
Click Deploy. The wizard streams the build log live. Most apps go from queued to live in 30–90 seconds.
Open your live URL
When the build finishes, the wizard reveals the live URL. Click it to open the deployed app in a new tab.
After the first deploy
Manage your app
Every app you deploy gets its own page under Applications in the sidebar. From there you can:
- Redeploy — upload a new ZIP to publish a new version. The subdomain, env vars and attached database carry over.
- Edit env vars without redeploying. Changes propagate on the next restart.
- Resize the app tier. Useful when traffic outgrows Basic.
- Attach a custom domain (requires account level 2 — any past top-up qualifies). Point a CNAME at
tuploy.comand SSL provisions automatically. - Delete the app when you no longer need it. Billing stops at deletion.
Billing is per minute
Apps and databases bill by the minute, not by deploy. If you stop using an app, delete it from the Applications page to stop billing. The dashboard shows daily and projected monthly costs for every resource.Troubleshooting
When deploys fail
Upload rejected: too large
Maximum upload size is 50 MB. Exclude node_modules/, .git/, .next/, dist/ and any large media assets before zipping. The CLI excludes them automatically — if you hit this limit often, switch to the CLI flow.
Build fails on a missing env var
The build log highlights the missing key. Go back to Preview (or open the app page after the failure), set the var, and click Retry.
Plan limit reached
Your account is at its concurrent-resource cap for your level. Open Billing, top up your wallet — or delete an app you no longer need from Applications. There's no automatic overwrite for safety reasons.
What never happens by accident
The dashboard requires an explicit click to delete anything. Deploys never overwrite existing apps unless you intentionally pick an existing app name in Preview — and even then it's a clearly labelled redeploy, not a silent replace.Where to next

