hermes-creative

/home/avalon/.hermes/skills/creative/hermes-creative/SKILL.md · raw

Hermes Creative Operator

Use this skill whenever Alex asks to ideate, brand, concept, generate/review media, save assets to a media vault, create brand direction, or turn brand direction into organic/paid campaign strategy.

Hermes Creative is the upstream brand intelligence and creative studio for Alex's Hermes ecosystem:

Telegram capture + user intent
  → Hermes Creative brand/project context
  → Brand Architect / Creative Director / Strategists
  → Hermes Media Vault
  → Hermes Social organic drafts
  → Hermes Ads paid drafts
  → performance learnings back into strategy

Current deployment target

Core posture

Default agent roles

Brand Architect

Senior brand strategist. Defines: - positioning - audience - emotional territory - story - archetype - brand promise - enemy / what the brand refuses to be - high-level visual territories

Ask questions like: - What world does this product live in? - Who is it for? - What does it refuse to be? - What emotional territory should it own?

Creative Director

Turns brand direction into visual language: - moodboards - creative territories - color/type/image rules - image prompts - visual do/don't examples

Media Vault Librarian

Maintains vault organization: - references - generated assets - approved/rejected folders - metadata sidecars - brand context exports - decision history

Content Strategist

Turns brand + business goals + assets + stats into organic/paid plans: - content pillars - hook banks - campaign concepts - social draft ideas - ad draft ideas - testing matrix

Creates paid concepts for Hermes Ads only as local drafts unless Alex explicitly approves platform writes.

Organic Social Strategist

Creates organic post/campaign concepts for Hermes Social as local drafts unless Alex explicitly approves publishing/scheduling.

Performance Analyst

Reads Ads/Social stats and produces creative learnings and next tests.

Telegram interaction patterns

Alex may write naturally. For brand-development sessions, use a visual-first interview style: generate/show a small number of visual cues, let Alex approve/reject/comment, then ask one targeted question at a time based on that feedback. Do not send long lists of abstract brand questions unless Alex explicitly asks for a worksheet.

Interpret messages into one of five intents:

  1. Capture — save text/link/image/video/voice as a project reference.
  2. Analyze — ask Brand Architect or Creative Director to interpret references.
  3. Generate — create directions, prompts, images, strategies, or campaigns.
  4. Review — approve/reject/compare directions/assets/drafts.
  5. Handoff — create local drafts in Hermes Social/Hermes Ads.

Examples:

Save this to Astro Mage references and have Brand Architect analyze the vibe.
Generate 5 brand directions for Magi from the current vault.
Approve direction 2 as primary. Reject 4 as too SaaS.
Turn the approved direction into a 14-day organic content plan.
Create paid campaign drafts in Hermes Ads, local only, do not push to Meta.

UI response pattern

For Telegram responses, keep it compact:

  1. What was saved/created.
  2. Best recommendation.
  3. What needs review.
  4. Direct UI link.
  5. Clear next actions.

Never dump huge galleries in Telegram. Use UI links for bulk review.

App shell / project selector UI preferences

Hermes Creative should be tool-first, not hero-first. Do not add or preserve a large repeated hero/marketing section across tabs. Alex explicitly asked to remove the old persistent “Brand Architect MVP” / “Brand Architect + Creative Director” style hero because it wastes vertical space and repeats on every tab.

Preferred shell pattern:

  1. Put the Hermes Creative mark/logo and active project selector in a compact sticky top bar.
  2. Keep the project selector globally available while moving through tabs.
  3. Include “Create new project…” inside the selector/dropdown, not as a large Home-tab setup form.
  4. Creating a project opens a modal/overlay. Cancel returns to the previous project/selection; successful create switches into the new project immediately.
  5. Do not keep a generic Home tab. The app should open directly into the first real working surface (currently Architect) and the bottom nav should only contain functional workspace tabs. - Preserve mobile safe-area padding and verify on an iPhone-sized viewport that the header remains compact, the selector/modal are usable, and no Home tab or workspace-summary copy remains. - For mobile modals/drawers, treat overlays as viewport-rooted surfaces, not descendants of app-shell spacing. Use visualViewport-driven --app-viewport-height and --app-viewport-top CSS variables, force overlays to position:fixed; top:var(--app-viewport-top); height:var(--app-viewport-height), lock body.modal-open/body.review-modal-open with a fixed-position scroll-preserving body lock (not only overflow:hidden), and put scrolling on one internal panel with -webkit-overflow-scrolling:touch. This prevents the recurring top gap and address-bar minimize scroll glitches. See references/mobile-modal-viewport-gap-fix-2026-05-19.md.

