← Aplicações← Applications

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.

  • 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