Um PWA (Progressive Web App) moderno e funcional para encontrar e usar estações de carregamento de carros elétricos. Projeto desenvolvido para a matéria Projeto 5 do segundo semestre de 2025 no curso de Design no Mackenzie.
O E-Flow é um aplicativo completo que permite aos usuários:
- 🔍 Encontrar estações de carregamento próximas em um mapa interativo
- 📍 Ver detalhes de cada estação (potência, preço, conectores disponíveis)
- 💳 Processar pagamentos de forma segura (mockado)
- ⚡ Acompanhar o progresso do carregamento em tempo real
- 📱 Funcionar offline como um app nativo (PWA)
Este projeto foi construído com as melhores ferramentas modernas:
- React 18 - Biblioteca JavaScript para interfaces de usuário
- TypeScript - JavaScript com tipagem estática (sem
anypermitido! 🛡️) - Vite - Build tool ultra-rápido para desenvolvimento
- Bun 1.3.2 - Runtime JavaScript moderno e rápido
- Tailwind CSS - Framework CSS utility-first para estilização
- Leaflet - Biblioteca open-source para mapas interativos
- React Router - Roteamento para aplicações React
- PWA Plugin - Transforma o app em Progressive Web App
Antes de começar, você precisa ter instalado:
- Bun 1.3.2 - O runtime JavaScript que estamos usando
- Node.js (opcional, mas recomendado para compatibilidade)
cd e-flowbun installIsso vai instalar todas as dependências necessárias usando o Bun.
bun run devOu usando o comando direto:
bunx --bun viteO app estará disponível em http://localhost:5173 (ou outra porta se 5173 estiver ocupada).
bun run buildIsso gera os arquivos otimizados na pasta dist/.
bun run preview-
Tela Inicial (Splash)
- Logo do E-Flow aparece por 2 segundos
- Redireciona automaticamente para login ou mapa (se já estiver logado)
-
Login
- Use qualquer email e senha (tudo é mockado!)
- O sistema aceita qualquer combinação e cria um usuário automaticamente
-
Mapa de Estações
- Visualize todas as estações de carregamento em São Paulo
- Filtre por "Todas" ou apenas "Disponíveis"
- Clique em um marcador para ver detalhes no popup
- Clique em "Ver Detalhes" para ir à página da estação
-
Detalhes da Estação
- Veja informações completas: potência, preço, conectores, avaliação
- Clique em "Iniciar Carregamento" para prosseguir
-
Pagamento
- Escolha o método de pagamento (Cartão de Crédito, Débito ou PIX)
- Veja o resumo do carregamento e valor total
- Confirme o pagamento
-
Status do Pagamento
- Aguarde a confirmação (simulado)
- O carregamento inicia automaticamente após aprovação
-
Status do Carregamento
- Acompanhe o progresso em tempo real
- Veja a porcentagem da bateria, energia entregue e tempo restante
- Opção de cancelar (se necessário)
-
Sucesso!
- Tela de confirmação com resumo completo
- Energia entregue, duração e valor pago
- Botão para voltar ao mapa
e-flow/
├── src/
│ ├── components/ # Componentes reutilizáveis (futuro)
│ ├── pages/ # Páginas/rotas do aplicativo
│ │ ├── Splash.tsx # Tela inicial com logo
│ │ ├── Login.tsx # Tela de login
│ │ ├── MapView.tsx # Mapa com estações
│ │ ├── StationDetail.tsx # Detalhes da estação
│ │ ├── Payment.tsx # Formulário de pagamento
│ │ ├── PaymentStatus.tsx # Status do pagamento
│ │ ├── ChargingStatus.tsx # Status do carregamento
│ │ └── Success.tsx # Tela de sucesso
│ ├── services/ # Serviços mockados
│ │ ├── auth.ts # Autenticação (localStorage)
│ │ ├── stations.ts # Dados das estações
│ │ ├── payment.ts # Processamento de pagamento
│ │ └── charging.ts # Simulação de carregamento
│ ├── types/ # Definições TypeScript
│ │ └── index.ts # Interfaces e tipos
│ ├── utils/ # Funções utilitárias
│ │ └── storage.ts # Helpers para localStorage
│ ├── App.tsx # Componente principal com rotas
│ ├── main.tsx # Entry point React
│ └── index.css # Estilos globais + Tailwind
├── public/
│ ├── assets/ # Assets do design (SVGs, imagens)
│ ├── icons/ # Ícones PWA
│ └── manifest.json # Manifest do PWA
├── vite.config.ts # Configuração do Vite
├── tailwind.config.js # Configuração do Tailwind
├── tsconfig.json # Configuração TypeScript
└── package.json # Dependências e scripts
O aplicativo usa Tailwind CSS para estilização, com um sistema de cores baseado em verde (primary) para representar energia limpa e sustentabilidade.
- Primary (Verde):
#10b981- Cor principal do app - Background:
#f9fafb(gray-50) - Cards: Branco com sombra suave
.btn-primary- Botão principal (verde).btn-secondary- Botão secundário (cinza).btn-danger- Botão de ação destrutiva (vermelho).input- Campo de entrada de texto.card- Container de card com sombra
Todas as funcionalidades são completamente mockadas para demonstração:
- ✅ Autenticação: Qualquer email/senha funciona
- ✅ Estações: 6 estações mockadas em São Paulo
- ✅ Pagamentos: Processamento simulado (sempre aprovado)
- ✅ Carregamento: Progresso simulado com atualizações a cada 2 segundos
As estações estão localizadas em pontos reais de São Paulo:
- Shopping Center Norte
- Parque Ibirapuera
- Avenida Paulista
- Shopping Morumbi
- Aeroporto de Congonhas
- Parque Villa-Lobos
O E-Flow é um PWA completo, o que significa:
- ✅ Instalável: Pode ser instalado como app nativo no celular
- ✅ Offline: Funciona sem internet (dados em cache)
- ✅ Service Worker: Cache automático de assets e rotas
- ✅ Manifest: Configuração para instalação
- Abra o app no navegador mobile
- Procure a opção "Adicionar à Tela Inicial" ou "Instalar App"
- Confirme a instalação
- O app aparecerá como um ícone na tela inicial!
# Desenvolvimento (com hot reload)
bun run dev
# Build para produção
bun run build
# Preview da build
bun run preview
# Verificar tipos TypeScript
bun run type-checkTodos os comandos usam bunx --bun para garantir que o Bun execute os binários:
# Desenvolvimento
bunx --bun vite
# Type checking
bunx --bun tsc --noEmitImportante: A ordem correta é bunx --bun <comando>, não bunx <comando> --bun!
O aplicativo usa Leaflet com tiles do OpenStreetMap. Os mapas são:
- Gratuitos e open-source
- Funcionam offline (após primeiro carregamento)
- Cacheados pelo Service Worker
- Biblioteca madura e amplamente usada
- Ecossistema rico de ferramentas
- Fácil de aprender e manter
- Type safety previne bugs
- Melhor experiência de desenvolvimento (autocomplete)
- Código mais legível e autodocumentado
- Build extremamente rápido
- Hot Module Replacement (HMR) instantâneo
- Otimizações automáticas para produção
- Runtime JavaScript moderno e rápido
- Compatível com Node.js
- Instalação de pacotes muito rápida
- Desenvolvimento rápido
- Consistência visual
- Fácil manutenção
- Purge automático (remove CSS não usado)
O projeto está configurado para deploy automático na Vercel!
O arquivo vercel.json já está configurado com:
- Build Command:
bun run build:vite(usa Vite para PWA completo) - Output Directory:
dist - Install Command:
bun install - Framework: Vite (detectado automaticamente)
-
Instale a Vercel CLI (opcional):
npm i -g vercel
-
Faça login:
vercel login
-
Deploy:
vercel
- Conecte seu repositório na Vercel
- A Vercel detectará automaticamente as configurações do
vercel.json - O build será executado automaticamente em cada push
Se preferir configurar manualmente na interface da Vercel:
- Framework Preset: Vite
- Build Command:
bun run build:vite - Output Directory:
dist - Install Command:
bun install - Node.js Version: 18.x ou superior (a Vercel usará Bun automaticamente se disponível)
A Vercel suporta Bun! Certifique-se de que:
- O
package.jsonespecifica"engines": { "bun": "1.3.2" } - O comando de build usa
bunx --bunoubun run
Se precisar de variáveis de ambiente no futuro, configure-as no dashboard da Vercel em: Settings → Environment Variables
- Verifique se o Leaflet CSS está sendo carregado
- Confirme que os tiles do OpenStreetMap estão acessíveis
- Em desenvolvimento, pode haver CORS issues (normal em alguns navegadores)
- Limpe o cache do navegador
- Verifique o console para erros
- Tente em modo anônimo
- Confirme que o PostCSS está configurado
- Verifique se
@tailwindestá noindex.css - Reinicie o servidor de desenvolvimento
- React Documentation
- TypeScript Handbook
- Vite Guide
- Bun Documentation
- Tailwind CSS
- Leaflet Documentation
- PWA Guide
Este projeto está sob a licença GNU GPL v3. Veja o arquivo LICENSE para mais detalhes.
Os assets de design estão sob licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0. Veja LICENSE.assets para mais detalhes.
- Design: Projeto da matéria Projeto 5 - Mackenzie
- Desenvolvimento: Implementação técnica do design
- OpenStreetMap pelos tiles de mapa gratuitos
- Comunidade open-source pelas ferramentas incríveis
- Professores e colegas do Mackenzie pelo feedback
Feito com ⚡ e 💚 para um futuro mais sustentável!
"A jornada de mil milhas começa com um único passo... ou neste caso, com uma única carga de bateria!" 🚗⚡