From 661f5fa601f5a82785b53fa6629dd7cdd7f4663b Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Fri, 26 Dec 2025 12:17:53 -0500 Subject: [PATCH] Add Docker configuration for deployment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile with multi-stage build (builder + runner) - docker-compose.yml with Traefik labels - Enable standalone output in Next.js config - Add public directory placeholder 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- Dockerfile | 41 +++++++++++++++++++ backlog/config.yml | 15 +++++++ ...task-1 - Finish-Nusqool-website-replica.md | 41 +++++++++++++++++++ docker-compose.yml | 15 +++++++ next.config.ts | 1 + public/.gitkeep | 0 6 files changed, 113 insertions(+) create mode 100644 Dockerfile create mode 100644 backlog/config.yml create mode 100644 backlog/tasks/task-1 - Finish-Nusqool-website-replica.md create mode 100644 docker-compose.yml create mode 100644 public/.gitkeep diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6f0657f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +# Build stage +FROM node:20-alpine AS builder + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm ci + +# Copy source code +COPY . . + +# Build the application +RUN npm run build + +# Production stage +FROM node:20-alpine AS runner + +WORKDIR /app + +ENV NODE_ENV=production + +# Create non-root user +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +# Copy built assets +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +CMD ["node", "server.js"] diff --git a/backlog/config.yml b/backlog/config.yml new file mode 100644 index 0000000..ad34559 --- /dev/null +++ b/backlog/config.yml @@ -0,0 +1,15 @@ +project_name: "Nusqool Website Replica" +default_status: "To Do" +statuses: ["To Do", "In Progress", "Done"] +labels: [] +milestones: [] +date_format: yyyy-mm-dd +max_column_width: 20 +default_editor: "nvim" +auto_open_browser: true +default_port: 6420 +remote_operations: true +auto_commit: false +bypass_git_hooks: false +check_active_branches: true +active_branch_days: 30 diff --git a/backlog/tasks/task-1 - Finish-Nusqool-website-replica.md b/backlog/tasks/task-1 - Finish-Nusqool-website-replica.md new file mode 100644 index 0000000..f9c74f3 --- /dev/null +++ b/backlog/tasks/task-1 - Finish-Nusqool-website-replica.md @@ -0,0 +1,41 @@ +--- +id: task-1 +title: Finish Nusqool website replica +status: To Do +assignee: [] +created_date: '2025-12-26 15:31' +labels: [] +dependencies: [] +priority: medium +--- + +## Description + + +Complete the Nusqool.com website replica with all remaining features and polish. + +Current state: +- Basic structure and all sections implemented +- Responsive navigation with mobile menu +- Custom color palette and typography +- Placeholder images (need real photos) + +Remaining work: +- Add actual images from original site or new photos +- Implement working links for all navigation items +- Add Calendly booking integration +- Create subpages (About Thu, TRE, Coaching, etc.) +- Add animations and micro-interactions +- Implement newsletter signup backend +- Test and optimize for all devices +- Deploy to production + + +## Acceptance Criteria + +- [ ] #1 Real images added to all sections +- [ ] #2 All navigation links functional +- [ ] #3 Subpages created for main menu items +- [ ] #4 Newsletter signup connected to backend +- [ ] #5 Deployed and accessible online + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2b871ad --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +services: + nusqool-staging: + build: . + container_name: nusqool-staging + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.nusqool-staging.rule=Host(`nusqool-staging.jeffemmett.com`)" + - "traefik.http.services.nusqool-staging.loadbalancer.server.port=3000" + networks: + - traefik-public + +networks: + traefik-public: + external: true diff --git a/next.config.ts b/next.config.ts index f0fe807..aa0b375 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,6 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { + output: "standalone", images: { domains: ["images.squarespace-cdn.com"], }, diff --git a/public/.gitkeep b/public/.gitkeep new file mode 100644 index 0000000..e69de29