# @leumas/features

Shared user-facing surfaces — providers, guards, the app shell, and the Dashboard/Social/AppIndex/Account/Imperium pages that Web, Studio and iOS all compose. Studio adds admin pages on top.


The shared frontend surfaces every Leumas product composes — so Web, Studio and iOS look and behave
identically and stay DRY. **Web = these public surfaces. Studio = these + its admin pages. iOS = Web.**

**Composes:** `@leumas/{ui, theme, api-client, auth, analytics, assets-sdk, config-registry, leviathan}`.

## Exports

- **Providers:** `AppProviders` (Theme+Analytics+Api+Auth+Membership+Tenant), `useApi/useAuth/useTenant/useMembership`.
- **Guards:** `RequireAuth`, `RequireRole`, `RequireMembership` (the Leumas admin passes every gate).
- **Shell:** `AppLayout` (chrome + tenant/role nav + embedded Leviathan).
- **Surfaces:** `Login`, `Dashboard`, `AppIndexHUD` (the "Google HUD" home), `SocialFeed`, `Account`,
  `ImperiumSites` + `ImperiumRenderer` (config-driven subdomains via `api.db('configs')`).

## Usage (a product's App)

```jsx
import { AppProviders, AppLayout, AppIndexHUD, RequireMembership, ImperiumSites } from '@leumas/features';

<AppProviders apiBase={import.meta.env.VITE_API_BASE} tenant={TENANT}>
  <AppLayout>
    <Routes>
      <Route path="/" element={<AppIndexHUD />} />
      <Route path="/sites" element={<RequireMembership><ImperiumSites /></RequireMembership>} />
      {/* … */}
    </Routes>
  </AppLayout>
</AppProviders>
```


---
Source: shared/packages/features/README.md
Canonical: https://docs.leumas.tech/p/packages/features
