# Route map A global `router.beforeEach` guard reads `meta.auth`. On the first navigation it resolves the session with `GET /v1/auth/me` and caches the result in the session store. `useApi` turns any 401 into `/login?redirect=&reason=expired` and any 403 from an unverified account into `/register/pending`. | Path | Layout | Auth | Screen | API calls | |---|---|---|---|---| | `/` | none | any | Redirect | none; goes to /home or /login | | `/login` | AuthShell | public | LoginPage | GET /v1/auth/registration · POST /v1/auth/login | | `/register` | AuthShell | public | RegisterPage | POST /v1/auth/register | | `/register/pending` | AuthShell | session | PendingPage | DELETE /v1/auth/register · POST /v1/auth/logout | | `/register/validate` | AuthShell | public | VerifyPage | POST /v1/auth/verify (+ POST /login inline on 401) | | `/register/reset/request` | AuthShell | public | ResetRequestPage | POST /v1/auth/password-reset | | `/register/reset/validate` | AuthShell | public | ResetConfirmPage | POST /v1/auth/password-reset/confirm | | `/home` | DashboardShell | verified | HomePage | GET /v1/article/ | | `/article` | DashboardShell | verified | ArticlesPage | GET /v1/article/ · PATCH /{id}/publish\|unpublish · DELETE /{id} | | `/article/new` | DashboardShell | verified | ArticlesPage + NewArticleModal | POST /v1/article/ | | `/article/:id/edit` | DashboardShell | verified | EditorPage | GET /{id} · PATCH /{id} · PATCH /{id}/publish\|unpublish · POST /{id}/image · DELETE /{id} | | `/integration` | DashboardShell | verified | IntegrationPage | none | | `/users` | DashboardShell | verified | UsersPage + InviteUserModal | GET /v1/user/ · POST /v1/user/invite | | `/profile` | DashboardShell | verified | ProfilePage | GET /v1/auth/me · PATCH /v1/user/me · POST /v1/auth/password-reset | | `/invite/accept` | AuthShell | public | AcceptInvitePage (not designed) | not defined | | `/:pathMatch(.*)*` | either | any | NotFoundPage | none | Auth values: `public` needs no session, `session` needs a logged-in account (verified or not), `verified` needs a verified account, `any` applies to redirects and the catch-all.