Compare commits

...

3 Commits

Author SHA1 Message Date
Jeff Emmett ba4ee3c6d6 chore: add community design input task
Track ongoing community feedback collection for CCA website improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-06 16:27:38 +01:00
Jeff Emmett c404e2015a chore: add backlog with completed deployment task
Track the self-hosted deployment migration:
- Next.js security update
- Docker/nginx static deployment
- Cloudflare tunnel configuration
- DNS setup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-06 16:26:30 +01:00
Jeff Emmett 4073880af5 feat: add Docker deployment for crypto-commons.org
- Add Dockerfile with nginx for static site serving
- Add docker-compose.yml with Traefik labels
- Update Next.js to 16.0.7 (security fix)
- Remove deprecated eslint config from next.config.mjs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-06 16:23:54 +01:00
9 changed files with 4067 additions and 5 deletions

8
.dockerignore Normal file
View File

@ -0,0 +1,8 @@
Dockerfile
.dockerignore
node_modules
.next
out
.git
.gitignore
README.md

44
Dockerfile Normal file
View File

@ -0,0 +1,44 @@
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci --legacy-peer-deps
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
RUN npm run build
# Production image with nginx
FROM nginx:alpine AS runner
# Copy static export to nginx
COPY --from=builder /app/out /usr/share/nginx/html
# Custom nginx config for SPA routing
RUN echo 'server { \
listen 80; \
server_name _; \
root /usr/share/nginx/html; \
index index.html; \
\
location / { \
try_files $uri $uri.html $uri/ /index.html; \
} \
\
# Cache static assets \
location /_next/static/ { \
expires 1y; \
add_header Cache-Control "public, immutable"; \
} \
\
# Security headers \
add_header X-Frame-Options "SAMEORIGIN" always; \
add_header X-Content-Type-Options "nosniff" always; \
}' > /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

15
backlog/config.yml Normal file
View File

@ -0,0 +1,15 @@
project_name: "Crypto Commons Association"
default_status: "To Do"
statuses: ["To Do", "In Progress", "Done"]
labels: []
milestones: []
date_format: yyyy-mm-dd
max_column_width: 20
default_editor: "vim"
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,33 @@
---
id: task-1
title: Deploy crypto-commons.org to self-hosted infrastructure
status: Done
assignee: []
created_date: '2025-12-06 15:25'
updated_date: '2025-12-06 15:26'
labels: []
dependencies: []
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Migrate CCA website from external hosting to Netcup server with Cloudflare tunnel
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [x] #1 Update Next.js to latest (16.0.7) for security fix
- [x] #2 Create Dockerfile for static nginx deployment
- [x] #3 Create docker-compose.yml with Traefik labels
- [x] #4 Deploy to Netcup server
- [x] #5 Configure Cloudflare tunnel
- [x] #6 Update DNS records to point to tunnel
<!-- AC:END -->
## Implementation Notes
<!-- SECTION:NOTES:BEGIN -->
Deployed 2025-12-06. Site is live at https://crypto-commons.org
<!-- SECTION:NOTES:END -->

View File

@ -0,0 +1,24 @@
---
id: task-2
title: Gather community design input for CCA website
status: To Do
assignee: []
created_date: '2025-12-06 15:27'
labels: []
dependencies: []
priority: medium
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Collect feedback and design suggestions from the Crypto Commons community to improve the website
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 Share website with CCA community for feedback
- [ ] #2 Collect design suggestions and feature requests
- [ ] #3 Prioritize improvements based on community input
- [ ] #4 Implement agreed-upon changes
<!-- AC:END -->

16
docker-compose.yml Normal file
View File

@ -0,0 +1,16 @@
services:
cca-website:
build: .
container_name: cca-website
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.cca.rule=Host(`crypto-commons.org`) || Host(`www.crypto-commons.org`)"
- "traefik.http.routers.cca.entrypoints=web,websecure"
- "traefik.http.services.cca.loadbalancer.server.port=80"
networks:
- traefik-public
networks:
traefik-public:
external: true

View File

@ -1,9 +1,6 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
eslint: {
ignoreDuringBuilds: true,
},
typescript: {
ignoreBuildErrors: true,
},

3925
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -46,7 +46,7 @@
"embla-carousel-react": "8.5.1",
"input-otp": "1.4.1",
"lucide-react": "^0.454.0",
"next": "16.0.0",
"next": "^16.0.7",
"next-themes": "latest",
"react": "19.2.0",
"react-day-picker": "9.8.0",
@ -70,4 +70,4 @@
"tw-animate-css": "1.3.3",
"typescript": "^5"
}
}
}