Simulador de valor de Bitcoin em Reais. Converta BRL ⇄ BTC / mBTC / satoshi, veja o histórico e simule quanto um valor teria rendido — de trás para frente.
Um conversor de Bitcoin com uma pergunta a mais: em vez de mostrar apenas quanto o BTC valia no passado, o Calculus pega o valor que você digitou e mostra como ele se comportaria em cada momento da história.
Três modos de gráfico:
| Modo | Responde |
|---|---|
| Preço do BTC | Quanto valia 1 BTC em cada momento. |
| Simulação | Quanto o seu valor compraria/valeria em cada momento (R$ 1.000 → quantos mBTC; 5 mBTC → quantos reais). |
| Rendimento | Você "compra" na data escolhida e vê quanto essa compra valeria ao longo do tempo, para frente até hoje e para trás. |
Exemplo: R$ 10 investidos em 15/03/2014 viraram 0,0065 BTC — hoje isso vale cerca de R$ 2.586 (+25.764%).
- Conversor bidirecional BRL ⇄ BTC / mBTC / satoshi, aceitando vírgula ou ponto.
- Cotação "Agora" ou "Em uma data" — campo de data/hora desde jun/2013 ou clique direto num ponto do gráfico.
- Oito períodos: 1 D, 5 D, 1 M, 6 M, YTD, 1 A, 5 A e Máx, com troca automática de fonte por período.
- Preço ao vivo por WebSocket da Binance, com polling REST como reserva.
- Painéis opcionais: "Renda seria" / "E se…" e resumo do período (máxima, mínima, média, variação).
- Opções ocultas na engrenagem: fonte de dados, tempo real, escala logarítmica, altura do gráfico, tema claro/escuro, marcadores de máx/mín.
- Link compartilhável com valor, unidades, período, modo e data (
?v=10&de=BRL¶=BTC&p=MAX&modo=yield&data=…). - Ajuda apenas sob demanda: tooltip no ícone
?e popovers que não bloqueiam a tela. Sem tour, sem dicas automáticas. - Interface em português, tema claro e escuro, responsiva até 375 px.
git clone https://github.com/Oluizk/Calculus.git
cd Calculus
npm install
npm run devAbre em http://localhost:5173.
| Script | O que faz |
|---|---|
npm run dev |
Servidor de desenvolvimento (Vite). |
npm run build |
Build estático em dist/. |
npm run preview |
Serve o dist/ para conferência. |
npm run icons |
Regenera build/icon.ico e build/icon.png. |
npm run electron:dev |
Sobe o Vite e abre o app desktop apontando para ele. |
npm run app:win |
Gera o instalador e o portátil .exe em release/. |
npm run docker:build / docker:run |
Imagem local e container em http://localhost:8080. |
O empacotamento usa Electron + electron-builder e produz dois arquivos em release/:
Calculus-1.0.0-setup.exe— instalador NSIS, permite escolher a pasta, cria atalhos.Calculus-1.0.0-portable.exe— executável único, não instala nada.
npm install
npm run app:winPara Linux (AppImage e .deb) use npm run app:linux; para macOS (.dmg), npm run app:mac.
Detalhes da versão desktop:
- Em produção a interface é servida por um protocolo próprio (
app://calculus/) em vez defile://, para que as chamadas às APIs públicas e o WebSocket de preço passem pelo CORS normalmente. contextIsolationligado,nodeIntegrationdesligado, sandbox ativo e nenhum canal IPC aberto — o preload expõe apenas versão e plataforma.- Links externos abrem no navegador padrão, nunca dentro da janela do app.
- Instância única: abrir de novo foca a janela existente.
Cada tag v* dispara o workflow de release, que compila Windows e Linux e anexa os arquivos ao GitHub Releases:
npm version patch # ou minor / major
git push --follow-tagsdocker compose up -d # http://localhost:8080Ou direto da imagem publicada:
docker run --rm -p 8080:80 ghcr.io/oluizk/calculus:latestA imagem é multi-stage: node:22-alpine compila e nginx:1.27-alpine serve os estáticos,
com fallback de SPA, gzip, cache imutável nos assets com hash e no-cache no index.html.
O build da imagem não baixa o binário do Electron (ELECTRON_SKIP_BINARY_DOWNLOAD=1).
| Destino | Gatilho | Workflow |
|---|---|---|
| GitHub Pages | push em main |
deploy-pages.yml |
| Imagem no GHCR | push em main e tags v* |
docker.yml |
.exe, .AppImage, .deb no Releases |
tags v* |
release.yml |
| Build web + imagem (verificação) | push e pull request | ci.yml |
O base do Vite é './', então o mesmo build funciona em subpasta (Pages), na raiz de um domínio,
dentro do container e dentro do Electron.
Neste repositório o Pages já está ligado com Source: GitHub Actions — cada push em
mainrepublica o site. Em um fork, se o primeiro deploy falhar em Create Pages site, ligue o Pages uma vez em Settings → Pages e rode o workflow de novo.Como o app é totalmente estático e só consome APIs públicas, ele também sobe em Netlify, Vercel, Cloudflare Pages ou qualquer servidor de arquivos — basta publicar
dist/.
Todas públicas, sem chave de API:
| Fonte | Uso | Cobertura |
|---|---|---|
| Binance (par BTCBRL) | 1 D a 5 A e preço ao vivo | desde out/2020 |
| Mercado Bitcoin (API v4) | período Máx e reserva geral | desde jun/2013 |
| CoinGecko | última reserva | últimos 365 dias |
Em "Automática" o app tenta as fontes nessa ordem e cai para a próxima em caso de falha. O CryptoCompare foi removido por passar a exigir chave de API.
src/
api/sources.js adaptadores Binance / Mercado Bitcoin / CoinGecko
api/market.js períodos, busca com fallback, cotação por data, feed ao vivo
composables/ useMarket (estado + cache), useSettings (localStorage), useToast
components/ PriceChart (SVG próprio), Converter, QuoteDate, InfoPanel, SettingsPanel…
utils/ units (conversões), format (pt-BR)
electron/ processo principal (.cjs) e preload do app desktop
docker/nginx.conf configuração do servidor da imagem
scripts/make-icons.mjs gera o .ico e o .png do app sem dependências externas
.github/workflows/ CI, Pages, Docker e release do desktop
O gráfico é SVG desenhado à mão (eixos, escala log, hover, marcadores) — sem biblioteca de charts.
Issues e pull requests são bem-vindos. Antes de abrir um PR, rode npm run build para garantir que
o projeto compila. Mudanças de interface: mantenha a regra do projeto de ajuda só sob demanda,
sem textos automáticos ou tours.
Ferramenta educativa. Os dados vêm de APIs públicas de terceiros, podem divergir entre corretoras e não constituem recomendação de investimento.
MIT © Oluizk