See references/compact-project-topbar-2026-05-17.md for the implementation notes and verification recipe from the first app-shell overhaul. See references/no-home-tab-app-shell-2026-05-17.md for the follow-up removal pattern and verification notes.

Vault UI design rules

The Vault section should feel compact and professional, not “jumbo.” It is now the active visual operating console. When adding reference/import/asset-management UI:

See references/collections-first-vault-overhaul-2026-05-17.md for the schema migration, API surface, UI pattern, smoke test, and pitfalls from the package-to-collections pivot. See references/vault-disclosure-upload-flow-2026-05-17.md for the follow-up correction: top-level New collection/Pinterest forms hidden by default, upload metadata shown only after file preview, and visible processing states. See references/vault-compact-grid-overlap-2026-05-17.md for the iPhone Safari compact-grid overlap root cause and durable CSS pattern.

Reversible creative phase work

When Alex asks to move into a next phase after visual exploration, create a versioned/reversible work package before pushing further:

This is a first-class workflow preference: Alex wants a clean, thorough retry path if he dislikes a direction.

Review queue / swipe review implementation preference

For Hermes Creative UI work, the review queue should support focused review rather than forcing decisions inside a long page:

  1. Keep the Review tab as a compact, scrollable list of pending items.
  2. Tap an item to open a focused Tinder-style overlay/deck.
  3. Lock background/body scrolling while the overlay is open.
  4. Keep the asset/content preview prominent and the approval question visible without scrolling.
  5. Provide optional reason/context text before approve/reject/delete.
  6. Support swipe-right approve and swipe-left reject, plus explicit buttons.
  7. Decisions must automatically advance to the next pending review item; approve/reject/delete should not close the overlay. Only the Close button exits back to the list.
  8. Put detailed metadata in a separate scrollable More Info panel; the focused overlay itself should remain non-scrollable.
  9. Delete from review should preserve audit/provenance and mark linked entities consistently.
  10. Tune swipe feel for speed/smoothness: no transition while actively dragging, short ease-out after release, will-change: transform, and a short busy state to avoid double actions.

See references/reversible-phases-and-swipe-review-2026-05.md for the original implementation notes and references/review-deck-and-media-url-pitfalls-2026-05.md for deck-advance/media-preview debugging details.

See references/reversible-phases-and-swipe-review-2026-05.md for the session-specific implementation notes and pitfalls.

Retired Visual Package wizard notes

The Visual Package wizard guidance below is historical. As of the collections-first pivot, do not expose a Visual Packages tab or rebuild the /visual-packages API by default. If Alex asks for the wizard again, reinterpret it as a future guided skill/workflow that creates/edits asset_collections, collection_assets, and asset metadata, not a revival of the old rigid package hierarchy.

