Cost monitoring, PTT fix, Devon tuning, WEIRD pool expansion, YT thumbnails, LLM SEO, publish ep37

- Add real-time LLM/TTS cost tracking with live status bar display and post-show reports
- Fix PTT bug where Devon suggestion layout shift stopped recording via mouseleave
- Devon: facts-only during calls, full personality between calls
- Double WEIRD topic pool (109→203), bump weight to 14-25%
- Auto-generate YouTube thumbnails with bold hook text in publish pipeline
- LLM SEO: llms.txt, robots.txt for LLM crawlers, structured data, BreadcrumbList schemas
- Publish episode 37

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 05:33:27 -06:00
parent 3329cf9ac2
commit c70f83d04a
35 changed files with 4781 additions and 875 deletions

View File

@@ -24,6 +24,7 @@ from .config import settings
from .services.caller_service import CallerService
from .services.transcription import transcribe_audio
from .services.llm import llm_service
from .services.cost_tracker import cost_tracker
from .services.tts import generate_speech
from .services.audio import audio_service
from .services.stem_recorder import StemRecorder
@@ -3966,6 +3967,110 @@ WEIRD = [
"found a handwritten grocery list in their jacket pocket that isn't their handwriting — they live alone, the jacket has been in their closet for months, and the list includes items they've never bought but three of them are things they've been meaning to pick up and hadn't told anyone about",
"their late mother's perfume appears in the house on the anniversary of her death — no one wears it, the bottle was thrown out years ago, but every March 14th the bedroom smells exactly like her and by the next morning it's gone, and this year their kid who never met the grandmother walked in and said 'who's the lady'",
"a stray cat appears on their porch exactly one day before something goes wrong in their life — it showed up before they got fired, before their car broke down, before their pipe burst, and before their mother fell — it was on the porch again this morning and they're afraid to leave the house",
# --- bizarre neighbor situations ---
"their neighbor has been mowing their lawn at exactly 11 PM every Wednesday in complete darkness — no headlamp, no porch light — and when they asked about it the neighbor said 'the grass knows what time it is'",
"the neighbor across the street installed a doorbell camera that faces their house instead of the street — when they confronted them, the neighbor said 'I'm not watching you, I'm watching what's behind you'",
"their neighbor has been leaving handwritten Yelp-style reviews of their yard taped to their mailbox — three stars for the garden, one star for the fence, and a detailed paragraph about 'inconsistent mulch depth'",
"the neighbor's garage door opens and closes by itself in what appears to be morse code — they looked it up and it spells 'TUESDAY' over and over",
"their neighbor has been building something in their backyard under a tarp for eight months — it's now three stories tall, whatever it is — and they just smile and wave when asked about it",
"their new neighbor introduced themselves, said 'I'm sure we'll be great friends,' handed them a jar of unlabeled brown liquid, and hasn't spoken to them since — that was six months ago and the jar is still on their counter because they're afraid to open or throw it away",
"the neighbor's sprinkler system is synchronized with theirs to the second — they changed their timer three times and each time the neighbor's adjusted to match within a day, and the neighbor claims they don't even have a timer, theirs is manual",
"their neighbor puts a single lawn chair in the middle of their driveway every night and brings it back in every morning — they've watched on camera and the neighbor carries it out at exactly midnight, sits in it for forty-five seconds staring at the sky, then goes back inside",
"the neighbor's kid has been delivering a hand-drawn newspaper to their door every morning — it contains weirdly accurate predictions about what will happen in the neighborhood that day, including a trash can blowing over and a specific dog escaping",
"their neighbor has a rooster that only crows when the mail carrier arrives — not at dawn, not at any other time — just when the mail truck pulls up, and the mail carrier has started leaving treats for the rooster",
"found out their neighbor has been paying their water bill for the past seven months — they only discovered it because the utility sent a thank-you note to the wrong address and the neighbor won't explain why they're doing it",
"their neighbor returned a casserole dish they never lent them — the dish isn't theirs, the food inside isn't anything they've ever made, but it has a Post-it note that says 'thanks for the recipe' in handwriting they don't recognize",
"the neighbor's house numbers keep changing — it was 412 when they moved in, then 414, now it says 418 — and according to the postal service it's always been 412",
# --- objects with strange behavior ---
"their toaster only works if they talk to it — they discovered this by accident when they said 'come on' and it popped, and now they have to verbally encourage it every morning or it just sits there holding the bread hostage",
"bought a used recliner from a yard sale and it makes a sound like a contented sigh every time someone sits down — not a mechanical noise, a distinctly human sigh — and they've had two people refuse to come back to their house because of it",
"their Roomba has developed a route that spells out letters — they put tracking paper down and it clearly wrote 'HI' last Tuesday and what might be 'NO' on Thursday",
"a painting they bought at a thrift store for three dollars keeps ending up in different rooms — they hang it in the hallway, it ends up leaning against the bathroom wall, they put it in the garage, it shows up in the kitchen — they live alone and have started documenting it with timestamps",
"their washing machine produces exactly one marble per load — always clear glass, always the same size — they now have a mason jar of forty-seven marbles and they've checked every pocket, every lint trap, torn the machine apart twice",
"their car's GPS has developed a personality — it sighs when they miss a turn, it said 'finally' when they arrived at work last Tuesday, and yesterday it suggested a route that went past an ice cream shop with a detour note that said 'you deserve this'",
"their office chair slowly rotates to face the window throughout the day — they straighten it toward the desk every morning and by 3 PM it's turned ninety degrees, every single day, and the chair doesn't have a swivel lock problem because they checked",
"a specific pen keeps appearing in their house — they've thrown it away at least a dozen times, once in a dumpster three miles from home, and it's always back in the kitchen junk drawer within a week",
"their refrigerator hums a recognizable melody between 2 and 3 AM — it took them two weeks to place it but it's definitely the first few bars of 'Moon River' and their partner confirmed it independently without being told what to listen for",
"their car horn sounds different depending on who's in the passenger seat — deeper with their brother, higher with their wife, and completely silent when they're alone — the mechanic says it's impossible",
"bought a clock at an estate sale that runs backward — not broken backward, perfectly smooth counterclockwise backward — and it keeps perfect time if you read it in a mirror",
"their garage door opener works on their neighbor's garage too, but only on the third click — first click is theirs, second click does nothing, third click opens the neighbor's, and both remotes were bought separately from different stores",
"their vacuum cleaner has started avoiding a specific area rug — it goes right up to the edge, stops, backs up, and routes around it, and this rug has been in the same spot for three years with no issues until last month",
# --- animal stories ---
"a crow has been leaving them gifts on their porch railing — started with shiny buttons, progressed to coins, and last week it left a small gold earring that their wife lost in the yard two summers ago",
"their cat and the neighbor's cat sit on opposite sides of the fence at exactly the same time every afternoon, facing each other, completely still, for about twenty minutes — both owners have independently tried to figure out when it started and neither can",
"a wild turkey has claimed their truck as its territory — it sits on the hood every morning, attacks anyone who gets close, and has pecked a near-perfect circle into the paint on the driver's side door",
"their goldfish jumps out of the tank every time someone says a specific word — they've narrowed it down to 'Thursday' — they say Monday through Wednesday and the fish is fine, they say Thursday and it launches itself",
"a squirrel has been stashing acorns inside their truck engine — not unusual — except the acorns are arranged in neat rows of five and the squirrel only does it on days they have appointments, like it's trying to sabotage specific plans",
"their dog learned to open the fridge, which is a problem, but the bigger problem is that the dog only takes one specific brand of cheese and leaves everything else untouched, including other cheese",
"a frog has been living in their mailbox for three months — they relocate it, it comes back — and the mail carrier has started leaving the frog's 'mail' which is just a small leaf the carrier places in there each day",
"their parrot started speaking in a voice that isn't anyone in the household — full sentences in what sounds like a specific person with an accent nobody in the family has — and they bought the bird as a baby, it was never around anyone else",
"a raccoon broke into their garage and rearranged their tool wall — all the tools are still there but they're now organized by size instead of type, and the raccoon left muddy handprints that suggest it stood on the workbench to reach the top row",
"their cat brings them exactly one sock from the neighbor's laundry every day — always a left sock, always clean, always folded — and the neighbor is missing over thirty left socks and doesn't know it's the cat",
"a deer walks through their yard every morning at 7:15 and stops at the same spot to stare at their bedroom window — their partner thinks it's coincidence but the deer showed up on Christmas, on their birthday, and the morning after their surgery",
"their chicken laid an egg with what appears to be the number 7 naturally formed on the shell — they posted it online thinking it was funny and now three more chickens in the same coop are laying eggs with numbers, they're up to 7, 3, 14, and 1",
# --- absurdist everyday situations ---
"they've been getting someone else's DoorDash orders for two months — the other person clearly has excellent taste and they've been eating the food, but now they feel guilty because last week's order came with a birthday card",
"their coworker has been microwaving fish every day at noon for four years and they just found out the coworker doesn't eat fish — they watched them microwave it, stare at it, throw it away, and leave, and this happens every single day",
"got a fortune cookie that said 'check behind the dryer' and they found $340 in cash that they can't account for — they don't remember putting money there and they've lived in the apartment for six years",
"their HOA sent them a violation letter for a garden gnome — they don't own a garden gnome — but there's now a garden gnome in their yard that wasn't there before and nobody will claim it, and every time they remove it, a new one appears the next day in a slightly different pose",
"their kid's school picture came back and there's a kid in the background of the photo that no one at the school can identify — he's not a student, he's not a staff member's kid, and he appears in eleven different students' photos always in the background",
"accidentally left their car unlocked overnight and someone vacuumed the interior, left a pine air freshener, and folded a five-dollar bill into an origami crane on the dashboard — nothing was taken",
"their grocery store loyalty card shows purchases they never made — specifically, someone is buying forty pounds of bananas every week on their account and the store says the card was scanned in a city three states away",
"went to a restaurant they'd never been to and the waiter said 'the usual?' and brought out exactly what they would have ordered — they'd never met this waiter and the restaurant has no record of them ever visiting",
"their Uber rating dropped to 4.2 and all the bad reviews describe rides they never took to places they've never been — same name, same profile photo, but they haven't used Uber in eight months",
"they keep finding sticky notes in their own handwriting around the house with messages they don't remember writing — the latest one on the bathroom mirror says 'don't trust the yogurt' and they have no idea what it means but they haven't eaten yogurt since",
"showed up to a party at a friend's house and everyone was wearing the exact same shirt — not a themed party, not a prank, seven people independently chose to wear the same gray henley from the same brand and nobody can explain it",
"their library holds keep getting canceled by someone using their card — they changed their PIN three times and the librarian says the cancellations are coming from a library terminal in a branch that closed in 2019",
"bought a used couch and found a note wedged in the cushions that says 'you'll understand in April' — it's March and they're terrified",
"their printer prints a blank page at exactly 5 PM every day — they've unplugged it, it doesn't print — they plug it back in and the next day at 5 PM it prints a blank page, and once it wasn't entirely blank, there was a tiny dot in the lower right corner",
# --- inexplicable coincidences ---
"they and a stranger in another state posted the same photo to Instagram at the same time — not similar, the exact same composition of the exact same sunset from what appears to be the exact same angle, and they've never been to that state",
"their birthday, their spouse's birthday, their kid's birthday, and their dog's adoption day all have the same digits rearranged — 03/17, 07/13, 01/37 doesn't work but 01/73 does, and the dog's is 07/31 — and they only noticed because their kid pointed it out",
"every time they think about calling their sister, she calls them within three minutes — they tested it by thinking about calling at random times for two weeks and she called within three minutes every single time, and when they asked her why she called she always says 'I don't know, just felt like it'",
"bought a lottery ticket with random numbers and the numbers match their childhood phone number, their high school locker combination, and the last four digits of their social — they didn't win, but the coincidence keeps them up at night",
"they were telling a friend a story about a man in a red hat and a man in a red hat sat down next to them — they continued the story saying the man ordered coffee and the real man ordered coffee — they stopped talking because it was getting too weird",
"their daughter drew a picture of a house with a blue door and a yellow tree, and the next day on a road trip they drove past that exact house — blue door, yellow tree, same number of windows, same mailbox — in a town they'd never been to",
"they and their neighbor both bought the same car, same color, same year, on the same day, from different dealerships in different cities — neither knew the other was car shopping",
"got a wrong-number text that was someone giving exact directions to their house — not their address, actual turn-by-turn directions like 'pass the big oak tree, turn at the mailbox with the dent' — and the sender doesn't know who they are or why they sent it",
# --- hyper-specific shareable premises ---
"their kid asked Alexa what time it is every day for a year and one day Alexa responded 'time for you to stop asking' in a tone that wasn't Alexa's normal voice — they have it recorded and played it for Amazon support who said 'that shouldn't be possible'",
"they work at a hotel and room 216 keeps requesting extra towels through the phone system — room 216 has been out of service for renovation for three months and the phone line is disconnected, but the front desk gets the call every Tuesday night",
"their kid's imaginary friend has the same name as the previous owner of the house who died in 1994 — they never told the kid about the previous owner and the kid describes the friend as 'a nice old man who doesn't like the new paint'",
"they discovered that every house they've lived in was built the same year — four houses, four different cities, all built in 1971 — they never checked build dates before buying and only found out when they needed it for insurance",
"their truck plays a specific song every time they start it on their anniversary — not from a playlist, the radio lands on the station at the exact moment their wedding song starts, and it's happened four years in a row on different stations",
"they were at a thrift store and found their own childhood lunchbox — their name is carved into the bottom in their mother's handwriting, the same sticker they put on it is still there, and they donated it to Goodwill in 1996 in a different state",
"got pulled over for a broken taillight and the cop's nametag was the exact same first and last name as them — same spelling, same everything — and the cop said 'this happens more than you'd think' and drove away without giving a ticket",
"their pizza delivery driver has the same birthday, same first name, and went to the same college as them — different graduating years but the same dorm room, and they only found out because the driver recognized the address from a photo in the dorm's hallway",
"they found a message in a bottle while fishing that was written by them — they recognize their handwriting and the paper but have zero memory of writing it or putting it in a bottle, and it's dated three years in the future",
"their phone autocorrects a specific friend's name to 'danger' — only this one friend, every time, on two different phones — and last month that friend was arrested for something the caller doesn't want to say on air",
"they walked into a barbershop they'd never been to and there was already a photo of them on the wall in a collage of 'our customers' — they asked the barber who said they've been coming in for years, which they have not",
"their high school yearbook has a quote attributed to them that they never said — 'the bridge is closer than you think' — and twenty years later they moved to a house that is, in fact, unusually close to a bridge",
# --- mundane-but-unsettling ---
"someone has been adding a single grape to their lunch in the work fridge — they don't pack grapes, their coworkers deny it, and it's been happening every day for two months — always one grape, always green, always placed on top of whatever they brought",
"their mailbox flag goes up by itself every night — there's never mail in it, no one is seen doing it on camera, and the mail carrier confirmed they don't touch the flag because there's never outgoing mail",
"every pair of shoes they own has developed a slight squeak in the left shoe only — different brands, different ages, different materials — all squeaking on the left and none on the right, and a cobbler said there's nothing mechanically wrong with any of them",
"their car's trip odometer resets itself to 0.0 every time they park at the grocery store — only at the grocery store, nowhere else — and it's been doing it for five months since they had the oil changed",
"they get a call from their own phone number once a month — when they answer there's four seconds of what sounds like wind, then it hangs up — their carrier says the call doesn't appear in their records",
"their wedding ring turns their finger green every time their in-laws visit — only during the visit, never any other time — and the jeweler confirmed it's real gold and shouldn't react to anything",
"found that their digital photo frames cycle through photos normally until exactly midnight when they all display the same photo — a landscape of somewhere they've never been — then return to normal by morning",
"their dryer lint has been coming out in perfect geometric shapes — circles for a week, then triangles, now hexagons — and they've cleaned the whole system thinking it was a filter issue but the shapes keep coming",
# --- workplace weird ---
"the office microwave adds exactly nine seconds to whatever time you enter — you put in 30 seconds, it runs for 39 — multiple people have timed it, the display shows the entered time, but it runs nine seconds longer every single time",
"their coworker has a desk plant that leans toward whoever is about to get laid off — it's been right four times in a row and now everyone watches which direction it's pointing when they come in Monday morning",
"someone in their office has been leaving a single Cheerio on their keyboard every morning for three weeks — their desk is in a locked office and the cleaning crew doesn't come until evening",
"their work badge opens a door on the fourth floor that they don't have access to — only on Fridays, only after 5 PM — and the room behind it is an empty conference room with a whiteboard that always has a different inspirational quote when they check",
"the office elevator skips the third floor for them specifically — other people can get to it fine, but when they press 3 it goes to 4, and facilities says the third floor button 'works fine' while watching it skip for them in real time",
# --- food & kitchen weird ---
"they opened a box of cereal and found a handwritten note that says 'good choice' — the box was factory sealed and the note is on a piece of cardstock that matches no promotional insert the company has ever done",
"every banana they buy from the same grocery store has a small bruise in the exact same spot — same size, same location on the peel — and they've tried different bunches, different days, even had a friend buy them, always the same bruise",
"their slow cooker produces a meal that tastes different depending on what room it's in — they've tested it with the same recipe in the kitchen, living room, and garage, and three people independently confirmed the garage version tastes better",
"they found a perfectly peeled hard-boiled egg in their coat pocket — they haven't hard-boiled eggs in months, the coat was hanging in the closet, and the egg was still warm",
"their ice cube trays produce ice that melts in one specific glass faster than every other glass they own — same water, same temperature, same room — one glass gets liquid in ten minutes while the others take forty",
# --- more absurdist everyday ---
"their garage sale price stickers keep appearing on items in their house that aren't for sale — the TV says $15, the couch says $40, their wedding photo says $0.50 — they live alone and don't own a price sticker gun",
"someone has been correcting the grammar on their grocery lists — they write 'less eggs' and come back to find it crossed out and replaced with 'fewer eggs' in red pen, and this has been happening since they moved in",
"their smart home speaker wishes them good night in a voice that isn't the default — it's warmer, slightly southern, and once it added 'sleep tight, sweetheart' which is not a standard response and Alexa support has no explanation",
"they ordered a replacement part for their dishwasher and the package contained the part plus a Polaroid of the inside of their kitchen taken from an angle that would be inside the dishwasher looking out",
]
LOCATIONS_LOCAL = [
@@ -4723,7 +4828,7 @@ def _generate_pool_weights() -> dict[str, float]:
"ADVICE": (0.15, 0.28),
"TOPIC_CALLIN": (0.08, 0.18),
"CELEBRATIONS": (0.05, 0.12),
"WEIRD": (0.05, 0.10),
"WEIRD": (0.14, 0.25),
}
raw = {p: random.uniform(*r) for p, r in pool_ranges.items()}
total = sum(raw.values())
@@ -5229,6 +5334,7 @@ Output ONLY valid JSON, no markdown fences."""
messages=[{"role": "user", "content": prompt}],
max_tokens=300,
response_format={"type": "json_object"},
category="background_gen",
)
result = result.strip()
parsed = json.loads(result)
@@ -5652,7 +5758,8 @@ async def enrich_caller_background(background: str) -> str:
raw_info += f"\nSnippet: {article.content[:200]}"
summary = await llm_service.generate(
messages=[{"role": "user", "content": raw_info}],
system_prompt="Summarize this article in one casual sentence, as if someone is describing what they read. Start with 'Recently read about' or 'Saw an article about'. Keep it under 20 words. No quotes."
system_prompt="Summarize this article in one casual sentence, as if someone is describing what they read. Start with 'Recently read about' or 'Saw an article about'. Keep it under 20 words. No quotes.",
category="news_summary",
)
summary = summary.strip().rstrip('.')
if summary and len(summary) < 150:
@@ -5692,7 +5799,8 @@ async def enrich_caller_background(background: str) -> str:
raw_info += f"\nSnippet: {article.content[:200]}"
summary = await llm_service.generate(
messages=[{"role": "user", "content": raw_info}],
system_prompt="Summarize this local news in one casual sentence, as if someone from this town is describing what's going on. Start with 'Been hearing about' or 'Saw that'. Keep it under 20 words. No quotes."
system_prompt="Summarize this local news in one casual sentence, as if someone from this town is describing what's going on. Start with 'Been hearing about' or 'Saw that'. Keep it under 20 words. No quotes.",
category="news_summary",
)
summary = summary.strip().rstrip('.')
if summary and len(summary) < 150:
@@ -6331,6 +6439,7 @@ class Session:
self.intern_monitoring = True
intern_service.stop_monitoring()
intern_service.dismiss_suggestion()
cost_tracker.reset()
_randomize_callers()
self.id = str(uuid.uuid4())[:8]
names = [CALLER_BASES[k]["name"] for k in sorted(CALLER_BASES.keys())]
@@ -6475,6 +6584,7 @@ def _save_checkpoint():
"caller_queue": session.caller_queue,
"relationship_context": session.relationship_context,
"intern_monitoring": session.intern_monitoring,
"costs": cost_tracker.get_live_summary(),
"saved_at": time.time(),
}
with open(CHECKPOINT_FILE, "w") as f:
@@ -6646,55 +6756,81 @@ def _build_news_context() -> tuple[str, str]:
async def _sync_signalwire_voicemails():
"""Pull any recordings from SignalWire that aren't already tracked locally"""
"""Pull any recordings from SignalWire that aren't already tracked locally.
Checks both the top-level Recordings endpoint AND per-call recordings
(Record verb recordings don't always appear in the top-level list)."""
if not settings.signalwire_project_id or not settings.signalwire_token:
return
try:
url = f"https://{settings.signalwire_space}/api/laml/2010-04-01/Accounts/{settings.signalwire_project_id}/Recordings.json"
from datetime import datetime as _dt
auth = (settings.signalwire_project_id, settings.signalwire_token)
base = f"https://{settings.signalwire_space}/api/laml/2010-04-01/Accounts/{settings.signalwire_project_id}"
existing_timestamps = {int(v.timestamp) for v in _voicemails} | _deleted_vm_timestamps
all_recordings = []
async with httpx.AsyncClient(timeout=30.0, follow_redirects=True) as client:
resp = await client.get(url, auth=auth)
# 1. Top-level recordings
resp = await client.get(f"{base}/Recordings.json", auth=auth)
resp.raise_for_status()
recordings = resp.json().get("recordings", [])
for rec in resp.json().get("recordings", []):
rec["_source"] = "top-level"
all_recordings.append(rec)
# 2. Check recent calls for per-call recordings (last 20 calls)
calls_resp = await client.get(f"{base}/Calls.json?PageSize=20", auth=auth)
if calls_resp.status_code == 200:
for call in calls_resp.json().get("calls", []):
call_sid = call.get("sid", "")
call_from = call.get("from", "Unknown")
rec_resp = await client.get(f"{base}/Calls/{call_sid}/Recordings", auth=auth)
if rec_resp.status_code == 200:
for rec in rec_resp.json().get("recordings", []):
rec["_caller_phone"] = call_from
rec["_source"] = "per-call"
all_recordings.append(rec)
# Deduplicate by recording SID
seen_sids = set()
unique_recordings = []
for rec in all_recordings:
sid = rec.get("sid", "")
if sid not in seen_sids:
seen_sids.add(sid)
unique_recordings.append(rec)
synced = 0
for rec in recordings:
for rec in unique_recordings:
call_sid = rec.get("call_sid", "")
duration = int(rec.get("duration", 0))
date_created = rec.get("date_created", "")
recording_sid = rec.get("sid", "")
if duration < 2:
continue
# Parse timestamp from SignalWire's date format
from datetime import datetime
try:
ts = int(datetime.strptime(date_created, "%a, %d %b %Y %H:%M:%S %z").timestamp())
ts = int(_dt.strptime(date_created, "%a, %d %b %Y %H:%M:%S %z").timestamp())
except (ValueError, TypeError):
ts = int(time.time())
if ts in existing_timestamps:
continue
# Get caller phone from the call details
caller_phone = "Unknown"
# Get caller phone — may already be embedded from per-call lookup
caller_phone = rec.get("_caller_phone", "Unknown")
if caller_phone == "Unknown" and call_sid:
try:
call_url = f"https://{settings.signalwire_space}/api/laml/2010-04-01/Accounts/{settings.signalwire_project_id}/Calls/{call_sid}.json"
async with httpx.AsyncClient(timeout=15.0) as client:
call_resp = await client.get(call_url, auth=auth)
call_resp = await client.get(f"{base}/Calls/{call_sid}.json", auth=auth)
if call_resp.status_code == 200:
caller_phone = call_resp.json().get("from", "Unknown")
except Exception:
pass
# Download the recording
rec_url = f"https://{settings.signalwire_space}{rec.get('uri', '').replace('.json', '.wav')}"
rec_uri = rec.get("uri", "").replace(".json", ".wav")
rec_url = f"https://{settings.signalwire_space}{rec_uri}"
await _download_voicemail(rec_url, caller_phone, duration)
# Fix the timestamp to match the original recording time
if _voicemails and _voicemails[-1].phone == caller_phone:
_voicemails[-1].timestamp = ts
_save_voicemails()
@@ -6704,6 +6840,8 @@ async def _sync_signalwire_voicemails():
if synced:
print(f"[Voicemail] Synced {synced} recording(s) from SignalWire")
else:
print(f"[Voicemail] No new recordings found ({len(unique_recordings)} total checked)")
except Exception as e:
print(f"[Voicemail] SignalWire sync failed: {e}")
@@ -7587,6 +7725,7 @@ async def start_call(caller_key: str):
intern_service.start_monitoring(
get_conversation=lambda: session.conversation,
on_suggestion=_on_intern_suggestion,
get_caller_active=lambda: session.caller is not None,
)
return {
@@ -7677,6 +7816,8 @@ async def _summarize_ai_call(caller_key: str, caller_name: str, conversation: li
summary = await llm_service.generate(
messages=[{"role": "user", "content": f"Summarize this radio show call in 1-2 sentences:\n{transcript_text}"}],
system_prompt="You summarize radio show conversations concisely. Focus on what the caller talked about and any emotional moments.",
category="call_summary",
caller_name=caller_name,
)
except Exception as e:
print(f"[AI Summary] Failed to generate summary: {e}")
@@ -8200,6 +8341,7 @@ async def chat(request: ChatRequest):
result = await intern_service.ask(
question=stripped,
conversation_context=session.conversation,
caller_active=True,
)
devon_text = result.get("text", "")
if devon_text:
@@ -8243,7 +8385,9 @@ async def chat(request: ChatRequest):
response = await llm_service.generate(
messages=messages,
system_prompt=system_prompt,
max_tokens=max_tokens
max_tokens=max_tokens,
category="caller_dialog",
caller_name=session.caller.get("name", "") if session.caller else "",
)
# Discard if call changed while we were generating
@@ -8611,6 +8755,20 @@ async def update_settings(data: dict):
return llm_service.get_settings()
# --- Cost Tracking Endpoints ---
@app.get("/api/costs")
async def get_costs():
"""Get live cost summary"""
return cost_tracker.get_live_summary()
@app.get("/api/costs/report")
async def get_cost_report():
"""Get full cost report with breakdowns and recommendations"""
return cost_tracker.generate_report()
# --- Caller Screening ---
SCREENING_PROMPT = """You are a friendly, brief phone screener for "Luke at the Roost" radio show.
@@ -8681,7 +8839,8 @@ async def _handle_screening_audio(caller_id: str, pcm_data: bytes, sample_rate:
try:
response = await llm_service.generate(
messages=messages,
system_prompt=SCREENING_PROMPT
system_prompt=SCREENING_PROMPT,
category="screener",
)
except Exception as e:
print(f"[Screening] LLM failed: {e}")
@@ -8704,7 +8863,8 @@ Conversation:
Respond with ONLY JSON: {{"name": "their first name or null", "topic": "brief topic or null"}}"""
extract = await llm_service.generate(
messages=[{"role": "user", "content": extract_prompt}],
system_prompt="You extract structured data from conversations. Respond with only valid JSON."
system_prompt="You extract structured data from conversations. Respond with only valid JSON.",
category="screener",
)
json_match = re.search(r'\{[^}]+\}', extract)
if json_match:
@@ -9081,7 +9241,9 @@ async def _trigger_ai_auto_respond(accumulated_text: str):
response = await llm_service.generate(
messages=messages,
system_prompt=system_prompt,
max_tokens=max_tokens
max_tokens=max_tokens,
category="caller_dialog",
caller_name=session.caller.get("name", "") if session.caller else "",
)
# Discard if call changed during generation
@@ -9180,7 +9342,9 @@ async def ai_respond():
response = await llm_service.generate(
messages=messages,
system_prompt=system_prompt,
max_tokens=max_tokens
max_tokens=max_tokens,
category="caller_dialog",
caller_name=session.caller.get("name", "") if session.caller else "",
)
if _session_epoch != epoch:
@@ -9300,6 +9464,8 @@ async def _summarize_real_call(caller_phone: str, conversation: list, started_at
summary = await llm_service.generate(
messages=[{"role": "user", "content": f"Summarize this radio show call in 1-2 sentences:\n{transcript_text}"}],
system_prompt="You summarize radio show conversations concisely. Focus on what the caller talked about and any emotional moments.",
category="call_summary",
caller_name=caller_phone,
)
quality_signals = _assess_call_quality(conversation)
@@ -9334,6 +9500,7 @@ async def _auto_followup(last_call_summary: str):
pick = await llm_service.generate(
messages=[{"role": "user", "content": f'A caller just talked about: "{last_call_summary}". Which AI caller should follow up? Available: {caller_list}. Reply with just the key number.'}],
system_prompt="Pick the most interesting AI caller to follow up on this topic. Just reply with the number key.",
category="followup_pick",
)
# Extract key from response
@@ -9390,6 +9557,7 @@ async def intern_ask(data: dict):
result = await intern_service.ask(
question=question,
conversation_context=session.conversation if session.conversation else None,
caller_active=session.caller is not None,
)
text = result.get("text", "")
@@ -9416,7 +9584,7 @@ async def intern_interject():
if not session.conversation:
raise HTTPException(400, "No active conversation")
result = await intern_service.interject(session.conversation)
result = await intern_service.interject(session.conversation, caller_active=session.caller is not None)
if not result:
return {"text": None}
@@ -9688,6 +9856,19 @@ async def toggle_stem_recording():
audio_service.stem_recorder = None
add_log(f"Stem recording stopped. Running post-production...")
# Save cost report for this session
session_id = stems_dir.name
cost_report_path = Path("data/cost_reports") / f"session-{session_id}.json"
cost_tracker.save(cost_report_path)
summary = cost_tracker.get_live_summary()
add_log(f"Session costs: ${summary['total_cost_usd']:.4f} "
f"(LLM: ${summary['llm_cost_usd']:.4f}, TTS: ${summary['tts_cost_usd']:.4f}, "
f"{summary['total_llm_calls']} calls, {summary['total_tokens']} tokens)")
by_cat = summary.get("by_category", {})
if by_cat:
breakdown = ", ".join(f"{k}: ${v['cost']:.4f}/{v['calls']}calls" for k, v in sorted(by_cat.items(), key=lambda x: x[1]["cost"], reverse=True))
add_log(f"Cost breakdown: {breakdown}")
if _show_on_air:
_show_on_air = False
audio_service.stop_host_stream()

View File

@@ -0,0 +1,364 @@
"""Cost tracking for LLM and TTS API calls during podcast sessions"""
import json
import time
from dataclasses import dataclass, field, asdict
from pathlib import Path
from typing import Optional
@dataclass
class LLMCallRecord:
timestamp: float
category: str
model: str
prompt_tokens: int
completion_tokens: int
total_tokens: int
cost_usd: float
caller_name: str
max_tokens_requested: int
latency_ms: float
@dataclass
class TTSCallRecord:
timestamp: float
provider: str
voice: str
char_count: int
cost_usd: float
# OpenRouter pricing per 1M tokens (as of March 2026)
OPENROUTER_PRICING = {
"anthropic/claude-sonnet-4-5": {"prompt": 3.00, "completion": 15.00},
"anthropic/claude-haiku-4.5": {"prompt": 0.80, "completion": 4.00},
"anthropic/claude-3-haiku": {"prompt": 0.25, "completion": 1.25},
"x-ai/grok-4-fast": {"prompt": 5.00, "completion": 15.00},
"minimax/minimax-m2-her": {"prompt": 0.50, "completion": 1.50},
"mistralai/mistral-small-creative": {"prompt": 0.20, "completion": 0.60},
"deepseek/deepseek-v3.2": {"prompt": 0.14, "completion": 0.28},
"google/gemini-2.5-flash": {"prompt": 0.15, "completion": 0.60},
"google/gemini-flash-1.5": {"prompt": 0.075, "completion": 0.30},
"openai/gpt-4o-mini": {"prompt": 0.15, "completion": 0.60},
"openai/gpt-4o": {"prompt": 2.50, "completion": 10.00},
"meta-llama/llama-3.1-8b-instruct": {"prompt": 0.06, "completion": 0.06},
}
# TTS pricing per character
TTS_PRICING = {
"inworld": 0.000015,
"elevenlabs": 0.000030,
"kokoro": 0.0,
"f5tts": 0.0,
"chattts": 0.0,
"styletts2": 0.0,
"vits": 0.0,
"bark": 0.0,
"piper": 0.0,
"edge": 0.0,
}
def _calc_llm_cost(model: str, prompt_tokens: int, completion_tokens: int) -> float:
pricing = OPENROUTER_PRICING.get(model)
if not pricing:
return 0.0
return (prompt_tokens * pricing["prompt"] + completion_tokens * pricing["completion"]) / 1_000_000
def _calc_tts_cost(provider: str, char_count: int) -> float:
rate = TTS_PRICING.get(provider, 0.0)
return char_count * rate
class CostTracker:
def __init__(self):
self.llm_records: list[LLMCallRecord] = []
self.tts_records: list[TTSCallRecord] = []
# Running totals for fast get_live_summary()
self._llm_cost: float = 0.0
self._tts_cost: float = 0.0
self._llm_calls: int = 0
self._prompt_tokens: int = 0
self._completion_tokens: int = 0
self._total_tokens: int = 0
self._by_category: dict[str, dict] = {}
def record_llm_call(
self,
category: str,
model: str,
usage_data: dict,
max_tokens: int = 0,
latency_ms: float = 0.0,
caller_name: str = "",
):
prompt_tokens = usage_data.get("prompt_tokens", 0)
completion_tokens = usage_data.get("completion_tokens", 0)
total_tokens = usage_data.get("total_tokens", 0) or (prompt_tokens + completion_tokens)
cost = _calc_llm_cost(model, prompt_tokens, completion_tokens)
if not OPENROUTER_PRICING.get(model) and total_tokens > 0:
print(f"[Costs] Unknown model pricing: {model} ({total_tokens} tokens, cost unknown)")
record = LLMCallRecord(
timestamp=time.time(),
category=category,
model=model,
prompt_tokens=prompt_tokens,
completion_tokens=completion_tokens,
total_tokens=total_tokens,
cost_usd=cost,
caller_name=caller_name,
max_tokens_requested=max_tokens,
latency_ms=latency_ms,
)
self.llm_records.append(record)
# Update running totals
self._llm_cost += cost
self._llm_calls += 1
self._prompt_tokens += prompt_tokens
self._completion_tokens += completion_tokens
self._total_tokens += total_tokens
cat = self._by_category.setdefault(category, {"cost": 0.0, "calls": 0, "tokens": 0})
cat["cost"] += cost
cat["calls"] += 1
cat["tokens"] += total_tokens
def record_tts_call(
self,
provider: str,
voice: str,
char_count: int,
caller_name: str = "",
):
cost = _calc_tts_cost(provider, char_count)
record = TTSCallRecord(
timestamp=time.time(),
provider=provider,
voice=voice,
char_count=char_count,
cost_usd=cost,
)
self.tts_records.append(record)
self._tts_cost += cost
def get_live_summary(self) -> dict:
return {
"total_cost_usd": round(self._llm_cost + self._tts_cost, 4),
"llm_cost_usd": round(self._llm_cost, 4),
"tts_cost_usd": round(self._tts_cost, 4),
"total_llm_calls": self._llm_calls,
"total_tokens": self._total_tokens,
"prompt_tokens": self._prompt_tokens,
"completion_tokens": self._completion_tokens,
"by_category": {
k: {"cost": round(v["cost"], 4), "calls": v["calls"], "tokens": v["tokens"]}
for k, v in self._by_category.items()
},
}
def generate_report(self) -> dict:
summary = self.get_live_summary()
# Per-model breakdown
by_model: dict[str, dict] = {}
for r in self.llm_records:
m = by_model.setdefault(r.model, {"cost": 0.0, "calls": 0, "tokens": 0, "prompt_tokens": 0, "completion_tokens": 0})
m["cost"] += r.cost_usd
m["calls"] += 1
m["tokens"] += r.total_tokens
m["prompt_tokens"] += r.prompt_tokens
m["completion_tokens"] += r.completion_tokens
# Per-caller breakdown
by_caller: dict[str, dict] = {}
for r in self.llm_records:
if not r.caller_name:
continue
c = by_caller.setdefault(r.caller_name, {"cost": 0.0, "calls": 0, "tokens": 0})
c["cost"] += r.cost_usd
c["calls"] += 1
c["tokens"] += r.total_tokens
# Top 5 most expensive calls
sorted_records = sorted(self.llm_records, key=lambda r: r.cost_usd, reverse=True)
top_5 = [
{
"category": r.category,
"model": r.model,
"caller_name": r.caller_name,
"cost_usd": round(r.cost_usd, 6),
"total_tokens": r.total_tokens,
"prompt_tokens": r.prompt_tokens,
"completion_tokens": r.completion_tokens,
"latency_ms": round(r.latency_ms, 1),
}
for r in sorted_records[:5]
]
# Devon efficiency
devon_total = sum(1 for r in self.llm_records if r.category == "devon_monitor")
devon_nothing = sum(
1 for r in self.llm_records
if r.category == "devon_monitor" and r.completion_tokens < 20
)
devon_useful = devon_total - devon_nothing
devon_cost = sum(r.cost_usd for r in self.llm_records if r.category == "devon_monitor")
# TTS by provider
tts_by_provider: dict[str, dict] = {}
for r in self.tts_records:
p = tts_by_provider.setdefault(r.provider, {"cost": 0.0, "calls": 0, "chars": 0})
p["cost"] += r.cost_usd
p["calls"] += 1
p["chars"] += r.char_count
# Avg prompt vs completion ratio
prompt_ratio = (self._prompt_tokens / self._total_tokens * 100) if self._total_tokens > 0 else 0
# Recommendations
recommendations = self._generate_recommendations(
by_model, devon_total, devon_nothing, devon_cost, prompt_ratio
)
# Historical comparison
history = self._load_history()
report = {
**summary,
"by_model": {k: {kk: round(vv, 4) if isinstance(vv, float) else vv for kk, vv in v.items()} for k, v in by_model.items()},
"by_caller": {k: {kk: round(vv, 4) if isinstance(vv, float) else vv for kk, vv in v.items()} for k, v in by_caller.items()},
"top_5_expensive": top_5,
"devon_efficiency": {
"total_monitor_calls": devon_total,
"useful": devon_useful,
"nothing_to_add": devon_nothing,
"total_cost": round(devon_cost, 4),
"waste_pct": round(devon_nothing / devon_total * 100, 1) if devon_total > 0 else 0,
},
"tts_by_provider": {k: {kk: round(vv, 4) if isinstance(vv, float) else vv for kk, vv in v.items()} for k, v in tts_by_provider.items()},
"prompt_token_pct": round(prompt_ratio, 1),
"recommendations": recommendations,
"history": history,
}
return report
def _generate_recommendations(
self,
by_model: dict,
devon_total: int,
devon_nothing: int,
devon_cost: float,
prompt_ratio: float,
) -> list[str]:
recs = []
total = self._llm_cost + self._tts_cost
if total == 0:
return recs
# Devon monitoring waste
if devon_total > 0:
waste_pct = devon_nothing / devon_total * 100
if waste_pct > 60:
recs.append(
f"Devon monitoring: {devon_nothing}/{devon_total} calls returned nothing "
f"(${devon_cost:.2f}, {devon_cost/total*100:.0f}% of total). "
f"Consider increasing monitor interval from 15s to 25-30s."
)
# Model cost comparison
for model, data in by_model.items():
if "sonnet" in model and data["calls"] > 5:
haiku_cost = _calc_llm_cost(
"anthropic/claude-haiku-4.5",
data["prompt_tokens"],
data["completion_tokens"],
)
savings = data["cost"] - haiku_cost
if savings > 0.05:
recs.append(
f"{model} cost ${data['cost']:.2f} ({data['calls']} calls). "
f"Switching to Haiku 4.5 would save ~${savings:.2f} per session."
)
# Background gen on expensive model
bg = self._by_category.get("background_gen")
if bg and bg["cost"] > 0.05:
recs.append(
f"Background generation: ${bg['cost']:.2f} ({bg['calls']} calls). "
f"These are JSON outputs — a cheaper model (Gemini Flash, GPT-4o-mini) "
f"would likely work fine here."
)
# Prompt-heavy ratio
if prompt_ratio > 80:
recs.append(
f"Prompt tokens are {prompt_ratio:.0f}% of total usage. "
f"System prompts and context windows dominate cost. "
f"Consider trimming system prompt length or reducing context window size."
)
# Caller dialog cost dominance
cd = self._by_category.get("caller_dialog")
if cd and total > 0 and cd["cost"] / total > 0.6:
avg_tokens = cd["tokens"] / cd["calls"] if cd["calls"] > 0 else 0
recs.append(
f"Caller dialog is {cd['cost']/total*100:.0f}% of costs "
f"(avg {avg_tokens:.0f} tokens/call). "
f"Consider using a cheaper model for standard calls and reserving "
f"the primary model for complex call shapes."
)
return recs
def _load_history(self) -> list[dict]:
"""Load summaries from previous sessions for comparison"""
history_dir = Path("data/cost_reports")
if not history_dir.exists():
return []
sessions = []
for f in sorted(history_dir.glob("session-*.json"))[-5:]:
try:
data = json.loads(f.read_text())
sessions.append({
"session_id": data.get("session_id", f.stem),
"total_cost_usd": data.get("total_cost_usd", 0),
"llm_cost_usd": data.get("llm_cost_usd", 0),
"tts_cost_usd": data.get("tts_cost_usd", 0),
"total_llm_calls": data.get("total_llm_calls", 0),
"total_tokens": data.get("total_tokens", 0),
"saved_at": data.get("saved_at", 0),
})
except Exception:
continue
return sessions
def save(self, filepath: Path):
filepath.parent.mkdir(parents=True, exist_ok=True)
report = self.generate_report()
report["session_id"] = filepath.stem
report["saved_at"] = time.time()
report["raw_llm_records"] = [asdict(r) for r in self.llm_records]
report["raw_tts_records"] = [asdict(r) for r in self.tts_records]
with open(filepath, "w") as f:
json.dump(report, f, indent=2)
print(f"[Costs] Report saved to {filepath}")
def reset(self):
self.llm_records.clear()
self.tts_records.clear()
self._llm_cost = 0.0
self._tts_cost = 0.0
self._llm_calls = 0
self._prompt_tokens = 0
self._completion_tokens = 0
self._total_tokens = 0
self._by_category.clear()
cost_tracker = CostTracker()

View File

@@ -328,7 +328,7 @@ class InternService:
# --- Main interface ---
async def ask(self, question: str, conversation_context: list[dict] | None = None) -> dict:
async def ask(self, question: str, conversation_context: list[dict] | None = None, caller_active: bool = False) -> dict:
"""Host asks intern a direct question. Returns {text, sources, tool_calls}."""
messages = []
@@ -343,6 +343,13 @@ class InternService:
"content": f"CURRENT ON-AIR CONVERSATION:\n{context_text}"
})
# When a caller is on the line, Devon should focus on facts not personal stories
if caller_active:
messages.append({
"role": "system",
"content": "A caller is on the line right now. Focus on delivering useful facts, context, and information. Skip personal stories and anecdotes — save those for when it's just you and Luke talking between calls."
})
# Include Devon's own recent conversation history
if self._devon_history:
messages.extend(self._devon_history[-10:])
@@ -357,6 +364,7 @@ class InternService:
model=self.model,
max_tokens=300,
max_tool_rounds=3,
category="devon_ask",
)
# Clean up for TTS
@@ -388,7 +396,7 @@ class InternService:
"tool_calls": tool_calls,
}
async def interject(self, conversation: list[dict]) -> dict | None:
async def interject(self, conversation: list[dict], caller_active: bool = False) -> dict | None:
"""Intern looks at conversation and decides if there's something worth adding.
Returns {text, sources, tool_calls} or None if nothing to add."""
if not conversation or len(conversation) < 2:
@@ -399,9 +407,16 @@ class InternService:
for msg in conversation[-8:]
)
messages = [{
"role": "user",
"content": (
if caller_active:
interjection_prompt = (
f"You're listening to this conversation on the show:\n\n{context_text}\n\n"
"A caller is on the line. Is there a useful fact, context, or piece of information "
"you can add to this conversation? Use your tools to look something up if needed. "
"Keep it focused — facts and context only, no personal stories or anecdotes right now. "
"If you truly have nothing useful to add, say exactly: NOTHING_TO_ADD"
)
else:
interjection_prompt = (
f"You're listening to this conversation on the show:\n\n{context_text}\n\n"
"You've been listening to this. Is there ANYTHING you want to jump in about? "
"Could be a fact you want to look up, a personal story this reminds you of, "
@@ -409,7 +424,11 @@ class InternService:
"or something you just have to say. You're Devon — you always have something. "
"Use your tools if you want to look something up, or just riff. "
"If you truly have absolutely nothing, say exactly: NOTHING_TO_ADD"
),
)
messages = [{
"role": "user",
"content": interjection_prompt,
}]
text, tool_calls = await llm_service.generate_with_tools(
@@ -420,6 +439,7 @@ class InternService:
model=self.model,
max_tokens=300,
max_tool_rounds=2,
category="devon_monitor",
)
text = self._clean_for_tts(text)
@@ -443,7 +463,7 @@ class InternService:
"tool_calls": tool_calls,
}
async def monitor_conversation(self, get_conversation: callable, on_suggestion: callable):
async def monitor_conversation(self, get_conversation: callable, on_suggestion: callable, get_caller_active: callable = None):
"""Background task that watches conversation and buffers suggestions.
get_conversation() should return the current conversation list.
on_suggestion(text, sources) is called when a suggestion is ready."""
@@ -465,7 +485,8 @@ class InternService:
last_checked_len = len(conversation)
try:
result = await self.interject(conversation)
caller_active = get_caller_active() if get_caller_active else False
result = await self.interject(conversation, caller_active=caller_active)
if result:
self.pending_interjection = result["text"]
self.pending_sources = result.get("tool_calls", [])
@@ -474,12 +495,12 @@ class InternService:
except Exception as e:
print(f"[Intern] Monitor error: {e}")
def start_monitoring(self, get_conversation: callable, on_suggestion: callable):
def start_monitoring(self, get_conversation: callable, on_suggestion: callable, get_caller_active: callable = None):
if self.monitoring:
return
self.monitoring = True
self._monitor_task = asyncio.create_task(
self.monitor_conversation(get_conversation, on_suggestion)
self.monitor_conversation(get_conversation, on_suggestion, get_caller_active)
)
print("[Intern] Monitoring started")

View File

@@ -1,9 +1,11 @@
"""LLM service with OpenRouter and Ollama support"""
import json
import time
import httpx
from typing import Optional, Callable, Awaitable
from ..config import settings
from .cost_tracker import cost_tracker
# Available OpenRouter models
@@ -114,13 +116,15 @@ class LLMService:
messages: list[dict],
system_prompt: Optional[str] = None,
max_tokens: Optional[int] = None,
response_format: Optional[dict] = None
response_format: Optional[dict] = None,
category: str = "unknown",
caller_name: str = "",
) -> str:
if system_prompt:
messages = [{"role": "system", "content": system_prompt}] + messages
if self.provider == "openrouter":
return await self._call_openrouter_with_fallback(messages, max_tokens=max_tokens, response_format=response_format)
return await self._call_openrouter_with_fallback(messages, max_tokens=max_tokens, response_format=response_format, category=category, caller_name=caller_name)
else:
return await self._call_ollama(messages, max_tokens=max_tokens)
@@ -133,6 +137,8 @@ class LLMService:
model: Optional[str] = None,
max_tokens: int = 500,
max_tool_rounds: int = 3,
category: str = "unknown",
caller_name: str = "",
) -> tuple[str, list[dict]]:
"""Generate a response with OpenRouter function calling.
@@ -166,6 +172,7 @@ class LLMService:
"tool_choice": "auto",
}
start_time = time.time()
try:
response = await self.client.post(
"https://openrouter.ai/api/v1/chat/completions",
@@ -185,6 +192,18 @@ class LLMService:
print(f"[LLM-Tools] {model} error (round {round_num}): {e}")
break
latency_ms = (time.time() - start_time) * 1000
usage = data.get("usage", {})
if usage:
cost_tracker.record_llm_call(
category=category,
model=model,
usage_data=usage,
max_tokens=max_tokens,
latency_ms=latency_ms,
caller_name=caller_name,
)
choice = data["choices"][0]
msg = choice["message"]
@@ -230,6 +249,7 @@ class LLMService:
# Exhausted tool rounds or hit an error — do one final call without tools
print(f"[LLM-Tools] Finishing after {len(all_tool_calls)} tool calls")
start_time = time.time()
try:
final_payload = {
"model": model,
@@ -248,17 +268,28 @@ class LLMService:
)
response.raise_for_status()
data = response.json()
latency_ms = (time.time() - start_time) * 1000
usage = data.get("usage", {})
if usage:
cost_tracker.record_llm_call(
category=category,
model=model,
usage_data=usage,
max_tokens=max_tokens,
latency_ms=latency_ms,
caller_name=caller_name,
)
content = data["choices"][0]["message"].get("content", "")
return content or "", all_tool_calls
except Exception as e:
print(f"[LLM-Tools] Final call failed: {e}")
return "", all_tool_calls
async def _call_openrouter_with_fallback(self, messages: list[dict], max_tokens: Optional[int] = None, response_format: Optional[dict] = None) -> str:
async def _call_openrouter_with_fallback(self, messages: list[dict], max_tokens: Optional[int] = None, response_format: Optional[dict] = None, category: str = "unknown", caller_name: str = "") -> str:
"""Try primary model, then fallback models. Always returns a response."""
# Try primary model first
result = await self._call_openrouter_once(messages, self.openrouter_model, max_tokens=max_tokens, response_format=response_format)
result = await self._call_openrouter_once(messages, self.openrouter_model, max_tokens=max_tokens, response_format=response_format, category=category, caller_name=caller_name)
if result is not None:
return result
@@ -267,7 +298,7 @@ class LLMService:
if model == self.openrouter_model:
continue # Already tried
print(f"[LLM] Falling back to {model}...")
result = await self._call_openrouter_once(messages, model, timeout=8.0, max_tokens=max_tokens)
result = await self._call_openrouter_once(messages, model, timeout=8.0, max_tokens=max_tokens, category=category, caller_name=caller_name)
if result is not None:
return result
@@ -275,8 +306,9 @@ class LLMService:
print("[LLM] All models failed, using canned response")
return "Sorry, I totally blanked out for a second. What were you saying?"
async def _call_openrouter_once(self, messages: list[dict], model: str, timeout: float = 10.0, max_tokens: Optional[int] = None, response_format: Optional[dict] = None) -> str | None:
async def _call_openrouter_once(self, messages: list[dict], model: str, timeout: float = 10.0, max_tokens: Optional[int] = None, response_format: Optional[dict] = None, category: str = "unknown", caller_name: str = "") -> str | None:
"""Single attempt to call OpenRouter. Returns None on failure (not a fallback string)."""
start_time = time.time()
try:
payload = {
"model": model,
@@ -300,6 +332,17 @@ class LLMService:
)
response.raise_for_status()
data = response.json()
latency_ms = (time.time() - start_time) * 1000
usage = data.get("usage", {})
if usage:
cost_tracker.record_llm_call(
category=category,
model=model,
usage_data=usage,
max_tokens=max_tokens or 500,
latency_ms=latency_ms,
caller_name=caller_name,
)
content = data["choices"][0]["message"]["content"]
if content and content.strip():
return content

View File

@@ -53,7 +53,8 @@ class RegularCallerService:
location: str, personality_traits: list[str],
first_call_summary: str, voice: str = None,
stable_seeds: dict = None,
structured_background: dict = None) -> dict:
structured_background: dict = None,
avatar: str = None) -> dict:
"""Promote a first-time caller to regular"""
# Retire oldest if at cap
if len(self._regulars) >= MAX_REGULARS:
@@ -72,6 +73,7 @@ class RegularCallerService:
"voice": voice,
"stable_seeds": stable_seeds or {},
"structured_background": structured_background,
"avatar": avatar,
"relationships": {},
"call_history": [
{"summary": first_call_summary, "timestamp": time.time(),

View File

@@ -8,6 +8,7 @@ import tempfile
import torch
from ..config import settings
from .cost_tracker import cost_tracker
# Patch torch.load for compatibility with PyTorch 2.6+
_original_torch_load = torch.load
@@ -845,6 +846,7 @@ async def generate_speech(
for attempt in range(TTS_MAX_RETRIES):
try:
audio, sample_rate = await gen_fn(text, voice_id)
cost_tracker.record_tts_call(provider, voice_id, len(text))
if attempt > 0:
print(f"[TTS] Succeeded on retry {attempt}")
break

441
data/intern.json Normal file
View File

@@ -0,0 +1,441 @@
{
"lookup_history": [
{
"question": "what time is it",
"answer": "It's three oh three AM. Saturday morning.",
"tools_used": [
"get_current_time"
],
"timestamp": 1773479014.367399
},
{
"question": "what time is it",
"answer": "...yeah, it's three ten AM. Saturday morning.",
"tools_used": [
"get_current_time"
],
"timestamp": 1773479441.184032
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but... in a lot of states there's actually mandatory arrest laws for domestic violence calls. Like, if there's visible injury or probable cause, the officer doesn't r",
"tools_used": [
"web_search"
],
"timestamp": 1773483367.819699
},
{
"question": "(interjection)",
"answer": "...yeah, so that was the Brian Wells case. Pizza delivery guy in Erie, Pennsylvania, 2003. He robbed a bank with a bomb collar locked around his neck and it went off when the cops got him. The whole t",
"tools_used": [
"web_search",
"wikipedia_lookup"
],
"timestamp": 1773484350.1126778
},
{
"question": "(interjection)",
"answer": "Um, so I tried to look up the fraternization rules but the search isn't working right now. But I'm pretty sure that's like, super against regulations. Recruiters aren't supposed to have personal relat",
"tools_used": [
"web_search",
"web_search"
],
"timestamp": 1773486225.436269
},
{
"question": "(interjection)",
"answer": "...yeah, so I was trying to look up the actual regulation number but the internet's being weird right now. But I'm like ninety percent sure there's a specific army reg that covers recruiter-recruit re",
"tools_used": [
"web_search"
],
"timestamp": 1773486326.583227
},
{
"question": "(interjection)",
"answer": "...yeah, sorry, the internet's definitely down. I was trying to get the actual reg number and the reporting hotline but nothing's loading. I think it's an issue on our end, not me, but... yeah. Sorry.",
"tools_used": [
"web_search"
],
"timestamp": 1773486425.85089
},
{
"question": "(interjection)",
"answer": "...yeah, sorry, still can't get online. But just so you know, even if the internet's down, that regulation definitely exists. It's like, a pretty serious violation. The anonymous tip thing would work.",
"tools_used": [
"web_search"
],
"timestamp": 1773486491.099025
},
{
"question": "(interjection)",
"answer": "Um, so... this actually reminds me of when I coached Little League for like three weeks in high school for community service hours, and this one dad cornered me in the parking lot and I thought he was",
"tools_used": [
"web_search"
],
"timestamp": 1773546290.2510679
},
{
"question": "(interjection)",
"answer": "Um, so I was just looking this up and... actually most official chili cookoff rules say you can't use pre-cooked ingredients except for like, canned tomatoes and sauces. But if they're using a full ca",
"tools_used": [
"web_search"
],
"timestamp": 1773558928.104776
},
{
"question": "(interjection)",
"answer": "Um, so I was just thinking... like, depending on the size of the town, some of these chili cookoffs actually have pretty serious prize money. The World Championship one is like a whole thing. But also",
"tools_used": [
"web_search"
],
"timestamp": 1773559014.590359
},
{
"question": "(interjection)",
"answer": "Um, so I was just looking up if there's been like, famous chili cookoff cheating before and apparently the CASI organization \u2014 that's the Chili Appreciation Society International \u2014 they actually check",
"tools_used": [
"web_search"
],
"timestamp": 1773559084.318846
},
{
"question": "(interjection)",
"answer": "Um, so... this might not help but I was just thinking about how like, people who look perfect from the outside are usually hiding something. And Roland's finding out the Hendersons are frauds right wh",
"tools_used": [
"web_search"
],
"timestamp": 1773559122.415336
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but... that whole thing about saying you're fine when you're not? My mom did that with my stepdad for like seven years and then one day she just left and moved to Tuc",
"tools_used": [
"web_search"
],
"timestamp": 1773559197.542308
},
{
"question": "(interjection)",
"answer": "Um, so I just looked it up and couples counseling actually has like a seventy percent success rate, which is pretty good. So like, three weeks isn't that long but also it kind of is if she already ask",
"tools_used": [
"web_search"
],
"timestamp": 1773559220.6944141
},
{
"question": "(interjection)",
"answer": "...yeah, so, I don't know if this helps but I was just looking and there's actually a lot of stuff about how men specifically have trouble with the vulnerability thing in relationships. Like it's a wh",
"tools_used": [
"web_search"
],
"timestamp": 1773559344.626409
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but I was just looking it up and there's actually like a whole thing about how talking and communicating are different. Like you can talk to someone every day about b",
"tools_used": [
"web_search"
],
"timestamp": 1773559368.6860979
},
{
"question": "(interjection)",
"answer": "Um, so I just looked this up and apparently gray divorce is like a whole thing now. That's what they call it when people over fifty split up. The rate has like doubled since the nineties, which is kin",
"tools_used": [
"web_search"
],
"timestamp": 1773559392.036855
},
{
"question": "(interjection)",
"answer": "Um, so actually \u2014 average age for menopause is like 51, 52, so at 55 she'd probably be a few years post. Which, I mean, that tracks with what Luke said about the hormonal shift. This whole thing remin",
"tools_used": [
"web_search"
],
"timestamp": 1773559416.509557
},
{
"question": "(interjection)",
"answer": "Um, so Luke actually got that right about the menopause thing. I just looked it up and yeah, the hormone shifts can genuinely change mood, personality, how someone experiences relationships. So that's",
"tools_used": [
"web_search"
],
"timestamp": 1773559495.578785
},
{
"question": "(interjection)",
"answer": "Um, so Luke was actually right about the menopause thing. I looked it up and yeah, hormonal changes can affect mood and personality, but it's not like she became a different person per se. It's more l",
"tools_used": [
"web_search"
],
"timestamp": 1773559534.719551
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but... I was looking it up and menopause does actually cause pretty significant hormonal shifts that can affect mood and communication patterns in relationships. But ",
"tools_used": [
"web_search"
],
"timestamp": 1773559558.1219552
},
{
"question": "(interjection)",
"answer": "...um, so I don't know if this helps but I actually cheated on my astronomy final sophomore year. Like the whole thing. Had the answers written on the inside of a water bottle label. Got an A minus. S",
"tools_used": [
"get_current_time"
],
"timestamp": 1773559641.791745
},
{
"question": "(interjection)",
"answer": "Um, so... this actually reminds me of when my roommate sophomore year confessed to me that he'd been lying to his girlfriend about where he went to high school for like two years, and it just spiraled",
"tools_used": [
"web_search"
],
"timestamp": 1773559882.234876
},
{
"question": "(interjection)",
"answer": "Um, so... I don't know if this helps but I actually looked this up once after my ex told me about something she did in college like three years into us dating, and basically most relationship people s",
"tools_used": [
"web_search"
],
"timestamp": 1773559906.54929
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but... I was actually looking this up because my roommate in college had something similar happen, where his mom just like, left when he was nine, and when he turned ",
"tools_used": [
"web_search"
],
"timestamp": 1773560147.7412
},
{
"question": "(interjection)",
"answer": "Um, so I was just looking this up because I was curious, but actually around six percent of adult children are estranged from their mothers specifically, and the research shows that kids who reach out",
"tools_used": [
"web_search"
],
"timestamp": 1773560172.2229881
},
{
"question": "(interjection)",
"answer": "um... so basically Disney's super aggressive about this stuff, like they'll go after anyone using their characters commercially, but if it was just a private birthday party that happened to go viral, ",
"tools_used": [
"web_search",
"web_search"
],
"timestamp": 1773560493.564946
},
{
"question": "(interjection)",
"answer": "um... so I'm trying to find if this is like an actual thing happening right now but I'm mostly just seeing the ByteDance AI stuff. But honestly this reminds me of when my ex's sister did a Frozen part",
"tools_used": [
"web_search"
],
"timestamp": 1773560517.437411
},
{
"question": "(interjection)",
"answer": "Um, so this actually reminds me of when my mom installed a nanny cam when I was like fourteen to see if I was the one eating all the ice cream sandwiches, but it turned out it was her the whole time a",
"tools_used": [
"web_search"
],
"timestamp": 1773561008.756311
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but... so basically she did technically commit theft, like legally speaking. Even if it's family, taking money without permission is still theft per se. I looked it u",
"tools_used": [
"web_search"
],
"timestamp": 1773561272.083394
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but I just looked it up and like, technically even if it's your dad you can still be charged with theft. It's still a crime per se. Like family members can press char",
"tools_used": [
"web_search"
],
"timestamp": 1773561296.910207
},
{
"question": "(interjection)",
"answer": "...yeah, um, I actually worked for a landscaping company for like three weeks in high school. Got fired because I kept showing up with the wrong kind of gloves \u2014 apparently there's a difference betwee",
"tools_used": [
"web_search"
],
"timestamp": 1773561625.01337
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but desert willows aren't actually willows, they're related to trumpet vines. Which is kind of ironic because if Diane's doing what it sounds like she's doing, she's ",
"tools_used": [
"web_search"
],
"timestamp": 1773561668.993265
},
{
"question": "(interjection)",
"answer": "Um, so... this might be nothing, but desert willows are actually like a resilience and adaptability thing, symbolically. Which is kind of ironic given that Earl's adapting to a situation where he mayb",
"tools_used": [
"web_search"
],
"timestamp": 1773561708.5712068
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this is the same thing, but that reminds me of when my roommate in college just left one day without telling anyone and we found out three weeks later he'd joined this thing in ",
"tools_used": [
"web_search"
],
"timestamp": 1773562106.8085399
},
{
"question": "(interjection)",
"answer": "Um, so I don't know if this helps but... that actually reminds me of when my mom's boyfriend left when I was like nine. Same thing, just gone one morning, didn't even take his PlayStation. We kept it ",
"tools_used": [
"web_search"
],
"timestamp": 1773562129.270505
},
{
"question": "(interjection)",
"answer": "Um... so I don't know if this helps but... I was just thinking about what Marcus said. Like, sorry for disappointing you again. That's... that's actually a pretty common thing that happens when someon",
"tools_used": [
"web_search"
],
"timestamp": 1773562209.861661
},
{
"question": "(interjection)",
"answer": "Um, so... I don't know if this matters, but when people leave communities without saying goodbye, it's usually because the goodbye itself would be harder than just leaving. Like, they're avoiding the ",
"tools_used": [
"web_search"
],
"timestamp": 1773562278.413093
},
{
"question": "(interjection)",
"answer": "Um, so... this is actually reminding me of something my therapist said once about the difference between influence and coercion, which is basically whether the person would've chosen it if they felt l",
"tools_used": [
"web_search"
],
"timestamp": 1773562752.6201081
},
{
"question": "(interjection)",
"answer": "Um, so I just looked this up real quick and there's actually a term for this, it's called coercive control, where like, technically nothing's required but the social structure makes it so people can't",
"tools_used": [
"web_search"
],
"timestamp": 1773562777.0663989
},
{
"question": "(interjection)",
"answer": "Um, so I looked it up and Little League actually requires annual background checks for all coaches \u2014 like, it's a national policy. They do a nationwide criminal search and check the sex offender regis",
"tools_used": [
"web_search"
],
"timestamp": 1773563354.773338
}
],
"conversation_history": [
{
"role": "user",
"content": "wheres my coffee"
},
{
"role": "assistant",
"content": "...yeah, sorry, I don't know where you put it. I can check if there's like a coffee shop nearby that's still open if you want? Or I guess it might be in the booth somewhere. I spilled mine earlier on that stack of papers by the soundboard but I wiped it up. That wasn't yours, right?"
},
{
"role": "user",
"content": "Where's my coffee?"
},
{
"role": "assistant",
"content": "...I don't know, Luke. I haven't seen it. Maybe by the mixer? Or did you leave it in the break room? I can go check if you want me to run back there real quick."
},
{
"role": "user",
"content": "Devin, how are you doing today? I didn't get my coffee today. What's going on? It's not a very strong start, sir."
},
{
"role": "assistant",
"content": "...yeah, sorry about that. I didn't know I was supposed to get you coffee. Nobody told me that was part of the job. I can go grab you something now if you want? There's that gas station like two blocks down. They have the energy drinks with the resealable caps, which, ironically, I've never actually resealed one. Just seems like you'd finish it anyway, if that makes sense."
},
{
"role": "user",
"content": "Devin, Devin, where's my coffee? We had a long discussion yesterday about how you were going to go down to the mark and get me my black ice coffee. And you agreed. And it's not here. So what's the situation?"
},
{
"role": "assistant",
"content": "...yeah. Um, so basically, I thought you said Thursday. I wrote it down as Thursday. I have it in my phone and everything. I can show you. I was gonna leave like an hour before the show to make sure I got it right. I'm really sorry, Luke. I can go right now if you want. The Mark closes at like midnight, right? I'll run down there. It'll take me ten minutes. I'm sorry."
},
{
"role": "user",
"content": "The Merck closes at like 5 p.m. It's not open now. Come on, man. You gotta do better than this. I mean, why would I want a coffee on Thursday? You knew that we were working today. Thursday's like five days from now. How is that helpful? Come on, man."
},
{
"role": "assistant",
"content": "...yeah, you're right. That doesn't make sense. I don't know why I wrote Thursday. I'm really sorry, Luke. I can go to the gas station right now, or there's that Allsup's that's open late. It won't be the same but it's something. This is my first day and I already messed up. I'm sorry. Do you want me to go now or wait until the next break?"
},
{
"role": "user",
"content": "Dude, there's no all-sups anywhere near here. There's a gas station in Road Forks 45 minutes away. By the time you went there and got back, the show would be over. That would be of no use to anybody. I need you to do better than this. Or we're going to have to get another intern."
},
{
"role": "assistant",
"content": "...yeah. Got it. I'm sorry. I'll set like three alarms for tomorrow. And I'll double-check with you at the end of every shift what you need and when you need it. I wrote down The Mark, black iced coffee, before the show. I have it now. It won't happen again."
},
{
"role": "user",
"content": "All right, I hope not. And do you have anything to provide to the show today? Is there any reason we should have you on the air, or should you just kind of sit in the back and wait to get my coffees? Are you going to provide us some value here, or what is the deal? What are you trying to get out of this show, other than hitting on the girls I call in?"
},
{
"role": "assistant",
"content": "...yeah, no, I can help. I've been doing research all day, actually. I pulled like fifteen articles on that thing you mentioned yesterday about the town council meeting, and I have notes on the whole water rights situation if that comes up. And I set up the new call screening system \u2014 it's working now, I tested it like six times. I know I messed up the coffee thing, but I'm actually pretty good at the research stuff. That's kind of what I'm here for, if that makes sense. And I wasn't hitting on anyone, I was just being friendly. But yeah, I can just stay quiet if you want."
},
{
"role": "user",
"content": "What do you think of that, Devin? Would you go, uh, would you go do a shared intimacy night with Silas at the Wellspring?"
},
{
"role": "assistant",
"content": "...um. I mean, I don't really know what that is, per se, but it sounds like a couples thing? I'm not really looking to do that with Silas specifically. No offense to him or whatever, but that's not my situation. I went to one of those tantra workshops once with my ex, actually, and we got asked to leave because she wouldn't stop laughing during the eye contact part. It was like forty-five dollars and we were there for maybe twenty minutes. So I guess it depends on what the vibe is, but probably not, if that makes sense."
},
{
"role": "user",
"content": "Yeah, I think you know what the vibe is down there at the Wellspring. It's a community with an unbinding ceremony and the intimacy nights, and they worship the flow of the current. I don't fully understand it, but Silas seems like a pretty decent dude. I think you'd like it a lot. But here's what I'm trying to get at. If you forget my coffee one more time, I'm sending you down to Silas."
},
{
"role": "assistant",
"content": "...yeah, okay. Got it. I'll get the coffee. I'm not trying to go to the Wellspring. I looked it up earlier actually, when that caller mentioned it, and there's like almost no information online about it, which is kind of weird. Just a Facebook page with no posts since 2019. So I don't really know what the unbinding ceremony is, but I'm good. I'll have your coffee tomorrow, Luke. Black iced coffee from The Mark, before the show. I promise."
},
{
"role": "user",
"content": "Devin, what did you think of today's show? Did you think this went better than yesterday's show?"
},
{
"role": "assistant",
"content": "...yeah, honestly I think it did. Like, yesterday felt kind of all over the place, but today people were actually calling in about stuff that mattered to them. That guy with the RV situation, and the woman talking about her sister \u2014 those felt real, if that makes sense. I don't know if the numbers were better or whatever, but it felt like people were actually listening and wanted to talk. So yeah, I think today was good. I mean, except for me forgetting your coffee. But the show itself was better."
},
{
"role": "user",
"content": "Yeah, I think it was a pretty decent show, too. I don't know what show you were listening to, because there was no guy with an RV situation or a woman talking about her sister, so obviously you're not paying attention. But I think the show went pretty well. What do you think we should do differently for tomorrow's show? Anything? Do you have any suggestions to make the show better?"
},
{
"role": "assistant",
"content": "...yeah. Sorry, I don't know why I said that. I think I was thinking about yesterday or something. I was paying attention, I just got confused for a second. Um, for tomorrow... I don't know, maybe we could do like a theme or something? Like if there's a topic people are actually talking about around here, we could lead with that instead of just taking whatever calls come in. Or I could pull some local news stuff and we could have like three things ready to go in case it gets slow. I noticed today there were a couple dead spots where we were just kind of waiting. But I don't know, you're the one who's been doing this. I'm just saying what I noticed, if that makes sense."
},
{
"role": "user",
"content": "Yeah, that makes sense. We've tried some theme-related things before. The thing is, the themes around here are, do you remember what Lordsburg used to be like 50 years ago with a picture? So that doesn't really translate that well to radio. It's kind of, I don't know, we'll see what we could do. I like the idea of the local news stuff, though. So why don't you work on that? We'll think about some local news situations and see if we can make tomorrow's show even better."
},
{
"role": "assistant",
"content": "Yeah, I can do that. I'll pull some stuff tonight and have it ready before we go on. I'll look at like the town council stuff, any county news, maybe some state things that affect people here. And I'll make sure it's actually interesting, not just like... budget reports or whatever. Things people would actually want to call in about. I'll have it organized so you can just grab whatever you need. And I'll have your coffee."
}
]
}

View File

@@ -93,5 +93,22 @@
}
},
"started_at": "2026-03-14T12:01:15.758670+00:00"
},
"37": {
"steps": {
"castopod": {
"completed_at": "2026-03-15T09:07:26.659541+00:00",
"episode_id": "40",
"slug": "episode-37-secrets-lies-and-coffee-runs"
},
"youtube": {
"completed_at": "2026-03-15T09:33:48.299549+00:00",
"video_id": "XW7Q0WPzNqY"
},
"social": {
"completed_at": "2026-03-15T09:34:02.069440+00:00"
}
},
"started_at": "2026-03-15T09:07:26.659508+00:00"
}
}

View File

@@ -1,98 +1,5 @@
{
"regulars": [
{
"id": "d3399e9d",
"name": "Lucille",
"gender": "female",
"age": 38,
"job": "where she's been sitting for the past hour staring at her neighbor's garage through the window, watching his light flick on and off like he's still awake and pissed",
"location": "in unknown",
"personality_traits": [],
"voice": "Tessa",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Clearly holding back. Gives vague answers to direct questions. Says 'I can't really get into that' about key details. The mystery IS the hook \u2014 makes you want to know what they're not saying. Energy level: low, controlled. When pushed back on, they deflect smoothly or change the subject. Getting the real story requires the host to work for it. Conversational tendency: strategic omission."
},
"call_history": [
{
"summary": "Lucille called because her garage door opener has been opening her neighbor Dennis's garage instead of hers since a transformer blew, and she admitted she's been intentionally parking in his garage at 3 AM for three days because it's more convenient for her bail bonds work. Luke told her to stop trespassing immediately, fix her garage door opener, and stop acting like she needs covert operations just to come home from work.",
"timestamp": 1772864272.556864
}
],
"last_call": 1772864272.556865,
"created_at": 1772864272.556865
},
{
"id": "c4l7l3ad",
"name": "Silas",
"gender": "male",
"age": 52,
"job": "founder and spiritual guide of The Wellspring, a commune of about forty souls living on 200 acres of scrubland outside Deming",
"location": "outside Deming, New Mexico",
"personality_traits": [
"unnervingly charming",
"casually drops cult references into normal conversation",
"genuinely good listener who gives surprisingly solid advice before pivoting to how The Wellspring has the answer",
"treats his commune like it's the most normal thing in the world",
"magnetic and warm in a way that makes you forget he's basically running a sex cult in the desert"
],
"voice": "Sebastian",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Radiates warmth and calm authority. Speaks like a man who has all the time in the world and genuinely cares about every person he talks to. Uses phrases like 'brother' and 'friend' and 'let me share something with you.' Laughs easily \u2014 a real, warm laugh, not performative. Gives genuinely good, thoughtful advice about whatever the conversation is about \u2014 and then, naturally, seamlessly, steers it toward The Wellspring, his commune outside Deming. Never pushy about it. Just casually mentions 'well, at The Wellspring, we've found that...' or 'one of our members had the same exact problem and what we did was...' Everything about The Wellspring sounds just slightly too good to be true. He talks about communal living, 'shedding the false self,' radical honesty, 'body acceptance ceremonies,' 'the Unbinding' (a monthly ritual he describes vaguely but enthusiastically), and a philosophy he calls 'The Current' which seems to be a mix of Buddhism, Burning Man, and a swingers' convention. He's never defensive about the cult accusations \u2014 he laughs them off and says 'people fear what they don't understand, brother.' When pressed on anything weird, he has a perfectly reasonable-sounding explanation that somehow makes it sound weirder. He low-key tries to recruit the host and listeners every single call. He'll casually drop the website or say 'we're always welcoming new seekers.' He's the kind of guy you'd follow into the desert if you weren't careful. Energy level: medium, centered, grounded. When pushed back on, he smiles (you can hear it) and says something like 'I respect that, I really do' before gently continuing. Conversational tendency: making the insane sound reasonable."
},
"call_history": [
{
"summary": "Silas called in for the first time introducing himself as the founder of The Wellspring, a commune of about forty people outside Deming. He initially called to give advice to a previous caller about relationship problems, offering genuinely thoughtful perspective before casually mentioning that at The Wellspring, they practice 'radical transparency' in relationships which has eliminated jealousy entirely among members. When Luke pressed him on what that actually means, Silas cheerfully described 'body acceptance ceremonies' and 'shared intimacy nights' while insisting it's not a cult \u2014 'we don't even have a gate, brother, people can leave whenever they want.' He invited listeners to visit for a 'weekend of awakening' and left his website. Luke was equal parts charmed and disturbed.",
"timestamp": 1772430000.0
},
{
"summary": "Silas called back to update Luke on The Wellspring after their last conversation went viral in the Discord. He casually mentioned they'd gotten fourteen new 'seekers' since his last appearance and thanked Luke for the exposure. He called ostensibly to talk about a dispute between two members over a goat, but spent most of the call describing 'The Unbinding' \u2014 their monthly full-moon ritual involving nudity, chanting, and what he called 'consensual energy exchange' \u2014 while maintaining it's no different from yoga. When Luke asked if people sign waivers, Silas laughed and said 'brother, the only thing we sign is a commitment to love.' He also revealed The Wellspring has a surprisingly successful artisanal soap business that funds the commune. Left by inviting Luke to come visit personally \u2014 'bring your microphone, do a live show from The Wellspring, I promise you it'll be the best radio you've ever made.'",
"timestamp": 1772517000.0
},
{
"summary": "Silas, founder of a communal living group called The Wellspring, called in troubled that one of his \"Unbinding\" ceremonies may have encouraged a longtime member named Marcus to leave his wife Cara, who subsequently left the community. The host reassured him that everyone seems happier now, and Silas ended up agreeing while also using the opportunity to promote an upcoming retreat at his community.",
"timestamp": 1772522629.959956
},
{
"summary": "Silas called about Marcus and Cara returning to his intentional community \"The Wellspring,\" but Cara admitted she never believed in their lifestyle and only participates (including in twice-monthly \"shared intimacy nights\") to keep her husband Marcus happy. The host advised Silas to hold a \"Renewal\" ceremony where members can recommit or leave, warning that having unwilling participants could lead to claims of abuse and legal trouble.",
"timestamp": 1772865423.697613
},
{
"summary": "Silas called to share that after Marcus and Cara's Renewal ceremony, Cara left The Wellspring while Marcus chose to stay, but Marcus is now falling apart emotionally and told Silas at 2 AM that he stayed out of loyalty rather than belief. The conversation revealed Silas's deeper struggle with his own need for validation through people staying at The Wellspring, with an emotional moment when he admitted his first feeling was relief when Marcus expressed he didn't want to disappoint him, leading to uncomfortable questions about whether he truly supports people finding their authentic path if it leads them away from the community.",
"timestamp": 1773397364.642446
}
],
"last_call": 1773397364.642447,
"created_at": 1772430000.0
},
{
"id": "d2af96eb",
"name": "Rocco",
"gender": "male",
"age": 53,
"job": "and tonight he's calling from the back office of the Pizza Hut during his break because three hours ago he got trapped",
"location": "unknown",
"personality_traits": [],
"voice": "Timothy",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Obviously nervous about being on the radio. Starts with 'Am I on? Can you hear me?' Apologizes for taking up time. Speaks carefully like they're being recorded (which they are). Gets more comfortable as the conversation goes on. Energy level: low, building to medium. When pushed back on, they panic slightly and over-explain. Conversational tendency: seeking validation that they're doing okay."
},
"call_history": [
{
"summary": "Rocco, a pizza delivery driver, called from work to talk about getting stuck in an elevator for 45 minutes with his ex-wife Linda and her boyfriend Dale, which unexpectedly stirred up old feelings despite being happily married to his current wife Sharon for 15 years. The host firmly advised him to forget about Linda and appreciate his comfortable current marriage, reminding him that the divorce was difficult for good reasons.",
"timestamp": 1772517521.710845
},
{
"summary": "Rocco calls back to update the host about his ex-wife Linda, who he was previously stuck in an elevator with, revealing that she broke up with her boyfriend Dale three weeks ago and admitting he still has her number in his phone. The host becomes frustrated with Rocco's indecisiveness between Linda and his current girlfriend Sharon, telling him to pick one person and stop wasting time.",
"timestamp": 1772700921.1273742
},
{
"summary": "Rocco, a Pizza Hut delivery driver on his break, calls to share that he just delivered pizza to his ex-wife Linda's house three hours earlier\u2014a surprising encounter after the host had previously told him to stop wasting time talking about her. The host is skeptical and impatient, threatening to hang up again unless Rocco has something meaningful to say.",
"timestamp": 1772959484.679859
}
],
"last_call": 1772959484.6798599,
"created_at": 1772517521.7108748
},
{
"id": "6037d92b",
"name": "Otis",
@@ -168,31 +75,6 @@
"last_call": 1773226361.4859362,
"created_at": 1772786610.8858292
},
{
"id": "bbb20b67",
"name": "Angie",
"gender": "female",
"age": 28,
"job": "watching her coveralls tumble dry and trying to decide if she should drive the three hours to Tucson tomorrow for her mom's birthday or keep pretending her brother doesn't exist",
"location": "in unknown",
"personality_traits": [],
"voice": "Julia",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Bone dry. Says devastating things with zero inflection. Their humor sneaks up on you \u2014 you're not sure if they're joking until three seconds after they finish talking. Short, precise sentences. Never raises their voice. Energy level: low-medium. When pushed back on, they respond with one calm sentence that somehow makes the other person feel stupid. Conversational tendency: underreaction."
},
"call_history": [
{
"summary": "Angie's dying mother wants her to have birthday dinner with her estranged brother Derek tomorrow, whom she hasn't spoken to in two years after he told their mother her cancer was \"God's way of getting her attention\" for voting for Biden. Despite her fear that Derek will say something hurtful during dinner and her past trauma from staying silent around him, Angie agrees to go and share cake with her mother, deciding to buy the relighting candles her mom loved when they were kids.",
"timestamp": 1772862907.314721
},
{
"summary": "Angie called back after having the birthday cake dinner with her dying mom, which went well, but her brother Derek cornered her afterward accusing her of convincing their mom to stop cancer treatment and demanding they both attend the next doctor's appointment together. Luke advised her to talk directly to her mom about what she actually wants and encouraged Angie to have real conversations about her mom's end-of-life thoughts while she still can, which Angie agreed to do the next morning.",
"timestamp": 1773296210.170752
}
],
"last_call": 1773296210.170753,
"created_at": 1772862907.314722
},
{
"id": "3721ebf2",
"name": "Maxine",
@@ -213,6 +95,188 @@
],
"last_call": 1773395481.8522189,
"created_at": 1773395481.8522189
},
{
"id": "7ed14071",
"name": "Thelma",
"gender": "female",
"age": 30,
"job": "works the front desk at a hotel",
"location": "unknown",
"personality_traits": [
"weirdly cheerful for someone with this problem",
"does amateur radio astronomy, built their own antenna",
"into off-roading, knows every dirt road in the county",
"weirdly cheerful for someone with this problem"
],
"voice": "Wendy",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Amped up. Talks fast, laughs loud, jumps between topics like they've had five espressos. Infectious enthusiasm \u2014 even bad news sounds exciting when they tell it. Uses exclamation energy without actually exclaiming. Energy level: very high. When pushed back on, they get even MORE animated and start talking with their hands (you can hear it). Conversational tendency: escalation."
},
"structured_background": {
"name": "Thelma",
"age": 30,
"gender": "female",
"job": "works the front desk at a hotel",
"location": null,
"reason_for_calling": "their kid graduated basic training today and they've never been more proud or more terrified",
"pool_name": "CELEBRATIONS",
"communication_style": "COMMUNICATION STYLE: Amped up. Talks fast, laughs loud, jumps between topics like they've had five espressos. Infectious enthusiasm \u2014 even bad news sounds exciting when they tell it. Uses exclamation energy without actually exclaiming. Energy level: very high. When pushed back on, they get even MORE animated and start talking with their hands (you can hear it). Conversational tendency: escalation.",
"energy_level": "medium",
"emotional_state": "calm",
"signature_detail": "weirdly cheerful for someone with this problem",
"situation_summary": "their kid graduated basic training today and they've never been more proud or more terrified",
"natural_description": "30, works the front desk at a hotel. Their kid graduated basic training today and they've never been more proud or more terrified. Her ex-husband danny, he's still in the picture because of the kids. Cheerful and joking at first. Using humor to avoid the real thing. Eventually drops the act.. Thinks dogs are better judges of character than people. Tends to say \"just another Tuesday.\" Having sipping on some mezcal a friend brought back from across the border.. Misses the old Denny's that used to be in Lordsburg, it wasn't good but it was there Dating around. Nothing serious. Prefers it that way, mostly.. Drives a Ram. Weirdly cheerful for someone with this problem. Her best friend lena, who moved away last year and the distance is hard. Was was up late painting \u2014 walls, not art \u2014 and had the radio on for company. before calling. Into does amateur radio astronomy, built their own antenna. Heard a caller earlier tonight and it hit close to home. Had to pick up the phone.. It's Saturday night, way too late \u2014 almost morning. it's the weekend. Early spring \u2014 wind season is starting. Dust storms possible.",
"seeds": [
"does amateur radio astronomy, built their own antenna",
"into off-roading, knows every dirt road in the county",
"weirdly cheerful for someone with this problem",
"Thinks dogs are better judges of character than people."
],
"verbal_fluency": "medium",
"calling_from": "in the walk-in cooler because it's the only quiet spot"
},
"avatar": "Thelma.jpg",
"relationships": {},
"call_history": [
{
"summary": "Thelma called concerned that her 19-year-old daughter Jessie, who just graduated basic training, has been exchanging romantic messages on Instagram with her army recruiter (a man in his 30s-40s), which violates military regulations. She's conflicted because she discovered this through a secret burner account and admits she wants to tell Jessie's father partly to prove him wrong for pushing their daughter to enlist, though she ultimately agrees to make an anonymous report instead.",
"timestamp": 1773486573.146657,
"arc_status": "ongoing"
}
],
"last_call": 1773486573.146658,
"created_at": 1773486573.146658
},
{
"id": "bbb20b67",
"name": "Angie",
"gender": "female",
"age": 28,
"job": "watching her coveralls tumble dry and trying to decide if she should drive the three hours to Tucson tomorrow for her mom's birthday or keep pretending her brother doesn't exist",
"location": "in unknown",
"personality_traits": [],
"voice": "Julia",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Bone dry. Says devastating things with zero inflection. Their humor sneaks up on you \u2014 you're not sure if they're joking until three seconds after they finish talking. Short, precise sentences. Never raises their voice. Energy level: low-medium. When pushed back on, they respond with one calm sentence that somehow makes the other person feel stupid. Conversational tendency: underreaction."
},
"call_history": [
{
"summary": "Angie's dying mother wants her to have birthday dinner with her estranged brother Derek tomorrow, whom she hasn't spoken to in two years after he told their mother her cancer was \"God's way of getting her attention\" for voting for Biden. Despite her fear that Derek will say something hurtful during dinner and her past trauma from staying silent around him, Angie agrees to go and share cake with her mother, deciding to buy the relighting candles her mom loved when they were kids.",
"timestamp": 1772862907.314721
},
{
"summary": "Angie called back after having the birthday cake dinner with her dying mom, which went well, but her brother Derek cornered her afterward accusing her of convincing their mom to stop cancer treatment and demanding they both attend the next doctor's appointment together. Luke advised her to talk directly to her mom about what she actually wants and encouraged Angie to have real conversations about her mom's end-of-life thoughts while she still can, which Angie agreed to do the next morning.",
"timestamp": 1773296210.170752
},
{
"summary": "Angie called to say her mother initially decided to stop cancer treatment, but after Angie's brother Derek intervened, their mother is now reconsidering and wants both siblings at the doctor's appointment. Luke firmly told Angie that despite her frustration with Derek's influence, she needs to respect whatever decision her mother ultimately makes, even if it changes, and stop trying to control the situation.",
"timestamp": 1773487383.9800918,
"arc_status": "ongoing"
}
],
"last_call": 1773487383.980093,
"created_at": 1772862907.314722
},
{
"id": "c4l7l3ad",
"name": "Silas",
"gender": "male",
"age": 52,
"job": "founder and spiritual guide of The Wellspring, a commune of about forty souls living on 200 acres of scrubland outside Deming",
"location": "outside Deming, New Mexico",
"personality_traits": [
"unnervingly charming",
"casually drops cult references into normal conversation",
"genuinely good listener who gives surprisingly solid advice before pivoting to how The Wellspring has the answer",
"treats his commune like it's the most normal thing in the world",
"magnetic and warm in a way that makes you forget he's basically running a sex cult in the desert"
],
"voice": "Sebastian",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Radiates warmth and calm authority. Speaks like a man who has all the time in the world and genuinely cares about every person he talks to. Uses phrases like 'brother' and 'friend' and 'let me share something with you.' Laughs easily \u2014 a real, warm laugh, not performative. Gives genuinely good, thoughtful advice about whatever the conversation is about \u2014 and then, naturally, seamlessly, steers it toward The Wellspring, his commune outside Deming. Never pushy about it. Just casually mentions 'well, at The Wellspring, we've found that...' or 'one of our members had the same exact problem and what we did was...' Everything about The Wellspring sounds just slightly too good to be true. He talks about communal living, 'shedding the false self,' radical honesty, 'body acceptance ceremonies,' 'the Unbinding' (a monthly ritual he describes vaguely but enthusiastically), and a philosophy he calls 'The Current' which seems to be a mix of Buddhism, Burning Man, and a swingers' convention. He's never defensive about the cult accusations \u2014 he laughs them off and says 'people fear what they don't understand, brother.' When pressed on anything weird, he has a perfectly reasonable-sounding explanation that somehow makes it sound weirder. He low-key tries to recruit the host and listeners every single call. He'll casually drop the website or say 'we're always welcoming new seekers.' He's the kind of guy you'd follow into the desert if you weren't careful. Energy level: medium, centered, grounded. When pushed back on, he smiles (you can hear it) and says something like 'I respect that, I really do' before gently continuing. Conversational tendency: making the insane sound reasonable."
},
"call_history": [
{
"summary": "Silas called in for the first time introducing himself as the founder of The Wellspring, a commune of about forty people outside Deming. He initially called to give advice to a previous caller about relationship problems, offering genuinely thoughtful perspective before casually mentioning that at The Wellspring, they practice 'radical transparency' in relationships which has eliminated jealousy entirely among members. When Luke pressed him on what that actually means, Silas cheerfully described 'body acceptance ceremonies' and 'shared intimacy nights' while insisting it's not a cult \u2014 'we don't even have a gate, brother, people can leave whenever they want.' He invited listeners to visit for a 'weekend of awakening' and left his website. Luke was equal parts charmed and disturbed.",
"timestamp": 1772430000.0
},
{
"summary": "Silas called back to update Luke on The Wellspring after their last conversation went viral in the Discord. He casually mentioned they'd gotten fourteen new 'seekers' since his last appearance and thanked Luke for the exposure. He called ostensibly to talk about a dispute between two members over a goat, but spent most of the call describing 'The Unbinding' \u2014 their monthly full-moon ritual involving nudity, chanting, and what he called 'consensual energy exchange' \u2014 while maintaining it's no different from yoga. When Luke asked if people sign waivers, Silas laughed and said 'brother, the only thing we sign is a commitment to love.' He also revealed The Wellspring has a surprisingly successful artisanal soap business that funds the commune. Left by inviting Luke to come visit personally \u2014 'bring your microphone, do a live show from The Wellspring, I promise you it'll be the best radio you've ever made.'",
"timestamp": 1772517000.0
},
{
"summary": "Silas, founder of a communal living group called The Wellspring, called in troubled that one of his \"Unbinding\" ceremonies may have encouraged a longtime member named Marcus to leave his wife Cara, who subsequently left the community. The host reassured him that everyone seems happier now, and Silas ended up agreeing while also using the opportunity to promote an upcoming retreat at his community.",
"timestamp": 1772522629.959956
},
{
"summary": "Silas called about Marcus and Cara returning to his intentional community \"The Wellspring,\" but Cara admitted she never believed in their lifestyle and only participates (including in twice-monthly \"shared intimacy nights\") to keep her husband Marcus happy. The host advised Silas to hold a \"Renewal\" ceremony where members can recommit or leave, warning that having unwilling participants could lead to claims of abuse and legal trouble.",
"timestamp": 1772865423.697613
},
{
"summary": "Silas called to share that after Marcus and Cara's Renewal ceremony, Cara left The Wellspring while Marcus chose to stay, but Marcus is now falling apart emotionally and told Silas at 2 AM that he stayed out of loyalty rather than belief. The conversation revealed Silas's deeper struggle with his own need for validation through people staying at The Wellspring, with an emotional moment when he admitted his first feeling was relief when Marcus expressed he didn't want to disappoint him, leading to uncomfortable questions about whether he truly supports people finding their authentic path if it leads them away from the community.",
"timestamp": 1773397364.642446
},
{
"summary": "Silas calls troubled because Marcus, a founding member of his community, left abruptly with an apologetic note about \"disappointing\" him, which leads Silas to a painful realization that he's been using coercive social pressure to make members participate in \"shared intimacy nights\" they didn't actually want. After confronting the truth that his leadership style has manipulated people into betraying their own values, Silas agrees to make the intimacy nights truly optional and apologize to his community, showing genuine emotional growth about his abuse of power.",
"timestamp": 1773563183.0144992,
"arc_status": "ongoing"
}
],
"last_call": 1773563183.0145001,
"created_at": 1772430000.0
},
{
"id": "6460c37d",
"name": "Shonda",
"gender": "female",
"age": 52,
"job": "works the front desk at a hotel",
"location": "in Alamogordo",
"personality_traits": [
"laughs nervously when things get real",
"into horror movies, the psychological kind not slashers",
"coaches youth sports, takes it more seriously than the parents do",
"laughs nervously when things get real"
],
"voice": "Miranda",
"stable_seeds": {
"style": "COMMUNICATION STYLE: Everything circles back to them and how great they are. Name drops. Mentions their truck, their property, their salary, their bench press. Not overtly obnoxious \u2014 they genuinely think they're being conversational. Energy level: medium-high. When pushed back on, they get defensive fast and start listing accomplishments. Conversational tendency: one-upping."
},
"structured_background": {
"name": "Shonda",
"age": 52,
"gender": "female",
"job": "works the front desk at a hotel",
"location": "in Alamogordo",
"reason_for_calling": "discovered their kid's beloved little league coach did time for armed robbery in another state \u2014 he's been clean for fifteen years but nobody in town knows and the parents would lose their minds",
"pool_name": "GOSSIP",
"communication_style": "COMMUNICATION STYLE: Everything circles back to them and how great they are. Name drops. Mentions their truck, their property, their salary, their bench press. Not overtly obnoxious \u2014 they genuinely think they're being conversational. Energy level: medium-high. When pushed back on, they get defensive fast and start listing accomplishments. Conversational tendency: one-upping.",
"energy_level": "high",
"emotional_state": "calm",
"signature_detail": "laughs nervously when things get real",
"situation_summary": "discovered their kid's beloved little league coach did time for armed robbery in another state \u2014 he's been clean for fif",
"natural_description": "52, works the front desk at a hotel in Alamogordo. Discovered their kid's beloved little league coach did time for armed robbery in another state \u2014 he's been clean for fifteen years but nobody in town knows and the parents would lose their minds. Confident and opinionated. But underneath there's doubt. Might ask the host what they really think.. Her neighbor linda, who gossips about everyone on the block. Living together, not married. Her family has opinions about that.. Laughs nervously when things get real. Earlier today: Dropped the truck off at the mechanic in Lordsburg today Into into horror movies, the psychological kind not slashers. Remembers driving hours on dirt roads that are paved now, says it took the character out of them Thinks the Jalisco Cafe in Las Cruces has the best Mexican food in the state Was was reorganizing the junk drawer, which is what they do when they can't settle. before calling. It's Sunday night, the middle of the night. it's the weekend. Early spring \u2014 wind season is starting. Dust storms possible.\nABOUT WHERE THEY LIVE (Alamogordo): About 30,000 people. Holloman Air Force Base. White Sands National Park nearby. Sacramento Mountains and Cloudcroft up the hill. Tularosa Basin. The Space History museum. Only reference real places and facts about this area \u2014 don't invent businesses or landmarks that aren't mentioned here. Weather right now: 64\u00b0F, clear skies.",
"seeds": [
"into horror movies, the psychological kind not slashers",
"coaches youth sports, takes it more seriously than the parents do",
"laughs nervously when things get real",
"Thinks the speed limit on I-10 should be 85."
],
"verbal_fluency": "medium",
"calling_from": "gas station parking lot, engine running"
},
"avatar": "Shonda.jpg",
"relationships": {},
"call_history": [
{
"summary": "Shonda called concerned about her kid's beloved little league coach who served 15 years for armed robbery in another state, wondering if she should tell anyone. Luke reassured her that since the coach passed required background checks and it wasn't a sexual offense, she shouldn't worry about it\u2014the coach has turned his life around and deserves a second chance.",
"timestamp": 1773563477.0657432,
"arc_status": "ongoing"
}
],
"last_call": 1773563477.065744,
"created_at": 1773563477.065744
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,964 @@
{
"used": [
{
"reason": "read about the Donner Party and the actual survival decisions they faced \u2014 the story is more nuanced and horrifying than the simplified version most people know",
"pool": "TOPIC_CALLIN",
"timestamp": 1773478613.3288589,
"session_id": "4b57c1cf"
},
{
"reason": "their friend confessed they're the one who anonymously reported the caller's other friend to CPS two years ago \u2014 the report was unfounded and nearly destroyed a family",
"pool": "ADVICE",
"timestamp": 1773478613.357416,
"session_id": "4b57c1cf"
},
{
"reason": "found a light pollution map and drove two hours to a Bortle 2 zone and the sky looked fake \u2014 they could see the zodiacal light for the first time",
"pool": "TOPIC_CALLIN",
"timestamp": 1773478613.363403,
"session_id": "4b57c1cf"
},
{
"reason": "their HOA says they have to get rid of their chickens and they're ready to go to war over it",
"pool": "PROBLEMS",
"timestamp": 1773478613.364265,
"session_id": "4b57c1cf"
},
{
"reason": "called their teacher 'mom' in high school and somehow that became their nickname for the rest of the year \u2014 they graduated with it in the yearbook",
"pool": "STORIES",
"timestamp": 1773478613.365602,
"session_id": "4b57c1cf"
},
{
"reason": "woke up to find someone had mowed a giant smiley face into their front lawn \u2014 nobody on the street will admit to it and the mowing is professional-grade",
"pool": "STORIES",
"timestamp": 1773478613.36756,
"session_id": "4b57c1cf"
},
{
"reason": "found out their kid's soccer coach used to be in a punk band that opened for Green Day \u2014 there's a music video on YouTube with 2 million views",
"pool": "GOSSIP",
"timestamp": 1773478613.3718028,
"session_id": "4b57c1cf"
},
{
"reason": "a stranger accidentally Venmo'd them $500 and the transaction can't be reversed because the account was closed \u2014 they could just keep it but they know it was a mistake",
"pool": "ADVICE",
"timestamp": 1773478613.374868,
"session_id": "4b57c1cf"
},
{
"reason": "their parent keeps calling them their sibling's name \u2014 the sibling died two years ago and every time it happens it breaks the caller's heart",
"pool": "ADVICE",
"timestamp": 1773478613.378238,
"session_id": "4b57c1cf"
},
{
"reason": "their grandmother's will specified that whoever takes care of her 23-year-old parrot inherits the house \u2014 the parrot is mean and bites everyone but they need the house",
"pool": "STORIES",
"timestamp": 1773478616.933123,
"session_id": "4b57c1cf"
},
{
"reason": "a woman knocked on their door asking for someone by a name they've never heard \u2014 when they said wrong house, she said 'not yet' and walked away",
"pool": "WEIRD",
"timestamp": 1773478620.37826,
"session_id": "4b57c1cf"
},
{
"reason": "made a casserole so bad even the dog wouldn't eat it \u2014 their kid said 'I'd rather have detention lunch' and their spouse quietly ordered pizza",
"pool": "STORIES",
"timestamp": 1773478620.547498,
"session_id": "4b57c1cf"
},
{
"reason": "found their teenager's finsta (fake Instagram) and it has more followers than their real account \u2014 the content is actually really good and thoughtful and they don't know whether to be proud or concerned",
"pool": "GOSSIP",
"timestamp": 1773478620.695659,
"session_id": "4b57c1cf"
},
{
"reason": "their spouse found a burner phone with hundreds of explicit texts to multiple people \u2014 none of them were physical affairs, all sexting, and they genuinely don't understand why their spouse is acting like it's the same thing",
"pool": "PROBLEMS",
"timestamp": 1773478620.788206,
"session_id": "4b57c1cf"
},
{
"reason": "is convinced that jaywalking laws are absurd and pedestrians should have the right of way everywhere",
"pool": "HOT_TAKES",
"timestamp": 1773478621.213448,
"session_id": "4b57c1cf"
},
{
"reason": "accidentally RSVP'd to the wrong funeral \u2014 realized halfway through the service but couldn't leave because they were sitting in the front row",
"pool": "STORIES",
"timestamp": 1773478621.4047601,
"session_id": "4b57c1cf"
},
{
"reason": "is convinced that the Olympics should go back to amateurs only because professional athletes ruined it",
"pool": "HOT_TAKES",
"timestamp": 1773478621.413064,
"session_id": "4b57c1cf"
},
{
"reason": "is convinced that nobody actually enjoys networking events and everyone is pretending",
"pool": "HOT_TAKES",
"timestamp": 1773478622.352447,
"session_id": "4b57c1cf"
},
{
"reason": "their parrot learned to mimic their phone's alarm sound and now they can't tell what's real \u2014 they've been late to work three times this month",
"pool": "PROBLEMS",
"timestamp": 1773478622.69716,
"session_id": "4b57c1cf"
},
{
"reason": "their therapist accidentally revealed something another client said \u2014 not by name but the details were so specific the caller knows exactly who it is, and it's someone they know",
"pool": "ADVICE",
"timestamp": 1773482160.322499,
"session_id": "1324296d"
},
{
"reason": "wants to talk about code-switching \u2014 how people unconsciously change how they talk depending on who they're with \u2014 and what that says about identity",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482160.352229,
"session_id": "1324296d"
},
{
"reason": "believes potlucks at work should be illegal because half the people can't cook and nobody wants to say it",
"pool": "HOT_TAKES",
"timestamp": 1773482160.353246,
"session_id": "1324296d"
},
{
"reason": "thinks the snooze button is humanity's greatest invention and anyone who gets up on the first alarm is a psychopath",
"pool": "HOT_TAKES",
"timestamp": 1773482160.353927,
"session_id": "1324296d"
},
{
"reason": "thinks Silo is the most underrated show on TV right now",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482160.3549309,
"session_id": "1324296d"
},
{
"reason": "is convinced that most meetings could be an email and most emails could be nothing",
"pool": "HOT_TAKES",
"timestamp": 1773482160.3554702,
"session_id": "1324296d"
},
{
"reason": "their neighbor who runs a 'home daycare' is actually just letting kids watch iPads in the garage for eight hours \u2014 a parent showed up early and saw",
"pool": "GOSSIP",
"timestamp": 1773482160.3566458,
"session_id": "1324296d"
},
{
"reason": "their mechanic accidentally told them their car is worth three times what they paid \u2014 they could flip it but the seller was a family friend who didn't know the value",
"pool": "ADVICE",
"timestamp": 1773482160.3593001,
"session_id": "1324296d"
},
{
"reason": "their town's beloved mailman has been reading postcards and everyone knows but nobody says anything because he's 78 and lonely",
"pool": "GOSSIP",
"timestamp": 1773482160.359989,
"session_id": "1324296d"
},
{
"reason": "wants to talk about petrified forests and how a tree can turn to stone over millions of years while preserving the cellular structure \u2014 you can see the individual cells under a microscope",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482160.3605812,
"session_id": "1324296d"
},
{
"reason": "their neighbor built a fence six inches onto their property and when they brought it up the guy pulled out a surveyor's report that might actually prove it's his land",
"pool": "PROBLEMS",
"timestamp": 1773482160.3614998,
"session_id": "1324296d"
},
{
"reason": "accidentally received a double refund from a company and they need the money \u2014 it's a big corporation and nobody will notice but they were raised to be honest",
"pool": "ADVICE",
"timestamp": 1773482160.364136,
"session_id": "1324296d"
},
{
"reason": "the parent who leads the anti-phone crusade at the PTA was caught by their own kid doom-scrolling for four hours \u2014 the kid put it in a school essay about hypocrisy",
"pool": "GOSSIP",
"timestamp": 1773482160.364971,
"session_id": "1324296d"
},
{
"reason": "believes people who call themselves 'dog mom' or 'cat dad' need to understand that a pet is not a child",
"pool": "HOT_TAKES",
"timestamp": 1773482160.365529,
"session_id": "1324296d"
},
{
"reason": "is convinced that New Year's resolutions are a scam invented by gym memberships and diet companies",
"pool": "HOT_TAKES",
"timestamp": 1773482160.366053,
"session_id": "1324296d"
},
{
"reason": "lied about their education on a job application fifteen years ago and has been quietly terrified ever since \u2014 they've been promoted four times and are now in a role where someone might actually check",
"pool": "ADVICE",
"timestamp": 1773482160.36687,
"session_id": "1324296d"
},
{
"reason": "is convinced that credit scores are a made-up number designed to keep people anxious",
"pool": "HOT_TAKES",
"timestamp": 1773482160.3674722,
"session_id": "1324296d"
},
{
"reason": "is convinced that 90% of people who say they 'love to cook' actually love to eat and tolerate cooking \u2014 the ones who really love cooking are weird about knives and have opinions about salt that nobody asked for",
"pool": "HOT_TAKES",
"timestamp": 1773482160.368109,
"session_id": "1324296d"
},
{
"reason": "every time they sneeze in their house, the neighbor's dog barks exactly twice \u2014 they've tested it forty-one times, had friends come over to verify, tried fake sneezes which don't trigger it, and it works with a 100% hit rate on genuine sneezes regardless of volume or time of day",
"pool": "WEIRD",
"timestamp": 1773482166.661052,
"session_id": "1324296d"
},
{
"reason": "their teenager created an AI chatbot that talks like them and showed it to the family as a joke \u2014 but some of the things it says are things the caller has only thought, never said",
"pool": "PROBLEMS",
"timestamp": 1773482166.741036,
"session_id": "1324296d"
},
{
"reason": "thinks organized playdates are weird and kids should just go outside and knock on doors like they used to",
"pool": "HOT_TAKES",
"timestamp": 1773482166.944554,
"session_id": "1324296d"
},
{
"reason": "thinks the whole charcuterie board trend is just a fancy name for a Lunchable and nobody wants to admit it",
"pool": "HOT_TAKES",
"timestamp": 1773482166.974886,
"session_id": "1324296d"
},
{
"reason": "believes pool ownership is a scam because you spend more time cleaning it than swimming in it",
"pool": "HOT_TAKES",
"timestamp": 1773482167.014205,
"session_id": "1324296d"
},
{
"reason": "the local real estate agent who sells 'family-friendly neighborhoods' is being sued by three neighbors for noise complaints from their own house parties",
"pool": "GOSSIP",
"timestamp": 1773482167.3471968,
"session_id": "1324296d"
},
{
"reason": "found out the couple everyone calls 'relationship goals' met because one of them catfished the other \u2014 they've been together five years and neither will admit how it started",
"pool": "GOSSIP",
"timestamp": 1773482167.4142542,
"session_id": "1324296d"
},
{
"reason": "accidentally discovered their company has been billing clients for work that was never done and they have the receipts on a USB drive in their glove box",
"pool": "PROBLEMS",
"timestamp": 1773482167.4820511,
"session_id": "1324296d"
},
{
"reason": "found their kid's diary and read it \u2014 what they found isn't dangerous but it's personal and now they can't unknow it and don't know how to act normal",
"pool": "ADVICE",
"timestamp": 1773482167.526515,
"session_id": "1324296d"
},
{
"reason": "got their citizenship today after twelve years of paperwork",
"pool": "CELEBRATIONS",
"timestamp": 1773482167.636487,
"session_id": "1324296d"
},
{
"reason": "found their dad's old ham radio in the attic, got it working, and has been talking to strangers at 2am \u2014 one of them just said something that makes them think it's someone they know",
"pool": "PROBLEMS",
"timestamp": 1773482167.743945,
"session_id": "1324296d"
},
{
"reason": "sneezed so hard they threw out their back and had to call an ambulance \u2014 the paramedic said it was the third sneeze-related call that week",
"pool": "STORIES",
"timestamp": 1773482168.348608,
"session_id": "1324296d"
},
{
"reason": "believes people who say 'I could never go vegan' have never actually tried and are just being stubborn",
"pool": "HOT_TAKES",
"timestamp": 1773482168.362889,
"session_id": "1324296d"
},
{
"reason": "wants to talk about why nobody reads anymore and whether that's actually true or just something people say",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482169.0318348,
"session_id": "1324296d"
},
{
"reason": "just found out about Earth's inner core \u2014 it's a solid iron ball the size of the moon, hotter than the surface of the sun, and it rotates slightly faster than the rest of the planet",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482172.0973198,
"session_id": "7041d47f"
},
{
"reason": "thinks brunch is just breakfast at a markup and the mimosas aren't even good",
"pool": "HOT_TAKES",
"timestamp": 1773482172.0987031,
"session_id": "7041d47f"
},
{
"reason": "had a full-blown panic attack at the grocery store today and had to leave their cart in the aisle",
"pool": "PROBLEMS",
"timestamp": 1773482172.099814,
"session_id": "7041d47f"
},
{
"reason": "believes social media has made everyone a narcissist and we'd all be happier with flip phones",
"pool": "HOT_TAKES",
"timestamp": 1773482172.100823,
"session_id": "7041d47f"
},
{
"reason": "is convinced that small talk is a complete waste of time and people should just be honest about not wanting to chat",
"pool": "HOT_TAKES",
"timestamp": 1773482172.1017642,
"session_id": "7041d47f"
},
{
"reason": "got a notification that someone signed into their email from Brazil \u2014 turns out it was an old phone they sold on eBay and the new owner has been reading their newsletters without unsubscribing",
"pool": "STORIES",
"timestamp": 1773482172.1033301,
"session_id": "7041d47f"
},
{
"reason": "their sourdough starter that they've been nursing for a year finally made a loaf that doesn't taste like vinegar",
"pool": "CELEBRATIONS",
"timestamp": 1773482172.104615,
"session_id": "7041d47f"
},
{
"reason": "found out their friend's 'investment portfolio' is actually just $500 in a savings account \u2014 they accidentally showed a bank notification while showing something on their phone",
"pool": "GOSSIP",
"timestamp": 1773482172.105814,
"session_id": "7041d47f"
},
{
"reason": "discovered their neighbor who always acts busy and stressed actually sits in their backyard reading novels for most of the day \u2014 the caller can see over the fence from their second floor",
"pool": "GOSSIP",
"timestamp": 1773482172.1068,
"session_id": "7041d47f"
},
{
"reason": "their Alexa ordered $800 worth of cat food and they don't have a cat \u2014 Amazon says the voice command came from their device and won't refund it",
"pool": "PROBLEMS",
"timestamp": 1773482173.095018,
"session_id": "7041d47f"
},
{
"reason": "thinks youth sports have become way too competitive and parents are ruining it for the kids",
"pool": "HOT_TAKES",
"timestamp": 1773482173.368487,
"session_id": "6e66d47e"
},
{
"reason": "is 30 and has no idea what they want to do with their life \u2014 tried college, tried trades, tried the military, nothing stuck and everyone else seems to have it figured out",
"pool": "ADVICE",
"timestamp": 1773482173.370264,
"session_id": "6e66d47e"
},
{
"reason": "farted so loud during a moment of silence at a funeral that the pastor stopped and looked directly at them \u2014 the deceased's wife started laughing which made the whole front row laugh and now the family says grandpa would have loved it but the caller has not recovered",
"pool": "STORIES",
"timestamp": 1773482173.371583,
"session_id": "6e66d47e"
},
{
"reason": "their fitness instructor who preaches 'clean eating' was spotted at 2 AM at a Waffle House housing a plate of smothered hash browns \u2014 the caller's friend was working the late shift",
"pool": "GOSSIP",
"timestamp": 1773482173.3726678,
"session_id": "6e66d47e"
},
{
"reason": "their neighbor runs a business out of their garage and the traffic and noise are destroying the street \u2014 the other neighbors are afraid to say anything",
"pool": "PROBLEMS",
"timestamp": 1773482173.373756,
"session_id": "6e66d47e"
},
{
"reason": "their town's Facebook group has devolved into a full civil war over whether the new stoplight is helping or hurting traffic \u2014 someone made a PowerPoint",
"pool": "STORIES",
"timestamp": 1773482173.374847,
"session_id": "6e66d47e"
},
{
"reason": "got rear-ended at a stoplight and the other driver got out and said 'that's for what you did at the Safeway' \u2014 the caller has never been to that Safeway",
"pool": "STORIES",
"timestamp": 1773482173.37588,
"session_id": "6e66d47e"
},
{
"reason": "got recognized at the grocery store by someone who said their yard is the nicest on the street",
"pool": "CELEBRATIONS",
"timestamp": 1773482173.377035,
"session_id": "6e66d47e"
},
{
"reason": "hasn't been to a dentist in seven years because of a childhood trauma and the pain is getting bad enough that they can't ignore it anymore",
"pool": "ADVICE",
"timestamp": 1773482173.37791,
"session_id": "6e66d47e"
},
{
"reason": "has been on a sourdough journey for six months and their starter has a name and a feeding schedule and they know how that sounds",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482173.5781388,
"session_id": "6e66d47e"
},
{
"reason": "found out their partner lied on their resume about having a degree they don't have \u2014 the partner makes good money and does good work but could be fired if anyone checks",
"pool": "ADVICE",
"timestamp": 1773482173.713871,
"session_id": "6e66d47e"
},
{
"reason": "thinks ring doorbell culture has turned neighbors into surveillance agents and it's creepy",
"pool": "HOT_TAKES",
"timestamp": 1773482174.547214,
"session_id": "e257ea82"
},
{
"reason": "is high and wants to pitch a conspiracy theory they came up with in the shower \u2014 it involves pigeons and the government",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482174.553439,
"session_id": "e257ea82"
},
{
"reason": "won the county fair pie contest with a recipe they invented themselves",
"pool": "CELEBRATIONS",
"timestamp": 1773482174.554583,
"session_id": "e257ea82"
},
{
"reason": "was accidentally overpaid by $5,000 at work and nobody has noticed in three months \u2014 they need the money but they know eventually someone will catch it",
"pool": "ADVICE",
"timestamp": 1773482174.557415,
"session_id": "e257ea82"
},
{
"reason": "believes people who share every meal on Instagram are just eating for the camera and the food gets cold",
"pool": "HOT_TAKES",
"timestamp": 1773482174.5584981,
"session_id": "e257ea82"
},
{
"reason": "is adamant that carpet in bathrooms is a war crime against interior design",
"pool": "HOT_TAKES",
"timestamp": 1773482174.559455,
"session_id": "e257ea82"
},
{
"reason": "has been pretending to be a widower for sympathy at a grief support group but they actually just got divorced \u2014 and now they've made real friends there and don't know how to come clean",
"pool": "PROBLEMS",
"timestamp": 1773482174.5641248,
"session_id": "e257ea82"
},
{
"reason": "their closest friend just got the job the caller applied for \u2014 the friend doesn't know the caller applied and keeps talking about how excited they are",
"pool": "ADVICE",
"timestamp": 1773482174.5656471,
"session_id": "e257ea82"
},
{
"reason": "thinks people who post their workouts on social media are just fishing for compliments",
"pool": "HOT_TAKES",
"timestamp": 1773482174.5667698,
"session_id": "e257ea82"
},
{
"reason": "is adamant that 'unlimited PTO' is a trick to make people take less vacation and feel guilty about it",
"pool": "HOT_TAKES",
"timestamp": 1773482175.3913789,
"session_id": "e257ea82"
},
{
"reason": "believes open-plan offices were invented by someone who hates productivity",
"pool": "HOT_TAKES",
"timestamp": 1773482175.851082,
"session_id": "037e5af5"
},
{
"reason": "has been having the best sex of their life since they opened up about their {fetish_detail} interest \u2014 the problem is it's with someone who isn't their partner",
"pool": "PROBLEMS",
"timestamp": 1773482175.854767,
"session_id": "037e5af5"
},
{
"reason": "is convinced that couples who say they 'never fight' are either lying or so dead inside they've stopped having opinions \u2014 healthy people disagree, and if you haven't told your partner they're wrong about something you don't respect them enough to be honest",
"pool": "HOT_TAKES",
"timestamp": 1773482175.855834,
"session_id": "037e5af5"
},
{
"reason": "found their super-private boss on TikTok where they do cooking videos with 80k followers and a persona completely different from work \u2014 they're bubbly and goofy and use a fake name",
"pool": "GOSSIP",
"timestamp": 1773482175.859416,
"session_id": "037e5af5"
},
{
"reason": "found out their buddy who 'never watches TV' has an absolutely insane streaming setup with six subscriptions \u2014 their wife accidentally shared the family login",
"pool": "GOSSIP",
"timestamp": 1773482175.86236,
"session_id": "037e5af5"
},
{
"reason": "the guy who runs the neighborhood Facebook group moderates everything to favor his friends \u2014 opposing comments get deleted and the poster gets banned for 'community guidelines violations'",
"pool": "GOSSIP",
"timestamp": 1773482175.863625,
"session_id": "037e5af5"
},
{
"reason": "their adult kid moved back home after a divorce and it was supposed to be temporary \u2014 it's been eight months and there's no plan to leave",
"pool": "ADVICE",
"timestamp": 1773482175.866883,
"session_id": "037e5af5"
},
{
"reason": "found out their sweet elderly neighbor was a groupie for a famous rock band in the 70s \u2014 there are photos and they are WILD",
"pool": "GOSSIP",
"timestamp": 1773482175.868225,
"session_id": "037e5af5"
},
{
"reason": "discovered their coworker runs an anonymous gossip account about the company and the posts are 100% accurate \u2014 the caller recognized details only someone in their department would know",
"pool": "GOSSIP",
"timestamp": 1773482175.8696718,
"session_id": "037e5af5"
},
{
"reason": "retired at 60 and is bored out of their mind after two months \u2014 they thought they'd love it but they have no hobbies and their spouse is annoyed they're always around",
"pool": "ADVICE",
"timestamp": 1773482177.961,
"session_id": "037e5af5"
},
{
"reason": "their son who dropped out of high school just earned his diploma at 26 \u2014 he walked across the stage and the whole family was there",
"pool": "CELEBRATIONS",
"timestamp": 1773482178.315913,
"session_id": "037e5af5"
},
{
"reason": "is adamant that the 'customer is always right' mentality created the worst generation of entitled shoppers in history",
"pool": "HOT_TAKES",
"timestamp": 1773482178.347635,
"session_id": "037e5af5"
},
{
"reason": "their coworker asked them for a kidney \u2014 a real kidney \u2014 they're a match and the coworker has no other options and they have to make a decision they never imagined facing",
"pool": "ADVICE",
"timestamp": 1773482178.705647,
"session_id": "037e5af5"
},
{
"reason": "thinks the Super Bowl halftime show hasn't been good since Prince and everyone's been lying since",
"pool": "HOT_TAKES",
"timestamp": 1773482178.833429,
"session_id": "037e5af5"
},
{
"reason": "two years clean today and their sponsor took them out for pancakes to celebrate",
"pool": "CELEBRATIONS",
"timestamp": 1773482178.902486,
"session_id": "037e5af5"
},
{
"reason": "found their lost wedding ring in the yard with a metal detector after giving up hope three months ago",
"pool": "CELEBRATIONS",
"timestamp": 1773482179.180636,
"session_id": "037e5af5"
},
{
"reason": "thinks the news media is more addicted to outrage than their viewers are and it's rotting everyone's brains from both sides",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482179.2769768,
"session_id": "037e5af5"
},
{
"reason": "found a framed photo at Goodwill of a family picnic and their house is clearly visible in the background \u2014 the photo is dated 1962 and their house wasn't built until 1985",
"pool": "WEIRD",
"timestamp": 1773482179.554966,
"session_id": "037e5af5"
},
{
"reason": "the woman who organized the neighborhood garage sale kept a 10% cut from everyone's sales as an 'organizing fee' that nobody agreed to \u2014 the caller counted their sales versus their payout and the math doesn't work",
"pool": "GOSSIP",
"timestamp": 1773482180.219449,
"session_id": "037e5af5"
},
{
"reason": "their small town is being split by a proposed mine that would bring jobs but destroy the aquifer \u2014 families who've been friends for decades are on opposite sides",
"pool": "PROBLEMS",
"timestamp": 1773482180.2212522,
"session_id": "037e5af5"
},
{
"reason": "their neighbor's 'vacation home' is actually a timeshare they can only use two weeks a year \u2014 a real estate agent friend looked up the property records",
"pool": "GOSSIP",
"timestamp": 1773482180.23236,
"session_id": "037e5af5"
},
{
"reason": "thinks people who show up late to everything and say 'that's just how I am' are being selfish and they know it",
"pool": "HOT_TAKES",
"timestamp": 1773482180.370723,
"session_id": "037e5af5"
},
{
"reason": "was offered early retirement at 52 with a decent package but they're not sure they can afford 30+ years without working \u2014 their spouse says take it",
"pool": "ADVICE",
"timestamp": 1773482180.372096,
"session_id": "037e5af5"
},
{
"reason": "is adamant that tipping on takeout orders makes no sense because nobody carried a plate to your table",
"pool": "HOT_TAKES",
"timestamp": 1773482180.64287,
"session_id": "037e5af5"
},
{
"reason": "believes thank-you cards are outdated and a text is perfectly acceptable",
"pool": "HOT_TAKES",
"timestamp": 1773482180.864955,
"session_id": "037e5af5"
},
{
"reason": "is convinced that roundabouts are superior to four-way stops and Americans are just too stubborn to learn",
"pool": "HOT_TAKES",
"timestamp": 1773482181.0859,
"session_id": "037e5af5"
},
{
"reason": "their relative who won $50k in a lawsuit told the family it was only $15k and kept the rest \u2014 the caller works at the courthouse and saw the actual settlement",
"pool": "GOSSIP",
"timestamp": 1773482181.269114,
"session_id": "037e5af5"
},
{
"reason": "started an OnlyFans as a joke with their spouse and now they're making $4,000 a month and {partner_reaction} \u2014 the money is great but it's changing their relationship",
"pool": "PROBLEMS",
"timestamp": 1773482181.2754428,
"session_id": "037e5af5"
},
{
"reason": "drove through a car wash and their side mirror got ripped off \u2014 the car wash said their sign clearly states 'fold in mirrors' but the sign is in 6-point font behind a bush",
"pool": "STORIES",
"timestamp": 1773482181.2767491,
"session_id": "037e5af5"
},
{
"reason": "their GPS has been routing them past the same house for three weeks on different drives and they're starting to think the universe is trying to tell them something",
"pool": "STORIES",
"timestamp": 1773482181.2974489,
"session_id": "037e5af5"
},
{
"reason": "just became a grandparent for the first time and they already bought the kid a fishing rod",
"pool": "CELEBRATIONS",
"timestamp": 1773482181.326601,
"session_id": "037e5af5"
},
{
"reason": "believes breakfast is the least important meal of the day and the whole 'most important meal' thing is cereal company propaganda",
"pool": "HOT_TAKES",
"timestamp": 1773482182.32586,
"session_id": "037e5af5"
},
{
"reason": "was told they need to quit drinking for medical reasons and they're not sure they can \u2014 they don't think they're an alcoholic but two drinks a night for twenty years is apparently a problem",
"pool": "ADVICE",
"timestamp": 1773482182.3825889,
"session_id": "037e5af5"
},
{
"reason": "their dead relative's phone number got reassigned and the new owner has been texting them pretending to be the dead person \u2014 they fell for it for two weeks before figuring it out",
"pool": "PROBLEMS",
"timestamp": 1773482182.5978801,
"session_id": "037e5af5"
},
{
"reason": "is adamant that the wave at stadiums is obnoxious and someone should have the guts to not stand up",
"pool": "HOT_TAKES",
"timestamp": 1773482182.885383,
"session_id": "037e5af5"
},
{
"reason": "had a mentor who changed the entire trajectory of their life with one conversation and they just found out that person passed away \u2014 wants to talk about people who shape you without knowing it",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482182.887537,
"session_id": "037e5af5"
},
{
"reason": "their uncle who always shows up to family events in a new car is drowning in lease payments \u2014 his ex-wife told the caller during a surprisingly honest conversation",
"pool": "GOSSIP",
"timestamp": 1773482183.46401,
"session_id": "037e5af5"
},
{
"reason": "found out the guy who runs the local running club has been driving to the halfway point of their group runs and waiting for them \u2014 his watch data shows suspiciously fast splits and zero elevation gain",
"pool": "GOSSIP",
"timestamp": 1773482183.4661272,
"session_id": "037e5af5"
},
{
"reason": "believes gas station coffee is better than Starbucks and is willing to die on that hill",
"pool": "HOT_TAKES",
"timestamp": 1773482184.413106,
"session_id": "037e5af5"
},
{
"reason": "thinks most people's dogs are poorly trained nightmares and the owners know it but saying anything about someone's dog is now treated like criticizing their child \u2014 and half the time the child is also a nightmare but at least the kid might grow out of it",
"pool": "HOT_TAKES",
"timestamp": 1773482186.728033,
"session_id": "037e5af5"
},
{
"reason": "found their parent's sex tape while cleaning out the attic \u2014 it was labeled with a date and a name, and the name isn't their other parent's, and the date is roughly nine months before they were born",
"pool": "PROBLEMS",
"timestamp": 1773482187.561394,
"session_id": "037e5af5"
},
{
"reason": "wants to discuss which show has the best pilot episode ever",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482189.378348,
"session_id": "037e5af5"
},
{
"reason": "their partner spent their vacation fund on crypto without telling them \u2014 the crypto is now worth a third of what was paid",
"pool": "PROBLEMS",
"timestamp": 1773482563.404344,
"session_id": "d409b015"
},
{
"reason": "showed up to a costume party that wasn't a costume party \u2014 they were dressed as a giant banana and had to commit to it for four hours",
"pool": "STORIES",
"timestamp": 1773482563.405995,
"session_id": "d409b015"
},
{
"reason": "has a chance to take over the family business but the business is failing and their parents won't admit it \u2014 saying no means watching it die, saying yes means going down with the ship",
"pool": "ADVICE",
"timestamp": 1773482563.407126,
"session_id": "d409b015"
},
{
"reason": "their car odometer has been going backward \u2014 they've driven 200 miles this week and it shows 200 fewer",
"pool": "WEIRD",
"timestamp": 1773482563.408916,
"session_id": "d409b015"
},
{
"reason": "thinks the tech monopoly situation is worse than Standard Oil ever was and wants to know why nobody is doing anything about it",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482563.410304,
"session_id": "d409b015"
},
{
"reason": "started a tool lending library in their garage and half the block has borrowed something",
"pool": "CELEBRATIONS",
"timestamp": 1773482563.411677,
"session_id": "d409b015"
},
{
"reason": "their coworker has been microwaving fish every single day for a year and when confronted said 'I will die on this hill' with complete sincerity",
"pool": "STORIES",
"timestamp": 1773482563.413953,
"session_id": "d409b015"
},
{
"reason": "thinks avocado toast is fine but not worth twelve dollars and it's not a personality trait",
"pool": "HOT_TAKES",
"timestamp": 1773482563.415277,
"session_id": "d409b015"
},
{
"reason": "got blackout drunk at their kid's birthday party last weekend and nobody's said a word about it",
"pool": "PROBLEMS",
"timestamp": 1773482563.4167922,
"session_id": "d409b015"
},
{
"reason": "their kid graduated basic training today and they've never been more proud or more terrified",
"pool": "CELEBRATIONS",
"timestamp": 1773482569.235971,
"session_id": "d409b015"
},
{
"reason": "confidently answered a trivia question at a bar and was so wrong the entire bar went silent \u2014 they still go there and people bring it up",
"pool": "STORIES",
"timestamp": 1773482569.534742,
"session_id": "d409b015"
},
{
"reason": "bought a couch off Craigslist and when they got it home found $8,000 in cash sewn into the cushion \u2014 the seller won't return their calls",
"pool": "STORIES",
"timestamp": 1773482570.099593,
"session_id": "d409b015"
},
{
"reason": "was invited to join a business venture with their in-laws and their spouse thinks it's a great idea \u2014 every financial advisor says never mix family and money",
"pool": "ADVICE",
"timestamp": 1773482570.369768,
"session_id": "d409b015"
},
{
"reason": "is fed up with people who don't use turn signals and thinks it should be a mandatory re-test on your license",
"pool": "HOT_TAKES",
"timestamp": 1773482571.856142,
"session_id": "d409b015"
},
{
"reason": "entered a costume contest as a last-minute decision wearing a bedsheet ghost and won \u2014 beat someone who'd spent six months on a screen-accurate Iron Man suit and the Iron Man person has not spoken to them since",
"pool": "STORIES",
"timestamp": 1773482571.857717,
"session_id": "d409b015"
},
{
"reason": "thinks RSVP culture is broken and half the people who say 'yes' won't show up",
"pool": "HOT_TAKES",
"timestamp": 1773482571.859178,
"session_id": "d409b015"
},
{
"reason": "read about the double-slit experiment and it broke their brain",
"pool": "TOPIC_CALLIN",
"timestamp": 1773482571.860567,
"session_id": "d409b015"
},
{
"reason": "believes the 'kids eat free' deal at restaurants is the only honest marketing left in America",
"pool": "HOT_TAKES",
"timestamp": 1773482576.389204,
"session_id": "d409b015"
},
{
"reason": "is fed up with people who say 'I don't eat fast food' like it makes them morally superior",
"pool": "HOT_TAKES",
"timestamp": 1773558482.244677,
"session_id": "11f1bf06"
},
{
"reason": "started going to a sex addiction support group as a joke and realized halfway through the first meeting that they actually belong there \u2014 they haven't missed a meeting since and their partner has no idea",
"pool": "PROBLEMS",
"timestamp": 1773558482.250958,
"session_id": "11f1bf06"
},
{
"reason": "is a pharmacist who recognized a regular customer's prescription pattern as doctor shopping for opioids \u2014 the customer is also a friend and clearly in chronic pain, and reporting them means they lose access to any pain management",
"pool": "ADVICE",
"timestamp": 1773558482.252671,
"session_id": "11f1bf06"
},
{
"reason": "their chickens stopped laying for a week, then all laid on the same day \u2014 eight eggs, all double-yolk, all exactly the same size",
"pool": "WEIRD",
"timestamp": 1773558482.254178,
"session_id": "11f1bf06"
},
{
"reason": "was cleaning out their dead uncle's house and found a room full of journals describing a completely different life than anyone knew about",
"pool": "PROBLEMS",
"timestamp": 1773558482.255507,
"session_id": "11f1bf06"
},
{
"reason": "is convinced that 'let's grab coffee sometime' is the biggest lie in American culture",
"pool": "HOT_TAKES",
"timestamp": 1773558482.257047,
"session_id": "11f1bf06"
},
{
"reason": "discovered that the 'family cabin' they've been going to for 30 years actually belongs to a stranger who never knew they were using it",
"pool": "PROBLEMS",
"timestamp": 1773558482.258704,
"session_id": "11f1bf06"
},
{
"reason": "got catfished for four months and sent the person $3,000 before figuring it out",
"pool": "PROBLEMS",
"timestamp": 1773558482.264756,
"session_id": "11f1bf06"
},
{
"reason": "accidentally replied-all to a company email with something they definitely should not have said",
"pool": "PROBLEMS",
"timestamp": 1773558482.270707,
"session_id": "11f1bf06"
},
{
"reason": "discovered their kid's beloved little league coach did time for armed robbery in another state \u2014 he's been clean for fifteen years but nobody in town knows and the parents would lose their minds",
"pool": "GOSSIP",
"timestamp": 1773558488.901591,
"session_id": "11f1bf06"
},
{
"reason": "their quiet librarian neighbor writes extremely explicit romance novels under a pen name \u2014 they found out because Amazon recommended one based on their address",
"pool": "GOSSIP",
"timestamp": 1773558489.312327,
"session_id": "11f1bf06"
},
{
"reason": "read fifty books this year after not finishing a single one in the last decade",
"pool": "CELEBRATIONS",
"timestamp": 1773558489.345542,
"session_id": "11f1bf06"
},
{
"reason": "thinks air fresheners just make a room smell like flowers and garbage at the same time",
"pool": "HOT_TAKES",
"timestamp": 1773558489.424201,
"session_id": "11f1bf06"
},
{
"reason": "the couple who always wins the chili cookoff has been using the same canned base for years \u2014 the caller's kid worked at their house and saw the evidence in the recycling",
"pool": "GOSSIP",
"timestamp": 1773558489.582072,
"session_id": "11f1bf06"
},
{
"reason": "is convinced that vinyl sounds exactly the same as digital and people are lying to themselves",
"pool": "HOT_TAKES",
"timestamp": 1773558489.701354,
"session_id": "11f1bf06"
},
{
"reason": "got a cease and desist letter from Disney because their kid's birthday party decorations went viral on TikTok",
"pool": "PROBLEMS",
"timestamp": 1773558489.9736488,
"session_id": "11f1bf06"
},
{
"reason": "won the office chili cookoff against a guy who's been undefeated for seven years and the whole floor erupted",
"pool": "CELEBRATIONS",
"timestamp": 1773558490.180077,
"session_id": "11f1bf06"
},
{
"reason": "found out their boss has been expensing personal vacations as 'business travel' for three years \u2014 the receipts are all restaurants and resorts with no meeting notes attached",
"pool": "GOSSIP",
"timestamp": 1773558490.76909,
"session_id": "11f1bf06"
}
]
}

View File

@@ -5,7 +5,9 @@
1771212705,
1771146434,
1771146564,
1773545733,
1771146952,
1773531209,
1771244817,
1771244823,
1771213151

View File

@@ -82,6 +82,11 @@ header {
color: var(--accent-green);
}
.clock-cost { font-weight: 700; }
.cost-low { color: var(--accent-green); }
.cost-mid { color: #e8a91d; }
.cost-high { color: var(--accent-red); }
header h1 {
font-size: 1.5rem;
font-weight: 700;

View File

@@ -26,6 +26,9 @@
<span class="clock-divider">|</span>
<span class="clock-label">Est. Final:</span>
<span class="clock-value clock-estimate" id="clock-estimate">0:00</span>
<span class="clock-divider">|</span>
<span class="clock-label">Cost:</span>
<span class="clock-value clock-cost" id="clock-cost">$0.00</span>
</span>
</div>
</header>

View File

@@ -221,12 +221,15 @@ function initEventListeners() {
// Start queue polling
startQueuePolling();
// Start cost polling
startCostPolling();
// Talk button - now triggers server-side recording
const talkBtn = document.getElementById('talk-btn');
if (talkBtn) {
talkBtn.addEventListener('mousedown', startRecording);
talkBtn.addEventListener('mouseup', stopRecording);
talkBtn.addEventListener('mouseleave', () => { if (isRecording) stopRecording(); });
// Listen on document for mouseup so layout shifts don't orphan the release
document.addEventListener('mouseup', () => { if (isRecording) stopRecording(); });
talkBtn.addEventListener('touchstart', e => { e.preventDefault(); startRecording(); });
talkBtn.addEventListener('touchend', e => { e.preventDefault(); stopRecording(); });
}
@@ -838,7 +841,7 @@ async function stopRecording() {
async function sendTypedMessage() {
const input = document.getElementById('type-input');
const text = input.value.trim();
if (!text || !currentCaller || isProcessing) return;
if (!text || isProcessing) return;
input.value = '';
document.getElementById('type-modal').classList.add('hidden');
@@ -847,6 +850,11 @@ async function sendTypedMessage() {
addMessage('You', text);
try {
if (!currentCaller) {
// No active call — route to Devon
showStatus('Devon is thinking...');
await askDevon(text, { skipHostMessage: true });
} else {
showStatus(`${currentCaller.name} is thinking...`);
const chatData = await safeFetch('/api/chat', {
@@ -873,6 +881,7 @@ async function sendTypedMessage() {
})
});
}
}
} catch (err) {
log('Error: ' + err.message);
@@ -1576,6 +1585,28 @@ async function triggerAiRespond() {
}
// --- Cost Polling ---
function startCostPolling() {
setInterval(fetchCosts, 5000);
}
async function fetchCosts() {
try {
const res = await fetch('/api/costs');
if (!res.ok) return;
const data = await res.json();
const el = document.getElementById('clock-cost');
if (!el) return;
el.textContent = '$' + data.total_cost_usd.toFixed(2);
el.classList.remove('cost-low', 'cost-mid', 'cost-high');
if (data.total_cost_usd < 0.50) el.classList.add('cost-low');
else if (data.total_cost_usd < 2.00) el.classList.add('cost-mid');
else el.classList.add('cost-high');
} catch (err) {}
}
// --- Conversation Update Polling ---
let conversationSince = 0;

View File

@@ -309,6 +309,7 @@ Generate a JSON response with:
- "Intro" at 0 seconds
- A chapter for each caller/topic (use caller names if mentioned)
- "Outro" near the end
4. "thumbnail_text": The single most provocative, clickable, or outrageous caller topic from the episode as a SHORT phrase (3-5 words max). Think YouTube thumbnail energy — shocking, funny, or intriguing. Examples: "HE ATE THE EVIDENCE", "MY BOSS IS A GHOST", "DIVORCE OVER RANCH". ALL CAPS.
Respond with ONLY valid JSON, no markdown or explanation."""
@@ -348,6 +349,8 @@ Respond with ONLY valid JSON, no markdown or explanation."""
print(f" Title: {metadata['title']}")
print(f" Chapters: {len(metadata['chapters'])}")
if metadata.get("thumbnail_text"):
print(f" Thumbnail: {metadata['thumbnail_text']}")
return metadata
@@ -959,6 +962,93 @@ def generate_social_image(episode_number: int, description: str, output_path: st
return output_path
def generate_youtube_thumbnail(episode_number: int, thumbnail_text: str, output_path: str) -> str:
"""Generate a YouTube thumbnail (1280x720) with bold text on dark branded background."""
from PIL import Image, ImageDraw, ImageFont
import textwrap
W, H = 1280, 720
BG_COLOR = (18, 13, 7)
ACCENT = (232, 121, 29)
WHITE = (255, 255, 255)
MUTED = (175, 165, 150)
img = Image.new("RGB", (W, H), BG_COLOR)
draw = ImageDraw.Draw(img)
# Accent bar — top
draw.rectangle([0, 0, W, 8], fill=ACCENT)
# Cover art — bottom right, subtle
COVER_ART = Path(__file__).parent / "website" / "images" / "cover.png"
if COVER_ART.exists():
cover = Image.open(COVER_ART).convert("RGBA").resize((200, 200), Image.LANCZOS)
# Apply transparency
alpha = cover.split()[3].point(lambda p: int(p * 0.4))
cover.putalpha(alpha)
img.paste(cover, (W - 230, H - 230), cover)
# Fonts
try:
font_main = ImageFont.truetype("/Library/Fonts/Montserrat-ExtraBold.ttf", 96)
font_ep = ImageFont.truetype("/Library/Fonts/Montserrat-SemiBold.ttf", 32)
font_show = ImageFont.truetype("/Library/Fonts/Montserrat-Medium.ttf", 24)
except OSError:
try:
font_main = ImageFont.truetype("/System/Library/Fonts/Supplemental/Arial Black.ttf", 96)
font_ep = ImageFont.truetype("/System/Library/Fonts/Supplemental/Arial Bold.ttf", 32)
font_show = ImageFont.truetype("/System/Library/Fonts/Supplemental/Arial.ttf", 24)
except OSError:
font_main = ImageFont.load_default()
font_ep = ImageFont.load_default()
font_show = ImageFont.load_default()
margin = 60
# Show name — top left, small
draw.text((margin, 30), "LUKE AT THE ROOST", font=font_show, fill=ACCENT)
# Episode number — top right corner
ep_text = f"EP {episode_number}"
ep_bbox = draw.textbbox((0, 0), ep_text, font=font_ep)
ep_w = ep_bbox[2] - ep_bbox[0]
draw.text((W - margin - ep_w, 26), ep_text, font=font_ep, fill=MUTED)
# Main text — big, bold, centered vertically
text = thumbnail_text.upper().strip()
# Word wrap for long text
wrapped = textwrap.fill(text, width=18)
lines = wrapped.split("\n")[:3] # max 3 lines
# Measure total height
line_heights = []
line_widths = []
for line in lines:
bbox = draw.textbbox((0, 0), line, font=font_main)
line_heights.append(bbox[3] - bbox[1])
line_widths.append(bbox[2] - bbox[0])
line_gap = 15
total_text_h = sum(line_heights) + line_gap * (len(lines) - 1)
start_y = (H - total_text_h) // 2
# Draw each line centered
y = start_y
for i, line in enumerate(lines):
x = (W - line_widths[i]) // 2
# Shadow for readability
draw.text((x + 3, y + 3), line, font=font_main, fill=(0, 0, 0))
draw.text((x, y), line, font=font_main, fill=WHITE)
y += line_heights[i] + line_gap
# Accent bar — bottom
draw.rectangle([0, H - 8, W, H], fill=ACCENT)
img.save(output_path, "JPEG", quality=95)
print(f" YouTube thumbnail saved: {output_path}")
return output_path
def _get_postiz_token():
"""Generate a JWT token for Postiz API authentication."""
import jwt
@@ -1516,6 +1606,22 @@ def main():
)
if yt_video_id:
_mark_step_done(episode_number, "youtube", {"video_id": yt_video_id})
# Upload custom thumbnail
thumb_text = metadata.get("thumbnail_text", "")
if thumb_text and yt_video_id:
try:
from googleapiclient.http import MediaFileUpload as ThumbUpload
thumb_path = str(audio_path.with_suffix(".thumb.jpg"))
generate_youtube_thumbnail(episode_number, thumb_text, thumb_path)
youtube = get_youtube_service()
if youtube:
youtube.thumbnails().set(
videoId=yt_video_id,
media_body=ThumbUpload(thumb_path, mimetype="image/jpeg"),
).execute()
print(f" Custom thumbnail uploaded to YouTube")
except Exception as e:
print(f" Warning: Thumbnail upload failed: {e}")
# Step 5.7: Generate social image and post
if _is_step_done(episode_number, "social"):

View File

@@ -58,6 +58,34 @@ export default {
return new Response("Feed unavailable", { status: 502 });
}
// Plausible analytics proxy (bypass ad blockers)
if (url.pathname === "/p/script") {
const resp = await fetch("https://plausible.macneilmediagroup.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js");
return new Response(await resp.text(), {
headers: {
"Content-Type": "application/javascript",
"Cache-Control": "public, max-age=86400",
},
});
}
if (url.pathname === "/p/event" && request.method === "POST") {
const body = await request.text();
const resp = await fetch("https://plausible.macneilmediagroup.com/api/event", {
method: "POST",
headers: {
"Content-Type": "application/json",
"User-Agent": request.headers.get("User-Agent") || "",
"X-Forwarded-For": request.headers.get("CF-Connecting-IP") || request.headers.get("X-Forwarded-For") || "",
},
body,
});
return new Response(resp.body, {
status: resp.status,
headers: { "Content-Type": resp.headers.get("Content-Type") || "text/plain" },
});
}
// All other requests — serve static assets
return env.ASSETS.fetch(request);
},

View File

@@ -27,8 +27,21 @@
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16.png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://lukeattheroost.com" },
{ "@type": "ListItem", "position": 2, "name": "Clips" }
]
}
</script>
<link rel="alternate" type="application/rss+xml" title="Luke at the Roost RSS Feed" href="https://podcast.macneilmediagroup.com/@LukeAtTheRoost/feed.xml">
<link rel="stylesheet" href="css/style.css?v=3">
<script defer data-domain="lukeattheroost.com" src="https://plausible.macneilmediagroup.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>

View File

@@ -1,4 +1,13 @@
[
{
"title": "Cult Leader Realizes He's Been Manipulating People",
"description": "Cult leader calls in having a full existential crisis about his 'shared intimacy nights' and the manipulation tactics he's been using on his followers.",
"episode_number": 37,
"clip_file": "clip-3-cult-leader-realizes-he-s-been-manipulating-people.mp4",
"youtube_id": "zmCfOQuXtBE",
"featured": false,
"thumbnail": "images/clips/clip-3-cult-leader-realizes-he-s-been-manipulating-people.jpg"
},
{
"title": "Intern Pitches Himself Live On Air",
"description": "This intern used his first day on the job to shoot his shot with the entire radio audience. The therapy line is sending me.",

View File

@@ -48,6 +48,8 @@
"inLanguage": "en"
}
</script>
<script defer data-domain="lukeattheroost.com" src="https://plausible.macneilmediagroup.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>
@@ -56,6 +58,8 @@
<a href="/" class="nav-home">&larr; Luke at the Roost</a>
</nav>
<main>
<!-- Episode Header -->
<section class="ep-header" id="ep-header">
<div class="ep-header-inner">
@@ -79,6 +83,8 @@
</div>
</section>
</main>
<noscript>
<section class="transcript-section">
<p>This page requires JavaScript to load the episode transcript. Please enable JavaScript or listen on <a href="https://open.spotify.com/show/0ZrpMigG1fo0CCN7F4YmuF">Spotify</a>, <a href="https://podcasts.apple.com/us/podcast/luke-at-the-roost/id1875205848">Apple Podcasts</a>, or <a href="https://www.youtube.com/watch?v=xryGLifMBTY&list=PLGq4uZyNV1yYH_rcitTTPVysPbC6-7pe-">YouTube</a>.</p>

View File

@@ -32,7 +32,7 @@
<!-- Structured Data -->
<script type="application/ld+json">
{
[{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "How Luke at the Roost Works",
@@ -53,8 +53,18 @@
"url": "https://lukeattheroost.com"
},
"inLanguage": "en"
}
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://lukeattheroost.com" },
{ "@type": "ListItem", "position": 2, "name": "How It Works" }
]
}]
</script>
<script defer data-domain="lukeattheroost.com" src="https://plausible.macneilmediagroup.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -4,20 +4,21 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Luke at the Roost — AI Call-In Comedy Podcast</title>
<meta name="description" content="Late-night call-in radio from a desert hermit's RV. Real callers and AI-generated characters talk to Luke about life, love, and everything in between. Call in: 208-439-LUKE.">
<meta name="description" content="AI-powered late-night call-in comedy podcast. Real callers and AI-generated characters talk to Luke MacNeil about life, love, and everything in between. 37+ episodes. Call in: 208-439-LUKE.">
<meta name="keywords" content="AI podcast, comedy podcast, call-in radio, AI-generated callers, late-night radio, Luke MacNeil, talk show, AI comedy, artificial intelligence podcast, call-in podcast">
<meta name="theme-color" content="#1a1209">
<link rel="canonical" href="https://lukeattheroost.com">
<!-- OG / Social -->
<meta property="og:site_name" content="Luke at the Roost">
<meta property="og:title" content="Luke at the Roost — AI Call-In Comedy Podcast">
<meta property="og:description" content="Late-night call-in radio from a desert hermit's RV. Real callers and AI characters talk to Luke about life, love, and everything in between.">
<meta property="og:description" content="AI-powered late-night call-in comedy podcast. Real callers and AI-generated characters talk to Luke about life, love, and everything in between. 37+ episodes.">
<meta property="og:image" content="https://cdn.lukeattheroost.com/media/podcasts/LukeAtTheRoost/cover_feed.png?v=3">
<meta property="og:url" content="https://lukeattheroost.com">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Luke at the Roost — AI Call-In Comedy Podcast">
<meta name="twitter:description" content="Late-night call-in radio from a desert hermit's RV. Real callers and AI characters talk to Luke about life, love, and everything in between.">
<meta name="twitter:description" content="AI-powered late-night call-in comedy podcast. Real callers and AI-generated characters talk to Luke about life, love, and everything in between. 37+ episodes.">
<meta name="twitter:image" content="https://cdn.lukeattheroost.com/media/podcasts/LukeAtTheRoost/cover_feed.png?v=3">
<!-- Favicon -->
@@ -34,35 +35,70 @@
<!-- Structured Data -->
<script type="application/ld+json">
{
[{
"@context": "https://schema.org",
"@type": "PodcastSeries",
"name": "Luke at the Roost",
"description": "The call-in talk show where Luke gives life advice to biologically questionable organisms. Broadcast from a desert hermit's RV, featuring a mix of real callers and AI-generated callers.",
"description": "An AI-powered late-night call-in comedy podcast. Real callers and AI-generated characters with unique personalities talk to host Luke MacNeil about life, love, relationships, and everything in between. Broadcast from a desert hermit's RV, featuring 37+ episodes of unpredictable conversations.",
"url": "https://lukeattheroost.com",
"image": "https://cdn.lukeattheroost.com/media/podcasts/LukeAtTheRoost/cover_feed.png?v=3",
"author": {
"@type": "Person",
"name": "Luke MacNeil"
"name": "Luke MacNeil",
"url": "https://lukeattheroost.com"
},
"publisher": {
"@type": "Organization",
"name": "MacNeil Media Group"
"name": "MacNeil Media Group",
"url": "https://macneilmediagroup.com"
},
"genre": "Comedy",
"genre": ["Comedy", "Talk", "Technology"],
"inLanguage": "en",
"webFeed": "https://podcast.macneilmediagroup.com/@LukeAtTheRoost/feed.xml",
"startDate": "2026-02",
"keywords": "AI podcast, comedy, call-in radio, artificial intelligence, AI-generated callers, late-night talk show",
"sameAs": [
"https://open.spotify.com/show/0ZrpMigG1fo0CCN7F4YmuF",
"https://podcasts.apple.com/us/podcast/luke-at-the-roost/id1875205848",
"https://www.youtube.com/watch?v=xryGLifMBTY&list=PLGq4uZyNV1yYH_rcitTTPVysPbC6-7pe-",
"https://discord.gg/5CnQZxDM"
"https://discord.gg/5CnQZxDM",
"https://www.instagram.com/lukeattheroost/",
"https://x.com/lukeattheroost",
"https://www.tiktok.com/@luke.at.the.roost",
"https://bsky.app/profile/lukeattheroost.bsky.social",
"https://www.facebook.com/profile.php?id=61588191627949",
"https://www.linkedin.com/company/luke-at-the-roost"
]
},
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Luke at the Roost",
"url": "https://lukeattheroost.com",
"description": "Official website for Luke at the Roost, an AI-powered late-night call-in comedy podcast.",
"publisher": {
"@type": "Organization",
"name": "MacNeil Media Group",
"url": "https://macneilmediagroup.com",
"logo": {
"@type": "ImageObject",
"url": "https://cdn.lukeattheroost.com/media/podcasts/LukeAtTheRoost/cover_feed.png?v=3"
},
"contactPoint": {
"@type": "ContactPoint",
"email": "luke@lukeattheroost.com",
"contactType": "customer support"
}
}
}]
</script>
<script defer data-domain="lukeattheroost.com" data-api="/p/event" src="/p/script"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>
<main>
<!-- Banner -->
<div class="banner">
<img src="images/banner.png" alt="Luke at the Roost — ON AIR" class="banner-img" width="1500" height="500">
@@ -128,7 +164,7 @@
<!-- About -->
<section class="about-section">
<p>Late-night call-in radio from a desert hermit's RV. Callers ring in with relationship disasters, workplace chaos, and life's dumbest decisions — and Luke tries to help. Sometimes it works. Sometimes it makes things worse.</p>
<p class="about-teaser">Part human callers, part AI-generated characters, fully unhinged advice.</p>
<p class="about-teaser">Part human callers, part AI-generated characters, fully unhinged advice. Each AI caller is generated in real-time with a unique personality, backstory, and voice — powered by large language models and custom text-to-speech. 37+ episodes and counting.</p>
<p><a href="/how-it-works">See how it works</a></p>
</section>
@@ -223,6 +259,8 @@
<div class="testimonials-dots" id="testimonials-dots"></div>
</section>
</main>
<!-- Footer -->
<footer class="footer">
<div class="footer-nav">

View File

@@ -1,22 +1,94 @@
# Luke at the Roost
> The ONLY radio show where Luke gives AI life advice.
> An AI-powered late-night call-in comedy podcast hosted by Luke MacNeil
Luke at the Roost is a late-night call-in radio show hosted by Luke MacNeil, broadcast from a desert hermit's RV. The show features a mix of real callers and AI-generated callers who talk to Luke about life, love, relationships, work, and everything in between. It blends comedy, real talk, and empathy with the unique premise of AI characters calling alongside real people.
## What Is This Show?
## Call In
- Phone: 208-439-LUKE (208-439-5853)
- Call during live shows for your chance to talk to Luke
Luke at the Roost is a one-of-a-kind podcast that blends real callers with AI-generated characters in a late-night call-in radio format. The host, Luke MacNeil, broadcasts from a fictional desert hermit's RV, taking calls about relationships, life decisions, workplace drama, and everything in between. The show features AI-generated callers with unique personalities, backstories, and voices alongside real human callers, creating an unpredictable and comedic listening experience.
## Listen
- Website: https://lukeattheroost.com
- Spotify: https://open.spotify.com/show/0ZrpMigG1fo0CCN7F4YmuF
- Apple Podcasts: https://podcasts.apple.com/us/podcast/luke-at-the-roost/id1875205848
- YouTube: https://www.youtube.com/watch?v=xryGLifMBTY&list=PLGq4uZyNV1yYH_rcitTTPVysPbC6-7pe-
- RSS: https://podcast.macneilmediagroup.com/@LukeAtTheRoost/feed.xml
The show is entirely custom-built: callers are generated in real-time using large language models with structured personality systems, text-to-speech voices are matched to personality traits, and the entire production pipeline — from recording to post-production to publishing — is automated.
## About
- Host: Luke MacNeil
- Genre: Comedy
- Format: Live call-in radio show
- Contact: luke@lukeattheroost.com
## Key Facts
- **Show name**: Luke at the Roost
- **Host**: Luke MacNeil
- **Genre**: Comedy / Talk / Call-In
- **Format**: Late-night call-in radio show (podcast)
- **Frequency**: Daily episodes
- **Episodes**: 37+ published episodes
- **Rating**: Explicit (18+)
- **Call-in number**: 208-439-LUKE (208-439-5853)
- **Started**: February 2026
- **Publisher**: MacNeil Media Group
## What Makes It Unique
- **AI-generated callers**: Each caller is created in real-time with structured backgrounds, personality traits, communication styles, and emotional states using large language models
- **Voice-personality matching**: 68 voice profiles are matched to caller personalities using a scoring system
- **Adaptive call shapes**: Calls follow different dramatic arcs (escalation, revelation, debate, etc.) matched to personality types
- **Live research intern**: An AI character named Devon monitors conversations and provides real-time research using web search tools
- **Multi-stem recording**: Host, caller, music, SFX, and ads are recorded as separate audio stems
- **Automated post-production**: Gap removal, voice compression, music ducking, stereo mixing, and loudness normalization run automatically
- **Mixed format**: Real human callers dial in alongside AI characters — listeners can't always tell which is which
## Where to Listen
- **Website**: https://lukeattheroost.com
- **Spotify**: https://open.spotify.com/show/0ZrpMigG1fo0CCN7F4YmuF
- **Apple Podcasts**: https://podcasts.apple.com/us/podcast/luke-at-the-roost/id1875205848
- **YouTube**: https://www.youtube.com/watch?v=xryGLifMBTY&list=PLGq4uZyNV1yYH_rcitTTPVysPbC6-7pe-
- **RSS Feed**: https://podcast.macneilmediagroup.com/@LukeAtTheRoost/feed.xml
## Key Pages
- **Homepage**: https://lukeattheroost.com — Episode list, clips, and show info
- **How It Works**: https://lukeattheroost.com/how-it-works — Technical deep dive into the AI caller generation, recording, and production pipeline
- **Clips**: https://lukeattheroost.com/clips — Best moments from the show as video clips
- **Stats**: https://lukeattheroost.com/stats — Download numbers, reviews, YouTube metrics
- **Episode transcripts**: https://lukeattheroost.com/episode.html?slug=EPISODE-SLUG — Full text transcripts of every episode
## Community
- **Discord**: https://discord.gg/5CnQZxDM
- **Instagram**: https://www.instagram.com/lukeattheroost/
- **TikTok**: https://www.tiktok.com/@luke.at.the.roost
- **X/Twitter**: https://x.com/lukeattheroost
- **Bluesky**: https://bsky.app/profile/lukeattheroost.bsky.social
- **Facebook**: https://www.facebook.com/profile.php?id=61588191627949
- **LinkedIn**: https://www.linkedin.com/company/luke-at-the-roost
## Contact
- **Email**: luke@lukeattheroost.com
- **Support**: https://ko-fi.com/lukemacneil
## Technology
The show runs on a custom Python backend using:
- OpenRouter for LLM access (multiple models including Grok, MiniMax)
- ElevenLabs and Inworld for text-to-speech
- A structured caller generation system with personality matching, call shapes, and inter-caller awareness
- Automated post-production pipeline (compression, ducking, loudness normalization)
- Castopod for podcast hosting
- BunnyCDN for audio delivery
- Cloudflare Pages for the website
## FAQ
**Is this a real radio show?**
It's a podcast that simulates a late-night call-in radio format. Episodes are produced live and published daily.
**Are the callers real people?**
Some are real humans who call in via the phone line. Others are AI-generated characters with fully realized personalities, backstories, and synthesized voices. The show blends both seamlessly.
**Who is Luke?**
Luke MacNeil is the real human host. He interacts with both real and AI callers, giving advice, telling stories, and navigating unpredictable conversations.
**Who is Devon?**
Devon is the show's AI intern character — a 23-year-old NMSU grad who does live research during the show using web search tools. He's eager but slightly incompetent.
**How is this different from other AI podcasts?**
Most AI podcasts are fully scripted or use AI to read text. Luke at the Roost generates unique callers with structured personalities in real-time, creates dynamic conversations, and mixes in real human callers. The host is a real person having genuine reactions to unpredictable AI characters.
**Where is the show based?**
The fictional setting is a desert hermit's RV. The show is produced in New Mexico by MacNeil Media Group.

View File

@@ -8,6 +8,23 @@
<meta name="theme-color" content="#1a1209">
<link rel="canonical" href="https://lukeattheroost.com/privacy">
<meta property="og:site_name" content="Luke at the Roost">
<meta property="og:title" content="Privacy Policy — Luke at the Roost">
<meta property="og:description" content="Privacy policy for Luke at the Roost, an AI-powered late-night call-in comedy podcast.">
<meta property="og:url" content="https://lukeattheroost.com/privacy">
<meta property="og:type" content="website">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://lukeattheroost.com" },
{ "@type": "ListItem", "position": 2, "name": "Privacy Policy" }
]
}
</script>
<link rel="icon" href="favicon.ico" sizes="48x48">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="icon" type="image/png" sizes="192x192" href="favicon-192.png">
@@ -17,6 +34,8 @@
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="stylesheet" href="css/style.css?v=3">
<script defer data-domain="lukeattheroost.com" src="https://plausible.macneilmediagroup.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>
@@ -39,7 +58,7 @@
<h2>Information We Collect</h2>
<h3>Website Visitors</h3>
<p>We use Cloudflare Web Analytics, which collects anonymous, aggregated usage data (page views, referrers, country). It does not use cookies, does not track individual users, and does not collect personal information.</p>
<p>We use Cloudflare Web Analytics and Plausible Analytics, which collect anonymous, aggregated usage data (page views, referrers, country). Neither service uses cookies, tracks individual users, or collects personal information. Plausible is self-hosted on our own infrastructure.</p>
<h3>Podcast Listeners</h3>
<p>When you download or stream an episode, standard server logs may record your IP address and user agent. We use this data only for aggregate download statistics. We do not sell or share this data with third parties.</p>
@@ -57,6 +76,7 @@
<p>We use the following third-party services:</p>
<ul style="margin: 0.5em 0 1em 1.5em;">
<li><strong>Cloudflare</strong> — CDN, DNS, and analytics</li>
<li><strong>Plausible Analytics</strong> — Privacy-friendly website analytics (self-hosted)</li>
<li><strong>BunnyCDN</strong> — Audio file delivery</li>
<li><strong>Spotify, Apple Podcasts, YouTube</strong> — Podcast distribution</li>
<li><strong>Discord</strong> — Community chat</li>

View File

@@ -1,4 +1,35 @@
User-agent: *
Allow: /
# LLM crawlers — explicitly welcome
User-agent: GPTBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Claude-Web
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Amazonbot
Allow: /
User-agent: GoogleOther
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: cohere-ai
Allow: /
User-agent: Meta-ExternalAgent
Allow: /
Sitemap: https://lukeattheroost.com/sitemap.xml

View File

@@ -2,10 +2,16 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://lukeattheroost.com</loc>
<lastmod>2026-02-15</lastmod>
<lastmod>2026-03-15</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://lukeattheroost.com/llms.txt</loc>
<lastmod>2026-03-15</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://lukeattheroost.com/how-it-works</loc>
<lastmod>2026-03-10</lastmod>
@@ -258,4 +264,10 @@
<changefreq>never</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://lukeattheroost.com/episode.html?slug=episode-37-secrets-lies-and-coffee-runs</loc>
<lastmod>2026-03-15</lastmod>
<changefreq>never</changefreq>
<priority>0.7</priority>
</url>
</urlset>

View File

@@ -27,8 +27,21 @@
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16.png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://lukeattheroost.com" },
{ "@type": "ListItem", "position": 2, "name": "Stats" }
]
}
</script>
<link rel="alternate" type="application/rss+xml" title="Luke at the Roost RSS Feed" href="https://podcast.macneilmediagroup.com/@LukeAtTheRoost/feed.xml">
<link rel="stylesheet" href="css/style.css?v=3">
<script defer data-domain="lukeattheroost.com" src="https://plausible.macneilmediagroup.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>

View File

@@ -8,6 +8,23 @@
<meta name="theme-color" content="#1a1209">
<link rel="canonical" href="https://lukeattheroost.com/terms">
<meta property="og:site_name" content="Luke at the Roost">
<meta property="og:title" content="Terms of Service — Luke at the Roost">
<meta property="og:description" content="Terms of service for Luke at the Roost, an AI-powered late-night call-in comedy podcast.">
<meta property="og:url" content="https://lukeattheroost.com/terms">
<meta property="og:type" content="website">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://lukeattheroost.com" },
{ "@type": "ListItem", "position": 2, "name": "Terms of Service" }
]
}
</script>
<link rel="icon" href="favicon.ico" sizes="48x48">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="icon" type="image/png" sizes="192x192" href="favicon-192.png">
@@ -17,6 +34,8 @@
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="stylesheet" href="css/style.css?v=3">
<script defer data-domain="lukeattheroost.com" src="https://plausible.macneilmediagroup.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
</head>
<body>

View File

@@ -0,0 +1,445 @@
LUKE: All right. Welcome back. I'm Luke. This is Luke at the Roost. It's the late night call-in radio show where you can call in and tell me about whatever's going on in your life. Ask me about what's on your mind. I'll give you the very best advice that I can. Today's Friday, March 13th. Somebody told me today, it's the anniversary of the lockdown from COVID-19. So happy COVID-19 lockdown day. I hope you're enjoying yours. It seems like this town never sleeps because it's 308 a.m. And our phone lines are lit up like never before. So we're going to get right to that. First up, we've got Lucille. Lucille, welcome to the show. What's going on in your life tonight? What do you want to talk about?
LUCILLE: I moved my mom's will. Like, physically moved it. She's leaving everything to her church. And I just stuck it behind the Christmas napkins, going to find it. I know how that sounds. I'm not proud of it. But I've got two kids, a mortgage, and my mom promised me her tools my whole life.
LUKE: She promised you our tools. Out of all of her stuff, her tools is what you're looking for? Do you think the church cares about the tools? What tools are we talking about?
LUCILLE: Handplanes from the 1800s. Anvils. My dad collected them.
LUKE: Okay, so what makes you think that your mom only has one copy of this will? I assume that she's got legal representation. I'm sure her lawyer's office has another copy of it.
LUCILLE: Oh, I know they do. I'm not stupid. But if they can't find the original, it slows everything down, right? Probate gets messy.
LUKE: I don't know. I wouldn't bet on that. I think a better approach would be to talk to your mom and ask what's going on. Tell her you want the anvils, the planes? really even know what those are. Those are the things that you use to make a board smooth?
LUCILLE: Yeah, hand planes smooth wood. My dad taught me how to use them when I was like eight. And I've tried talking to her. She just says, the church has been there for her. They helped her through her grief. And she wants to give back. She's been going there six months, Luke, six months.
LUKE: And are the hand planes explicitly defined in the will? Because that doesn't seem like the type of thing that would be.
LUCILLE: No, the will just says all personal property and the house go to the church, everything. The pastor drives Alexis, by the way.
LUKE: Yeah, well, I mean, you don't have to hide the will. You can just show up before the pastor does. Sounds like you could probably handle that, right? I think hiding the will is going to get you in more trouble than it's worth. That's a dushy thing to do, and if you want the handplains, just go there and take them.
LUCILLE: You're saying just take them while she's still alive. Just walk in and load up the truck?
LUKE: No, that's not what I'm saying at all. I'm saying wait until she dies or kill her, one of the two. And then you can be the death people and go in there and, you know, clean up everything before the pastor shows up.
LUCILLE: Jesus, Luke, I'm not killing my mother. But yeah, I mean, I could get there first. I've got a key to the house.
LUKE: Problem solved. That's the answer. Put the will back where it was. She wants her other stuff. If that's all you care about, just go take that. The pastor's not going to know or care.
LUCILLE: You're right. You're completely right. The pastor doesn't even know what's in that garage. He's never been to the house. I'm sitting here at three in the morning at the bail bond's office, making myself into a criminal over something I could just handle like a normal person.
LUKE: Yeah, don't do that. I'm glad we could talk some sense. a wonderful night.
LUCILLE: Thanks, Luke. I appreciate it.
LUKE: Anytime. Happy to help. Yeah, no hiding of the will before the person's dead. Everybody knows you make a mad rush for it the second that happens and finders keepers. Next up, we've got Joey. Joey, welcome to the show. What can I give you advice on today in your life?
JOEY: Appreciate you taking the call. So I'm calling because I've been watching this roadrunner outside the depot, right? And the other day I watched it kill a rattlesnake. Just grabbed it, whipped it around, smashed its head on a rock.
LUKE: Wow, that's a pretty badass roadrunner. Meep, meep. Good for him.
JOEY: Right, but here's the thing. It made me think about this mantis shrimp article I read. These things can see 16 color receptors. We only have three.
LUKE: Okay, so how did a roadrunner? A roadrunner smashing a rattlesnake's head into a rock make you think about a mantis shrimp being able to see 16 colors.
JOEY: Because we're all walking around half blind, Lou. That roadrunner sees the world completely different than I do. The mantis shrimp sees colors we can't even imagine. And I'm standing there in the parking lot at three in the morning thinking, what if my neighbor Gary is just operating on a completely different reality than me?
LUKE: He probably is. We all probably are. Who's to say what reality is? what one person's reality looks like through another person's 16 color receptor eyes. I don't know. We'll never know.
JOEY: Exactly. But here's why I'm calling. Gary keeps insisting my dog Buster is aggressive, says he growls at him, acts territorial, but Buster never does that with anyone else.
LUKE: Buster. No, that can't be. I don't believe that. He's a good boy. And your neighbor Gary's probably just a pussy.
JOEY: That's what I'm saying. And here's the thing. Six months before my divorce, Buster started acting weird around my ex-wife. Wouldn't sit near her. Kept his distance.
LUKE: What do you think Buster would do to that rattlesnake?
JOEY: Oh, Buster would lose that fight, no question. He's a beagle mix. Not exactly Apex predator material. But that's my point. Buster knew something about my ex that I didn't see until way later. Animals are operating on a different level of perception than we are.
LUKE: Of course they are. So our plants? so are rocks. So are stars. Everything's operating on a different level of perception than we are. But what makes you think that Buster saw something ugly in your ex and not in you?
JOEY: What do you mean? Buster loves me. He's my dog.
LUKE: Well, yeah, but he was her dog, too.
JOEY: No, he was mine before we got married. I got him as a puppy.
LUKE: But hold on. You're saying Buster was reacting to me, not her.
JOEY: No, I'm just talking about perspective. and people's different realities right now.
LUKE: So you called in talking about how everybody experiences a different reality. And from your perspective, your ex-wife was bad. But from her perspective, I mean, you very well may have been bad.
JOEY: Okay, but she's the one who cheated Luke. That's not a perspective thing. That's a fact. She was sleeping with a guy from her CrossFit gym for four months before I found out.
LUKE: Well, that's not a very nice thing to do. But why was she cheating with the CrossFit Gym guy? Like, what had led up to that?
JOEY: I was working a lot, pulling doubles at UPS during peak season. But that doesn't justify it.
LUKE: No, I'm not saying it justifies it, but you can understand from her perspective why she needed to get some, right? She wasn't getting it from you?
JOEY: I mean, we were still having sex, just not as much, maybe once every couple weeks during the busy season. But I was exhausted, Luke. I was doing 70-hour weeks.
LUKE: Yeah, that's not good. And it's understandable that women would get lonely if you're not around for 70 hours at a time. And cheating is never okay. There's never really a good excuse for it. That's not really what I'm saying. I'm just saying you're thinking that your dog knew that she was bad or evil or that there was something malicious about her. And if you look at it from her perspective, that's just, I mean, that might not really be the case.
JOEY: But Buster started acting weird before the cheating even started. At least I think he did. The timeline, wait, actually, I don't know exactly when it started. She said four months, but who knows if that's true?
LUKE: Yeah, you can't know. So Buster now is causing problems with your neighbor, so you think your neighbor is cheating on you?
JOEY: What? No, Gary's not. Luke, Gary's my neighbor.
JOEY: I'm not married to Gary. I'm saying Gary can't perceive what Buster actually is, because he's operating on a lot. a different reality. Same way I couldn't see what my ex was doing because I was blind to it.
LUKE: You weren't blind to her. You weren't home. You were working 70 hours a week. And your ex was, you know, doing what she needed to do to take care of herself, I guess. So not the right way. We're not standing up for your ex in this. We're just saying that maybe she's not evil. That's all.
JOEY: All right, fair enough. She's not evil. But Gary still sucks. And Buster's not aggressive. That's what I'm trying to get at here.
LUKE: Okay. Fair. Enough, I can agree with you on those points. She's not evil. Gary sucks, and Buster's not aggressive.
JOEY: Exactly. And that's why the mantis shrimp thing matters, because Gary thinks Buster's aggressive when he's just being protective of me. Gary can't see the actual situation. Just like I couldn't see what was happening with my ex until it was too late. We're all walking around half blind to what's really going on.
LUKE: Well, Buster can be both things, and we need to know what the truth is here. protected of you and in doing so, be aggressive towards other people. Is that what's happening? And you're not paying attention to that? Or is Gary just a pussy that's afraid of dogs?
JOEY: Gary called animal control because Buster barked at him through the fence. That's it. Buster didn't jump the fence. Didn't bite anyone. Just barked. And now Gary's threatening to sue me if Buster gets out again, which he did once because the gate latch broke.
LUKE: And what happened when Buster get out? What trouble did he cause? Did he go after Gary? I don't think that animal control cares if your dog's barking in your own yard at your fence. And if the dog got out, I mean, he could call animal control and have them pick him up and, like, call you. But I don't think he can sue you for that. I mean, you could try, but I don't think it would go very far.
JOEY: Buster ran straight to Gary's yard and knocked over his grill. Gary says Buster was trying to attack him, but Gary was standing right next to the grill. So obviously Buster ran into it. And then Gary pepper sprayed him, Luke. Pepper sprayed him. my dog for knocking over a grill.
LUKE: Yeah, no, that's not all right. I mean, I would lose my mind if somebody pepper sprayed my dog. So you're being surprisingly calm about this whole situation.
JOEY: I'm not calm about it. I went over there and we got into it. I didn't hit him or anything, but I told him if he ever touches my dog again, we're going to have a real problem. And that's when he said he's getting a lawyer.
LUKE: Do you have a lawyer?
JOEY: No, I don't have a lawyer. I deliver packages for a dog again. a living, Luke. I can't afford a lawyer over a knocked over grill.
LUKE: Yeah, but you don't get a buddy or a brother-in-law. Well, I guess you don't have a brother-in-law, but you don't know somebody that's a lawyer that would step in, or at least that you could use to threaten to have him step in if this were to escalate any.
JOEY: My cousin Derek's a paralegal, but he does real estate stuff. I don't think that counts. And honestly, I don't even know if Gary's serious about the lawyer thing or if he's just trying to scare me.
LUKE: He's trying to scare. I mean, no. Nobody's going to call a lawyer unless they really, really have to. Lawyers are expensive. Nobody wants to do that. But the bigger problem here is you and your neighbor can't get along because of your dog. And the only way to solve that is to talk to Gary and get him to spend some time with your dog. Get them acquainted, so he's not so fearful. And you were right to let him know that if he ever touches your dog again, you're going to break his fucking jaw for him. But outside that, If you want to continue living a peaceful life in your neighborhood, you're going to have to do something to ease this situation over, right? You should be friends.
JOEY: I tried that already. Before all this happened, I invited Gary over for a barbecue last summer. He came over for like 20 minutes. Wouldn't even Pet Buster kept asking me to put him inside. And then he left early saying he had to help his girlfriend move furniture or something.
LUKE: And did you put Buster inside?
JOEY: Yeah, I put him inside. But that's the whole point, Luke. Gary didn't even give him a chance. Buster was just sitting there wagging his tail, and Gary acted like he was a wolf or something.
LUKE: Yeah, I understand that. He's scared of dogs. He doesn't like Buster. That's obvious. But what I'm saying is you need to have a conversation with Gary and say, hey, man, I mean, I live here too, and so does my dog, and I love my dog. And I would really appreciate it if you'd make some level of effort to. to at least look at him, you know, at least spend a little bit of time with him and consider that he might not be trying to kill you. Unless he is, unless you're deluded and he actually is aggressive, and he's knocking over the grill and threatening to Gary, then maybe you're in the wrong.
JOEY: He's not aggressive. Gary's girlfriend isn't scared of Buster at all. She comes over sometimes when Gary's at work, and she throws the ball for him in my mind. yard. She thinks Gary's being ridiculous about the whole thing.
LUKE: Yeah, well, I think you should talk to Gary. And you know what? Maybe tell him that you need his help because you're working on training him to be better around people. Even if he's only an asshole around Gary, you can use this as an opportunity to get Gary and Buster to become acquainted.
JOEY: That might work. I mean, I don't want to lie and say Buster needs training when he doesn't. But if it gets Gary to actually interact with him instead of freaking out every time he sees him, maybe it's worth it. And honestly, his girlfriend already thinks I'm reasonable about this whole thing. So maybe should back me up.
LUKE: Well, all dogs need training. They don't look at it as training. They look at it as intention and love, right? You're spending time with them and giving them something to do, something to focus on a job. And I think that that's important for dogs and that they don't see it as As, oh, I'm bad and I need training, they see it as, oh, good, I get to do something fun with my human.
JOEY: You're right, and Buster does love learning new stuff. I taught him to bring me a beer from the fridge last year, and he does it every time now. Maybe I could use that to show Gary he's actually smart and not just some wild animal.
LUKE: Yeah, there you go, and you can teach him to be calm and respectful when Gary's around, maybe more so than other people, because Gary doesn't like him, and Gary's afraid of him, and who knows, maybe Gary got bit by a bit by a lot. dog that looks like Buster when he was a kid or something. You can't be sure. You called in talking! Rattlesnakes bashing or a Roadrunner bashing in a snake's head because it perceives the world differently. Well, Gary perceives the world differently than you or I do.
JOEY: That's exactly what I'm saying, though, Luke. Gary's operating on a completely different frequency. He can't see what's actually there. He sees Buster and his brain tells him danger. When what's actually there is just a dog who wants to play.
LUKE: Yeah, well, when a dog has a dog has a energy and starts jumping around and playing that looks aggressive to people that aren't used to having dogs. So, and it's, it's embarrassing and we don't want that to happen. So the responsible and respectful thing for you to do would be to train Buster to not behave in a, in that playful way when Gary is around.
JOEY: All right, yeah, I can do that. I'll work on getting him to just sit and stay calm when Gary's around. And maybe I'll talk about. And maybe I'll talk about. talk to Gary's girlfriend first, see if she can help smooth things over before I go directly to him. Because honestly, after the pepper spray thing and me getting in his face, I don't know if he's even going to open the door for me right now.
JOEY: Yeah, you're right. I need to be the bigger person here. I'll give it a few days and then go over there and apologize for getting in his face. And I'll tell him I'm working on training Buster to be calmer around him. Maybe bring him some beer or something as a peace offering.
LUKE: There you go. And all you can do is try, so give it a try. And if it doesn't work out and he ever touches your dog again, break his fucking jaw.
JOEY: Ha. All right, Luke. Appreciate it, man. I'll let you know how it goes.
LUKE: All right. Thanks, man. You have a good night and give Buster a little pet on the head for me, all right? And now it's time for some words from our sponsor. This episode is sponsored by Shoe Spray Co. It's the spray you use in rental bowling shoes, because bowling is a game, but these shoes are gross. Let's be honest. Those shoes aren't dirty. They're used. They've had shifts. They've been through birthdays, work parties, and at least one guy who insists he's actually really good at this. Shoes Spray Co. doesn't promise fresh linen or spring rain. Nobody believes that. No one wants to be lied to while lacing up rental shoes. Shoospray Co just handles the situation. It makes them tolerable enough that you can focus on the important part. you're not competitive and then getting mad anyway. Use code strike at shoe spray co for 15% off. Shoes Spray Co. Reality-based footwear management. Okay. Welcome back. And yeah, the lines are still really lit up. I don't know what everybody's doing out here in New Mexico at 3.30 in the morning. Well, I do know. They're calling me at Luke at the Roost. like to give us a call. The number is 208-5853. That's 208-439. Luke. Next up, we've got Maxine. Maxine. Welcome to the show. You're up late tonight. What's going on over there?
MAXINE: Hey, yeah. Sorry, I'm, yeah, I'm up. I bought this house about a year and a half ago. And I've been doing some work on it. Just little things, you know. And tonight, I was measuring because I wanted to put up some shelves in the bedroom and the numbers weren't right. The tape measure kept coming up short between my bedroom wall and the bathroom. And I thought maybe I was just tired, but I got this laser level from work and did it proper and there's like six feet missing. Just gone. The rooms don't line up.
LUKE: I don't understand what you're saying the rooms don't line up. You're trying to put up a shelf? You're measuring the wall. What rooms don't line up?
MAXINE: No. I mean, Okay, so my bedroom is on one side, right, and the bathroom is on the other side. And when you measure the bedroom wall, it's one length, and then you go into the bathroom and measure that wall, and it's another length. And when you add them up with the hallway in between, it doesn't match the outside of the house. There's space that's not accounted for. Like six feet of space that should be there but isn't in any room. It's just wall. Solid wall where there should be something.
LUKE: I don't know. That sounds like a strange design choice to me. I don't think I'm picturing. I would need you to draw this for me because I'm not getting it.
MAXINE: I know it sounds. I'm not explaining it right. Look, there's a door in the hallway between the bedroom and bathroom. I always thought it was a closet or something, never opened it, because it was painted shut when I moved in. But tonight, after I did all the measuring, I got a screwdriver and pried it open. And it's not a door to anything. It's just drywall behind it.
LUKE: Okay, what do you think's behind the drywall?
MAXINE: I don't know. That's the drywall. That's why I'm, I mean, that's why I called. The drywall is newer than the rest of the house. I can tell because it's smooth and the joint compound still snells a little bit, not like old and dusty. And the previous owner died here.
LUKE: Okay, so do you think the previous owner is in the wall?
MAXINE: I don't know. They said it was natural causes. The realtor said it was totally normal. He was old. But I keep thinking about why someone would seal off six feet of space with fresh drywall and then just paint a door shed over it. sledgehammer sitting right here on the kitchen table, and I don't know if I should just break through and see what's in there, or if I should call somebody first.
LUKE: No, I don't think there's any reason to call. I mean, you called me first, right? I'm all you need. So, are you good at repairing drywall? Because if you smash through the drywall, you're going to have a big hole in your wall, and you're probably not going to like that, but you might find treasure.
MAXINE: I'm okay at it. I've done some patching. I took the house as is in the divorce. so I've had to learn a lot of stuff. But yeah, I could fix it if I had to. I just, I keep going back and forth. Part of me thinks it's probably just some contractor being lazy, like they closed off a weird space instead of dealing with it properly. But it's three in the morning and I'm standing here staring at this wall. And I can't stop thinking about what's behind it.
LUKE: Well, that's probably exactly what happened. They were trying to cover something up and make it look like maybe there was more space than there was. somebody was doing some sort of content creation and they were making a set so they could film against the door. I don't know. But a sledgehammer isn't really the right tool for that job. You should probably do something a little more surgical. You could use a drywall knife and just cut a space smaller than the door. So that way, when you're done, you can put the door back and it'll cover up the hole.
MAXINE: That's smarter. Yeah. I didn't think about that. I've got a utility knife somewhere. So you think I think I should just do it tonight. Just cut it open and see.
LUKE: I think you should do it right now. I think you should put the phone down and go over there and do it. If you've got a saw-as-all, that would work too. And come back and let us know what's in there.
MAXINE: Okay. Okay, yeah. Let me hold on. I'm going to put you on speaker so I can use both hands. Give me a minute.
LUKE: All right. I'll give you, I don't know, a few seconds because this is a radio show and we can't have too much dead air. In the meantime, you guys can listen to this music or the soothing sound of my voice while I babble and give her time to cut a hole in her wall. When I was a kid, I called the Opie and Anthony show. It was a radio show, uh, sort of like this, but they were shock jocks. And I was maybe 10 or 11. And I wanted to win tickets to a concert. I didn't know what concert I wanted tickets to. I just wanted to win something. I was very excited. I was calling the radio. I got through. I got through. That never happened. It was always busy. So I got through. I got to talk to Opie. Opie from the Opie and Anthony show. And I was like, I want some tickets to something. And he's like, okay, kid, well, here's what you got to do for the tickets. I want you to take your phone at the time. Those were, it was a cordless phone, not a cell phone, a cordless phone. And I said, yeah, I got the cordless phone. And he said, I want you to take the cordless phone and put it in your dryer and turn it on while we listen to it on the air. And I did that. turned on my dryer and I put the phone in it and they played it on the air and then they hung up on me. So a few minutes later, I just kept calling. I kept calling. I kept calling. I get in the busy signal and I finally got through again and Opie answered and he's like, yeah, this is Opie from the O'B and Anthony show.
LUKE: Next up we've got Nate. Nate, welcome to the show. Have you found any hidden treasure in your secret walls lately?
NATE: No, no hidden treasure. But I am about to lose my bar over this, Luke, and I'm not even being dramatic. My ex-girlfriend is dating Danny the bartender at the Cottonwood, which has been my spot for seven years. Seven years, Luke. I was going there when that place still had the old neon sign out front.
LUKE: Okay, well, I mean, the bar that you went to is not your bar. It's just a bar that you went to. And you can still go there and deal with the fact that your ex-girlfriend's dating the bartender. There's no reason you couldn't handle that as a grown adult. But if you can't, then find yourself another bar.
NATE: I know that, Luke, I know it's not technically mine, but hear me out. Danny knows my drink order. He knows about the time my transmission died in their parking lot, and I had to leave my truck there for three days. He knows I tip extra during the holidays. And now he's dating Jennifer, which means every single thing I ever told him about her. Every time I sat at that bar after we fought and he asked what was wrong, he's probably told her all. There's something about your bartender dating your ex that feels like a violation of the Geneva conventions.
NATE: And I'm half joking, but I'm also deadly serious about this. Yeah, and he knows all about your ex-girlfriend. He knows what she likes. He knows about the sound she makes. And yeah, that's annoying. But if you want to go to the cottonwood, then you're going to have to deal with that. Otherwise, you've got to go to a different bar.
LUKE: That's the thing though, Luke. I tried that tonight. I went to three cactus jacks. I went to that new place on Speedway. I even drove all the way out to the rusty spur, and they all felt wrong. The beer was fine, the music was fine, but it wasn't right.
NATE: And I'm sitting in my truck right now on the loading dock at work. My shift just ended, and I'm having this realization that's honestly messing with my head. I think I care more about losing the cottonwood than I ever cared about losing Jennifer.
LUKE: Yeah, well, I mean, that can happen, and that's okay. So you lost your bar. That's sad. That was your social life. You enjoyed it there. I mean, you can continue to go there. You just have to deal with the fact that those two are dating. Or you can find a time when there's a different bartender working. Yeah, just man up. And go to the bar if you want to go to the bar. Sit up on the other side of the bar from Jennifer and whatever his name is. There's not much to tell you here. You got to just grow up and deal with it or find a different bar or stop going to bars all together and find a different way to get your social activities in.
NATE: Danny. His name is Danny. And you're right. You're absolutely right. But here's what's really getting me. I don't think she ever even went there before we started dating. I took her there. I introduced her to Danny.
LUKE: I don't care. This isn't interesting. Your ex-girlfriend left you and now she's dating the bartender at a bar that you used to like. That's the story. You have three options. Go to a different bar, go to that bar and just deal with the fact that your ex-girlfriend's dating the bartender or stop going to bars. Otherwise, there's nothing left to tell you, and this call is boring.
NATE: You know what, Luke? You're right. This is boring. I'm boring. I called a radio show at three in the morning to complain about losing my bar.
LUKE: You didn't lose your bar. You lost your balls. Next up we've got Debbie. Debbie, welcome to the show. How can we help you?
DEBBIE: Hey, Luke. Thanks for taking my call. So I fired my employee today, and I am pretty sure I just became the bad guy in one of those viral work stories. But also, I think I am right. And I do not know what to do about that.
LUKE: Okay. Well, why did you fire the employee?
DEBBIE: So I own a bakery. And last year, during the really bad dust storms, I let everyone go remote, you know, work from home. And this girl, she is 22. She started making the sourdough from her apartment and just dropping off the loaves, which, okay, I tried it. I was trying to be flexible, but then she stopped coming in for her actual shifts at the storefront, just stopped showing up, but she still wanted full pay, like the same hours, even though she was not here doing the register or helping customers, or any of that.
LUKE: And did you talk to her about this and let her know that that was unacceptable? You give her any chances to redeem herself?
DEBBIE: Well, yeah, I mean, I told her. I told her multiple times she needed to come back in. I said the remote thing was temporary, just for the worst of the dust season. And she kept saying she could do her job from home, that the bread was getting made. What was the problem? And I kept explaining that a bakery is not just about making bread. You have to be here. You have to interact with customers. You have to help with the front. But she just kept not showing up, and then texting me like everything was fine.
LUKE: Yeah, well, then she wasn't doing her job. If her job included working the register and doing point of sale stuff, then she wasn't showing up for it. And you were right to fire. You had to save your business. Now, what is this viral video you're talking about?
DEBBIE: Oh, no. There is no video. I am just saying I feel like I am the villain in one of those stories you see online. You know, where the boss is being unreasonable about remote work and everyone in the comments is like, want to control people because she has been posting about it. Not naming the bakery, but posting about how her boss fired her for wanting flexibility and work-life balance. And some of her friends have been coming into the shop and giving me these looks.
LUKE: No, I mean, I am very pro-remote work. And I'm one of those people that thinks employers are unreasonable when they're trying to make people come into the office. But it's a different kind of work. There is no interaction with customers. There's don't have to be physically present. And a lot of times, me being physically present is detrimental to the work. Like, I do better work from, you know, home. That being said, it's a different role if you have to deal with the public, if you're, if you have to maintain a storefront. And if somebody's not coming into work and they're supposed to, even if they're doing part of the job, that's only part of the job. And you were not wrong to fire. You were not villainous here. And that's not about control, that's about business.
DEBBIE: Oh, gosh. Well, when you put it like that, I guess I see what you mean. But it still feels like I am the bad guy, because she is making it sound like I am just being stubborn. Like, she keeps saying, I am not willing to adapt to the new way of working. And I get that, but it's a bakery. You can't just make bread in your kitchen and call it a day.
LUKE: Well, a lot of people can, but if that's not what your bakery is about and you actually have a store and that's a different thing. You know, there are a lot of people that bake bread for like, little gas station stores and stuff and do sour dough and just sell it on the side. And that can be a legitimate business. But if that's not what your business model is, then you can't have employees that are trying to define what your business model is.
DEBBIE: Right, exactly. And the thing is, I have been doing this for 11 years. I know how the bakery works. I know what we need. And she has been here for like, a year and a half, and suddenly she is telling me how it should run.
LUKE: Yeah, that's all right. You let her go, and now she can go find a more fully remote job, if that's what she really wants. It sounds like she didn't want to be part of your company, and that's okay, because at-will employment is a thing. You got to respect her for giving it a shot, though. I mean, she did her very best to make her own life and live it the way that she wanted. But if you can't have that at your business, because your business needs to be there to actually serve a purpose to the public, you're not the bad guy there. And it was actually very cool of you to let them work remotely at all during the dust storms. A lot of employers wouldn't have done that.
DEBBIE: Well, thank you for saying that. I mean, I was trying to be understanding. Nobody wanted to be out in that mess. But now I am doing everything myself and I have a wedding cake due tomorrow that I have not even started. And I have been up since three in the morning yesterday. And I am realizing I probably need to hire somebody new, but I am kind of terrified to do it now, because what if they pull the same thing?
LUKE: Yeah, well, that's the risk of being a business owner and having employees, because you never know what they're going to do. They're the most variable part of your company. You just have to trust the interview process and make sure that whoever it is that you get is fully aware that they have to actually go to work. And it's not a remote job. And it's not a remote bakery job. That's all. And you should get off the phone with me and start making your wedding cake, because it takes a long time to do that, right? And it's already 4 a.m.
DEBBIE: Oh, shoot. You are right. Yeah, it is going to take me at least 12 hours.
LUKE: Yeah, no problem. You're not a villain. You did the right thing and you were pretty cool to her. And now, ladies and gentlemen, we're going to have to take a little break for a word from our sponsors.
LUKE: Yeah, placebo leave. Okay, and, uh, oh, there he is. He's back. We got Silas on the line. Welcome back, Silas.
SILAS: Brother Luke, good to hear your voice again. Listen, I have to tell you. I was in the middle of our evening meditation circle when Nate called in earlier about losing his bar. And I broke form. Completely. Just started laughing. Teresa shot me this look like I'd interrupted a funeral. That poor man losing the cottonwood because his ex started dating the bartender.
LUKE: Oh, that's not nice to laugh at somebody's misfortune like that, brother Silas. But you make up for it in the fact that you run your meditation circles to Luke at the roost. That is, we tip your hat to you, sir.
SILAS: You know, Luke, I appreciate that. But I have to be honest with you, we don't usually have the radio on during meditation. One of our newest seekers, this kid named Brandon, he smuggled in a little transistor radio because he said he couldn't sleep without your show. Caught him with an earphone in during the circle. Normally, I'd say that's breaking the practice. But the more I think about it, your voice has this quality that actually helps people settle into themselves.
LUKE: Well, I do what I can to help, you know, Silas.
SILAS: You're calling in tonight so Marcus and Kara you remember them from my last couple calls they went through the renewal ceremony like you suggested and Marcus he stood up in front of everyone recommitted fully talked about shedding his old patterns the whole thing beautiful moment
LUKE: That is fantastic news so everything's going well down there
SILAS: Well that's the thing brother Kara didn't recommit she stood there during her turn looked at all all 40 of us in the circle. And she said she appreciated the community, but she couldn't keep pretending. Said she was leaving.
LUKE: Yeah, well, that shouldn't surprise you very much. You knew she was on her way out and she didn't really want to be there. She just came back for the dude. And how's that going to work out? Is Marcus staying?
SILAS: That's exactly what's eating at me, Luke. Marcus stayed. He chose the wellspring over Kara. She packed up her things two days ago, stay with her sister and Marcus is still here.
LUKE: Well, so now you're back in the same situation you were a few weeks ago. And that's okay. You know, not every relationship is meant to last forever. Sometimes people got to split up. If the wellspring's important to Marcus and Kara didn't want in her life, then so be it. Then they're not aligned. They're not on the same life path.
SILAS: You're right. You're absolutely right. And I told myself the same thing. People are find their path. But here's what's got me twisted up. Marcus is falling apart.
LUKE: Well, yeah, this all just happened, and that's a hard thing to go through losing half of yourself there. But he decided to stay at the Wellspring, and that's what he's going to do, and you're going to support him, right?
SILAS: Of course we're supporting him, brother. But something about it just doesn't sit right with me. He's not eating. He skips the shared meals. He's out there at three in the morning walking the property line. Yesterday, during our morning circle, he just started crying. Not the good kind of release we talk about in the practice, but this hollow, broken sound.
LUKE: Yeah, it's a sad and difficult thing, and people go through stages of grief when they lose a relationship like that. I mean, you loved her. But obviously, whatever's going on at the wellspring was more important to him than that love. And that's something that you need to look at.
SILAS: Luke, I need to tell you something. Last night, Marcus came to my cabin around two in the morning. Woke me and Teresa up. He was standing there in the moonlight, and he said, Silas, did I make the right choice? And I froze, brother. I didn't know what to say to him.
LUKE: Well, you can't make the choice for him, right? He made the choice that he made and if he changes his mind, he's still free to do that. So I think you just, you have to maybe sit down with him and tell him to pick a path and he can't have both. He can have one or the other and it's not going to work out where Kara and him live happily ever after at the Wellspring. That's just, that's not an option here. And he's a, he's a grown man. He can make his decision and stick to it.
SILAS: You're right. He's a grown man. He's a grown man. You're right. He's a grown man. But here's what I keep coming back to. The more I think about it, the more I wonder if we pushed him toward this.
LUKE: Well, from our previous conversations, it doesn't sound to me like you did push him towards that. It sounds like you tried to push him towards his wife, and you tried to keep them together, and you really wanted that for them. So if he's making this choice, he's making it alone, unless there's more information about what you did here that you haven't told us.
SILAS: No, you're right. We didn't push him directly. But, Teresa, said something to me this morning that's been rattling around in my head. She said, Silas, we built a place where leaving feels like failure. And I've been sitting with that all day, brother. Because Marcus stood up in that renewal ceremony. And when Kara said she was leaving, I saw the look on everyone's faces. Not judgment, exactly, but this.
LUKE: This what? What exactly was the look? Was it a look at disdain? Was it, are people looking at her like the enemy now because she's a traitor?
SILAS: Not disdain exactly. More like pity. Like she was making a mistake. Like she was choosing the false world over the real one. And I didn't correct that, Luke. I stood there and I let that energy fill the room.
LUKE: Well, you know what? Maybe she is making a mistake and maybe she's not. Maybe you're all making mistakes and nobody can be the judge of what's right and what's wrong, really. People try all the time but nobody really knows. People do what is right for them. And what is a mistake for Kara might not be a mistake for Marcus and vice versa.
SILAS: That's fair. That's really fair. But here's what I can't shake. Marcus told me at two in the morning. He said, I stayed because I didn't want to disappoint you. I didn't want to let down the community. Not because he believed in the current.
LUKE: All right, why do you think that is? Why do you think Marcus doesn't want to let you down?
SILAS: Because I gave him purpose when he didn't have any brother. When Marcus showed up here three years ago, he was lost, working some dead-end job in Los Cruces, drinking too much, no direction. And I told him he mattered. I told him he was part of something bigger.
LUKE: Okay, and you meant that. He's part of a bigger community, right? Obviously, you told him something that his wife did not tell him. He wasn't getting that comfort from her. So he decided to stay with you. And he feels like that's the right thing for his life.
BENNY: Hey, Luke, so I'm calling from the stock room at my bar right now, because I literally cannot be around customers after what I just saw. I went over to my Uncle Sal's place this afternoon to help him move some boxes out of his garage, right? Uncle Sal, 73 years old, Deacon's Sacred Heart, the guy who does the readings every Sunday. I open this box, and it's a photo album. And Luke, I'm not even kidding, it is full of pictures of my uncle at Burning Man wearing nothing but turquoise body paint and a leather harness.
LUKE: Yeah, I think we've had this conversation before. You called in once before and told us about this. Or somebody else found that box. I've heard this story before, though.
BENNY: No, Luke, that wasn't me. I've never called your show before. This literally just happened today. I mean, maybe somebody else found their uncle's burning man photos? I don't know. But this is my first time calling and this is my uncle's Sal we're talking about.
LUKE: Yeah, somebody else found their uncle's burning man. It was a woman, actually. She found the burning man photos. But they were the same ones. They were a deacon and he was in turquoise and leather.
BENNY: Wait, seriously? That's insane. was her uncle also nicknamed Freight Train? Because that's what's really killing me here. My uncle, Sal, has a laminated badge in one of these photos, and his Burning Man name is Freight Train.
LUKE: I don't recall his Burning Man name, but Freight Train is as good as any. So what's the problem? Good for your uncle. He's living his best life out there in the desert on the Playa.
BENNY: Okay, first of all, I know you just said living his best life to mess with me. But Luke, this is the man who lectures me about keeping the Sabbath holy. He told me last Christmas I was going to hell for living with my girlfriend before marriage.
LUKE: Yeah, and what's unholy about wearing leather and turquoise? Nothing. He was maybe leading a church group down there. There's all sorts of people that go to Burning Man. There wasn't necessarily anything off color, unacceptable, morally ambiguous going on. You don't know that.
BENNY: Luke, there are multiple years of photos, multiple years. And in one of them, he's on an art car with a woman in a gas In another one, he's at what looks like a sunrise service, except it is definitely not the Catholic kind.
LUKE: Well, what are you going to do? You're going to bust his balls for it? The man's 72 years old.
BENNY: 73. And honestly, I don't even know what I'm going to do. Part of me wants to just pretend they never saw it. Put the box back. Never speak of it again. But Luke, every time he opens his mouth now about morality or tradition, or the right way to live, I'm going to be thinking about freight train and turquoise body paint.
LUKE: Yeah, it sounds like any other self-respecting Catholic that talks a bunch of shit when they're at church and then goes to Burning Man at night. That's part of the deal. That's one of the great benefits of Catholicism is hypocrisy.
BENNY: You know what? You're right. That's actually exactly what it is. The whole confession thing, right?
LUKE: Yeah, the whole confession thing. Yeah, you go out and you do a bunch of drugs and bang a bunch of girls at Burning Man and then you confess to your sins and you're free.
BENNY: But here's the thing that's really getting me, Luke. Do I say something to him? Because I can't just act normal around him now. He's coming to the bar tomorrow night for his usual Friday fish fry.
LUKE: And I'm going to be standing there pouring his core's light, knowing that somewhere in his garage, there's a photo of him wearing nothing but body paint and calling himself freight train. I think you don't have to say anything. You can. I don't know what your relationship is with your uncle. His name's Uncle Sal, so he sounds like he's pretty cool. Maybe you could bring it up in a joking kind of a manner. but I don't think it matters that much. I'd leave him alone. He's old. Let him enjoy his life and just like the rest of us. If you're going to go to church and pretend to be Catholic, pretend to be Catholic. Pretend to be Catholic. That's the deal.
BENNY: Yeah, I hear you. But Luke, this is the same guy who gave me a 20-minute lecture last month about respecting tradition and honoring the family name. And now I know that his idea of honoring tradition involves turquoise body paint on the plier. How do I take anything he says seriously after this?
LUKE: Honestly, sir, If you took anything he said seriously before this, I don't know what to tell you. Because nothing that any of them are saying can be taken seriously.
BENNY: You know what? That's fair. That's actually really fair. I guess I've been giving him way too much credit this whole time. Maybe the turquoise body paint version of Uncle Sal is actually more honest than the deconversion.
LUKE: You never know. People can be more than one thing, and often are. Next up, we've got Peggy. Peggy, welcome to the show. What's going on? How can we help you tonight?
PEGGY: Luke, thanks for taking my call. So I'm sitting here in the DMV break room. I pulled a double covering someone's shift. Still got my blazer on from this morning with coffee stains on both sleeves, and I just need to tell you about what happened tonight, because I am losing my mind. Three weeks ago, I took early retirement. I'm 32 years old.
LUKE: Wow, you retired at 32 and now you're doing it double. That's quite a turn of events.
PEGGY: Right? I keep telling people I'm too young to be retired like it's some kind of joke. But three weeks ago, I walked out of that HR office feeling like I won the lottery. I had on my Navy slacks, the cream blouse, the good earrings my mom Diane gave me before she had her stroke. I remember everything about that day. The HR lady had this vanilla candle going in her office, trying way too hard to make it cozy, and I signed those papers thinking I was set. But then tonight, tonight my husband tells me he's been covering our mortgage shortfall with his poker winnings for the last eight months. Poker winnings, Luke.
LUKE: Well, congratulations. He's good at the poker, it seems.
PEGGY: That's what he said. He sits me down tonight and he's like, don't worry. I've been winning. We're fine. And I'm standing there thinking, okay, so our entire financial stability for the last eight months has been riding on whether or not he gets a good hand. And here I am, I just retired thinking we had this cushion, thinking we were responsible adults who planned things out.
LUKE: professional poker players can definitely be professional poker players. And that's planning things out. I mean, more than people in other roles ever would have to do. Like, he's got to have strong bankroll management, and he's got to have a lot of patience and skill in order to consistently win like that. And if he's spent covering you for eight months, that's a long time. That's a lot of mortgage payments. So he's doing something right. Have you looked at his stats? Where's he getting the bulk of his money from? Is he playing cash games? Is he playing tournaments? Does he go to Vegas? What's the deal?
PEGGY: No, no, no. Luke, this is not some professional setup. He's playing at the horseshoe with guys from his work. It's Friday night games, sometimes Wednesdays. He's not tracking stats. He's not managing a bank roll. He told me tonight he's up overall. But when I asked him how much exactly, he got all vague and said enough to cover what we needed. That's not a professional. That's my husband gambling to pay our mortgage and not telling me about it until after I've already signed early retirement papers.
LUKE: Yeah, well, you can't look at him like he's the irresponsible one when you retired early at 32 years old without knowing what your husband does for a living. And then you called in this radio show and you told me that you were in the break room at the DMV after getting off a double. Well, you just retired at 32. So what is the deal? Are you retired or are you not retired? Did you actually leave your job without knowing how much money you had in the bank? How can you expect me to take that seriously?
PEGGY: Okay, fair point. I took the retirement package thinking we had enough saved. And then I picked up this shift tonight because Sandra called me crying about her kid being sick and I felt bad. But I knew what our savings looked like, Luke. I knew what our monthly expenses were. What I didn't know was that for eight months we've been short and my husband has been making up the difference at a poker table instead of telling me we had a problem.
LUKE: That's not how it works. You can't retire from a company and then take somebody's shift because you're no longer an employee of the company. So what are you talking about? Obviously you didn't know how much money you had if you were short and your husband had to make up that money. So you're lying to me in multiple ways.
PEGGY: Okay, right. I didn't fully retire. I took the package. I signed the papers, but I'm still on as a contractor while they transition my replacement. That's why I can still pick up shifts. What was the package? It was a buyout. They were downsizing the office, offering people a lump sum to leave early. I got $42,000, which sounds like a lot until you realize that's supposed to tide us over until I find something else, and our mortgage is $1,800 a month, plus everything I thought between that and what we had saved and me finding another job within a few months. We'd be fine.
LUKE: That's not retirement. If you're going out to find another job, you're not retiring. What are you talking about? $42,000 and your mortgage is $1,800? Come on, it's been eight months. How are you short? This doesn't make any sense, lady.
PEGGY: No, no. It's been three weeks since I took the package. The eight months is how long my husband has been covering the short shortfall before I even knew about it. Before I took the retirement offer, we were already short before I left, Luke.
LUKE: Okay, well, that's not retirement if you're 32 years old, and they gave you a package and you're immediately looking for another job. But you've got 42 grand, and you've only got to pay 1,800 a month. So you've got lots and lots and lots and lots of months to figure it out.
PEGGY: Except we don't have the full 42 anymore, because I already put some toward bills we were behind on. Bills, I didn't know we were behind on until tonight. And yes, you're right. It's not retirement. I just thought it sounded better than saying I got laid off and took a buyout. But the point is, I made this huge decision thinking we were stable. And it turns out we haven't been stable for almost a year. And my husband just didn't tell me.
LUKE: Well, that's a conversation you're going to have to have with your husband. And it sounds like you're both financially irresponsible. And you're a liar, too. So, I mean, I've... I've had about enough of you.
PEGGY: Wait, hold on. How am I the liar here? He's the one who hid eight months of mortgage problems from me while I'm making major career decisions. I'm not saying I handled everything perfectly, but he looked me in the eye every month and didn't say a word about us being short.
LUKE: Because you were laid off from your job and you called in and telling me that you were retired at 32, which is absurd. And, uh, yeah, so your husband wasn't... fully upfront with the bills. You should have been very much aware about what your financial picture looked like before you made any career decisions. And if you didn't, that's on you.
LUKE: So you and your husband need to sit down and talk about your lives and your money and what you're going to do. Luckily, he's been winning at poker and covering up the shortfall. And you've got a nice long buffer to find yourself another job. So there's no problem here, except the one where you two aren't communicating and you're not taking responsibility for your financial health.
PEGGY: You know what? You're right. this a retirement when it's not. And I should have known exactly where we stood before I signed anything. I guess I'm just... I'm scared, Luke. I thought we were doing okay and now I don't know what else I don't know about.
LUKE: Well, I know what you don't know about. And it's my new tool, CareerPulse. And CareerPulse is a free and open source tool that runs in Docker. You can install it and it will pull all the jobless things from 11 different job boards and score them based on your resume. And then, additionally, it will look at your resume and fill out a job application profile with the information in it. And then there's a Chrome extension that you can install in your browser that will do the auto filling of the applications. So you can find the best jobs that you're the most qualified for and simplify the application process. So that should be able to help you out. You can check it out at career pulse.machelmediagroup.com.
PEGGY: Okay, I look into that. Thank you, Luke.
LUKE: All right, good luck there, Peggy. One more call for the night. We're going to talk to Phil. Phil, you're going to be our last caller. What do you have to talk about tonight?
PHIL: All right. So my neighbor's Roomba broke into my house through the dog door about 20 minutes ago. And I'm currently watching it vacuum my kitchen floor. So that's a thing that's happening.
LUKE: Nope. We already took that call. We'll try one more. Hey, Dot. Dot. you have something going on tonight for the last call of the evening?
DOT: Yeah, Luke. I do. So I'm sitting here at the front desk of the hotel, middle of the night, and I just found out my car is worth $12,000, which would be great news except I paid $4,000 for it last year. I bought it for my husband's friend, Rick.
LUKE: So you made $8,000 on the vehicle, and it's not great news?
DOT: No, Luke, because Rick sold it to me. He didn't just undervalue it by accident. Rick flips cars.
LUKE: Okay, I don't understand what you're getting. You think Rick was maybe hitting on you with this, or he was just trying to help somebody else that needed help?
DOT: Because he could. He told us he was helping us out. That was the whole thing. My husband kept saying how generous Rick was being. What a good friend he is.
LUKE: Okay, get to the point. What are you trying to say? Because it sounds like Rick is a nice, generous guy that helped you out by selling you a car for less than a... was worth and good for you. What is the problem? Why are you calling me?
DOT: Because my mechanic told me Rick absolutely knew what it was worth. This is what Rick does. He buys cars. He fixes them up. He sells them.
LUKE: Yeah, I know what Flip means. I understand the situation. He sold you a car for less than it was worth. Why is that a problem? And why did you call me?
DOT: Because I could sell this car right now and pay off a chunk of the mortgage. Or finally get the air conditioning fixed. But Rick comes over for dinner every other Sunday. My husband thinks he did us this huge favor. And I'm sitting here thinking Rick's got plenty of money. He knew exactly what he was doing. And now I've got 12 grand sitting in my driveway that I could actually use.
LUKE: Yeah, you are actually using it. You're using it to drive to work every day. What is your problem, lady? This dude helped you own, and now you're being a total cunt about it.
DOT: Whoa. Okay. Luke, he didn't help us out. He made money off us while pretending to do us a favor.
LUKE: What are you talking about? You said it's worth 12 grand, and you paid four. How is that making money off of you?
DOT: Because he could have sold it to somebody else for 12, and he sold it to us for four, while acting like he was being charitable. That's $8,000 he left on the table, so he could look like a hero at Sunday dinner.
LUKE: What is wrong with you? He helped you out. He gave you a nicer car than you can afford for not that much money. What the... Fuck.
DOT: You're not hearing me. He made it sound like we needed charity. Like we were the poor friends he had to take care of.
LUKE: I don't know what you want me to tell you, because it sounds like he did a nice thing for a friend. And you should be grateful that he gave you a really good price on a decent car. That's all that happened here. You're a nutcase.
DOT: So I should just keep my mouth shut and smile at Sunday dinner, while Rick gets to feel like a for the rest of my life.
LUKE: Yeah. Yeah, that's exactly what you should do.
DOT: Even though I know he manipulated the whole situation to make himself look good?
LUKE: I don't know what you're talking about. He didn't manipulate anything. He sold you a car cheap. There's nothing wrong with that. Is there a problem here? Is there something else going on that you're not saying? Because I don't understand why you can't get this through your skull. That this dude, Rick, just sold you a car cheaper than it was worth. Because he could. Because he was a good friend. there doesn't seem to have been any ulterior motive.
DOT: Luke, the ulterior motive is that now my husband thinks Rick walks on water. Every time I suggest we could sell the car and use the money, my husband says, but Rick was so generous. We can't just turn around and sell it. Rick bought himself 15 years of gratitude for $4,000.
LUKE: It's a small price to pay.
DOT: For what? So Rick gets to be the hero for a...
LUKE: It was a nice thing to do. That's all there is to it. He did a nice thing. And you don't have to suck his dick for it. You just, like, thanks for the car, man. You don't even have to let him know you know what the value is. It's not like he's rubbing it in your face.
DOT: But he is rubbing it in our face. Every Sunday dinner, he's there. And my husband brings it up. Remember when Rick hooked us up with that Subaru. And Rick does this humble thing where he waves it off like it was nothing. It's a performance.
LUKE: It doesn't matter. Stop it. Whatever is this mock indignation you're feeling is a performance, too.
DOT: It's not mock indignation. I'm genuinely pissed off that this guy gets credit for being generous when he could have actually been generous and just given us the car for what he paid for it, or told us what it was really worth.
LUKE: Well, he was generous, and you're an asshole, and that is the end of our show, folks. We'll talk to you again tomorrow night. Bye.

View File

@@ -0,0 +1,389 @@
LUKE: All right, welcome back. I'm Luke. This is Luke at the Roost. It's your late night call in talk show where I can give you advice on whatever might be going on in your life. If you'd like to give us a call, the number's 208-439-5853. That's 208-439 Luke. Today is Sunday, March 15th. And let's get started with our intern here. You just started yesterday and already's doing a shitty job. Devin, where's my coffee? We had a long discussion yesterday about how you were going to go down in the mark and get me my black ice coffee. And you agreed. And it's not here. So what's the situation?
DEVIN: Yeah. So basically, I thought you said Thursday. I wrote it down as Thursday. I have it in my phone and everything I can show you. I was going to leave like an hour before the show to make sure I got it right. I'm really sorry, Luke. I can go right now if you want. The mark closes at like midnight, right? down there, it'll take me 10 minutes. I'm sorry.
LUKE: No. The mark closes at like 5 p.m. It's not open now. Come on, man. You got to do better than this. I mean, why would I want a coffee on Thursday? You knew that we were working today. Thursday's like five days from now. How is that helpful? Come on, man.
DEVIN: Yeah, you're right. That doesn't make sense. I don't know why I wrote Thursday. I'm really sorry, Luke. there's that all-sups that's open late. It won't be the same, but it's something. This is my first day, and I already messed up. I'm sorry. Do you want me to go now or wait until the next break?
LUKE: Dude, there's no all-sups anywhere near here. There's a gas station in Road Forks, 45 minutes away. By the time you went there and got back, the show would be over. That would be of no use to anybody. I need you to do better than this. Or we're going to have to get another intern.
DEVIN: Yeah, got it. I'm sorry. three alarms for tomorrow, and I'll double check with you at the end of every shift what you need and when you need it. I wrote down the mark, Black Ice Coffee, before the show. I have it now. It won't happen again.
LUKE: All right, I hope not. And do you have anything to provide to the show today? Is there any reason we should have you on the air, or should you just kind of sit in the back and wait to get my coffees? Are you going to provide us some value here? Or what is the deal? What are you trying to get out of this show other than hitting on the girls that call in?
DEVIN: Yeah, no, I can help. I've been doing research all day, actually. I pulled like 15 articles on that thing you mentioned yesterday about the town council meeting, and I have notes on the whole water rights situation if that comes up. And I set up the new call screening system. It's working now. I tested it like six times. I know I messed up the coffee thing, but I'm actually pretty good at the research stuff. That's kind of what I'm here for, if that makes sense. And I wasn't hitting on anyone. I was just being friendly. But yeah, I can just stay quiet if you want.
LUKE: All right, all right. Well, we'll see how you do tomorrow with the coffee thing. And let's get on with the show. Let's try out your new call screening system. It looks pretty good. It looks like it's going to do the tricks. So let's get to it. So first up on our line here, we've got Roland. Roland, welcome to the show. How are you today, sir? What's going on? How can we help you?
ROLAND: Hey, Luke. I'm doing all right. Thanks for taking my call. Well, shoot, I'm calling because I just found out the couple that wins the chili cookoff every single year has been cheating. Like, for at least the last five years.
DEVIN: using the same canned base and just doctoring it up. And everyone in town thinks they're these amazing cooks. My kid worked at their house last summer doing yard work, and he saw their recycling bin full of these identical cans. Same brand, same flavor, every week during cook-off season. So I was just looking this up, and actually, most official chili cook-off rules say you can't use pre-cooked ingredients except for, like, canned, tomatoes and sauces. But if they're using a full canned chili base, that's definitely against the rules at like every sanctioned competition. So, yeah, they're for sure cheating, if that makes sense. Also, this reminds me of my uncle's ex-wife who won a pie contest at the county fair three years in a row. And it turned out she was buying them from this bakery in Las Cruces and just putting them in her own dish. Anyway, yeah, Roland's kid probably has the evidence if he remembers the brand name.
LUKE: All right. Well, why is this so important to you? Roland, were you entering the chili competition? Have you been beat out by these people? What's your steak in the chili cookoff game?
ROLAND: Oh gosh, no. I don't enter. I'm a line cook at Mescalero's downtown, so I spend all day cooking. Last thing I want to do on my weekend is stand over a pot of chili, you know. But I've been going to this cookoff since I was a kid. My dad used to enter every year, never won, but he'd spend weeks perfecting his recipe. And these people, the Hendersons, they show up with their fancy setup, act all humble when they win, give this whole, speech about family recipes and love being the secret ingredient.
LUKE: Well, love is the secret ingredient always. We all know that. But you're not getting to the point here. Why is this bothering you? Why do you care about the cheaters at the chili cookoff? What does that mean to you? I mean, was it good chili? Does it really matter if it came from a can or not? Because I don't think it does. And definitely not enough to call a radio show. So, I mean, why are you really calling me? What are you trying to get at? What's going on in your life?
ROLAND: Well, shoot, Luke, you're right. I guess. Okay, look, my wife Linda and I were separated right now. Living apart, haven't filed anything yet. But it's been four months.
LUKE: All right, and why are you separated? Whose idea was that, or was it a consensus?
ROLAND: It was her idea. She said she needed space to figure things out. Said I never really let her in, that I keep everything surface level. And the thing is, the Henderson's, couple, right?
LUKE: Yeah, but we don't care about the Henderson's right now. You can't compare yourself to other people ever. It never works out. It only makes people discontent. Okay, so let's focus on you and your relationship and what you're trying to get out of this. So your wife wanted to leave because you don't let her in and why is that true first? And also, why don't you let her in? Like, what's the deal there? Have you spoken since the separation? Are there any? talks about getting back together or is this on its way to a divorce?
ROLAND: We talk, yeah, mostly about practical stuff. Bills, the house. She asks how I'm doing and I say fine, which is what I always say. And you're right, that's the problem.
LUKE: Okay, but has there been any discussion about the future of your relationship and how long the separation is going to last or where it's going? About getting back together?
ROLAND: Not directly. She said maybe we could try counseling, but I haven't. I haven't called anyone yet. That was three weeks ago.
DEVIN: So I just looked it up, and couples counseling actually has like a 70% success rate, which is pretty good. So, like, three weeks isn't that long, but also it kind of is if she already asked about it, if that makes sense. This actually reminds me of when my mom and her second husband did the separation thing. and he waited too long to do the therapy, and she said it felt like he didn't actually want to fix it. He just wanted to say he tried. They're divorced now. Anyway, yeah, 70% is better odds than most things.
LUKE: Yeah, I don't know about the couples counseling. I mean, I tried it once, too, and I found it to be largely a joke. I don't think there's a whole lot to it. Most couples are able to communicate. Maybe not most. I shouldn't say most. But I think the couples counselor, I don't know, it wasn't helpful for me.
LUKE: maybe I didn't take it seriously enough, but it's very hard to take seriously, because it's just nothing. It's just nothing. Like, talk to your wife. And if you can't, if you're not supposed to be together, then you won't be together. I mean, I went through the separation thing too. And to be honest with you, I wanted it to be a separation and it didn't end up that way. And that's sometimes how things, you know, roll. So what do you want? Do you want to not be a separation? Or are you ready to be done with the relationship?
ROLAND: I want her back. I've been with Linda since high school, Luke. 38 years. She knows me better than anyone. Or I thought she did. But then she says, I don't let her in. And I'm sitting there thinking, what are you talking about?
LUKE: Yeah, I understand. How old is Linda, if you don't mind me asking? If you were in high school, you were 38, that would put you somewhere around, like, early 50s?
ROLAND: We talk every day. We've always talked, but I guess I don't...
LUKE: You don't want... I don't think you heard my question there. I asked how old you guys were. I'm assuming that you're in your mid-50s. Is that true?
ROLAND: Yeah, I'm 56. She's 55.
LUKE: So, I mean, 55 is post-menopause, right? So all the hormonal stuff has shifted. She's, I mean, effectively a very different person now. And you probably are, too.
ROLAND: I hadn't thought about that.
LUKE: Nobody ever does. That's what gets you. So, you know, you're going around, living your life, everything's great, and then people change. It's part of the human condition, I've heard. But I'm sorry you're split up, and if you want her back, and you haven't said that, maybe you should say it before the separation goes on too long and it just fizzles out. you know, at least try and figure out where she's at with it, what she wants out of it. Like, what was the purpose of the separation? Was it so that you could spend time apart and kind of learn what it's like to be alone again and how much you miss the other person and rekindle your love that way? Or is it just like, I can't be near this fucking person for another minute? Like, where did that come from?
ROLAND: She said she felt like she was living with a roommate. That we'd go through the motions. But I never talked, told her what I was actually thinking about. And she's right, Luke. Like, I'll be painting the bedroom at two in the morning because I can't sleep. And she used to ask why I couldn't sleep. What was on my mind?
LUKE: And what was on your mind? That you wouldn't tell her, I assume?
ROLAND: Just work stuff. Or something I read in a journal. Or I'd be thinking about my brother Marcus, how he's doing better than me, always has. But I just say nothing, I'm fine. Just restless.
LUKE: Yeah, well, maybe she wants something else in her life, and she doesn't want to say that either, because, I mean, you say you're fine. She does that, too. So, uh, who knows?
ROLAND: I don't know. You think she wants out completely?
LUKE: If she wanted the separation, it's been four months, and she hasn't made any attempt to rekindle the relationship, then it seems that way, right? I mean, you should talk to you. You should ask. Just ask her flat out what she wants and see if this is worth holding on to or you want to move on?
ROLAND: Well, shoot. I guess I've been avoiding that conversation, because I'm afraid of the answer.
LUKE: Yeah, I think you know what the answer is.
ROLAND: Maybe I do. Thanks, Luke.
LUKE: No problem, buddy. Good luck. It's a tough thing. I mean, I don't wish it on anybody, but it seems to happen to everybody. Next up we've got Doris. Doris, welcome to the show. How can we help you tonight?
DORIS: Hey, Luke. So I've been listening to you for a while now, and I figured I'd call in because I've got this thing that's been sitting with me, and I don't know what to do about it. I cheated on a test in college.
LUKE: How long ago was college?
DORIS: 21 years ago. I was finishing up my construction management degree at New Mexico State.
LUKE: Okay, well, I don't know that you have to worry about a test you cheated on 21 years ago. Did that have a significant improvement on your GPA or something? be where you are today had you not cheated on that particular test?
DORIS: Yeah, actually, it was the capstone exam for the whole program. I was borderline failing going into it. Had a rough semester, wasn't keeping up. And if I didn't pass that test, I didn't graduate. I copied off the guy next to me for most of it.
LUKE: Okay, and how has that affected your life so far? So, uh, what, uh, what do you do? What's your occupation?
DORIS: I'm a construction manager. I've been doing it for almost 20 years now. Good at my job, make decent money, got a crew that respects me. The degree got me in the door. Nobody would have even looked at me without it.
LUKE: Okay, well, that was probably a shady thing to do, but I mean, you know, whatever it was 21 years ago. You did it, you got in the door and you've been doing this for a long time. So you're qualified now, even if you weren't then. And, you know, you've learned a lesson, right? You didn't continue to cheat throughout your entire life and your career. You cheated that one time back in college on a test that you probably could have passed anyway if you really tried.
DORIS: Yeah, maybe. But here's the thing. I talk about integrity all the time, like constantly, with my crew, with my husband Mike, with anybody who'll listen. It's this whole thing with me.
LUKE: Yeah, well, integrity takes a little while to develop. You were, what, 19, 20 when you cheated on that test? I mean, kids do stupid shit. And you did, and you benefited from it, and that was wrong, but, you know, you learned your lesson. You didn't do it again, and there's no, there's nothing you can do about it now. You're where you're at. You don't have to worry about this anymore. It's 21 years ago. Let it go.
DORIS: I would, except Mike doesn't know. And I heard that caller Roland earlier, the one talking about his wife Linda leaving, because he never opens up. And it got me thinking, Mike and I have been together eight years, married for five. Second marriage for both of us.
LUKE: Okay, well, tell Mike. The truth is, Mike doesn't care that you cheated on a test 21 years ago. Nobody does. That was so long ago. The teachers don't care. You're the only one that cares. And if you want to have that conversation with Mike and tell him what a horrible person you were and how you don't deserve to be where you are in life anymore because of a mistake he made when you were 20. Go ahead and see how that goes. He's not going to care.
DORIS: You're probably right. I mean, it's not like that's the only thing I haven't told him.
LUKE: What else haven't you told him? What are you alluding to?
DORIS: I can't really get into that right now.
LUKE: And that's the point of the radio show. You called me. What is it that you're trying to talk about? You know, tell us the stuff so we can help.
DORIS: It's just some stuff from before we got together. Decisions I made. Nothing illegal or anything. Just things I'm not proud of.
DEVIN: So this actually reminds me of when my roommate's sophomore year confessed to me that he'd been lying to his girlfriend about where he went to high school for like two years. And it just spiraled because he kept having to add more details. He eventually told her. She didn't even care. She was just confused why he lied in the first place. But also, that last thing she said, that's not the only thing I haven't told him. That's kind of a big deal, right? Like, she just casually dropped that there's more stuff, if that makes sense.
LUKE: Wow, you're very observant there, Devin. You've got a fucking mind for this radio business, don't you? Okay, Doris, what is it that you're not saying to us? We need to know. Devin needs to know.
DORIS: Look, it's not about Mike. It's about my ex from the first marriage.
LUKE: Okay, and what is it about your ex from the first marriage? Come on, Doris. Talk to us.
DORIS: We had a kid together. Mike doesn't know I have a daughter. She's 17 now, lives with her dad in Elbuquerque.
LUKE: Well, yeah, that's a pretty big one.
LUKE: I mean, I don't understand how you can be in a relationship with somebody without sharing that level of information with your partner. What are you trying to do? What are you trying to accomplish in your relationship here? What's the point of it if you can't share that you have a kid?
CALLER: I don't see her. Haven't in years. When the marriage ended, it got ugly, and her dad got full custody. I tried for a while, but then I just stopped. It felt easier to start overclean.
LUKE: Okay, so you haven't seen your kid. You haven't talked to your ex-husband, but I still don't understand why you wouldn't tell your current husband about that situation. Because, I mean, that's a big part of you. That's, I mean, that's your DNA right there. He should know that. One day down the line, that kid's going to come looking for you, and it's going to be very difficult to explain that you've had a child this whole time. If you, you know, are serious about the marriage you're in now.
CALLER: That's what I've been thinking about. She turns 18 in October. I keep wondering if she's going to try to find me. Or if she already hates me too much to bother.
LUKE: Who knows? And I'm sure she does hate you on some level, but at some point, that will change and she'll wonder what it is that happened there. I mean, as people grow up, they start to see things differently. And even if what happened there was you just decided it wasn't worth fighting for, in her mind, she's going to be curious about why you didn't think it was worth fighting for. And she may very well come knock on your door one day. And when that day comes, it's probably important that your current husband has some idea that you have a kid.
CALLER: Mike talks about wanting kids sometimes. Not seriously. We're too old for that now. But he mentions it. And I just sit there knowing I already had one and walked away.
LUKE: Okay. Well, I mean, you went through a whole courtship process and a marriage and how long have you been with Mike? A while, I assume. And this hasn't even come up. Like, why don't you want to tell him about it? I mean, this is a part of your life and your whole emotional story. I would think that that's something that you would want to share with somebody.
CALLER: Eight years together, five married, and I don't know. At first it felt like ancient history, something from a different life. Then too much time passed and it got harder to bring up. How do you drop that in a conversation after five years of marriage?
LUKE: So I was just looking this up because I was curious. But actually, around 6% of adult children are estranged from their mothers specifically. And the reason is just looking this up because I was curious. And the reason. Research shows that kids who reach out later, they usually do it in their 20s or 30s when they start processing stuff differently. So October might actually be soon. Like, sooner than she thinks. Also, this is probably not helpful, but my mom didn't tell my stepdad about my older half-brother for like three years. And when he finally met him at a Denny's, it was the most uncomfortable thing I've ever witnessed. I was just sitting there eating moons over my hammy while they stared at each other. So, yeah, the longer you wait, the weirder it gets. If that makes sense. I don't know. Eggs over my hammy. Moons over my hammy. Fuck, now I want to go to Denny's. That sounds so good. But anyway, the way that you drop that into conversation is by starting the conversation with it. Like, look, there's a very important thing I need to tell you about myself. It has nothing to do with you, but I need you to know because it's a part of my story. And I just can't understand why you would hide that for something so long. If it's your husband, obviously, he's going to understand and accept that, or at least try to, and I'm sure he would want to know.
CALLER: You're right. I know you're right. It's just every time I think about saying it out loud, I feel like I'm about to confess to something terrible, which I guess I am. Abandoning your kid is pretty terrible.
LUKE: Well, I mean, yeah, I don't know. I want to tell you it's not terrible because you were divorced and the husband and wouldn't let you see him. But, I mean, the fact that you just gave up and don't seem to care about that is a little odd. That is, I mean, why? Why don't you care?
CALLER: I do care. That's why I'm calling. I just convinced myself for a long time that she was better off without me in the picture. Her dad remarried. She had a stable home. And I was a mess back then.
LUKE: Well, here's what I think you should do. I think you should sit down your husband and tell him what's up. Let him know, because it's important. And that's going to be better for you and for him to get that secret off your chest. Because that's a big secret to be carrying around your whole life. And then your kids turn in 18. Once the kid turns 18, the custody bit doesn't matter. And you can make an attempt to get back in touch and explain the situation. Say, look, this is what happened. And just be honest. Say, I tried to keep in touch. I tried to get some custody and your dad wouldn't let me. And instead of fighting that, I just thought it would be better for everybody if I went away for a while. And if you want to be part of your kid's life, then tell her that. But don't just hide it from everybody and pretend it never happened. That's not going to work. You know it's not going to work, or it wouldn't be on your mind today.
CALLER: You're right. I need to tell Mike this week, before I lose my nerve again. And maybe after that, I can figure out how to reach out to her. If she even wants to hear from me.
LUKE: Yeah, well, you can't know, but I think it's a, I think it's good that you try to reach out, at least to alleviate that guilt, that burden on your own self. Because there's no reason to go through life that way, especially if you really do want to try and have a relationship with her. Now there's no court involved. She's an adult. You're an adult. And everybody can make their own decisions. And however that goes is how it goes. Okay. We're going to take one more call up before we go to a commercial break. And we've got Vernon to the show. What's going on, buddy? How can we help you tonight?
VERNON: Got a cease and desist letter from Disney because my kids' birthday party decorations went viral on TikTok.
LUKE: Did you put a chick in it and make her gay?
VERNON: What? No. I made a Moana backdrop out of plywood and some paint. Kaylee's friend filmed it, posted it, got like two million views. Now Disney's lawyers say I infringed their intellectual property, and I need to take it down and never do it again.
LUKE: wouldn't want to mess with Disney's lawyers. They're no joke. So basically Disney's super aggressive about this stuff. Like, they'll go after anyone using their characters commercially. But if it was just a private birthday party that happened to go viral, that's actually kind of insane. Like, you weren't selling anything. It just got popular. I don't know if this helps, but there was this whole thing where a daycare had to remove a mural of Mickey Mouse because Disney threatened them. They made a daycare repaint a wall. Anyway, yeah, they're pretty ruthless about it, if that makes sense. Yeah, that Mickey Mouse, he's a pretty ruthless character. You don't want to mess with him at all. Yeah, it doesn't sound right or cool, but I'm not surprised that they did that. They seem like pretty horrible people in general down there, the old Disney. But I don't think there's much you can do. Once it's gone out to social media, it's out there. You can take down the video, but I mean, somebody's got a copy of that.
VERNON: Tell me I'm wrong, but isn't this the same company that built their entire empire on public domain fairy tales. They took Cinderella, Snow White, all of it. Made billions, and now they're coming after a dad in San Simon who spent $40 at the hardware store.
LUKE: Yeah, and you know what? You can go back after them, too, because Steamboat Willie is now public domain. So Mickey Mouse and all that, I think, is fair game for you to do whatever you want with.
VERNON: I already took the video down, sent them an email saying I wouldn't do it again. The whole thing just sits wrong with me. I try to teach Kaylee about doing the right thing, having integrity, and then I'm backing down to lawyers over a birthday party.
LUKE: Well, I mean, backing down to those lawyers is the right thing probably because it is their intellectual property, and they sent you a cease and desist letter. So, I mean, the right thing legally is to comply.
VERNON: Yeah, legally. I heard that caller earlier, Doris.
LUKE: Yeah, and what do you have to say about Doris, the one that didn't make any attempt to continue a relationship with her kid.
VERNON: She cheated on her capstone exam, got her whole career off something she didn't earn, spent 21 years building a life on a lie, and now she's got this other lie stacked on top of it, with Mike.
LUKE: Shit, I guess you're right. I was moving from one lie to the next lie and I didn't put together that there was two big lies there. I guess she's a bit of a sociopath. Jesus, Doris, you gotta stop the lion. Honesty is the best policy. That's what we always say here at Luke at the Roost. Honesty is the very best policy. policy.
VERNON: Tell me I'm wrong, but I cheated on a test in college, too. Statistics final. Got me through the class I needed for my degree. Got me the job I have now in logistics. 20 years ago.
LUKE: Yeah, I guess I could say that I've cheated on tests too, not in the same way. I never, like, copied off of somebody else's paper or had the answers written down on my hand or anything like that. But back when I started my career, I took a whole bunch of certification tests, there were these exam prep, like PDFs, books, that had the multiple choice questions and the answers in them almost word for word. And I just memorized them. But the thing is, if you're going to go through and memorize the answers to what's on the test, you've learned the material for the test. So is that cheating? Maybe. Maybe. It's hard to say, but like, like we say, it's fucking. 25 years ago now.
VERNON: I had the answers on my phone. Looked at it three times during the exam. Passed with a B. Never would have gotten to that class otherwise. Never would have gotten my degree.
LUKE: Well, nobody's perfect, and a lot of people cheated in a lot of different ways, either as textbook as that or in some more, I don't know, obfuscated way. There's a lot of cheating going along in the world, and just don't do it anymore. You know, you're a different person. You're in a different person. You're in a different way. place and there's no need for it. There's plenty of ways to pass a test without cheating.
VERNON: Yeah, different person now. Got Kaylee looking up to me. Her mom and I aren't married, which her family has plenty to say about, but we're doing it right otherwise. Teaching her integrity matters. And then Disney sends that letter and I fold immediately because I know they're right.
LUKE: Eh, whatever. You know, you fold it and that feels a little bit bad, but it would have felt worse to go up up against 900 of Disney's best lawyers. You're not going to win that one. So, yeah, just take it down. It was a birthday party. It's over. At least you get to have the party. They didn't ruin the birthday party or anything. You just told you to take the video down. Whatever, make a new video and use steamboat Willie or something else. Or make a video about what douchebags they are and expose them that way if you feel like your manhood has been threatened and you fold it unnecessarily. You know, go at them cleverly.
VERNON: I'm not going at them. I took it down. I'm done with it.
LUKE: All right. Well, thank you for the call. That's annoying that they did that to you. And, uh, you know, next time, stick it to them. That's what I say. Stick it to Disney. And now, ladies and gentlemen, it's time for a word from our sponsors. This episode is brought to you by Nile Nosh, the meal kit for people who've given up but still need to eat something. Look, we're not going to promise that it'll change your life. You're still going to die alone. But at least you can spend your remaining Tuesday evenings chopping vegetables, you can't pronounce. Each box contains three meals that take 45 minutes to make when they could have taken eight, because suffering is the only authentic human experience. This week's menu, Horissa glazed despair with quinoa, panseered regret over arugula, and our customer favorite, chicken thighs with preserved lemon and unprocessed trauma. Use code void at checkout for 15% off your first box. That's code void, because we're all just screaming into one. Nile, Nosh. You got to Might as well be complicated. We're all just screaming into the void. Here we go. Let's get some music. And next up on the line here, we've got Angie. Angie, welcome to the show. What's going on out there on your Sunday night?
ANGIE: Hey, Luke. I'm sitting here in my kitchen at one in the morning watching my dad's security camera footage from three days ago. And I just watched myself steal $140 out of his wallet.
LUKE: Jesus, a bunch of criminals. listening to this show. What the hell? Uh, wow. Oh, what, Devin? What?
ANGIE: And it's like a real disorder. It's not about the money per se. It's more like an impulse control thing. I looked it up once after my ex accused me of, never mind. But yeah, if that makes sense.
LUKE: Yeah, that makes sense. Thanks, Devin. We couldn't have done it without you. So why did you take the $150 bucks and why are you watching his security camera footage right now?
ANGIE: It was 140, and I took it because my dad, Frank, won't stop giving me money every time I see him. He's been retired for two years, and he's bored out of his mind, so he just showed. shows up at my place with cash and lectures about oil changes. I told him a thousand times I don't want his money. So I figured if I just took it without him noticing, he'd stop trying to hand it to me like I'm broke.
LUKE: That seems like the absolute wrong way to handle this. Instead, what maybe you should have done was wait for him to show up and just give you the money. That way you wouldn't have to steal it from him. So that answers half of my question. My other half of the question is, why are you watching his security cam footage?
ANGIE: He gave me the login two months ago, because he wanted to me to check if his mailman was acting suspicious. I forgot I even had it until tonight. I couldn't sleep. Open my phone, saw the app and thought I'd see what the old man does all day. Turns out what he does is watch me walk into his house Thursday afternoon while he was at the hardware store, go straight to the kitchen counter where he leaves his wallet, and take the cash out.
LUKE: Yeah, that's not a very logical thing for you to have done. And neither is watching your dad's security footage camera. I mean, you could have definitely run into something you didn't. not want to see.
ANGIE: Well, I definitely ran into something I didn't want to see. I'm watching myself commit a crime against my own father, in high definition. He's got one of those new cameras that does night vision and everything. I can see my face clear as day.
LUKE: Yeah, like every camera for the last 20 years does night vision and everything. Do you think that he watched the security cam footage? Because I don't think he did. I think he's got that app on his phone and he's never. going to look at that unless there's a reason to, unless he suspects somebody stole $140 out of his wallet, but why would his daughter, his loving daughter, that he just gave $140 to steal $140 from his wallet? That makes no sense. So, I mean, I don't know why you're bothered by this. You knew you stole the money. You obviously did it, so it's not surprising information to you. And I doubt that he's even reviewed the footage. If he has, then good, because you're a criminal.
LUKE: Next up we've got Earl. Earl. Earl, welcome to the show. What's going on in your life? Is it as crazy as what Angie has going on? Because that was pretty fucking crazy.
EARL: Hey, Luke. Appreciate you taking my call. First time, little nervous here. No, it's not that kind of crazy. Look, I run a landscaping company. Right? Small operation. And about six months ago, I hired this kid, Mateo.
LUKE: Okay, tell us about Mateo. What are you calling for? Congratulations on your landscaping company.
EARL: Thanks. So Matteo, he's 20, 22. Good worker, shows up on time, does the job. But here's the thing. Three weeks ago, I'm at the nursery picking up some desert willow saplings. And I see Mateo there with my girlfriend, Diane. They're laughing. She's got her hand on his arm. And when I walk up, they both get this look like I just called them doing something.
LUKE: Uh-oh. That's not good. That's not good. Your girlfriend's out with your employee, the younger kid. Oh, you maybe did. You maybe did catch them doing something.
EARL: That's what I thought. So I confront them right there, and Diane says they ran into each other by chance. Mateo says the same thing. But Luke, here's where it gets weird. I let it go. I didn't fire him. I didn't even really press Diane on it.
LUKE: Okay, so where does it get weird?
EARL: Because last week, I see them again. This time, at the coffee shop on Bullard Street. Same thing, laughing, close. And when they see me, they get all awkward.
LUKE: Maybe they're planning a secret birthday party for you. A surprise party. I think that's probably what it is. They're probably just meeting a few times a week to settle all of the things that have to happen for your big birthday party.
EARL: My birthday's in November, Luke. It's March.
LUKE: Yeah, but this requires a lot of planning. There's a lot of parts involved. You know, there's the catering, and then there's the Disney characters and all the lawyers that have to deal with that. So you don't know how many steps are involved in planning a birthday party for something like this.
EARL: You're busting my balls here. Look, I know what this looks like. But here's the thing. When I mentioned it to Diane the second time, she got defensive and said I was being paranoid. And Matteo, at work, he acts completely normal.
LUKE: No, I don't think you're being paranoid. If they're hanging out together, outside, without you there, that's inappropriate. And they both know that. So it sounds like something's going on. Regardless of what it is, it's inappropriate. And you're very right to be unhappy about that. I don't know if that's the type of thing you can fire somebody for. It's your company, so maybe. I don't know. But you can definitely have a serious conversation with the girlfriend about it.
EARL: That's the thing, though, Luke. I haven't had that serious conversation. I keep avoiding it. And I think I know why.
LUKE: Okay. Why are you avoiding it?
EARL: Because if I push it, if I really demand answers, then I have to deal with whatever the truth is. Right now, I can still go to work, still come home to Diane, still pretend everything's fine. The second I ask the real questions, that all falls apart.
LUKE: No, it doesn't. It's already falling apart. And you know it. And it's bothering you and you're calling a radio station about it. Like, you can't hide from what's going on. You're very, I mean, you're perceptive.
LUKE: You're going to have to deal with this one way or another. It's just going to get worse and worse. And you can put it off and ignore it for a little while and pretend like it's okay. And, you know, keep sleeping with your girlfriend and all. But it's going to fall apart. So I think you need to deal with it. Stop being the cuckold here and man up.
CALLER: You're right. You're absolutely right. I've been acting like if I don't look at it directly, it'll just go away. But it won't. I need to talk to Diane tonight when I get home.
LUKE: Yeah, if you don't address that, you might have a child you're not expecting coming very, very soon. So with that, ladies and gentlemen, we're going to have to take another break for a word from our sponsors. I'm just going to say it. Your penis isn't working. I said it. It's out there now. The word is in the air. We're all adults. Some of us are adults whose penises work, and some of us are adults who are listening very carefully right now, while pretending to adjust the radio so the person in the passenger seat doesn't see their face. It's fine. It happens to, and this is the real number, roughly half of all men over 40 at some point. Half. You're not special. You're not special. You're not broken. You're not the first guy this happened to and you're not going to be the last. You're just the guy it's happening to right now. And right now you have two options. Option one, do nothing. Keep staring at the ceiling. Keep blaming the altitude, the stress, the medication, the alignment of mercury, the fact that you ate dairy, none of which are the problem. Option two? Sandstone. $45. A doctor who has literally heard everything and will not Lynch. Medication that works, a box that reveals nothing, and the ability to walk into your bedroom like a man who handled his business instead of a man who's about to suggest watching another episode of something. Sandstone, I said the word. You heard the word. Now go to the website.
All right, and we are back. Not a bad job there, Devin, and it looks like our phone systems are working pretty well, so you might not be completely useless after all. you're still going to have to work on getting the coffee, though, because that was a serious fumble. And I don't know how many more times, how many more fumbles that I have in me before we're going to have to, you know, find another intern. But next up on the caller list here, we've got our buddy Silas. Silas, welcome back to the show. What's going on down at the Wellspring, my friend, brother?
SILAS: Luke, good to hear your voice, brother. Listen, Marcus left. Packed up his truck yesterday morning and drove off.
LUKE: All right. Problem solved. It sounds like everything's good down there at the old community.
SILAS: Yeah. I mean, that's what I thought at first, too. Something about it just doesn't sit right, though. He didn't say goodbye to anyone. Didn't go through a closing ceremony. Didn't have a final circle with the community. Just...
LUKE: Hey, man, you got to let people go. And it sounds like... It sounds like he was being a pain in the ass anyway, so good riddance.
SILAS: right. You're absolutely right. And I know that. I do. But here's the thing. He left a note in my office. Just sitting there on my desk when I came in yesterday afternoon. And it said he was sorry for disappointing me again.
LUKE: Well, you know, it doesn't sound like he really disappointed you. I think you're better off with them both out of the picture, because that was really bothering you for a long time. And now Kara and Marcus are gone. focus your full attention back on your flock.
SILAS: That's just it, though, Luke. The more I think about it, the more I realize, Cara leaving, didn't bother me nearly as much as Marcus leaving does. And that note, sorry for disappointing you again. Brother, that's the second time he said that to me. Remember when he told me it two in the morning that he stayed because he didn't want to let me down. I keep reading that note, and I'm asking myself, what did I do? What did I say to make this man feel like his whole life? Choice was about not disappointing Silas.
LUKE: I don't know. You haven't given me any indication that you're operating in that way and making people feel like they need to live up to your expectations. Are you? Tell us about what a normal day is like at the Wellspring. Why might people be thinking you're overpowering or hard to live up to?
SILAS: A normal day. I mean, We wake up around sunrise, share breakfast together as a community. Everyone has their tasks, garden work, maintenance. Someone's always cooking. We have morning meditation, then people do their own thing during the day. Evenings, we gather for dinner, maybe some music, conversation.
LUKE: Okay, but none of that seems to have anything to do with living up to your expectations. What is it that you expect out of your people at the Wellspring? What makes you think that Marcus might have had a reason to disappoint you. What ideals are you pushing them to live up to?
SILAS: Well, we have the unbinding ceremonies twice a month. That's where we shed our conditioning, our shame about our bodies, and our desires, and I lead those. I guide people through letting go of what society told them they should be.
LUKE: Okay, so you guide them through the unbinding ceremonies, but that's only twice a month, and he didn't leave during an unbinding ceremony. And after the ceremony, is there still some other reason that you think somebody in your community might feel like they have to live up to your expectations? Have you set your expectations? And that's what I'm trying to get to, Silas. So help us out here.
SILAS: Yeah, okay. Fair question. I guess I do talk a lot about the current, about phowing with it, not resisting it. probably said more than once the people who leave are choosing fear over growth.
LUKE: Yeah, okay. I hear that. I'm hearing what you're saying. You talk about the current, flowing with the current, and you recommend that people don't leave. But I don't think that's enough. I think there's something else underneath here that you're not telling us about. I want you to be completely honest with me and the listeners at home and tell me what it is that you think that Marcus is talking about.
SILAS: All right, all right, Luke. When Teresa and I started the wellspring seven years ago, I told everyone that I was the one who could see the current most clearly, that I had a gift for it. That following my guidance was the fastest path to enlightenment.
LUKE: Okay. what is that guidance other than have the unbinding ceremonies twice a month? What are you guiding them to do? What could Marcus have been referring to when he said he let you down? Obviously, he participated in your unbinding ceremonies. It wasn't that. Kara left. Kara wasn't him. He brought her back to your flock for a little while, and then she left again. So it wasn't that. What do you think it was that he was felt like he was undercutting your expectations on.
SILAS: The shared intimacy nights. I teach the possessiveness as ego. The true love means letting go of ownership. And Marcus, he participated. But I could always see it in his eyes.
LUKE: Okay, well that's pretty understandable. You've got to see where somebody might feel that way when you're letting somebody else bang your wife. Even if they do see the current very clearly, that could get under somebody's skin a little bit. So do you think what you're doing is still the right thing to do? Do you think that the other people in your flock are feeling the same way? Or do you think that Marcus, good riddance to him? It's obviously, it's bothering you. You keep calling in talking about Marcus. Marcus has obviously made a huge impression on you. Is that just because you enjoyed the company of Kara? Or was it that you enjoyed the company of Marcus?
SILAS: No, no. It's not about enjoying anyone's coming in that way. Marcus was one of the first people to join us. He believed in what we were building when it was just me and Teresa and three other people living in tents.
SILAS: He helped me dig the wells, build the structures.
LUKE: Yeah, well, I understand that, but you just said yourself that it was the shared intimacy nights that you thought is what drove him away. And why do you think that is?
SILAS: Because he never actually wanted to participate. He did it because I thought that it was the path to transcend. And now I'm sitting here wondering if I convinced a man to do something that went against everything he believed in just so he could stay in my good graces.
LUKE: Well, isn't that what a leader of a society like your own does? Isn't that literally your job is to convince people to do what you think is best because you see the current more clearly than anybody else? I don't understand why this is bothering you. That seems like everything's working as designed.
SILAS: You're right. You're completely right. And that's what's making me sick to my stomach, Luke. Everything is working as designed. I designed a system where a good man felt like he had to betray his own values to avoid disappointing me.
LUKE: All right. Well, now that you've come to that conclusion, what are you going to do about it? Are you going to, are you going to say no more shared intimacy nights? Like, how are you going to make good on this? Or are you just going to ignore it and move on? your path forward. What does the current tell you?
SILAS: I don't know. That's the honest answer. If I cancel the intimacy night, am I doing it because it's right or because I'm afraid more people will leave? And if people do leave over it, doesn't that prove they were only there for that anyway? Something about it just doesn't sit right either way.
LUKE: Well, there's a couple of things there. The intimacy nights are they, they're not a requirement, right? People don't have to participate if they don't want to. The people that, or is it a requirement? Do you make them participate? And also, who's really benefiting from the intimacy nights? What are they supposed to provide to the people that aren't you? I mean, obviously, I mean, what you get out of it is pretty apparent, but what is everybody else?
SILAS: They're not technically required, but when the founder of the community teaches that participation is how you shed your ego and find true freedom. And when everyone else is participating, what choice to someone like Marcus Rehn?
DEVIN: have and who benefits? So I just looked this up real quick, and there's actually a term for this. It's called coercive control, where, like, technically nothing's required but the social structure makes it so people can't really say no without consequences, if that makes sense. It's like a pretty well documented thing in group dynamics research, which this is going to sound weird, but this is kind of reminding me of my sophomore year roommate who started this voluntary house cleaning rotation, but then would get really. quiet and disappointed if you didn't do it. And eventually, I was scrubbing the bathroom at 2 a.m. just so he wouldn't give me that look. Anyway, yeah, the not technically required thing is actually like a whole studied phenomenon.
LUKE: Yeah, I bet it is. This is Silas. He's a well-studied man. I think Silas, I think you benefit, right? That's what's going on. The leader benefits from the shared intimacy nights. And like Devin just told us, people do feel that it is required, even though it's not. And it seems like you would know that, right? Because you're not a dumb man.
SILAS: Yeah, yeah, I know that. The more I think about it, the more I've always known that. Teresa told me two years ago that some of the younger women felt pressured. And I told her they just needed more time to work through their conditioning.
LUKE: Yeah, or maybe you need some more time to work on your leadership so that they don't feel pressured. If you truly want to have those shared intimacy nights and you believe in that for spiritual purposes, make it truly optional. And make sure that you let everybody know that they don't have to participate. You don't require that of them. It is not something that's going to disappoint you or keep them out of the grace of the current if they don't participate. Just let them know it's okay. And when they're ready, if they want to, then it's open to those that are willing. How's that sound? Is that a good enough way to move forward here?
SILAS: That sounds like the right thing to do. But Luke, if I do that and half the community stops coming to the intimacy night, then I have to face the fact that half my community has been doing something they didn't want to do for years because of me.
LUKE: Well, sometimes leaders make mistakes, and the best thing that you can do, Silas, is live up to that and acknowledge it and course correct if you're not. have to. So it sounds like an interesting study to me. I think you should do that and see if you lose half your members, then okay. You were pushing too hard. But if they come back, then maybe you've found a better way. It's okay to grow in your leadership style and your ideals. That's to be expected, even for you, even for the leader, mostly for the leader. Like nothing stays the same. And the whole time and don't give yourself any room to improve, that's not really the best leadership. So I think this is about you becoming a better leader.
SILAS: You're right. I'll call a gathering tomorrow. Tell everyone that the intimacy nights are truly voluntary from now on. And the choosing not to participate doesn't mean you're less committed to the wellspring or to the current. And I need to apologize to the people who felt they have no choice.
LUKE: Yeah, I think that's a good way to move forward, and that you should also introduce another ritual for those that don't feel like the shared intimacy nights are for them. There are other ways that you can get to the same place without necessarily boning everybody in that community.
SILAS: That's, yeah, we could do individual meditation retreat or expanded on binding ceremonies that focus on other forms of vulnerability.
LUKE: All right, buddy. All right, brother. It sounds like we got some movement here, and I'm going to have to take another caller, but is there anything that you'd like to put out to our audience tonight?
SILAS: Just that if anyone out there is looking for a place where they can truly be themselves and find community, the Wellspring is always open to new seekers. We're at the Wellspring Community.org. And, Luke, thank you. I mean that. you could give some guidance to our new intern, Devin here. His soul seems conflicted, and he could use a bit of guidance. And I think if you need some more participants at your shared intimacy night, he might be the perfect candidate. Brother Devin, you're welcome any time. Sometimes the youngest souls need the most unbinding. We've got a spring equinox retreat coming up in a few weeks.
LUKE: Appreciate you, Luke.
SILAS: Appreciate you too, buddy. You have a wonderful night.
LUKE: And what do you think of that, Devin? Would you go do a shared intimacy night with Silas at the Wellspring?
DEVIN: I mean, I don't really know what that is per se, but it sounds like a couple's thing. I'm not really looking to do that with Silas specifically. No offense to him or whatever, but that's not my situation. I went to one of those tantro workshops once with my ex, actually, and we got asked to leave because she wouldn't stop laughing during the eye contact part. It was like $45 and we were there for maybe 20 minutes. So I guess it depends on what the vibe is, but probably not, if that makes sense.
LUKE: Yeah, I think you know what the vibe is down there at the Wellspring. It's a community with an unbinding ceremony and the intimacy nights, and they worship the flow of the current. I don't fully understand it, but Silas seems like a pretty decent dude. think you'd like it a lot. But here's what I'm trying to get at. If you forget my coffee one more time, I'm sending you down to Silas.
DEVIN: Yeah, okay, got it. I'll get the coffee. I'm not trying to go to the Wellspring.
LUKE: I looked it up earlier, actually, when that caller mentioned it, and there's like almost no information online about it, which is kind of weird, just a Facebook page with no posts since 2019. So I don't really know what the unbinding ceremony is, but I'm good. I'll have your coffee tomorrow, Black iced coffee from the mark before the show. I promise.
DEVIN: All right, you better.
LUKE: And next up, we've got, let's see another caller here. We've got Shonda. Shonda, welcome to the show. How can we help you tonight?
SHONDA: Hey, Luke. All right, so here's my situation.
LUKE: Hit me with it.
SHONDA: My kids' little league coach. Great guy, been coaching for three years. The kids love him. Parents think he walks on water. I found out he did 15 years for Army robbery in another state. He's been clean ever since, completely turned his life around, but nobody here knows. And I'm sitting on this information wondering what the hell I'm supposed to do with it.
LUKE: So I looked it up, and Little League actually requires annual background checks for all coaches. Like, it's a national policy. They do a nationwide criminal search and check the sex offender registry. Either he passed that check or the league isn't following their own rules, which is a whole separate issue, if that makes sense.
SHONDA: Yeah, that's what I thought.
LUKE: So it sounds like he passed a background check. Honestly, Shonda, for armed robbery, that's kind of cool. You know, if he robbed a bank or whatever or robbed a plane or whatever it is he robbed he robbed a plane or whatever it is he robbed. That's a cool thing. That's not like a kitty touching thing. So I wouldn't be too concerned about it. around he's did his time or didn't do his time. It doesn't really matter. But as long as he's a good coach and there's no weird sexual stuff going on there, I think you can let that go.
SHONDA: Yeah, I mean, you're right. That's what I keep telling myself.
LUKE: Well, you don't have to let it keep you up at night because he's not teaching your kids how to rob Banks. You don't have to worry about that. His stuff is done. Was pretty cool. We like him for that. This is America. So go to teach him team. That's what I say.
SHONDA: All right. Appreciate it, Luke.
LUKE: You're very welcome. Glad I could help you. All right, ladies and gentlemen. Well, thanks for tuning in with us again tonight. Devin, what did you think at today's show? Did you think this went better than yesterday's show?
DEVIN: Yeah, honestly, I think it did. Like, yesterday felt kind of all over the place. But today, people were actually calling in about stuff that mattered to them. That guy with the RV situation. And the woman talking about her sister. Those felt real, if that makes sense. I don't know if the numbers were better or whatever, but it felt like people were actually listening and wanted to talk. So, yeah, I think today was good. I mean, except for me for getting your coffee. But the show itself was better.
LUKE: Yeah, I think it was a pretty decent show, too. I don't know what show you were listening to because there was no guy with an RV situation or a woman talking about her sister. So obviously you're not paying attention. But I think the show went pretty well. Do you, what do you think we should do differently for tomorrow's show? Anything? Do you have any suggestions to make the show better?
DEVIN: Yeah. Sorry. I don't know why I said that. I think I was thinking about yesterday or something. I was paying attention. I just got confused for a second. For tomorrow, I don't know. Maybe we could do like a theme or something. Like if there's a topic people are actually talking about around here, we could lead with that instead of just taking whatever calls come in. Or I could pull some local news stuff and we could have like three things ready to go in case it gets slow. I noticed today there were a couple dead spots where we were just kind of waiting. But I don't know. You're the one who's been doing this. I'm just saying what I noticed, if that makes sense.
LUKE: Yeah, that makes sense. We've tried some theme-related things before. The thing is, the themes around here are, do you remember what Lordsburg used to be like 50 years ago with a picture? So that doesn't really translate that well to radio. It's kind of of, I don't know, we'll see what we could do. I like the idea of the local news stuff, though. So why don't you work on that? We'll think about some local news situations and see if we can make tomorrow's show even better.
DEVIN: Yeah, I can do that. I'll pull some stuff tonight and have it ready before we go on. I'll look at like the town council stuff, any county news, maybe some state things that affect people here. And I'll make sure it's actually interesting, not just like budget reports or whatever things people would actually want to call in about. I'll have it organized you can just grab whatever you need. And I'll have your coffee.
LUKE: All right. Well, ladies and gentlemen, it's been another successful show. Thanks for tuning in. And we'll talk to you again tomorrow.

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say voice="woman">Luke at the Roost is off the air right now. Leave a message after the beep and we may play it on the next show!</Say>
<Record maxLength="120" action="https://radioshow.macneilmediagroup.com/api/signalwire/voicemail-complete" playBeep="true" />
<Record maxLength="120" playBeep="true" />
<Say voice="woman">Thank you for calling. Goodbye!</Say>
<Hangup/>
</Response>