Put the site online
Deploy to Vercel, to any server with Node.js, or as a Docker image.
The site is a plain Next.js app with no database, no API and no secrets. Check that it builds on your computer first:
juicyyarn buildThen pick one of the three ways below.
Environment variables
None are needed, at build time or at run time. The only variable the code reads is an optional build switch:
| Variable | When | What it does |
|---|---|---|
BUILD_STANDALONE | Build | true makes yarn build write a standalone server to .next/standalone. The Dockerfile sets it; leave it unset everywhere else. |
Vercel
Put the folder in a Git repository
Push the
juicyfolder to GitHub, GitLab or Bitbucket..gitignorealready leaves outnode_modulesand the build output.Import it in Vercel
In Vercel, add a new project from that repository. It detects Next.js; keep the default build settings.
Let Vercel use Yarn 4
Before the first deploy, add one environment variable to the project, so Vercel installs with the Yarn version pinned in
package.json:Vercel environment variableENABLE_EXPERIMENTAL_COREPACK=1Deploy
Start the deploy. Every push to the repository deploys again.
Expected result: The site answers on its Vercel address, then on your domain once you add it in the project's settings.
Any server with Node.js
On a server with Node.js 22 or newer, copy the juicy folder, then install, build and start it:
juicycorepack enable
yarn install
yarn build
yarn startIt listens on port 3030. Point your domain at it through a reverse proxy such as Nginx or Caddy, and keep it running with a process manager such as pm2 or a systemd service.
yarn start ignores a PORT variable. On a host that assigns the port itself, tell it the app listens on 3030, or start it with yarn next start -p $PORT.
Docker
The same image you run locally runs on a server. It serves a standalone build on port 3030 and needs no variables. On the server, from the juicy folder:
juicydocker build -t juicy .
docker run -d --restart unless-stopped --name juicy -p 3030:3030 juicy--restart unless-stopped starts it again after a reboot. Point your domain at port 3030 through a reverse proxy. Any host that runs a container from a Dockerfile can build it the same way.
To update the site, build the image again, then replace the container:
juicydocker build -t juicy .
docker rm -f juicy
docker run -d --restart unless-stopped --name juicy -p 3030:3030 juicy