Plataforma de streaming com autenticação Firebase, pagamentos via PIX e screencast de tela.
- Backend Node.js + Express
- Auth Firebase Authentication (email/senha + Google)
- Pagamentos OpenPix (PIX) com promoção de conta Free → Premium via Firebase Custom Claims
- Screencast Web API
getDisplayMedia+MediaRecorder - Frontend HTML/CSS/JS puro com Firebase SDK via CDN
- Node.js 18+
- Conta Firebase (gratuita)
- Conta OpenPix (gratuita para sandbox)
- Acesse console.firebase.google.com
- Crie um projeto → Authentication → Sign-in methods → ative E-mail/senha e Google
- Configurações do projeto → Contas de serviço → Gerar nova chave privada
- Salve como
firebase-service-account.json(NÃO comitar)
- Salve como
- Configurações do projeto → Seu app web → copie as credenciais do cliente
- Crie conta em app.openpix.com.br
- Configurações → API/Plugins → Criar App
- Copie o App ID (token de autenticação)
- Opcional: configure o Webhook em API/Plugins → Webhooks
- URL:
https://seu-dominio.com/api/payment/webhook - Evento:
OPENPIX:CHARGE_COMPLETED
- URL:
cp .env.example .env
# Edite o .env com suas credenciais reaisEdite public/js/app.js e substitua o objeto FIREBASE_CONFIG com os dados
do seu app web Firebase:
const FIREBASE_CONFIG = {
apiKey: 'AIzaSy...',
authDomain: 'meu-projeto.firebaseapp.com',
projectId: 'meu-projeto',
messagingSenderId: '123456789',
appId: '1:123456789:web:abc123',
};npm install
npm run dev # desenvolvimento com nodemon
npm start # produçãoAcesse: http://localhost:3000
Blueycast/
├── server.js # Express server + static files
├── .env.example # Template de variáveis de ambiente
├── middleware/
│ ├── firebase.js # Inicialização Firebase Admin SDK
│ └── authMiddleware.js # Verificação de token + premium guard
├── routes/
│ ├── videos.js # Catálogo (free e premium)
│ └── payment.js # PIX via OpenPix, webhook, promoção de conta
└── public/
├── index.html # SPA: tela de auth + app
├── css/styles.css # Design system dark/amber
└── js/app.js # Firebase Auth, player, screencast, modal PIX
Usuário clica "Assinar Premium"
→ POST /api/payment/pix/create
→ OpenPix cria cobrança, retorna QR code + brCode
→ Frontend exibe QR code
→ Usuário paga pelo app do banco
→ Webhook OpenPix chama POST /api/payment/webhook
OU usuário clica "Já paguei" → GET /api/payment/pix/status/:id
→ Backend verifica status com OpenPix
→ Se COMPLETED: Firebase Admin seta custom claim { premium: true }
→ Frontend força refresh do token → UI atualiza para Premium
O botão "Screencast da Tela" usa navigator.mediaDevices.getDisplayMedia() para
capturar a tela (com áudio opcional), grava com MediaRecorder e ao finalizar gera
um arquivo .webm para preview e download — sem precisar de servidor.
- Use HTTPS (requisito do
getDisplayMediae Firebase Auth) - Configure
ALLOWED_ORIGINno.envcom seu domínio - Substitua o Map de
pendingChargespor Redis ou banco de dados - Configure o webhook OpenPix para ativação automática sem polling
- Adicione os vídeos num banco de dados real (PostgreSQL, Firestore, etc.)