Portar uma aplicação para telemóvel para uma extensão de navegador
O KeyRush começou no iPhone e no Android. Quando decidimos migrá-lo para o Chrome, tivemos de escolher: envolver a aplicação existente numa camada multiplataforma ou reescrevê-la para o navegador. Reescrevemo-lo, fazendo a portabilidade a partir da versão Android. JavaScript puro, Manifest V3, sem framework e sem etapa de compilação. Eis o que aprendemos ao fazê-lo.
O teclado já é uma realidade
Num telemóvel, um programa de treino de digitação é uma aproximação. O teclado no ecrã é, ao mesmo tempo, o dispositivo de introdução de dados e o próprio objeto de estudo, o que constitui uma situação um pouco estranha. No navegador, o utilizador tem um teclado real debaixo dos dedos — exatamente aquilo que a aplicação está a tentar ensinar.
Isso mudou mais do que esperávamos. Os layouts variam de país para país e de máquina para máquina. Existem teclas modificadoras. As pessoas mantêm as teclas premidas, premem duas ao mesmo tempo ou mudam de layout a meio da sessão. Num teclado físico, cada pequena imprecisão no simulador é sentida imediatamente, pelo que tivemos de ser muito mais cuidadosos quanto ao que se considera uma tecla premida corretamente.
Mantivemos o teclado no ecrã, mas a sua função mudou. Num telemóvel, é aquilo em que se carrega. Na extensão, funciona como um guia: destaca a tecla que se deve carregar a seguir, para que se possa manter o olhar no ecrã em vez de nas mãos. É esse o objetivo da digitação tátil, e o navegador permitiu-nos levá-lo a sério.
As dimensões das janelas não são fixas
Os ecrãs dos telemóveis apresentam-se em algumas formas diferentes. As janelas do navegador podem ter qualquer formato. Uma janela pop-up de uma extensão é estreita e curta; um separador completo pode ser enorme. A mesma aplicação tinha de fazer sentido em ambos os casos.
Por isso, oferecemos as duas opções. O KeyRush abre como uma janela pop-up para um teste rápido e numa aba completa quando se quer mais espaço para lições e competições. A combinação Alt+Shift+K abre-o sem precisar de recorrer ao rato — o que, para uma aplicação de digitação, pareceu-nos ser a predefinição certa.
As janelas pop-up esquecem tudo
Uma janela pop-up fecha assim que se clica fora dela, e tudo o que estava a ocupar na memória desaparece com ela. No Android, uma aplicação pode ser colocada em segundo plano e voltar exatamente ao ponto em que ficou. Numa janela pop-up, é preciso partir do princípio de que o utilizador pode sair a qualquer momento.
Assim, tudo o que é importante fica armazenado no navegador, em vez de na janela, e tanto a janela pop-up como o separador completo leem o mesmo estado armazenado. Basta concluir um teste na janela pop-up, abrir o separador completo e o resultado já lá está. É uma pequena decisão arquitetónica que tornou toda a extensão mais sólida.
As permissões são uma decisão de conceção
As aplicações Android também solicitam autorizações, mas os utilizadores raramente as lêem. Os utilizadores de extensões, por outro lado, costumam fazê-lo, e o navegador apresenta os avisos diretamente na janela de instalação. O KeyRush solicita exatamente uma: armazenamento. Não precisa de ver as páginas que visita, por isso não o solicita. Escrevemos um artigo separado sobre a importância que isso tem para nós.
O que guardámos
Quase todo o produto em si se manteve inalterado: testes de velocidade cronometrados de 15, 30, 60 e 120 segundos, aulas de dactilografia organizadas por dedo, competições contra adversários virtuais, estatísticas, um mapa de calor das teclas em que se falha, o desafio diário e todas as 44 conquistas. Quem estiver a mudar do telemóvel para a versão de secretária deverá sentir-se à vontade em menos de um minuto.
Também mantivemos os princípios. Funciona totalmente offline. O progresso fica guardado apenas no teu navegador. Não há conta nem é preciso iniciar sessão.
Por que não partilhámos o código
Reescrever o código parece dispendioso e, de certa forma, foi mesmo. Mas um programa de treino de digitação não é uma aplicação de grande dimensão, e a lógica que importa — pontuação, lições, níveis, conquistas — é suficientemente pequena para ser transferida cuidadosamente à mão a partir do original do Android. Em troca, obtivemos uma extensão que carrega instantaneamente, não tem dependências de terceiros que precisem de ser mantidas atualizadas e funciona como se tivesse sido feita para o navegador, porque foi mesmo.