Skip to content

FE-01 · Scaffold do app (OBT-348) - #1

Merged
levigtri merged 7 commits into
mainfrom
levigft/obt-348-fe-01-scaffold-do-app-em-project-management-ecosystem
Jul 30, 2026
Merged

FE-01 · Scaffold do app (OBT-348)#1
levigtri merged 7 commits into
mainfrom
levigft/obt-348-fe-01-scaffold-do-app-em-project-management-ecosystem

Conversation

@levigtri

Copy link
Copy Markdown
Member

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.

Toolchainpackage.json fixa 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) e eslint.config.js seguem meaning-map-ui — referência de engenharia apenas; nenhuma decisão visual veio de lá.

Proxy /apivite.config.ts encaminha /api para VITE_API_PROXY_TARGET (padrão http://localhost:8000, onde o tripod-api roda). 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), incluindo fixtures/ (FE-05):

src/
├── App.tsx  main.tsx  index.css
├── components/{common,layout,pages,ui}/
├── contexts/  stores/  services/  hooks/  fixtures/
├── types/  constants/  utils/  styles/  i18n/

src/App.tsx traz o BrowserRouter + Toaster e 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):

  • React major: 19.2. O milestone F1 e o frontend da casa meaning-map-ui rodam React 19.2 / TS 5.9 / Vite 7 — verificado no checkout local. A menção a React 18 era texto obsoleto e saiu.
  • Nome do repo: o frontend é este repo, shemaobt/project-management-ecosystem; shema-console é obsoleto.
  • O aviso ⚠️ "confirm before pinning" foi substituído pelo registro da resolução (data e autor), e a lista de versões fixadas ficou explícita.
  • §4.1 passou a descrever o proxy como ele ficou (VITE_API_PROXY_TARGET com 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 dev sobe em http://localhost:5173; o HTML servido traz lang="pt-BR" e o título Ecossistema Shemá; /src/App.tsx é transformado pelo Vite com HMR ativo
  • npm run build (tsc -b && vite build) limpo — 42 módulos, CSS de 9.92 kB emitido pelo Tailwind
  • npm run lint verde, sem warnings
  • Utility class renderiza: min-h-screen / justify-center / tracking-[0.14em] presentes no CSS do build
  • Proxy /api exercitado: GET /api/health devolve erro de proxy (backend fora do ar), não o index.html do SPA — ou seja, a rota está encaminhando
  • DS-PROJECT/ intocado — 0 arquivos rastreados e nada no diff (segue ignorado via .gitignore)

npm audit reporta duas advisories herdadas: brace-expansion (transitiva do ESLint, dev-only, só some com ESLint 10 — mesma situação do meaning-map-ui) e react-router RSC-mode CSRF, que afeta apenas o modo RSC e não existe versão 7.x corrigida; aqui o app é SPA com BrowserRouter. Nenhuma das duas justifica downgrade agora.

Closes OBT-348.

🤖 Generated with Claude Code

levigtri and others added 3 commits July 30, 2026 16:39
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]>
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]>
@linear-code

linear-code Bot commented Jul 30, 2026

Copy link
Copy Markdown

OBT-348

@levigtri
levigtri requested a review from joaocarvoli July 30, 2026 21:02
@levigtri levigtri self-assigned this Jul 30, 2026
@joaocarvoli
joaocarvoli requested review from joaocarvoli and removed request for joaocarvoli July 30, 2026 21:04
@joaocarvoli
joaocarvoli requested review from joaocarvoli and removed request for joaocarvoli July 30, 2026 21:07
Comment thread README.md Outdated
src/
├── App.tsx main.tsx index.css
├── components/{common,layout,pages,ui}/
├── contexts/ stores/ services/ hooks/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added, thanks.

Comment thread README.md Outdated

## 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`).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"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.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 → DocsArquivos 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.

@little-joao little-joao Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nothing blocking, two small points on the README inline

levigtri and others added 2 commits July 30, 2026 18:50
* 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]>
@levigtri
levigtri merged commit e71a1a5 into main Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants