225 lines
5.1 KiB
Markdown
225 lines
5.1 KiB
Markdown
# Production Infrastructure
|
|
|
|
**Date:** December 21, 2025
|
|
**Purpose:** Document production deployment configuration and external services
|
|
**Status:** ✅ Live
|
|
**Related docs:** [12-the-current-tech-state.md](12-the-current-tech-state.md)
|
|
|
|
---
|
|
|
|
## 1. Production URLs
|
|
|
|
| URL | Purpose | Status |
|
|
|-----|---------|--------|
|
|
| https://banatie.app/ | Landing page | ✅ Live |
|
|
| https://www.banatie.app/ | Redirects to non-www | ✅ Configured |
|
|
| https://api.banatie.app/ | API service | ⏳ Not deployed |
|
|
| https://cdn.banatie.app/ | Image CDN | 🔮 Future |
|
|
|
|
**Canonical URL:** `https://banatie.app/` (non-www, with trailing slash)
|
|
|
|
---
|
|
|
|
## 2. Hosting Infrastructure
|
|
|
|
### VPS Provider
|
|
- **Provider:** Contabo
|
|
- **Location:** Singapore
|
|
- **Plan:** Minimum tier
|
|
- **Shared with:** Family Nextcloud, Gitea
|
|
|
|
### Server Stack
|
|
- **Reverse Proxy:** Caddy (auto SSL via Let's Encrypt)
|
|
- **Container Runtime:** Docker Compose
|
|
- **Landing App:** Next.js 15 (standalone output)
|
|
|
|
### Docker Services (Landing)
|
|
```
|
|
banatie-landing:
|
|
- Next.js standalone server
|
|
- Port: 3000 (internal)
|
|
- Volume: ./waitlist-logs (email collection)
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Domain & DNS
|
|
|
|
### Domain Registration
|
|
- **Registrar:** GoDaddy
|
|
- **Domain:** banatie.app
|
|
|
|
### DNS Management
|
|
- **Provider:** Cloudflare (migrated from GoDaddy)
|
|
- **Nameservers:** cosmin.ns.cloudflare.com, ursula.ns.cloudflare.com
|
|
|
|
### DNS Records
|
|
| Type | Name | Value | Proxy |
|
|
|------|------|-------|-------|
|
|
| A | banatie.app | [VPS IP] | ✅ Proxied |
|
|
| CNAME | www | banatie.app | ✅ Proxied |
|
|
| CNAME | api | banatie.app | ✅ Proxied |
|
|
| CNAME | cdn | banatie.app | ✅ Proxied |
|
|
| TXT | @ | google-site-verification=... | DNS only |
|
|
| TXT | _dmarc | v=DMARC1;... | DNS only |
|
|
|
|
---
|
|
|
|
## 4. Cloudflare Configuration
|
|
|
|
### SSL/TLS
|
|
- **Mode:** Full (strict)
|
|
- **Certificate:** Cloudflare Edge + Caddy (Let's Encrypt) on origin
|
|
|
|
### Cache Rules
|
|
**Rule: "Cache Next.js static"**
|
|
```
|
|
Match:
|
|
- URI Path starts with /_next/static
|
|
- URI Path ends with .png
|
|
- URI Path starts with /_next/image
|
|
|
|
Then:
|
|
- Browser TTL: 1 month
|
|
- Edge TTL: 1 month
|
|
- Cache Key: Include all query string parameters
|
|
```
|
|
|
|
### Redirect Rules
|
|
**Rule: "Add trailing slash"**
|
|
```
|
|
Match: http.request.full_uri eq "https://banatie.app"
|
|
Then: 301 redirect to https://banatie.app/
|
|
```
|
|
|
|
### AI Crawl Control
|
|
- **Managed robots.txt:** Disabled (self-managed)
|
|
- **AI bot access:** Allowed for all crawlers
|
|
|
|
---
|
|
|
|
## 5. SEO Configuration
|
|
|
|
### Meta Tags
|
|
- **Title:** AI Image Generation Inside Your Workflow | Banatie
|
|
- **Description:** Generate production-ready images via API, SDK, CLI, or live URLs...
|
|
- **Keywords:** API-first image generation, AI image API, image generation for developers...
|
|
- **Author:** Banatie
|
|
- **Robots:** index, follow
|
|
|
|
### Open Graph
|
|
- **og:url:** https://banatie.app/
|
|
- **og:image:** https://banatie.app/og-image.png
|
|
- **og:type:** website
|
|
- **og:locale:** en_US
|
|
|
|
### Technical SEO
|
|
- **Canonical:** `<link rel="canonical" href="https://banatie.app/"/>`
|
|
- **Alternate hreflang:** en (self-referencing)
|
|
- **robots.txt:** /robots.txt (self-managed)
|
|
- **Sitemap:** https://banatie.app/sitemap.xml
|
|
|
|
### Google Search Console
|
|
- **Status:** ✅ Verified (TXT record)
|
|
- **Indexed pages:** 1 (banatie.app/)
|
|
- **Last crawl:** December 19, 2025
|
|
|
|
---
|
|
|
|
## 6. Analytics
|
|
|
|
### Umami Analytics
|
|
- **Plan:** Cloud (free tier)
|
|
- **Dashboard:** cloud.umami.is
|
|
- **Website ID:** 5af6a122-ca2e-4a48-9bfd-9cfd4d7b5174
|
|
- **Future:** Self-hosted planned
|
|
|
|
---
|
|
|
|
## 7. Performance
|
|
|
|
### PageSpeed Scores (December 19, 2025)
|
|
| Metric | Mobile | Desktop |
|
|
|--------|--------|---------|
|
|
| Performance | 95 | 99 |
|
|
| Accessibility | 100 | 100 |
|
|
| Best Practices | 100 | 100 |
|
|
| SEO | 100 | 100 |
|
|
|
|
### Core Web Vitals (Mobile)
|
|
- **FCP:** 1.7s
|
|
- **LCP:** 2.9s
|
|
- **TBT:** 10ms
|
|
- **CLS:** 0
|
|
|
|
### Image Optimization
|
|
- **Optimizer:** Next.js built-in
|
|
- **Formats:** AVIF (primary), WebP (fallback)
|
|
- **Logo size:** 376KB → 7.5KB (50x reduction)
|
|
|
|
---
|
|
|
|
## 8. Email Collection
|
|
|
|
### Current Implementation
|
|
- **Storage:** File-based (volume on VPS)
|
|
- **Location:** ./waitlist-logs/
|
|
- **Format:** JSON files per submission
|
|
- **Email sending:** Not implemented
|
|
|
|
### Data Captured
|
|
- Email address
|
|
- Selected options from popup
|
|
- Timestamp
|
|
|
|
### Future Plans
|
|
- Email service integration (TBD)
|
|
- Welcome email automation
|
|
- Newsletter setup
|
|
|
|
---
|
|
|
|
## 9. Next.js Configuration
|
|
|
|
```typescript
|
|
// next.config.ts
|
|
const nextConfig: NextConfig = {
|
|
output: 'standalone',
|
|
trailingSlash: true,
|
|
images: {
|
|
formats: ['image/avif', 'image/webp'],
|
|
},
|
|
eslint: {
|
|
ignoreDuringBuilds: true,
|
|
},
|
|
};
|
|
```
|
|
|
|
---
|
|
|
|
## 10. Deployment Checklist
|
|
|
|
### Completed ✅
|
|
- [x] Landing page deployed (~December 15, 2025)
|
|
- [x] Domain connected via Cloudflare
|
|
- [x] SSL configured (Full strict)
|
|
- [x] Google Search Console verified
|
|
- [x] Umami analytics connected
|
|
- [x] Meta tags and OG image configured
|
|
- [x] Cache rules for static assets
|
|
- [x] Trailing slash redirect
|
|
- [x] Image optimization (AVIF)
|
|
- [x] PageSpeed 95+ mobile
|
|
|
|
### Pending ⏳
|
|
- [ ] API service deployment
|
|
- [ ] CDN service setup (Imageflow + MinIO)
|
|
- [ ] Email service integration
|
|
- [ ] Self-hosted Umami migration
|
|
|
|
---
|
|
|
|
**Document Owner:** Oleg
|
|
**Last Updated:** December 21, 2025
|
|
**Next Review:** After API deployment
|