bison is live
Service app on port 3000. This page is the starter app from ioprodz-deploy, already running in production: build your app in its place.
Start building on a dev machine
A dev machine is the repo on a branch, running in dev mode in the cloud, with VS Code and Claude in your browser. Nothing to install.
Open a dev machine- Under New dev machine, pick
bisonand type a new branch name (it starts frommain). - In a minute or two you get the Editor, with Claude open in the terminal: tell it what to build. It knows this project's setup from
AGENTS.md. - The app runs at its own address and restarts on every save (
node --watch server.js, set in.devcontainer/devcontainer.json). Switch between Editor, Split (Claude next to the app), App and Logs. - Share link lets someone without an account see it for 1 to 24 hours. The machine sleeps after 2 hours idle and wakes when you open it.
Changing the stack (Next.js, Vite, Python…)? Ask Claude to update .devcontainer/devcontainer.json and the Dockerfile with it, then Rebuild the dev machine.
From branch to production
- Push the branch. Claude pushes its work to the dev machine's branch (never to
main). - Open a pull request on Gitea. It gets a preview at
https://bison-pr-<N>.ioprodz.comwith its own data, linked in a PR comment. Previews are LAN only; the labelpreview-publicmakes one public. Closing the PR removes it. - Merge into
main. CI builds the image, pushes it to Harbor and deploys to bison.ioprodz.com: CI runs.
In the deploy app
- Resources the running apps and databases: logs, redeploy, restart
- Previews and dev machines open previews, your dev machines, a new one
- Secrets environment variables and API keys, kept in OpenBao and synced to the apps
- Domains the addresses and their DNS
- Activity what changed and when
- Gitea repo code, pull requests, CI
What the repo holds
Dockerfile | Builds the production image. The container must listen on $PORT (3000). |
server.js, index.html | This placeholder: replace them with your app. |
.devcontainer/devcontainer.json | The dev machine: image, install step, dev command, port. |
AGENTS.md | How this project runs, for Claude and other agents. Keep it current. |
.gitea/workflows/ | deploy.yml: build and deploy on push to main; preview.yml: a preview per pull request. |
Environment variables
Already set for this app in production. Previews and dev machines get their own values, never production's.
APP_URL MONGODB_URL SMTP_HOST SMTP_PORT SMTP_USER SMTP_PASSWORD MAIL_FROM MAIL_FROM_NAME
URLs
- production · app: bison.ioprodz.com
Prefer your own computer?
Clone and run it locally
git clone https://git.ioprodz.com/osminosm/bison.git # or over SSH git clone ssh://[email protected]:222/osminosm/bison.git cd bison node --watch server.js # http://localhost:3000
Then the same flow: a branch, a pull request, merge.