He hecho esta app. Ahora os cuento por qué.

Llevamos mes y medio con el Tesla Model Y y hace un par de semanas me llegó el siguiente mensaje:

¿Que qué es la conectividad premium de Tesla? Pues un paquete que hace que la experiencia al volante sea más chula cuando usas el coche. Sin ella sigues teniendo acceso a los mapas y la planificación (incluidos supercargadores), pero con la versión Premium tienes pijaditas varias como vista de satélite en los mapas, radares de tráfico, mapas de tráfico en tiempo real o streaming de música y vídeo preconfigurados: tú te metes en el coche y todo funciona y fluye y es maravilloso.
El problema, claro, es que la conectividad premium no es gratis. Cuesta 9,99 euros al mes, lo cual es una pasta para quienes como nosotros usamos el coche de forma modesta. Es otra suscripción más de esta era de la Suscriptocracia —qué neologismo tan chulo, JaviPas, ¿de dónde ha salido?—, y sabéis que yo intento invertir en aquello que uso y apuntarme a suscripciones solo si les voy a sacar mucho partido.
¿Había opciones? Claro. Lo que yo necesitaba era básicamente que mi móvil sirviese como sustituto de esa conectividad Premium, y buscando en foros descubrí que tanto en iPhone como en Android puedes acceder a parte de lo que ofrece esa suscripción con alternativas de estas plataformas. Me centro en Android porque tengo un Pixel 8 Pro, pero insisto, hay cosas para iOS y seguro que podéis hacer lo que yo he hecho para mi caso de uso.
Tras investigar un poco vi que era posible usar apps como Tasker o MacroDroid para automatizar esa compartición de la conexión del móvil. Estas utilidades sirven para esto:
- Llego a mi Tesla, lo abro con el móvil
- El Tesla detecta que el móvil está cerca vía Bluetooth
- Eso dispara un evento que hace que se active la conexión compartida de mi móvil (el tethering)
- El Tesla detecta la Wi-Fi compartida y se conecta
- Suena Sabina en el Tesla, que es lo que estaba escuchando, y soy feliz.
Ahí lo tenéis. Molto facile e divertente. Pero hete aquí que Tasker es de pago y MacroDroid, aunque es gratutio, te pide que cada poco estés viendo publi. Eso no me molestaría demasiado, pero es que desde que terminó el periodo de evaluación de MacroDroid (en el que funcionó guay) la app no me ha funcionado como debía, así que con o sin anuncios, no me servía.
Y claro, otra vez drama, lágrimas, gritos, desesperación.
Hasta que este finde se me ocurrió algo. «Oye, Javipas«, me dije a mí mismo, «ahora que eres el Linus Torvalds de la IA, por qué no te programas tu propia MacroDroid«. El sábado teníamos el día tontorrón, casero, así que le dije a Sally: «Lo siento, Sally, me he puesto a darle al vibecoding y estoy en el flow, olvídate de mí» y me puse a ello. Sally me dio una colleja y se rió, pero más allá de eso me dejó con mi momento Torvalds y efectivamente estuve un rato con ello.
Lo primero que hice fue buscar algún proyecto Open Source de partida por si había código del que tirar. Cosas que se parecieran a Tasker o MacroDroid, pero con proyecto público en GitHub. Ahí vi dos o tres alternativas, pero la más interesante es Easer, una app china que llevaba años abandonada pero que prometía.
Así que cloné el repo en mi Mac mini m4 (unos 3 segundos), hice un «cd Easer» y después lancé OpenCode, que tengo configurado con GLM 5.1. Y ahí comenzó el ciclo. Le pedí al modelo de IA que analizara el directorio y todo el código en él. Que me dijera lo que hacía pero sobre todo que me dijera si veía cosas raras. Siendo una app china las suspicacias son inevitables, pero el análisis me dejó claro que no había peligro y que podía usar ese código sin riesgos.
Así que ahí empecé a programar. O lo que es lo mismo, a hablar. Pegué alguna captura de las dos «macros» que había creado en MacroDroid, le expliqué lo que quería y le pedí que me dijera si era posible hacer algo parecido a partir del código de Easer. Aquí había un elemento especial: para poder usar MacroDroid había tenido que instalar Shizuku, una aplicación que da acceso a algunas APIs de sistema sin que el móvil tenga que estar rooteado. Eso normalmente no es buena idea, pero como soy yo quien se lo guisa y se lo come, no tengo problema y es un componente fundamental para lo que hacía MacroDroid con el Tesla.
Con ese componente, me dijo la IA, no tenía de qué preocuparme, que ya se encargaría él de todo. Tras confirmar el plan con Claude Sonnet 4.6 y ver que todo OK —me gusta que los chatbots «se hablen» entre ellos para ver si alguno detecta una burrada del otro—, me puse manos a la obra. O más bien, le dije a OpenCode/GLM que se pusiese manos a la obra.

Hizo un plan de desarrollo bastante detallado que de nuevo contrasté con Sonnet (vía Antigravity, que te regala alguna consulta del modelo) y como también le pareció estupendo, le dije que empezara a desarrollarlo. Y a ello se puso OpenCode.

Programar la app entera le llevó un ratito, la verdad. No sabría decir el tiempo exacto, quizás fueran unos 15 minutos, quizás algo más. El caso es que

