Aplicação web que compara se vale mais a pena alugar ou comprar um carro (à vista ou financiado), a partir de dados como preço do veículo, aluguel mensal, taxa de juros e prazo do financiamento.
- Frontend: React + TypeScript + Vite
- Backend: Node.js + Express + TypeScript
- Estilos: CSS + Tailwind
- Node.js instalado (ambiente atual: 25.2.1)
- npm
cd backend
npm install
npm run devO backend sobe em http://localhost:3001.
cd frontend
npm installCopie o arquivo de exemplo de variáveis e ajuste se necessário:
copy .env.example .envDepois, inicie o frontend:
npm run devO frontend sobe em http://localhost:5173.
Dica: se você mudar a porta do backend, atualize
VITE_API_URLno.env.
VITE_API_URL— URL base do backend (padrão:http://localhost:3001)
PORT— porta do servidor (padrão:3001)FRONTEND_URL— usado em produção para configurar o CORS
GET /— retorna{ "status": "ok" }(health check)POST /api/calculate— recebe os dados e retorna o comparativoGET /docs— Swagger UI com documentação interativa da API
Nota: o Swagger UI foi mantido habilitado neste deploy de demonstração para facilitar a avaliação dos endpoints. Em um ambiente produtivo real, ele seria restrito via autenticação ou desabilitado via variáveis de ambiente.
Exemplo de request:
{
"carPrice": 50000,
"monthlyRent": 2000,
"interestRate": 1.5,
"financingTerm": 48,
"downPayment": 10000,
"comparisonPeriod": 48
}npm run dev— servidor com hot reloadnpm run build— geradist/npm run start— inicia o build emdist/
npm run dev— Vite dev servernpm run build— build de produçãonpm run preview— preview do buildnpm run lint— lint do projeto
- Frontend (Vercel): https://arkar-eight.vercel.app/ ou https://arkar.tech
- Backend (Railway): https://arkar-production.up.railway.app ou https://api.arkar.tech/ & https://api.arkar.tech/docs (público apenas para fins de apresentação)
backend/ # API Express + TypeScript
frontend/ # React + Vite + TypeScript
specs/ # especificações detalhadas
- O frontend se comunica com o backend via
fetchno endpoint/api/calculate. - Em desenvolvimento, o CORS do backend fica aberto. Em produção, configure
FRONTEND_URLpara restringir a origem permitida.