I Built an AI That Reads Your Face Against Your Own Words and Won Most Creative at the Backboard Hackathon
ORACLE. The AI agent that lives your day before you live it. Your mental crack into tomorrow.
Most wellness apps ask how you're feeling. ORACLE doesn't ask. It intercepts.
I built ORACLE for the Backboard.io Spring Challenge 2026 and won the Most Creative prize. Here's the full story of what I built, why I built it, and exactly how Backboard's API made it possible.
The Idea
I wanted to build something that solved a real problem I noticed in myself and people around me: the gap between how we say we're doing and how we're actually doing.
Every morning, people open wellness apps and tap "I'm fine" or "energy level: 7/10." But that self-report is often wrong, not because people lie, but because we don't notice what our bodies are already showing.
ORACLE closes that gap. It cross-references what you say against what your face reveals.
What ORACLE Does
ORACLE runs a daily three-part mental performance loop.
1. Morning Scan
Five sharp questions covering your schedule, sleep quality, main uncertainty for the day, energy reading, and physical state. Not generic wellness questions. Five data points that together surface the hidden risk in your day.
2. Face Reading
After the five questions, ORACLE asks for a selfie. It runs that photo through GPT-4o vision and cross-references it against your answers. If you said "energy: high" but your face shows dark circles and tension, ORACLE names that gap directly.
3. Mid-Day Check-In and Evening Debrief
Three hours after the morning scan, ORACLE checks in with one sharp question about how the day is going relative to the morning prediction. At the end of the day, the evening debrief closes the loop and asks whether the morning prediction came true.
The Technical Stack
ORACLE is built entirely on Backboard's API. Here's exactly what I used and why.
Thread Memory, Persistent Context Across Three Sessions
The morning scan, mid-day check-in, and evening debrief are three separate user sessions. Normally that means three separate conversations with no memory.
Backboard's thread management solved this natively. I assign the same thread_id across all three sessions and Backboard holds the full context automatically.
const response = await fetch('https://api.backboard.io/thread/message', {
method: 'POST',
headers: {
'Authorization': `Bearer ${BACKBOARD_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
thread_id: userThreadId,
message: userMessage,
system_prompt: ORACLE_SYSTEM_PROMPT
})
});
No database. No custom memory system. One thread ID, and ORACLE remembers the user's full day across all three sessions.
Model Routing, Vision Only When Needed
The morning scan uses GPT-4o-mini routed through Backboard. The face reading requires vision capability, so it routes to GPT-4o with the image attached. Backboard handles the routing.
const faceResponse = await fetch('https://api.backboard.io/thread/message', {
method: 'POST',
headers: {
'Authorization': `Bearer ${BACKBOARD_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
thread_id: userThreadId,
message: analysisPrompt,
image_base64: base64Image,
model: 'gpt-4o'
})
});
TTS Voice, Professional Speech Synthesis
The morning briefing is read aloud by ORACLE using Backboard's TTS API routed through OpenAI's onyx voice model. Deep, authoritative, deliberate. Browser synthesis is the fallback only if the API call fails.
const ttsResponse = await fetch('https://api.backboard.io/tts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${BACKBOARD_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: briefingText,
voice: 'onyx'
})
});
One API key. Thread memory, model routing, multimodal vision, and professional voice. Backboard handles all of it.
What I Learned
Ship the weird idea. The face reading feature was the one I almost cut because it felt too ambitious. It ended up being the most talked about part of ORACLE.
Thread memory is underrated. Most people building on LLM APIs spend hours building custom memory systems. Backboard's thread management eliminated that entirely and let me focus on the product.
Voice changes the experience completely. Switching from browser synthesis to Backboard's TTS API transformed ORACLE from a chat interface into something that felt like a real product.
Try It
ORACLE is live at oracle-six-snowy.vercel.app
Code is on GitHub at github.com/Terese678/ORACLE
What's Next
Backboard just released audio input (STT) and expanded voice models including ElevenLabs. The next version of ORACLE will let you speak your morning scan answers out loud instead of typing. Full voice-in, voice-out loop with no screen required at 6 AM.
If you're building on AI APIs and haven't tried Backboard's thread memory, I'd strongly recommend it. It removed an entire layer of complexity from ORACLE and let me focus on what actually matters, the product.
Built in Nigeria. Shipped under deadline. Won Most Creative.
Follow me here on DEV for what comes next.
Top comments (0)