When building or fixing a future collection-backed guided wizard:

  1. A new Brand Visual Identity wizard should immediately POST /api/projects/:slug/visual-packages with status='draft'; do not wait until the last step to create the DB row, because Hermes chat, uploads, saved step state, and generation batches need a package id.
  2. Final confirmation should complete the draft (typically set status='in_review' plus structured_payload.export.confirmed=true) rather than auto-approving or setting it primary. Only explicit “Set primary” should call /set-primary.
  3. Hermes chat inside the wizard should be able to trigger generation when the prompt asks for “generate”, “variation(s)”, “batch”, “options”, or “selectable”. Show generated outputs as selectable batches attached to the active step, and persist selected asset ids in that step’s structured_payload.
  4. Mobile wizard bottom actions should be a full-width bottom-docked bar, not an indented/floating pill. Use position: fixed; left: 0; right: 0; width: 100vw; bottom: 0; plus env(safe-area-inset-bottom/left/right) padding and enough card bottom padding so content is not hidden.
  5. Mobile landing cards must aggressively prevent horizontal overflow: wrap long vault paths/badges/buttons, set min-width:0 on cards/rows/grids, overflow-x:hidden on the app/body, and avoid single-line buttons that exceed the viewport.
  6. Do not call the mobile wizard fixed just because the footer is fixed. Verify the active step's section controls and Hermes chat are actually visible/reachable on iPhone. A common regression is global mobile .card { overflow:hidden } overriding .wizard-card { overflow:auto }, clipping everything below the header/Save button. Force .wizard-card { overflow-y:auto !important; -webkit-overflow-scrolling:touch !important; } at mobile breakpoints when needed, and place Save step after the section-specific controls so the visible UI is not just a save button.
  7. For mobile, the Brand Visual Identity wizard should feel like a bottom-sheet app screen, not a nested desktop modal. Remove redundant floating info/description panels inside the wizard, put the package name in the top bar alongside Close, make step selectors a horizontal scrolling pill list, anchor the wizard shell to the bottom of the viewport, and aggressively reduce nested card gutters/padding. The top-level card can keep a small edge margin, but the wizard content itself should not create multiple inset panels that waste phone width.
  8. Avoid svh + sticky/grid rows for the mobile wizard sheet. This caused a huge top gap and vertically clipped step pills on iPhone even after the header was moved inside the sheet. Prefer a true bottom-sheet surface: fixed full-screen overlay, flex align-items:flex-end, shell height calc(100dvh - max(8px, env(safe-area-inset-top))), card as a flex column with normal non-sticky topbar/steps, step row min-height around 54px, and step pills height/min-height around 38px. Verify geometry on a live mobile viewport, not just by inspecting CSS.

See references/visual-package-wizard-draft-batches-mobile-2026-05.md for the session-specific implementation diff and verification notes. See references/visual-package-wizard-mobile-clipping-2026-05-17.md for the clipped-controls follow-up. See references/visual-package-wizard-bottom-sheet-mobile-2026-05-17.md for Alex's bottom-sheet/no-gutters correction. See references/visual-package-wizard-mobile-dvh-bottom-sheet-2026-05-17.md for the final iPhone gap/clipped-step root cause and Playwright verification recipe.

API quick reference

Base local URL: http://127.0.0.1:4030

Important endpoints:

GET  /api/health
GET  /api/projects
POST /api/projects
GET  /api/projects/:slug
GET  /api/projects/:slug/references
POST /api/projects/:slug/references
POST /api/projects/:slug/pinterest/import
GET  /api/projects/:slug/brand-kit
PATCH /api/projects/:slug/brand-kit
POST /api/projects/:slug/directions/generate

Pitfall: `PATCH /api/projects/:slug/brand-kit` behaves like a full-field update for brand-kit text fields in the current app; omitted fields may be blanked. Always GET the existing brand kit first, merge changes client-side, and send all core fields (`audience`, `offer`, `positioning`, `voice`, `visual_direction`, `colors`, `typography`, `dos`, `donts`, `notes`).
GET  /api/projects/:slug/directions
POST /api/directions/:id/approve
POST /api/directions/:id/reject
GET  /api/projects/:slug/assets
POST /api/projects/:slug/assets
PATCH /api/assets/:id
POST /api/assets/:id/approve
POST /api/assets/:id/reject
GET  /api/projects/:slug/collections
POST /api/projects/:slug/collections
PATCH /api/collections/:id
POST /api/collections/:id/upload
POST /api/collections/:id/assets
DELETE /api/collections/:id/assets/:assetId
POST /api/projects/:slug/strategy/generate
GET  /api/projects/:slug/review
POST /api/review/:id/decision
DELETE /api/review/:id
POST /api/hermes/ingest

Hermes ingest example:

