Check it works
What a healthy copy looks like, and a first run through it from sign-in to a first story.
The containers
docker compose ps -a
A healthy copy with self-hosted Convex:
| Service | State |
|---|---|
web | Up (healthy) |
convex-backend | Up (healthy) |
convex-dashboard | Up |
convex-setup | Exited (0) |
convex-admin-key | Exited (0) |
With Convex's cloud, only web and convex-setup. The two one-shot services are meant to exit; 0 means they
worked. On Coolify and Dokploy, the same services show in their logs and container lists.
The setup step's log ends with "Convex is set up." and, until the owner account exists, the setup code:
docker compose logs convex-setup
If convex-setup exited with an error, web doesn't start. Its log says why; the usual causes are a wrong
CONVEX_DEPLOY_KEY (Convex answers "401 Invalid Convex deploy key") or neither Convex setting set.
A first run
- The site opens
Open
SITE_URL. You see the sign-in screen, with Create your account while there's no owner yet. Nothing else: a copy you run yourself has no public website at/. - You can create the owner account
The setup code, a username and a password twice. You land on Today.
- You can sign out and in again
Account menu (bottom left, your username) > Sign out, then sign in with the username and password. This proves sign-in reaches Convex and back (on a server: that
NEXT_PUBLIC_CONVEX_URLand its websockets pass through your proxy). - Your OpenRouter key is accepted
Settings > Keys > OpenRouter > Add key. CareerBot checks the key before saving it.
- The AI answers
Settings > AI > Try it: "Ask the model one question to check your key and see how it answers." The answer shows with the model, how long it took and what it cost. It's the Test call, paid from your AI budget.
- A first story is read
Tell the story of one job, the way Getting started on Today leads you. CareerBot reads it in the background (Read a story), and the facts it finds come to Review. Give it time: telling a story well takes 20 minutes or more a job, and reading it isn't instant.
- Background work shows in Activity
Activity lists the background work as it runs and how it went. A step that failed says so there.
If something's off
- The site doesn't open on a server: check the DNS records and the proxy's domain for
web(port 3000 in the container). - The sign-in screen says "This copy’s Convex isn’t set up for username and password sign-in: set CAREERBOT_MODE=self-hosted in its environment.": the Convex deployment lacks
CAREERBOT_MODE. Compose sets it; on the Cloudflare way, set it withnpx convex env set CAREERBOT_MODE self-hosted. - "That setup code doesn’t work. Check it in the install’s output, or make a new one.": a newer code was made (each deploy makes one). Use the newest, or
docker compose run --rm convex-setup new-setup-code. - Google or GitHub sends people back to an error: the callback URL in the OAuth app must be
CONVEX_SITE_ORIGIN(orhttps://your-deployment.convex.site) plus/api/auth/callback/googleor/github, andSITE_URLmust be the address people opened.
More: Troubleshooting. Next: First steps.
Edit this page on GitHub