| 1 | # Team preferences |
| 2 | |
| 3 | These are strong defaults from the project owners. Follow them where they fit, |
| 4 | and use judgment where they don't. |
| 5 | |
| 6 | ## Sign-in: passkeys first |
| 7 | |
| 8 | - People sign in with passkeys (WebAuthn). Don't add passwords. |
| 9 | - New people create their passkey from their invite link. |
| 10 | - Recovery goes through a one-time sign-in link from an admin, or email |
| 11 | verification through Cloudflare Access at `/auth/access`. Access guards only |
| 12 | that path. |
| 13 | - Machines (git, the CLI, MCP clients, runners) use Diffinery tokens, never |
| 14 | browser sessions. |
| 15 | |
| 16 | ## UI: Kumo |
| 17 | |
| 18 | - The look follows [Kumo](https://kumo-ui.com), Cloudflare's design system: |
| 19 | its color tokens (light and dark), radii, type and focus styles. The tokens |
| 20 | live as CSS variables in `apps/diffinery/src/web/assets.ts`. |
| 21 | - Kumo's components are React. Our pages are rendered on the server with |
| 22 | `hono/jsx`, so for now we match Kumo's tokens and patterns rather than |
| 23 | shipping its components. If a page grows into a client-side app, build it |
| 24 | with Kumo components. |