Add Docker configuration for deployment

- 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 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2025-12-26 12:17:53 -05:00
parent 948e9c9c05
commit 661f5fa601
6 changed files with 113 additions and 0 deletions

41
Dockerfile Normal file
View File

@ -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"]

15
backlog/config.yml Normal file
View File

@ -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

View File

@ -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
<!-- SECTION:DESCRIPTION:BEGIN -->
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
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #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
<!-- AC:END -->

15
docker-compose.yml Normal file
View File

@ -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

View File

@ -1,6 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: "standalone",
images: {
domains: ["images.squarespace-cdn.com"],
},

0
public/.gitkeep Normal file
View File