FE-01 · Scaffold do app (OBT-348) - #1
Conversation
Pin the wave-1 stack (React 19.2, TS 5.9, Vite 7, Tailwind v4) and wire the /api dev proxy, unused until wave 2. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
CLAUDE.md §3.1 pins React 19.2 and drops the open question; README documents the scripts, the folder layout and the unused /api proxy. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
…ject-management-ecosystem
…ject-management-ecosystem
| src/ | ||
| ├── App.tsx main.tsx index.css | ||
| ├── components/{common,layout,pages,ui}/ | ||
| ├── contexts/ stores/ services/ hooks/ |
There was a problem hiding this comment.
fixtures/ is missing from this block — the folder is created in the diff and line 51 right below already points at src/fixtures/. Small thing, but since FE-05 is the whole wave-1 data layer I think it should show up in the tree too.
|
|
||
| ## DS-PROJECT | ||
|
|
||
| `DS-PROJECT/` é o protótipo aprovado pelo cliente e a fonte da verdade de design. É **somente leitura** — não é modificado por trabalho de implementação e não é versionado neste repositório (veja `.gitignore`). |
There was a problem hiding this comment.
"não é versionado neste repositório (veja
.gitignore)"
Maybe this sentence could also say where to get it? CLAUDE.md §1 still says this repo holds DS-PROJECT/, and rule zero asks every screen to be derived from it, so someone cloning fresh ends up with no prototype and no pointer. The .gitignore entry is not from this PR and I would not touch it here — just the README line.
There was a problem hiding this comment.
Dropped the section instead. The repo is public and the design package is a Drive "anyone with the link" URL, so the pointer went to CLAUDE.md §2 (Linear → Docs → Arquivos do Design, unzip into DS-PROJECT/). §1 no longer says this repo holds it. .gitignore untouched.
Side note: the prototype files are still in this public repo's history at 4bb37bf — not for this PR.
…in CLAUDE.md Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
* chore(OBT-349): self-host the Shemá fonts and brand assets Ten faces (Montserrat 400/500/600/700/900 + italic, Merriweather 300/400/700 + italic) and the brand SVGs are copied out of DS-PROJECT/design-system into public/, so nothing is fetched from a font CDN at runtime. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> * feat(OBT-349): port the Shemá design tokens into the Tailwind v4 @theme Every token in DS-PROJECT/design-system/colors_and_type.css is copied verbatim under its own name, and the Tailwind namespaces (--color-*, --text-*, --leading-*, --tracking-*, --radius-*, --shadow-*, --ease-*) alias them by var() reference so the semantic tier stays a tier of its own and a later dark palette only has to reassign the raw tokens. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> * chore(OBT-349): reject raw hex and generic greys in src/components Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> * feat(OBT-349): render the token and brand preview on the scaffold route Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> * docs(OBT-349): record the dark-mode question raised by FE-02 Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> * perf(OBT-349): ship the Shemá fonts as woff2 instead of ttf 1733 kB -> 594 kB across the ten faces. font-display: swap hides the FOIT but not the bytes, and the field runs on poor connections. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> * fix(OBT-349): catch bg-white behind variants and hex anywhere in src The bg-white selector was anchored to spaces, so hover:bg-white, dark:bg-white and bg-white/80 passed clean. Widening the glob to src/** also covers App.tsx, whose palette labels now name the CSS variable rather than repeating the hex. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> --------- Co-authored-by: DanielOBT <[email protected]> Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
Summary
FE-01 · OBT-348 — o repositório passa a ter um app Vite rodando, com a árvore de pastas que o
CLAUDE.md§4 já especifica. Toda issue seguinte da wave 1 deposita arquivos numa estrutura que existe.Toolchain —
package.jsonfixa a stack inteira do §3 para que nenhuma issue posterior precise escolher versão: React 19.2 · react-dom 19.2 · TypeScript 5.9 · Vite 7 · Tailwind v4 (via@tailwindcss/vite) · react-router-dom 7 · Zustand 5 · Axios · i18next + react-i18next · lucide-react · sonner ·cva/clsx/tailwind-merge· react-leaflet 5 + leaflet ·@radix-ui/react-slot.tsconfig.json(+.app/.node) eeslint.config.jsseguemmeaning-map-ui— referência de engenharia apenas; nenhuma decisão visual veio de lá.Proxy
/api—vite.config.tsencaminha/apiparaVITE_API_PROXY_TARGET(padrãohttp://localhost:8000, onde otripod-apiroda). Não é usado na wave 1: nenhuma tela faz chamada HTTP. Está configurado agora para que a integração da wave 2 não mexa em configuração. Documentado no README e no.env.example.Árvore
src/— exatamente a do §4, pastas presentes mesmo vazias (.gitkeep), incluindofixtures/(FE-05):src/App.tsxtraz oBrowserRouter+Toastere uma rota placeholder que prova que o Tailwind renderiza — sem cor alguma, já que os tokens são o FE-02.src/index.cssé só@import "tailwindcss". O único arquivo além da lista literal de escopo ésrc/utils/cn.ts(5 linhas,clsx+tailwind-merge), citado nominalmente no Context & specs da issue e pré-requisito do FE-03.Decisões registradas no
CLAUDE.md§3.1 (item da DoD):meaning-map-uirodam React 19.2 / TS 5.9 / Vite 7 — verificado no checkout local. A menção a React 18 era texto obsoleto e saiu.shemaobt/project-management-ecosystem;shema-consoleé obsoleto.VITE_API_PROXY_TARGETcom default).Fora de escopo, como manda a issue: tokens do design system (FE-02), qualquer componente (FE-03+), Docker/nginx/CI/Cloud Run (F5), cliente Axios e i18n (issues próprias).
Test plan
npm run devsobe emhttp://localhost:5173; o HTML servido trazlang="pt-BR"e o títuloEcossistema Shemá;/src/App.tsxé transformado pelo Vite com HMR ativonpm run build(tsc -b && vite build) limpo — 42 módulos, CSS de 9.92 kB emitido pelo Tailwindnpm run lintverde, sem warningsmin-h-screen/justify-center/tracking-[0.14em]presentes no CSS do build/apiexercitado:GET /api/healthdevolve erro de proxy (backend fora do ar), não oindex.htmldo SPA — ou seja, a rota está encaminhandoDS-PROJECT/intocado — 0 arquivos rastreados e nada no diff (segue ignorado via.gitignore)Closes OBT-348.
🤖 Generated with Claude Code