Sistema de cursos online para formação em turismo cultural.
- Next.js 15 (App Router, SSR/SSG, React 18)
- React 18
- TypeScript
- Tailwind CSS (estilização)
- Zustand (estado global para loading)
- Parse/Back4App (backend BaaS para cursos, usuários e inscrições)
- Vercel (deploy)
-
Clone o repositório:
git clone <url-do-repo> cd front_formatour
-
Instale as dependências:
npm install
Isso instala:
- next
- react
- react-dom
- tailwindcss
- zustand
- typescript
- @types/react, @types/node, etc.
-
Configuração do ambiente:
- As variáveis de ambiente do Parse/Back4App estão configuradas ao back4app privado da aplicação, que é possível acessar somente com o email de um dos integrantes do time por questão de segurança.
- As rotas da API (
/api/courses,/api/enrollments,/api/user) estão conectadas ao backend.
-
Rodando localmente:
npm run dev
O app estará disponível em
http://localhost:3000. -
Build de produção:
npm run build npm start
src/app/— Páginas do Next.js (App Router)src/components/— Componentes reutilizáveis (cards, carrossel, sidebar, etc.)src/services/— Serviços para comunicação com a API/Parsesrc/store/— Stores Zustand para estado globalsrc/pages/api/— Rotas de API (Next.js API routes)public/— Imagens e assets estáticos
- Listagem de cursos (novos e inscritos)
- Inscrição e desinscrição em cursos
- Tela de detalhes do curso
- Atualização de progresso do curso para finalizado (atualmente fixa em 1%)
- Controle global de loading (spinner com Zustand)
- Controle de fluxo de dados pro back4app (com Zustand)
- Responsividade e acessibilidade
- Deploy automático no Vercel
- O loading global é controlado via
src/store/useLoadingStore.ts. - Antes de qualquer chamada à API (ex: buscar cursos, inscrever/desinscrever), o estado
isLoadingé ativado (setLoading(true)), exibindo um spinner global na interface. - Para usar em qualquer componente:
import { useLoadingStore } from '../store/useLoadingStore'; const isLoading = useLoadingStore(state => state.isLoading); const setLoading = useLoadingStore(state => state.setLoading);
- O Redux é utilizado para fazer controle do fluxo de dados para o back4app
- Centraliza os cursos: todos os cursos (inscritos ou não) são armazenados num único lugar acessível por qualquer componente.
- Permite ações síncronas e assíncronas: como fetchCourses, que busca todos os cursos do Back4App sem que cada componente precise saber como essa lógica funciona
npm run dev— Inicia o servidor de desenvolvimentonpm run build— Gera o build de produçãonpm start— Inicia o servidor em modo produção
- O deploy é feito automaticamente no Vercel a cada push na branch principal.
- O backend (Parse/Back4App) está configurado, e todas as chamadas de api estão funcionais no backend.
- O projeto segue boas práticas de acessibilidade e responsividade.
- Faça um fork do projeto
- Crie uma branch para sua feature/fix:
git checkout -b minha-feature - Commit suas alterações:
git commit -m 'feat: minha feature' - Push para o branch:
git push origin minha-feature - Abra um Pull Request
Este projeto foi desenvolvido como parte de um Trabalho de Graduação em Sistemas Para Internet. Seu objetivo é demonstrar a integração de tecnologias modernas para educação online, com foco em usabilidade, acessibilidade e boas práticas de desenvolvimento web.