Medicinas
Contexto
Proyecto personal de Sergio: app para llevar control de inventario de medicinas y tratamientos médicos (uso personal/familiar).
Prioridad baja, activo.
Tareas pendientes
- Resuelto 2026-05-15: PHP-FPM en val-soft tenía defaults Ubuntu (
upload_max_filesize=2M,post_max_size=8M). Sergio aplicó/etc/php/8.3/fpm/conf.d/99-uploads.inicon 50M/60M/256M +/etc/nginx/conf.d/uploads.confconclient_max_body_size 50M. nginx sitemedicinassigue conclient_max_body_size 10Mque es el límite efectivo — suficiente para fotos de receta de celular. - Resuelto 2026-05-15: la feature de subir fotos sí estaba implementada, pero solo en la tarjeta personal — el bloque familiar la había perdido al ultimo cambio. Refactor a
PlanCard.vuecompartido (commitd2a02aeenmain); ahora ambos lados muestran ”+ Subir Foto” y la sección “Recetas / Notas”. - Resuelto 2026-05-27 [#287]: ver fotos de recetas desde el dashboard (no solo desde
/plans). Confirmado por Sergio. - Resuelto 2026-05-27 [#288]: mostrar fecha final de cada medicamento en dashboard, calendar y
/plans. Confirmado por Sergio.
En progreso
(Por confirmar.)
Notas técnicas
Stack
- Laravel 13, PHP 8.5
- Inertia v2 + Vue 3
- Tailwind 3
- Sanctum 4, Breeze 2 (auth scaffolding), Ziggy 2 (rutas Laravel en JS)
- Laravel Sail (Docker)
- PHPUnit 12 (no Pest aquí — el
ANTIGRAVITY.mdlo aclara: “If you see a test using Pest, convert it to PHPUnit”)
Skills declaradas en el ANTIGRAVITY.md
El proyecto declara que se deben activar estos skills cuando aplique:
laravel-best-practices— para todo código Laravel PHP.inertia-vue-development— al crear pages/forms/navigation con Inertia v2 + Vue.tailwindcss-development— al estilizar con Tailwind.
Convenciones especiales
- PHPUnit, no Pest (override explícito al default de Boost).
- Pint con
vendor/bin/sail bin pint --dirty --format agent.
Bitácora
2026-05-27
- Sergio confirma cerrados:
- #287 Ver fotos de recetas desde el dashboard (no solo
/plans). - #288 Mostrar fecha final de cada medicamento en dashboard, calendar y
/plans.
- #287 Ver fotos de recetas desde el dashboard (no solo
- Ambos bullets removidos de la sección de pendientes; entradas “Resuelto” agregadas con sus IDs. PENDIENTES.md actualizado: Personal
medicinasqueda sin pendientes abiertos.
2026-05-21
- Sergio confirma que #134 “Subir fotos de las recetas” ya está hecho. La feature se implementó el 2026-05-15 (refactor a
PlanCard.vuecompartido, commitd2a02aeenmain), pero el bullet había quedado abierto enPENDIENTES.mdpor olvido. Cierre formal hoy: bullet removido de PENDIENTES.md, entrada agregada a “Cerrado reciente” con ID#134, contador Personal 10→9.
2026-05-14 (parte 2 — noche)
- Pidió Sergio: configurar Gmail SMTP en producción para enviar correos del password reset. Reportó error 500.
- Causa raíz: en el
.envde producción quedóMAIL_SCHEME=tls. Symfony Mailer (Laravel ≥9) solo aceptasmtposmtpscomo scheme —tls/sslya no son válidos. Error en log:The "tls" scheme is not supported; supported schemes for mailer "smtp" are: "smtp", "smtps". - Fix aplicado por Sergio:
MAIL_SCHEME=null(o quitar la línea) conMAIL_PORT=587→ Symfony auto-detecta STARTTLS. Alternativa:MAIL_SCHEME=smtps+MAIL_PORT=465. - Estado: envío Gmail en producción funcionando.
2026-05-14 (parte 1)
- Pidió Sergio: validar que se puede recuperar contraseña desde la UI.
- Hice:
- Revisión estática: rutas Breeze (
routes/auth.php) cargadas desdeweb.php:46;Login.vue:65muestra el link “¿La olvidaste?” condicional acanResetPassword; controllerPasswordResetLinkControllercorrecto. - Tests automatizados de Breeze:
./vendor/bin/sail test --filter=PasswordResetTest→ 4/4 PASS (link screen renders, link can be requested, reset screen renders con token real, password can be reset with valid token). - End-to-end real contra Sail (app:8083, mailpit:8028) usando HTTP + Mailpit API:
GET /forgot-password→ 200.POST /forgot-passwordcon emailsevaor@gmail.com(Inertia + XSRF) → 302 back con flashstatus.- Mailpit recibió “Reset your password” → sevaor@gmail.com.
GET /reset-password/{token}?email=…→ 200.
- NO ejecuté el POST final a
/reset-passwordpara no invalidar la contraseña real de la cuenta. Ese paso ya está cubierto por el testtest_password_can_be_reset_with_valid_token.
- Revisión estática: rutas Breeze (
- Estado: flujo de recuperación funcionando end-to-end. Mailpit recibe el correo; el link del correo lleva a una pantalla viva con el token.
- Para validación 100% manual en browser: abrir
http://localhost:8083/login, click “¿La olvidaste?”, meter el email, abrir Mailpit enhttp://localhost:8028, click el link, fijar nueva contraseña.
2026-05-08
- Pidió Sergio: registrar el proyecto.
- Hice: archivo creado con stack. Capturado el override a PHPUnit y los skills declarados.
- Falta: Sergio dictará pendientes específicos.
2026-05-13
- Pidió Sergio: agregar pendiente rápido — subir fotos de las recetas. Cree que ya lo había implementado, quizá solo falta el botón.
- Hice: tarea agregada a pendientes. Revisar mañana (2026-05-14) qué hay ya implementado en el código y si solo falta exponer un botón en la UI.
- Falta: revisar el codebase mañana.