Skip to content

Commit 74de3e1

Browse files
committed
docs: Add comprehensive billing system analysis and implementation guide.
1 parent a51ba75 commit 74de3e1

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

BILLING.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Análise do Projeto e Guia de Implementação de Faturamento
2+
3+
## 1. Análise do Projeto Atual: Push to Talk
4+
5+
O projeto é uma aplicação desktop desenvolvida com **Electron**, focada em privacidade e funcionamento local.
6+
7+
### Arquitetura
8+
9+
- **Monorepo:** Organizado em dois diretórios principais:
10+
- `application/`: O código-fonte da aplicação Electron.
11+
- `website/`: A landing page promocional.
12+
- **Core (Backend Local):**
13+
- Utiliza o **whisper.cpp** (implementação C++ do modelo Whisper da OpenAI) para realizar a transcrição de áudio.
14+
- Isso garante performance nativa e que nenhum áudio saia da máquina do usuário (Privacidade 100%).
15+
- **Interface e UX:**
16+
- Funciona como um aplicativo de barra de menu (Tray App).
17+
- Possui janelas flutuantes ("Overlay") para feedback visual.
18+
- Usa **Global Hotkeys** (atalhos globais) para iniciar/parar a gravação, interceptados pela biblioteca `uiohook-napi`.
19+
- **Fluxo de Dados:**
20+
1. Usuário aperta o atalho.
21+
2. Renderer (Frontend) captura o áudio do microfone.
22+
3. Áudio é salvo temporariamente (`recording.wav`).
23+
4. Main Process invoca o binário `whisper-cli` localmente.
24+
5. Texto transcrito é inserido diretamente no campo de texto ativo do usuário (simulando digitação via scripts de SO), sem usar a área de transferência para não sobrescrever dados do usuário.
25+
26+
## 2. Implementando um Sistema de Assinatura/Cobrança
27+
28+
Para transformar este aplicativo local em um serviço pago (SaaS), você precisará de três pilares principais: **Provedor de Pagamento**, **Backend de Controle** e **Integração no Cliente**.
29+
30+
### A. Provedor de Pagamento (Payment Gateway)
31+
32+
Você precisa de um serviço para processar cartões e gerenciar assinaturas.
33+
34+
- **Lemon Squeezy (Recomendado):** Atua como "Merchant of Record". Eles lidam com todos os impostos globais, faturas e conformidade. Muito fácil de integrar com apps software.
35+
- **Stripe:** Padrão da indústria. Mais flexível, mas exige que você lide com algumas questões fiscais.
36+
- **Paddle:** Similar ao Lemon Squeezy, excelente para vendas globais de software.
37+
38+
### B. Backend de Controle (API)
39+
40+
Como o Whisper roda localmente, o app "funciona" sem internet. Para cobrar, você precisa validar se o usuário tem permissão para usar.
41+
42+
- **Função:** Validar chaves de licença ou logins de usuário.
43+
- **Tecnologias:** Pode ser simples. Um banco de dados (Supabase, Firebase) e uma API pequena (Node.js/Express, Python/FastAPI ou Serverless Functions no Vercel/Cloudflare).
44+
- **O que armazenar:**
45+
- `user_id`
46+
- `subscription_status` (active, past_due, canceled)
47+
- `expiration_date`
48+
- `license_key` (opcional, se não usar login/senha)
49+
50+
### C. Mudanças Necessárias no Electron (Application)
51+
52+
1. **Mecanismo de Bloqueio:**
53+
54+
- Ao iniciar, o app deve verificar se existe uma licença válida salva (`electron-store`).
55+
- Se não houver, deve bloquear as funcionalidades principais (transcrição) e mostrar apenas uma tela de "Login" ou "Inserir Licença".
56+
57+
2. **Verificação de Licença (Online Check):**
58+
59+
- **Login:** O usuário digita email/chave.
60+
- **Validação:** O app envia isso para seu Backend.
61+
- **Resposta:** O backend consulta o Stripe/LemonSqueezy e responde se está `ativo`.
62+
63+
3. **Segurança e Offline (Desafio de Apps Locais):**
64+
- Como bloquear alguém que desliga a internet?
65+
- **Estratégia Comum:** "Token JWT com validade". Ao logar, você salva um token criptografado localmente que vale por 3 a 7 dias. O app funciona offline com esse token. Quando expira, ele força uma verificação online.
66+
- **Ofuscação:** O código fonte Electron pode ser lido. Use ofuscação de código (javascript obfuscators) para dificultar que usuários removam a verificação de licença manualmente.
67+
68+
### Roteiro Sugerido (MVP)
69+
70+
1. **Modelo de Licença (License Key):** É mais simples que sistema de login completo. O usuário compra, recebe uma chave (ex: `KEY-1234`), e insere no app.
71+
2. **Serviço:** Use **Lemon Squeezy** com o recurso nativo de License Keys. Eles já geram a chave e oferecem uma API para você validar (`GET https://api.lemonsqueezy.com/v1/licenses/validate`).
72+
- _Vantagem:_ Você **não precisa criar backend próprio** no início. O Electron chama direto a API do Lemon Squeezy.
73+
3. **Integração:**
74+
- Crie uma tela de "Ativação".
75+
- No `main.js`, antes de `transcribe()`, verifique: `if (!isLicenseValid) showUpgradeDialog(); return;`.
76+
77+
### Exemplo de Fluxo com Lemon Squeezy (Sem Backend Próprio)
78+
79+
1. Usuário compra no seu site -> Lemon Squeezy envia email com Chave de Licença.
80+
2. Usuário abre o App -> App pede a Chave.
81+
3. App faz request: `POST https://api.lemonsqueezy.com/v1/licenses/activate`.
82+
4. Se sucesso, salva a licença e a "instance_id" no `electron-store`.
83+
5. A cada inicialização (ou a cada X dias), o app revalida a chave silenciosamente.

0 commit comments

Comments
 (0)