30 Commits
Author SHA1 Message Date
Renato 636d629034 fix: traduccion con rotacion de modelos + filtro anti-basura + benchmark de modelos 2026-08-05 05:57:55 +08:00
Renato 13e507fbb9 docs: documentar traduccion de titulos y moderacion en AGENTS.md 2026-08-05 05:36:56 +08:00
Renato d3cd79f50d feat: traduccion de titulos al espanol (title_es) + card limpia (fecha en vez de tags/min) + poller traduce nuevos 2026-08-05 05:35:41 +08:00
Renato fcb418101e fix: grid estable en home (reemplazar CSS columns rebalanceable por grid con celdas fijas) 2026-08-05 05:02:47 +08:00
Renato f5d631dd03 chore: remover scripts de test de moderacion 2026-08-05 03:15:30 +08:00
Renato cebb026564 feat: moderacion lolicon - cuarentena + decision desde Discord (webhook links aprobar/rechazar) 2026-08-05 03:14:53 +08:00
Renato 702c6a5781 feat: links cruzados autor->/autor y parodia->/franquicia en posts 2026-08-05 02:38:06 +08:00
Renato a237d08f59 feat: sistema de series/autores/franquicias + sidebar navegacion 2026-08-05 02:30:53 +08:00
Renato c16666035c feat: notificacion automatica en Discord via webhook (nuevos mangas) 2026-08-04 20:19:08 +08:00
Renato ef1f06d465 SEO: OG por post, RSS feed, sitemap, FTS5 busqueda, View Transitions, Cloudflare Polish 2026-08-04 17:47:05 +08:00
Renato 1825dfae4e gate +18 con cookie de 1 dia (web + links page) 2026-08-04 17:26:33 +08:00
Renato 569245b440 branding: worst-scan fansub (remover 'traduccion automatica' del texto publico) 2026-08-04 17:19:00 +08:00
Renato 7f939b76a4 Rediseno home: hero destacado, chips de genero, masonry + scroll infinito, busqueda publica /buscar, footer comunidad, status/queue protegidos 2026-08-04 13:21:13 +08:00
Renato ff3ec34674 chore: remover .env.bak del repo (secrets) + gitignore 2026-08-04 12:34:10 +08:00
Renato 3fded1eae6 UX: lector publico, panel admin escondido, paginacion feed, auth activa 2026-08-04 12:33:57 +08:00
Renato fcff8b0a7b fix: usar Web Crypto global (crypto.randomUUID) en auth.ts - node:crypto rompe el middleware de Edge Runtime 2026-08-04 11:15:37 +08:00
Renato 451518004d Seguridad y docs: fix SQLi en updatePost, middleware por segmentos exactos, cover-cache directo al upstream, JWT sin fallback hardcodeado, password sudo fuera de deploy/setup.sh; reescritura AGENTS.md y CLAUDE.md 2026-08-04 11:13:57 +08:00
Renato 5d36c635cb fix: swap creation + China npm mirror for 1GB VPS
- Creates 1GB swap file before build (prevents OOM on low-RAM VPS)
- Auto-detects China network block on npmjs.org → switches to npmmirror
- deploy/setup.sh: minimal script for pre-built tarball deployment
2026-07-28 01:29:11 +02:00
Renato 4e5a4eda1f fix: npm ci hangs — clean node_modules, add timeout, install build-essential
- rm -rf node_modules before npm ci (clean from aborted runs)
- 420s timeout on npm ci (kills if stuck on native module compilation)
- Install build-essential + python3 for better-sqlite3 native addon
- Exit with clear error if npm ci fails
2026-07-28 00:57:05 +02:00
Renato 8ed9bd83ec fix: skip build if standalone exists; survive SSH drops
- Screen tip added to header
- Skip npm ci + next build if .next/standalone/server.js exists
- Skip systemd service creation if unit exists (restart instead)
- Close else/fi properly for systemd block
- Re-run after SSH drop picks up where it left off
2026-07-28 00:46:20 +02:00
Renato 225bb491a6 feat: direct VPS installer — Node.js 22 + Caddy + systemd, no Docker
Replaces the Docker-based install.sh with a direct-install approach:
- Docker cleanup: removes container, stops daemon, uninstalls packages
- Node.js 22 via NodeSource apt/rpm/pacman repos
- Caddy via Cloudsmith apt/COPR/pacman repos
- Clone, npm ci, npm run build, standalone output
- systemd unit (worst-scan-web.service) — user-level service, HOSTNAME=127.0.0.1
- Caddy reverse proxy on :80 → 127.0.0.1:3000
- deploy/ reference files for manual editing

