The BurnGuard dashboard at burnguard.run supports three ways to sign in: GitHub OAuth, Google OAuth, and WebAuthn passkeys. OAuth lets you reuse an existing identity you already trust. Passkeys are offered as a passwordless alternative — your biometric or hardware key stays on your device and is never transmitted, which means there is no password to phish or leak.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Verifieddanny/BurnGuard/llms.txt
Use this file to discover all available pages before exploring further.
GitHub OAuth
Clicking Continue with GitHub on the login page navigates your browser toGET /v1/auth/github. The backend initiates the OAuth flow with GitHub, which redirects back to GET /v1/auth/github/callback after you authorise the app. On success the backend redirects your browser to the frontend callback URL with a session_id query parameter, which the frontend stores as a cookie and uses for subsequent API calls.
No setup is required on your side beyond having a GitHub account.
Google OAuth
Clicking Continue with Google navigates toGET /v1/auth/google, which starts the OAuth flow with Google. After you approve access, Google redirects back to GET /v1/auth/google/callback, the backend creates or retrieves your account, and the frontend receives a session_id via the callback redirect.
No setup is required on your side beyond having a Google account.
WebAuthn Passkeys
Passkeys use the WebAuthn standard and delegate authentication to a platform authenticator on your device — Touch ID on a Mac, Face ID on an iPhone, Windows Hello on a PC, or a hardware security key such as a YubiKey. Your biometric data never leaves your device.Signing in with a passkey
Click 'Use a passkey'
On the login page, click the Use a passkey button. The frontend calls
POST /v1/auth/passkey/login/begin, which returns a WebAuthn challenge.Complete the biometric prompt
Your browser presents the platform authenticator (Touch ID, Face ID, Windows Hello, or security key). Confirm with your biometric or PIN.
Registering a passkey
Passkey registration is available to users who are already signed in via GitHub or Google. You can add a passkey from the Settings → Authentication section.Click 'Set up passkey'
In Settings, find the Authentication section and click Set up passkey. The frontend calls
POST /v1/auth/passkey/register/begin — your active session Bearer token is sent automatically. Registration requires an authenticated session.Complete the biometric prompt
Your browser asks you to register a new credential using Touch ID, Face ID, Windows Hello, or a hardware key. Approve the prompt.
Passkey registration requires an existing session — you must sign in with GitHub or Google at least once before you can enrol a passkey. After registration you can use the passkey as your sole sign-in method on any device that has the same platform authenticator synced (e.g. iCloud Keychain or Google Password Manager).
Session Management
After any successful sign-in the frontend stores asession_id value as a browser cookie. Every subsequent API call reads this cookie and attaches the value as a Bearer token in the Authorization header:
User object:
User TypeScript type has these fields. Note that created_at and updated_at exist on the type definition and the database model but are not currently included in the GET /v1/auth/me response body — the handler returns only the fields listed with ✓ below:
| Field | Type | In /v1/auth/me response | Description |
|---|---|---|---|
id | number | ✓ | Internal numeric user ID |
github_id | number (optional) | ✓ | GitHub account ID — present only if GitHub is linked |
google_id | string (optional) | ✓ | Google account ID — present only if Google is linked |
name | string | ✓ | Display name from the OAuth provider |
email | string | ✓ | Primary email address |
avatar_url | string | ✓ | Profile picture URL |
has_passkey | boolean (optional) | ✓ | Whether a passkey credential is registered |
created_at | string | — | Account creation timestamp (type only) |
updated_at | string | — | Last profile update timestamp (type only) |
401 response from /v1/auth/me means the session has expired or the cookie is missing — the frontend will redirect you back to /login.
The backend does not currently expose a logout endpoint. Signing out clears the client-side query cache and redirects to
/login, but the underlying session_id cookie persists until it expires naturally. To fully invalidate the session server-side, a POST /v1/auth/logout endpoint would need to be added.Self-Hosting Note
If you are running your own instance of the BurnGuard backend, set theWEBAUTHN_RP_ID environment variable to your own domain before starting the server:
localhost is valid for local development. Mismatched RP IDs will cause passkey registration and login to fail with a browser-level error.