TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Ejercicio, estudio y finanzas en una sola aplicacion.
Translation pending
ProductivityJavaScript · HTMLGitHub @gregorio04123-svgOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
mobile
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
App web para el día a día: rutina de gimnasio, agenda académica y libreticas de dinero, en una sola pantalla de móvil. Es un sitio 100 % estático: HTML, CSS y JavaScript sin npm install y sin paso de compilación. Eso significa que en Vercel no hay build que pueda fallar. Los datos viven en Supabase (plan gratuito). Funciona de verdad, no es una maquetaRead the full README ↗
App web para el día a día: rutina de gimnasio, agenda académica y libreticas de dinero, en una sola pantalla de móvil.
Es un sitio 100 % estático: HTML, CSS y JavaScript sin npm install y sin paso de compilación. Eso significa que en Vercel no hay build que pueda fallar. Los datos viven en Supabase (plan gratuito).
pilares/
├── index.html ← punto de entrada (DEBE quedar en la raíz del repo)
├── app.js ← lógica: rutinas, agenda, finanzas, amigos y chat
├── nube.js ← cuentas y guardado en Supabase
├── fluido.js ← animaciones y gestos (estilo Apple)
├── orbe.js ← <pilares-orbe>: el indicador de "cargando"
├── orbes-motor.js ← motor de las orbes (thinking-orbs, licencia MIT)
├── runtime.js ← motor que interpreta la plantilla del diseño
├── styles.css ← estilos base + marco de teléfono en escritorio
├── viewport.js ← corrige el alto de pantalla en la PWA instalada
├── sw.js ← service worker: recibe las notificaciones push
├── icon.svg ← ícono vectorial (favicon)
├── icon-192.png ← ícono PWA / apple-touch-icon
├── icon-512.png ← ícono PWA (incluye versión "maskable")
├── manifest.webmanifest ← permite instalarla como app en el teléfono
├── vercel.json ← cabeceras y URLs limpias (opcional pero recomendado)
├── .gitignore
├── .gitattributes ← fuerza finales de línea LF en el repositorio
└── README.md
fluido.js): resortes que arrancan desde donde está cada cosa y heredan la velocidad del dedo; sin rebote salvo cuando se lanza algo con impulso.
#FFD28F): gira con el dedo y crece; cuando ya se puede soltar arranca a girar sola, y así sigue hasta que termina. Los puntos de adelante van de ese tono claro y los de atrás de un naranja más hondo y tenue (el tinte propio del motor los oscurecía hasta verse café).thinking-orbs 0.3.2, licencia MIT, de Jakub Antalik): también en Cargando tus datos, Cargando mensajes… y Cargando su rutina…. La app no usa React, así que se usa solo su motor de dibujo (orbes-motor.js, copia sin cambios con su licencia) dentro de orbe.js. Se descarga aparte cuando el teléfono está libre, una sola animación sirve a todas, solo se mueve la que está en pantalla y con Reducir movimiento queda quieta.registro de Supabase ya confirmada, así que nunca se envía un correo (no hay costo de dominio ni de envío). Sin correo no hay "olvidé mi contraseña": hay que guardarla bien.ANDRE-4F2A). Agregar muestra el tuyo y agrega a alguien con el suyo; al aceptar la solicitud aparece en la lista.
/atajo (enlace Cómo armarlo en la ruedita).
rpc/atajo_gasto (Supabase) con clave, monto, motivo y fecha (tal como la manda el iPhone: 3/10/26, 3 oct 2026, 2026-10-03…; si no se entiende o no llega, hoy; nunca futura), y muestra el mensaje que responde. La app trae el gasto la próxima vez que se abre o se actualiza..json con todo lo tuyo (nombre y tipos de actividad, amigos con el apodo que les pusiste, cuadernos, actividades, todo el historial del gimnasio, libreticas, abonos, mensajes del chat, tus grupos, sus libreticas y sus mensajes). En iPhone se abre la hoja de compartir: elige Guardar en Archivos. El plan gratis no hace copias automáticas, así que conviene exportar de vez en cuando.No abras index.html con doble clic (el protocolo file:// bloquea el manifest y algunas rutas). Levanta un servidor local:
py -m http.server 8777
Y abre http://127.0.0.1:8777. Alternativa sin Python:
npx --yes serve .
Esta es la parte donde se rompen la mayoría de los despliegues. Revisa punto por punto.
index.html va en la raíz del repositorioDebe verse así al entrar al repo en GitHub:
tu-repo/
├── index.html ✅
├── assets/
└── ...
No así:
tu-repo/
└── pilares-app/ ❌ Vercel no encontrará index.html sin configurar "Root Directory"
└── index.html
Es decir: sube el contenido de la carpeta pilares-app, no la carpeta envolviéndolo todo. Si ya lo subiste anidado, no hace falta rehacerlo: en Vercel puedes poner pilares-app en Root Directory (ver §4.3).
Windows no distingue Assets/Styles.css de assets/styles.css, pero Vercel corre sobre Linux y sí distingue. Este es el error nº 1: la app funciona en tu PC y sale en blanco al desplegar.
Regla: los nombres de archivo y carpeta deben coincidir exactamente con lo que dice el index.html. En este proyecto todo va en minúscula. No renombres nada a Assets/, App.js o Index.html.
a-z, 0-9, guion - y guion bajo _.ñ, sin #, ?, %, &, :, ".Todos los archivos de este proyecto ya cumplen. Ojo si luego agregas imágenes: Captura de pantalla 2026.png romperá la URL; usa captura-2026.png.
El proyecto está lleno de tildes (Análisis numérico, MIÉ, descenso). Todos los archivos ya están guardados en UTF-8 sin BOM y index.html declara <meta charset="utf-8">.
Si editas algo, hazlo en VS Code y verifica abajo a la derecha que diga UTF-8 (no UTF-8 with BOM, no Windows-1252). Con BOM, el navegador puede mostrar An�lisis o dejar una línea en blanco extraña arriba de la página.
Git en Windows tiende a convertir a CRLF. El .gitattributes incluido fuerza eol=lf en el repositorio, así que no tienes que hacer nada — solo no lo borres.
En el HTML las rutas son app.js, icon-192.png, etc. Nunca uses C:\Users\..., file:///... ni rutas que empiecen por / si algún día mueves el sitio a un subdirectorio.
node_modules/ (no existe aquí, pero por si acaso).env o cualquier archivo con claves.zip del proyectoEl .gitignore incluido ya cubre esto.
.gitignore y .gitattributes están ocultos en el Explorador de Windows. Si subes por la web de GitHub arrastrando archivos, actívalos primero: pestaña Vista → casilla Elementos ocultos. Si aun así no aparecen, el método de la línea de comandos (§3.9, opción B) los sube solo.
Opción A — desde la web (sin instalar nada)
pilares), déjalo Public, y no marques "Add a README file" (ya hay uno).pilares-app, selecciona todo su contenido (Ctrl+A) y arrástralo.index.html en el primer nivel y una carpeta assets.⚠️ Dos trampas reales de este método, ambas vistas en la práctica:
- Aplana carpetas. A veces sube
app.js,runtime.jsystyles.csssueltos en la raíz en vez de dentro deassets/. Si pasa, la página sale en blanco. Revisa la lista antes de hacer commit.- Al renombrar, no dejes puntos de más. Si escribes
assets/runtime.js.(con punto final), el archivo queda con ese nombre y sigue dando 404.La Opción B evita las dos.
Opción B — con Git instalado
cd "ruta/a/pilares-app"
git init -b main
git add -A
git commit -m "Pilares: app de ejercicio, estudio y finanzas"
git remote add origin https://github.com/TU-USUARIO/pilares.git
git push -u origin main
Si Git te pide identificarte la primera vez:
git config --global user.name "Tu Nombre"
git config --global user.email "[email protected]"
| Campo | Valor |
|---|---|
| Framework Preset | Other |
| Build Command | vacío (deja el Override apagado) |
| Output Directory | vacío / por defecto |
| Install Command | vacío |
| Root Directory | ./ |
Vercel detecta un sitio estático y sirve la raíz tal cual. No actives un Build Command: no hay nada que compilar y es la causa más común de despliegues fallidos en proyectos como este.
En Root Directory pulsa Edit y elige pilares-app. Con eso Vercel encuentra el index.html.
Pulsa Deploy. En menos de un minuto tendrás una URL tipo https://pilares.vercel.app.
A partir de ahí, cada git push a main vuelve a desplegar automáticamente.
npx vercel --prod
| Síntoma | Causa más probable | Solución |
|---|---|---|
404: NOT_FOUND al abrir la URL | index.html no está en la raíz del repo | Mueve los archivos a la raíz o ajusta Root Directory (§4.3) |
| Página en blanco, sin estilos | Mayúsculas/minúsculas en las rutas | Revisa que la carpeta sea assets y los archivos app.js, runtime.js, styles.css, todo en minúscula |
Error No Output Directory named "public" | Vercel detectó un framework que no es | Cambia Framework Preset a Other y deja Output Directory vacío |
Se ven An�lisis, MIÉ | El archivo se guardó en ANSI o con BOM | Vuelve a guardarlo como UTF-8 sin BOM |
| El ícono no aparece al instalar en el móvil | Faltan los PNG | Confirma que icon-192.png e icon-512.png estén en el repo |
| Se despliega la versión vieja | El push no llegó | Revisa la pestaña Deployments en Vercel y el commit asociado |
Para ver el error exacto: en Vercel, pestaña Deployments → el despliegue → Building / Runtime Logs.
Pantalla inicial, color de acento y modo edición — final de app.js:
props: {
acento: 'Naranja', // 'Naranja' | 'Menta'
pantallaInicial: 'Home', // 'Home' | 'Ejercicio' | 'Estudio' | 'Finanzas'
modoEdicion: false,
ocultarCompletados: true,
}
Rutinas de gimnasio — viven en Supabase: tabla grupos (cada grupo con sus ejercicios) y tabla rutinas (el plan de 7 días; índice 0 = domingo). La rutina base de las cuentas nuevas la crea la función sembrar_rutina de la base de datos. Los avisos los crean disparadores de la base de datos (tabla avisos); si la persona activó notificaciones, cada aviso sale como push por la función enviar-push (código en supabase/functions/enviar-push), que firma con claves VAPID guardadas en Vault. Todo dentro del plan gratis. Las rutinas enviadas entre amigos viven en rutinas_compartidas hasta que se aceptan o rechazan; solo se crean con la función compartir_rutina (que toma la foto en el servidor y exige amistad). El chat vive en la tabla mensajes: desde la app solo se insertan textos, a un amigo y a nombre propio; las tarjetas (rutina, libretica, actividad) las crean disparadores con una foto de lo enviado, y no se editan ni se borran. mis_chats arma la lista con lo no leído (según chat_lecturas), y cada texto sale como push por la misma función enviar-push. Los grupos viven en grupos_amigos y grupo_miembros; su chat en mensajes_grupo (la seguridad por fila deja ver solo desde que se entró) y las libreticas de grupo en libretas_grupo, libretas_grupo_partes y abonos_grupo. Todo lo que cambia un grupo pasa por funciones del servidor (crear_grupo, agregar_a_grupo, salir_de_grupo, renombrar_grupo, crear_libreta_grupo, abonar_libreta_grupo, borrar_abono_grupo, borrar_libreta_grupo, crear_actividad_grupo, compartir_rutina_grupo), que validan las reglas (solo amigos, suma exacta, solo quien debe abona, nunca más de lo que falta). Una actividad de grupo es una fila de actividades por persona unida por lote (actividades_grupo); un disparador lleva a todas las copias lo que cambie quien la creó, y proteger_actividad impide que los demás cambien fecha, tipo o temas. Cada persona la cambia desde la app. Para que un ejercicio nuevo tenga ícono propio, añade su trazado en ICONS (en app.js) con la misma clave del nombre; si no, usa una mancuerna genérica.
Supabase — la URL del proyecto y la clave pública están al inicio de nube.js. La clave pública (sb_publishable_…) está hecha para ir en el navegador; lo que protege los datos son las políticas de seguridad por fila de la base de datos. Nunca pongas en este repo la clave service_role / secret.
Plan gratuito de Supabase — si nadie usa la app durante 7 días seguidos, Supabase pausa el proyecto; se reactiva desde su panel (los datos no se pierden).
Abre la URL de Vercel en el móvil:
Queda a pantalla completa, con su ícono. Cada persona entra con su propio usuario.