feat: full-service agency pitch — outreach email + subject, richer Gemini brief
- Prompt now describes complete agency capabilities (everything web-related) - Concrete pitch examples with business name + specific problem references - New mandatory output fields: outreach_email (3-4 sentence ready-to-send ES) and email_subject (specific subject line) - HOT/WARM/COLD scoring guide based on site deficiency count - Modal: pitch box replaced with full outreach email + subject + Copy button - max_output_tokens raised to 6000 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -237,10 +237,16 @@ tr:hover td{background:rgba(255,255,255,.025)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Pitch -->
|
||||
<!-- Outreach email -->
|
||||
<div style="background:#6c63ff15;border:1px solid #6c63ff33;border-radius:6px;padding:10px;margin:8px 0">
|
||||
<div style="font-size:10px;color:var(--muted);text-transform:uppercase;margin-bottom:4px">Cold Pitch (ES)</div>
|
||||
<div style="font-size:13px;font-style:italic;color:var(--accent2)" x-text="modal.ai.pitch_angle||'—'"></div>
|
||||
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px">
|
||||
<div style="font-size:10px;color:var(--muted);text-transform:uppercase">Outreach Email (ES)</div>
|
||||
<button class="btn bg sm" @click="copyEmail()" style="font-size:10px;padding:2px 8px">📋 Copy</button>
|
||||
</div>
|
||||
<div x-show="modal.ai.email_subject" style="font-size:11px;color:var(--muted);margin-bottom:4px">
|
||||
<b>Subject:</b> <span x-text="modal.ai.email_subject"></span>
|
||||
</div>
|
||||
<div style="font-size:12px;font-style:italic;color:var(--accent2);line-height:1.5;white-space:pre-wrap" x-text="modal.ai.outreach_email || modal.ai.pitch_angle || '—'"></div>
|
||||
</div>
|
||||
|
||||
<!-- Accessibility issues -->
|
||||
@@ -657,6 +663,15 @@ function app() {
|
||||
},
|
||||
|
||||
async restartAiWorker() { await fetch('/api/ai/worker/restart',{method:'POST'}); this.notify('AI worker restarted','info'); await this.loadAiStatus(); },
|
||||
copyEmail() {
|
||||
const subj = this.modal.ai.email_subject ? `Subject: ${this.modal.ai.email_subject}\n\n` : '';
|
||||
const body = this.modal.ai.outreach_email || this.modal.ai.pitch_angle || '';
|
||||
navigator.clipboard.writeText(subj + body).then(
|
||||
() => this.notify('Email copied to clipboard', 'success'),
|
||||
() => this.notify('Copy failed — select text manually', 'error'),
|
||||
);
|
||||
},
|
||||
|
||||
async resetAiStuck() { const r=await fetch('/api/ai/reset',{method:'POST'}); const d=await r.json(); this.notify(`Reset ${d.reset} stuck jobs → pending`,'success'); await this.loadAiStatus(); },
|
||||
async startEnrich() { await fetch('/api/enrich/resume',{method:'POST'}); this.notify('Worker started','success'); await this.loadQueue(); },
|
||||
async pauseEnrich() { await fetch('/api/enrich/pause',{method:'POST'}); this.notify('Worker paused','success'); await this.loadQueue(); },
|
||||
|
||||
Reference in New Issue
Block a user