You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.4 KiB

02 — Arquitetura

Stack

  • Build: Vite + React + TypeScript.
  • Estilos: Tailwind CSS (@tailwindcss/vite).
  • Componentes: shadcn/ui (Radix + Tailwind).
  • Routing/âncoras: @tanstack/react-router (scroll suave entre secções).
  • Animações: framer-motion (motion).
  • Ícones: lucide-react.
  • Alias: @/*./src/* (tsconfig + vite resolve).
  • Solução baseada em docker.

Tipo de sistema

  • Docker container para execução independente
  • Utilizar nginx.conf para servir os ficheiros estáticos gerados pelo build do Vite.

Estrutura de pastas (proposta)

src/
  main.tsx                # bootstrap + RouterProvider
  router.tsx              # rootRoute + indexRoute (single page)
  index.css               # Tailwind + tokens (CSS vars do design system)
  lib/
    utils.ts              # cn() (shadcn)
    scroll.ts             # helper de scroll suave para âncoras
  data/
    project.ts            # conteúdo canónico (de 03-content.md), tipado
  components/
    ui/                   # primitivos shadcn (button, card, sheet, badge, dialog...)
    layout/
      Header.tsx
      Footer.tsx
      Section.tsx         # wrapper de secção (id âncora + animação in-view)
    sections/
      Hero.tsx
      Goal.tsx            # Objetivos e contributo
      WorkPlan.tsx
      Gantt.tsx           # cronograma (inspirado em cronograma.png)
      WorkPlanCard.tsx
      Indicators.tsx
      IndicatorCard.tsx
  App.tsx                 # composição das secções na ordem da spec

Routing / navegação

  • Single-page: uma rota / que renderiza todas as secções em sequência.
  • Navegação por âncoras: #home, #goal, #work-plan, #indicators.
  • Scroll suave via helper (element.scrollIntoView({ behavior: 'smooth' })) acionado pelos itens de menu; TanStack Router para estrutura e (opcional) hash.
  • IDs estáveis em cada <Section> para deep-linking.

Dados

  • Sem backend. Conteúdo estático tipado em src/data/project.ts, derivado exclusivamente de 03-content.md.
  • Logos dos parceiros como assets em src/assets/partners/ (placeholder se em falta).

Decisões abertas (precisam validação)

  1. Logos oficiais dos parceiros — não fornecidos em input_files/; usar placeholder textual/cartão até receber ficheiros? (assumir placeholder)
  2. Hex exatos da marca INESCC — usar paleta proposta em 01 e afinar depois.