diff --git a/.gitignore b/.gitignore index b49ce3f..a555831 100644 --- a/.gitignore +++ b/.gitignore @@ -1,60 +1,64 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies +# ── Dependencies ───────────────────────────────────── /node_modules /.pnp .pnp.* + +# Yarn (keep patches/plugins/releases) .yarn/* !.yarn/patches !.yarn/plugins !.yarn/releases !.yarn/versions -# testing +# ── Next.js ────────────────────────────────────────── +/.next/ +/out/ +/build +next-env.d.ts + +# ── TypeScript ──────────────────────────────────────── +*.tsbuildinfo + +# ── Testing & Coverage ─────────────────────────────── /coverage /test-results/ /playwright-report/ -.agent/ -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug +# ── Logs ───────────────────────────────────────────── +*.log npm-debug.log* yarn-debug.log* yarn-error.log* .pnpm-debug.log* -server.log -# env files (can opt-in for committing if needed) +# ── Environment ────────────────────────────────────── .env* !.env.local.example -# vercel +# ── OS & Editor ────────────────────────────────────── +.DS_Store +Thumbs.db +*.pem +.vscode/settings.json +.idea/ + +# ── Agent & Dev Tools ──────────────────────────────── +.agent/ +.Jules/ + +# ── One-off Scripts (Root) ─────────────────────────── +/check_albums.js +/check_albums.ts +/git-filter-repo + +# ── Deployment ─────────────────────────────────────── .vercel -# typescript -*.tsbuildinfo -next-env.d.ts - -# internal dev docs -docs/dev/ - -# Build cache -tsconfig.tsbuildinfo -content/about.md - -#content +# ── User Content (personal gallery config) ─────────── content/settings.yaml content/gallery.yaml +content/about.md -#git-filter-repo -git-filter-repo \ No newline at end of file +# ── Internal Dev Docs ──────────────────────────────── +docs/dev/ +docs/ideas.md \ No newline at end of file diff --git a/app/api/image/[id]/route.ts b/app/api/image/[id]/route.ts index ae60889..1b4248b 100644 --- a/app/api/image/[id]/route.ts +++ b/app/api/image/[id]/route.ts @@ -37,7 +37,8 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{ if (!success) { const retryAfter = Math.ceil((resetAt - Date.now()) / 1000); - console.warn(`[Image API] ⚠️ Rate limit exceeded for IP: ${ip}. Retry after ${retryAfter}s`); + const userAgent = request.headers.get('user-agent') || 'unknown'; + console.warn(`[Image API] ⚠️ Rate limit exceeded for IP: ${ip} (UA: ${userAgent}). Retry after ${retryAfter}s`); return NextResponse.json({ error: 'Too many requests' }, { status: 429 }); } diff --git a/app/globals.css b/app/globals.css index e2d5b1e..49a5eae 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1395,6 +1395,19 @@ color: var(--accent); } +/* ── Tablet (iPad, kleine Laptops) ─────────────────── */ +/* Direkt column-count setzen → kein Konflikt mit Inline-Style der Custom Property */ +@media (max-width: 1024px) and (min-width: 641px) { + .photo-grid { + column-count: 2; + } + + .photo-grid--uniform, + .photo-grid--showcase { + grid-template-columns: repeat(2, 1fr); + } +} + @media (max-width: 640px) { .hero { grid-template-columns: 1fr; @@ -1415,8 +1428,26 @@ font-size: 2rem; } + /* Portrait: 2 Spalten — direkt gesetzt, kein !important nötig */ .photo-grid { - --grid-columns: 1; + column-count: 2; + } + + .photo-grid--uniform, + .photo-grid--showcase { + grid-template-columns: repeat(2, 1fr); + } + + /* Landscape-Handy → 3 Spalten */ + @media (orientation: landscape) { + .photo-grid { + column-count: 3; + } + + .photo-grid--uniform, + .photo-grid--showcase { + grid-template-columns: repeat(3, 1fr); + } } .album-grid { diff --git a/lib/env.ts b/lib/env.ts index d479e6a..66cd529 100644 --- a/lib/env.ts +++ b/lib/env.ts @@ -34,7 +34,7 @@ function parseEnv(): Env { const rateLimitStr = process.env.RATE_LIMIT_RPM; const rateLimit = - rateLimitStr && !isNaN(parseInt(rateLimitStr, 10)) ? parseInt(rateLimitStr, 10) : 600; + rateLimitStr && !isNaN(parseInt(rateLimitStr, 10)) ? parseInt(rateLimitStr, 10) : 1500; return { IMMICH_API_URL: apiUrl, diff --git a/server.log b/server.log deleted file mode 100644 index 1375a52..0000000 --- a/server.log +++ /dev/null @@ -1,6 +0,0 @@ -▲ Next.js 16.1.6 -- Local: http://localhost:3000 -- Network: http://0.0.0.0:3000 - -✓ Starting... -✓ Ready in 33ms