Failed to load users.
;
}
const { users } = await res.json();
return (
Loading users...
;
return (
{data?.users.map((u) => (
{u.name}
))}
);
}
```
***
## Architecture: React Server Components (RSC) vs Taser.js API [#architecture-react-server-components-rsc-vs-taserjs-api]
When pairing Taser.js with Next.js App Router, understanding the division of responsibilities ensures clean system design:
| Responsibility | Next.js App Router (RSC & Pages) | Taser.js Subsystem (`src/server/`) |
| :--------------------- | :--------------------------------------------------------------- | :--------------------------------------------------------------- |
| **Primary Focus** | Server-rendered UI, HTML streaming, metadata, layout composition | Structured REST API, JSON endpoints, binary streams, webhooks |
| **Execution Context** | React Server Components & Client Components (`src/app/**/*.tsx`) | Type-safe route handlers (`src/server/routes/**/*.ts`) |
| **Consumers** | Web browser page visits | Mobile apps, SPA client hooks, webhooks, external developer APIs |
| **State & Middleware** | Next.js Edge middleware (`middleware.ts`) | Directory layout middleware pipelines (`src/server/routes/$.ts`) |
| **Validation** | Manual or form-action validation | Standard Schema validation (Zod, ArkType, Valibot) |
| **Response Safety** | React component props | Compile-time `.returns()` contracts & typed success responses |
***
## Next Steps [#next-steps]