Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline (Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/* packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
360 lines
11 KiB
TypeScript
360 lines
11 KiB
TypeScript
type DemoCardLine = {
|
||
k: string;
|
||
v: string;
|
||
};
|
||
|
||
export type DemoMessage =
|
||
| { type: "time"; text: string }
|
||
| { type: "meta"; text: string }
|
||
| { type: "user"; text: string }
|
||
| { type: "bot"; text: string }
|
||
| { type: "typing" }
|
||
| { type: "card"; lines: DemoCardLine[] };
|
||
|
||
export type DemoRoutine = {
|
||
name: string;
|
||
when: string;
|
||
instruction?: string;
|
||
active?: boolean;
|
||
runs?: DemoRoutineRun[];
|
||
};
|
||
|
||
export type DemoRoutineRun = {
|
||
mark: string;
|
||
color: string;
|
||
text: string;
|
||
time: string;
|
||
};
|
||
|
||
export type DemoScreen = {
|
||
host: string;
|
||
title: string;
|
||
lines: string[];
|
||
};
|
||
|
||
export type DemoBot = {
|
||
id: string;
|
||
name: string;
|
||
color: string;
|
||
time: string;
|
||
preview: string;
|
||
routines: DemoRoutine[];
|
||
screen: DemoScreen;
|
||
thread: DemoMessage[];
|
||
reply: string;
|
||
};
|
||
|
||
export type RosterBot = {
|
||
name: string;
|
||
color: string;
|
||
slug: string;
|
||
desc: string;
|
||
};
|
||
|
||
export const DEMO_BOTS: DemoBot[] = [
|
||
{
|
||
id: "chief",
|
||
name: "Chief of Staff",
|
||
color: "#3EC5A8",
|
||
time: "Yesterday",
|
||
preview: "venue booked, contract sent for signature",
|
||
routines: [{ name: "Monday briefing", when: "Mondays 7am" }],
|
||
screen: {
|
||
host: "notion.so",
|
||
title: "Offsite: week of the 14th",
|
||
lines: ["Harbor House held", "Contract out for signature", "4 calendar holds → invites"],
|
||
},
|
||
thread: [
|
||
{ type: "time", text: "Yesterday 9:02 AM" },
|
||
{ type: "user", text: "lock the offsite for the week of the 14th" },
|
||
{
|
||
type: "bot",
|
||
text: "looking at three venues in range. i will hold dates and come back before anything is signed.",
|
||
},
|
||
{
|
||
type: "card",
|
||
lines: [
|
||
{ k: "Held", v: "3 venues · 14th–16th" },
|
||
{ k: "Budget", v: "$8,400 of $10k" },
|
||
{ k: "Waiting", v: "harbor house quote" },
|
||
],
|
||
},
|
||
{ type: "user", text: "harbor house if the quote lands under 9k" },
|
||
{
|
||
type: "bot",
|
||
text: "quote came in at $8,400. venue booked and the contract is out for signature. calendar holds are now invites.",
|
||
},
|
||
],
|
||
reply: "added. i will confirm headcount with the crew thread and update the doc.",
|
||
},
|
||
{
|
||
id: "sales",
|
||
name: "Sales Outbound",
|
||
color: "#F5A03C",
|
||
time: "3:10 AM",
|
||
preview: "done. 40 accounts researched, 18 drafts queued",
|
||
routines: [
|
||
{ name: "Overnight sourcing", when: "Nightly 1am" },
|
||
{ name: "Reply sweep", when: "Weekdays 8am" },
|
||
],
|
||
screen: {
|
||
host: "app.hubspot.com",
|
||
title: "Seed-stage fintech: review list",
|
||
lines: ["40 accounts scored", "22 LinkedIn profiles read", "18 drafts queued"],
|
||
},
|
||
thread: [
|
||
{ type: "time", text: "Yesterday 11:40 PM" },
|
||
{
|
||
type: "user",
|
||
text: "work the seed-stage fintech list overnight, my voice, nothing sent without me",
|
||
},
|
||
{
|
||
type: "bot",
|
||
text: "understood. i will research, score, and draft. everything lands in a review list at 6am.",
|
||
},
|
||
{ type: "meta", text: "Created routine ◷ Overnight sourcing" },
|
||
{ type: "time", text: "3:10 AM" },
|
||
{
|
||
type: "card",
|
||
lines: [
|
||
{ k: "Researched", v: "40 accounts · 22 with a live signal" },
|
||
{ k: "Drafted", v: "18 emails + 9 LinkedIn notes" },
|
||
{ k: "Skipped", v: "4 · already in pipeline" },
|
||
],
|
||
},
|
||
{
|
||
type: "bot",
|
||
text: "two of them raised last week, so those drafts lead with the round. everything else follows your usual opener.",
|
||
},
|
||
],
|
||
reply: "on it. i will queue those and leave the rest in review.",
|
||
},
|
||
{
|
||
id: "inbox",
|
||
name: "Inbox Manager",
|
||
color: "#6A6BF5",
|
||
time: "12:11 AM",
|
||
preview: "sent. inbox at zero, 5 drafts parked",
|
||
routines: [
|
||
{ name: "Morning sweep", when: "Weekdays 6am" },
|
||
{ name: "Reply Zero", when: "Hourly" },
|
||
],
|
||
screen: {
|
||
host: "mail.google.com",
|
||
title: "Inbox: 5 drafts parked",
|
||
lines: ["41 threads read", "26 archived · 9 replied", "Nora’s renewal held"],
|
||
},
|
||
thread: [
|
||
{ type: "time", text: "Yesterday 11:11 PM" },
|
||
{ type: "user", text: "inbox got away from me over the weekend, sweep it?" },
|
||
{
|
||
type: "bot",
|
||
text: "on it. 41 unread since friday. archiving the noise, drafting the rest.",
|
||
},
|
||
{ type: "time", text: "12:11 AM" },
|
||
{
|
||
type: "card",
|
||
lines: [
|
||
{ k: "Archived", v: "26 newsletters + receipts" },
|
||
{ k: "Replied", v: "9 routine threads · scheduling and intros" },
|
||
{ k: "Drafted", v: "6 that sound like you · held for your read" },
|
||
{ k: "Flagged", v: "1 from nora · contract question" },
|
||
],
|
||
},
|
||
{
|
||
type: "bot",
|
||
text: "nora is asking whether the renewal covers the new seats. her draft answers yes and quotes the contract line. it is at the top of the held pile.",
|
||
},
|
||
{ type: "user", text: "send nora's, i'll take the rest tomorrow" },
|
||
{ type: "bot", text: "sent. inbox is at zero, with 5 drafts parked for tomorrow." },
|
||
],
|
||
reply: "got it. i will handle that on the next sweep and flag anything i am unsure about.",
|
||
},
|
||
{
|
||
id: "account",
|
||
name: "Account Manager",
|
||
color: "#9B5CF6",
|
||
time: "Yesterday",
|
||
preview: "invite's out to sam, helix note added",
|
||
routines: [{ name: "Renewal watch", when: "Daily 9am" }],
|
||
screen: {
|
||
host: "app.hubspot.com",
|
||
title: "Helix: renewal",
|
||
lines: ["Thursday 10am with Sam", "Annual only", "Nora approves"],
|
||
},
|
||
thread: [
|
||
{ type: "time", text: "Yesterday 2:40 PM" },
|
||
{
|
||
type: "bot",
|
||
text: "northstar replied on pricing, same thread as last quarter. i already had the context, so i answered without waiting on you.",
|
||
},
|
||
{ type: "meta", text: "Updated memory · Account Manager" },
|
||
{
|
||
type: "bot",
|
||
text: "noted for next time: they only sign annual, and nora is the one who approves.",
|
||
},
|
||
{ type: "user", text: "good. set the helix renewal call with sam" },
|
||
{
|
||
type: "bot",
|
||
text: "invite's out to sam for thursday 10am, with the renewal summary attached.",
|
||
},
|
||
],
|
||
reply: "noted. i will remember that for this account.",
|
||
},
|
||
{
|
||
id: "talent",
|
||
name: "Talent Scout",
|
||
color: "#3B82F6",
|
||
time: "Yesterday",
|
||
preview: "3 intros drafted in your voice, held",
|
||
routines: [{ name: "Pipeline refresh", when: "Tue + Thu" }],
|
||
screen: {
|
||
host: "app.ashbyhq.com",
|
||
title: "Infra applicants",
|
||
lines: ["61 read", "9 shortlisted: ran their own cluster", "3 intros held"],
|
||
},
|
||
thread: [
|
||
{ type: "time", text: "Yesterday 4:15 PM" },
|
||
{
|
||
type: "user",
|
||
text: "read the infra applicants and shortlist anyone who has run their own cluster",
|
||
},
|
||
{
|
||
type: "card",
|
||
lines: [
|
||
{ k: "Read", v: "61 applicants" },
|
||
{ k: "Shortlist", v: "9 · real cluster experience" },
|
||
{ k: "Drafted", v: "3 intros in your voice" },
|
||
],
|
||
},
|
||
{
|
||
type: "bot",
|
||
text: "the three i drafted have all shipped a scheduler of their own. held for your read before anything goes out.",
|
||
},
|
||
],
|
||
reply: "i will pull those and leave the intros in review.",
|
||
},
|
||
{
|
||
id: "expense",
|
||
name: "Expense Manager",
|
||
color: "#F2622A",
|
||
time: "Yesterday",
|
||
preview: "report filed. 9 receipts, nothing outstanding",
|
||
routines: [{ name: "Month-end close", when: "Last Friday" }],
|
||
screen: {
|
||
host: "app.ramp.com",
|
||
title: "Month-end close",
|
||
lines: ["9 receipts matched", "Harbor hotel: two nights", "Report filed · $2,340"],
|
||
},
|
||
thread: [
|
||
{ type: "time", text: "Yesterday 3:11 AM" },
|
||
{ type: "user", text: "month-end is friday, close out the card for me?" },
|
||
{
|
||
type: "bot",
|
||
text: "i'll match every charge to a receipt and file the report. anything that doesn't line up, i ask instead of guessing.",
|
||
},
|
||
{ type: "meta", text: "Created routine ◷ Month-end close" },
|
||
{ type: "time", text: "Yesterday 10:11 PM" },
|
||
{
|
||
type: "card",
|
||
lines: [
|
||
{ k: "Receipts", v: "9 matched to card charges" },
|
||
{ k: "Report", v: "drafted · $2,340 across 3 trips" },
|
||
{ k: "Flagged", v: "1 charge · harbor hotel, $412 twice" },
|
||
],
|
||
},
|
||
{
|
||
type: "bot",
|
||
text: "the harbor hotel charged $412 on the 12th and again on the 14th. double-billed, or two separate nights?",
|
||
},
|
||
{ type: "user", text: "two nights, riley stayed the second one" },
|
||
{
|
||
type: "bot",
|
||
text: "that clears it. report filed: 9 receipts matched, $2,340 across 3 trips, nothing outstanding.",
|
||
},
|
||
],
|
||
reply: "logged. i will fold that into the next close.",
|
||
},
|
||
{
|
||
id: "bugs",
|
||
name: "Bug Triage",
|
||
color: "#D9508A",
|
||
time: "Monday",
|
||
preview: "reproduced 4 of 6, steps in the issues",
|
||
routines: [{ name: "Triage sweep", when: "Every 2h" }],
|
||
screen: {
|
||
host: "sentry.io",
|
||
title: "Auth loop: P1",
|
||
lines: ["6 new reports", "4 reproduced", "Stale session token"],
|
||
},
|
||
thread: [
|
||
{ type: "time", text: "Monday 8:30 AM" },
|
||
{ type: "user", text: "triage what came in over the weekend" },
|
||
{
|
||
type: "card",
|
||
lines: [
|
||
{ k: "Reproduced", v: "4 of 6 reports" },
|
||
{ k: "Duplicates", v: "2 · merged into existing" },
|
||
{ k: "Severity", v: "1 raised to P1 · auth loop" },
|
||
],
|
||
},
|
||
{
|
||
type: "bot",
|
||
text: "the auth loop only happens on a stale session token. steps and a video are on the issue.",
|
||
},
|
||
],
|
||
reply: "i will reproduce it and attach the steps to the issue.",
|
||
},
|
||
];
|
||
|
||
export const DEMO_ROSTER: RosterBot[] = [
|
||
{
|
||
name: "Sales Outbound",
|
||
color: "#F5A03C",
|
||
slug: "evoo/sales-outbound",
|
||
desc: "Researches accounts overnight, scores intent, drafts in your voice, leaves a review list.",
|
||
},
|
||
{
|
||
name: "Inbox Manager",
|
||
color: "#6A6BF5",
|
||
slug: "evoo/inbox-manager",
|
||
desc: "Archives the noise, replies to routine threads, parks drafts that need your read.",
|
||
},
|
||
{
|
||
name: "Talent Scout",
|
||
color: "#3B82F6",
|
||
slug: "evoo/talent-scout",
|
||
desc: "Reads every applicant, shortlists against your bar, writes the intro emails.",
|
||
},
|
||
{
|
||
name: "Expense Manager",
|
||
color: "#F2622A",
|
||
slug: "evoo/expense-manager",
|
||
desc: "Matches receipts to charges, files the report, asks before guessing.",
|
||
},
|
||
{
|
||
name: "Bug Triage",
|
||
color: "#D9508A",
|
||
slug: "evoo/bug-triage",
|
||
desc: "Reproduces reports in a real browser and attaches steps to the issue.",
|
||
},
|
||
{
|
||
name: "Account Manager",
|
||
color: "#9B5CF6",
|
||
slug: "evoo/account-manager",
|
||
desc: "Keeps renewal context, answers known questions, escalates the rest.",
|
||
},
|
||
{
|
||
name: "Paid Media",
|
||
color: "#3EC5A8",
|
||
slug: "evoo/paid-media",
|
||
desc: "Watches spend daily, pauses what is not converting, reports what changed.",
|
||
},
|
||
{
|
||
name: "Chief of Staff",
|
||
color: "#8B93A8",
|
||
slug: "evoo/chief-of-staff",
|
||
desc: "Runs the week: briefings, bookings, and handoffs between your other bots.",
|
||
},
|
||
];
|