Aplicação frontend desenvolvida com React + Vite + TypeScript + TailwindCSS, para gerenciamento de carteiras de Bitcoin (BTC), com conversão para moedas em tempo real, que consome:
- API local de usuários (json-server)
- API externa de conversão de moedas (AwesomeAPI)
Este projeto foi desenvolvido como solução para um desafio técnico de Front-End, com foco na aplicação correta das regras de negócio, organização por responsabilidades e uso de boas práticas de arquitetura frontend.
- React
- Vite
- TypeScript
- TailwindCSS
- React Query (gerenciamento de estado assíncrono)
- React Hook Form + Zod (validação de formulários)
- json-server (API mock local)
- ✔ Identidade visual alinhada ao protótipo
- ✔ Listagem em tabela com dados da API
/users - ✔ Ações de editar (modal) e deletar por registro
- ✔ Inclusão de novas carteiras via modal
- ✔ Paginação server-side utilizando parâmetros do json-server
- ✔ Filtro full-text aplicado no servidor
- ✔ Conversão dinâmica BTC → moeda selecionada
- ✔ Implementação da regra de compra com cálculo bidirecional
O desafio tem seção "Bônus" atendida.
- ✔ Gerenciamento de estado
- ✔ Validação
- ✔ Testes
- Tabela com dados relevantes da API /users
- Nome completo
- Endereço
- Data de abertura
- Saldo em BTC
- Endereço da carteira
- Valor convertido na moeda selecionada
Ações: Editar e Deletar
- Adicionar nova carteira
- Modal com validação
- Persistência no json-server
- Editar carteira
- Modal com dados preenchidos
- Atualização via PUT
- Deletar carteira
- Confirmação antes da exclusão
- Remoção via DELETE
Implementada utilizando parâmetros do json-server:
?_page=1&_per_page=10A paginação é realizada no servidor, não no frontend.
Implementado utilizando:
?q=termoA filtragem é aplicada no servidor conforme documentação do json-server.
Listagem de moedas disponíveis: https://economia.awesomeapi.com.br/json/available/uniq
Conversão BTC -> moeda: https://economia.awesomeapi.com.br/json/last/BTC-<MOEDA>
A aplicação utiliza o campo bid retornado pela API como taxa de compra.
Fórmula aplicada:
valor_convertido = valor_carteira (BTC) * bid
Ao criar ou editar uma carteira:
- O usuário pode informar um valor de compra na moeda selecionada
- O sistema calcula automaticamente o valor correspondente em BTC
Fórmula inversa aplicada:
btc = valor_moeda / bid
Também ocorre o recálculo ao alterar o BTC manualmente.
A aplicação utiliza React Query para gerenciamento de cache, sincronização e revalidação automática de dados, evitando múltiplas requisições desnecessárias e melhorando a experiência do usuário.
Primeiramente, é necessário clonar o projeto:
git clone https://github.com/jpvilarinho/btc-wallet-dashboard.gitnpm installÉ necessário ter o json-server instalado globalmente:
npm i -g json-serverDepois de instalado:
npm run apiA API ficará disponível em: http://localhost:3004/users
npm run devAcesse: http://localhost:5173
npm run startnpm run dev— inicia o frontendnpm run api— inicia o json-servernpm run start— inicia frontend e API juntosnpm run test— executa testes (Vitest)
src/
├── app/
├── components/
├── features/
├── lib/
├── test/
├── types/
├── main.tsx
└── styles.css
A organização separa responsabilidades entre UI, serviços de API, tipagens e lógica de negócio.
- Paginação implementada no servidor para melhor escalabilidade.
- React Query utilizado para gerenciamento eficiente de cache e sincronização de dados.
- Zod adotado para validação baseada em schema com tipagem forte.
- Separação clara entre camada de UI, serviços de API e regras de negócio.
- Tipagem forte com TypeScript
- Separação de responsabilidades
- Paginação e filtro aplicados no servidor
- Integração com API externa
- Validação de formulários
- Experiência do usuário com modais e feedback visual
- Cache de requisições com React Query
A aplicação foi desenvolvida com foco em:
- Legibilidade
- Modularização
- Aplicação correta das regras de negócio
- Experiência do usuário
- Fidelidade ao protótipo fornecido
- Boas práticas de organização de código