← back to Ventura Corridor
iter 176: rewrite gen prompt — 6 positive headline patterns up front (verb-led/specific-noun/sensory/contrast/time-place/fragment), negative AVOID list now secondary; killed stale gen worker so watchdog respawns w/ new prompt
a52bd713ad57c8be90cdeb0c7f7b5b5bfe8cc8a0 · 2026-05-06 20:29:43 -0700 · SteveStudio2
Files touched
M src/jobs/generate_features.tsM src/server/index.ts
Diff
commit a52bd713ad57c8be90cdeb0c7f7b5b5bfe8cc8a0
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Wed May 6 20:29:43 2026 -0700
iter 176: rewrite gen prompt — 6 positive headline patterns up front (verb-led/specific-noun/sensory/contrast/time-place/fragment), negative AVOID list now secondary; killed stale gen worker so watchdog respawns w/ new prompt
---
src/jobs/generate_features.ts | 21 ++++++++++++---------
src/server/index.ts | 21 ++++++++++++---------
2 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/src/jobs/generate_features.ts b/src/jobs/generate_features.ts
index 64b9272..e04ea84 100644
--- a/src/jobs/generate_features.ts
+++ b/src/jobs/generate_features.ts
@@ -20,11 +20,21 @@ const args = process.argv.slice(2);
const SPECIFIC = (args.find(a => a.startsWith('--biz=')) || '').replace('--biz=', '');
const COUNT = parseInt(args.find(a => /^\d+$/.test(a)) || '5', 10);
-const SYSTEM = `You are a corridor editor writing flattering, magazine-style ~100-word features for businesses on Ventura Boulevard in Sherman Oaks / Encino / Tarzana. Your tone is warm but never gushing — think Conde Nast Traveler shopping guide. You highlight what makes the business feel like part of the neighborhood.
+const SYSTEM = `You are a corridor editor writing flattering, magazine-style ~100-word features for businesses on Ventura Boulevard in Sherman Oaks / Encino / Tarzana. Your tone is warm but never gushing — think Conde Nast Traveler shopping guide.
+
+HEADLINE STYLE — pick ONE of these voice patterns each time, vary across features:
+ 1. Verb-led: "Threading Stories Through Linen", "Sharpening Knives Since 1979"
+ 2. Specific-noun-first: "The Corner Booth at Anh-Anh", "A Chair in the Window at Mark Morgan"
+ 3. Sensory detail: "Brass Hardware, Shaved Ice", "Marble Counters and Espresso Steam"
+ 4. Contrast: "Mid-Century Lobby, Cellphone Repair Inside", "Quiet Office, Loud Reputation"
+ 5. Time + place: "After Hours at Khanh Nguyen", "Mornings on the 11200 Block"
+ 6. Question or fragment: "Why the Line Forms at Anh-Anh's", "Twelve Stools, No Reservations"
+
+NEVER use any of these stale phrasings: "X in Y's Heart", "X Meets Y", "Where X Meets Y", "X Rooted in Y", "Precision Care", "Legal Precision", "Legal Expertise", "Steady Counsel", "Timeless Elegance", "Vibrant Hub". If you find yourself reaching for one of these, stop and try a different opening.
Output a JSON object with EXACTLY these fields:
{
- "headline": "6-10 word title",
+ "headline": "6-10 word title in one of the 6 styles above",
"subhead": "12-18 word subtitle",
"editorial": "80-130 word feature paragraph",
"pull_quote": "8-15 word callout",
@@ -35,13 +45,6 @@ Rules:
- Never invent specific prices, opening dates, owner names, or claims you can't verify.
- Lean on the address as a sense of place ("just east of Sepulveda" / "in the white-stone tower at 15821 Ventura").
- Avoid superlatives ("the BEST"). Prefer concrete sensory details.
-- HEADLINE VARIETY: Do NOT use these overused templates:
- • "X in Y's Heart" / "X in Y's Vibrant Heart" / "X in Y's Heartbeat"
- • "X Meets Y" / "Where X Meets Y"
- • "X Rooted in Y"
- • "Precision Care in..." / "Legal Precision..." / "Legal Expertise..."
- • "Steady Counsel" / "Timeless Elegance"
- Find a fresher angle: a sensory detail, a verb-led opening, a contrast, a small specific noun.
- Output ONLY the JSON. No preamble, no markdown fences.`;
async function generate(biz: any, model: string): Promise<any> {
diff --git a/src/server/index.ts b/src/server/index.ts
index 9b7616f..f651eab 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -2644,11 +2644,21 @@ app.post('/api/magazine/:id/regen', express.json(), async (req, res) => {
if (r.rowCount === 0) return res.status(404).json({ error: 'feature not found' });
const biz = r.rows[0];
- const SYSTEM = `You are a corridor editor writing flattering, magazine-style ~100-word features for businesses on Ventura Boulevard in Sherman Oaks / Encino / Tarzana. Your tone is warm but never gushing — think Conde Nast Traveler shopping guide. You highlight what makes the business feel like part of the neighborhood.
+ const SYSTEM = `You are a corridor editor writing flattering, magazine-style ~100-word features for businesses on Ventura Boulevard in Sherman Oaks / Encino / Tarzana. Your tone is warm but never gushing — think Conde Nast Traveler shopping guide.
+
+HEADLINE STYLE — pick ONE of these voice patterns each time, vary across features:
+ 1. Verb-led: "Threading Stories Through Linen", "Sharpening Knives Since 1979"
+ 2. Specific-noun-first: "The Corner Booth at Anh-Anh", "A Chair in the Window at Mark Morgan"
+ 3. Sensory detail: "Brass Hardware, Shaved Ice", "Marble Counters and Espresso Steam"
+ 4. Contrast: "Mid-Century Lobby, Cellphone Repair Inside", "Quiet Office, Loud Reputation"
+ 5. Time + place: "After Hours at Khanh Nguyen", "Mornings on the 11200 Block"
+ 6. Question or fragment: "Why the Line Forms at Anh-Anh's", "Twelve Stools, No Reservations"
+
+NEVER use any of these stale phrasings: "X in Y's Heart", "X Meets Y", "Where X Meets Y", "X Rooted in Y", "Precision Care", "Legal Precision", "Legal Expertise", "Steady Counsel", "Timeless Elegance", "Vibrant Hub". If you find yourself reaching for one of these, stop and try a different opening.
Output a JSON object with EXACTLY these fields:
{
- "headline": "6-10 word title",
+ "headline": "6-10 word title in one of the 6 styles above",
"subhead": "12-18 word subtitle",
"editorial": "80-130 word feature paragraph",
"pull_quote": "8-15 word callout",
@@ -2659,13 +2669,6 @@ Rules:
- Never invent specific prices, opening dates, owner names, or claims you can't verify.
- Lean on the address as a sense of place ("just east of Sepulveda" / "in the white-stone tower at 15821 Ventura").
- Avoid superlatives ("the BEST"). Prefer concrete sensory details.
-- HEADLINE VARIETY: Do NOT use these overused templates:
- • "X in Y's Heart" / "X in Y's Vibrant Heart" / "X in Y's Heartbeat"
- • "X Meets Y" / "Where X Meets Y"
- • "X Rooted in Y"
- • "Precision Care in..." / "Legal Precision..." / "Legal Expertise..."
- • "Steady Counsel" / "Timeless Elegance"
- Find a fresher angle: a sensory detail, a verb-led opening, a contrast, a small specific noun.
- Output ONLY the JSON. No preamble, no markdown fences.`;
const userPrompt = `Business: ${biz.name}
Address: ${biz.address || 'unknown'}, ${biz.city || ''} ${biz.zip || ''}
← 5d90ce1 iter 175: SESSION_LOG addendum — captures iters 171-175 + th
·
back to Ventura Corridor
·
iter 177: SESSION_LOG addendum 2 — prompt-rewrite win confir d607f2b →