# Guía de desarrollo Notas para quien vaya a meter mano en la rama del móvil. Leedlas antes de empezar, que nos ahorramos disgustos. Esta rama va encima de Oasis, que es de epsylon. Él saca versión casi cada día (39 entre la 1.0.1 y la 1.3.3, en siete semanas) y cada versión llega en un solo commit. Si metemos cosas en sus ficheros, en cada integración hay que volver a pelearse con ellas. Por eso la idea es sencilla: lo de Oasis lo cambia él; nosotros cambiamos cómo se ve y se usa en el móvil, y lo hacemos en ficheros nuestros. Los números y de dónde salen están en `docs/FRONTERA_UPSTREAM.md`. ## La estrategia: una capa encima Lo del dev entra tal cual y lo nuestro va encima, en ficheros nuestros: hojas de estilo, vistas y un router propio que va delante del suyo. Se eligió así frente a las otras salidas: - Un fork que copie sus vistas y siga por libre se queda viejo en semanas (39 versiones en siete semanas). - Una app propia que hable con su backend obliga a rehacer toda la interfaz, y Oasis no tiene API: devuelve HTML. - Reescribir su HTML o sus respuestas al vuelo se rompe sin avisar con cualquier cambio suyo. Se probó y se quitó el 20/10/2026. Las reglas de la capa: 1. Lo del dev no se cambia: ni su código ni lo que contesta (HTML, redirecciones, cabeceras). Nuestro código no mira sus respuestas. 2. El aspecto, con CSS en nuestras hojas. 3. Otro HTML en una pantalla suya: función en `mobile_ui.js` y una línea en su vista. 4. Una pantalla o una ruta nueva: en `fork_routes.js`; lo que no es nuestro pasa al dev con `next()`. 5. Si una pantalla del dev ya hace algo (editar el perfil, escribir, guardar los módulos), se enlaza a ella o se envía a su ruta y se acepta a dónde vuelve. No se copia su lógica. 6. Se pueden usar sus funciones (`getConfig`, `saveConfig`, leer de sus modelos). Reescribirlas, no. 7. Si algo no se puede hacer con estas reglas, se le pide al dev. Dónde va cada cosa: | Quiero... | Va en | |---|---| | Cambiar colores, tamaños, márgenes | `styles/mobile_ux.css` (piezas) o `styles/activista.css` (lanzador y barras) | | Cambiar los colores de serie o las paletas | Variables `--a26-*` de `themes/Activista.css`; las paletas, en `mobile_settings.js` | | La barra de unirse a un pub | `views/mobile_pubbar.js` | | Otro HTML en una pantalla del dev | Función en `views/mobile_ui.js` + una línea en su vista | | Una pantalla nueva | Vista propia en `views/mobile_*.js` + ruta en `fork_routes.js` | | Algo en Ajustes del móvil | `views/mobile_settings.js` | | Un texto nuevo | `translations/i18n_fork.js`, en los 13 idiomas | | Un icono | `views/mobile_icons.js` | | Un workflow (perfil) o la barra de abajo de un perfil | `models/fork_workflows.js` (`FORK_WORKFLOWS` y `BARS`) | | Algo de la APK | `android/scripts/sobre_oficial.sh` o `android/icono/` | | Algo que la capa no deja | Pedírselo al dev | Cómo seguir modificando, paso a paso: 1. Arrancar en local (ver «Probar en local») y localizar en el inspector la clase o la pantalla. 2. Decidir con la tabla dónde va. Si la respuesta es un fichero del dev, parar y releer las reglas. 3. Hacer el cambio. 4. Pasar «Antes de hacer commit». 5. Commit en castellano y subir la rama `PRUEBAS` a forgejo. 6. Montar la APK con `android/scripts/sobre_oficial.sh` y probarla en el emulador `Oasis_Pruebas`. 7. Si entra un fichero o un mecanismo nuevo, apuntarlo en esta guía en el mismo commit. ## Lo que no se toca - `src/backend/backend.js`. Cambia en 34 de cada 39 versiones. Ni rutas nuevas, ni middleware, ni envolver funciones suyas como `checkMod`. - La cadena de middleware del final de `backend.js`. Crece en cada versión. - Los modelos de `src/models/`, salvo el nuestro (`fork_workflows.js`). Ahí se decide qué se publica en la red y cómo se cuenta. Si lo cambiamos, nuestro móvil cuenta distinto que el escritorio de al lado. Un ejemplo real: quien crea una votación no puede votar en ella. No nos gusta, pero es una regla del modelo, así que se explica en pantalla y punto. - `src/server/` (arranque de SSB, `ssb_config.js`, `package.json`). - `src/backend/request_guards.js`, que lleva la CSP. Nada de `style=""` ni de `