~150-160 MB RAM total (vs ~300-400 MB with Docker) on 1GB VPS
2026-07-28 00:24:16 +02:00
Renato 958c9cfefc fix: DOCKER_CMD function instead of string for proper arg passing
sg docker -c docker compose expands 'compose' as arg to sg, not docker.
Replaced with bash function docker_cmd() that uses sudo docker as fallback.
This works immediately after usermod without re-login.
2026-07-27 23:34:07 +02:00
Renato ce9223cb65 fix: use Docker convenience script for Ubuntu/Debian
The manual apt repo setup failed because uname -m returns x86_64 but
Docker repo expects amd64 as arch name. Use get.docker.com which
handles arch/codename/GPG correctly. Also added proper arch mapping
(x86_64→amd64, aarch64→arm64) for future use.
2026-07-27 23:31:34 +02:00
Renato 18cee972f5 feat: install.sh auto-installs Docker when missing
- OS detection (ubuntu/debian, arch, fedora, centos/rhel)
- Docker Engine: official repo (apt), pacman, or dnf
- Compose plugin: docker-compose-v2, docker-compose-plugin, or CLI plugin fallback
- Docker daemon auto-start via systemd/service/dockerd
- User added to docker group + sg fallback for current shell
- DOCKER_CMD variable handles sudo vs non-sudo transparently
- Wider summary box (60 chars) for full path display
2026-07-27 23:30:01 +02:00
Renato 0fc421f234 feat: self-contained Docker installer with web setup wizard
- settings.ts: persistent settings.json in data volume (survives restarts)
- /api/setup: POST to save API_BASE_URL, API_KEY, WEB_PASSWORD, WEBHOOK_SECRET
- /setup: web-based setup wizard for first-time configuration
- /api/health: JSON health check endpoint for Docker healthcheck
- api.ts: dynamic API_BASE_URL/API_KEY resolution from settings
- login route: fallback WEB_PASSWORD from settings.json
- middleware: /setup and /api/setup are public paths
- Dockerfile: HEALTHCHECK instruction
- docker-compose.yml: healthcheck + optional .env file
- .env.example: full documentation of all env vars
- install.sh: single-command VPS installer (clone, build, run)
2026-07-27 23:24:57 +02:00
Renato 571b6d1a7c fix(web): render Sinopsis section only when valid LLM synopsis text exists 2026-07-24 02:55:56 +02:00
Renato 72e503d7bc feat(web): sync translated manga galleries, clean titles, synopsis integration, original source links, anthology badges, and mobile-first reader UI 2026-07-24 01:59:40 +02:00
Renato 269762557e docs: agy.md — architecture, routes, bugfix, and pending plan
- Fix poller shape mismatch (res.data -> res.data?.data) that caused
  silent TypeError and 0 posts despite completed galleries (#1)
- Align types in api.ts to reflect ApiResponse<PaginatedResponse<>> shape
- Comprehensive agy.md documenting architecture, routes, 43 CBZ galleries,
  known bugs, blocker (API listing), and implementation plan
2026-07-24 00:50:15 +02:00
renato97 4e9f815a53 fix: standalone start script copies static files automatically
- scripts/start.js: copies .next/static to .next/standalone/.next/static
  before launching the standalone server (prevents CSS 404)
- package.json: start script now uses scripts/start.js
- Dockerfile: removed fragile manual better-sqlite3 copy
  (already included in standalone output)
- scripts/setup.sh: added local prod option for npm start
2026-07-23 16:25:52 -03:00
renato97 25449aa5df feat: worst-scan fansub web — initial release
Posts engine (SQLite + auto-publisher via poller), public feed with
clickable tags, reader, admin panel, submit/search/queue tools.
BFF proxy to pipeline API. Clean dark design. Docker-ready.
2026-07-23 15:58:28 -03:00