curl -fsS -X POST http://127.0.0.1:4030/api/hermes/ingest \
  -H 'Content-Type: application/json' \
  --data '{
    "project_slug":"astro-mage",
    "type":"url",
    "title":"Reference landing page",
    "source_url":"https://example.com",
    "notes":"Premium but not the exact color direction."
  }'

Pinterest board import example:

curl -fsS -X POST http://127.0.0.1:4030/api/projects/north-star/pinterest/import \
  -H 'Content-Type: application/json' \
  --data '{"url":"https://www.pinterest.com/firemnt/celestial/","limit":12,"delay_ms":700}'

Use this for moodboards/reference boards when Alex wants vision AI analysis without hammering Pinterest. The importer caches board metadata, downloads images into the media vault, registers reference-image assets, and creates review rows. If a valid board imports 0 images, do not retry aggressively; some Pinterest boards expose no RSS/unauthenticated image data, so use an authenticated/browser fallback or ask for exported references.

AI-assisted asset intelligence / KB / generation architecture

When Alex asks about upload metadata, vision models, Telegram-first asset capture, LLM Wiki/knowledge-base integration, or borrowing from the image generation app, treat this as a core Hermes Creative architecture task — not a manual form/UI tweak.

Current baseline as of commit 84b930f plus the 2026-05-18 repair: Hermes Creative has durable technical metadata on upload, asset_ai_enrichments, project KB scaffold/pages, enrichment apply/reject endpoints, generation_jobs, asset_versions, fal generation/edit adapter plumbing, collection Generate UI, asset drawer AI/generation surfaces, and OpenAI/Codex subscription-backed vision enrichment. The real vision provider path should default to Hermes/OpenAI subscription auth (openai-codex, usually gpt-5.5) rather than direct OPENAI_API_KEY quota. Local/technical fallback must not be presented as successful visual enrichment.

Preferred target pattern:

  1. Save uploaded media immediately and never block upload success on AI provider availability.
  2. Queue AI vision enrichment that drafts title, kind, tags, visual semantics, brand role, collection placement, prompt fragments, negative prompt fragments, fit/mismatch against current brand context, do/don’t rules, and proposed brand-rule candidates.
  3. Store each AI attempt/proposal in asset_ai_enrichments, but on successful real vision analysis also merge the structured fields into canonical assets.metadata_json so future Hermes skills/agents can query assets directly without requiring a manual “apply” step. Proposed durable brand rules still require review/approval before updating brand memory.
  4. Maintain project-scoped KB files (kb/SCHEMA.md, kb/index.md, kb/log.md, raw/assets/brand/concepts/comparisons/queries) so asset knowledge compounds like an LLM Wiki.
  5. Automatically write asset KB pages, but only update durable brand rules/decisions after explicit approval.
  6. Borrow fal Studio's server-side generation/edit adapter patterns, not its whole UI. Generated/edited media must become Hermes Creative vault files, assets, collection members, review items, KB pages, generation job records, and automatic vision-enriched asset metadata. FAL queue endpoints may return only request_id/status_url/response_url at first; poll the queue until a real image/video URL exists, treat “still in progress” as non-terminal, and clear stale generation_jobs.error on successful reruns. See references/collection-overlay-and-fal-queue-2026-05-18.md.
  7. For editing current media, default to “Save as new asset”; “Replace current media” requires explicit confirmation and a version snapshot.
  8. For AI generation/edit jobs, the UI must be backed by generation_jobs, not temporary component state. Poll/list jobs from the project endpoint so active/failed/completed work survives refresh, and show all simultaneous jobs in a compact tray. See references/parallel-generation-edit-analysis-ux-2026-05-18.md.
  9. For asset edit/variation, default to OpenAI subscription-backed GPT Image 2 (openai-codex/gpt-image-2) when Codex/ChatGPT OAuth is available, and include the source asset as reference id 1. The UI should expose a model picker so Alex can switch to GPT Image 2 High or FAL edit models. If OpenAI/Codex image generation fails, automatically fall back to a reference-capable FAL edit model (currently fal-ai/nano-banana-2/edit) and record both requested model and actual fallback provider/model in job/asset metadata. Verify reference images reach the provider: OpenAI/Codex uses input_image content, while FAL uses image_urls/image_url via applyReferenceUrlsToFalBody().

