Files
moreminimore-website/WEBSITE-CREATOR-IMPROVEMENTS.md

10 KiB

Website Creator Skill - Improvements from PDPA Implementation

Date: March 9, 2026
Source: Real-world implementation at moreminimore-redesign
Status: Lessons Learned & Action Items


🚨 Critical Fixes Required

1. Dockerfile Template - Production Server

PROBLEM: Original template used astro preview (development server)

# ❌ WRONG - Development server only
CMD ["npx", "astro", "preview", "--host", "0.0.0.0", "--port", "80"]

SOLUTION: Use Node adapter production server

# ✅ CORRECT - Production server
CMD ["node", "dist/server/entry.mjs"]

WHY:

  • astro preview is for development only
  • Has host restrictions and security limitations
  • Not optimized for production
  • node dist/server/entry.mjs is the actual production server

2. Dockerfile - Environment Variables for Docker Networking

PROBLEM: Server listens on localhost by default, not accessible from outside container

# ❌ MISSING - Server only accessible inside container
ENV NODE_ENV=production

SOLUTION: Add HOST and PORT environment variables

# ✅ CORRECT - Server accessible from outside
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=80

WHY:

  • Node.js servers respect HOST and PORT env vars
  • 0.0.0.0 means "listen on all network interfaces"
  • Required for Docker container networking
  • More reliable than adapter config

3. Astro DB Build - Remote Flag Required

PROBLEM: Build fails without --remote flag and ASTRO_DB_REMOTE_URL

# ❌ WRONG - Build fails
RUN npm run build

SOLUTION: Set env var and use --remote flag

# ✅ CORRECT - Astro DB initialized properly
RUN mkdir -p ./data && ASTRO_DB_REMOTE_URL=file:./data/consent.db npx astro build --remote

WHY:

  • Astro DB requires explicit connection info at build time
  • --remote flag tells Astro to connect to database
  • ASTRO_DB_REMOTE_URL must be set during build
  • Data directory must exist before build

4. Package Installation - Production Dependencies

PROBLEM: npm ci --production skips build-time dependencies

# ❌ WRONG - Missing @astrojs/node at build time
RUN npm ci --production

SOLUTION: Use npm install --production

# ✅ CORRECT - All dependencies available
RUN npm install --production

WHY:

  • npm ci --production is too strict
  • Some packages needed at both build and runtime
  • npm install --production handles this correctly

📝 Skill Template Updates Needed

Updated Dockerfile Template

FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
# Create data directory BEFORE build (Astro DB requirement)
RUN mkdir -p ./data && ASTRO_DB_REMOTE_URL=file:./data/consent.db npx astro build --remote

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
# Use npm install, not npm ci --production
RUN npm install --production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/db ./db
COPY --from=builder /app/data ./data

# SQLite runtime for Astro DB
RUN apk add --no-cache sqlite-libs

EXPOSE 80

# Critical environment variables for Docker networking
ENV NODE_ENV=production
ENV ASTRO_DB_REMOTE_URL=file:/app/data/consent.db
ENV HOST=0.0.0.0
ENV PORT=80
ENV ADMIN_PASSWORD=${ADMIN_PASSWORD}

# Use production server, NOT astro preview
CMD ["node", "dist/server/entry.mjs"]

Updated astro.config.mjs Template

// @ts-check
import { defineConfig } from 'astro/config';
import db from '@astrojs/db';
import node from '@astrojs/node';

import tailwindcss from '@tailwindcss/vite';

export default defineConfig({
  integrations: [db()],
  adapter: node({
    mode: 'standalone'
    // Don't set host/port here - use environment variables instead
  }),
  vite: {
    plugins: [tailwindcss()],
    server: {
      host: true  // Allow all hosts in development
    }
  }
});

Updated package.json Template

{
  "dependencies": {
    "astro": "^5.x.x",
    "@astrojs/db": "^0.19.0",
    "@astrojs/node": "^9.x.x",
    "@libsql/client": "^0.17.0",
    "drizzle-orm": "^0.45.1",
    "astro-consent": "^1.0.17",
    "@tailwindcss/vite": "^4.x.x",
    "tailwindcss": "^4.x.x"
  },
  "scripts": {
    "dev": "astro dev",
    "build": "astro build",
    "preview": "astro preview",
    "start": "node dist/server/entry.mjs"
  }
}

🔧 Workflow Improvements

1. Pre-Flight Checklist (MUST ask before starting)

## Critical Questions:

1. **Deployment Platform:**
   - Easypanel? (requires HOST=0.0.0.0)
   - Vercel/Netlify? (different adapter needed)
   - Docker only? (full Dockerfile)

2. **Database Requirements:**
   - Consent logging needed? (Astro DB)
   - Just static site? (no DB needed)
   - External DB? (Turso, PlanetScale, etc.)

3. **Analytics:**
   - Umami instance available? (get credentials)
   - Use Umami Cloud? (API key needed)
   - No analytics? (skip integration)

4. **Admin Dashboard:**
   - Need consent logs viewer? (create /admin routes)
   - Default password? (MUST change in production)

