Ad interactions (reactions/comments/reposts on ads): - Schema: AdReaction, AdComment, AdRepost models with RLS enabled - tRPC: new ads router (getFeedData, toggleReaction, addComment, listComments, toggleRepost) - AdCard: fully interactive card with paw, comment sheet, repost — mirrors PostCard style - getActiveAds includes _count for advertiser engagement metrics Invite system enforcement: - proxy.ts: /sign-up blocked without pf_invite cookie - INVITE_REQUIRED=false env var disables gate for post-beta live launch - Full invite flow: /join → cookie → /sign-up → consume-invite → 3 codes issued to new user - Admin: listInviteCodes, createRootInvite, revokeInvite procedures Sidebar mini-footer: - Impressum + Datenschutz links always visible at sidebar bottom - PawFeed Alpha-Test copyright line Docker self-hosting: - docker/Dockerfile: 3-stage build using Next.js standalone output - docker/docker-compose.yml: env_file + build-args for NEXT_PUBLIC_ vars - .dockerignore at project root - next.config.ts: output standalone for minimal image - .env.example: documented INVITE_REQUIRED
22 lines
486 B
TypeScript
22 lines
486 B
TypeScript
import type { NextConfig } from "next";
|
|
|
|
function getSupabaseHostname(): string {
|
|
const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
|
|
if (url) {
|
|
try { return new URL(url).hostname; } catch { /* fall through */ }
|
|
}
|
|
return "*.supabase.co";
|
|
}
|
|
|
|
const nextConfig: NextConfig = {
|
|
output: "standalone",
|
|
allowedDevOrigins: ["192.168.1.92"],
|
|
images: {
|
|
remotePatterns: [
|
|
{ protocol: "https", hostname: getSupabaseHostname() },
|
|
],
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|