Each app below is a small product with Authdog on the private surface. Open one to see the screen or route the sample actually serves, then clone the same folder from [authdog/samples](https://github.com/authdog/samples/tree/main/starters) under `starters/`.

A signed-in session is not a permission grant. Apply [authorization](/docs/concepts/authorization) after the identity check.

## Frontend

- [Team dashboard](/docs/examples/nextjs) — Next.js. Project status for the signed-in member. Billing, Mobile, and Docs render only after userinfo accepts the session.
- [Customer navbar](/docs/examples/react) — React Elements. Shop catalog under a navbar that opens hosted sign-in. Orders stay on a server app that holds the session.
- [Support inbox](/docs/examples/remix) — Remix. Customer tickets on `/inbox`. The loader redirects anonymous agents before the list renders.
- [Field companion](/docs/examples/expo) — React Native / Expo. Today's site visits after a deep-link return. The job list renders only after userinfo accepts the token in secure storage.
- [Member site](/docs/examples/sveltekit) — SvelteKit. Public home, member library on `/library`. `getUser` redirects anonymous readers before the guides load.
- [Ops console](/docs/examples/tanstack-start) — TanStack Start. Open incidents for the on-call operator. Anonymous visitors see the sign-in link and no incident rows.
- [Workspace settings](/docs/examples/vue) — Vue. Workspace name, timezone, and join notification after hosted sign-in. The fields stay hidden until userinfo returns a user.
- [Admin console](/docs/examples/angular) — Angular. Team directory on `/directory`. The route guard keeps the list off screen until `fetchUser` returns a user.
- [Handbook](/docs/examples/astro) — Astro. Public chapters on the home page. Member chapters on `/handbook` load only after `getUser` accepts the session.
- [Resource library](/docs/examples/gatsby) — Gatsby. Titles on the public page. `GET /api/files` returns the board pack and runbook only after `requireAuth`.
- [Job board](/docs/examples/redwood) — RedwoodJS. Listings stay public. The applications function returns candidates only after `requireAuth`.

## Backend

- [Orders API](/docs/examples/express) — Express. `GET /orders` returns open orders for the signed-in clerk and 401 for everyone else.
- [Inventory API](/docs/examples/fastify) — Fastify. `GET /skus` returns on-hand stock for the signed-in clerk and 401 for everyone else.
- [Booking API](/docs/examples/fastapi) — FastAPI. `GET /bookings` returns room reservations. Routes without a session return 401.
- [Clinic portal](/docs/examples/django) — Django. `GET /appointments` returns today's clinic slots. Anonymous callers are rejected.
- [Status board](/docs/examples/flask) — Flask. `GET /` publishes component state. `GET /notes` returns the internal timeline only with a session.
- [Intake service](/docs/examples/starlette) — Starlette. `GET /intakes` returns the waiting queue. Anonymous callers are rejected.
- [Event ingest](/docs/examples/aiohttp) — aiohttp. `GET /events` returns recent door and check-in events. Handlers without a session are rejected.
- [Billing service](/docs/examples/go) — Go. `GET /invoices` returns open and paid invoices. Gin returns 401 unless Authdog authenticates the caller.
- [Policy service](/docs/examples/rust) — Rust. `GET /policies` returns shipping and refund rules. The Axum gate returns 401 without a session.