2. Build Process (MUST test before deploy)

## Testing Steps (MANDATORY BEFORE DEPLOY):

1. **Test Build Locally:**
   ```bash
   rm -rf dist data
   mkdir -p data
   ASTRO_DB_REMOTE_URL=file:./data/consent.db npx astro build --remote
  1. Test Server Locally:

    HOST=0.0.0.0 PORT=4321 node dist/server/entry.mjs &
    curl http://localhost:4321
    pkill -f entry.mjs
    
  2. Verify:

    • Build completes without errors
    • Server starts successfully
    • Homepage loads
    • API routes respond
    • Database initialized
    
    

3. Umami Integration (Automatic)

## Automated Workflow:

1. **Check for Umami credentials:**
   ```bash
   # Check global ~/.config/opencode/.env
   cat ~/.config/opencode/.env | grep UMAMI
  1. If credentials exist:

    # Auto-create website
    python3 skills/umami/scripts/umami_client.py \
      --action create-website \
      --website-name "{site-name}" \
      --website-domain "{domain}"
    
  2. Update configuration automatically:

    • .env file with UMAMI_WEBSITE_ID
    • Layout.astro with actual tracking script
    • No placeholder values
    
    

4. Error Handling & Troubleshooting

## Common Errors & Solutions:

### "Cannot find module '@astrojs/node'"
- **Cause:** Missing from production dependencies
- **Fix:** Add to package.json dependencies (not devDependencies)

### "Attempting to build without the --remote flag"
- **Cause:** Astro DB needs explicit connection
- **Fix:** Add `ASTRO_DB_REMOTE_URL=file:./data/consent.db` and `--remote` flag

### "Unable to open connection to local database"
- **Cause:** Data directory doesn't exist
- **Fix:** Run `mkdir -p ./data` before build

### "Blocked request. This host is not allowed"
- **Cause:** Server listening on localhost only
- **Fix:** Add `ENV HOST=0.0.0.0` to Dockerfile

### "Server listening on http://localhost:80" (in container)
- **Cause:** Wrong HOST environment
- **Fix:** Use `ENV HOST=0.0.0.0` not adapter config

📚 New Documentation Templates

PDPA-COMPLIANCE.md (Auto-generated)

# PDPA Compliance Checklist

## Privacy Policy Requirements (Section 36)
- [ ] Data Controller Information
- [ ] Types of Data Collected
- [ ] Purpose of Data Processing
- [ ] Legal Basis for Processing
- [ ] Data Retention Period
- [ ] Data Sharing & Disclosure
- [ ] Cross-border Transfers
- [ ] Automated Decision Making
- [ ] Cookies & Tracking Technologies
- [ ] Data Subject Rights (8 rights)
- [ ] Data Security Measures
- [ ] DPO Contact
- [ ] Right to Lodge Complaint
- [ ] Policy Version & Last Updated

## Cookie Consent Requirements
- [ ] Opt-in model (not pre-ticked)
- [ ] Granular choices
- [ ] Equal prominence for Accept/Reject
- [ ] Withdrawal mechanism
- [ ] Script blocking until consent
- [ ] Consent logging (10+ years)

## Admin Dashboard
- URL: `/admin/consent-logs`
- Default Password: `{password}` (⚠️ CHANGE THIS!)
- Features: View logs, delete records, export CSV

🎯 Skill Enhancement Priority

HIGH PRIORITY (Fix Immediately)

  1. Update Dockerfile template - Production server + env vars
  2. Add build testing step - Test locally before deploy
  3. Umami auto-integration - Use credentials from global .env
  4. Add Astro DB requirements - --remote flag, mkdir data

MEDIUM PRIORITY (Next Sprint)

  1. Error detection - Auto-detect common errors and suggest fixes
  2. Deployment verification - Automated post-deploy testing
  3. Environment variable validation - Check all required vars before build
  4. Rollback procedure - Document and automate rollback

LOW PRIORITY (Future Enhancement)

  1. 📋 Multi-platform support - Vercel, Netlify, Cloudflare adapters
  2. 📋 Database migration - Auto-migrate Astro DB schema changes
  3. 📋 Performance monitoring - Built-in uptime and error tracking
  4. 📋 SEO automation - Auto-generate sitemap, robots.txt, meta tags

📖 Learning Resources

Internal Documentation

  • /skills/website-creator/KNOWN-ISSUES.md - Common problems & solutions
  • /skills/website-creator/DEPLOYMENT-GUIDE.md - Platform-specific guides
  • /skills/website-creator/TESTING-CHECKLIST.md - Pre-deploy testing

External References


Implementation Status

Improvement Status Priority
Dockerfile production server Ready HIGH
HOST=0.0.0.0 environment variable Ready HIGH
Astro DB --remote flag Ready HIGH
npm install vs npm ci Ready HIGH
Local build testing Ready HIGH
Umami auto-integration Ready HIGH
Error detection 📝 Planned MEDIUM
Deployment verification 📝 Planned MEDIUM

Last Updated: March 9, 2026
Based On: moreminimore-redesign PDPA implementation
Next Review: After next 3 deployments