# AGENTS.md -- Novo Portal (White Antidote)

<!-- BEGIN CHANGE: entrypoint apos cutover; Gesior em old/; webhooks no portal -->

Site moderno em `portal/` (Next.js static + PHP 8.3 API). Sibling OTX: `../otx2_reseted`.
Gesior arquivado em `../old/` (referencia; nao e DocumentRoot).
Prod: `ot.whiteantidote.com`; tambem `dev.` / `ot-test.` / `ot-beta.`.

## Read first

Cursor rules:

- `.cursor/rules/novo-portal.mdc` (always)
- `.cursor/rules/portal-api.mdc` / `portal-frontend.mdc` / `portal-security.mdc`
- Shared: `database-schema.mdc`, `project-overview.mdc`

Docs:

- `docs/portal-dev-playbook.md`
- `docs/portal-api-map.md`
- `docs/portal-security.md`
- `docs/cleanup-notify.md`

Skill: `.cursor/skills/novo-portal/SKILL.md`

## Default approach

Gameplay server stays in OTX. Portal owns account/shop UI + JSON API.
Payments: checkout no portal; credito so via webhooks API + `processed`.
Admin wipe: `/admin` secao Wipe (`page_access >= 6`); preserva historico shop/pagamentos.
Admin Tools: orphan scan + player/account trace.
Mark `BEGIN CHANGE` / `END CHANGE`. Prefer extending existing pages/APIs over new frameworks.

<!-- BEGIN CHANGE: contexto 2026-07-30 - vocation matcher -->
Create char UX: `src/components/VocationMatcher.tsx` on `/create-account` + `/account`
reads `vocation-guide.php` scores and live-suggests starter vocation.
<!-- END CHANGE -->

<!-- END CHANGE -->
