Personal Project · Ambient AI · Edge Device

Ceiling HUD

The most over-engineered possible answer to the question, "do I really have to get up?"

There's a Raspberry Pi projecting onto my bedroom ceiling. I roll over at 5am, press one button, and it tells me the single thing I need to know. The interesting part isn't the projector — it's the redesign. The first version dumped weather, calendar, and time at a brain running on 12% battery. The new version runs all of it through an AI agent that knows my routine and projects back one human sentence instead of a dashboard — then, through a little speaker on the Pi, it says that sentence out loud in a voice that matches the moment, so I never have to open my eyes.

🍓 Raspberry Pi 🤖 Agent-as-Decision 💍 Oura · 🗓️ Calendar · ⛅ Weather 🐾 Knows Taco's schedule 🔊 Speaks aloud · ElevenLabs
Bedside Projection live on the ceiling
5:14 AM · Tuesday · 41°F & clear
You went to bed at 1:14am like a college sophomore. Nothing's on fire until 10. Close your eyes.
reads: Oura sleep calendar
🌙 calm, soothing voice
tap to re-roll the morning
↑ This is the actual interface. One button, one sentence. Go ahead — press it.

A dashboard makes a half-asleep brain do the work. A good agent does the work and hands you the decision.

Anyone can pipe six APIs onto a screen. The senior move is deciding the output should be five words. Ceiling HUD is a small, deliberately silly stage for a serious idea: the right interface for an AI system isn't always more data — sometimes it's one sentence, delivered at exactly the moment a decision needs to be made, to a user who has zero capacity to process anything more.

❌ Version 1 — the data dump
What a HUD usually does
5:14 AM
41°F, clear
Sleep: 6h 2m
Next event: 9:00 Standup
Steps: 0 · Readiness: 78

Five facts and an implicit homework assignment: now you do the math. At 5am, eyes barely open, that's exactly the wrong ask. I built this version first, used it for weeks, and realized I was still lying there doing arithmetic.

✅ Version 2 — the decision
What an agent that knows you does
"Six hours of sleep and a 9am standup. Skip the heavy lift, do the 20-minute Peloton, you'll still make coffee."

Same inputs. But the synthesis already happened. There's no math left to do — just a decision to accept or ignore. The brain stays off. That's the whole point.

Senses → Judgment → Voice

Six signals flow into an agent that's been given my preferences and my routine. It fuses them, works backward from my first real obligation, and decides the single most useful thing to say right now. Out comes one sentence — projected to the ceiling.

SENSES JUDGMENT VOICE 💍 Oura · quality & readiness 🏋️ Workout · type & place 🐾 Taco · daycare? ⛅ Weather 🗓️ Calendar · first commitment ⏰ Current time The Agent that knows me • back-plans true wake time • weighs sleep debt vs. the day • picks ONE thing to say One sentence projected + spoken aloud
Personal / health signals
Context signals
Reasoning
Output

Six signals, one answer

None of these are new plumbing — most already flow through infrastructure I'd built for other projects. The agent just gets to read them and care about the right ones.

💍
How — and how well — I slept
Oura knows my real sleep onset, my readiness, and — the part that matters most — my sleep quality. Not just when I went under, but whether the night was actually restful. A fragmented, low-quality night tilts the whole morning toward more rest, even when the hours on paper look fine.
source: Oura → my Health Tracker
🏋️
Today's workout — and where
Cardio, lifting, or yoga sets the duration. But location is the sneaky variable: a Peloton in the next room is 20 minutes; a session at the gym adds a drive each way. The agent budgets accordingly.
source: Peloton + plan → Health Tracker
Is Taco going to daycare?
Taco's a tiny white chihuahua mix — all ears and attitude. If he's got daycare, that's a drop-off I have to drive: a hard time block before my own day even starts. The agent treats his logistics as a first-class input, because honestly, he's the one with places to be.
source: family calendar flag
Weather
Rain turns an outdoor run into a Peloton ride and adds a few minutes to any commute. Small input, but it's the difference between "go run" and "the bike exists for exactly this."
source: weather API
🗓️
My first real commitment
The agent doesn't care about my whole day — just the first hard edge. A 9am standup is the anchor everything gets planned backward from. A clear morning means "sleep, you've earned it."
source: Google + Apple Calendar
What time it is right now
The anchor for everything. The same set of inputs produces "go back to sleep" at 4:58 and "feet on the floor" at 6:40. Timing is the difference between a useful nudge and a cruel one.
source: the Pi's clock

It plans backward from the day

