Solo · API + Web · desde nov 2025, em evolução. Uma psicóloga querendo atender online não devia ter que costurar quatro ferramentas e quatro logins. Construí o Germina Prime ponta a ponta para a cliente: uma plataforma única na marca dela, com agendamento ciente de fuso, sessões de vídeo que acontecem dentro do produto (terapia 1:1 e turmas ao vivo), um blog que ela mesma publica e uma loja de e-books e cursos por turma. No caminho virou multi-terapeuta, migrou o pagamento de só PIX pra Stripe com parcelamento no cartão, e foi rebatizada do nome pessoal da fundadora pra Germina Prime em meados de 2026.
O que ele resolve
Uma psicóloga indo pro online normalmente acaba com Calendly pra agenda, Zoom pra sessão, algum marketplace pra curso e um site no Wix por cima - quatro logins, quatro contas, quatro lugares pra quebrar, e um paciente que precisa instalar app pra ser atendido. O Germina é uma plataforma só, na marca dela, onde agendamento, sessão, blog e loja moram juntos, e o paciente só clica num link.
Vídeo que faz dois papéis
As sessões acontecem dentro da plataforma, sobre o Stream Video SDK (WebRTC) com tokens por papel gerados no servidor. A mesma infraestrutura serve dois modos bem diferentes: terapia 1:1, onde a terapeuta tem o token de admin que permite compartilhar tela; e turmas de curso, onde um host conduz a aula pra 30+ alunos que entram com câmera e microfone mutados automaticamente, com o host podendo mutar individualmente e encerrar a sessão pra todos de forma limpa.
Agendamento
Agendamento ciente de fuso fixado em America/São_Paulo, horários de trabalho e serviços configuráveis pela terapeuta com preço próprio, um índice de horários que impede agendamento duplo, e um cronômetro de consulta em sessão que persiste o tempo decorrido no agendamento.
A loja, feita direito
Um modelo genérico de item de loja serve e-books, produtos avulsos e cursos por turma. Cada item pode ter turmas com capacidade, janela de abertura/fechamento e preço próprios; o checkout roda no Stripe com cartão e boleto, um cron expira pedidos pendentes parados, e o status de pagamento volta pro comprador em tempo real por um canal WebSocket dedicado - então ele vê 'pago' no instante em que o webhook chega.
Feito pra durar
Clean architecture (use-cases, repositórios, modelos de domínio), schema migrations-first (sem auto-sync em produção), hardening de segurança (Helmet, allowlist de CORS, bcrypt, sanitização XSS no conteúdo do usuário) e graceful shutdown drenando o pool de conexões. Testado com Jest no backend e Vitest no frontend. Entregue completo para a cliente; sigo evoluindo.
- Por que vídeo dentro da plataforma em vez de linkar Zoom?WebRTC dentro da plataformaA sessão é o produto. Mantê-la na marca, com compartilhamento de tela no 1:1 e um modo de grupo gerenciado pra cursos, é o diferencial - e tira a fricção de instalar app que perde paciente antes da primeira chamada.
- Por que o Stream Video SDK?WebRTC gerenciado + tokens por papelWebRTC de produção com tokens por papel gerados no servidor e chamadas de grupo de verdade, sem ter que rodar e escalar meus próprios media servers. Permitiu uma infraestrutura só servir terapia 1:1 e curso 30+.
- Por que modelo genérico de item de loja + turmas?Um modelo, vários tipos de produtoE-book, produto avulso e curso por turma compartilham um modelo só, e as janelas de matrícula de um curso são só turmas. Lançar uma turma nova é dado, não mudança de código.
- Como impedir duas pessoas de comprarem a última vaga de uma turma?SELECT FOR UPDATE na inscriçãoInscrições concorrentes estavam vendendo além do limite de vagas, e turma vendida a mais é reembolso e promessa quebrada com aluno real. Agora a vaga é reservada sob um lock de linha dentro da transação de pagamento. O trade-off é segurar um lock no caminho do checkout, o que aceito porque vender vaga a mais é pior que um checkout mais lento.
- Por que suportar boleto, não só cartão?Cartão + boletoUma fatia grande de brasileiros ainda paga curso no boleto. Deixar de fora perde venda real de forma silenciosa, então o checkout suporta os dois com o mesmo fluxo de status em tempo real.
- Jul 2026Polimento de marca e UX, migração de domínio
- Jun 2026Rebrand para Germina Prime
- Jun 2026Modo aula ao vivo: chat na chamada, controles do host, compartilhar tela
- Mai 2026Turmas com trava atômica de vaga e contador de vagas em tempo real
- Abr 2026Multi-terapeuta, pagamento migrado pra Stripe, vídeo movido pra API
- Fev 2026Loja com pedidos e status de pagamento ao vivo por websocket
- Nov 2025MVP: pacientes, disponibilidade, agendamento e auth
Em produção atendendo pacientes reais, com um lançamento de curso pra 30+ participantes simultâneos (com compartilhamento de tela) em preparação. Um produto completo entregue pra cliente: agendamento, vídeo 1:1 e em grupo na plataforma, blog self-service e loja de cursos com cartão+boleto, sobre clean architecture que sigo evoluindo.