Connections and sign-in
Each user keeps their own connections under Account, Connections: Git hosts (GitHub, GitLab, Bitbucket), LLM provider keys, issue trackers and deployment platforms. Tevrin checks a token when you add it, stores it encrypted and never shows it again.
Sign-in works with email and password. You can also add GitHub sign-in with an OAuth App (below), or with the GitHub App, which is recommended: see GitHub App. The first registered user becomes Admin.
| Connection | Guide |
|---|---|
| GitHub | GitHub App |
| GitLab | GitLab |
| Bitbucket Cloud | Bitbucket |
| LLM providers | LLM providers |
| Jira, Linear, GitHub Issues, GitLab Issues | Issue trackers |
| Vercel, Netlify, Cloudflare, Render, Railway, Supabase | Deployments and databases |
GitHub sign-in with an OAuth App
- GitHub, Settings, Developer settings, OAuth Apps, New OAuth App.
- Homepage URL:
http://localhost:8080(Kubernetes) orhttp://localhost:3000(dev loop). - Authorization callback URL:
<homepage>/api/auth/github/callback. The code builds the callback from the host the browser used, so it must match exactly:- Kubernetes:
http://localhost:8080/api/auth/github/callback - Dev loop:
http://localhost:3000/api/auth/github/callback(sign in through the Next.js URL, not 5080) If your OAuth App takes only one callback URL, create one app per host.
- Kubernetes:
- Generate a client secret. Scopes requested:
read:user,user:email. - Set
GitHub:OAuth:ClientIdandGitHub:OAuth:ClientSecret(dev: user-secrets; k8s:GitHub__OAuth__ClientIdandGitHub__OAuth__ClientSecretinsecrets.env, then re-rundeploy-local.sh).
If either value is unset, the “Continue with GitHub” button is hidden and /api/auth/github* returns 404. Email and password sign-in still works. A failed sign-in redirects to /login?error=GITHUB_AUTH_FAILED&reason=<oauth_failed|link_required|already_linked>. A GitHub email that matches an existing unlinked account is not auto-linked: sign in, then link GitHub on the Account page.