# Wild Dragon Site — Deployment Guide
## Quick Deploy to TrueNAS Docker
### 1. Copy project to Docker share
Copy this entire `wilddragon-site` folder to `\\10.0.0.25\Docker\wilddragon-site`
### 2. Build and run with Docker Compose
SSH into TrueNAS or use Portainer terminal:
```bash
cd /mnt/NVME/Docker/wilddragon-site
git pull
docker compose down
docker compose up -d --build
```
The site will be available at `http://10.0.0.25:43036`.
> Build can take ~120s on first build because of Next.js compile + image optimization.
### 3. Set up Nginx Proxy Manager — IMPORTANT FOR SEO
The canonical hostname is **`wilddragon.net`** (apex, no www). Configure NPM as follows:
**Proxy host 1 — Apex (serves the site):**
- Domain: `wilddragon.net`
- Forward to: `10.0.0.25:43036`
- SSL: Let's Encrypt
- Block Common Exploits: on
- Websockets Support: on
**Proxy host 2 — www (301 redirects to apex):**
- Domain: `www.wilddragon.net`
- SSL: Let's Encrypt (same cert)
- Use the **Custom locations / Advanced** tab and add:
```
return 301 https://wilddragon.net$request_uri;
```
The Next.js app also has a fallback `host=www.wilddragon.net` redirect baked into
`next.config.ts`, but doing it at the proxy is faster and cleaner.
### 4. Old-build cleanup — IMPORTANT FOR SEO
Until ~May 2026 the apex was serving an older Babel-in-browser React build
(separate `index.html`, broken nested `
` tag, `robots.txt` with literal
`\n` strings, `Disallow: /*.js$`). If any old static files are still in the
NPM webroot or any other Nginx location, **remove them** and ensure the only
upstream is the Next.js container at port 43036. After deploying:
```bash
# From TrueNAS, sanity-check that nothing else is serving wilddragon.net:
curl -sI https://wilddragon.net/ | grep -i server
curl -s https://wilddragon.net/robots.txt | head -5
curl -s https://wilddragon.net/sitemap.xml | head -3
```
`robots.txt` should be a few lines of plain text. `sitemap.xml` should be valid
XML with `` and one `` per project. If either still has literal
`\n` strings, the old build is still being served.
### 5. Search Console (post-deploy)
- Submit `https://wilddragon.net/sitemap.xml` in Google Search Console
- Submit the same in Bing Webmaster Tools
- Add the `verification.google` / `verification.other` values to
`src/app/layout.tsx` once you have the property verification tokens
- Use the URL Inspection tool to request indexing on `/`, `/services`, and the
project pages
## Adding Your Photos
### Leica BTS Photos
Drop your photos into `public/images/` with these names:
- `commanders-thumb.jpg` — Washington Commanders project
- `betmgm-thumb.jpg` — BetMGM project
- `cvs-thumb.jpg` — CVS/Aetna project
- `ubs-thumb.jpg` — UBS project
- `intuit-thumb.jpg` — Intuit XR project
Recommended: 1200x800px, optimized for web (under 500KB each).
### BMG Line Drawings
You can add line drawings to individual project pages by placing them in:
`public/images/drawings/` and updating the project detail page component.
## Editing Content
All project content lives in a single file:
`src/data/projects.ts`
To add a new project, copy an existing entry and modify the fields.
Then rebuild: `docker compose up -d --build`.
The sitemap and the homepage `Projects` grid pick up new entries automatically.
## Local Development
```bash
npm install
npm run dev
```
Site runs at http://localhost:43036