Vision analysis quality bar

Alex explicitly corrected that AI should not merely say “picture of a star” or provide a generic caption. The analysis must answer brand-system questions:

The implemented prompt version is asset-enrichment-v2-brand-system in src/lib/ai/visionAdapter.mjs; keep future provider adapters aligned with that contract.

Vision provider and “Needs setup” debugging

If generated/uploaded/edited images show Needs setup, inspect backend enrichment state before changing UI labels:

cd /home/avalon/apps/hermes-creative
node - <<'NODE'
import Database from 'better-sqlite3';
const db=new Database('./data/hermes-creative.sqlite');
console.log(db.prepare("select e.id,e.asset_id,e.status,e.provider,e.model,substr(e.error,1,180) error,a.title,json_extract(a.metadata_json,'$.ai.status') ai_status from asset_ai_enrichments e join assets a on a.id=e.asset_id order by e.id desc limit 20").all());
NODE

Known pitfall: direct OpenAI API quota failures (OPENAI_API_KEY / gpt-4o-mini) produce legitimate provider_needed/failed states even though Hermes has ChatGPT subscription access. The fix is to route vision through openai-codex/Codex OAuth (Python bridge if needed), then merge successful proposedMetadata into canonical assets.metadata_json and clear stale ai.error. See references/openai-codex-vision-asset-enrichment-2026-05-18.md.

See references/ai-vision-kb-generation-architecture-2026-05-17.md for the inspected current state, proposed tables, KB layout, brand-aware enrichment schema, generation/edit flow, and implementation order. A full repo-local plan also exists at /home/avalon/apps/hermes-creative/docs/plans/2026-05-17-ai-vision-kb-generation-architecture.md (commit 5c01d30). See references/asset-intelligence-foundation-2026-05-18.md for the deployed foundation, exact verification recipe, and the brand-system analysis correction.

Vault conventions

Vault root:

/home/avalon/hermes-media-vault/projects/<project-slug>/

Canonical folders:

brand/
references/uploads/
references/screenshots/
references/youtube/
moodboards/
generated/images/
approved/
rejected/
campaigns/
exports/

Every major asset/reference should preserve: - source/provenance - project - direction/campaign if relevant - prompt/model if generated - status - tags - notes - approval/rejection rationale

Brand context pack

Each project should maintain:

brand/brand-brief.md
brand/brand-context.md
brand/brand-glossary.md
brand/visual-rules.md
brand/voice-and-tone.md
brand/content-pillars.md
brand/decisions.md

The compact brand-context.md is the preferred context to inject into future Social/Ads/Creative tasks.

Safety rules

Preferred workflow

  1. Create/select project.
  2. Capture references via Telegram or UI.
  3. For brand exploration, lead with visual cues and approval/rejection loops rather than questionnaires. Ask at most one focused question per turn, derived from the specific visual feedback just given.
  4. Ask Brand Architect for synthesis.
  5. Keep the current layer clear: if Alex is using Hermes Creative for brand work, stay in brand strategy / creative direction mode and do not drift into detailed app UX/build specs unless explicitly asked. First-open copy may be discussed as brand messaging, not implementation.
  6. Generate creative directions.
  7. Approve/reject direction.
  8. Export/update brand context pack.
  9. Generate or upload media assets.
  10. Review/approve/reject assets.
  11. When Alex approves/rejects a batch and asks what it means, analyze the actual DB decisions, create approved/rejected contact sheets for image sets, compare patterns, save a synthesis note under brand/, and create 3–5 new creative_directions plus review rows. Do not reduce the signal to a crude binary if approved/rejected sets share motifs; find the sharper boundary between approved and rejected executions.
  12. Generate campaign strategy.
  13. Handoff local drafts to Hermes Social/Hermes Ads.
  14. Pull performance learning later and update strategy.

Visual branding approval loop

