Images now load direct from images.04080616.xyz. Removes read-side
signing (signUrl/signCoverUrls + callers), unlocking browser and
edge caching since URLs are stable. Presigned upload kept for /api/upload.
PageReader retries failed loads via onError as a safety net.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CLAUDE.md is now self-contained: absorbed the still-accurate parts of
AGENTS.md (Next.js-is-different warning, port allocation, Nginx block,
SEO notes, Meilisearch as phase-2 plan) and dropped the stale bits
(pre-width/height schema, "public domain only" content policy, old
manga.04080616.xyz domain, aspirational build order).
Also added findings surfaced by auditing CLAUDE.md against the actual
code:
- Placeholder-based reader architecture and its invariants (must have
Page.width/height, scroll={false} on Links, history.replaceState for
URL sync, prev/next derived from currentChapterNum).
- docker-compose.yml only brings up the app; Postgres is external.
- localStorage key format sunnymh:last-read:<slug> + legacy bare-number
fallback that must be preserved.
- Immersive reader route: Header/BottomNav return null on /manga/[slug]/[n].
- signCoverUrls is the single source of truth for signed cover URLs.
- iOS Safari conventions: viewportFit cover, pt-safe/pb-safe, WebKit
momentum scrolling, overflow-x:hidden.
- Dev gotchas: allowedDevOrigins VPN whitelist, prisma/seed.ts is
docs-only, scraper is the real data pipeline.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Simple landing page for initial Portainer GitOps deployment.
Includes Dockerfile, docker-compose.yml with pull_policy: build,
and project documentation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>