[PITCH v2] LeafTok: Agora os cards viram sozinhos enquanto você escuta
Fala, pessoal!
Há 6 meses postei aqui o pitch original do LeafTok — app de leitura estilo TikTok, EPUB e PDF viram cards que você arrasta pra cima.
Recebi um monte de feedback bom (valeu de novo, @rphlfc, @whyrnld, @softbrewers, @oGuedes e companhia 🙌), e desde então o app passou por mudança grande. Vim contar.
A aposta da v2
Depois de rodar a v1 por um tempo, virou óbvio uma coisa: quem não lê, não vai começar a ler do nada. Mas escutar enquanto faz outra coisa? Rolar feed sem precisar ler? Isso a galera já faz o dia inteiro.
Então a v2 saiu apostando em duas features que mudam o uso do app por completo:
🎙️ Narração — aperta o play, o card é lido em voz alta com TTS nativo da Apple. Termina, avança pro próximo sozinho, e continua. AirPods no ouvido, celular no bolso, o livro acontece.
▶️ Auto-turn dos cards — mesma ideia, sem áudio. Os cards passam no tempo certo de leitura. Tipo autoplay do YouTube, mas pra livro. Você não precisa mais nem encostar a tela.
Quase tudo roda on-device, offline, sem login.
O Premium (via RevenueCat) é onde a coisa fica diferente: vozes curadas (testadas pra leitura longa, com pacing ajustado por idioma) e resumos de capítulo com IA — esse sim chama gpt-4o-mini, com cache por capítulo pra não estourar custo. Quem assina tá pagando pela curadoria + pela camada de IA, não pelo TTS em si.
Por que reescrevi o app inteiro em SwiftUI
A v1 com React Native era muito boa, mas quis experimentar recursos nativos que seriam muito mais tranquilos de usar, não seria necessário trabalhar com a ponte entre o nativo e o Javascrip.
Joguei fora os 14 meses de RN e reescrevi em SwiftUI nativo. A parte que mais me animou: no RN, mexer com AVSpeechSynthesizer e sincronizar com a UI era sempre briga com a camada de ponte. No SwiftUI é direto, o sintetizador conversa com a view sem intermediário. Auto-turn que ia engasgar no RN agora roda liso.
O Android continua em React Native (leaftok/) porque o esforço de manter as duas plataformas nativas sozinho não fecha. Mesmo bundle ID, mesmo backend.
Stack atual
- iOS: SwiftUI + SwiftData + RevenueCat (
LeafTokiOS/) - Android: Expo SDK 53 + React Native (
leaftok/) - Backend: Phoenix/Elixir com Ash Framework + PostgreSQL + Oban
- Narração:
AVSpeechSynthesizernativo da Apple (offline, on-device — por isso liberei no free tier) - Resumos com IA (Premium): gpt-4o-mini com cache por
bookId + chapterIndex(1 chamada por capítulo, não por usuário) - Pagamento: RevenueCat
- Analytics: PostHog
O que mudou desde o último post (com base nos comentários daqui)
- ✅ Livro de domínio público no onboarding — sugerido pelo @rphlfc e @whyrnld. Agora dá pra testar sem precisar subir um EPUB próprio.
- ✅ Importação de PDF estabilizada — o erro
Cannot read property 'extractText' of nullque o @oGuedes e @jdsmedeiros reportaram saiu na 1.9.1. - ✅ Áudio para de tocar ao sair do livro — pedido do @softbrewers.
- ✅ Botão pra desabilitar o ícone de música — pedido do @leogabrielps e @CoelhoVesgo.
- 🔜 Double-tap pra "gostei" — tá no roadmap.
- 🔜 Sync entre dispositivos — ainda investigando a parte legal pra livros importados (o Kindle não sincroniza importados por um motivo).
O sinal dos primeiros dias
Sem anúncio pago nenhum, a retenção tá diferente da v1. Sessão média subiu, e tem usuário que ativa narração já no primeiro dia e volta no segundo. Tô coletando o número de 30 dias antes de abrir a torneira de paid.
Quer testar?
🌐 Site: https://leaftok.app
📱 App Store (iOS, v2 nativa): https://apps.apple.com/br/app/leaftok-leitor-de-livros/id6748622950
🤖 Play Store (Android, RN): https://play.google.com/store/apps/details?id=com.iagocavalcante.leaftok&pli=1
Topa testar a narração com fone e me dizer se a velocidade padrão tá boa? Tô calibrando o rate do AVSpeechSynthesizer baseado em feedback real, e o que parece OK pra mim pode tá rápido ou lento demais pra outras pessoas.
Quem já shippou autoplay/auto-advance em produto que não é vídeo — ajudou ou atrapalhou retenção? Curioso pra comparar com o que tô vendo.
Valeu pela atenção, e mais uma vez obrigado pelo pessoal que comentou no post anterior. Quase tudo que entrou na v2 saiu de feedback de vocês. 🚀