Saltar al contenido

Self-hosted · un solo usuario · MIT

Tu patrimonio invertido, en una pantalla.

Stockerly registra lo que tienes — acciones en EE. UU., cripto y CETES — y lo reporta todo en pesos usando el tipo de cambio del día de cada movimiento, no el de hoy. Corre en tu propio servidor. Hay una sola cuenta: la tuya.

Para una persona, con broker mexicano. Sin sync con brokers y sin reportes de impuestos. Interfaz en español.

Córrelo localRuby + Postgres
 git clone https://github.com/rodacato/stockerly.git
 cd stockerly
 bin/setup
Panorama: patrimonio en MXN, un radar de posiciones con sparklines, señales técnicas y sentimiento de mercado.

Una sola pantalla, se lee de arriba-izquierda hacia la derecha: el patrimonio total en pesos, luego las posiciones con algo pasando hoy, luego qué dijeron los indicadores sobre ellas, y luego cómo se siente el mercado. Todo el producto es un argumento de que esas cuatro cosas van juntas. Cada imagen aquí es un artboard del design system que vive en design/, no una captura de una instancia corriendo; las cifras son ficticias. La interfaz está en español de México; el código, las rutas y la documentación, en inglés.

Un tracker hecho para una sola pregunta

¿Voy ganando o perdiendo en la moneda que de verdad gasto? Todo lo demás en la pantalla existe para explicar ese número o para mantenerlo honesto.

01

Multi-divisa que dice la verdad

El costo promedio va ponderado por tipo de cambio. La ganancia no realizada se parte en lo que hizo el activo y lo que hizo el peso — para un inversionista mexicano con acciones gringas esas son dos historias distintas.

02

Tres niveles, no una lista

Holdings es lo que tienes, Watchlist lo que sigues, y Tracked el catálogo que leen los jobs de sync. Un símbolo puede estar en el catálogo sin fingir que lo compraste.

03

CETES como activo de primera

La renta fija mexicana va junto a las acciones, con aviso antes del vencimiento, y la cartera se compara contra CETES reinvertidos — el benchmark al que un inversionista mexicano de verdad renuncia.

04

Señales con su regla a la vista

Una señal nace de una observación medida y guardada — «AAPL entró en sobreventa según RSI(14)», el precio cruzó su media de 200 días — y dice si sigue la tendencia o apuesta a una reversión. Las etiquetas «compra» y «vende» solo salen cuando una observación las respalda; no hay predicciones ni precios objetivo.

05

PWA que se instala en el teléfono

La instalas en la pantalla de inicio y te llegan notificaciones push cuando se dispara una regla. Sin red muestra una página para reintentar: las cifras del portafolio nunca se guardan en caché, así que leerlas requiere conexión.

  • Ruby 4.0.6
  • Rails 8.1
  • PostgreSQL 16
  • Hotwire
  • Tailwind CSS 4
  • Solid Queue
  • Kamal 2
  • sin Node.js

Cómo se ven las pantallas

Dibujadas en el design system del proyecto, que espeja el código que shippea.

Holdings: posiciones agrupadas por nivel, con costo promedio y ganancia en MXN.
Holdings — la escalera de tres niveles, valores en MXN
Consolidado: el valor de la cartera en el tiempo contra una comparación con CETES reinvertidos.
Consolidado — valor en el tiempo contra CETES reinvertidos
Hoja de captura de movimientos con autocompletado de ticker y el tipo de cambio de Banxico ya puesto.
Registrar movimiento — captura con el tipo de cambio ya puesto
Lista de reglas de aviso con tiempo de espera por regla.
Reglas — en el teléfono — precio, RSI, volumen, fechas ex, subastas de CETES

Lo que te cuesta correrlo

Dinero no — es MIT. Atención, y una lista corta de cosas que tienen que ser ciertas en tu servidor.

8
proveedores de datos de mercado
6
bounded contexts. Las escrituras los cruzan como eventos de dominio
4
bases PostgreSQL — primary
1
cuenta en la instancia
0
cuentas con nadie más

Un comando, en tu máquina

