Skip to content

Releases: muke78/Backend_Portafolio

0.7.0 - about/education/skills (Fase 5a)

Choose a tag to compare

@muke78 muke78 released this 14 Sep 09:47
59b14b3

Convierte About/Educación/Habilidades de código estático a tablas reales en Turso, editables vía dashboard igual que projects/experiences.

  • about: singleton, solo GET/PUT, upsert real.
  • education: lista, CRUD completo.
  • skills: lista de categorías, CRUD completo.

Las tres protegidas por JWT admin (Fase 4a) en escritura. Contenido real migrado vía scripts/seed-content.ts (about/education/skills sembrados en Turso, verificado en los 3 idiomas).

Ver docs/06-about-education-skills.md.

PR #18, #19.

0.6.0 - hono/language + best practices

Pre-release

Choose a tag to compare

@muke78 muke78 released this 14 Sep 09:15
b1b72a4

Pedido explicito: sumar `hono/language` y revisar el proyecto contra la guia de best practices de Hono (ver `docs/05-hono-language-and-best-practices.md`).

hono/language

  • Configurado con `lookupQueryString: "currentLocale"` - mismo nombre que ya usaba el contrato con Astro, no lo duplica.
  • Cambio de comportamiento intencional: `currentLocale` ausente sigue dando 400; presente-pero-no-exacto (`es-MX`, `ES`) ya no se rechaza - se normaliza o cae al fallback.
  • Verificado en vivo: `es-MX` devuelve exactamente el mismo contenido que `es` puro.

Best practices

  • `export type AppType` agregado (deja la puerta abierta a RPC tipado con `hono/client`).
  • El resto de la guia ya se cumplia (sin controllers estilo Rails, `app.route()` ya en uso, sin HEAD dedicado).

Verificacion: 50 tests con `bun test`, verificacion end-to-end contra el servidor real.

Pre-release: vive en `dev`, `main` no se toco.

🤖 Generated with Claude Code

0.5.0 - CRUD de projects/experiences

Pre-release

Choose a tag to compare

@muke78 muke78 released this 14 Sep 09:07
066cc08

Fase 4b del plan (ver `docs/04-hono-projects-experiences-crud.md`). Hono no tenia nada de escritura para `projects`/`experiences` - se construye protegido por JWT desde el dia uno.

CRUD real

  • `POST/PUT/DELETE /projects`, `POST/PUT/DELETE /experiences`, transacciones reales, cascada de traducciones verificada contra Turso real (`foreign_keys` ON confirmado, no asumido).

Hallazgo de seguridad

  • `hono/csrf` bloqueaba con 403 cualquier `DELETE` sin `Content-Type` explicito - corregido y documentado antes de que llegara a produccion (Fase 4c).

Convenciones de codigo nuevas

  • Tests por recurso (antes un archivo de 560 lineas).
  • Limite de 250 lineas por archivo.
  • `HTTPException` de Hono en vez de `c.json` manual en cada corte temprano.
  • Tipos centralizados en `src/interfaces/interfaces.ts`.
  • Log de auditoria en cada escritura admin (OWASP A09).
  • Doc con tabla de cobertura OWASP Top 10 completa.

Verificacion: end-to-end contra Turso real, 49 tests con `bun test`.

Pre-release: vive en `dev`, `main` no se toco.

🤖 Generated with Claude Code

0.4.0 - JWT de sesion admin + tabla users

Choose a tag to compare

@muke78 muke78 released this 14 Sep 08:47
5ccbaf2

Fase 4a del plan (ver `docs/03-hono-admin-auth.md`). Cierra el hallazgo 3 de `docs/00-auditoria.md`.

Auth real, por fin

  • Tabla `users` (Argon2id via `Bun.password`, nativo) reemplaza `ADMIN_PASSWORD` en env var.
  • `scripts/seed-admin-user.ts`: interactivo, la contraseña nunca toca chat/archivo/argumento.
  • `POST /auth/login` firma un JWT (`hono/jwt`, HS256, 2h) con clave distinta del `API_TOKEN` fijo.
  • `adminAuth.middleware.ts` protege `GET/PUT` admin de `comments`/`contact-messages`.

Infraestructura

  • `__drizzle_migrations` reparada de verdad esta vez - el intento de la Fase 3 nunca se aplico.

Verificacion

  • End-to-end contra Turso real: ciclo completo de moderacion (pending -> admin lo ve con JWT -> aprobado -> publico) confirmado en produccion, con limpieza inmediata.
  • 28 tests con `bun test`.

Pendiente: Fase 4b (CRUD de `projects`/`experiences`) y Fase 4c (repo Portafolio, login real).

Pre-release: vive en `dev`, `main` no se toco.

🤖 Generated with Claude Code

0.3.0 - Moderacion de comentarios + fin de Telegram

Choose a tag to compare

@muke78 muke78 released this 14 Sep 08:17
35ce8d0

Fase 3 del plan de auditoria (ver `docs/02-comentarios-y-contacto.md`). Cierra el hallazgo 1 de `docs/00-auditoria.md` (causa raiz del hackeo de 800 comentarios) del lado del backend.

