From e74c048f461a9eaf85666047ba894293a0befa0e Mon Sep 17 00:00:00 2001 From: Desktop Date: Fri, 14 Nov 2025 01:16:08 +0500 Subject: [PATCH] Site design updates --- DASHBOARD_REDESIGN_PLAN.md | 73 ------ HELP_PAGE_RECOMMENDATION.md | 78 ------ docs/DEPLOYMENT_ARCHITECTURE.md | 194 --------------- docs/DEPLOYMENT_STATUS.md | 113 --------- docs/MARKETING_CONFIG_ANALYSIS.md | 236 ------------------ docs/MARKETING_DEPLOYMENT.md | 210 ---------------- docs/MARKETING_DEV_ENVIRONMENT.md | 160 ------------- frontend/src/marketing/pages/CaseStudies.tsx | 128 +++++----- frontend/src/marketing/pages/Contact.tsx | 56 +++-- frontend/src/marketing/pages/Partners.tsx | 84 ++++--- frontend/src/marketing/pages/Pricing.tsx | 38 +-- frontend/src/marketing/pages/Product.tsx | 102 ++++---- frontend/src/marketing/pages/Resources.tsx | 90 ++++--- frontend/src/marketing/pages/Solutions.tsx | 118 +++++---- frontend/src/marketing/pages/Tour.tsx | 74 +++--- frontend/src/marketing/pages/Waitlist.tsx | 56 +++-- prompts.txt | 237 ------------------- 17 files changed, 429 insertions(+), 1618 deletions(-) delete mode 100644 DASHBOARD_REDESIGN_PLAN.md delete mode 100644 HELP_PAGE_RECOMMENDATION.md delete mode 100644 docs/DEPLOYMENT_ARCHITECTURE.md delete mode 100644 docs/DEPLOYMENT_STATUS.md delete mode 100644 docs/MARKETING_CONFIG_ANALYSIS.md delete mode 100644 docs/MARKETING_DEPLOYMENT.md delete mode 100644 docs/MARKETING_DEV_ENVIRONMENT.md delete mode 100644 prompts.txt diff --git a/DASHBOARD_REDESIGN_PLAN.md b/DASHBOARD_REDESIGN_PLAN.md deleted file mode 100644 index 3070e643..00000000 --- a/DASHBOARD_REDESIGN_PLAN.md +++ /dev/null @@ -1,73 +0,0 @@ -# Dashboard Redesign Plan - -## Overview -Transform the main Dashboard into a comprehensive, marketing-focused page that serves as the "face" of the application. - -## Structure - -### 1. Hero Section (Marketing-Focused) -- **Purpose**: Explain what IGNY8 is and how it works -- **Content**: - - Compelling headline: "AI-Powered Content Creation Workflow" - - Brief description of the system - - Visual workflow diagram (simplified) - - Key value propositions - -### 2. App-Wide Insights -- **Purpose**: Show aggregated metrics across the entire application -- **Metrics** (NOT duplicating planner/writer dashboards): - - Total Keywords across all sites - - Total Content Pieces created - - Total Images generated - - Overall workflow completion rate - - Recent activity feed - - System health indicators - -### 3. Workflow Explainer (5-7 Steps) -- **Visual Steps**: - 1. **Discover Keywords** → Find high-volume keywords from global database - 2. **Cluster Keywords** → Group related keywords into clusters - 3. **Generate Ideas** → AI creates content ideas from clusters - 4. **Create Tasks** → Convert ideas into actionable writing tasks - 5. **Write Content** → AI generates full content pieces - 6. **Generate Images** → Create featured and in-article images - 7. **Publish** → Content ready for publication - -- **Design**: Interactive step-by-step visual with icons and brief descriptions -- **Action**: Each step can link to relevant page - -### 4. Automation Setup -- **Purpose**: Configure automation settings -- **Sections**: - - **Keywords Automation**: - - How many keywords to take per cycle - - Auto-cluster enabled/disabled - - Cluster settings (max keywords per cluster) - - - **Ideas Automation**: - - Auto-generate ideas from clusters - - Ideas per cluster limit - - - **Content Automation**: - - Auto-create tasks from ideas - - Auto-generate content from tasks - - - **Image Automation**: - - Auto-generate images for content - - Image generation settings - -- **Note**: These are placeholders/settings that will link to Schedules page or have inline configuration - -## Design Principles -- **Marketing-Focused**: Should be impressive enough for marketing screenshots -- **Clear & Simple**: Easy to understand the system at a glance -- **Actionable**: Quick access to key actions -- **Visual**: Heavy use of icons, colors, and visual elements -- **Responsive**: Works on all screen sizes - -## Implementation Notes -- Use existing components where possible (EnhancedMetricCard, WorkflowPipeline, etc.) -- Create new components for workflow explainer -- Automation section can be expandable/collapsible cards -- Consider adding "Quick Actions" section for one-click workflows - diff --git a/HELP_PAGE_RECOMMENDATION.md b/HELP_PAGE_RECOMMENDATION.md deleted file mode 100644 index 252db196..00000000 --- a/HELP_PAGE_RECOMMENDATION.md +++ /dev/null @@ -1,78 +0,0 @@ -# Help & Documentation Page Recommendation - -## Decision: **ONE COMBINED PAGE** - -### Analysis - -**Current Structure:** -- `/help` - Help & Support (placeholder) -- `/help/docs` - Documentation (placeholder) -- Both shown as separate menu items in sidebar - -**Documentation Available:** -- `/docs` folder with comprehensive technical documentation -- 6 main documentation files covering architecture, frontend, backend, AI functions -- Well-organized markdown structure - -**Recommendation: Single Combined Page** - -### Reasons: - -1. **User Experience** - - Users don't need to decide between "Help" and "Documentation" - - All information in one place - - Better discoverability - -2. **Content Overlap** - - Help content often references documentation - - Documentation includes help content - - No clear boundary between the two - -3. **Modern Pattern** - - Most modern apps combine them (GitHub, Stripe, Vercel, etc.) - - Single entry point is cleaner - - Better for SEO and navigation - -4. **WordPress Plugin Pattern** - - Uses subpages (`?sp=help`, `?sp=docs`) - - Suggests they're meant to be together - - Can maintain consistency - -5. **Content Size** - - Documentation isn't so large it needs separation - - Can be organized with tabs/sections - -### Proposed Structure: - -**Single `/help` page with sections:** - -1. **Getting Started** (Tab/Section) - - Quick start guide - - Common workflows - - Video tutorials - - Setup instructions - -2. **Documentation** (Tab/Section) - - Architecture & Tech Stack - - Frontend Documentation - - Backend Documentation - - AI Functions - - API Reference - -3. **FAQ & Troubleshooting** (Tab/Section) - - Common questions - - Troubleshooting guides - - Known issues - -4. **Support** (Tab/Section) - - Contact support - - Community resources - - Feature requests - -### Implementation: - -- Use tabs or sidebar navigation within the page -- Smooth transitions between sections -- Search functionality across all content -- Mobile-responsive design - diff --git a/docs/DEPLOYMENT_ARCHITECTURE.md b/docs/DEPLOYMENT_ARCHITECTURE.md deleted file mode 100644 index 42cd365b..00000000 --- a/docs/DEPLOYMENT_ARCHITECTURE.md +++ /dev/null @@ -1,194 +0,0 @@ -# Deployment Architecture Analysis - -## Current Setup - -### Domain Routing -- **`app.igny8.com`** → Vite dev server container (`igny8_frontend:5173`) - - Live reload enabled - - Development mode - - Changes reflect immediately - -- **`igny8.com`** → Static files from `/var/www/igny8-marketing` - - Production marketing site - - Requires manual build + copy to update - - No containerization - -### Current Issues -1. ❌ Marketing site deployment is manual (not containerized) -2. ❌ No automated deployment process -3. ❌ Dev changes affect `app.igny8.com` but not `igny8.com` (confusing) -4. ⚠️ Marketing site not versioned with codebase - ---- - -## Option Comparison - -### Option A: Separate Containers (Recommended ✅) - -**Structure:** -``` -igny8_frontend_dev → app.igny8.com (Vite dev server) -igny8_frontend_prod → app.igny8.com (Production build, optional) -igny8_marketing → igny8.com (Marketing static site) -``` - -**Pros:** -- ✅ Clear separation of concerns -- ✅ Independent scaling and updates -- ✅ Marketing site can be updated without affecting app -- ✅ Production app can be containerized separately -- ✅ Better security isolation -- ✅ Easier CI/CD automation -- ✅ Version control for marketing deployments - -**Cons:** -- ⚠️ Slightly more complex docker-compose setup -- ⚠️ Need to manage 2-3 containers instead of 1 - -**Implementation:** -```yaml -services: - igny8_frontend_dev: - # Current dev server for app.igny8.com - image: igny8-frontend-dev:latest - ports: ["8021:5173"] - - igny8_marketing: - # Production marketing site for igny8.com - image: igny8-marketing:latest - build: - context: ./frontend - dockerfile: Dockerfile.marketing - volumes: - - marketing_static:/usr/share/caddy:ro -``` - ---- - -### Option B: Current Approach (Keep Manual) - -**Structure:** -``` -igny8_frontend_dev → app.igny8.com (Vite dev server) -/var/www/igny8-marketing → igny8.com (Manual static files) -``` - -**Pros:** -- ✅ Simple (already working) -- ✅ No additional containers -- ✅ Fast static file serving - -**Cons:** -- ❌ Manual deployment process -- ❌ No version control for marketing site -- ❌ Hard to rollback -- ❌ Not containerized (harder to manage) -- ❌ Deployment not reproducible - ---- - -### Option C: Unified Production Build - -**Structure:** -``` -Single container serves both app and marketing from same build -``` - -**Pros:** -- ✅ Single container to manage -- ✅ Both sites from same codebase - -**Cons:** -- ❌ Can't update marketing without rebuilding app -- ❌ Larger container size -- ❌ Less flexible deployment -- ❌ Dev server still separate anyway - ---- - -## Recommendation: **Option A - Separate Containers** - -### Why This Is Better: - -1. **Production-Ready App Container** - - Can deploy production build of app to `app.igny8.com` when needed - - Dev container for development, prod container for production - -2. **Containerized Marketing Site** - - Marketing site becomes a proper container - - Easy to update: rebuild image, restart container - - Version controlled deployments - - Rollback capability - -3. **Clear Separation** - - Dev environment: `igny8_frontend_dev` → `app.igny8.com` - - Production app: `igny8_frontend_prod` → `app.igny8.com` (when ready) - - Marketing site: `igny8_marketing` → `igny8.com` - -4. **Better CI/CD** - - Can deploy marketing site independently - - Can deploy app independently - - Automated builds and deployments - -5. **Scalability** - - Each service can scale independently - - Better resource management - ---- - -## Implementation Plan - -### Step 1: Create Marketing Dockerfile -```dockerfile -# frontend/Dockerfile.marketing -FROM node:18-alpine AS builder -WORKDIR /app -COPY . . -RUN npm install -RUN npm run build:marketing - -FROM caddy:latest -COPY --from=builder /app/dist /usr/share/caddy -COPY Caddyfile.marketing /etc/caddy/Caddyfile -EXPOSE 8020 -CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile"] -``` - -### Step 2: Create Marketing Caddyfile -```caddyfile -# frontend/Caddyfile.marketing -:8020 { - root * /usr/share/caddy - try_files {path} /marketing.html - file_server -} -``` - -### Step 3: Update docker-compose.app.yml -Add marketing service alongside frontend dev service. - -### Step 4: Update Main Caddyfile -Point `igny8.com` to `igny8_marketing:8020` instead of static files. - ---- - -## Migration Path - -1. **Phase 1**: Add marketing container (keep current setup working) -2. **Phase 2**: Test marketing container on staging domain -3. **Phase 3**: Switch `igny8.com` to use container -4. **Phase 4**: Remove manual `/var/www/igny8-marketing` setup - ---- - -## Conclusion - -**Separate containers (Option A) is the best long-term solution** because: -- ✅ Production-ready architecture -- ✅ Better DevOps practices -- ✅ Easier maintenance -- ✅ Scalable and flexible -- ✅ Industry standard approach - -The current setup works but is not ideal for production. Separate containers provide better separation, versioning, and deployment automation. - diff --git a/docs/DEPLOYMENT_STATUS.md b/docs/DEPLOYMENT_STATUS.md deleted file mode 100644 index 7ca95ddb..00000000 --- a/docs/DEPLOYMENT_STATUS.md +++ /dev/null @@ -1,113 +0,0 @@ -# Deployment Status - Marketing Container - -**Last Updated:** 2025-11-13 -**Status:** ✅ **OPERATIONAL** - ---- - -## Current Status - -### Containers -- ✅ `igny8_marketing` - Running (Port 8020 internal, 8022 external) -- ✅ `igny8_caddy` - Running (Routes `igny8.com` → `igny8_marketing:8020`) -- ✅ `igny8_frontend` - Running (Vite dev server for `app.igny8.com`) -- ✅ `igny8_backend` - Running (Django API for `api.igny8.com`) - -### Network -- ✅ All containers on `igny8_net` network -- ✅ Caddy can reach marketing container -- ✅ Marketing container serving on port 8020 - -### HTTP Status -- ✅ Marketing container: HTTP 200 (direct access) -- ✅ Through Caddy: HTTP 200 (production routing) - ---- - -## Deployment Process Verified - -The automated deployment process has been tested and is working: - -```bash -# 1. Build marketing image -cd /data/app/igny8/frontend -docker build -t igny8-marketing:latest -f Dockerfile.marketing . - -# 2. Restart container -cd /data/app/igny8 -docker compose -f docker-compose.app.yml -p igny8-app restart igny8_marketing -``` - -**Result:** ✅ Container restarts with new build, site updates immediately. - ---- - -## Architecture - -``` -Internet - ↓ -Caddy (HTTPS:443) - ↓ -igny8.com → igny8_marketing:8020 (Container) -app.igny8.com → igny8_frontend:5173 (Vite Dev) -api.igny8.com → igny8_backend:8010 (Django) -``` - ---- - -## Quick Commands - -### Check Status -```bash -docker ps --filter "name=igny8_marketing" -docker logs igny8_marketing --tail 20 -``` - -### Update Marketing Site -```bash -cd /data/app/igny8/frontend -docker build -t igny8-marketing:latest -f Dockerfile.marketing . -cd /data/app/igny8 -docker compose -f docker-compose.app.yml -p igny8-app restart igny8_marketing -``` - -### Test Connectivity -```bash -# Direct container access -curl http://localhost:8022/marketing.html - -# Through Caddy (production) -curl https://igny8.com/marketing.html -``` - ---- - -## Migration Complete - -✅ **Old manual process is deprecated** -✅ **New containerized process is active** -✅ **Site is fully operational** - -The marketing site is now: -- Containerized -- Version controlled (Docker images) -- Automatically deployed -- Easy to rollback -- Production-ready - ---- - -## Next Steps (Optional) - -1. **Set up CI/CD** - Automate builds on git push -2. **Add health checks** - Monitor container health -3. **Set up monitoring** - Track container metrics -4. **Create backup strategy** - Tag images before updates - ---- - -**See Also:** -- [Marketing Deployment Guide](./MARKETING_DEPLOYMENT.md) -- [Deployment Architecture](./DEPLOYMENT_ARCHITECTURE.md) - diff --git a/docs/MARKETING_CONFIG_ANALYSIS.md b/docs/MARKETING_CONFIG_ANALYSIS.md deleted file mode 100644 index 07698e4c..00000000 --- a/docs/MARKETING_CONFIG_ANALYSIS.md +++ /dev/null @@ -1,236 +0,0 @@ -# Marketing Dev Frontend Configuration Analysis - -**Date:** 2025-01-XX -**Status:** ✅ **FIXED** - All issues resolved - ---- - -## Executive Summary - -Analysis of the marketing dev frontend container and configuration reveals: -- ✅ **Architecture Consistency**: Follows existing architecture (separate containers) -- ✅ **No Parallel Builds**: Uses `image:` not `build:` to avoid conflicts -- ✅ **Caddy Routing**: Correctly configured for dev mode -- ✅ **Network Configuration**: All containers on `igny8_net` network -- ⚠️ **FIXED**: Port mismatch in production marketing container - ---- - -## Configuration Analysis - -### 1. Container Configuration ✅ - -#### `igny8_marketing_dev` (Development) -- **Image**: `igny8-marketing-dev:latest` -- **Ports**: `8023:5174` (external:internal) -- **Volume Mount**: `/data/app/igny8/frontend:/app:rw` (live reload) -- **Network**: `igny8_net` -- **Status**: ✅ Correctly configured - -#### `igny8_marketing` (Production) -- **Image**: `igny8-marketing:latest` -- **Ports**: `8022:8020` (external:internal) - **FIXED** -- **Network**: `igny8_net` -- **Status**: ✅ Fixed - now matches Dockerfile.marketing (port 8020) - -### 2. Dockerfile Configuration ✅ - -#### Dockerfile.marketing.dev -- **Base**: `node:18-alpine` -- **Port**: `5174` (Vite dev server) -- **Command**: `npm run dev:marketing` -- **Status**: ✅ Correct - -#### Dockerfile.marketing -- **Base**: `caddy:latest` (multi-stage build) -- **Port**: `8020` (Caddy server) -- **Command**: `caddy run --config /etc/caddy/Caddyfile` -- **Status**: ✅ Correct - -### 3. Caddy Routing Configuration ✅ - -**Main Caddyfile Location**: `/var/lib/docker/volumes/portainer_data/_data/caddy/Caddyfile` - -**Current Configuration (Dev Mode)**: -```caddyfile -igny8.com { - reverse_proxy igny8_marketing_dev:5174 { - # WebSocket support for HMR - header_up Connection {>Connection} - header_up Upgrade {>Upgrade} - } -} -``` - -**Status**: ✅ Correctly routing to dev container with HMR support - -**Production Mode** (when switching): -```caddyfile -igny8.com { - reverse_proxy igny8_marketing:8020 { - # Static production build - } -} -``` - -### 4. Package.json Scripts ✅ - -- `dev:marketing`: `vite --host 0.0.0.0 --port 5174 --force marketing.html` ✅ -- `build:marketing`: `vite build --mode marketing` ✅ - -**Status**: ✅ All scripts correctly configured - -### 5. Network Architecture ✅ - -All containers are on the `igny8_net` external network: -- ✅ `igny8_marketing_dev` → `igny8_net` -- ✅ `igny8_marketing` → `igny8_net` -- ✅ `igny8_frontend` → `igny8_net` -- ✅ `igny8_backend` → `igny8_net` -- ✅ `igny8_caddy` → `igny8_net` - -**Status**: ✅ All containers can communicate via container names - ---- - -## Issues Found & Fixed - -### Issue 1: Port Mismatch in Production Container ⚠️ → ✅ FIXED - -**Problem**: -- `docker-compose.app.yml` mapped `8022:5174` for `igny8_marketing` -- But `Dockerfile.marketing` exposes port `8020` (Caddy) -- This would cause connection failures when Caddy routes to production - -**Fix Applied**: -```yaml -# Before -ports: - - "0.0.0.0:8022:5174" # WRONG - -# After -ports: - - "0.0.0.0:8022:8020" # CORRECT - matches Caddy port -``` - -**Status**: ✅ Fixed in `docker-compose.app.yml` - ---- - -## Architecture Consistency Check - -### ✅ Follows Existing Architecture - -1. **Separate Containers**: ✅ - - Dev and production containers are separate - - Matches architecture principle (Option A from DEPLOYMENT_ARCHITECTURE.md) - -2. **No Parallel Builds**: ✅ - - Uses `image:` not `build:` in docker-compose - - Prevents Portainer/CLI conflicts - - Images built separately as documented - -3. **Network Isolation**: ✅ - - All containers on `igny8_net` - - External network (shared with infra stack) - - Container name resolution works - -4. **Port Allocation**: ✅ - - `8021`: Frontend dev (app) - - `8022`: Marketing production - - `8023`: Marketing dev - - No conflicts - -5. **Volume Mounts**: ✅ - - Dev container has volume mount for HMR - - Production container is stateless (built image) - ---- - -## Accessibility Verification - -### ✅ All Services Accessible - -1. **Direct Access**: - - Marketing Dev: `http://localhost:8023` ✅ - - Marketing Prod: `http://localhost:8022` ✅ - - Frontend Dev: `http://localhost:8021` ✅ - -2. **Through Caddy (HTTPS)**: - - `https://igny8.com` → `igny8_marketing_dev:5174` (dev mode) ✅ - - `https://app.igny8.com` → `igny8_frontend:5173` ✅ - - `https://api.igny8.com` → `igny8_backend:8010` ✅ - -3. **WebSocket Support**: - - Caddy configured with WebSocket headers for HMR ✅ - - Dev container supports HMR ✅ - ---- - -## Gaps & Parallel Builds Check - -### ✅ No Gaps Found - -1. **Container Definitions**: All containers defined in `docker-compose.app.yml` -2. **Dockerfiles**: All Dockerfiles exist and are correct -3. **Caddyfile**: Routing configured correctly -4. **Scripts**: All npm scripts exist in package.json -5. **Network**: All containers on same network - -### ✅ No Parallel Builds - -1. **docker-compose.app.yml**: Uses `image:` not `build:` ✅ -2. **Build Instructions**: Clear documentation to build separately ✅ -3. **No Conflicts**: Portainer and CLI can use same compose file ✅ - ---- - -## Summary - -### ✅ Configuration Status - -| Component | Status | Notes | -|-----------|--------|-------| -| **Container Config** | ✅ Fixed | Port mismatch corrected | -| **Dockerfiles** | ✅ Correct | All ports match | -| **Caddy Routing** | ✅ Correct | Dev mode active | -| **Network** | ✅ Correct | All on `igny8_net` | -| **Scripts** | ✅ Correct | All npm scripts exist | -| **Architecture** | ✅ Consistent | Follows existing patterns | -| **Accessibility** | ✅ Accessible | All services reachable | -| **No Gaps** | ✅ Complete | All components present | -| **No Parallel Builds** | ✅ Clean | Uses `image:` not `build:` | - -### ✅ All Issues Resolved - -1. ✅ Port mismatch fixed in `docker-compose.app.yml` -2. ✅ Configuration consistent with architecture -3. ✅ All services accessible -4. ✅ No gaps or parallel builds - ---- - -## Recommendations - -### Current Setup (Dev Mode) -- ✅ Marketing dev container is active and accessible -- ✅ HMR working through Caddy -- ✅ All routing correct - -### For Production Deployment -1. Build production image: `docker build -t igny8-marketing:latest -f Dockerfile.marketing .` -2. Update Caddyfile to route to `igny8_marketing:8020` -3. Restart Caddy: `docker compose restart caddy` - ---- - -## Conclusion - -The marketing dev frontend container and configuration are: -- ✅ **Consistent** with existing architecture -- ✅ **Fully configured** and accessible -- ✅ **No gaps** or missing components -- ✅ **No parallel builds** - clean configuration - -**All issues have been identified and fixed. The system is ready for use.** - diff --git a/docs/MARKETING_DEPLOYMENT.md b/docs/MARKETING_DEPLOYMENT.md deleted file mode 100644 index 8c456295..00000000 --- a/docs/MARKETING_DEPLOYMENT.md +++ /dev/null @@ -1,210 +0,0 @@ -# Marketing Site Container Deployment Guide - -## ✅ Implementation Complete - -The marketing site is now containerized and running! This document explains the new setup and how to use it. - ---- - -## 🏗️ Architecture - -### Before (Manual) -- Marketing files in `/var/www/igny8-marketing/` -- Manual build → copy → restart process -- No version control for deployments - -### After (Containerized) ✅ -- Marketing site runs in `igny8_marketing` container -- Automated builds and deployments -- Version controlled with Docker images -- Easy rollback capability - ---- - -## 📦 New Components - -### 1. Dockerfile.marketing -**Location:** `/data/app/igny8/frontend/Dockerfile.marketing` - -Builds the marketing site and serves it with Caddy. - -### 2. Caddyfile.marketing -**Location:** `/data/app/igny8/frontend/Caddyfile.marketing` - -Caddy configuration for the marketing container (port 8020). - -### 3. igny8_marketing Service -**Location:** `docker-compose.app.yml` - -New container service for the marketing site. - -### 4. Updated Main Caddyfile -**Location:** `/var/lib/docker/volumes/portainer_data/_data/caddy/Caddyfile` - -Now routes `igny8.com` to `igny8_marketing:8020` container instead of static files. - ---- - -## 🚀 Deployment Process - -### Initial Setup (One-time) - -1. **Build the marketing image:** - ```bash - cd /data/app/igny8/frontend - docker build -t igny8-marketing:latest -f Dockerfile.marketing . - ``` - -2. **Start the marketing container:** - ```bash - cd /data/app/igny8 - docker compose -f docker-compose.app.yml -p igny8-app up -d igny8_marketing - ``` - -3. **Reload Caddy:** - ```bash - cd /data/app - docker compose restart caddy - ``` - -### Updating Marketing Site - -**New Process (Automated):** -```bash -# 1. Rebuild the marketing image -cd /data/app/igny8/frontend -docker build -t igny8-marketing:latest -f Dockerfile.marketing . - -# 2. Restart the container (picks up new image) -cd /data/app/igny8 -docker compose -f docker-compose.app.yml -p igny8-app restart igny8_marketing -``` - -**Old Process (Manual - No Longer Needed):** -```bash -# ❌ OLD WAY - Don't use anymore -npm run build:marketing -sudo cp -r dist/* /var/www/igny8-marketing/ -docker compose restart caddy -``` - ---- - -## 🔄 Rollback Process - -If you need to rollback to a previous version: - -```bash -# 1. Tag the current image as backup -docker tag igny8-marketing:latest igny8-marketing:backup-$(date +%Y%m%d) - -# 2. Tag a previous image as latest (if you have it) -docker tag igny8-marketing:previous-version igny8-marketing:latest - -# 3. Restart container -docker compose -f docker-compose.app.yml -p igny8-app restart igny8_marketing -``` - ---- - -## 📊 Container Status - -### Check Marketing Container -```bash -docker ps --filter "name=igny8_marketing" -``` - -### View Marketing Logs -```bash -docker logs igny8_marketing -docker logs igny8_marketing --tail 50 -f # Follow logs -``` - -### Test Marketing Site -```bash -# Test direct container access -curl http://localhost:8022/marketing.html - -# Test through Caddy (production) -curl https://igny8.com/marketing.html -``` - ---- - -## 🔍 Troubleshooting - -### Container Not Starting -```bash -# Check logs -docker logs igny8_marketing - -# Check if image exists -docker images | grep igny8-marketing - -# Rebuild if needed -cd /data/app/igny8/frontend -docker build -t igny8-marketing:latest -f Dockerfile.marketing . -``` - -### Caddy Not Routing Correctly -```bash -# Check Caddy logs -docker logs igny8_caddy - -# Verify Caddyfile -cat /var/lib/docker/volumes/portainer_data/_data/caddy/Caddyfile - -# Reload Caddy -cd /data/app -docker compose restart caddy -``` - -### Network Issues -```bash -# Verify containers are on same network -docker network inspect igny8_net | grep -A 5 igny8_marketing -docker network inspect igny8_net | grep -A 5 igny8_caddy -``` - ---- - -## 📝 File Locations - -| Component | Location | -|-----------|----------| -| Dockerfile.marketing | `/data/app/igny8/frontend/Dockerfile.marketing` | -| Caddyfile.marketing | `/data/app/igny8/frontend/Caddyfile.marketing` | -| docker-compose.app.yml | `/data/app/igny8/docker-compose.app.yml` | -| Main Caddyfile | `/var/lib/docker/volumes/portainer_data/_data/caddy/Caddyfile` | -| Marketing Image | Docker: `igny8-marketing:latest` | -| Container Name | `igny8_marketing` | -| Container Port | `8020` (internal), `8022` (external) | - ---- - -## ✅ Benefits - -1. **Automated Deployments** - No more manual file copying -2. **Version Control** - Each deployment is a Docker image -3. **Easy Rollback** - Quick container image rollback -4. **Isolation** - Marketing site isolated in its own container -5. **Reproducible** - Same build process every time -6. **CI/CD Ready** - Can be fully automated - ---- - -## 🎯 Current Status - -✅ Marketing container is **running** -✅ Caddy routing is **configured** -✅ Site is **accessible** at `https://igny8.com` -✅ Direct container access at `http://localhost:8022` - ---- - -## 📚 Related Documentation - -- [Deployment Architecture Analysis](./DEPLOYMENT_ARCHITECTURE.md) -- Docker Compose: `/data/app/igny8/docker-compose.app.yml` -- Main Caddyfile: `/var/lib/docker/volumes/portainer_data/_data/caddy/Caddyfile` - diff --git a/docs/MARKETING_DEV_ENVIRONMENT.md b/docs/MARKETING_DEV_ENVIRONMENT.md deleted file mode 100644 index 25aee743..00000000 --- a/docs/MARKETING_DEV_ENVIRONMENT.md +++ /dev/null @@ -1,160 +0,0 @@ -# Marketing Development Environment with HMR - -**Status:** ✅ **ACTIVE** - -The marketing site now has a development environment with Hot Module Replacement (HMR) - just like the app dev environment! - ---- - -## 🚀 Quick Start - -### Current Setup -- **Dev Server:** `igny8_marketing_dev` (Vite with HMR) -- **Access:** `https://igny8.com` (routed through Caddy) -- **Direct Access:** `http://localhost:8023` -- **Port:** 5174 (internal), 8023 (external) - -### How It Works -1. **Volume Mount:** `/data/app/igny8/frontend` → `/app` (live file watching) -2. **HMR Enabled:** Changes to files/images update in real-time -3. **No Rebuild Needed:** Just edit files and see changes instantly! - ---- - -## 📝 Development Workflow - -### Making Changes -1. **Edit files** in `/data/app/igny8/frontend/src/marketing/` -2. **Edit images** in `/data/app/igny8/frontend/public/marketing/images/` -3. **See changes instantly** - HMR updates the browser automatically! - -### No Need To: -- ❌ Run `npm run build:marketing` -- ❌ Rebuild Docker image -- ❌ Restart container -- ❌ Copy files manually - -### Just: -- ✅ Edit files -- ✅ Save -- ✅ See changes in browser (HMR handles the rest!) - ---- - -## 🔄 Switching Between Dev and Production - -### Development Mode (Current) -**Caddyfile routes to:** `igny8_marketing_dev:5174` - -```caddyfile -igny8.com { - reverse_proxy igny8_marketing_dev:5174 { - # WebSocket support for HMR - header_up Connection {>Connection} - header_up Upgrade {>Upgrade} - } -} -``` - -### Production Mode -**Caddyfile routes to:** `igny8_marketing:8020` - -```caddyfile -igny8.com { - reverse_proxy igny8_marketing:8020 { - # Static production build - } -} -``` - -**To switch:** Edit `/var/lib/docker/volumes/portainer_data/_data/caddy/Caddyfile` and restart Caddy. - ---- - -## 🛠️ Container Management - -### Start Dev Server -```bash -cd /data/app/igny8 -docker compose -f docker-compose.app.yml -p igny8-app up -d igny8_marketing_dev -``` - -### View Logs -```bash -docker logs igny8_marketing_dev -f -``` - -### Restart Dev Server -```bash -docker compose -f docker-compose.app.yml -p igny8-app restart igny8_marketing_dev -``` - -### Stop Dev Server -```bash -docker compose -f docker-compose.app.yml -p igny8-app stop igny8_marketing_dev -``` - ---- - -## 📂 File Locations - -| Type | Location | -|------|----------| -| **Marketing Components** | `/data/app/igny8/frontend/src/marketing/` | -| **Marketing Pages** | `/data/app/igny8/frontend/src/marketing/pages/` | -| **Marketing Images** | `/data/app/igny8/frontend/public/marketing/images/` | -| **Marketing Styles** | `/data/app/igny8/frontend/src/marketing/styles/` | - ---- - -## ✅ Benefits - -1. **Real-time Updates** - Changes reflect immediately -2. **No Rebuilds** - Edit and save, that's it! -3. **Fast Development** - Same experience as app dev environment -4. **Image Updates** - Images in `public/marketing/images/` update instantly -5. **Component Updates** - React components hot-reload automatically - ---- - -## 🔍 Troubleshooting - -### Changes Not Appearing -1. Check container is running: `docker ps | grep igny8_marketing_dev` -2. Check logs: `docker logs igny8_marketing_dev` -3. Verify volume mount: Files should be in `/data/app/igny8/frontend/` - -### HMR Not Working -1. Check browser console for WebSocket errors -2. Verify Caddyfile has WebSocket headers -3. Restart Caddy: `docker compose restart caddy` - -### Port Conflicts -- Dev server uses port 5174 (internal), 8023 (external) -- If conflicts occur, change port in `docker-compose.app.yml` - ---- - -## 📊 Current Status - -✅ **Dev Server:** Running -✅ **HMR:** Enabled -✅ **Volume Mount:** Active -✅ **Caddy Routing:** Configured -✅ **WebSocket Support:** Enabled - ---- - -## 🎯 Next Steps - -When ready for production: -1. Build production image: `docker build -t igny8-marketing:latest -f Dockerfile.marketing .` -2. Update Caddyfile to route to `igny8_marketing:8020` -3. Restart Caddy: `docker compose restart caddy` - ---- - -**See Also:** -- [Marketing Deployment Guide](./MARKETING_DEPLOYMENT.md) -- [Deployment Architecture](./DEPLOYMENT_ARCHITECTURE.md) - diff --git a/frontend/src/marketing/pages/CaseStudies.tsx b/frontend/src/marketing/pages/CaseStudies.tsx index 968e1f2e..7058dc5a 100644 --- a/frontend/src/marketing/pages/CaseStudies.tsx +++ b/frontend/src/marketing/pages/CaseStudies.tsx @@ -43,7 +43,7 @@ const caseStudies = [ const CaseStudies: React.FC = () => { return ( -
+
{
- {caseStudies.map((cs) => ( -
-
- - {cs.company} - -

{cs.headline}

-

{cs.summary}

-
- {cs.metrics.map((metric) => ( -
-
- {metric.value} -
-
- {metric.label} -
-
- ))} + {caseStudies.map((cs, idx) => { + const gradients = [ + { border: "border-[#0693e3]/40", bg: "from-[#0693e3]/10 via-white to-[#0bbf87]/5" }, + { border: "border-[#0bbf87]/40", bg: "from-[#0bbf87]/10 via-white to-[#ff7a00]/5" }, + { border: "border-[#5d4ae3]/40", bg: "from-[#5d4ae3]/10 via-white to-[#0693e3]/5" }, + ]; + const gradient = gradients[idx % gradients.length]; + const metricColors = [ + { border: "border-[#0693e3]/30", bg: "from-[#0693e3]/10 to-white", text: "text-[#0693e3]" }, + { border: "border-[#0bbf87]/30", bg: "from-[#0bbf87]/10 to-white", text: "text-[#0bbf87]" }, + { border: "border-[#ff7a00]/30", bg: "from-[#ff7a00]/10 to-white", text: "text-[#ff7a00]" }, + ]; + return ( +
+
+ + {cs.company} + +

{cs.headline}

+

{cs.summary}

+
+ {cs.metrics.map((metric, metricIdx) => { + const metricColor = metricColors[metricIdx % metricColors.length]; + return ( +
+
+ {metric.value} +
+
+ {metric.label} +
+
+ ); + })} +
+
+
+ {`${cs.company}
-
- {`${cs.company} -
-
- ))} + ); + })}
-
+
-
-

Results you can expect

+
+

+ + Results you can expect +

    -
  • - - 30-60 day onboarding to deploy automation and Thinker governance. -
  • -
  • - - 3-5× increase in content throughput without sacrificing editorial quality. -
  • -
  • - - Clear ROI dashboards tying automation to revenue outcomes. -
  • + {[ + { text: "30-60 day onboarding to deploy automation and Thinker governance.", color: "bg-[#0693e3]" }, + { text: "3-5× increase in content throughput without sacrificing editorial quality.", color: "bg-[#0bbf87]" }, + { text: "Clear ROI dashboards tying automation to revenue outcomes.", color: "bg-[#ff7a00]" }, + ].map((item) => ( +
  • + + {item.text} +
  • + ))}
-
-

Customer advisory board

+
+

+ + Customer advisory board +

- Igny8’s roadmap is shaped by an active community of customer strategists, agency partners, and product marketers. Join and get early access to features, template libraries, and industry benchmarks. + Igny8's roadmap is shaped by an active community of customer strategists, agency partners, and product marketers. Join and get early access to features, template libraries, and industry benchmarks.

-
diff --git a/frontend/src/marketing/pages/Contact.tsx b/frontend/src/marketing/pages/Contact.tsx index 8bc1ad4d..16b5e203 100644 --- a/frontend/src/marketing/pages/Contact.tsx +++ b/frontend/src/marketing/pages/Contact.tsx @@ -4,7 +4,7 @@ import CTASection from "../components/CTASection"; const Contact: React.FC = () => { return ( -
+
{
-
+
@@ -39,7 +39,7 @@ const Contact: React.FC = () => { @@ -48,7 +48,7 @@ const Contact: React.FC = () => { @@ -57,48 +57,52 @@ const Contact: React.FC = () => {