One Shot has no passwords. Every sign-in, yours and your future users', is either a one-time code
sent by email or a Google/Apple sign-in button. On your first run, this means signing in takes one
extra step compared to typing a password, and it's worth seeing that step happen once before you
build anything on top of it.

## Signing in with a magic code

Go to `http://localhost:3000` and start a sign-in with any email address. In development, the app
doesn't actually send that email anywhere: it opens in your browser automatically, through a gem
called `letter_opener`. Open the message, copy the six-digit code, and enter it on the verification
screen. That's the whole flow, and it's the same flow a real user goes through in production, just
delivered by `letter_opener` instead of Resend.

The first time an email address signs in, it creates both a `User` and an `Account` together, in
one transaction. There's no separate signup step: signing in for the first time *is* signing up.
See [Accounts and Tenancy](/docs/core-concepts/accounts-and-tenancy) for why that single chokepoint
matters.

## Or use the two seeded accounts

`bin/setup` seeds two demo accounts so you don't have to go through the email flow just to look
around:

- `demo@oneshot.local`: a member with a subscription already active, so you can see what a paying
  workspace looks like without touching Stripe.
- `admin@oneshot.local`: an admin, exempt from entitlement checks, useful for seeing what an admin
  can reach that a regular member can't.

Request a sign-in code for either address the same way as any other email; the code still opens in
`letter_opener`.

## What you'll see

Once you're signed in, you land on the dashboard. From there you can look at:

- **Settings**, where account-level preferences and the GDPR data export/delete flow live.
- **Pricing**, which reads live from whichever billing mode is active (Local fake or real Stripe).
- **Projects**, the example account-scoped, billed resource. It exists purely as a working template
  to copy from, and `bootstrap-app` removes it once you start building your real product; see
  [Adding a Resource](/docs/building-features/adding-a-resource).

## Next

Run `bin/check` to confirm the whole install is healthy: [Verifying Your Setup](/docs/getting-started/verifying-your-setup).