Moderacion de comentarios

  • `comments.status` (`pending`/`published`/`hidden`): `POST /comments` siempre inserta `pending`, `GET /comments` publico filtra `published`. Un comentario nuevo nunca se publica en vivo solo.

Fin de Telegram, centro de mensajes real

  • Tabla `contact_messages` nueva, reemplaza al modulo de Telegram (eliminado por completo).
  • `POST /contact-messages` valida con Zod de verdad (el `/tlgrm` viejo no validaba nada) y guarda `phone` como string (el viejo lo forzaba a `Number`, bug real con telefonos con formato).

Hallazgo de infraestructura

  • `bun run db:migrate` estaba roto: `__drizzle_migrations` desincronizada de los archivos de migracion (6 migraciones aplicadas sin registrar). Corregido sin re-ejecutar ninguna migracion vieja.

Verificacion

  • End-to-end contra Turso real: confirmado que un comentario `pending` no aparece en el listado publico.
  • 16 tests con `bun test`, cero tocan Turso/red real.

Pendiente, otro repo: Portafolio necesita apuntar el form de contacto a `/api/contact-messages` y conectar rate limiting al proxy publico de comentarios.

Pre-release: vive en `dev`, `main` no se toco en esta ronda.

🤖 Generated with Claude Code

0.2.0 - Backup de Turso

Pre-release

Choose a tag to compare

@muke78 muke78 released this 14 Sep 08:00
5b9da7c

Fase 2 del plan de auditoria (ver `docs/01-backup-turso.md`).

  • `scripts/backup-turso.ts`: backup completo de la Turso real, tabla por tabla, a JSON local. Descubre las tablas via `sqlite_master` en vez de hardcodear la lista.
  • Resuelve una pregunta abierta de `docs/04-migracion-datos.md` (repo Portafolio): `experience_translations` si existe como tabla separada (mismo patron que `projects`/`project_translations`) - no hace falta migrar nada ahi.
  • Corrida real hoy: 6 tablas (`comments`, `experience`, `experience_translations`, `projects`, `project_translations`, `__drizzle_migrations`), 0 errores, sin datos de prueba que limpiar.
  • `backups/` en `.gitignore` - contiene PII real, nunca se commitea.
  • De paso: la `version` del health check ahora se lee de `package.json` en vez de estar hardcodeada.

Pre-release: vive en `dev`, `main` no se toco en esta ronda.

🤖 Generated with Claude Code

0.1.0 - Hardening de Hono + testing

Pre-release

Choose a tag to compare

@muke78 muke78 released this 14 Sep 07:54
342d19d

Fase 1 del plan de auditoria (ver docs/00-auditoria.md para el detalle completo).

Seguridad

  • Rate limiting propio en POST /comments y POST /tlgrm - cierra el vector real del hackeo de ~800 comentarios.
  • basePath simplificado a /api - ya no un UUID tratado como pseudo-secreto (aparecia en texto plano en cada log de acceso).
  • hono/secure-headers, hono/body-limit, hono/csrf, hono/timeout nuevos.
  • errorHandler respeta el status/mensaje real de HTTPException en vez de aplanar todo a 500.
  • Dependencias actualizadas: bun audit 46 -> 3 vulnerabilidades (las 3 restantes documentadas).

Correccion de bugs

  • count() agregado en vez de SELECT * completo para alternar direction en comentarios (N+1 real).
  • Logs movidos a consola - los de archivo nunca funcionaron en produccion (filesystem read-only en Vercel serverless).
  • Respuesta de error de Zod normalizada al shape ApiResponse.

Testing

  • 15 tests con bun test, cero tocan Turso o Telegram reales.
  • .husky/pre-push nuevo: biome + tsc + bun test antes de cada push.

Primera version real: este repo no tenia "version" en package.json hasta ahora.

Pre-release: vive en dev, main no se toco en esta ronda.

🤖 Generated with Claude Code

0.0.3

Choose a tag to compare

@muke78 muke78 released this 11 Sep 10:34
17a48f9

What's Changed

  • fix(adaptation): Global configuration fix in config ts and adaptation of tables from drizzle on migrations by @muke78 in #4
  • feat(logger): Log files are added to collect data about the requests made. by @muke78 in #5
  • fix(extensions): tsconfig for code extensions is improved and a new field has been added to turso and adaptation imports runtime by @muke78 in #6
  • deploy(Improvements): Typing adaptations and semantic improvements to the backend, loggers, and protection of unauthenticated sites by @muke78 in #7

Full Changelog: 0.0.2...0.0.3

0.0.2

Choose a tag to compare

@muke78 muke78 released this 16 Aug 11:42

Full Changelog: 0.0.1...0.0.2

0.0.1

Choose a tag to compare

@muke78 muke78 released this 16 Aug 09:34
50cc28f

Full Changelog: https://github.com/muke78/Backend_Portafolio/commits/0.0.0

What's Changed

  • feat(setup): Initial setup with drizzle by @muke78 in #1
  • feat(controllers): Implementation of functions for controllers such as comments, projects, experiences and chatbot telegram by @muke78 in #2
  • deploy(functions): Backend deployment in pull to the main branch by @muke78 in #3

New Contributors

  • @muke78 made their first contribution in #1

Full Changelog: 0.0.0...0.0.1