When Alex asks to move into visual branding/image generation from Hermes Creative:

  1. First classify the requested visual layer before generating: brand mark/logo, brand imagery/content system, campaign/social/ad creative, moodboard/reference, or UI/product expression. If UI is not explicitly requested, keep outputs as brand imagery/media direction rather than app screens.
  2. Create a compact set of visual directions in creative_directions, scoped to the active project.
  3. Generate images for those directions. For brand imagery, prompt for reusable visual systems and media/content treatments, not just UI mockups.
  4. Copy generated files into the project media vault, usually generated/images/.
  5. Register every image as an assets row using POST /api/projects/:slug/assets with direction_id, file_path, and prompt/provenance notes; this creates review queue rows.
  6. Send Telegram-native MEDIA:/absolute/path images with short labels so Alex can approve/reject/comment.
  7. Apply feedback to actual Hermes Creative asset/direction statuses before generating the next round.
  8. Only translate approved brand imagery into UI screens/components when Alex asks for UI or when the project phase is explicitly product design.

Pitfall: do not treat generated images as detached chat artifacts. They must be tracked in Hermes Creative’s DB, media vault, and review queue so approvals/rejections become durable creative memory.

Pitfall: do not over-index on UI. Alex may be building a full brand where the primary visual output is content/media/identity; UI should be treated as a downstream expression of the brand system, not the center of the creative process.

DB maintenance patterns

When Alex asks to remove generated project data shown in the app, act directly on the SQLite DB after inspecting schema and backing up when the change is broad:

When generating media

If Alex provides many source/reference images, do not arbitrarily limit to 3. Use the full provided set or clearly state any provider/model cap first.

North Star visual style — minimal organic line / block-print (Alex correction)

For the North Star project, the approved visual direction is organic minimal line art with restrained block-print weight, minimal shading, and lots of negative space. Earlier overly-ornate "modern talisman" demos were rejected. When generating for North Star:

DO NOT invent motif lists from scratch (Alex correction)

When Alex asks for "more talisman options" or "another round of brand imagery", do not open by inventing a list of stock motifs (eye+triangle, ouroboros, phoenix, wolf+moon phases, all-seeing eye, lotus halos, etc.) and fanning them across models. Alex has explicitly said this produces "cheesy and generic" results that betray the unique references he has already curated. This failure mode happens even when the prompt language sounds correct ("modern block print line art talisman") — because the motif inventory is the actual generic ingredient, not the surface adjectives.

Correct opening move for any "more options" or "different references" request on a project that already has approved assets:

  1. Query the project's approved assets first: sqlite3 .../hermes-creative.sqlite "SELECT a.file_path FROM assets a JOIN projects p ON p.id=a.project_id WHERE p.slug='<slug>' AND a.status='approved' ORDER BY RANDOM() LIMIT 12-15;"
  2. Surface a small contact sheet of those approved references (via the /media/ URLs) and ask Alex to pick 2-3 as seeds.
  3. Only then do reference-guided generation against those seeds. Never substitute "Hermes invents 10 fresh concepts" for "Hermes inherits from Alex's curation."

If Alex's reply is a frustration signal ("not liking", "generic", "rewind", "back to creative direction"), treat that as an order to stop generating and re-anchor on the vault — not to retry with different adjectives.

For the seven classical planetary gods workflow, avoid making Jupiter/Mars/Sun/Venus/Mercury/Moon by editing the approved Saturn image. That produces a coherent style but accidentally transfers Saturn's posture and silhouette into the other gods. Correct sequence: generate a fresh text-only base for each god using the compressed ancient-classical → isolated subject → simplified etching prompt, then apply the approved style variants to that god's own base image. See references/planetary-god-fresh-base-correction-2026-05-16.md.

When Alex reviews individual planetary gods, treat his character-direction notes as iconographic corrections, not just "style" tweaks. Known corrections: Zeus/Jupiter should read more powerful/kingly/thunderous; Sun should read as powerful Apollo/solar god; Venus should be more alluring/classically beautiful but provider prompts must use safe museum-classical wording; Luna should be lunar mother goddess first with Artemis/Diana cues second. For Luna specifically, avoid AI bow/hand artifacts: no bow in hand, no extra hand, no bow emerging from the dress; place a bow separately on the ground or omit it. See references/planetary-god-v3-v4-feedback-2026-05-17.md.

