MEMENTO
+ + + {/* Badge Admin */} + +{user.name}
} + {user?.email &&{user.email}
} +diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..d780c99 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,15 @@ +{ + "permissions": { + "allow": [ + "Bash(docker compose *)", + "mcp__web-search-prime__web_search_prime", + "WebSearch", + "mcp__zread__search_doc", + "mcp__zread__read_file", + "Bash(npm ls *)", + "mcp__zread__get_repo_structure", + "Bash(npm install *)", + "Bash(docker exec *)" + ] + } +} diff --git a/.kilo/agent-manager.json b/.kilo/agent-manager.json new file mode 100644 index 0000000..93d494d --- /dev/null +++ b/.kilo/agent-manager.json @@ -0,0 +1,9 @@ +{ + "worktrees": {}, + "sessions": {}, + "tabOrder": { + "local": [ + "pending:1" + ] + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 93b3fd1..403c59e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: volumes: - postgres-data:/var/lib/postgresql/data ports: - - "127.0.0.1:5432:5432" + - "127.0.0.1:${POSTGRES_PORT:-5433}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-memento}"] interval: 5s diff --git a/memento-note/.dockerignore b/memento-note/.dockerignore index f6571d5..7acfa64 100644 --- a/memento-note/.dockerignore +++ b/memento-note/.dockerignore @@ -51,3 +51,8 @@ Dockerfile .dockerignore docker-compose.yml deploy.sh + +# Stale service worker artifacts +public/sw.js +public/sw.js.map +public/workbox-*.js diff --git a/memento-note/.gitignore b/memento-note/.gitignore index 9b1afb1..4044d49 100644 --- a/memento-note/.gitignore +++ b/memento-note/.gitignore @@ -46,3 +46,9 @@ next-env.d.ts # generated /prisma/client-generated /_backup + +# Service worker (generated at build time if PWA is re-enabled) +public/sw.js +public/sw.js.map +public/workbox-*.js +public/workbox-*.js.map diff --git a/memento-note/Dockerfile b/memento-note/Dockerfile index 02ffece..b8c9fd1 100644 --- a/memento-note/Dockerfile +++ b/memento-note/Dockerfile @@ -1,63 +1,72 @@ -# Multi-stage build for Next.js 16 with Webpack + Prisma -# Using Debian 11 (bullseye) for native OpenSSL 1.1.x support - -FROM node:22-bullseye-slim AS base - -FROM base AS deps +# =========================================================================== +# Stage 1: Dependencies +# =========================================================================== +FROM node:22-bookworm-slim AS deps WORKDIR /app -# Install OpenSSL (1.1.x native in Debian 11) RUN apt-get update && apt-get install -y --no-install-recommends \ openssl \ && rm -rf /var/lib/apt/lists/* -# Install dependencies COPY package.json package-lock.json* ./ -RUN npm install --legacy-peer-deps +COPY prisma ./prisma -FROM base AS builder +RUN npm install +RUN npx prisma generate + +# =========================================================================== +# Stage 2: Build +# =========================================================================== +FROM node:22-bookworm-slim AS builder WORKDIR /app + COPY --from=deps /app/node_modules ./node_modules COPY . . -# Copy Prisma schema and generate client BEFORE Next.js build -COPY prisma ./prisma -RUN npx prisma generate - -# Build Next.js with Webpack +# PrismaClient validates DATABASE_URL format at import time. +# No actual DB connection occurs during build (all pages are dynamic). +ENV DATABASE_URL="postgresql://build:build@localhost:5432/build" ENV NEXT_TELEMETRY_DISABLED=1 + RUN npm run build -FROM base AS runner +# =========================================================================== +# Stage 3: Runner +# =========================================================================== +FROM node:22-bookworm-slim AS runner WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs +RUN apt-get update && apt-get install -y --no-install-recommends \ + openssl \ + && rm -rf /var/lib/apt/lists/* +RUN groupadd --system --gid 1001 nodejs +RUN useradd --system --uid 1001 --gid nodejs nextjs + +# Static assets COPY --from=builder /app/public ./public -COPY --from=builder /app/package.json ./package.json -COPY --from=builder /app/package-lock.json ./package-lock.json -RUN mkdir .next -RUN chown nextjs:nodejs .next - -# Copy Next.js standalone output +# Next.js standalone output COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# Copy Prisma schema, generated client, and Query Engine binaries -COPY --from=builder /app/prisma ./prisma -RUN chown -R nextjs:nodejs /app/prisma +# Prisma: schema + migrations + generated client + CLI +COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma +COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma +COPY --from=builder --chown=nextjs:nodejs /app/node_modules/prisma ./node_modules/prisma + +# Entrypoint +COPY --from=builder --chown=nextjs:nodejs /app/docker-entrypoint.sh ./docker-entrypoint.sh +RUN chmod +x ./docker-entrypoint.sh USER nextjs EXPOSE 3000 - ENV PORT=3000 ENV HOSTNAME="0.0.0.0" -CMD ["node", "server.js"] +ENTRYPOINT ["./docker-entrypoint.sh"] diff --git a/memento-note/app/(main)/admin/ai-test/ai-tester.tsx b/memento-note/app/(admin)/admin/ai-test/ai-tester.tsx similarity index 100% rename from memento-note/app/(main)/admin/ai-test/ai-tester.tsx rename to memento-note/app/(admin)/admin/ai-test/ai-tester.tsx diff --git a/memento-note/app/(main)/admin/ai-test/page.tsx b/memento-note/app/(admin)/admin/ai-test/page.tsx similarity index 97% rename from memento-note/app/(main)/admin/ai-test/page.tsx rename to memento-note/app/(admin)/admin/ai-test/page.tsx index 3198c82..d520d92 100644 --- a/memento-note/app/(main)/admin/ai-test/page.tsx +++ b/memento-note/app/(admin)/admin/ai-test/page.tsx @@ -2,7 +2,6 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' -import Link from 'next/link' import { ArrowLeft, TestTube } from 'lucide-react' import { AI_TESTER } from './ai-tester' import { useLanguage } from '@/lib/i18n' @@ -14,11 +13,11 @@ export default function AITestPage() {
+ Le rendu de cette page a echoue. Vous pouvez reessayer sans recharger toute l'application. +
+{user.name}
} + {user?.email &&{user.email}
} +