Auth Acceptance
This runbook covers the auth UX that is currently implemented in Compass.
Scope
Use this guide to manually validate:
- email/password sign up
- email/password log in
- forgot password and reset password
- Google sign in from a logged-out state
- password-only Compass usage before Google is connected
- explicit "Connect Google Calendar" from an authenticated password session
- session-expired re-auth
- logout and gate persistence
Do not use this guide to validate these flows yet:
- email verification completion
- passive same-email Google/password auto-linking by email while logged out
Setup
- Install dependencies with
bun install. - Copy
compass.example.yamltocompass.yamlat the repo root if you are running the backend locally. - Start the web app with
bun run dev:web. - Start the backend if you need live auth or password reset delivery.
- Use a fresh browser profile or clear app cookies and local storage before each scenario unless the scenario explicitly depends on persisted auth state. TIP: You can use the CLI's delete command to do this for you.
Helpful notes:
- Password reset requires backend support. If email delivery is not configured in your local environment, validate the flow in an environment where reset emails are delivered, or use backend logs in
testwhere reset links are logged instead of sent. - For "connect Google later" scenarios, start from a password-authenticated session. Do not sign out before connecting Google.
Scenario 1: Gate And Entry Points
UX
The auth modal can be opened from an ?auth= URL or, after a user has authenticated once, from persisted local auth state.
Steps
- Open
/dayin a fresh browser profile. - Confirm the logged-out account icon is not visible.
- Open
/day?auth=login. - Confirm the auth modal opens in the login view.
- Repeat with
/day?auth=signupand/day?auth=forgot. - Confirm each URL opens the matching modal view.
- Close the modal.
- Sign up or log in once, then log out and reload
/day. - Confirm the logged-out account icon and auth command-palette entries are now visible without needing
?auth=.
Expected Results
?auth=loginopens the login view.?auth=signupopens the sign-up view.?auth=forgotopens the forgot-password view.- After a successful auth, logout does not remove the local auth gate state.
Scenario 2: Email/Password Sign Up
UX
The sign-up form should collect name, email, and password, create a session, close the modal, and leave the user in an authenticated app state.
Steps
- Open
/day?auth=signup. - Enter a new name, a new email address, and a valid password.
- Submit the form.
- Wait for the modal to close.
- Refresh the page.
Expected Results
- The sign-up request succeeds without redirecting away from the app shell.
- The modal closes after success.
- The user stays authenticated after refresh.
- The logged-out account icon no longer appears.
Scenario 3: Email/Password Log In
UX
Existing password users should be able to log in from the modal. Invalid credentials should stay in the modal and show an inline error.
Steps
- Log out.
- Open the login modal.
- Attempt to log in with the correct email and an incorrect password.
- Confirm the form stays open.
- Log in again with the correct password.
Expected Results
- Invalid credentials show
Incorrect email or password.inline. - The modal remains open after a failed login.
- A successful login closes the modal and restores the authenticated session.