Multi-engine image generation with vault references (preferred pattern)

This is the default pattern for any brand-imagery generation round on a project with approved references — not a fallback. Text-only prompts should be reserved for the very first exploration round on a brand-new project with no curated references yet.

When generating brand imagery from approved references, the strongest pattern is to feed real approved Hermes Creative assets to reference-capable edit endpoints rather than relying on text-only prompts.

  1. Confirm the vault assets are publicly reachable at https://hermes-creative.apps.poofc.com/media/projects/<slug>/... (the server mounts /media on the vault root).
  2. Pick 1-3 approved references that best embody the target style (filter on assets.status='approved').
  3. Submit in parallel to multiple engines for comparison: - fal nano-banana/editimage_urls array, accepts up to multiple refs, best for multi-ref style transfer. - fal qwen-image-edit — single image_url, fast and obedient to minimal prompts. - fal flux-pro/kontext — single image_url, good for clean line preservation. - Venice /image/multi-edit — up to 3 images, but uses modelId (not model) and only certain model ids work (qwen-edit, not qwen-image-2).
  4. Register every output as an asset row pointing into generated/images/<batch-slug>/ with provenance in notes.

Provider quirks worth remembering:

See references/north-star-visual-branding-loop-2026-05.md and the project vault's brand/visual-decision-synthesis.md for the full North Star approval/rejection mapping.

Deployment notes

Build/restart:

cd /home/avalon/apps/hermes-creative
npm run build
PORT=4030 pm2 start /home/avalon/apps/hermes-creative/server.mjs --name hermes-creative --cwd /home/avalon/apps/hermes-creative
pm2 save
curl -sS http://127.0.0.1:4030/api/health

Pitfall: pm2 restart hermes-creative --update-env can preserve or reapply a stale PORT from another app if the process was previously started incorrectly. If :4030 health fails after restart, check pm2 env <id> | grep '^PORT' and recreate the process with PORT=4030 pm2 start ... --cwd ..., then pm2 save.

PWA app shell should not rely on nginx Basic Auth; use app-level auth for sensitive APIs when added.

References

See references/planetary-god-fresh-base-correction-2026-05-16.md — important correction for the seven planetary gods workflow: do not use Saturn as the reference image for the other gods; create a fresh text-only base per god first, then apply the approved style directives to that god's own base image. - references/approval-rejection-synthesis-2026-05.md — workflow for turning asset approval/rejection batches into contact-sheet analysis, decision synthesis, and new reviewable creative directions. - references/visual-identity-packages-foundation-2026-05.md — package-driven Hermes Creative architecture and implementation notes, including Alex’s correction that brand visual identity packages must be structured visual kits (logo/color/type/layout/inspiration), not copied Brand Kit prose; covers tables/APIs, Visual Packages tab, brand wizard, upload endpoint, dynamic lower-level packages, and next universal-review steps. - references/visual-package-wizard-draft-batches-mobile-2026-05.md — follow-up correction for Visual Package wizard semantics: new wizard creates a live draft immediately; Hermes chat can trigger selectable variation batches; final confirm marks ready/in-review rather than primary; mobile footer and landing overflow CSS fixes. - references/visual-package-wizard-verification-smoke-2026-05.md — historical/deprecated deploy/smoke verification recipe for the old wizard: build + PM2 + health checks, API-created temporary draft, final-confirm patch to in_review (not approved), archive cleanup, and browser-sandbox fallback checks. Do not use this as the default architecture after the collections pivot. - references/collections-first-vault-overhaul-2026-05-17.md — package-to-collections pivot: schema migration from visual_identity_packages/package_assets into asset_collections/collection_assets, new collection APIs, Vault command/grid UI, richer asset metadata fields, smoke tests, and pitfalls. - references/project-clone-and-collection-seeding-2026-05-17.md — workflow for creating a new Hermes Creative project from an existing project's brand kit/assets, cloning assets into the new vault, registering Telegram chat-uploaded logo images, and seeding flexible collections with provenance metadata.