Skip to content

fix: improve stability with lazy loading, error boundaries, and stora… - #1

Draft
BrenoACarvalho wants to merge 1 commit into
pedroaquinoo:mainfrom
BrenoACarvalho:fix/stability-improvements
Draft

fix: improve stability with lazy loading, error boundaries, and stora…#1
BrenoACarvalho wants to merge 1 commit into
pedroaquinoo:mainfrom
BrenoACarvalho:fix/stability-improvements

Conversation

@BrenoACarvalho

@BrenoACarvalho BrenoACarvalho commented Jul 13, 2026

Copy link
Copy Markdown

Correções de Estabilidade

Este PR resolve os principais problemas que causam quedas frequentes (tela branca, travamentos, crashes) no aplicativo.

Mudanças principais:

1. Lazy Loading dos dados JSON (~1.3MB → sob demanda)

  • lib/curriculum.ts e lib/offers.ts agora usam import() dinâmico
  • Apenas os dados do curso selecionado pelo usuário são carregados
  • Reduz drasticamente o bundle inicial, especialmente em dispositivos móveis

2. Error Boundaries (previne tela branca)

  • app/global-error.tsx — captura erros fatais no root layout
  • app/error.tsx — captura erros genéricos de rota
  • app/flow/error.tsx — erro específico para o fluxograma
  • app/simulation/error.tsx — erro na página de simulação
  • app/s/error.tsx — erro na grade compartilhada

3. Loading States

  • Spinner durante carregamento de páginas (flow, simulation, shared)

4. Proteção do localStorage

  • try/catch em todos os localStorage.setItem (previne crash por QuotaExceededError)
  • Debounce de 300ms no weekly planner (reduz I/O)

5. Otimização do Store

  • useAppStore agora usa referência estável no useSyncExternalStore
  • Analytics só dispara se os dados já estiverem carregados

Testado:

  • npx tsc --noEmit — sem erros TypeScript
  • npx next build — build completo (11 páginas estáticas)

…ge protection

- Replace static JSON imports with dynamic import() in lib/curriculum.ts and lib/offers.ts
  (reduces initial bundle from ~1.3MB to only what's needed for the selected course)
- Add global-error.tsx and route-level error.tsx files to prevent white screen crashes
- Add loading.tsx files for graceful loading states
- Fix useAppStore snapshot to use stable reference (getState directly)
- Add try/catch to all localStorage writes to prevent QuotaExceededError crashes
- Add 300ms debounce to weekly planner localStorage persistence
- Update hooks (use-course-data, use-available-classes) to handle async data loading
- Update setup-dialog and other-offerings-dialog to load data lazily

Co-authored-by: Breno Carvalho <28658627+BrenoACarvalho@users.noreply.github.com>
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.

2 participants