KeyController
App para jogar ou usar qualquer app do Android com teclado e mouse: transforma teclas e cliques em toques na tela, com um editor visual por cima do jogo. Em volta dele, construí a conta, o site de venda, o pagamento, o programa de parceiros e o painel de administração. An app to play games or use any Android app with a keyboard and mouse: it turns keys and clicks into screen touches, with a visual editor right on top of the game. Around it I built the accounts, the sales site, payments, a partner program and the admin dashboard.
No arLive
keycontroller.cruxsacra.com.br ↗
- 11tipos de botãobutton types
- 20versões guardadas por perfilversions kept per profile
- 8.0+versões do AndroidAndroid versions
- ~16 mil~16klinhas de Kotlinlines of Kotlin
Teclado e mouse viram toque
- Teclas, botões e roda do mouse viram toques multi-toque, com combinações como Ctrl+1.
- 11 tipos de botão, do toque simples ao direcional WASD, câmera pelo mouse, mira, arrastar e deslizar.
- Modo MOBA: habilidade mirada pelo ponteiro e andar com o botão direito.
- Ponteiro na tela para mochila e mapa — clique toca, segurar arrasta, a roda rola — e modo digitação para o chat.
- Só age com o jogo escolhido na tela: no banco ou numa conversa, nada aparece e o teclado fica livre.
- “Meus jogos”, com troca automática de perfil ao abrir outro jogo.
Editor e perfis
- Editor visual por cima do jogo: toca no botão do jogo e aperta a tecla; menu por categorias, com explicação de cada item.
- Edição sobre uma captura dos controles, sem nada do app na tela durante a partida.
- Importa e exporta keymaps do QtScrcpy; a página “Usar no PC” converte o backup direto no navegador, sem enviar nada.
- Backup com gravação atômica, 20 versões por perfil, lixeira, .zip completo e cópia automática numa pasta.
Diagnóstico e suporte
- “Verificar meu setup”, com correção guiada e medição do atraso tecla→toque (média, 95% e máximo).
- Log só de mudanças de estado — nunca de teclas — e botão “Enviar diagnóstico”.
- Aviso e download de atualização pelo próprio app.
- Nome e modelo dos periféricos ficam fora da interface e dos relatórios.
Conta, venda e parceiros
- Login com Google; keymaps guardados na conta, cifrados, e recuperados em outro aparelho.
- Site de venda: landing, assinatura, conta, termos e privacidade (LGPD).
- Planos via Mercado Pago (Pix e cartão), com preço calculado no servidor e crédito só depois do pagamento confirmado.
- Cadastro com idade mínima e consentimento de marketing separado do de uso.
- Programa de parceiros: código com desconto para a audiência, comissão rastreada, portal do parceiro e área “Divulgador” no app.
Operação e administração
- Painel de administração: receita e vendas, quem está online, logs, licenças, bloqueio de conta, códigos de parceiro e conciliação com o Mercado Pago.
- Backend migrado do Firebase para servidor próprio (Node e SQLite em Docker, atrás do nginx), sem reescrever a lógica testada.
- Deploy com backup do banco antes e checagem de saúde depois; link estável para baixar o APK.
Keyboard & mouse become touch
- Keys, mouse buttons and the wheel become multi-touch input, with combinations such as Ctrl+1.
- 11 button types, from a simple tap to WASD movement, mouse camera, aiming, dragging and swiping.
- MOBA mode: abilities aimed with the pointer and right-click to move.
- An on-screen pointer for inventory and map — click taps, hold drags, the wheel scrolls — plus a typing mode for chat.
- Only acts when the chosen game is on screen: in a banking app or a chat, nothing shows up and the keyboard stays free.
- “My games”, with automatic profile switching when another game opens.
Editor & profiles
- A visual editor on top of the game: tap the game's button and press the key; a categorized menu explains each item.
- Editing over a screenshot of the controls, so nothing from the app stays on screen during play.
- Imports and exports QtScrcpy keymaps; the “Use on PC” page converts the backup right in the browser, without uploading anything.
- Backups with atomic writes, 20 versions per profile, a trash bin, a full .zip and automatic copies to a folder.
Diagnostics & support
- “Check my setup”, with guided fixes and key-to-touch latency measurement (mean, 95th percentile and max).
- Logs only state changes — never keystrokes — plus a “Send diagnostics” button.
- In-app update notices and downloads.
- Peripheral names and models are kept out of the UI and the reports.
Accounts, sales & partners
- Google sign-in; keymaps stored in the account, encrypted, and restored on another device.
- A sales site: landing page, subscription, account, terms and privacy (LGPD).
- Plans via Mercado Pago (Pix and cards), with prices computed on the server and credit only after the payment is confirmed.
- Sign-up with a minimum age and marketing consent kept separate from terms of use.
- A partner program: discount codes for their audience, tracked commissions, a partner portal and a “Promoter” area in the app.
Operations & admin
- An admin dashboard: revenue and sales, who's online, logs, licenses, account blocking, partner codes and reconciliation with Mercado Pago.
- Backend moved off Firebase to my own server (Node and SQLite in Docker, behind nginx), without rewriting the tested logic.
- Deploys back up the database first and run a health check afterwards; a stable APK download link.
Stack
- Kotlin
- Android SDK
- TypeScript
- Node.js
- Express
- SQLite
- Docker
- nginx
- Mercado Pago
- Google Sign-In