The core trick is simple and human: don't tell me what time it is — tell me how much sleep I have left. So the agent starts at my first obligation and subtracts everything that has to happen first.

1
Find the anchor. The first hard commitment on the calendar — today, a 9:00 standup.
2
Subtract the morning. Workout duration, Taco's drop-off, the commute if there is one, and a "be a person" buffer for coffee and a shower.
3
Weigh the sleep. Cross-check the real wake time against how much — and how well — I actually slept. A short night, or a restless low-quality one, can buy back rest or talk me out of the heavy lift.
4
Say one thing. Translate all of it into a single sentence pitched at whatever time it currently is.
Worked example · it's 5:10 AM
First commitment9:00 AM
− Gym lift60 min
− Taco → daycare20 min
− Commute (both ways)15 min
− Be-a-person buffer35 min
True feet-on-floor6:50 AM
So the ceiling says"You've got 100 more minutes. Sleep — I'll wake you when it actually matters."

Same six inputs. Very different mornings.

Every line is doing two jobs: it's a little funny, and it's proof the agent actually fused multiple signals before it opened its mouth. The "reads" tag shows what went into each call.

You went to bed at 1am like a college sophomore. Nothing's on fire till 10. Close your eyes.
reads: Oura sleep calendar
🌙 soothing voice
Lift, drop Taco, 9am hard stop. The math doesn't math if you snooze. Feet on the floor.
reads: workout Taco calendar time
☀️ stern voice
It's pouring. The Peloton exists for exactly this. Same sweat, dry socks.
reads: weather workout
☀️ stern voice
Oura says you're 91% recovered and it's leg day. Go be a problem for the squat rack.
reads: Oura readiness workout
☀️ stern voice
Five hours of sleep and a wall of meetings. Hydrate, skip the heavy lift, don't be a hero today.
reads: Oura sleep calendar workout
☀️ stern voice
It's 4:58. I admire the enthusiasm. We are not doing this. Back to sleep.
reads: time sleep debt
🌙 soothing voice
Seven hours in bed, but you barely went deep. The clock lies; the recovery doesn't. Take another 40.
reads: Oura quality readiness
🌙 soothing voice

Don't even open your eyes

A projection still asks you to look. The next version adds a small speaker to the Pi and reads the line out loud — so I can roll over, thumb the hidden button, and never lift an eyelid. And it isn't one flat robot voice. It matches the call the agent just made.

🌙
Soothing, when it's sleep
"Back to sleep" should sound like someone gently telling you it's okay — slow, soft, low. A calm voice, quiet on the speaker, the pace pulled right back. The message and the delivery agree with each other.
calm voice · slower · softer
☀️
Stern, when it's go
"Feet on the floor" should land with a little spine. A firmer voice, brighter and a touch louder, crisper pacing. You hear the verdict before your brain has even parsed the words.
firm voice · brighter · punchier
Why it feels instant
The button doesn't kick off a cold pipeline. The agent already knows tonight's inputs, so it pre-renders the current line and its audio in the background, refreshing as things change. Press → it just plays a clip that's already waiting. (Any cold path uses ElevenLabs Flash — audio back in well under a second.)
pre-rendered cache · ElevenLabs Flash
🔊 On the Pi: my ElevenLabs voice — the same one that already reads my portfolio briefings. Two voices, keyed to the agent's call: soft and slow when it's sleep, firmer and brighter when it's go.

It's the same idea, three times

A ceiling clock looks like a toy next to a portfolio analyst. But look at what they actually do — they're the same move in three different rooms. That repetition isn't an accident. It's how I think about where AI belongs.

📈
Portfolio Intelligence
9 agents → one call
"I got tired of checking five apps before a portfolio decision, so I built a system that decides for me." Many noisy market signals, collapsed into a recommendation.
💍
Health Tracker
6 sources → one truth
Oura, Peloton, Apple Health and more, mastered into one clean record in BigQuery. Ceiling HUD reads this — it stands on the data platform I already built.
🛏️
Ceiling HUD
6 signals → one sentence
The same collapse, at the most absurd possible scale: an AI agent, a Raspberry Pi, and a projector, all so I don't have to think before coffee.

Three projects, one philosophy: build agents that turn noise into a single, clear decision — whether it's a high-stakes portfolio call or whether I should hit snooze.

Want the serious version of this thinking?

The same design philosophy — agents that collapse complexity into a single confident decision, with guardrails — is what I bring to enterprise data and AI leadership.

See Portfolio Intelligence → Get in touch