Luego, claro, venía la parte divertida: probar la app. Aquí como siempre pregunté exactamente eso. «Oye majo, ¿cómo pruebo la app?«. Tengo instalado Android Studio desde que hice la app de Immich, así que me dijo que perfecto, que conectase mi Pixel 8 Pro por USB-C con el USB Debugging activado en las opciones de desarrolladores.
El entorno de desarrollo (IDE) detecta la conexión y ya puedes instalar la app directamente desde Android Studio. No lo había hecho nunca así que al principio me lié un poco, pero resulta que es muy sencillo porque con «darle al Play» literalmente te compila e instala la app en el dispositivo destino. Un minuto después apareció esto en mi móvil:

Uy, esto promete. El chatbot me comentó cómo manejar la app, que es bastante simple: le concedo permiso a Shizuku, activo la monitorización y eso hará que el Tesla detecte que mi móvil esté cerca y se active la conexión compartida.
Eso era la teoría.

En realidad la cosa costó un poco, porque por más que activaba el hotspot desde ese botón «Activar», la conexión compartida no se activaba. El chatbot lo hizo tan bien que para esta fase ya creó un log de eventos que mostraba lo que pasaba cuando yo le iba dando a «Activar». Y como veis, no se activaba (false).
Ahí llegó la parte de intentar encontrar el error, y claro, no tenía ni idea de cómo, así que le pregunté al chatbot cómo encontrarlo. Es lo bueno de los chatbots, que estas cosas las contestan con una certeza total. «No te preocupes, JaviPas», me dijo, «en Android Studio hay una opción View->Logcat (o algo similar) que precisamente muestra los logs de todo lo que pasa en el móvil. Bastaba filtrar por «Hotspot» para que fueran saliendo los mensajitos que le hacían falta al chatbot. Él me decía lo que yo tenía que hacer, y yo, cual niño obediente, lo hacía, copiaba la salida de logcat y se la pegaba en OpenCode a ver qué me decía.
Eso llevó un rato, porque el modelo de IA no acababa de dar con la tecla, pero tras varias pruebas por fin funcionó esa activación del punto de acceso inalámbrico. Después solo quedaba la prueba final: ver si hacía todo lo demás, algo que solo podía probar ya llevándome el móvil al Tesla.
Dicho y hecho. Salí de casa, y ahí llegó el momento clave. Emoción, intriga y dolor de barriga. Me acerco al Tesla, lo abro, me meto dentro y con la app en pantalla espero a ver si pasa algo. Y de repente, this.

¡Ole! ¡Funcionó! Qué chulada, la verdad. Y todo en aproximadamente una mañana. Me subí para pulir alguna cosa (lo de configurar la MAC para que solo se conecte mi Tesla y no otro) volví a salir y probar la app dos o tres veces más, y aunque esa parte aún no pirula del todo, me dio igual, porque la funcionalidad básica iba a la perfección.
Qué maravilla, chavales. Es que es alucinante.
Pero ya me conocéis. Soy un tipo atento al detalle, perfeccionista y cabezón. La interfaz de la app me parecía funcional pero feota, así que quise darle un tiento a otra herramienta que estoy probando estos días. Se trata de Claude Design, que he usado para un par de proyectos diferentes (quizá os hable de alguno pronto), y que me parece absolutamente maravillosa. Como pagué una suscripción Pro de Claude de oferta durante tres meses (se me acaba ya), puedo usar la herramienta, así que primero le pedí a GLM que me creara un prompt para que otra app me diseñara la interfaz, y claro, me creó un prompt estupendo en el que yo solo indiqué que me gustaría que tuviera acabado «Tesla», ya sabéis, fondo oscuro, tipografías claras, moderna y elegante.
GLM generó el prompt y yo se lo pasé a Claude Design, que tras un ratito adicional (tarda un poco, 5-10 minutos) me salió con esto:

Yo, claro, flipaba. Qué maravilla de interfaz. Pero claro, ¿y ahora cómo paso eso a mi app? No problemo. Claude Design crea un «handoff» en formato ZIP con todos los ficheros necesarios. Lo descargué, lo descomprimí y moví esa carpeta a la carpeta del proyecto. Una vez hecho eso le dije a GLM, «Oye, mira esta carpeta con ficheros de diseño, ¿puedes usarla para aplicar esa interfaz UI/UX a mi app?«. Y de nuevo dicho y hecho. En un ratito adicional (de nuevo, 10 minutos, quizás algo más) aplicó los cambios y me dijo que ya podía instalar la app de nuevo en mi Pixel 8 Pro.
Que es justo lo que hice. La interfaz final (de momento), captura de mi móvil, es la que os incluía al principio:

Que por supuesto es mucho mejor de lo que habría soñado. Además de (casi) imposible que hubiera programado por mí mismo sin dedicar semanas, meses o años, y que no hubiera quedado así de bonita ni a la de tres.
Pero es que la IA es capaz de todo esto en una mañana. Basta con saber qué pedir, y listo. Es cierto que viene bien tener algo de experiencia en este campo, pero de nuevo, yo es que sigo alucinando con todo lo que se puede hacer. Que diría que es TODO.
Maravilloso, sin duda. ¿No os parece?
