Skip to content

Repository files navigation

Rastro

App personal de seguimiento de ejercicio: GPS (caminar · trotar · correr) + dominadas, con reportes y análisis de zancada.

Local-first, sin cuenta, sin servidores. Tus datos viven en tu dispositivo.

Rastro no solo cuenta cuántos kilómetros hiciste, sino a qué ritmo, con qué cadencia de pasos y cuál es tu zancada eficiente — para enseñarte cómo mejorás.


Estado

Versión Qué es Dónde
v1 (en uso) MVP en un solo archivo HTML (vanilla JS + Leaflet + localStorage) index.html
v2 (en desarrollo) Reescritura con stack moderno + app nativa Android astro-vue-capacitor/

El roadmap completo y el estado por feature (F1–F13) está en SPECS.md.

Principios (no negociables)

  • Sin cuenta. Nada de login, correo ni registro.
  • Local-first. Los datos viven en el dispositivo. No hay servidor propio.
  • El usuario es dueño de sus datos. Exportar/importar e borrado total siempre disponibles.
  • Privacidad. La ubicación nunca sale del dispositivo salvo que exportes o compartas a propósito.
  • Funciona sin internet para registrar (solo el mapa base pide red).
  • Métrico y en español.

Funcionalidades

  • Registro GPS en vivo (distancia, tiempo, ritmo, velocidad) con mapa (Leaflet + OpenStreetMap) y filtrado de ruido consciente de la precisión.
  • Dominadas por series, con totales y récords.
  • Cadencia y pasos por acelerómetro (F2) y contador de hardware alterno (F6), comparables lado a lado.
  • Reportes por actividad (F4): splits por km, series de ritmo/velocidad/cadencia con tooltip táctil y eje conmutable tiempo/distancia, perfil de rendimiento por tramo, marcadores de inicio/fin.
  • Motor de zancada (F8): encuentra tu cadencia óptima (velocidad = zancada × cadencia).
  • Progreso (F9): récords, distancia/ritmo/cadencia por semana, dominadas por semana.
  • PWA offline + app nativa Android vía Capacitor, con GPS en segundo plano (F5, servicio en primer plano).

Estado detallado de cada feature → SPECS.md.

Stack (v2)

  • Astro 7 — shell SPA con una isla Vue (client:only), no MPA (recargar mataría el estado del tracking en vivo).
  • Vue 3 (Composition API + TS) + nanostores para estado a nivel de módulo que sobrevive cambios de pestaña.
  • Capacitor 8 (Android): geolocalización, background geolocation, SQLite, motion, pedómetro de hardware.
  • @vite-pwa/astro — offline + caché de tiles.
  • Leaflet — mapa. Gráficas SVG hechas a mano (sin librería de charts).
  • Vitest (89 tests) · oxlint / oxfmt · TypeScript estricto.
  • Bun como gestor de paquetes.

Estructura del repo

.
├── index.html              # v1 (MVP, un solo archivo)
├── SPECS.md                # especificación y roadmap del producto
└── astro-vue-capacitor/    # v2
    ├── src/
    │   ├── lib/            # lógica pura y testeable (track, steps, reports, stride, trends, format)
    │   ├── stores/        # estado (tracker, activities, settings, ui) — nanostores
    │   ├── geolocation/   # puerto hexagonal + adaptadores (capacitor / background / web)
    │   ├── persistence/   # puerto de persistencia + adaptadores (sqlite / indexeddb / memory)
    │   ├── motion/        # podómetros: acelerómetro (F2) y hardware (F6)
    │   ├── components/    # UI Vue (tabs, detalle, charts)
    │   └── pages/         # index.astro (shell)
    └── android/            # proyecto Capacitor Android

Puesta en marcha (v2)

Requisitos: Bun, Node ≥ 22.12, y (para Android) Android Studio + un dispositivo o emulador.

cd astro-vue-capacitor
bun install

# Desarrollo web
bun run dev

# Desarrollo con el teléfono en la misma red (imprime un QR + HTTPS para el GPS)
bun run dev:mobile

Android (Capacitor)

# Compilar y correr en el dispositivo/emulador conectado
bun run cap:run

# Live-reload en el dispositivo (apunta al dev server por LAN)
bun run cap:live

El GPS en segundo plano, la SQLite nativa y el podómetro de hardware solo funcionan en el build nativo; en web degradan (IndexedDB, acelerómetro, sin background).

Calidad

bun run test        # Vitest (unit, lógica pura de src/lib)
bun run check       # astro check (tipos) + oxlint
bun run format      # oxfmt

Arquitectura, en breve

  • Puertos y adaptadores (hexagonal). El tracker depende de interfaces (GeolocationProvider, ActivityRepository), no de plugins concretos. Cambiar de GPS web a background nativo, o de IndexedDB a SQLite, es un swap del adaptador — no una reescritura.
  • Lógica pura en src/lib. Haversine, filtro de ruido GPS, detección de pasos, reportes, motor de zancada y tendencias son funciones sin DOM, cubiertas por tests.
  • Estado a nivel de módulo (nanostores): la sesión de tracking vive fuera de los componentes, así sobrevive a cambios de pestaña — la razón por la que la app es un shell persistente y no una MPA.

Privacidad

Rastro no envía tus datos a ningún lado. La ubicación, los pasos y el historial se quedan en el dispositivo. Compartir e exportar son siempre acciones explícitas tuyas.


Proyecto personal · repositorio: github.com/yebt/Rastro

About

Experimental trace app

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages