Skip to content

Prompt tuning — change how the AI writes and shoots

Every social post the system generates comes out of a recipe. The recipe is mostly fixed (load the venue voice, the dish description, the operator’s note, the visual style), but a handful of small text fragments inside that recipe are what give each generation its character. The bulleted style baseline that says “photographic realism, phone-shot energy.” The single line that defines what “Moody” looks like. The HOOK / BEAT / CTA script shape that Stories use instead of flowing captions.

These fragments live in the database, not the source code. Open Super Admin → Social Prompts, edit any of them, hit Save. The next generation uses your version. No deploy, no engineering ticket.

The rule

The structural pieces are fixed. The prose pieces are yours.

The recipe’s structure (load voice, inject dish info, return JSON with caption + hashtags + altText) lives in code and never moves. The prose fragments (what “Moody” means, how Stories are framed, what Instagram-versus-Facebook caption guidance reads like) live in the editor. This split is intentional — it gives you full control over how the AI sounds and looks without any risk of accidentally breaking the output shape.

What you can edit

The editor has two top-level tabs.

Image generation:

  • Image baseline — the bullet list every image follows: “photographic realism, phone-shot energy, slightly overhead angle, warm natural light, avoid harsh ring-light shadows…” Edit when you want a different default aesthetic across every generation.
  • Style chips — six slots, one per chip on the Composer’s Style picker. Editorial is the baseline (intentionally empty — the bullet list above already describes editorial). Studio, Magazine, Phone-shot, Moody, Bright each layer a specific override on top. Edit Moody’s slot to change what selecting “Moody” produces from now on.
  • Aspect ratio tips — three slots (Square 1:1, Portrait 4:5, Story 9:16, Landscape 16:9) telling the model how to frame each crop. Edit if you want Stories to leave even more headroom for text overlays.
  • Reference image directive — when a dish has its own photo in the menu library, this fragment tells the AI to keep the dish faithful but reframe it editorially. Edit to make the AI more or less aggressive about preserving the original composition.

Text generation:

  • Channel hints — seven slots, one per channel (Instagram, Facebook, TikTok, X, LinkedIn, LINE Official, Google Business Profile). The brief sentence telling the AI how a post for that channel should read.
  • Post-kind directive — the HOOK / BEAT / CTA script shape that Stories and Reels follow instead of a flowing caption. Edit to change how many beats Stories should have, or to enforce a different structure.
  • Output format (JSON) — two slots (Feed post, Story / Reel) telling the model exactly what JSON shape to return. Careful here — the post-save flow depends on the model returning {caption, hashtags, altText}. You can change the rules inside, but if you change the schema shape the system breaks. Treat these slots as fine-tuning, not redesign.

How to use it

Open Super Admin → Social Prompts. Pick the tab — Image or Text. The page lists every editable slot grouped by section.

Each slot is a card showing:

  • The slot key (eyebrow, monospace — useful when reporting issues)
  • The label (human-readable title)
  • A description of what this fragment does and when it fires
  • A textarea with the current prose (auto-grows as you type)
  • A status pill — emerald Default means you haven’t customised it, purple Custom means you have
  • A Save button that lights up when you’ve changed the text
  • A Reset to default button that appears only when you’ve customised — clicking it restores the system default for just that slot

When ≥1 slot is customised, a summary banner appears at the top of the tab showing the count and a “Reset all to defaults” button. That bulk reset wipes every customisation across both tabs.

Worked example — making “Moody” darker

Marco wants Moody-style images to look more cinematic — deeper shadows, more film-noir, less “candle on the table.” He opens Super Admin → Social Prompts → Image generation and finds the Moody card under Style chips.

The current default reads:

“Override toward dark, dramatic key: deep shadows, single warm light source (candle, low tungsten), backlit steam, rich brown/burgundy palette, almost film-noir contrast. The dish glows out of darkness. Avoid bright daylight or pastel tones.”

He replaces it with:

“Override toward dramatic chiaroscuro: very deep shadows in the lower half of the frame, single low-key light source from the side (NOT a candle — a downward kitchen lamp), high contrast, almost black background, the dish lit like a Caravaggio still life. Burgundy and charcoal palette. No flames or candles visible. The dish should glow like it’s been spotlit on a stage. Strictly no daylight, no pastels.”

Hits Save. The status pill flips to purple Custom.

Next Composer click → Generate with Moody style → he gets the new look. Three generations later, he decides he overshot — the dish is too dark. He returns to the card, clicks Reset to default, and the next generation uses the system default again. Total cycle time: 2 minutes.

Worked example — sharper Instagram tone

iO Osteria’s voice on Instagram has drifted toward “fine dining English.” Marco wants it punchier and more colloquial. He opens Social Prompts → Text generation → Channel hints, finds the Instagram card, edits the prose to add: “Use short sentences. Allow incomplete sentences. Avoid words like ‘culinary’, ‘craftsmanship’, ‘curated’ — they read as marketing. Lean into specifics: the name of the cheese, the producer’s town.”

Saves. Next Composer Generate for Instagram → the AI takes the punchier direction.

What you can’t break

  • The JSON output shape is partly your responsibility — if you change the schema rules inside the two output-format slots, the system breaks. The post-load flow expects {caption, hashtags, altText}. Don’t change the field names.
  • Venue voice + dish info injection is fixed in code, can’t be removed. Every generation still pulls from the venue’s Voice & Brand profile and the active dish’s description, regardless of what you do in this editor.
  • Structural section headers (# Voice & Brand, # Subject, # Style direction) are fixed. You’re editing the prose between them, not the scaffolding.

If you ever blow up something accidentally, the fix is one click: hit Reset to default on the slot, or Reset all to defaults at the top.

  • Composer — where these prompts produce posts.
  • Voice & Brand — the per-venue voice profile that’s separate from these platform-wide slots. Voice & Brand defines the venue’s personality; Social Prompts defines how the AI translates that personality into a post.
  • Service resilience — the sibling super-admin runtime-config pattern.