Deploy

Deploy your own

Three ways, easiest first. The first two need no terminal and take about five minutes.

One click

Option one · nothing to install

One click

Vercel copies this repository into your own GitHub account, provisions a free Neon Postgres database and a blob store for your images, and asks you to invent one setup phrase. You never see a key.

Then open the address it gives you, claim the site with your setup phrase, and answer four questions. You can point your own domain at it whenever you like, and nothing you have written is affected when you do.

If the button ever stops provisioning the database, deploy anyway and add Neon and Blob from your project’s Storage tab. The backend is chosen from whichever environment variables are present, so nothing else changes.

Read this before using the free plan for paid work

Vercel’s Hobby plan is "restricted to non-commercial personal use only", and their definition of commercial usage includes "advertising the sale of a product or service" and asking for donations.
Verified · 12 August 2026Vercel fair use guidelines

If your portfolio advertises work you are paid for, budget for Vercel Pro or use one of the options below. The full discussion is on what it costs.

One command

Option two · any machine with Docker

One command

A rented server, an old laptop, a Raspberry Pi. App and database together, no account anywhere, nothing that phones home.

git clone https://github.com/ShadmanArafin/open_portfolio.git
cd open_portfolio
docker compose up

Open http://localhost:3000 and follow the setup. Change OPB_SETUP_TOKEN and OPB_SECRET_KEY in docker-compose.yml first.

Keep the volume. /data is where your uploads live — and your content too, if you are not using a database. Without it, replacing the container deletes your site. With it, you can throw the container away and rebuild it as often as you like, which is exactly what updating does.

From source

Option three · to work on it

From source

Node 20.9 or newer. No database needed and no account anywhere — the filesystem backend is the default.

git clone https://github.com/ShadmanArafin/open_portfolio.git
cd open_portfolio
npm ci
npm run dev

http://localhost:3000 sends you to /setup. Content lands in .opb/ — delete that folder to start over.

Backends

Where your content ends up

There is no setting for this. Whichever backend’s environment variables are present is the one used, so provisioning a database is the whole of the configuration.

BackendGood forFiles go to
Local filesystemTrying it, and a real choice on a VPS or a Pi. Refused in production on hosts that discard the disk, because the failure otherwise is a site that works for a day.A folder
PostgresDocker Compose, or any Postgres you already run.A mounted volume
Neon + Vercel BlobWhat the one-click deploy sets up.Vercel Blob
SupabaseIf you are already there. Note the free-tier pausing.Supabase Storage

Firebase, Convex, Cloudflare D1 + R2, PocketBase and Appwrite are planned and not built. Each has to pass the same conformance suite against a real instance before it ships, so none of them is offered until it has.