Este projeto foi transformado em uma Single-Page Application (SPA) completa utilizando Next.js 15 com App Router. A aplicação oferece uma experiência de usuário fluida e reativa, mantendo estado global e navegação sem recarregamento de página.
components/dashboard-layout.tsx: Shell principal da aplicação- Mantém elementos persistentes (sidebar, topbar, notificações)
- Gerencia estado de navegação mobile
- Inclui sistema de loading global
app/context/AppContext.tsx: Contexto React para estado da aplicação- Funcionalidades incluídas:
- Informações do usuário
- Sistema de notificações
- Estado de loading global
- Controle da sidebar mobile
hooks/use-spa-navigation.tsx: Hook personalizado para navegação- Navegação com loading states
- Notificações de transição
- Integração com router do Next.js
components/notification-system.tsx: Notificações toast persistentes- Suporte a múltiplos tipos (success, error, warning, info)
- Auto-dismiss configurável
- Posicionamento fixo e responsivo
components/global-loader.tsx: Indicador de carregamento- Overlay com backdrop blur
- Integrado com estado global
- Transições entre páginas sem reload
- Manutenção do estado da aplicação
- Breadcrumbs dinâmicos
- Indicadores visuais de navegação ativa
- Dados do usuário mantidos entre páginas
- Notificações que persistem durante navegação
- Configurações de UI preservadas
- Cache de dados do lado do cliente
- Componentes lazy-loaded quando necessário
- Roteamento do lado do cliente
- Prefetch automático de rotas
- Otimização de bundle com Next.js
- Loading states durante transições
- Feedback visual para ações do usuário
- Sidebar responsiva para mobile
- Notificações não intrusivas
app/
├── context/
│ └── AppContext.tsx # Estado global da aplicação
├── layout.tsx # Layout raiz com providers
├── page.tsx # Dashboard principal
├── estoque/
│ └── page.tsx # Página de estoque
├── reembolsos/
│ ├── page.tsx # Lista de reembolsos
│ └── novo/
│ └── page.tsx # Nova solicitação
└── vendas/
└── page.tsx # Página de vendas
components/
├── dashboard-layout.tsx # Layout principal da SPA
├── notification-system.tsx # Sistema de notificações
├── global-loader.tsx # Loading global
├── app-sidebar.tsx # Sidebar com navegação
├── app-topbar.tsx # Barra superior
└── ui/ # Componentes de interface
hooks/
└── use-spa-navigation.tsx # Hook de navegação SPA
import Link from "next/link"
// Navegação simples
<Link href="/estoque">Ir para Estoque</Link>
// Navegação com hook personalizado
const { navigate } = useSPANavigation()
navigate("/vendas", true) // true = mostrar notificaçãoimport { useAppContext } from "@/app/context/AppContext"
const { userInfo, addNotification, setIsLoading } = useAppContext()
// Adicionar notificação
addNotification({
type: "success",
message: "Operação realizada com sucesso!"
})
// Controlar loading
setIsLoading(true)"use client"
import { DashboardLayout } from "@/components/dashboard-layout"
import { useAppContext } from "@/app/context/AppContext"
export default function MinhaNovaPage() {
const { addNotification } = useAppContext()
return (
<DashboardLayout>
{/* Conteúdo da página */}
</DashboardLayout>
)
}-
Performance Superior
- Carregamento inicial mais rápido após primeira visita
- Transições instantâneas entre páginas
- Cache eficiente de recursos
-
Experiência do Usuário
- Interface mais responsiva
- Estados preservados durante navegação
- Feedback visual consistente
-
Desenvolvimento
- Estado centralizado e previsível
- Componentes reutilizáveis
- Debugging facilitado
-
SEO e Acessibilidade
- URLs preservadas para cada rota
- Histórico de navegação funcional
- Suporte a deep linking
-
Instalar dependências:
npm install --legacy-peer-deps
-
Executar em desenvolvimento:
npm run dev
-
Acessar aplicação:
http://localhost:3000
- Navegue entre as páginas usando os links da sidebar
- Teste as notificações clicando nos botões de demonstração
- Observe o estado persistente - informações ficam mantidas
- Verifique os loading states durante transições
- Use o histórico do navegador - funciona normalmente
- Implementar cache de dados com React Query
- Adicionar autenticação com estado persistente
- Implementar offline-first com Service Workers
- Adicionar animações de transição entre páginas
- Implementar lazy loading para rotas
Desenvolvido com Next.js 15, TypeScript e Tailwind CSS