bin/setup es idempotente: instala las gemas, crea y migra las cuatro bases de PostgreSQL, las siembra en la primera creación, y levanta el servidor. Arranca sin llaves de mercado, pero hay dos dependencias que conviene saber: sin llaves, los precios vienen de Yahoo Finance, que necesita Python 3 (solo la imagen de producción lo trae), y el tipo de cambio automático de cada movimiento necesita un token de Banxico; sin él lo capturas a mano.

Dev container

Abre la carpeta en VS Code o Codespaces y elige Reopen in Container. El setup corre solo; luego bin/dev.

Bare metal

Ruby 4.0.6 y un PostgreSQL 16 en localhost. Node.js no hace falta — el JavaScript viaja por import maps y el CSS por el compilador standalone de Tailwind.

Los dos caminos acaban aquípuerto 4100
 bin/setup   # gemas, bases, seeds, servidor
 bin/jobs    # segunda terminal — alertas, syncs, avisos

  open http://localhost:4100

Qué es en realidad la primera pantalla. Los seeds de desarrollo crean cuatro usuarios demo, así que bin/setup te deja en el login — entra con demo@stockerly.com / password123. El Setup Wizard que crea la única cuenta real sólo aparece con la base vacía, que es como se ve un primer arranque de verdad. GETTING_STARTED.md trae el one-liner para llegar ahí.

Para producción, Stockerly se deploya a cualquier servidor Linux con Kamal 2 y Docker. El deploy de referencia usa un VPS detrás de un Cloudflare Tunnel, así que no se abre ningún puerto de entrada — pero nada en la app depende de la infraestructura del maintainer. Ve docs/ops/deploy.md.

Para quién no es

Self-hosted quiere decir que estás a punto de gastarte una tarde en esto. No son limitaciones esperando arreglo — son decisiones, y cada una está registrada en el repo.

Más de una persona
Single-user por diseño. Una instancia, una cuenta, sin roles, sin compartir, sin multi-tenancy. Una casa con dos personas necesita dos instancias.
Quien invierta fuera de México
La matemática asume MXN y USD a través de un broker mexicano: CETES, el FIX de Banxico, la BMV. No es un tracker internacional genérico.
Quien quiera sync con su broker
Nada de Plaid, Yodlee ni SnapTrade, nunca a esta escala. Capturas los movimientos o importas un CSV.
Day traders
Los precios se refrescan con jobs periódicos, no en streaming, y el historial es diario. Sin velas intradía ni cotizaciones en tiempo real.
Quien quiera declarar impuestos
Sin reportes de ISR, sin SAT, sin lot tracking, sin retenciones. Registra patrimonio; no reemplaza a tu contador.
Quien necesite soporte
Sin SLA, sin garantía de soporte, sin aviso previo de cambios que rompen. Es el daily driver de una persona, que además se puede leer y correr.

Lo que te estás llevando

Licencia
MIT — open source, sin planes, sin funciones premium.Se entrega «tal cual», sin garantía de ningún tipo.
Versión
v0.3.0Corre el release etiquetado, no master: un tag es lo que un aviso de seguridad nombra cuando toca actualizar. Los releases dicen qué trajo cada uno.
Seguridad
Repórtala en privado desde la pestaña Security del repo → Report a vulnerability.Nunca abras un issue público por una vulnerabilidad. Acuse de recibo en 48 horas; ve SECURITY.md.
Interfaz
Español de México (es-MX), un solo locale.El código, las rutas, los commits y la documentación están en inglés. Un segundo locale en la app no es una meta — esta página es la que existe en los dos idiomas.
Segundo factor
TOTP con códigos de recuperación de un solo uso, dentro de la instancia.Sin proveedor de identidad externo: el login no se delega en nadie, que es la otra mitad de no tener cuenta con nadie. Ve ADR-018.
Páginas legales
Ninguna, a propósito.Es software que tú hospedas, no un servicio que alguien te presta, así que no trae aviso de privacidad ni términos — la licencia MIT carga los términos.
No es asesoría
Stockerly muestra información de mercado, no asesoría de inversión.Los precios, los fundamentales y los tipos de cambio vienen de terceros y pueden llegar tarde o mal. Verifica con tu broker cualquier cosa sobre la que actúes.
Contribuir
Reportes de bugs, preguntas y pull requests son bienvenidos — abre un issue para empezar.Lee CONTRIBUTING.md primero. Es el daily driver de una persona, revisado en tardes y fines de semana, así que espera ese ritmo y no el de un equipo.