-
JS Junk
-
JS Junk
-
Should be filtered out.
+
+ """ + _brave_card("https://example.com/article1", "Feynman on Electric Fields",
+ "Richard Feynman explains that all matter has an electric field.") + """
+ """ + _brave_card("https://example.com/article2", "Electric Fields Everywhere",
+ "Everything in the universe is surrounded by electric fields.") + """
+
+
+
"""
@@ -240,22 +252,10 @@ def mock_brave_response_dups():
mock_resp = MagicMock()
mock_resp.status_code = 200
mock_resp.text = """
-
-
-
-
Dup Result B
-
Dup Result B
-
Second occurrence — same URL.
-
-
+
+ """ + _brave_card("https://example.com/dup", "Dup Result A", "First occurrence.") + """
+ """ + _brave_card("https://example.com/dup", "Dup Result B", "Second occurrence — same URL.") + """
+ """ + _brave_card("https://example.com/unique", "Unique Result", "Only once.") + """
"""
mock_resp.headers = {"content-type": "text/html"}
@@ -268,17 +268,9 @@ def mock_brave_response_empty_content():
mock_resp = MagicMock()
mock_resp.status_code = 200
mock_resp.text = """
-
-
-
+
+ """ + _brave_card("https://example.com/ghost", "", "") + """
+ """ + _brave_card("https://example.com/real", "Real Result", "Has content.") + """
"""
mock_resp.headers = {"content-type": "text/html"}
diff --git a/odysseus b/odysseus
new file mode 160000
index 0000000..463713c
--- /dev/null
+++ b/odysseus
@@ -0,0 +1 @@
+Subproject commit 463713c2c6a15e7d020997826bd97e71fac25138
diff --git a/plans/HOMELAB-HANDOVER.md b/plans/HOMELAB-HANDOVER.md
new file mode 100644
index 0000000..051a7ed
--- /dev/null
+++ b/plans/HOMELAB-HANDOVER.md
@@ -0,0 +1,133 @@
+# Homelab Session Handover
+_Last updated: 2026-06-11 by Lumen_
+
+## 🔑 SSH Access (no password needed)
+
+```bash
+ssh-add ~/.ssh/id_ed25519_homelab
+```
+
+| Alias | Host | User | What it is |
+|-------|------|------|-----------|
+| `ssh vps` | 85.214.154.199 | root | plate.software — Strato OpenVZ, Plesk, Apache |
+| `ssh ionos` | 82.165.206.45 | root | plate-software.de — IONOS, Ubuntu 18.04, Apache |
+| `ssh truenas` | 192.168.188.119 | root | TrueNAS SCALE 24.10.2.4, k3s, Gitea |
+
+---
+
+## ✅ Fully Done
+
+### plate.software (VPS — 85.214.154.199)
+- Let's Encrypt cert valid (ACME path fixed in Plesk HTTP directives)
+- `frps` v0.68.1 running systemd, port 7000, token in BigMind fact #188
+- `git.plate.software` Apache proxy → `localhost:30008` via frpc ✅ HTTP 200
+- `frpc.service` on TrueNAS tunneling port 30008 → VPS
+
+### IONOS (plate-software.de — 82.165.206.45)
+- SSL wildcard-like cert renewed via acme.sh — now covers `git.plate-software.de` too
+- Valid until ~2026-08-04
+- ownCloud, Collabora still running
+
+### TrueNAS — ChunkyTown ZFS Pool (rebuilt 2026-05-04)
+- New pool: RAIDZ1 on `sda`+`sdb`+`sdd`+`sdl` (3 Toshibas + new Seagate WWZAXXKL)
+- Hot spare: `sdk` (oldest Toshiba 3220A0PBFA3H)
+- **29.1TB usable**, ONLINE, 0 errors
+- Old pool was unrecoverable (2 simultaneous failures)
+- Data was acceptable loss (Plex re-downloadable, photos in Google Photos)
+
+### TrueNAS — frpc tunnel
+- Binary: `/mnt/VM_SSD_Pool/frp/frpc`
+- Config: `/mnt/VM_SSD_Pool/frp/frpc.toml`
+- Systemd: `frpc.service` (enabled, running)
+- Gitea `app.ini`: `/mnt/VM_SSD_Pool/VM_POOL1/gitea/config/app.ini`
+ - `ROOT_URL = https://git.plate.software/`
+ - `SSH_DOMAIN = git.plate.software`
+
+### git.plate.software ✅ LIVE
+- `curl https://git.plate.software/` → HTTP 200
+
+---
+
+## ✅ IONOS Gitea Mirror — FIXED 2026-06-11
+
+### Status: FULLY WORKING
+- `https://git.plate-software.de/` → HTTP 200 ✅
+- Gitea API → HTTP 200 ✅
+- Push mirrors syncing: `pplate/bigmind`, `pplate/cannamanage`, `pplate/pi_mcps` ✅
+
+### What's running
+- Gitea Docker container on IONOS: `docker ps | grep gitea-mirror`
+ - Port: `127.0.0.1:3000` (local only, behind Apache)
+ - Data: `/opt/gitea/data`
+ - Admin user: `pplate` (password: `HomelabGit2026!` — reset 2026-06-11)
+ - API token: `1e87f855d448727e9d213599d654542881bdca0f`
+
+### Root cause (fixed)
+The `sites-enabled/` files for collabora, owncloud, and ssl.conf were **stale copies** (not symlinks) still using hostname-specific VirtualHost bindings (`collabora.plate-software.de:443`, `owncloud.plate-software.de:443`, `plate-software.de:443`). These resolved to `82.165.206.45:443` and Apache treated that as a separate higher-priority NameVirtualHost group — intercepting all git smart HTTP requests before the `*:443` git vhost was ever consulted.
+
+**Fix applied 2026-06-11:**
+```bash
+sed -i "s|VirtualHost collabora.plate-software.de:443|VirtualHost *:443|g" /etc/apache2/sites-enabled/collabora.plate-software.de.conf
+sed -i "s|VirtualHost collabora.plate-software.de:80|VirtualHost *:80|g" /etc/apache2/sites-enabled/collabora.plate-software.de.conf
+sed -i "s|VirtualHost owncloud.plate-software.de:443|VirtualHost *:443|g" /etc/apache2/sites-enabled/owncloud.plate-software.de.conf
+sed -i "s|VirtualHost owncloud.plate-software.de:80|VirtualHost *:80|g" /etc/apache2/sites-enabled/owncloud.plate-software.de.conf
+sed -i "s|VirtualHost plate-software.de:443|VirtualHost *:443|g" /etc/apache2/sites-enabled/ssl.conf
+systemctl reload apache2
+```
+
+⚠️ **Note:** `sites-enabled/collabora`, `owncloud`, and `ssl.conf` are plain files (not symlinks to `sites-available/`). If Apache is ever reconfigured via `a2ensite`, these edits will be lost — the `sites-available/` originals still have the correct `*:443` bindings.
+
+---
+
+## ⚠️ Other Pending Items
+
+### Plex (superplex app)
+- Shows CRASHED in TrueNAS app panel
+- Likely due to old ChunkyTown dataset paths being gone
+- Fix: TrueNAS web UI → Apps → superplex → Edit → update media library paths to new `/mnt/ChunkyTown/...` datasets
+
+### Let's Encrypt for git.plate.software (VPS side)
+- Currently no SSL cert for `git.plate.software` in Plesk
+- Apache proxy works but is HTTP→HTTP (Plesk's SSL termination handles it)
+- Issue cert: Plesk UI → Domains → git.plate.software → Let's Encrypt
+
+---
+
+## 🏗️ Infrastructure Overview
+
+```
+Internet
+ ↓ DNS
+plate.software VPS (85.214.154.199)
+ Apache/Plesk
+ ├── plate.software → :8080 (Docker WildFly)
+ └── git.plate.software → :30008 (frp tunnel ← TrueNAS) ✅
+ frps :7000 ← frpc on TrueNAS ✅
+
+TrueNAS.local (192.168.188.119)
+ ├── Gitea :30008 (ROOT_URL = https://git.plate.software/) ✅
+ ├── VM_SSD_Pool (ZFS RAIDZ2, ONLINE) — Gitea data lives here
+ └── ChunkyTown (ZFS RAIDZ1, ONLINE, 29.1TB) — rebuilt 2026-05-04
+ ├── raidz1: sda + sdb + sdd + sdl (Seagate)
+ └── spare: sdk
+
+IONOS (82.165.206.45)
+ Apache
+ ├── owncloud.plate-software.de → :8080 ✅
+ ├── collabora.plate-software.de → :9980 ✅
+ └── git.plate-software.de → :3000 (Gitea mirror Docker) ✅ FULLY WORKING (fixed 2026-06-11)
+ Docker: gitea-mirror, data: /opt/gitea/data
+ Token: 1e87f855d448727e9d213599d654542881bdca0f (in BigMind fact #192)
+ Repos: pplate/bigmind, pplate/cannamanage, pplate/pi_mcps (push mirrors from TrueNAS)
+```
+
+---
+
+## 🗂️ Key File Locations
+
+| File | Purpose |
+|------|---------|
+| `~/.ssh/id_ed25519_homelab` | Automation SSH key |
+| `~/.ssh/config` | SSH aliases (vps, ionos, truenas) |
+| `plans/frpc-truenas-deploy.sh` | frpc installer (already run on TrueNAS) |
+| `plans/HOMELAB-HANDOVER.md` | This file |
diff --git a/plans/cannabis-club-saas/SPRINT-1-PLAN.md b/plans/cannabis-club-saas/SPRINT-1-PLAN.md
new file mode 100644
index 0000000..085ffbb
--- /dev/null
+++ b/plans/cannabis-club-saas/SPRINT-1-PLAN.md
@@ -0,0 +1,547 @@
+# CannaManage — Sprint 1 Implementation Plan
+
+**Sprint:** 1 — Foundation
+**Phase:** Phase 1 (Weeks 1–8 of Phase 0 Foundation)
+**Author:** Lumen (architect mode), 2026-04-10
+**Status:** Ready for Patrick's approval
+
+---
+
+## Sprint Goal
+
+> **"Get the compliance engine running and fully tested — with zero production code and zero API yet."**
+
+Sprint 1 produces a compilable, testable Maven multi-module project with:
+- All core JPA entities modelled
+- Flyway V1 baseline migration SQL
+- `ComplianceService` implemented with 100% unit test coverage (TC-001 → TC-010)
+- A working local dev environment (Docker Compose: PostgreSQL + app)
+
+No UI, no REST API, no Stripe in Sprint 1. The compliance engine is the legal heart of the product — validate it first.
+
+---
+
+## Deliverables
+
+| # | Deliverable | Definition of Done |
+|---|------------|-------------------|
+| D1 | Maven multi-module project scaffold | `./mvnw clean verify` passes with no test failures |
+| D2 | `cannamanage-domain` module | All 8 JPA entities compile; `AbstractTenantEntity` wired |
+| D3 | Flyway `V1__initial_schema.sql` | Migration applies cleanly against PostgreSQL 16 |
+| D4 | `ComplianceService` | All 5 business methods implemented |
+| D5 | Unit test suite TC-001 → TC-010 | JaCoCo reports 100% line + branch coverage on `ComplianceService` |
+| D6 | Local dev `docker-compose.yml` | `docker compose up db` starts PostgreSQL; app connects cleanly |
+
+---
+
+## 1. Maven Multi-Module Structure
+
+```
+cannamanage/ ← root POM (parent)
+├── pom.xml ← parent POM (BOM: Spring Boot 3.x, Java 21)
+│
+├── cannamanage-domain/ ← JPA entities, enums, constants
+│ └── src/main/java/de/cannamanage/domain/
+│ ├── entity/ ← JPA entity classes
+│ ├── enums/ ← MemberStatus, BatchStatus, etc.
+│ └── constants/
+│ └── ComplianceConstants.java
+│
+├── cannamanage-service/ ← Business logic, services (TESTED HERE)
+│ └── src/
+│ ├── main/java/de/cannamanage/service/
+│ │ ├── ComplianceService.java
+│ │ ├── dto/ ← QuotaStatus, ComplianceCheckResult, etc.
+│ │ └── exception/ ← QuotaExceededException, MemberIneligibleException
+│ └── test/java/de/cannamanage/service/
+│ └── ComplianceServiceTest.java ← TC-001 to TC-010
+│
+├── cannamanage-api/ ← Spring Boot app entry point (REST controllers — Sprint 2)
+│ └── src/main/java/de/cannamanage/api/
+│ └── CannaManageApplication.java
+│
+└── docker-compose.yml ← Local dev: PostgreSQL 16
+```
+
+### Parent POM key dependencies (BOM managed)
+
+```xml
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.3.4
+
+
+
+
+ cannamanage-domain
+ cannamanage-service
+ cannamanage-api
+
+
+
+
+
+```
+
+---
+
+## 2. `cannamanage-domain` — JPA Entities
+
+### 2.1 `AbstractTenantEntity` (base class for all entities)
+
+```java
+// de.cannamanage.domain.entity.AbstractTenantEntity
+@MappedSuperclass
+@FilterDef(
+ name = "tenantFilter",
+ parameters = @ParamDef(name = "tenantId", type = UUID.class)
+)
+@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
+public abstract class AbstractTenantEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.UUID)
+ private UUID id;
+
+ @Column(name = "tenant_id", nullable = false, updatable = false)
+ private UUID tenantId;
+
+ @Column(name = "created_at", nullable = false, updatable = false)
+ private Instant createdAt;
+
+ @PrePersist
+ void onCreate() {
+ this.tenantId = TenantContext.getCurrentTenant(); // ThreadLocal
+ this.createdAt = Instant.now();
+ }
+}
+```
+
+### 2.2 Entities to implement (Sprint 1)
+
+| Entity | Key fields | Notes |
+|--------|-----------|-------|
+| `Club` | id, name, licenseNumber, maxMembers, status | Root tenant aggregate |
+| `Member` | id, clubId, firstName, lastName, email, dob, membershipNumber, status, isUnder21 | `isUnder21` derived from DOB |
+| `Strain` | id, name, thcPercentage, cbdPercentage | Immutable once created |
+| `Batch` | id, strainId, quantityGrams, harvestDate, batchCode, status, contaminationFlag | status: AVAILABLE → EXHAUSTED / RECALLED |
+| `Distribution` | id, memberId, batchId, quantityGrams, distributedAt, recordedBy, notes | `@Column(updatable=false)` on all fields — immutable |
+| `MonthlyQuota` | id, memberId, year, month, totalDistributed, maxAllowed, version | `@Version` for optimistic lock |
+| `StockMovement` | id, batchId, movementType, quantityGrams, reason, createdAt | Audit journal |
+| `User` | id, memberId, email, passwordHash, role, lastLogin, active, refreshTokenHash | Login identity |
+
+### 2.3 `ComplianceConstants.java`
+
+```java
+// de.cannamanage.domain.constants.ComplianceConstants
+public final class ComplianceConstants {
+
+ // CanG §19(2) — adult limits
+ public static final BigDecimal ADULT_DAILY_LIMIT_GRAMS = new BigDecimal("25.0");
+ public static final BigDecimal ADULT_MONTHLY_LIMIT_GRAMS = new BigDecimal("50.0");
+
+ // CanG §19(3) — under-21 limits
+ public static final BigDecimal UNDER21_MONTHLY_LIMIT_GRAMS = new BigDecimal("30.0");
+
+ // CanG §19(4) — under-21 THC cap
+ public static final BigDecimal UNDER21_MAX_THC_PERCENTAGE = new BigDecimal("10.0");
+
+ // Minimum membership age
+ public static final int MINIMUM_MEMBERSHIP_AGE = 18;
+
+ // Under-21 threshold
+ public static final int UNDER21_THRESHOLD_AGE = 21;
+
+ private ComplianceConstants() {}
+}
+```
+
+---
+
+## 3. Flyway `V1__initial_schema.sql`
+
+Location: `cannamanage-api/src/main/resources/db/migration/V1__initial_schema.sql`
+
+```sql
+-- Clubs (root of tenant hierarchy)
+CREATE TABLE clubs (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ address TEXT,
+ license_number VARCHAR(100) NOT NULL UNIQUE,
+ max_members INT NOT NULL DEFAULT 500,
+ status VARCHAR(50) NOT NULL DEFAULT 'ACTIVE',
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
+);
+
+-- Members
+CREATE TABLE members (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ club_id UUID NOT NULL REFERENCES clubs(id),
+ first_name VARCHAR(100) NOT NULL,
+ last_name VARCHAR(100) NOT NULL,
+ email VARCHAR(255) NOT NULL,
+ date_of_birth DATE NOT NULL,
+ membership_date DATE NOT NULL DEFAULT CURRENT_DATE,
+ membership_number VARCHAR(50) NOT NULL,
+ status VARCHAR(50) NOT NULL DEFAULT 'ACTIVE',
+ is_under_21 BOOLEAN NOT NULL DEFAULT FALSE,
+ prevention_officer BOOLEAN NOT NULL DEFAULT FALSE,
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ UNIQUE(email, tenant_id),
+ UNIQUE(membership_number, tenant_id)
+);
+
+-- Strains
+CREATE TABLE strains (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ thc_percentage NUMERIC(5,2) NOT NULL,
+ cbd_percentage NUMERIC(5,2) NOT NULL DEFAULT 0.00,
+ description TEXT,
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
+);
+
+-- Batches
+CREATE TABLE batches (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ strain_id UUID NOT NULL REFERENCES strains(id),
+ quantity_grams NUMERIC(10,2) NOT NULL,
+ harvest_date DATE,
+ batch_code VARCHAR(100) NOT NULL,
+ status VARCHAR(50) NOT NULL DEFAULT 'AVAILABLE',
+ contamination_flag BOOLEAN NOT NULL DEFAULT FALSE,
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ UNIQUE(batch_code, tenant_id)
+);
+
+-- Distributions (immutable — no UPDATE/DELETE via app)
+CREATE TABLE distributions (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ member_id UUID NOT NULL REFERENCES members(id),
+ batch_id UUID NOT NULL REFERENCES batches(id),
+ quantity_grams NUMERIC(10,2) NOT NULL,
+ distributed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ recorded_by UUID NOT NULL REFERENCES members(id),
+ notes TEXT,
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
+);
+
+-- Monthly quotas (one row per member per calendar month)
+CREATE TABLE monthly_quotas (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ member_id UUID NOT NULL REFERENCES members(id),
+ year INT NOT NULL,
+ month INT NOT NULL CHECK (month >= 1 AND month <= 12),
+ total_distributed NUMERIC(10,2) NOT NULL DEFAULT 0.00,
+ max_allowed NUMERIC(10,2) NOT NULL,
+ version BIGINT NOT NULL DEFAULT 0,
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ UNIQUE(member_id, year, month)
+);
+
+-- Stock movements (audit journal)
+CREATE TABLE stock_movements (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ batch_id UUID NOT NULL REFERENCES batches(id),
+ movement_type VARCHAR(50) NOT NULL, -- IN, OUT, RECALL, ADJUSTMENT
+ quantity_grams NUMERIC(10,2) NOT NULL,
+ reason TEXT,
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
+);
+
+-- Users (login identities)
+CREATE TABLE users (
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
+ tenant_id UUID NOT NULL,
+ member_id UUID REFERENCES members(id),
+ email VARCHAR(255) NOT NULL,
+ password_hash VARCHAR(255) NOT NULL,
+ role VARCHAR(50) NOT NULL DEFAULT 'ROLE_MEMBER',
+ last_login TIMESTAMPTZ,
+ active BOOLEAN NOT NULL DEFAULT TRUE,
+ refresh_token_hash VARCHAR(255),
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ UNIQUE(email, tenant_id)
+);
+
+-- Indexes for common query patterns
+CREATE INDEX idx_members_club_id ON members(club_id);
+CREATE INDEX idx_members_tenant_id ON members(tenant_id);
+CREATE INDEX idx_distributions_member_id ON distributions(member_id);
+CREATE INDEX idx_distributions_tenant_id ON distributions(tenant_id);
+CREATE INDEX idx_distributions_distributed_at ON distributions(distributed_at);
+CREATE INDEX idx_monthly_quotas_member_month ON monthly_quotas(member_id, year, month);
+CREATE INDEX idx_batches_tenant_status ON batches(tenant_id, status);
+```
+
+---
+
+## 4. `ComplianceService` — Implementation Spec
+
+Package: `de.cannamanage.service`
+
+### 4.1 Dependencies (injected via constructor)
+
+```java
+@Service
+@Transactional
+public class ComplianceService {
+
+ private final MemberRepository memberRepository;
+ private final DistributionRepository distributionRepository;
+ private final BatchRepository batchRepository;
+ private final MonthlyQuotaRepository monthlyQuotaRepository;
+ private final StrainRepository strainRepository;
+
+ // constructor injection...
+}
+```
+
+### 4.2 Method: `checkDistributionAllowed(UUID memberId, UUID batchId, BigDecimal quantityGrams)`
+
+**Algorithm (sequential checks, fail-fast):**
+
+```
+1. Load Member — throw MemberNotFoundException if not found
+2. CHECK: member.status == ACTIVE → else throw QuotaExceededException(MEMBER_INACTIVE)
+3. Load Batch → CHECK: batch.status == AVAILABLE → else throw BatchUnavailableException
+4. Load Strain via batch.strainId
+5. IF member.isUnder21 AND strain.thcPercentage > UNDER21_MAX_THC_PERCENTAGE
+ → throw QuotaExceededException(HIGH_THC_RESTRICTED_UNDER_21)
+6. Calculate todayDistributed = SUM(distributions.quantityGrams WHERE memberId AND date=TODAY)
+ CHECK: todayDistributed + quantityGrams > ADULT_DAILY_LIMIT_GRAMS
+ → throw QuotaExceededException(QUOTA_EXCEEDED_DAILY)
+7. Get or create MonthlyQuota for (memberId, currentYear, currentMonth)
+ SET maxAllowed = isUnder21 ? UNDER21_MONTHLY_LIMIT_GRAMS : ADULT_MONTHLY_LIMIT_GRAMS
+ CHECK: quota.totalDistributed + quantityGrams > quota.maxAllowed
+ → throw QuotaExceededException(QUOTA_EXCEEDED_MONTHLY)
+8. Return ComplianceCheckResult(allowed=true, remainingDaily, remainingMonthly)
+```
+
+### 4.3 `QuotaExceededException` — error codes
+
+```java
+public enum QuotaViolationCode {
+ MEMBER_INACTIVE,
+ QUOTA_EXCEEDED_DAILY,
+ QUOTA_EXCEEDED_MONTHLY,
+ HIGH_THC_RESTRICTED_UNDER_21,
+ BATCH_UNAVAILABLE
+}
+```
+
+### 4.4 DTOs
+
+```java
+// ComplianceCheckResult
+record ComplianceCheckResult(
+ boolean allowed,
+ BigDecimal remainingDaily,
+ BigDecimal remainingMonthly,
+ boolean isUnder21
+) {}
+
+// QuotaStatus
+record QuotaStatus(
+ BigDecimal totalAllowed,
+ BigDecimal totalUsed,
+ BigDecimal remaining,
+ boolean isUnder21,
+ int year,
+ int month
+) {}
+```
+
+---
+
+## 5. Unit Test Suite (TC-001 → TC-010)
+
+**Class:** `ComplianceServiceTest` in `cannamanage-service`
+**Coverage requirement:** 100% line + branch on `ComplianceService`
+**Tools:** JUnit 5, Mockito 5, AssertJ
+
+### Test structure
+
+```java
+@ExtendWith(MockitoExtension.class)
+class ComplianceServiceTest {
+
+ @Mock MemberRepository memberRepository;
+ @Mock DistributionRepository distributionRepository;
+ @Mock BatchRepository batchRepository;
+ @Mock MonthlyQuotaRepository monthlyQuotaRepository;
+ @Mock StrainRepository strainRepository;
+
+ @InjectMocks ComplianceService complianceService;
+
+ // Test fixtures
+ private static final UUID ADULT_MEMBER_ID = UUID.randomUUID();
+ private static final UUID UNDER21_MEMBER_ID = UUID.randomUUID();
+ private static final UUID BATCH_ID = UUID.randomUUID();
+ private static final UUID HIGH_THC_STRAIN_ID = UUID.randomUUID();
+
+ // TC-001: adult at monthly limit → throws QUOTA_EXCEEDED_MONTHLY
+ // TC-002: under-21 at monthly limit → throws QUOTA_EXCEEDED_MONTHLY
+ // TC-003: adult at daily limit → throws QUOTA_EXCEEDED_DAILY
+ // TC-004: under-21 + high THC strain → throws HIGH_THC_RESTRICTED_UNDER_21
+ // TC-005: adult at 49g requesting 2g → throws QUOTA_EXCEEDED_MONTHLY
+ // TC-006: adult at 0g requesting 25g → allowed, remaining=0
+ // TC-007: adult at 24.9g requesting 0.1g → allowed, remainingDaily=0
+ // TC-008: adult at 24.9g requesting 0.2g → throws QUOTA_EXCEEDED_DAILY
+ // TC-009: SUSPENDED member → throws MEMBER_INACTIVE
+ // TC-010: EXPELLED member → throws MEMBER_INACTIVE
+}
+```
+
+### Key mock patterns
+
+```java
+// TC-001 example mock setup
+Member adultMember = new Member();
+adultMember.setId(ADULT_MEMBER_ID);
+adultMember.setUnder21(false);
+adultMember.setStatus(MemberStatus.ACTIVE);
+
+when(memberRepository.findById(ADULT_MEMBER_ID)).thenReturn(Optional.of(adultMember));
+
+MonthlyQuota quota = new MonthlyQuota();
+quota.setTotalDistributed(new BigDecimal("50.0"));
+quota.setMaxAllowed(ComplianceConstants.ADULT_MONTHLY_LIMIT_GRAMS);
+when(monthlyQuotaRepository.findByMemberIdAndYearAndMonth(any(), anyInt(), anyInt()))
+ .thenReturn(Optional.of(quota));
+
+// Assert
+assertThatThrownBy(() -> complianceService.checkDistributionAllowed(ADULT_MEMBER_ID, BATCH_ID, new BigDecimal("1.0")))
+ .isInstanceOf(QuotaExceededException.class)
+ .extracting("code")
+ .isEqualTo(QuotaViolationCode.QUOTA_EXCEEDED_MONTHLY);
+```
+
+---
+
+## 6. Local Dev Docker Compose
+
+```yaml
+# docker-compose.yml (root of cannamanage project)
+version: '3.9'
+
+services:
+ db:
+ image: postgres:16-alpine
+ container_name: cannamanage-db-local
+ environment:
+ POSTGRES_DB: cannamanage
+ POSTGRES_USER: cannamanage
+ POSTGRES_PASSWORD: dev_password_change_in_prod
+ ports:
+ - "5432:5432"
+ volumes:
+ - pgdata_local:/var/lib/postgresql/data
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U cannamanage"]
+ interval: 5s
+ timeout: 3s
+ retries: 5
+
+volumes:
+ pgdata_local:
+```
+
+```properties
+# cannamanage-api/src/main/resources/application-local.properties
+spring.datasource.url=jdbc:postgresql://localhost:5432/cannamanage
+spring.datasource.username=cannamanage
+spring.datasource.password=dev_password_change_in_prod
+spring.jpa.hibernate.ddl-auto=validate # Flyway owns schema
+spring.flyway.enabled=true
+spring.flyway.locations=classpath:db/migration
+logging.level.de.cannamanage=DEBUG
+```
+
+**Run locally:**
+```bash
+git clone http://192.168.188.119:30008/pplate/cannamanage.git
+cd cannamanage
+docker compose up db -d
+./mvnw spring-boot:run -pl cannamanage-api -Dspring.profiles.active=local
+```
+
+---
+
+## 7. Sprint 1 Gitea Issues (already created: #1–#10)
+
+Based on the Sprint 1 board at `http://truenas.local:30008/pplate/cannamanage/wiki/Sprint-1-Board`, these map to:
+
+| Gitea Issue | Sprint 1 Deliverable |
+|-------------|---------------------|
+| #1 | Maven multi-module project scaffold |
+| #2 | `AbstractTenantEntity` + `TenantContext` ThreadLocal |
+| #3 | All 8 JPA entities in `cannamanage-domain` |
+| #4 | `ComplianceConstants.java` |
+| #5 | Flyway `V1__initial_schema.sql` |
+| #6 | `ComplianceService` implementation |
+| #7 | Unit tests TC-001 → TC-010 (100% coverage) |
+| #8 | `docker-compose.yml` local dev |
+| #9 | `application-local.properties` |
+| #10 | JaCoCo coverage gate in parent POM |
+
+---
+
+## 8. Out of Scope — Sprint 1
+
+These are **explicitly deferred** to Sprint 2+:
+
+- REST API controllers (`AuthController`, `MemberController`, `DistributionController`)
+- Spring Security + JWT filter chain
+- PrimeFaces JSF frontend
+- Stripe billing integration
+- iText 7 PDF reports
+- Email notifications
+- Testcontainers integration tests (TC-018 → TC-022)
+- Hetzner deployment / CI pipeline
+- `MemberService` (TC-011 → TC-015)
+
+---
+
+## 9. Definition of Done — Sprint 1
+
+- [ ] `./mvnw clean verify` exits 0 on clean checkout
+- [ ] `./mvnw test -pl cannamanage-service` reports 10/10 tests passing
+- [ ] JaCoCo report shows `ComplianceService` at 100% line + branch coverage
+- [ ] `docker compose up db -d` starts PostgreSQL; Flyway V1 migration applies cleanly
+- [ ] No `TODO` comments in production code paths
+- [ ] All 8 JPA entities have `@Column(nullable = false)` on required fields
+- [ ] `ComplianceConstants.java` contains all CanG limits as `public static final BigDecimal`
+- [ ] `AbstractTenantEntity.tenantId` is `@Column(updatable = false)`
+- [ ] Code pushed to `http://192.168.188.119:30008/pplate/cannamanage` main branch
+
+---
+
+## 10. Recommended Implementation Order
+
+```
+Day 1: Root pom.xml + module scaffolds → ./mvnw compile passes
+Day 2: AbstractTenantEntity + TenantContext + ComplianceConstants
+Day 3: All 8 JPA entities (compile-time only, no DB yet)
+Day 4: Flyway V1 SQL + docker-compose.yml → migration applies
+Day 5: ComplianceService skeleton (method signatures + DTOs)
+Day 6: TC-001 → TC-005 (the exception/blocking cases)
+Day 7: TC-006 → TC-010 (boundary + happy path cases)
+Day 8: JaCoCo gate; clean up; push to Gitea
+```
+
+*Assuming ~2–3 hours of evening/weekend coding per day as side project.*
+
+---
+
+*Plan created: 2026-04-10 | Sprint start: when Patrick approves | Estimated coding sessions: 8 × 2-3h*
diff --git a/plans/cannabis-club-saas/docs/CHANGELOG.md b/plans/cannabis-club-saas/docs/CHANGELOG.md
index 8653baf..4baec1b 100644
--- a/plans/cannabis-club-saas/docs/CHANGELOG.md
+++ b/plans/cannabis-club-saas/docs/CHANGELOG.md
@@ -12,17 +12,35 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
### Added
- Complete project documentation suite (10 documents, ~25,000 words)
-- System architecture design: 8 JPA entities, Maven multi-module structure, multi-tenancy via shared schema + Hibernate filter
+- System architecture design: 8 JPA entities, Maven multi-module structure
- REST API specification: 7 controllers, 30+ endpoints, full request/response schemas with error codes
- Compliance engine design: `ComplianceService` enforcing CanG §§19–22 limits (25g/day, 50g/month adults; 30g/month under-21; ≤10% THC under-21)
- `ComplianceConstants.java` design: all legal thresholds as named constants to prevent magic numbers in compliance logic
- UI wireframes for 6 screens: Admin Dashboard, Distribution Recording Form, Member List, Member Quota View, Stock Management, Compliance Report
- 5 AI-generated UI mockup images (FLUX.1-schnell via ComfyUI, 1024×512)
- Test plan with 26 test cases covering ComplianceService (TC-001–010), MemberService (TC-011–015), tenant isolation (TC-016–017), and integration tests (TC-018–026)
-- Deployment guide for Hetzner VPS: Docker Compose setup, Nginx reverse proxy, SSL with Let's Encrypt, CI/CD via Gitea Actions, database backup strategy
- Coding standards: Java 21 conventions, JPA patterns, multi-tenancy rules, immutable distribution records
- Flowcharts: distribution flow (5-step), member lifecycle (state machine), billing provisioning flow (Mermaid diagrams)
- README with full documentation index, tech stack table, pricing tiers, legal notice
+- **[2026-04-06]** Staff member management: `ROLE_STAFF` with configurable per-account permission grants (US-026); admin controls which data staff can access (DSGVO least-privilege). 8 defined permissions, 3 pre-created role templates (Ausgabe, Lager, Vorstand). Core feature from Phase 0.
+- **[2026-04-06]** Grow Calendar: US-027 added as Could Have (v2) — cultivation diary per grow cycle, linked to batch harvest, optional photo attachments, admin-controlled access via `MANAGE_GROW_CALENDAR` permission
+- **[2026-04-06]** Staff wireframe (Screen 7) added to `06-Wireframes.md` with full ASCII wireframe, component table (TanStack Table, shadcn/ui Checkbox, Select), and DSGVO design rationale
+- **[2026-04-06]** Staff routes added to Navigation IA: `/admin/staff`, `/admin/staff/new`, `/admin/staff/{id}`, `/staff/dashboard`
+- **[2026-04-06]** TrueNAS.local Gitea Actions self-hosted runner documented in `09-Deployment.md` as the CI/CD build environment; Hetzner = production release target
+
+### Changed
+
+- **[2026-04-06]** `03-Architecture.md` — **Multi-tenancy model changed from shared-schema to schema-per-tenant.** Decision rationale: hard DB-level isolation (not application-layer), clean DSGVO deletion (`DROP SCHEMA`), no cross-tenant index bloat, easier future isolation. `tenant_id` columns on every entity removed; schema routing via `TenantRoutingDataSource` replaces Hibernate `@Filter`.
+- **[2026-04-06]** `03-Architecture.md` — **Frontend changed from PrimeFaces/JSF to React/Vite SPA.** Rationale: JSF server-side lifecycle is a poor fit for a REST API backend; PrimeFaces creates a hiring bottleneck; React is mobile-friendly from day 1. Component library: shadcn/ui (Radix UI + Tailwind CSS) + TanStack Table v8.
+- **[2026-04-06]** `03-Architecture.md` — `ROLE_STAFF` added with configurable `StaffPermission` enum; pre-created templates documented. Staff noted as core feature, not add-on.
+- **[2026-04-06]** `06-Wireframes.md` — All component tables updated from PrimeFaces (`p:dataTable`, `p:commandButton`) to React/Tailwind equivalents (TanStack Table, shadcn/ui). Responsive Design section rewritten for Tailwind breakpoints.
+- **[2026-04-06]** `09-Deployment.md` — CI/CD section rewritten: `runs-on: ubuntu-latest` → `runs-on: self-hosted` (TrueNAS.local). Gitea Actions runner setup instructions added. Infrastructure diagram updated to show Dev → Gitea → TrueNAS build → Hetzner release flow.
+- **[2026-04-06]** `0.1.0` CHANGELOG entry corrected: removed "shared schema" as final architecture decision (superseded by schema-per-tenant); removed PrimeFaces as frontend (superseded by React/Vite)
+
+### Fixed
+
+- **[2026-04-06]** `04-Flowcharts.md` — Mermaid parse error in Flow 4 (line 146): `[Generate empty report\nwith zero totals\n(still valid compliance submission)]` — parenthesis after newline was parsed as stadium-shape node start. Fixed by wrapping node text in double quotes.
+- **[2026-04-06]** `04-Flowcharts.md` — Mermaid parse error in Flow 5 (line 177): `[❌ Invalid credentials\n(generic — do not reveal\nwhether email exists)]` — same root cause, same fix.
---
@@ -33,9 +51,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- `STRATEGY.md` — initial project vision and feasibility assessment
- Legal analysis confirming CanG compliance viability for B2B SaaS model (no public advertising, no club discovery, B2B-only)
- Market analysis: ~3,000 registered clubs in Germany, TAM estimated at €2.85M ARR
-- Tech stack selection rationale: Spring Boot 3.x + PrimeFaces JSF (MVP) → Next.js v2; PostgreSQL + Flyway; iText 7 PDF; Stripe billing
-- Multi-tenancy architectural decision: shared schema with `tenant_id` column (chosen over schema-per-tenant for lower operational overhead at MVP scale)
+- Tech stack selection rationale: Spring Boot 3.x + React/Vite SPA (MVP) → Next.js v2; PostgreSQL + Flyway; iText 7 PDF; Stripe billing
+- Multi-tenancy architectural decision: schema-per-tenant (each club gets isolated PostgreSQL schema; platform registry in `public` schema)
- Pricing model: 4 tiers (Starter €29, Growth €59, Professional €99, Enterprise €199/month)
+- Deployment guide for Hetzner VPS (production release): Docker Compose, Nginx + Let's Encrypt, Gitea Actions CI/CD via TrueNAS.local self-hosted runner, daily PostgreSQL backup strategy
---
diff --git a/plans/cannamanage-brand-pipeline.md b/plans/cannamanage-brand-pipeline.md
new file mode 100644
index 0000000..aafe45e
--- /dev/null
+++ b/plans/cannamanage-brand-pipeline.md
@@ -0,0 +1,1263 @@
+# CannaManage Brand Asset Generation Pipeline
+
+**Status:** Ready for Code mode implementation
+**Target script:** `mcp/mcp-image-gen/cannamanage_gen.py`
+**Output root:** `~/Pictures/cannamanage_brand/`
+**Total assets:** 220+ images across 6 phases
+**Est. runtime:** ~40–70 min (flux1-schnell) or ~3–4h (flux2-klein-heretic)
+
+---
+
+## Why a Script, Not a Chat Session
+
+LLM conversation sessions cannot run 220+ synchronous generations (37–180+ min). Every previous
+attempt ended `partial` because context/timeout limits hit mid-batch. This script calls the
+ComfyUI HTTP API directly — no LLM involvement at runtime. Patrick launches it, goes to sleep,
+wakes up to a full organized asset library.
+
+---
+
+## Architecture
+
+```
+cannamanage_gen.py
+├── Reads ASSET_MANIFEST (list of dicts defined inline)
+├── Loads state from ~/Pictures/cannamanage_brand/.progress.json (resume-safe)
+├── For each asset NOT yet in state:
+│ ├── Patches flux_schnell.json workflow (prompt, size, seed, filename prefix)
+│ ├── POSTs to ComfyUI /prompt
+│ ├── Polls /history/{prompt_id} until done (poll 2s, timeout 300s)
+│ ├── Downloads PNG from /view endpoint
+│ ├── Saves to ~/Pictures/cannamanage_brand/{phase}/{subfolder}/{name}.png
+│ └── Marks as complete in .progress.json (flush after every image)
+└── Prints final summary: X/Y completed, failed list
+```
+
+### Key Design Decisions
+- **Resume-safe:** `.progress.json` tracks completed asset IDs. Re-running skips done images.
+- **No dependencies beyond stdlib:** Uses `urllib.request` only (same as gen.py). No pip install needed.
+- **Workflow base:** `flux_schnell.json` (4 steps, ~10s/image for overnight batch speed).
+- **Failure tolerance:** Catches exceptions per-image, logs failure, continues batch.
+- **Progress display:** Shows `[phase] [N/total] name — done (Xkb)` per image.
+- **Default model:** `flux1-schnell.safetensors` for speed. Pass `--model flux2` to use heretic.
+
+### Workflow patch points (from gen.py analysis)
+```python
+workflow["2"]["inputs"]["text"] = prompt # positive prompt
+workflow["3"]["inputs"]["text"] = "" # negative (keep empty)
+workflow["10"]["inputs"]["noise_seed"] = seed # randomness
+workflow["6"]["inputs"]["width"] = width
+workflow["6"]["inputs"]["height"] = height
+workflow["7"]["inputs"]["steps"] = steps # 4 for schnell
+workflow["13"]["inputs"]["filename_prefix"] = name # output filename
+```
+
+---
+
+## Brand DNA (applied to ALL prompts)
+
+**Color palette:**
+- Primary: deep emerald green `#0D4F3C`, bright emerald `#10B981`
+- Accent: warm gold/amber `#F59E0B`, pale gold `#FCD34D`
+- Neutral: dark charcoal `#1F2937`, warm white `#F9FAFB`, medium gray `#6B7280`
+- Secondary: sage green `#6EE7B7`, forest green `#065F46`
+
+**Tone:** Professional B2B SaaS, clean, modern, trustworthy, tech-forward, premium
+**Cannabis references:** Subtle — geometric leaf shapes, hex-grid patterns, circuit-leaf hybrids.
+**Avoid:** Stoner aesthetics, smoke, pipes, fire, psychedelic imagery, cartoon cannabis leaves
+
+**Prompt prefix to prepend on all generations:**
+```
+professional B2B SaaS brand design, CannaManage cannabis business management platform,
+modern tech aesthetic, clean minimalist style, premium quality,
+```
+
+---
+
+## Folder Structure
+
+```
+~/Pictures/cannamanage_brand/
+├── .progress.json ← resume state file
+├── phase1_logos/
+│ ├── wordmark/
+│ ├── icon_only/
+│ ├── lockup_horizontal/
+│ ├── lockup_stacked/
+│ └── favicon/
+├── phase2_banners/
+│ ├── hero_website/
+│ ├── linkedin/
+│ ├── twitter_x/
+│ ├── facebook_cover/
+│ ├── google_display/
+│ ├── app_store/
+│ └── email_header/
+├── phase3_social/
+│ ├── instagram_square/
+│ ├── instagram_story/
+│ ├── linkedin_post/
+│ ├── feature_cards/
+│ ├── testimonial_cards/
+│ └── stat_cards/
+├── phase4_ui/
+│ ├── app_icons/
+│ ├── device_mockups/
+│ ├── onboarding_illustrations/
+│ ├── empty_states/
+│ └── splash_screens/
+├── phase5_collateral/
+│ ├── business_cards/
+│ ├── pitch_deck/
+│ ├── one_pager/
+│ ├── trade_show/
+│ └── stickers/
+└── phase6_bonus/
+ ├── animated_stills/
+ ├── dark_light_pairs/
+ ├── integration_badges/
+ └── trust_badges/
+```
+
+---
+
+## Complete Asset Manifest
+
+Each entry: `{"id": str, "phase": str, "subfolder": str, "name": str, "prompt": str, "width": int, "height": int, "steps": int}`
+
+### PHASE 1 — Logo Suite (42 assets)
+
+#### Wordmark — 5 font style directions (1024×512 each)
+
+```python
+{"id":"p1_wm_01","phase":"phase1_logos","subfolder":"wordmark","name":"wordmark_modern_sans",
+ "prompt":"CannaManage wordmark logo, modern geometric sans-serif typography, deep emerald green color #0D4F3C, clean white background, professional SaaS brand, minimal cannabis leaf accent integrated into letterform, high-end tech company wordmark style, vector clean, flat design",
+ "width":1024,"height":512,"steps":4},
+
+{"id":"p1_wm_02","phase":"phase1_logos","subfolder":"wordmark","name":"wordmark_geometric",
+ "prompt":"CannaManage wordmark logo, geometric typeface with sharp angles, two-tone emerald and gold color scheme, hexagonal grid subtle background element, cannabis molecule silhouette integrated into C letter, precision tech brand identity, clean white background, premium SaaS wordmark",
+ "width":1024,"height":512,"steps":4},
+
+{"id":"p1_wm_03","phase":"phase1_logos","subfolder":"wordmark","name":"wordmark_humanist",
+ "prompt":"CannaManage wordmark logo, humanist sans-serif typeface, warm approachable professional style, forest green with amber gold accent, subtle leaf vein pattern in letterforms, cannabis compliance software brand, trustworthy and modern, white background",
+ "width":1024,"height":512,"steps":4},
+
+{"id":"p1_wm_04","phase":"phase1_logos","subfolder":"wordmark","name":"wordmark_slab_serif",
+ "prompt":"CannaManage wordmark logo, premium slab serif typography, dark charcoal and deep green color palette, gold accent stripe element, authoritative compliance management brand, pharmaceutical-grade trustworthiness aesthetic, white background, clean professional",
+ "width":1024,"height":512,"steps":4},
+
+{"id":"p1_wm_05","phase":"phase1_logos","subfolder":"wordmark","name":"wordmark_minimal",
+ "prompt":"CannaManage wordmark logo, ultra-minimal thin weight typography, single-color deep emerald, negative space leaf shape formed by letter spacing, Apple-inspired premium minimalism, cannabis SaaS platform, pure white background, zen simplicity",
+ "width":1024,"height":512,"steps":4},
+```
+
+#### Icon/Symbol Only — 10 variations (512×512 each)
+
+```python
+{"id":"p1_ic_01","phase":"phase1_logos","subfolder":"icon_only","name":"icon_leaf_tech",
+ "prompt":"CannaManage app icon, abstract cannabis leaf shape formed from circuit board traces and data nodes, emerald green on dark charcoal background, tech-meets-nature concept, geometric precision, premium SaaS brand mark, square icon format",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_02","phase":"phase1_logos","subfolder":"icon_only","name":"icon_c_mark_abstract",
+ "prompt":"CannaManage brand icon, abstract letter C formed from cannabis plant stems and leaves, geometric minimalist style, deep green gradient, white background, negative space cannabis leaf inside C curve, modern tech company logo mark",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_03","phase":"phase1_logos","subfolder":"icon_only","name":"icon_molecule_stylized",
+ "prompt":"CannaManage icon, stylized cannabis molecule diagram as brand mark, hexagonal ring structure with emerald green nodes and gold connecting lines, scientific precision meets modern design, dark background, pharmaceutical-tech aesthetic",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_04","phase":"phase1_logos","subfolder":"icon_only","name":"icon_dashboard_grid",
+ "prompt":"CannaManage icon, abstract dashboard grid symbol, 3x3 grid of squares with data bar and cannabis leaf overlaid, emerald green and gold, SaaS platform brand mark, clean geometric, white background, analytics software icon",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_05","phase":"phase1_logos","subfolder":"icon_only","name":"icon_plant_circuit",
+ "prompt":"CannaManage icon, cannabis plant silhouette where stems are circuit board traces, leaves are data nodes, emerald green on white, half-organic half-digital visual metaphor, modern biotech aesthetic, clean vector-style brand mark",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_06","phase":"phase1_logos","subfolder":"icon_only","name":"icon_shield_leaf",
+ "prompt":"CannaManage compliance icon, shield shape with cannabis leaf geometric pattern inside, emerald green shield, gold leaf outline, trust and compliance brand mark, legal cannabis management software, premium badge style",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_07","phase":"phase1_logos","subfolder":"icon_only","name":"icon_cm_monogram",
+ "prompt":"CannaManage monogram mark, interlocked letters C and M with cannabis leaf negative space between them, geometric precision, deep emerald green, gold accent, premium brand monogram, white background, luxury SaaS identity",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_08","phase":"phase1_logos","subfolder":"icon_only","name":"icon_hexagon_leaf",
+ "prompt":"CannaManage icon, hexagon shape containing stylized cannabis leaf formed from clean lines, emerald green hexagon with dark outline, gold accent dot nodes at leaf tips, geometric cannabis brand mark, tech-forward minimal style",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_09","phase":"phase1_logos","subfolder":"icon_only","name":"icon_growth_chart",
+ "prompt":"CannaManage icon, upward growing cannabis plant silhouette that transforms into an ascending bar chart at top, emerald to gold gradient, business growth metaphor for cannabis industry management, modern flat icon design",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ic_10","phase":"phase1_logos","subfolder":"icon_only","name":"icon_infinity_leaf",
+ "prompt":"CannaManage brand mark, infinity loop symbol where the loops form two cannabis leaf shapes, emerald green line on white, continuous management and compliance cycle concept, clean modern geometric, premium SaaS logo mark",
+ "width":512,"height":512,"steps":4},
+```
+
+#### Horizontal Lockups — light and dark (1024×256 each)
+
+```python
+{"id":"p1_lh_01","phase":"phase1_logos","subfolder":"lockup_horizontal","name":"lockup_horiz_light",
+ "prompt":"CannaManage horizontal logo lockup, icon mark on left with wordmark text on right, light background version, deep emerald green colors, professional cannabis management SaaS, clean horizontal brand layout, premium company logo",
+ "width":1024,"height":256,"steps":4},
+
+{"id":"p1_lh_02","phase":"phase1_logos","subfolder":"lockup_horizontal","name":"lockup_horiz_dark",
+ "prompt":"CannaManage horizontal logo lockup, icon mark on left with wordmark text on right, dark charcoal background version, white and emerald green logo, reversed color scheme, premium cannabis SaaS brand, horizontal layout",
+ "width":1024,"height":256,"steps":4},
+
+{"id":"p1_lh_03","phase":"phase1_logos","subfolder":"lockup_horizontal","name":"lockup_horiz_emerald_bg",
+ "prompt":"CannaManage horizontal logo lockup, white logo on deep emerald green background, horizontal icon plus wordmark layout, brand banner version, premium cannabis management platform, professional SaaS brand",
+ "width":1024,"height":256,"steps":4},
+
+{"id":"p1_lh_04","phase":"phase1_logos","subfolder":"lockup_horizontal","name":"lockup_horiz_mono",
+ "prompt":"CannaManage horizontal logo lockup, monochrome single-color version, all black on white, horizontal icon plus wordmark, professional print-ready version, cannabis SaaS brand",
+ "width":1024,"height":256,"steps":4},
+```
+
+#### Stacked Lockups — 4 variations (512×512 each)
+
+```python
+{"id":"p1_ls_01","phase":"phase1_logos","subfolder":"lockup_stacked","name":"lockup_stacked_light",
+ "prompt":"CannaManage stacked logo lockup, icon centered above wordmark text, light white background, emerald green brand colors, square format, professional cannabis management SaaS centered layout",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ls_02","phase":"phase1_logos","subfolder":"lockup_stacked","name":"lockup_stacked_dark",
+ "prompt":"CannaManage stacked logo lockup, icon centered above wordmark text, dark charcoal background, white and green logo, square format reversed, cannabis SaaS brand dark version",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ls_03","phase":"phase1_logos","subfolder":"lockup_stacked","name":"lockup_stacked_emerald",
+ "prompt":"CannaManage stacked logo lockup, white icon and wordmark on emerald green background, centered square format, brand full-color version, cannabis management platform",
+ "width":512,"height":512,"steps":4},
+
+{"id":"p1_ls_04","phase":"phase1_logos","subfolder":"lockup_stacked","name":"lockup_stacked_mono",
+ "prompt":"CannaManage stacked logo lockup, monochrome all-black version on white, icon above wordmark, square format, print-ready logo, cannabis SaaS brand",
+ "width":512,"height":512,"steps":4},
+```
+
+#### Favicon crops — 8 variations (256×256 each)
+
+```python
+{"id":"p1_fv_01","phase":"phase1_logos","subfolder":"favicon","name":"favicon_emerald_leaf",
+ "prompt":"CannaManage favicon, 256x256 square app icon, emerald green background, white geometric cannabis leaf icon, rounded square format, mobile app icon style, clean minimal",
+ "width":256,"height":256,"steps":4},
+
+{"id":"p1_fv_02","phase":"phase1_logos","subfolder":"favicon","name":"favicon_dark_circuit",
+ "prompt":"CannaManage favicon, dark charcoal square background, emerald circuit-leaf icon, 256x256 app icon, sharp corners, professional SaaS favicon",
+ "width":256,"height":256,"steps":4},
+
+{"id":"p1_fv_03","phase":"phase1_logos","subfolder":"favicon","name":"favicon_white_green",
+ "prompt":"CannaManage favicon, white background, deep green CM monogram or leaf icon, 256x256 square, minimal browser favicon style",
+ "width":256,"height":256,"steps":4},
+
+{"id":"p1_fv_04","phase":"phase1_logos","subfolder":"favicon","name":"favicon_gold_dark",
+ "prompt":"CannaManage favicon, dark background, gold amber cannabis management icon mark, 256x256 premium app icon, warm gold on charcoal, luxury SaaS brand",
+ "width":256,"height":256,"steps":4},
+
+{"id":"p1_fv_05","phase":"phase1_logos","subfolder":"favicon","name":"favicon_gradient_green",
+ "prompt":"CannaManage favicon, forest to emerald green gradient background, white geometric icon, 256x256 square, modern SaaS app icon with subtle gradient",
+ "width":256,"height":256,"steps":4},
+
+{"id":"p1_fv_06","phase":"phase1_logos","subfolder":"favicon","name":"favicon_outline_style",
+ "prompt":"CannaManage favicon, white background, outline-only emerald green cannabis leaf circuit icon, thin line illustration style, 256x256, minimalist favicon",
+ "width":256,"height":256,"steps":4},
+
+{"id":"p1_fv_07","phase":"phase1_logos","subfolder":"favicon","name":"favicon_rounded_modern",
+ "prompt":"CannaManage favicon, iOS-style rounded square app icon, emerald green gradient background, white leaf-tech brand mark, 256x256, premium mobile app icon design",
+ "width":256,"height":256,"steps":4},
+
+{"id":"p1_fv_08","phase":"phase1_logos","subfolder":"favicon","name":"favicon_badge_style",
+ "prompt":"CannaManage favicon, badge-style icon with thin border ring, emerald center with white CM letters, 256x256 square, compliance software brand favicon",
+ "width":256,"height":256,"steps":4},
+```
+
+---
+
+### PHASE 2 — Banner Suite (50 assets)
+
+#### Hero Website Banners — 5 concepts (1920×1080)
+
+```python
+{"id":"p2_hw_01","phase":"phase2_banners","subfolder":"hero_website","name":"hero_dashboard_showcase",
+ "prompt":"CannaManage website hero banner 1920x1080, professional cannabis business management SaaS platform, dark charcoal background, emerald green UI dashboard mockup floating on right, bold headline area left, gold accent lines, clean tech aesthetic, enterprise software marketing banner",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p2_hw_02","phase":"phase2_banners","subfolder":"hero_website","name":"hero_compliance_trust",
+ "prompt":"CannaManage website hero banner, compliance and trust theme, deep green gradient background, shield and checkmark iconography, professional typography area, cannabis regulatory compliance management, clean white text area, subtle cannabis leaf geometric pattern overlay, 1920x1080",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p2_hw_03","phase":"phase2_banners","subfolder":"hero_website","name":"hero_analytics_data",
+ "prompt":"CannaManage website hero banner, analytics and business intelligence theme, dark background with glowing data visualization charts in emerald and gold, cannabis industry business metrics, modern tech company marketing image, abstract data flowing design, 1920x1080",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p2_hw_04","phase":"phase2_banners","subfolder":"hero_website","name":"hero_team_enterprise",
+ "prompt":"CannaManage website hero banner, enterprise team productivity theme, split design with emerald left panel and clean white right panel, professional cannabis business management platform messaging area, modern split-screen SaaS marketing banner, geometric accents, 1920x1080",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p2_hw_05","phase":"phase2_banners","subfolder":"hero_website","name":"hero_nature_tech",
+ "prompt":"CannaManage website hero banner, nature meets technology theme, abstract cannabis plant growing from circuit board visualization, emerald green organic forms with gold tech circuit lines, premium brand storytelling banner, dark sophisticated background, 1920x1080",
+ "width":1920,"height":1080,"steps":4},
+```
+
+#### LinkedIn Banners — 6 variations (1584×396)
+
+```python
+{"id":"p2_li_01","phase":"phase2_banners","subfolder":"linkedin","name":"linkedin_corporate_green",
+ "prompt":"CannaManage LinkedIn company banner, deep emerald green background, white CannaManage wordmark centered, professional cannabis business management SaaS tagline, clean minimal corporate LinkedIn header, 1584x396 proportions",
+ "width":1584,"height":396,"steps":4},
+
+{"id":"p2_li_02","phase":"phase2_banners","subfolder":"linkedin","name":"linkedin_dark_gold",
+ "prompt":"CannaManage LinkedIn banner, dark charcoal background with gold accent stripe at bottom, company name and brief descriptor, cannabis compliance management platform, professional enterprise software company banner, LinkedIn header design",
+ "width":1584,"height":396,"steps":4},
+
+{"id":"p2_li_03","phase":"phase2_banners","subfolder":"linkedin","name":"linkedin_pattern_overlay",
+ "prompt":"CannaManage LinkedIn banner, emerald green base with subtle hexagonal cannabis molecule pattern overlay, semi-transparent pattern, company branding prominent, SaaS platform, wide horizontal LinkedIn company page header",
+ "width":1584,"height":396,"steps":4},
+
+{"id":"p2_li_04","phase":"phase2_banners","subfolder":"linkedin","name":"linkedin_split_design",
+ "prompt":"CannaManage LinkedIn banner, split design left dark right emerald, diagonal split line, cannabis management platform branding, professional SaaS company header, clean sharp design, LinkedIn profile banner 1584x396",
+ "width":1584,"height":396,"steps":4},
+
+{"id":"p2_li_05","phase":"phase2_banners","subfolder":"linkedin","name":"linkedin_metrics_banner",
+ "prompt":"CannaManage LinkedIn banner showing key business metrics and KPI numbers for cannabis industry, data-forward professional banner, emerald green with gold numbers, SaaS analytics platform positioning, LinkedIn company page header",
+ "width":1584,"height":396,"steps":4},
+
+{"id":"p2_li_06","phase":"phase2_banners","subfolder":"linkedin","name":"linkedin_gradient_minimal",
+ "prompt":"CannaManage LinkedIn banner, forest green to emerald gradient background, minimal white brand name and tagline only, ultra-clean professional company banner, premium SaaS positioning, LinkedIn header",
+ "width":1584,"height":396,"steps":4},
+```
+
+#### Twitter/X Headers — 6 variations (1500×500)
+
+```python
+{"id":"p2_tw_01","phase":"phase2_banners","subfolder":"twitter_x","name":"twitter_bold_emerald",
+ "prompt":"CannaManage Twitter X header banner, bold emerald green full bleed background, large white brand name, cannabis management platform tagline, strong social media brand presence, 1500x500",
+ "width":1500,"height":500,"steps":4},
+
+{"id":"p2_tw_02","phase":"phase2_banners","subfolder":"twitter_x","name":"twitter_dark_pattern",
+ "prompt":"CannaManage Twitter header, dark charcoal with subtle cannabis geometric pattern, emerald and gold accent colors, professional SaaS brand social header, 1500x500 proportions",
+ "width":1500,"height":500,"steps":4},
+
+{"id":"p2_tw_03","phase":"phase2_banners","subfolder":"twitter_x","name":"twitter_product_hint",
+ "prompt":"CannaManage Twitter header, dark background with glimpse of dashboard interface, cannabis business management software product preview, professional tech company social media header, 1500x500",
+ "width":1500,"height":500,"steps":4},
+
+{"id":"p2_tw_04","phase":"phase2_banners","subfolder":"twitter_x","name":"twitter_nature_abstract",
+ "prompt":"CannaManage Twitter header, abstract cannabis plant growing into data streams, green to dark gradient, artistic tech company social header, organic meets digital aesthetic, 1500x500",
+ "width":1500,"height":500,"steps":4},
+
+{"id":"p2_tw_05","phase":"phase2_banners","subfolder":"twitter_x","name":"twitter_community",
+ "prompt":"CannaManage Twitter header, cannabis business community theme, connected nodes network visualization in emerald green, SaaS platform connecting cannabis businesses, professional social banner, 1500x500",
+ "width":1500,"height":500,"steps":4},
+
+{"id":"p2_tw_06","phase":"phase2_banners","subfolder":"twitter_x","name":"twitter_white_clean",
+ "prompt":"CannaManage Twitter header, clean white background, emerald green brand elements only, ultra-professional minimal social media header, cannabis management SaaS, 1500x500",
+ "width":1500,"height":500,"steps":4},
+```
+
+#### Facebook Covers — 6 variations (820×312)
+
+```python
+{"id":"p2_fb_01","phase":"phase2_banners","subfolder":"facebook_cover","name":"facebook_primary_brand",
+ "prompt":"CannaManage Facebook cover photo, primary brand colors emerald and charcoal, professional cannabis business management company cover, centered branding, SaaS platform social presence, 820x312",
+ "width":820,"height":312,"steps":4},
+
+{"id":"p2_fb_02","phase":"phase2_banners","subfolder":"facebook_cover","name":"facebook_dark_professional",
+ "prompt":"CannaManage Facebook cover, dark sophisticated background, white and gold brand elements, enterprise cannabis management platform, premium company social media cover, 820x312",
+ "width":820,"height":312,"steps":4},
+
+{"id":"p2_fb_03","phase":"phase2_banners","subfolder":"facebook_cover","name":"facebook_compliance_theme",
+ "prompt":"CannaManage Facebook cover, cannabis regulatory compliance theme, shield and verification iconography, emerald green professional, compliance management SaaS company cover photo, 820x312",
+ "width":820,"height":312,"steps":4},
+
+{"id":"p2_fb_04","phase":"phase2_banners","subfolder":"facebook_cover","name":"facebook_product_launch",
+ "prompt":"CannaManage Facebook cover, product launch announcement style, bold emerald with gold accents, exciting software release visual, cannabis management platform new features, dynamic tech company cover, 820x312",
+ "width":820,"height":312,"steps":4},
+
+{"id":"p2_fb_05","phase":"phase2_banners","subfolder":"facebook_cover","name":"facebook_industry_leader",
+ "prompt":"CannaManage Facebook cover, industry leadership positioning, cannabis business management market leader visual, professional authoritative design, emerald green with subtle gold crown element, SaaS platform, 820x312",
+ "width":820,"height":312,"steps":4},
+
+{"id":"p2_fb_06","phase":"phase2_banners","subfolder":"facebook_cover","name":"facebook_seasonal_spring",
+ "prompt":"CannaManage Facebook cover, spring fresh brand refresh visual, bright emerald with sage green organic elements, cannabis growth season theme, professional seasonal company cover, SaaS platform, 820x312",
+ "width":820,"height":312,"steps":4},
+```
+
+#### Google Display Ads — 4 concepts × 4 sizes (16 assets)
+
+```python
+# Concept A: "Simplify Compliance" — 4 sizes
+{"id":"p2_ga_01a","phase":"phase2_banners","subfolder":"google_display","name":"gad_compliance_728x90",
+ "prompt":"CannaManage Google display ad leaderboard 728x90, simplify cannabis compliance theme, emerald green button, white background, professional B2B ad, cannabis management software CTA",
+ "width":728,"height":90,"steps":4},
+{"id":"p2_ga_01b","phase":"phase2_banners","subfolder":"google_display","name":"gad_compliance_300x250",
+ "prompt":"CannaManage Google display ad medium rectangle 300x250, simplify cannabis compliance theme, emerald green design, bold headline, professional SaaS ad creative, cannabis management platform",
+ "width":300,"height":250,"steps":4},
+{"id":"p2_ga_01c","phase":"phase2_banners","subfolder":"google_display","name":"gad_compliance_160x600",
+ "prompt":"CannaManage Google display ad wide skyscraper 160x600, simplify cannabis compliance theme, tall vertical format, emerald green, professional B2B cannabis software ad",
+ "width":160,"height":600,"steps":4},
+{"id":"p2_ga_01d","phase":"phase2_banners","subfolder":"google_display","name":"gad_compliance_320x50",
+ "prompt":"CannaManage Google display ad mobile banner 320x50, simplify compliance theme, minimal mobile ad, emerald green, cannabis management SaaS",
+ "width":320,"height":50,"steps":4},
+
+# Concept B: "Manage Everything" — 4 sizes
+{"id":"p2_ga_02a","phase":"phase2_banners","subfolder":"google_display","name":"gad_manage_728x90",
+ "prompt":"CannaManage Google display ad 728x90, manage everything cannabis business theme, dashboard preview hint, dark charcoal professional ad, SaaS platform leaderboard banner",
+ "width":728,"height":90,"steps":4},
+{"id":"p2_ga_02b","phase":"phase2_banners","subfolder":"google_display","name":"gad_manage_300x250",
+ "prompt":"CannaManage Google display ad 300x250, manage everything cannabis operations theme, product dashboard glimpse, emerald dark professional rectangle ad, cannabis management SaaS",
+ "width":300,"height":250,"steps":4},
+{"id":"p2_ga_02c","phase":"phase2_banners","subfolder":"google_display","name":"gad_manage_160x600",
+ "prompt":"CannaManage Google display skyscraper 160x600, manage cannabis business operations theme, vertical product feature list visual, emerald professional tall ad",
+ "width":160,"height":600,"steps":4},
+{"id":"p2_ga_02d","phase":"phase2_banners","subfolder":"google_display","name":"gad_manage_320x50",
+ "prompt":"CannaManage mobile banner 320x50, manage cannabis business theme, ultra-minimal mobile ad strip, brand colors",
+ "width":320,"height":50,"steps":4},
+
+# Concept C: "Grow Your Business" — 4 sizes
+{"id":"p2_ga_03a","phase":"phase2_banners","subfolder":"google_display","name":"gad_grow_728x90",
+ "prompt":"CannaManage Google ad 728x90, grow your cannabis business theme, upward growth arrow with cannabis leaf, gold and emerald, professional B2B leaderboard ad",
+ "width":728,"height":90,"steps":4},
+{"id":"p2_ga_03b","phase":"phase2_banners","subfolder":"google_display","name":"gad_grow_300x250",
+ "prompt":"CannaManage Google ad 300x250, cannabis business growth theme, ascending graph with emerald plant growth visual, professional SaaS rectangle ad",
+ "width":300,"height":250,"steps":4},
+{"id":"p2_ga_03c","phase":"phase2_banners","subfolder":"google_display","name":"gad_grow_160x600",
+ "prompt":"CannaManage skyscraper ad 160x600, cannabis business growth vertical story, plant growing upward through data visualization, emerald green tall display ad",
+ "width":160,"height":600,"steps":4},
+{"id":"p2_ga_03d","phase":"phase2_banners","subfolder":"google_display","name":"gad_grow_320x50",
+ "prompt":"CannaManage mobile ad 320x50, grow cannabis business, minimal mobile strip ad emerald green",
+ "width":320,"height":50,"steps":4},
+
+# Concept D: "Free Trial CTA" — 4 sizes
+{"id":"p2_ga_04a","phase":"phase2_banners","subfolder":"google_display","name":"gad_trial_728x90",
+ "prompt":"CannaManage Google ad 728x90, free trial call to action, bold gold CTA button, emerald professional leaderboard, cannabis management SaaS free trial offer ad",
+ "width":728,"height":90,"steps":4},
+{"id":"p2_ga_04b","phase":"phase2_banners","subfolder":"google_display","name":"gad_trial_300x250",
+ "prompt":"CannaManage Google ad 300x250, free trial offer, gold button emerald design, cannabis business management platform trial CTA rectangle ad",
+ "width":300,"height":250,"steps":4},
+{"id":"p2_ga_04c","phase":"phase2_banners","subfolder":"google_display","name":"gad_trial_160x600",
+ "prompt":"CannaManage skyscraper ad 160x600, free trial CTA vertical ad, gold call to action button, emerald green cannabis SaaS platform",
+ "width":160,"height":600,"steps":4},
+{"id":"p2_ga_04d","phase":"phase2_banners","subfolder":"google_display","name":"gad_trial_320x50",
+ "prompt":"CannaManage mobile ad 320x50, free trial minimal mobile strip, gold CTA emerald brand",
+ "width":320,"height":50,"steps":4},
+```
+
+#### App Store Feature Graphics — 4 variations (1024×500)
+
+```python
+{"id":"p2_as_01","phase":"phase2_banners","subfolder":"app_store","name":"appstore_hero_dashboard",
+ "prompt":"CannaManage app store feature graphic 1024x500, cannabis management app showcase, dark background with app dashboard UI preview, emerald green interface elements, professional mobile app store hero image, SaaS platform app",
+ "width":1024,"height":500,"steps":4},
+
+{"id":"p2_as_02","phase":"phase2_banners","subfolder":"app_store","name":"appstore_compliance_features",
+ "prompt":"CannaManage app store feature graphic, compliance and legal features highlight, shield icons and checkmarks, emerald green professional design, cannabis compliance app, feature screenshot graphic 1024x500",
+ "width":1024,"height":500,"steps":4},
+
+{"id":"p2_as_03","phase":"phase2_banners","subfolder":"app_store","name":"appstore_analytics_focus",
+ "prompt":"CannaManage app store graphic 1024x500, business analytics and reporting feature highlight, dashboard charts and graphs preview, gold and emerald data visualization, cannabis business intelligence app",
+ "width":1024,"height":500,"steps":4},
+
+{"id":"p2_as_04","phase":"phase2_banners","subfolder":"app_store","name":"appstore_team_management",
+ "prompt":"CannaManage app store graphic 1024x500, team and staff management feature, connected team nodes visualization, emerald green professional, cannabis dispensary team management app feature graphic",
+ "width":1024,"height":500,"steps":4},
+```
+
+#### Email Header Banners — 8 variations (600×200)
+
+```python
+{"id":"p2_em_01","phase":"phase2_banners","subfolder":"email_header","name":"email_primary_brand",
+ "prompt":"CannaManage email header banner 600x200, primary brand header for email newsletters, emerald green with white logo area, professional email marketing header, cannabis management SaaS",
+ "width":600,"height":200,"steps":4},
+
+{"id":"p2_em_02","phase":"phase2_banners","subfolder":"email_header","name":"email_welcome",
+ "prompt":"CannaManage welcome email header 600x200, warm welcome theme, emerald and sage green gradient, onboarding email banner, cannabis SaaS platform new user email header",
+ "width":600,"height":200,"steps":4},
+
+{"id":"p2_em_03","phase":"phase2_banners","subfolder":"email_header","name":"email_product_update",
+ "prompt":"CannaManage product update email header 600x200, new features announcement theme, gold accent notification style, cannabis management software update email banner",
+ "width":600,"height":200,"steps":4},
+
+{"id":"p2_em_04","phase":"phase2_banners","subfolder":"email_header","name":"email_compliance_alert",
+ "prompt":"CannaManage compliance alert email header 600x200, urgent compliance notification theme, amber gold accent on dark, cannabis regulatory update email header, professional alert banner",
+ "width":600,"height":200,"steps":4},
+
+{"id":"p2_em_05","phase":"phase2_banners","subfolder":"email_header","name":"email_monthly_report",
+ "prompt":"CannaManage monthly report email header 600x200, data and analytics theme, charts and metrics preview, emerald professional, cannabis business monthly summary email banner",
+ "width":600,"height":200,"steps":4},
+
+{"id":"p2_em_06","phase":"phase2_banners","subfolder":"email_header","name":"email_trial_ending",
+ "prompt":"CannaManage trial ending email header 600x200, urgency CTA theme, gold highlight on dark, cannabis management platform trial expiry email banner, convert to paid",
+ "width":600,"height":200,"steps":4},
+
+{"id":"p2_em_07","phase":"phase2_banners","subfolder":"email_header","name":"email_invoice",
+ "prompt":"CannaManage invoice and billing email header 600x200, clean minimal professional, white and emerald, cannabis SaaS billing email header, enterprise professional",
+ "width":600,"height":200,"steps":4},
+
+{"id":"p2_em_08","phase":"phase2_banners","subfolder":"email_header","name":"email_dark_premium",
+ "prompt":"CannaManage dark premium email header 600x200, dark charcoal with gold and emerald brand elements, VIP customer or enterprise tier email, cannabis management platform premium email header",
+ "width":600,"height":200,"steps":4},
+```
+
+---
+
+### PHASE 3 — Social Media Asset Pack (60 assets)
+
+#### Instagram Square Posts — 10 feature highlights (1080×1080)
+
+```python
+{"id":"p3_ig_01","phase":"phase3_social","subfolder":"instagram_square","name":"insta_inventory_mgmt",
+ "prompt":"CannaManage Instagram post 1080x1080, inventory management feature highlight, cannabis stock tracking dashboard visualization, emerald green UI elements, bold feature announcement, professional SaaS social post, clean white and dark design",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_02","phase":"phase3_social","subfolder":"instagram_square","name":"insta_compliance_track",
+ "prompt":"CannaManage Instagram post 1080x1080, compliance tracking feature, regulatory checklist visualization, shield and checkmark icons, emerald and gold, cannabis compliance SaaS social media post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_03","phase":"phase3_social","subfolder":"instagram_square","name":"insta_analytics_dash",
+ "prompt":"CannaManage Instagram post 1080x1080, analytics dashboard feature, business intelligence data visualization, emerald charts and graphs on dark background, cannabis business analytics social post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_04","phase":"phase3_social","subfolder":"instagram_square","name":"insta_staff_scheduling",
+ "prompt":"CannaManage Instagram post 1080x1080, staff scheduling feature, team calendar and shift management visualization, cannabis dispensary staff management, clean emerald professional social post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_05","phase":"phase3_social","subfolder":"instagram_square","name":"insta_pos_integration",
+ "prompt":"CannaManage Instagram post 1080x1080, POS system integration feature, cannabis point-of-sale connection visualization, integration nodes and arrows, emerald and gold tech visualization social post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_06","phase":"phase3_social","subfolder":"instagram_square","name":"insta_reporting",
+ "prompt":"CannaManage Instagram post 1080x1080, automated reporting feature, beautiful report document preview, cannabis business reporting, emerald professional document visualization social post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_07","phase":"phase3_social","subfolder":"instagram_square","name":"insta_multi_location",
+ "prompt":"CannaManage Instagram post 1080x1080, multi-location management feature, cannabis dispensary chain management visualization, location pins on map with connecting emerald lines, SaaS multi-site management post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_08","phase":"phase3_social","subfolder":"instagram_square","name":"insta_mobile_app",
+ "prompt":"CannaManage Instagram post 1080x1080, mobile app feature highlight, iPhone and Android app preview mockup, cannabis management on-the-go, emerald green app UI, professional mobile SaaS social post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_09","phase":"phase3_social","subfolder":"instagram_square","name":"insta_security",
+ "prompt":"CannaManage Instagram post 1080x1080, enterprise security feature, data protection and encryption visualization, shield with lock icon, cannabis business data security, dark professional emerald security post",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_ig_10","phase":"phase3_social","subfolder":"instagram_square","name":"insta_brand_story",
+ "prompt":"CannaManage Instagram brand story post 1080x1080, company mission and vision, cannabis industry empowerment theme, beautiful abstract plant and technology fusion illustration, emerald and gold, inspiring brand post",
+ "width":1080,"height":1080,"steps":4},
+```
+
+#### Instagram Stories — 8 variations (1080×1920)
+
+```python
+{"id":"p3_st_01","phase":"phase3_social","subfolder":"instagram_story","name":"story_onboarding",
+ "prompt":"CannaManage Instagram story 1080x1920, onboarding tutorial slide, step-by-step cannabis management platform setup, emerald green vertical mobile design, swipe up CTA, professional SaaS story template",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p3_st_02","phase":"phase3_social","subfolder":"instagram_story","name":"story_feature_announce",
+ "prompt":"CannaManage Instagram story 1080x1920, new feature announcement, bold emerald vertical design, cannabis software update story, gold accent highlight, tap to learn more CTA",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p3_st_03","phase":"phase3_social","subfolder":"instagram_story","name":"story_stat_highlight",
+ "prompt":"CannaManage Instagram story 1080x1920, industry statistic highlight, large bold number with cannabis industry stat, dark background gold number emerald accent, data-driven story template",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p3_st_04","phase":"phase3_social","subfolder":"instagram_story","name":"story_customer_quote",
+ "prompt":"CannaManage Instagram story 1080x1920, customer testimonial quote story, elegant quote typography on emerald background, cannabis business owner testimonial, premium brand testimonial vertical story",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p3_st_05","phase":"phase3_social","subfolder":"instagram_story","name":"story_poll_template",
+ "prompt":"CannaManage Instagram story 1080x1920, interactive poll template, cannabis industry question visual, dark professional story background, poll options styled in emerald and gold, engagement story design",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p3_st_06","phase":"phase3_social","subfolder":"instagram_story","name":"story_countdown",
+ "prompt":"CannaManage Instagram story 1080x1920, countdown timer event template, launch or deadline countdown visual, bold dramatic dark background with gold countdown element, cannabis SaaS event story",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p3_st_07","phase":"phase3_social","subfolder":"instagram_story","name":"story_tips_series",
+ "prompt":"CannaManage Instagram story 1080x1920, cannabis compliance tip of the day template, bright educational story, numbered tip format, sage green professional, cannabis regulatory guidance story series",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p3_st_08","phase":"phase3_social","subfolder":"instagram_story","name":"story_free_trial",
+ "prompt":"CannaManage Instagram story 1080x1920, free trial CTA story, bold gold call to action on dark emerald, cannabis management platform sign up story, strong conversion story design",
+ "width":1080,"height":1920,"steps":4},
+```
+
+#### LinkedIn Post Graphics — 8 variations (1200×627)
+
+```python
+{"id":"p3_lp_01","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_thought_leader",
+ "prompt":"CannaManage LinkedIn post graphic 1200x627, thought leadership article header, cannabis industry insights theme, professional editorial design, emerald brand with white content area, SaaS company article image",
+ "width":1200,"height":627,"steps":4},
+
+{"id":"p3_lp_02","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_product_demo",
+ "prompt":"CannaManage LinkedIn post 1200x627, product demo announcement, screenshot preview teaser, cannabis management platform demo invitation, emerald professional post graphic, enterprise SaaS LinkedIn post",
+ "width":1200,"height":627,"steps":4},
+
+{"id":"p3_lp_03","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_hiring",
+ "prompt":"CannaManage LinkedIn hiring post 1200x627, we are hiring banner, team growth announcement, professional cannabis tech company hiring graphic, emerald and gold, clean company culture post",
+ "width":1200,"height":627,"steps":4},
+
+{"id":"p3_lp_04","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_industry_stat",
+ "prompt":"CannaManage LinkedIn post 1200x627, cannabis industry statistic infographic, large bold number, data source cited, professional B2B data post, emerald green LinkedIn post graphic",
+ "width":1200,"height":627,"steps":4},
+
+{"id":"p3_lp_05","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_partnership",
+ "prompt":"CannaManage LinkedIn partnership announcement post 1200x627, two brand logos connected, strategic partnership visual, cannabis tech ecosystem, professional announcement graphic emerald",
+ "width":1200,"height":627,"steps":4},
+
+{"id":"p3_lp_06","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_webinar",
+ "prompt":"CannaManage LinkedIn webinar promotion post 1200x627, cannabis compliance webinar announcement, date and topic visual, professional event promotion graphic, emerald dark design",
+ "width":1200,"height":627,"steps":4},
+
+{"id":"p3_lp_07","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_case_study",
+ "prompt":"CannaManage LinkedIn case study post 1200x627, customer success story preview, cannabis dispensary success metrics highlighted, gold numbers on dark, professional B2B case study promotional graphic",
+ "width":1200,"height":627,"steps":4},
+
+{"id":"p3_lp_08","phase":"phase3_social","subfolder":"linkedin_post","name":"linkedin_award",
+ "prompt":"CannaManage LinkedIn award announcement post 1200x627, award or recognition announcement, gold trophy or badge element, cannabis tech industry recognition, celebratory professional post graphic",
+ "width":1200,"height":627,"steps":4},
+```
+
+#### Feature Announcement Cards — 10 product features (1080×1080)
+
+```python
+{"id":"p3_fc_01","phase":"phase3_social","subfolder":"feature_cards","name":"feature_inventory_scan",
+ "prompt":"CannaManage feature card 1080x1080, barcode scanning inventory management, cannabis product scan interface, mobile scanning visualization, emerald UI feature card, product feature announcement social graphic",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_02","phase":"phase3_social","subfolder":"feature_cards","name":"feature_auto_compliance",
+ "prompt":"CannaManage feature card 1080x1080, automated compliance reporting, robot or automation icon with compliance checklist, cannabis regulatory automation, emerald professional feature announcement",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_03","phase":"phase3_social","subfolder":"feature_cards","name":"feature_real_time_alerts",
+ "prompt":"CannaManage feature card 1080x1080, real-time alerts and notifications, bell notification with cannabis threshold alerts, gold alert accent on dark, compliance boundary notification feature",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_04","phase":"phase3_social","subfolder":"feature_cards","name":"feature_member_portal",
+ "prompt":"CannaManage feature card 1080x1080, member self-service portal, cannabis club member login interface, clean emerald member management feature, user portal visualization",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_05","phase":"phase3_social","subfolder":"feature_cards","name":"feature_api_integrations",
+ "prompt":"CannaManage feature card 1080x1080, API integrations ecosystem, connected software logos with CannaManage hub, cannabis tech stack integration visualization, emerald connection diagram feature card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_06","phase":"phase3_social","subfolder":"feature_cards","name":"feature_batch_tracking",
+ "prompt":"CannaManage feature card 1080x1080, batch and lot tracking feature, cannabis product chain of custody visualization, numbered batch tracking flow, professional compliance feature card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_07","phase":"phase3_social","subfolder":"feature_cards","name":"feature_document_mgmt",
+ "prompt":"CannaManage feature card 1080x1080, document management system, cannabis licensing and permit documents organized, folder and document icons in emerald, digital document management feature",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_08","phase":"phase3_social","subfolder":"feature_cards","name":"feature_role_permissions",
+ "prompt":"CannaManage feature card 1080x1080, role-based permissions feature, user role hierarchy visualization, shield with user silhouettes, cannabis team access control, dark professional feature card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_09","phase":"phase3_social","subfolder":"feature_cards","name":"feature_export_reports",
+ "prompt":"CannaManage feature card 1080x1080, one-click export and reporting, PDF report generation from cannabis data, download arrow with beautiful report preview, emerald feature announcement card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_fc_10","phase":"phase3_social","subfolder":"feature_cards","name":"feature_audit_trail",
+ "prompt":"CannaManage feature card 1080x1080, complete audit trail feature, cannabis transaction history timeline visualization, chronological log entries, compliance audit visualization, professional dark feature card",
+ "width":1080,"height":1080,"steps":4},
+```
+
+#### Testimonial Cards — 6 styles (1080×1080)
+
+```python
+{"id":"p3_tc_01","phase":"phase3_social","subfolder":"testimonial_cards","name":"testimonial_dark_elegant",
+ "prompt":"CannaManage testimonial card 1080x1080, dark charcoal elegant quote card, gold quotation marks, customer name and title, cannabis business owner testimonial, premium quote card design",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_tc_02","phase":"phase3_social","subfolder":"testimonial_cards","name":"testimonial_emerald_bold",
+ "prompt":"CannaManage testimonial card 1080x1080, bold emerald green background, white quote text, customer review of cannabis management SaaS, bold confident testimonial design",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_tc_03","phase":"phase3_social","subfolder":"testimonial_cards","name":"testimonial_light_minimal",
+ "prompt":"CannaManage testimonial card 1080x1080, light white minimal quote card, emerald accent line, clean professional customer testimonial, cannabis dispensary owner review, minimal elegant design",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_tc_04","phase":"phase3_social","subfolder":"testimonial_cards","name":"testimonial_star_rating",
+ "prompt":"CannaManage testimonial card 1080x1080, 5-star rating testimonial card, gold stars prominently displayed, customer quote below, cannabis management platform review, star rating testimonial design",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_tc_05","phase":"phase3_social","subfolder":"testimonial_cards","name":"testimonial_split_design",
+ "prompt":"CannaManage testimonial card 1080x1080, split design half dark half emerald, quote on dark side, customer info on emerald side, cannabis SaaS testimonial split layout",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_tc_06","phase":"phase3_social","subfolder":"testimonial_cards","name":"testimonial_gradient",
+ "prompt":"CannaManage testimonial card 1080x1080, forest to emerald gradient background, white elegant quote text, customer testimonial cannabis management platform, gradient testimonial card",
+ "width":1080,"height":1080,"steps":4},
+```
+
+#### Stat/Data Cards — 8 cannabis industry statistics (1080×1080)
+
+```python
+{"id":"p3_sc_01","phase":"phase3_social","subfolder":"stat_cards","name":"stat_market_size",
+ "prompt":"CannaManage stat card 1080x1080, cannabis market size statistic, large bold dollar amount like 50 billion USD, emerald gold number on dark background, cannabis industry market data social card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_sc_02","phase":"phase3_social","subfolder":"stat_cards","name":"stat_compliance_cost",
+ "prompt":"CannaManage stat card 1080x1080, compliance cost reduction statistic, percentage savings with management software, gold percentage number, cannabis business cost savings data card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_sc_03","phase":"phase3_social","subfolder":"stat_cards","name":"stat_time_savings",
+ "prompt":"CannaManage stat card 1080x1080, hours saved per week statistic, clock icon with bold number, cannabis dispensary operational time savings, emerald professional data card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_sc_04","phase":"phase3_social","subfolder":"stat_cards","name":"stat_dispensary_growth",
+ "prompt":"CannaManage stat card 1080x1080, dispensary industry growth rate, upward arrow with percentage growth, cannabis retail market growth stat, gold growth number on dark card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_sc_05","phase":"phase3_social","subfolder":"stat_cards","name":"stat_compliance_fines",
+ "prompt":"CannaManage stat card 1080x1080, compliance violation fine amounts, cannabis regulatory penalty warning stat, amber warning colors, avoid fines messaging, data card",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_sc_06","phase":"phase3_social","subfolder":"stat_cards","name":"stat_customer_count",
+ "prompt":"CannaManage stat card 1080x1080, number of cannabis businesses managed, large customer count statistic, emerald green social proof data card, platform traction metric",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_sc_07","phase":"phase3_social","subfolder":"stat_cards","name":"stat_roi_metric",
+ "prompt":"CannaManage stat card 1080x1080, ROI return on investment metric for cannabis management software, large gold ROI percentage, business value data card, SaaS ROI statistic",
+ "width":1080,"height":1080,"steps":4},
+
+{"id":"p3_sc_08","phase":"phase3_social","subfolder":"stat_cards","name":"stat_legal_markets",
+ "prompt":"CannaManage stat card 1080x1080, number of legal cannabis markets worldwide, globe icon with country count, cannabis legalization data, emerald global market stat card",
+ "width":1080,"height":1080,"steps":4},
+```
+
+---
+
+### PHASE 4 — UI & Product Assets (32 assets)
+
+#### App Icons — 8 variations (1024×1024)
+
+```python
+{"id":"p4_ai_01","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_ios_emerald",
+ "prompt":"CannaManage iOS app icon 1024x1024, Apple iOS style rounded square icon, emerald green gradient background, white cannabis leaf tech icon mark, premium mobile app icon, App Store quality",
+ "width":1024,"height":1024,"steps":4},
+
+{"id":"p4_ai_02","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_ios_dark",
+ "prompt":"CannaManage iOS app icon 1024x1024, dark mode iOS icon, dark charcoal with emerald and gold brand mark, premium dark app icon, cannabis management mobile app",
+ "width":1024,"height":1024,"steps":4},
+
+{"id":"p4_ai_03","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_ios_gold",
+ "prompt":"CannaManage iOS app icon 1024x1024, premium gold accent iOS icon, deep green background with gold leaf circuit brand mark, luxury cannabis management app icon",
+ "width":1024,"height":1024,"steps":4},
+
+{"id":"p4_ai_04","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_android_material",
+ "prompt":"CannaManage Android app icon 1024x1024, Material Design 3 style adaptive icon, emerald green with white icon, Google Play Store quality, cannabis management Android app icon",
+ "width":1024,"height":1024,"steps":4},
+
+{"id":"p4_ai_05","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_android_dark",
+ "prompt":"CannaManage Android dark mode app icon 1024x1024, dark adaptive icon, emerald outline icon on near-black background, Material You dark theme, cannabis management app",
+ "width":1024,"height":1024,"steps":4},
+
+{"id":"p4_ai_06","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_gradient_modern",
+ "prompt":"CannaManage app icon 1024x1024, modern gradient icon, forest green to bright emerald gradient background, white geometric cannabis tech mark, contemporary app icon design",
+ "width":1024,"height":1024,"steps":4},
+
+{"id":"p4_ai_07","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_flat_clean",
+ "prompt":"CannaManage app icon 1024x1024, flat design icon, solid emerald green no gradient, white minimal icon mark, Flat design philosophy, simple clean cannabis management app icon",
+ "width":1024,"height":1024,"steps":4},
+
+{"id":"p4_ai_08","phase":"phase4_ui","subfolder":"app_icons","name":"appicon_neumorphic",
+ "prompt":"CannaManage app icon 1024x1024, neumorphic soft UI style, light sage green background with embossed cannabis leaf icon, subtle shadows, premium modern icon design aesthetic",
+ "width":1024,"height":1024,"steps":4},
+```
+
+#### Device Mockups — 5 device frames (1440×900 or native)
+
+```python
+{"id":"p4_dm_01","phase":"phase4_ui","subfolder":"device_mockups","name":"mockup_macbook",
+ "prompt":"CannaManage dashboard shown on MacBook Pro mockup, professional product marketing screenshot, cannabis management SaaS interface on Apple laptop, emerald green UI on screen, clean white studio background, product marketing image",
+ "width":1440,"height":900,"steps":4},
+
+{"id":"p4_dm_02","phase":"phase4_ui","subfolder":"device_mockups","name":"mockup_ipad",
+ "prompt":"CannaManage dashboard on iPad Pro mockup, cannabis management SaaS tablet interface, emerald UI on Apple iPad screen, clean marketing product shot, professional studio white background",
+ "width":1024,"height":768,"steps":4},
+
+{"id":"p4_dm_03","phase":"phase4_ui","subfolder":"device_mockups","name":"mockup_iphone",
+ "prompt":"CannaManage mobile app on iPhone mockup, cannabis management mobile interface, emerald green mobile UI on iPhone, clean product marketing shot, white background professional",
+ "width":390,"height":844,"steps":4},
+
+{"id":"p4_dm_04","phase":"phase4_ui","subfolder":"device_mockups","name":"mockup_desktop_monitor",
+ "prompt":"CannaManage dashboard on large desktop monitor mockup, cannabis management enterprise software on wide screen, dark UI visible, professional product marketing display image",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p4_dm_05","phase":"phase4_ui","subfolder":"device_mockups","name":"mockup_android_phone",
+ "prompt":"CannaManage mobile app on Android phone mockup, cannabis management Android interface, Material Design emerald UI on Android device, product marketing shot white background",
+ "width":390,"height":844,"steps":4},
+```
+
+#### Onboarding Illustrations — 6 scenes (800×600)
+
+```python
+{"id":"p4_ob_01","phase":"phase4_ui","subfolder":"onboarding_illustrations","name":"onboard_inventory",
+ "prompt":"CannaManage onboarding illustration, inventory management scene, cannabis product shelves with digital inventory overlay, cheerful professional flat illustration style, emerald and sage green, SaaS onboarding screen art",
+ "width":800,"height":600,"steps":4},
+
+{"id":"p4_ob_02","phase":"phase4_ui","subfolder":"onboarding_illustrations","name":"onboard_compliance",
+ "prompt":"CannaManage onboarding illustration, compliance tracking scene, person reviewing cannabis regulatory documents with digital checklist overlay, confident professional flat illustration, emerald gold colors",
+ "width":800,"height":600,"steps":4},
+
+{"id":"p4_ob_03","phase":"phase4_ui","subfolder":"onboarding_illustrations","name":"onboard_analytics",
+ "prompt":"CannaManage onboarding illustration, analytics and reporting scene, business person analyzing cannabis sales charts, dashboard visualization illustration, emerald data visualization, flat modern style",
+ "width":800,"height":600,"steps":4},
+
+{"id":"p4_ob_04","phase":"phase4_ui","subfolder":"onboarding_illustrations","name":"onboard_staff",
+ "prompt":"CannaManage onboarding illustration, staff scheduling scene, team members with shift calendar, cannabis dispensary team management illustration, professional flat art emerald colors",
+ "width":800,"height":600,"steps":4},
+
+{"id":"p4_ob_05","phase":"phase4_ui","subfolder":"onboarding_illustrations","name":"onboard_pos",
+ "prompt":"CannaManage onboarding illustration, POS integration scene, cannabis point of sale system connected to management platform, tech integration flat illustration, emerald connection visualization",
+ "width":800,"height":600,"steps":4},
+
+{"id":"p4_ob_06","phase":"phase4_ui","subfolder":"onboarding_illustrations","name":"onboard_reporting",
+ "prompt":"CannaManage onboarding illustration, automated reporting scene, report documents generating automatically from cannabis data, magic automation illustration, emerald gold professional flat art",
+ "width":800,"height":600,"steps":4},
+```
+
+#### Empty States — 6 variations (600×400)
+
+```python
+{"id":"p4_es_01","phase":"phase4_ui","subfolder":"empty_states","name":"empty_no_data",
+ "prompt":"CannaManage empty state illustration 600x400, no data yet illustration, friendly cannabis leaf with empty chart, get started messaging area, emerald green minimal illustration, SaaS empty state art",
+ "width":600,"height":400,"steps":4},
+
+{"id":"p4_es_02","phase":"phase4_ui","subfolder":"empty_states","name":"empty_no_results",
+ "prompt":"CannaManage empty state illustration, no search results found, magnifying glass with cannabis leaf, friendly search empty state, emerald minimal illustration, 600x400",
+ "width":600,"height":400,"steps":4},
+
+{"id":"p4_es_03","phase":"phase4_ui","subfolder":"empty_states","name":"empty_no_alerts",
+ "prompt":"CannaManage empty state illustration, no compliance alerts, happy shield with checkmark, all clear illustration, cannabis compliance all good state, emerald green positive empty state 600x400",
+ "width":600,"height":400,"steps":4},
+
+{"id":"p4_es_04","phase":"phase4_ui","subfolder":"empty_states","name":"empty_no_members",
+ "prompt":"CannaManage empty state illustration, no members added yet, friendly people silhouettes with plus icon, cannabis club member management empty state, emerald add members illustration 600x400",
+ "width":600,"height":400,"steps":4},
+
+{"id":"p4_es_05","phase":"phase4_ui","subfolder":"empty_states","name":"empty_loading_data",
+ "prompt":"CannaManage empty state illustration, loading and processing data, gentle spinner with cannabis leaf, patient loading state illustration, emerald animated-style still illustration 600x400",
+ "width":600,"height":400,"steps":4},
+
+{"id":"p4_es_06","phase":"phase4_ui","subfolder":"empty_states","name":"empty_offline",
+ "prompt":"CannaManage empty state illustration, offline or connection error, disconnected wifi with cannabis leaf, friendly error state illustration, amber warning on emerald 600x400",
+ "width":600,"height":400,"steps":4},
+```
+
+#### Splash/Loading Screens — 4 variations (1080×1920)
+
+```python
+{"id":"p4_sp_01","phase":"phase4_ui","subfolder":"splash_screens","name":"splash_primary",
+ "prompt":"CannaManage splash screen 1080x1920, app loading screen, dark charcoal background, large centered CannaManage logo mark, subtle emerald glow effect, premium app loading screen, cannabis management SaaS",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p4_sp_02","phase":"phase4_ui","subfolder":"splash_screens","name":"splash_emerald",
+ "prompt":"CannaManage splash screen 1080x1920, emerald green background, white logo centered, minimal loading indicator, cannabis management app splash, clean brand loading screen",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p4_sp_03","phase":"phase4_ui","subfolder":"splash_screens","name":"splash_animated_hint",
+ "prompt":"CannaManage splash screen 1080x1920, designed for future animation, cannabis leaf particles converging into logo mark, dark background with emerald particle animation first frame, dynamic loading screen concept",
+ "width":1080,"height":1920,"steps":4},
+
+{"id":"p4_sp_04","phase":"phase4_ui","subfolder":"splash_screens","name":"splash_gradient",
+ "prompt":"CannaManage splash screen 1080x1920, dramatic dark to emerald gradient background, white CannaManage brand mark, premium loading experience, cannabis SaaS gradient splash screen",
+ "width":1080,"height":1920,"steps":4},
+```
+
+---
+
+### PHASE 5 — Brand Collateral (23 assets)
+
+#### Business Cards — 4 directions × front+back = 8 (900×504)
+
+```python
+{"id":"p5_bc_01f","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_modern_front",
+ "prompt":"CannaManage business card front design 900x504, modern minimal style, emerald green left accent panel, white main area, name and title placeholder, cannabis management SaaS company card, premium print design",
+ "width":900,"height":504,"steps":4},
+{"id":"p5_bc_01b","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_modern_back",
+ "prompt":"CannaManage business card back design 900x504, modern minimal style, full emerald green back with white logo centered, website and tagline, cannabis management SaaS card back",
+ "width":900,"height":504,"steps":4},
+
+{"id":"p5_bc_02f","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_dark_front",
+ "prompt":"CannaManage business card front 900x504, dark luxury style, dark charcoal background, gold foil accent logo, premium cannabis management company business card, executive tier",
+ "width":900,"height":504,"steps":4},
+{"id":"p5_bc_02b","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_dark_back",
+ "prompt":"CannaManage business card back 900x504, dark luxury style, full dark charcoal, gold logo and emerald accent, premium back of business card",
+ "width":900,"height":504,"steps":4},
+
+{"id":"p5_bc_03f","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_pattern_front",
+ "prompt":"CannaManage business card front 900x504, geometric cannabis pattern accent, white card with subtle hexagonal pattern header, professional pattern business card front",
+ "width":900,"height":504,"steps":4},
+{"id":"p5_bc_03b","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_pattern_back",
+ "prompt":"CannaManage business card back 900x504, cannabis geometric pattern full bleed, emerald hexagonal pattern background, white logo, pattern business card back",
+ "width":900,"height":504,"steps":4},
+
+{"id":"p5_bc_04f","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_bold_front",
+ "prompt":"CannaManage business card front 900x504, bold typographic style, large emerald brand name, clean white card, cannabis management SaaS typography-forward business card",
+ "width":900,"height":504,"steps":4},
+{"id":"p5_bc_04b","phase":"phase5_collateral","subfolder":"business_cards","name":"bizcard_bold_back",
+ "prompt":"CannaManage business card back 900x504, bold style, split emerald and white back, contact details area, cannabis company card back bold design",
+ "width":900,"height":504,"steps":4},
+```
+
+#### Pitch Deck Covers — 6 variations (1920×1080)
+
+```python
+{"id":"p5_pd_01","phase":"phase5_collateral","subfolder":"pitch_deck","name":"pitch_investor_dark",
+ "prompt":"CannaManage pitch deck cover slide 1920x1080, investor presentation, dark sophisticated background, large logo centered, funding round subtitle area, premium cannabis SaaS investor deck cover",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p5_pd_02","phase":"phase5_collateral","subfolder":"pitch_deck","name":"pitch_growth_story",
+ "prompt":"CannaManage pitch deck cover 1920x1080, growth story visual, ascending cannabis plant becoming data chart, emerald to gold gradient, investor-grade presentation cover, cannabis management platform",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p5_pd_03","phase":"phase5_collateral","subfolder":"pitch_deck","name":"pitch_market_opp",
+ "prompt":"CannaManage pitch deck cover 1920x1080, market opportunity theme, cannabis industry size visualization, globe with highlighted legal markets, emerald professional investor presentation, 1920x1080",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p5_pd_04","phase":"phase5_collateral","subfolder":"pitch_deck","name":"pitch_team_deck",
+ "prompt":"CannaManage pitch deck cover 1920x1080, team presentation version, professional team imagery backdrop, cannabis tech startup team slide, emerald brand, people-forward investor deck cover",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p5_pd_05","phase":"phase5_collateral","subfolder":"pitch_deck","name":"pitch_product_demo",
+ "prompt":"CannaManage pitch deck cover 1920x1080, product demonstration deck, dashboard preview as hero visual, cannabis management SaaS product tour deck cover, emerald UI preview",
+ "width":1920,"height":1080,"steps":4},
+
+{"id":"p5_pd_06","phase":"phase5_collateral","subfolder":"pitch_deck","name":"pitch_minimal_clean",
+ "prompt":"CannaManage pitch deck cover 1920x1080, ultra-minimal clean slide, white background, large emerald brand name only, minimalist investor presentation, cannabis SaaS simple deck cover",
+ "width":1920,"height":1080,"steps":4},
+```
+
+#### One-Pager Headers — 4 variations (1200×400)
+
+```python
+{"id":"p5_op_01","phase":"phase5_collateral","subfolder":"one_pager","name":"onepager_primary",
+ "prompt":"CannaManage one-pager header 1200x400, primary brand header, emerald green full bleed, white logo and tagline, cannabis management SaaS one-page brochure header, print quality",
+ "width":1200,"height":400,"steps":4},
+
+{"id":"p5_op_02","phase":"phase5_collateral","subfolder":"one_pager","name":"onepager_feature_rich",
+ "prompt":"CannaManage one-pager header 1200x400, feature-rich header, dashboard preview glimpse, cannabis management platform features introduction header, professional SaaS marketing one-pager",
+ "width":1200,"height":400,"steps":4},
+
+{"id":"p5_op_03","phase":"phase5_collateral","subfolder":"one_pager","name":"onepager_compliance",
+ "prompt":"CannaManage one-pager header 1200x400, compliance focus version, legal and regulatory theme, cannabis compliance management software, shield and legal icons, dark professional header",
+ "width":1200,"height":400,"steps":4},
+
+{"id":"p5_op_04","phase":"phase5_collateral","subfolder":"one_pager","name":"onepager_dark_premium",
+ "prompt":"CannaManage one-pager header 1200x400, dark premium version, charcoal background with gold and emerald accents, enterprise tier one-pager, premium cannabis SaaS marketing collateral header",
+ "width":1200,"height":400,"steps":4},
+```
+
+#### Trade Show Banners — 3 concepts (800×2000 representing 33x80in proportions)
+
+```python
+{"id":"p5_ts_01","phase":"phase5_collateral","subfolder":"trade_show","name":"tradeshow_primary_brand",
+ "prompt":"CannaManage trade show pull-up banner, tall vertical format, primary brand version, emerald green top section with logo, white middle with key platform features listed, dark bottom with website CTA, cannabis management SaaS conference banner, professional exhibition display",
+ "width":800,"height":2000,"steps":4},
+
+{"id":"p5_ts_02","phase":"phase5_collateral","subfolder":"trade_show","name":"tradeshow_product_showcase",
+ "prompt":"CannaManage trade show banner tall vertical, product showcase version, dashboard UI mockup as hero visual, dark sophisticated background, emerald accents, cannabis management software exhibition display, conference pull-up banner",
+ "width":800,"height":2000,"steps":4},
+
+{"id":"p5_ts_03","phase":"phase5_collateral","subfolder":"trade_show","name":"tradeshow_compliance_focus",
+ "prompt":"CannaManage trade show banner tall vertical, compliance authority positioning, legal cannabis management expertise visual, professional regulatory compliance focus, emerald and gold tall exhibition banner, cannabis industry conference display",
+ "width":800,"height":2000,"steps":4},
+```
+
+#### Sticker/Swag Designs — 10 fun branded stickers (600×600)
+
+```python
+{"id":"p5_sk_01","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_leaf_circuit",
+ "prompt":"CannaManage sticker design 600x600, cannabis leaf made of circuit traces, emerald green on white, die-cut sticker style, fun tech cannabis brand sticker, transparent background sticker art",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_02","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_wordmark_badge",
+ "prompt":"CannaManage sticker badge design 600x600, rounded rectangle badge sticker, emerald green background, white CannaManage text, premium brand sticker, laptop sticker style",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_03","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_compliance_hero",
+ "prompt":"CannaManage sticker 600x600, compliance superhero theme, shield with cannabis leaf and checkmark, fun illustrated sticker, emerald and gold colors, die-cut sticker design",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_04","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_data_plant",
+ "prompt":"CannaManage fun sticker 600x600, cannabis plant growing into data chart bars, punchy colorful sticker art, emerald plant gold bars, square sticker design",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_05","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_canna_astronaut",
+ "prompt":"CannaManage sticker 600x600, cartoon astronaut holding cannabis leaf and laptop, space tech meets cannabis industry, fun illustrated sticker, emerald spacesuit, brand mascot sticker concept",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_06","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_powered_by",
+ "prompt":"CannaManage powered by sticker 600x600, powered by CannaManage badge design, small horizontal badge sticker, emerald and white, partner sticker for cannabis businesses using platform",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_07","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_compliance_100",
+ "prompt":"CannaManage sticker 600x600, 100 percent compliant badge sticker, bold green circle with checkmark and percentage, fun compliance achievement sticker, cannabis business compliance badge",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_08","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_hexagon_icon",
+ "prompt":"CannaManage hexagon sticker 600x600, hexagonal border with cannabis circuit icon inside, honeycomb cannabis management brand sticker, emerald hex border gold icon, premium die-cut hex sticker",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_09","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_420_compliant",
+ "prompt":"CannaManage funny sticker 600x600, 420 compliant badge design, playful cannabis compliance humor, professional but fun brand sticker, emerald with gold numbers, laptop culture sticker",
+ "width":600,"height":600,"steps":4},
+
+{"id":"p5_sk_10","phase":"phase5_collateral","subfolder":"stickers","name":"sticker_manage_everything",
+ "prompt":"CannaManage sticker 600x600, manage everything tagline sticker, bold typography sticker design, emerald green background white text, punchy brand statement sticker",
+ "width":600,"height":600,"steps":4},
+```
+
+#### Email Signature Blocks — 5 variations (600×150)
+
+```python
+{"id":"p5_es_01","phase":"phase5_collateral","subfolder":"email_signatures","name":"sigsblock_primary",
+ "prompt":"CannaManage email signature graphic block 600x150, primary brand version, horizontal logo left with tagline, emerald green line divider, professional email signature banner, cannabis management SaaS",
+ "width":600,"height":150,"steps":4},
+
+{"id":"p5_es_02","phase":"phase5_collateral","subfolder":"email_signatures","name":"sigblock_dark",
+ "prompt":"CannaManage email signature block 600x150, dark version, charcoal background with white logo and emerald accent, premium email signature graphic, cannabis SaaS company",
+ "width":600,"height":150,"steps":4},
+
+{"id":"p5_es_03","phase":"phase5_collateral","subfolder":"email_signatures","name":"sigblock_minimal",
+ "prompt":"CannaManage email signature graphic 600x150, minimal version, just logo and website, very clean white background, ultra-minimal email signature banner",
+ "width":600,"height":150,"steps":4},
+
+{"id":"p5_es_04","phase":"phase5_collateral","subfolder":"email_signatures","name":"sigblock_promo",
+ "prompt":"CannaManage email signature promo block 600x150, promotional version with free trial CTA, gold button area, white background emerald brand, email signature with conversion CTA",
+ "width":600,"height":150,"steps":4},
+
+{"id":"p5_es_05","phase":"phase5_collateral","subfolder":"email_signatures","name":"sigblock_social",
+ "prompt":"CannaManage email signature block 600x150, social media icons version, small social platform icons in emerald, company signature with social links, professional email signature footer graphic",
+ "width":600,"height":150,"steps":4},
+```
+
+---
+
+### PHASE 6 — Bonus / Wildcard Assets (22 assets)
+
+#### Animated Banner First-Frame Stills — 8 concepts (1200×628)
+
+```python
+{"id":"p6_an_01","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_particle_logo",
+ "prompt":"CannaManage animated banner first frame still, cannabis leaf particles forming CannaManage logo mark, particles mid-flight, dark background emerald particles, designed for CSS/JS animation, static first frame concept 1200x628",
+ "width":1200,"height":628,"steps":4},
+
+{"id":"p6_an_02","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_data_flow",
+ "prompt":"CannaManage animated banner first frame, data flow visualization beginning, cannabis data streams starting to form dashboard, dark background emerald data lines, first frame of data animation concept 1200x628",
+ "width":1200,"height":628,"steps":4},
+
+{"id":"p6_an_03","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_growth_chart",
+ "prompt":"CannaManage animated banner still, cannabis business growth chart animation first frame, bar chart at zero about to animate upward, gold bars on dark, growth animation concept still 1200x628",
+ "width":1200,"height":628,"steps":4},
+
+{"id":"p6_an_04","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_compliance_check",
+ "prompt":"CannaManage animated banner first frame, compliance checklist items unchecked ready to animate with checkmarks, emerald checklist on white, compliance animation concept still 1200x628",
+ "width":1200,"height":628,"steps":4},
+
+{"id":"p6_an_05","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_plant_grow",
+ "prompt":"CannaManage animated banner still, cannabis plant seedling about to grow into full data visualization plant, dark background, first frame seed sprouting, growth animation concept 1200x628",
+ "width":1200,"height":628,"steps":4},
+
+{"id":"p6_an_06","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_typing_headline",
+ "prompt":"CannaManage animated banner still, typing cursor before headline text, empty headline area with blinking cursor concept, emerald CTA button below, typewriter animation first frame still 1200x628",
+ "width":1200,"height":628,"steps":4},
+
+{"id":"p6_an_07","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_integration_connect",
+ "prompt":"CannaManage animated banner still, integration ecosystem nodes about to connect, partner software logos as unconnected nodes, emerald connecting lines forming, integration animation first frame 1200x628",
+ "width":1200,"height":628,"steps":4},
+
+{"id":"p6_an_08","phase":"phase6_bonus","subfolder":"animated_stills","name":"anim_counter_stat",
+ "prompt":"CannaManage animated banner still, number counter animation first frame showing zero, gold large number about to count up to impressive stat, dark background, counter animation concept still 1200x628",
+ "width":1200,"height":628,"steps":4},
+```
+
+#### Dark Mode vs Light Mode UI Pairs — 6 paired sets (1200×800 each, 12 total)
+
+```python
+{"id":"p6_dm_01l","phase":"phase6_bonus","subfolder":"dark_light_pairs","name":"uipair_dashboard_light",
+ "prompt":"CannaManage UI preview card 1200x800, light mode dashboard interface, clean white background, emerald green UI elements, cannabis management SaaS light theme interface preview, professional SaaS UI screenshot",
+ "width":1200,"height":800,"steps":4},
+{"id":"p6_dm_01d","phase":"phase6_bonus","subfolder":"dark_light_pairs","name":"uipair_dashboard_dark",
+ "prompt":"CannaManage UI preview card 1200x800, dark mode dashboard interface, dark charcoal background, emerald green glowing UI elements, cannabis management SaaS dark theme interface preview, premium dark mode UI",
+ "width":1200,"height":800,"steps":4},
+
+{"id":"p6_dm_02l","phase":"phase6_bonus","subfolder":"dark_light_pairs","name":"uipair_compliance_light",
+ "prompt":"CannaManage UI preview 1200x800, compliance module light mode, white clean interface with compliance checklist and status indicators, emerald green checkmarks, cannabis compliance UI light theme",
+ "width":1200,"height":800,"steps":4},
+{"id":"p6_dm_02d","phase":"phase6_bonus","subfolder":"dark_light_pairs","name":"uipair_compliance_dark",
+ "prompt":"CannaManage UI preview 1200x800, compliance module dark mode, dark interface with glowing emerald compliance indicators, cannabis compliance UI dark theme, premium dark mode",
+ "width":1200,"height":800,"steps":4},
+
+{"id":"p6_dm_03l","phase":"phase6_bonus","subfolder":"dark_light_pairs","name":"uipair_analytics_light",
+ "prompt":"CannaManage UI preview 1200x800, analytics dashboard light mode, white background with colorful cannabis business charts, emerald and gold data visualization, light theme analytics UI",
+ "width":1200,"height":800,"steps":4},
+{"id":"p6_dm_03d","phase":"phase6_bonus","subfolder":"dark_light_pairs","name":"uipair_analytics_dark",
+ "prompt":"CannaManage UI preview 1200x800, analytics dashboard dark mode, dark background with glowing emerald and gold cannabis business charts, dramatic dark mode analytics UI",
+ "width":1200,"height":800,"steps":4},
+```
+
+#### Integration/Partnership Badges — 6 variations (400×200)
+
+```python
+{"id":"p6_ib_01","phase":"phase6_bonus","subfolder":"integration_badges","name":"badge_pos_integration",
+ "prompt":"CannaManage integration badge 400x200, integrates with POS systems badge, cannabis point-of-sale integration certification badge, emerald green badge design, CannaManage logo plus POS icon, professional integration badge",
+ "width":400,"height":200,"steps":4},
+
+{"id":"p6_ib_02","phase":"phase6_bonus","subfolder":"integration_badges","name":"badge_accounting",
+ "prompt":"CannaManage integration badge 400x200, accounting software integration badge, cannabis financial software connection, emerald badge with accounting icon, works with your accounting tools badge",
+ "width":400,"height":200,"steps":4},
+
+{"id":"p6_ib_03","phase":"phase6_bonus","subfolder":"integration_badges","name":"badge_compliance_tools",
+ "prompt":"CannaManage integration badge 400x200, compliance tool integration badge, cannabis regulatory software connection, emerald shield badge design, integrates with compliance tools",
+ "width":400,"height":200,"steps":4},
+
+{"id":"p6_ib_04","phase":"phase6_bonus","subfolder":"integration_badges","name":"badge_api_ready",
+ "prompt":"CannaManage API ready badge 400x200, API first platform badge, developer integration badge, emerald and code brackets design, cannabis management API integration badge",
+ "width":400,"height":200,"steps":4},
+
+{"id":"p6_ib_05","phase":"phase6_bonus","subfolder":"integration_badges","name":"badge_partner_certified",
+ "prompt":"CannaManage partner certified badge 400x200, certified technology partner badge design, emerald green official partner badge, cannabis management platform partner program badge",
+ "width":400,"height":200,"steps":4},
+
+{"id":"p6_ib_06","phase":"phase6_bonus","subfolder":"integration_badges","name":"badge_white_label",
+ "prompt":"CannaManage white label partner badge 400x200, white label ready platform badge, cannabis SaaS white label partner certification, professional partner badge emerald design",
+ "width":400,"height":200,"steps":4},
+```
+
+#### Trust/Award Badges — 5 designs (400×400)
+
+```python
+{"id":"p6_tb_01","phase":"phase6_bonus","subfolder":"trust_badges","name":"trust_gdpr_compliant",
+ "prompt":"CannaManage trust badge 400x400, GDPR compliant badge design, data protection certification badge, emerald green shield with EU star circle, cannabis SaaS data privacy trust badge",
+ "width":400,"height":400,"steps":4},
+
+{"id":"p6_tb_02","phase":"phase6_bonus","subfolder":"trust_badges","name":"trust_soc2_ready",
+ "prompt":"CannaManage trust badge 400x400, SOC 2 ready certification badge, enterprise security trust badge, professional certification seal, dark emerald badge design, cannabis management enterprise security",
+ "width":400,"height":400,"steps":4},
+
+{"id":"p6_tb_03","phase":"phase6_bonus","subfolder":"trust_badges","name":"trust_uptime_guarantee",
+ "prompt":"CannaManage trust badge 400x400, 99.9 percent uptime guarantee badge, reliability certification badge, gold uptime number on emerald badge, cannabis SaaS reliability trust signal",
+ "width":400,"height":400,"steps":4},
+
+{"id":"p6_tb_04","phase":"phase6_bonus","subfolder":"trust_badges","name":"trust_cannabis_industry_choice",
+ "prompt":"CannaManage award badge 400x400, cannabis industry choice award badge design, industry recognition award seal, gold and emerald award badge, cannabis management software award",
+ "width":400,"height":400,"steps":4},
+
+{"id":"p6_tb_05","phase":"phase6_bonus","subfolder":"trust_badges","name":"trust_money_back",
+ "prompt":"CannaManage trust badge 400x400, 30-day money back guarantee badge, customer confidence seal, emerald circle badge with guarantee text, cannabis SaaS satisfaction guarantee trust badge",
+ "width":400,"height":400,"steps":4},
+```
+
+---
+
+## Script Specification for Code Mode
+
+### File: `mcp/mcp-image-gen/cannamanage_gen.py`
+
+```
+INPUTS:
+ - ASSET_MANIFEST: Python list of dicts (inlined in script from this plan)
+ - --output-dir: output root (default ~/Pictures/cannamanage_brand/)
+ - --comfyui: ComfyUI URL (default http://localhost:8188)
+ - --model: "schnell" (default) or "heretic" (flux2_klein_heretic.json)
+ - --dry-run: print asset list without generating
+ - --phase: generate only one phase (e.g., --phase phase1_logos)
+ - --resume: skip already-completed assets (default True)
+
+OUTPUTS:
+ - ~/Pictures/cannamanage_brand/{phase}/{subfolder}/{name}.png per asset
+ - ~/Pictures/cannamanage_brand/.progress.json (resume state)
+ - Console progress: [phase1_logos] [5/42] wordmark_modern_sans — ✅ done (1.2MB)
+
+WORKFLOW SELECTION:
+ if args.model == "heretic":
+ workflow_path = REPO/src/workflows/flux2_klein_heretic.json
+ else:
+ workflow_path = REPO/src/workflows/flux_schnell.json
+
+WORKFLOW PATCH (from gen.py, same node IDs):
+ workflow["2"]["inputs"]["text"] = asset["prompt"]
+ workflow["3"]["inputs"]["text"] = ""
+ workflow["10"]["inputs"]["noise_seed"] = random seed
+ workflow["6"]["inputs"]["width"] = asset["width"]
+ workflow["6"]["inputs"]["height"] = asset["height"]
+ workflow["7"]["inputs"]["steps"] = asset["steps"]
+ workflow["13"]["inputs"]["filename_prefix"] = asset["name"]
+
+RESUME STATE SCHEMA (.progress.json):
+ {
+ "completed": ["p1_wm_01", "p1_wm_02", ...],
+ "failed": ["p2_hw_03"],
+ "started_at": "2026-04-10T23:40:00",
+ "last_updated": "2026-04-11T01:15:33"
+ }
+
+ALGORITHM:
+ 1. Load .progress.json (or create empty if not exists)
+ 2. filter ASSET_MANIFEST to only assets not in completed[]
+ 3. For each asset:
+ a. patch workflow
+ b. POST to /prompt → get prompt_id
+ c. Poll /history/{prompt_id} every 2s (timeout 300s)
+ d. GET /view?filename=...&type=output
+ e. mkdir -p output_dir/phase/subfolder/
+ f. save PNG
+ g. add id to completed[], flush .progress.json
+ h. print progress line
+ 4. Print final summary
+
+NO EXTERNAL DEPENDENCIES — stdlib only: urllib.request, json, pathlib, argparse, time, random
+```
+
+### Total Asset Count by Phase
+
+| Phase | Category | Assets |
+|---|---|---|
+| Phase 1 | Logo Suite | 42 |
+| Phase 2 | Banner Suite | 50 |
+| Phase 3 | Social Media Pack | 60 |
+| Phase 4 | UI & Product Assets | 32 |
+| Phase 5 | Brand Collateral | 38 |
+| Phase 6 | Bonus Assets | 35 |
+| **TOTAL** | | **257** |
+
+### Runtime Estimates
+
+| Model | Speed | 257 assets |
+|---|---|---|
+| flux1-schnell | ~10s/image | ~43 minutes |
+| flux2-klein-heretic | ~52s/image | ~3.7 hours |
+
+**Recommendation:** Use `flux1-schnell` (default) for overnight batch. The heretic model is
+better quality but unnecessary for concept/mockup assets at this volume.
+
+### Launch Command
+
+```bash
+# From pi_mcps root — ensure ComfyUI is running first
+systemctl --user status comfyui # check it's running
+python mcp/mcp-image-gen/cannamanage_gen.py
+
+# With options:
+python mcp/mcp-image-gen/cannamanage_gen.py --dry-run # preview list only
+python mcp/mcp-image-gen/cannamanage_gen.py --phase phase1_logos # one phase only
+python mcp/mcp-image-gen/cannamanage_gen.py --model heretic # higher quality, slower
+```
+
+---
+
+## Handoff Checklist for Code Mode
+
+- [ ] Implement `cannamanage_gen.py` at `mcp/mcp-image-gen/cannamanage_gen.py`
+- [ ] Inline all 257 assets from ASSET_MANIFEST above
+- [ ] Use `mcp/mcp-image-gen/src/workflows/flux_schnell.json` as default workflow
+- [ ] Patch workflow at exact node IDs from gen.py (nodes 2, 3, 6, 7, 10, 13)
+- [ ] Implement `.progress.json` resume state (flush after every image)
+- [ ] Stdlib only — no pip installs required
+- [ ] Test with `--dry-run` to validate manifest before first run
+- [ ] Print `[phase] [N/total] name — ✅ Xkb` per image
+- [ ] Print final summary with counts and failed list
\ No newline at end of file
diff --git a/plans/frpc-truenas-deploy.sh b/plans/frpc-truenas-deploy.sh
new file mode 100644
index 0000000..e81f2c4
--- /dev/null
+++ b/plans/frpc-truenas-deploy.sh
@@ -0,0 +1,76 @@
+#!/bin/bash
+# frpc deployment script for TrueNAS
+# Run from Fedora: bash plans/frpc-truenas-deploy.sh
+# Installs frpc on TrueNAS and sets up tunnel to expose Gitea publicly
+
+TRUENAS="root@192.168.188.119"
+VPS_IP="85.214.154.199"
+FRP_TOKEN="5f64a6f20bb2cb8c3133ecac8ca3f0571d7d64dff910225040bfc0c60a106c81"
+FRP_VERSION="0.68.1"
+
+echo "=== Deploying frpc on TrueNAS ==="
+
+ssh -i /home/pplate/.ssh/id_ed25519_homelab $TRUENAS << REMOTE
+set -e
+
+# TrueNAS root filesystem is read-only — install to /mnt which is persistent ZFS
+INSTALL_DIR=/mnt/VM_SSD_Pool/frp
+mkdir -p \$INSTALL_DIR
+
+# Download frpc binary
+echo "Downloading frp ${FRP_VERSION}..."
+curl -sL https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz \
+ -o /tmp/frp.tar.gz
+tar xzf /tmp/frp.tar.gz -C /tmp/
+cp /tmp/frp_${FRP_VERSION}_linux_amd64/frpc \$INSTALL_DIR/frpc
+chmod +x \$INSTALL_DIR/frpc
+\$INSTALL_DIR/frpc --version
+
+# Write frpc config
+cat > \$INSTALL_DIR/frpc.toml << 'TOML'
+serverAddr = "${VPS_IP}"
+serverPort = 7000
+auth.method = "token"
+auth.token = "${FRP_TOKEN}"
+log.to = "/tmp/frpc.log"
+log.level = "info"
+
+[[proxies]]
+name = "gitea"
+type = "tcp"
+localIP = "127.0.0.1"
+localPort = 30008
+remotePort = 30008
+TOML
+
+echo "frpc config written:"
+cat \$INSTALL_DIR/frpc.toml
+
+# Create init script (TrueNAS uses systemd-like init but custom)
+# Use /etc/local.d/ for persistent startup scripts on TrueNAS SCALE
+# Actually TrueNAS SCALE uses systemd — write a service to /etc/systemd/system/
+cat > /etc/systemd/system/frpc.service << 'SVCEOF'
+[Unit]
+Description=frp client - tunnel to plate.software VPS
+After=network-online.target
+Wants=network-online.target
+
+[Service]
+Type=simple
+ExecStart=/mnt/VM_SSD_Pool/frp/frpc -c /mnt/VM_SSD_Pool/frp/frpc.toml
+Restart=on-failure
+RestartSec=10s
+
+[Install]
+WantedBy=multi-user.target
+SVCEOF
+
+systemctl daemon-reload
+systemctl enable frpc
+systemctl start frpc
+sleep 3
+systemctl status frpc --no-pager | head -15
+echo ""
+echo "=== frpc deployed and running ==="
+echo "Gitea should now be reachable at https://git.plate.software"
+REMOTE
diff --git a/plans/heretic-encoder-swap.md b/plans/heretic-encoder-swap.md
index f3bff61..492d3ed 100644
--- a/plans/heretic-encoder-swap.md
+++ b/plans/heretic-encoder-swap.md
@@ -1,7 +1,7 @@
# Task: Swap Qwen3-4B Encoder for Heretic Abliterated Version
-**Datum:** 2026-04-10
-**Status:** Ready — waiting for correct Heretic encoder to be published
+**Datum:** 2026-04-10
+**Status:** ✅ COMPLETE — Heretic encoder swapped and live-tested 2026-04-10
**Depends on:** FLUX.2 Klein 4B working (✅ done as of 2026-04-10)
---
@@ -133,7 +133,7 @@ The entire MCP server, workflow registry, and test suite are already correct. Th
## Success Criteria
-- [ ] `generate_image("...", model="flux-2-klein-4b.safetensors")` works with prompts that currently get refused
-- [ ] Output image quality identical to standard encoder (check: no visible artifacts vs reference)
-- [ ] ComfyUI logs show no dimension errors
-- [ ] `qwen_3_4b_klein_backup.safetensors` kept as rollback
+- [x] `generate_image("...", model="flux-2-klein-4b.safetensors")` works with prompts that currently get refused — ✅ tested 2026-04-10, Renaissance nude generated without refusal
+- [x] Output image quality identical to standard encoder (check: no visible artifacts vs reference) — ✅ 1.9MB photorealistic 1024×1024, museum-quality result, 50.4s
+- [x] ComfyUI logs show no dimension errors — ✅ only harmless libcudart NVIDIA stub warnings
+- [x] `qwen_3_4b_klein_backup.safetensors` kept as rollback — ✅ 7.5G backup at ~/ComfyUI/models/text_encoders/qwen_3_4b_klein_backup.safetensors
diff --git a/plans/homelab-proxy-architecture.md b/plans/homelab-proxy-architecture.md
new file mode 100644
index 0000000..2b4ce54
--- /dev/null
+++ b/plans/homelab-proxy-architecture.md
@@ -0,0 +1,262 @@
+# Homelab Proxy Architecture Plan
+_plate.software VPS as public face → WireGuard tunnel → TrueNAS.local_
+
+## Goal
+
+Use the cheap public VPS (`plate.software` @ 85.214.154.199 / Plesk) as:
+- Public DNS + TLS termination point
+- Apache reverse proxy routing subdomains to TrueNAS homelab services
+- ACME/Let's Encrypt managed by Plesk (already working)
+
+TrueNAS.local (192.168.188.119) becomes the actual compute host for all Docker services.
+
+---
+
+## The Core Problem: TrueNAS is Behind NAT
+
+TrueNAS lives on a home network. The public VPS cannot reach it directly. A tunnel is required.
+
+### ⚠️ WireGuard NOT possible — VPS is OpenVZ
+
+The VPS (`h2970715.stratoserver.net`, Strato) runs on OpenVZ virtualization.
+WireGuard requires a kernel module — **not loadable in OpenVZ containers**.
+
+### Recommended Solution: frp (Fast Reverse Proxy)
+
+```
+Internet
+ ↓ DNS
+plate.software VPS (85.214.154.199)
+ frps server (port 7000)
+ ↓ Apache ProxyPass (HTTP/HTTPS)
+ ↓ frp tunnel (TCP, userspace)
+TrueNAS.local (192.168.188.119)
+ frpc client → connects out to VPS:7000
+ ├── Gitea :30008 → git.plate.software → VPS:30008
+ ├── WildFly/Java EE :8080 → plate.software → VPS:18080
+ └── Future services :XXXX → app.plate.software
+```
+
+**Why frp:**
+- Pure userspace Go binary — works perfectly on OpenVZ
+- TrueNAS (frpc) initiates outbound connection — no router port forwarding needed
+- Encrypted tunnel (TLS optional)
+- VPS (frps) exposes local ports that Apache proxies to
+- Zero kernel dependencies
+
+---
+
+## Target DNS Routing
+
+| Domain / Subdomain | Routes to | Notes |
+|-------------------------|-----------------------------------|-------|
+| `plate.software` | TrueNAS:8080 (WildFly) | Current customer Java EE project |
+| `git.plate.software` | TrueNAS:30008 (Gitea) | New — expose homelab Gitea publicly |
+| `app.plate.software` | TrueNAS:XXXX (future) | Placeholder for future projects |
+
+All DNS A records point to `85.214.154.199` (VPS). TLS is terminated at the VPS by Plesk/Let's Encrypt.
+
+---
+
+## Implementation Steps
+
+### Phase 1: WireGuard Tunnel (VPS ↔ TrueNAS)
+
+**On the VPS (root@85.214.154.199):**
+```bash
+apt install wireguard
+wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
+```
+
+Create `/etc/wireguard/wg0.conf`:
+```ini
+[Interface]
+Address = 10.100.0.1/24
+ListenPort = 51820
+PrivateKey =
+
+[Peer]
+PublicKey =
+AllowedIPs = 10.100.0.2/32
+PersistentKeepalive = 25
+```
+
+**On TrueNAS (via TrueNAS SCALE UI or shell):**
+- Apps → Network → WireGuard → Add Interface
+- Or via shell: same `wg genkey` + `/etc/wireguard/wg0.conf` approach
+```ini
+[Interface]
+Address = 10.100.0.2/24
+PrivateKey =
+
+[Peer]
+PublicKey =
+Endpoint = 85.214.154.199:51820
+AllowedIPs = 10.100.0.1/32
+PersistentKeepalive = 25
+```
+
+Enable on both:
+```bash
+systemctl enable --now wg-quick@wg0
+```
+
+Test:
+```bash
+# From VPS
+ping 10.100.0.2
+curl http://10.100.0.2:30008 # Should reach Gitea
+```
+
+---
+
+### Phase 2: Firewall — Open WireGuard Port on VPS
+
+```bash
+# On VPS
+ufw allow 51820/udp
+# Or via iptables if ufw not present
+iptables -A INPUT -p udp --dport 51820 -j ACCEPT
+```
+
+Also ensure TrueNAS router/firewall does NOT need any port forwarding — TrueNAS initiates the tunnel outbound. The VPS listens; TrueNAS connects. No router config needed.
+
+---
+
+### Phase 3: Plesk Apache — Add Subdomain Proxy Rules
+
+**Add `git.plate.software` as a subdomain in Plesk:**
+1. Plesk → Domains → Add Subdomain → `git.plate.software`
+2. Apache & nginx Settings → Additional directives for HTTP:
+```apache
+
+ ProxyPass /.well-known/acme-challenge/ !
+ ProxyPass / http://10.100.0.2:30008/ retry=0
+ ProxyPassReverse / http://10.100.0.2:30008/
+ ProxyPreserveHost On
+
+```
+3. Issue Let's Encrypt cert for `git.plate.software`
+4. Configure HTTPS redirect and HTTPS proxy directives the same way
+
+**Update `plate.software` HTTP directives:**
+Change the existing WildFly proxy target from `127.0.0.1:8080` to `10.100.0.2:8080` once WildFly is moved to TrueNAS:
+```apache
+ProxyPass / http://10.100.0.2:8080/ retry=0
+```
+(Keep this as `127.0.0.1:8080` while the Docker container still runs on the VPS)
+
+---
+
+### Phase 4: Migrate WildFly to TrueNAS
+
+The customer's Java EE app currently runs in Docker on the VPS. Migrate to TrueNAS:
+
+1. Export/pull the WildFly Docker image
+2. Copy any persistent volumes/data
+3. Create `docker-compose.yml` on TrueNAS
+4. Start container on TrueNAS, verify on `10.100.0.2:8080`
+5. Update VPS Apache proxy target from `127.0.0.1:8080` → `10.100.0.2:8080`
+6. Remove the Docker container from VPS
+
+---
+
+### Phase 5: Gitea Public HTTPS
+
+For Gitea to work properly behind a proxy, update its config to know its public URL:
+
+Edit Gitea's `app.ini` (in the Gitea Docker volume on TrueNAS):
+```ini
+[server]
+DOMAIN = git.plate.software
+ROOT_URL = https://git.plate.software/
+HTTP_PORT = 30008
+```
+
+Also in Plesk HTTPS directives for `git.plate.software`:
+```apache
+
+ ProxyPass /.well-known/acme-challenge/ !
+ ProxyPass / http://10.100.0.2:30008/ retry=0
+ ProxyPassReverse / http://10.100.0.2:30008/
+ ProxyPreserveHost On
+ RequestHeader set X-Forwarded-Proto "https"
+ RequestHeader set X-Forwarded-Port "443"
+
+```
+
+---
+
+## Network Topology (Final State)
+
+```
+┌─────────────────────────────────────┐
+│ Internet / DNS │
+│ *.plate.software → 85.214.154.199 │
+└──────────────┬──────────────────────┘
+ │ HTTP/HTTPS
+ ▼
+┌─────────────────────────────────────┐
+│ VPS: plate.software │
+│ 85.214.154.199 / Plesk / Apache │
+│ │
+│ plate.software → proxy:8080 │
+│ git.plate.software → proxy:30008 │
+│ app.plate.software → proxy:XXXX │
+└──────────────┬──────────────────────┘
+ │ WireGuard 10.100.0.0/24
+ │ UDP 51820 (encrypted)
+ ▼
+┌─────────────────────────────────────┐
+│ TrueNAS.local │
+│ 192.168.188.119 / WG: 10.100.0.2 │
+│ │
+│ :30008 Gitea │
+│ :8080 WildFly (Java EE) │
+│ :XXXX Future services │
+└─────────────────────────────────────┘
+```
+
+---
+
+## Risks & Notes
+
+| Risk | Mitigation |
+|------|-----------|
+| Home ISP outage takes down all services | Acceptable for homelab; add health check monitoring later |
+| ISP dynamic IP changes (if applicable) | WireGuard peer config uses VPS as endpoint (fixed IP) — TrueNAS initiates tunnel, so home IP change is transparent |
+| TrueNAS reboot drops tunnel | `systemctl enable wg-quick@wg0` ensures auto-start |
+| Gitea SSH cloning (port 22/2222) | Need separate SSH port forward or Gitea SSH over different port — HTTP clone still works via HTTPS proxy |
+| Customer data on VPS → TrueNAS migration | Do at off-peak time; test thoroughly before cutting DNS |
+
+---
+
+## Cost Model
+
+- VPS (plate.software): Keep cheap (~3-5€/month) — CPU/RAM irrelevant, just proxy traffic
+- TrueNAS: All compute happens here — free (already owned hardware)
+- Cloudflare (optional): Free plan for DNS + DDoS protection on top of the VPS
+
+---
+
+## Alternative: Cloudflare Tunnel (Zero-Config Option)
+
+If WireGuard setup is too complex, Cloudflare Tunnel (`cloudflared`) is a zero-config alternative:
+- Run `cloudflared` as a Docker container on TrueNAS
+- No VPS needed for tunneling — Cloudflare handles the public endpoint
+- Free for personal use
+- TrueNAS → Cloudflare edge → DNS → users
+
+**Downside:** Traffic routes through Cloudflare (not self-hosted end-to-end). VPS still useful for non-Cloudflare domains and the existing customer project.
+
+---
+
+## Implementation Priority
+
+1. ✅ Fix plate.software Let's Encrypt (done)
+2. 🔜 Set up WireGuard tunnel (VPS ↔ TrueNAS)
+3. 🔜 Add `git.plate.software` subdomain in Plesk + proxy to TrueNAS Gitea
+4. 🔜 Update Gitea `app.ini` with public URL
+5. 🔜 Issue Let's Encrypt for `git.plate.software`
+6. ⏳ Migrate WildFly customer project from VPS → TrueNAS
+7. ⏳ Decommission VPS Docker container (keep VPS as pure proxy)
diff --git a/plans/upscaler-workflow.md b/plans/upscaler-workflow.md
new file mode 100644
index 0000000..6edd52f
--- /dev/null
+++ b/plans/upscaler-workflow.md
@@ -0,0 +1,194 @@
+# Task: Add ESRGAN Upscaler to mcp-image-gen
+
+**Datum:** 2026-04-10
+**Status:** Ready to implement
+**Depends on:** mcp-image-gen working ✅, FLUX.2 Klein Heretic working ✅
+
+---
+
+## Goal
+
+Add an `upscale_image()` MCP tool that takes an existing PNG path (from a previous `generate_image()` call) and upscales it 2× or 4× using a Real-ESRGAN model — **no diffusion re-generation**, just fast post-processing (~5–10s).
+
+Result: A 1024×1024 → 4096×4096 pipeline in two tool calls:
+```python
+result = generate_image("...", model="flux-2-klein-4b.safetensors", steps=20)
+# → ~/Pictures/mcp-generated/foo_20260410_123456_12345.png
+
+upscaled = upscale_image(
+ input_path="~/Pictures/mcp-generated/foo_20260410_123456_12345.png",
+ scale=4
+)
+# → ~/Pictures/mcp-generated/foo_20260410_123456_12345_4x.png (4096×4096)
+```
+
+---
+
+## Why ESRGAN (Option B) over Latent Upscale
+
+| Method | Time overhead | Quality | Requires diffusion? |
+|--------|--------------|---------|---------------------|
+| ESRGAN image upscale | ~5–10s | ✅ Very sharp details | ❌ No |
+| Latent upscale + KSampler | ~50% extra gen time | ✅ Good, consistent style | ✅ Yes |
+| UltimateSDUpscale (tiled) | ~4× gen time | ✅ Highest quality | ✅ Yes |
+
+ESRGAN is the clear winner for "I want a bigger version of this image quickly."
+
+---
+
+## Model to Use
+
+**`4x-UltraSharp.pth`** — the community standard for photorealistic upscaling.
+
+- Source: https://huggingface.co/Kim2091/UltraSharp
+- Download: `huggingface-cli download Kim2091/UltraSharp 4x-UltraSharp.pth --local-dir ~/ComfyUI/models/upscale_models/`
+- Size: ~67MB
+- Scale factor: 4× (can also be used for 2× via image resize after)
+
+Alternative: `RealESRGAN_x4plus.pth` (in ComfyUI's model downloader, general purpose)
+
+---
+
+## ComfyUI Workflow: `esrgan_upscale.json`
+
+Minimal workflow — 3 nodes:
+
+```
+LoadImage → UpscaleModelLoader + ImageUpscaleWithModel → SaveImage
+```
+
+Node layout:
+
+```json
+{
+ "1": {
+ "class_type": "LoadImage",
+ "inputs": {
+ "image": "__INPUT_PATH__"
+ }
+ },
+ "2": {
+ "class_type": "UpscaleModelLoader",
+ "inputs": {
+ "model_name": "4x-UltraSharp.pth"
+ }
+ },
+ "3": {
+ "class_type": "ImageUpscaleWithModel",
+ "inputs": {
+ "upscale_model": ["2", 0],
+ "image": ["1", 0]
+ }
+ },
+ "4": {
+ "class_type": "SaveImage",
+ "inputs": {
+ "images": ["3", 0],
+ "filename_prefix": "__OUTPUT_PREFIX__"
+ }
+ }
+}
+```
+
+**Note:** `LoadImage` in ComfyUI requires the image to be in `~/ComfyUI/input/` — the workflow builder must copy the input file there first (or use `ETN_LoadImageBase64` if available). See "Implementation Notes" below.
+
+---
+
+## MCP Tool Signature
+
+Add to [`mcp/mcp-image-gen/src/server.py`](../mcp/mcp-image-gen/src/server.py):
+
+```python
+@mcp.tool()
+async def upscale_image(
+ input_path: Annotated[str, Field(description="Path to input PNG (absolute or ~-relative). Must be a file previously generated by generate_image().")],
+ scale: Annotated[int, Field(description="Upscale factor: 2 or 4 (default: 4). 4x-UltraSharp always runs at 4x; scale=2 applies a 0.5 resize after.")] = 4,
+ output_dir: Annotated[str, Field(description="Override output directory. Defaults to same dir as input_path.")] = "",
+ name: Annotated[str, Field(description="Optional output filename prefix. Defaults to input filename + _4x or _2x.")] = "",
+) -> list:
+ """Upscale an existing image using Real-ESRGAN (4x-UltraSharp).
+
+ No diffusion re-generation — pure post-processing (~5-10s).
+ Input must be a PNG file. Output is saved alongside the input by default.
+
+ Returns both a file path and an inline base64 image for display.
+ """
+```
+
+---
+
+## Implementation Notes
+
+### The `LoadImage` ComfyUI constraint
+
+ComfyUI's built-in `LoadImage` node only accepts filenames relative to `~/ComfyUI/input/`, not arbitrary paths. Two solutions:
+
+**Solution A (simplest):** Copy input to `~/ComfyUI/input/` before submitting workflow, use basename as `image` param, delete after.
+
+**Solution B:** Use `ETN_LoadImageBase64` node (part of `ComfyUI-ETN` custom node extension) — accepts a base64-encoded image directly. Check if installed:
+```bash
+ls ~/ComfyUI/custom_nodes/ | grep -i etn
+```
+
+**Recommended:** Start with Solution A (copy to input dir) — no dependencies. If `ComfyUI-ETN` is present, prefer Solution B for cleanliness.
+
+### Scale=2 handling
+
+`4x-UltraSharp.pth` always outputs 4×. For `scale=2`, upscale at 4× then resize the result image to 50% with PIL before saving. This is still sharper than native 2× bilinear upscaling.
+
+### Output filename convention
+
+Input: `foo_20260410_123456_12345.png`
+Output `scale=4`: `foo_20260410_123456_12345_4x.png`
+Output `scale=2`: `foo_20260410_123456_12345_2x.png`
+
+---
+
+## Files to Create/Modify
+
+| File | Change |
+|------|--------|
+| [`mcp/mcp-image-gen/src/workflows/esrgan_upscale.json`](../mcp/mcp-image-gen/src/workflows/esrgan_upscale.json) | New — ESRGAN workflow |
+| [`mcp/mcp-image-gen/src/server.py`](../mcp/mcp-image-gen/src/server.py) | Add `upscale_image()` tool + helpers |
+| [`mcp/mcp-image-gen/tests/test_upscale.py`](../mcp/mcp-image-gen/tests/test_upscale.py) | New test file |
+
+**No changes to:** workflow registry, existing tools, `generate_image()`.
+
+---
+
+## Pre-flight: Download Model
+
+```bash
+huggingface-cli download Kim2091/UltraSharp \
+ 4x-UltraSharp.pth \
+ --local-dir ~/ComfyUI/models/upscale_models/
+```
+
+Verify ComfyUI sees it:
+```bash
+curl -s http://localhost:8188/object_info/UpscaleModelLoader | \
+ python3 -c "import sys,json; d=json.load(sys.stdin); print('\n'.join(d['UpscaleModelLoader']['input']['required']['model_name'][0]))"
+```
+
+---
+
+## Test Cases
+
+| Test | Input | Expected |
+|------|-------|----------|
+| `test_upscale_4x` | 1024×1024 PNG | 4096×4096 PNG, `_4x.png` suffix |
+| `test_upscale_2x` | 1024×1024 PNG | 2048×2048 PNG, `_2x.png` suffix |
+| `test_invalid_path` | nonexistent path | Error TextContent returned |
+| `test_output_dir_override` | valid PNG + `output_dir=/tmp` | saved to /tmp |
+| `test_default_output_dir` | valid PNG, no output_dir | saved alongside input |
+
+---
+
+## Success Criteria
+
+- [ ] `4x-UltraSharp.pth` present in `~/ComfyUI/models/upscale_models/`
+- [ ] `upscale_image("path/to/1024.png", scale=4)` returns 4096×4096 PNG
+- [ ] Output file saved with `_4x.png` suffix
+- [ ] Inline base64 image returned for display in chat
+- [ ] All 5 test cases pass
+- [ ] No changes to existing `generate_image()` tests