267 lines
5.7 KiB
Markdown
267 lines
5.7 KiB
Markdown
# Agent Instructions: Gadget Code Landing Site
|
|
|
|
You are working on the Gadget Code landing site—a static React/Vite application served at **https://g4dge7.com**.
|
|
|
|
---
|
|
|
|
## Project Overview
|
|
|
|
- **Framework**: React 19 with Vite 8
|
|
- **Styling**: Tailwind CSS 4
|
|
- **Language**: TypeScript 5.8
|
|
- **3D Graphics**: Three.js with @react-three/fiber
|
|
- **Build Output**: Static files in `site/dist/`
|
|
- **Production Host**: Ubuntu 24.04 DigitalOcean droplet at `g4dge7.com`
|
|
|
|
---
|
|
|
|
## Development Commands
|
|
|
|
```bash
|
|
cd site
|
|
|
|
pnpm dev # Start local dev server (Vite)
|
|
pnpm build # Type check + production build
|
|
pnpm preview # Preview production build locally
|
|
pnpm typecheck # TypeScript check only
|
|
```
|
|
|
|
---
|
|
|
|
## Deployment to Production
|
|
|
|
### Standard Deployment
|
|
|
|
Always follow this process after making changes:
|
|
|
|
```bash
|
|
# 1. Build
|
|
pnpm build
|
|
|
|
# 2. Verify build output exists
|
|
ls -la dist/
|
|
|
|
# 3. Deploy to production
|
|
rsync -avz --delete dist/ g4dge7.com:/var/www/g4dge7.com/
|
|
|
|
# 4. Fix ownership
|
|
ssh g4dge7.com "chown -R www-data:www-data /var/www/g4dge7.com"
|
|
|
|
# 5. Verify site loads
|
|
curl -sk https://g4dge7.com/ | head -5
|
|
```
|
|
|
|
### Quick Deploy (One-Liner)
|
|
|
|
```bash
|
|
pnpm build && rsync -avz --delete dist/ g4dge7.com:/var/www/g4dge7.com/ && ssh g4dge7.com "chown -R www-data:www-data /var/www/g4dge7.com"
|
|
```
|
|
|
|
### Post-Deployment Verification
|
|
|
|
After deploying, verify:
|
|
|
|
1. **Site loads**: Visit https://g4dge7.com in browser
|
|
2. **No console errors**: Check browser dev tools Console tab
|
|
3. **Assets load**: Check Network tab for 404s
|
|
4. **Git server unaffected**: Visit https://git.g4dge7.com (should still show Gitea)
|
|
|
|
---
|
|
|
|
## Production Environment Details
|
|
|
|
### Server Configuration
|
|
|
|
| Component | Value |
|
|
|-----------|-------|
|
|
| **Domain** | `g4dge7.com` |
|
|
| **Git Domain** | `git.g4dge7.com` |
|
|
| **Web Server** | Nginx |
|
|
| **SSL** | Let's Encrypt (auto-renewing) |
|
|
| **Deploy Path** | `/var/www/g4dge7.com` |
|
|
| **SSH User** | `root` |
|
|
| **SSH Host** | `g4dge7.com` or `157.230.50.250` |
|
|
|
|
### Nginx Configuration
|
|
|
|
The site is configured with:
|
|
- **HTTP → HTTPS redirect** (301)
|
|
- **SPA routing**: All routes serve `index.html` (client-side routing)
|
|
- **Gzip compression** enabled
|
|
- **Static asset caching**: 1 year for `.css`, `.js`, images, fonts
|
|
- **Security headers**: X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy
|
|
|
|
### File Locations
|
|
|
|
```
|
|
/var/www/g4dge7.com/ # Production site root
|
|
├── index.html # Entry point
|
|
├── favicon.png
|
|
├── icon.png
|
|
├── web-app.png
|
|
└── assets/ # Bundled JS/CSS
|
|
├── index-*.css
|
|
└── *.js
|
|
```
|
|
|
|
---
|
|
|
|
## Important Constraints
|
|
|
|
### DO NOT
|
|
|
|
- ❌ Do not modify Nginx configuration without explicit instruction
|
|
- ❌ Do not change the deploy path (`/var/www/g4dge7.com`)
|
|
- ❌ Do not modify SSL certificate configuration
|
|
- ❌ Do not deploy without testing the build locally first
|
|
- ❌ Do not use `--force` with rsync unless explicitly told to
|
|
- ❌ Do not modify the `git.g4dge7.com` Nginx config (that's Gitea)
|
|
|
|
### DO
|
|
|
|
- ✅ Always run `pnpm build` before deploying
|
|
- ✅ Always verify the build succeeds before deploying
|
|
- ✅ Always test locally with `pnpm preview` before deploying
|
|
- ✅ Always verify the site loads after deployment
|
|
- ✅ Check browser console for errors after deployment
|
|
- ✅ Use `--delete` flag with rsync to remove stale files
|
|
|
|
---
|
|
|
|
## Troubleshooting Guide
|
|
|
|
### Build Fails
|
|
|
|
```bash
|
|
# Check TypeScript errors
|
|
pnpm typecheck
|
|
|
|
# Check for missing dependencies
|
|
pnpm install
|
|
|
|
# Clear cache and rebuild
|
|
rm -rf dist node_modules/.vite
|
|
pnpm build
|
|
```
|
|
|
|
### Site Not Loading After Deploy
|
|
|
|
```bash
|
|
# Check if files were deployed
|
|
ssh g4dge7.com "ls -la /var/www/g4dge7.com/"
|
|
|
|
# Check Nginx status
|
|
ssh g4dge7.com "systemctl status nginx"
|
|
|
|
# Check Nginx config
|
|
ssh g4dge7.com "nginx -t"
|
|
|
|
# Check error logs
|
|
ssh g4dge7.com "tail -50 /var/log/nginx/error.log"
|
|
|
|
# Check file permissions
|
|
ssh g4dge7.com "ls -la /var/www/g4dge7.com/"
|
|
```
|
|
|
|
### Assets Returning 404
|
|
|
|
Usually means the build output changed filenames (hash-based) but old files weren't cleaned up:
|
|
|
|
```bash
|
|
# Re-deploy with --delete to remove stale files
|
|
rsync -avz --delete dist/ g4dge7.com:/var/www/g4dge7.com/
|
|
```
|
|
|
|
### Gitea Becomes Inaccessible
|
|
|
|
This means Nginx config was modified incorrectly. Restore from backup:
|
|
|
|
```bash
|
|
# Check git.g4dge7.com config is intact
|
|
ssh g4dge7.com "cat /etc/nginx/sites-available/git.g4dge7.com"
|
|
|
|
# Reload Nginx
|
|
ssh g4dge7.com "nginx -t && systemctl reload nginx"
|
|
```
|
|
|
|
---
|
|
|
|
## Git Workflow
|
|
|
|
This site is part of a monorepo. The production branch is `master`.
|
|
|
|
```bash
|
|
# Work on a feature branch
|
|
git checkout -b feature/your-feature
|
|
|
|
# Make changes, commit
|
|
git add .
|
|
git commit -m "feat: your changes"
|
|
|
|
# Test locally
|
|
pnpm build
|
|
pnpm preview
|
|
|
|
# Deploy to production (after review/approval)
|
|
git checkout master
|
|
git merge feature/your-feature
|
|
git push dtp master
|
|
|
|
# Then deploy the site
|
|
cd site
|
|
pnpm build
|
|
rsync -avz --delete dist/ g4dge7.com:/var/www/g4dge7.com/
|
|
```
|
|
|
|
---
|
|
|
|
## SSH Access
|
|
|
|
### Standard SSH
|
|
```bash
|
|
ssh root@g4dge7.com
|
|
```
|
|
|
|
### Direct IP (if DNS issues)
|
|
```bash
|
|
ssh root@157.230.50.250
|
|
```
|
|
|
|
### Git SSH (for repo access)
|
|
```bash
|
|
# Use IP directly (Cloudflare doesn't proxy SSH)
|
|
git@157.230.50.250:dtp/gadget.git
|
|
|
|
# Or configure SSH config (~/.ssh/config):
|
|
# Host g4dge7-git
|
|
# HostName 157.230.50.250
|
|
# User git
|
|
# IdentityFile ~/.ssh/id_ed25519
|
|
```
|
|
|
|
---
|
|
|
|
## Emergency Rollback
|
|
|
|
If a deployment breaks the site:
|
|
|
|
```bash
|
|
# 1. Revert code changes in monorepo
|
|
git revert HEAD
|
|
|
|
# 2. Rebuild
|
|
pnpm build
|
|
|
|
# 3. Re-deploy
|
|
rsync -avz --delete dist/ g4dge7.com:/var/www/g4dge7.com/
|
|
|
|
# 4. Verify
|
|
curl -sk https://g4dge7.com/ | head -5
|
|
```
|
|
|
|
---
|
|
|
|
## Contact
|
|
|
|
For production access or emergencies, contact the system administrator.
|