-
-
Speak: text or voice input, with a clearly labeled fictional sample shown in the polished interface.
-
Feel seen: review feelings and needs before audio. Live sessions let users edit the reflection or skip a demand.
-
Focus listening: amber light, gentle particles, speed and seek controls, and optional browser-local ambience.
-
Take it with you: a downloadable reminder with a thought to keep, an optional choice, and adaptable boundary wording.
Inspiration
“I care about them. I'm exhausted. Why does taking a break feel selfish?”
Innerlight begins with a familiar tension: people who give generously can become so attentive to everyone else's feelings that their own needs grow difficult to hear. We wanted to make a little room for those needs, without turning self-care into another performance.
The idea grew from a personal meditation-audio experiment created before the hackathon. Its most meaningful quality was specificity: acknowledging someone's actual circumstances and offering care without requiring them to become happier, stronger, or more productive first.
During this hackathon, we built a new interactive application around that insight, adapting audio engineering patterns from the earlier experiment. Our guiding line is simple: Give love. Include yourself.
What it does
Innerlight takes users through three steps: Speak → Feel seen → Take it with you.
First, write about a difficult moment or record a short voice message. Then review a possible understanding of your situation, feelings, needs, and a demanding expectation you might be placing on yourself. You can edit that understanding or skip the suggested expectation. Your confirmed words guide what happens next.
Innerlight generates a short English self-compassion reflection and narrated audio. You can use everyday language or invite optional light-and-nature imagery. A reminder brings the experience back into daily life: one thought to keep, one optional small choice, and words you could adapt to express a need or boundary.
Listening has its own space. Warm glass-like surfaces and amber halos lead into a dark forest-green focus room. Play, pause, seek, skip fifteen seconds, or choose a comfortable playback speed. Optional soft ambience is made locally in the browser and follows playback. It is separate from the downloadable narration.
Save the reminder as a PNG card or text, copy it, or download the narrated reflection as a WAV. Listening is enough; taking action can wait.
Three clearly labeled fictional sample journeys offer an immediate demo. Their prewritten content is kept separate from live personalization.
How we built it
We built the English interface with React, TypeScript, and Vinext, and deployed it on Cloudflare Workers. Alibaba Cloud Qwen services handle structured reflections, speech recognition, and English narration. Credentials stay on the server.
Microphone input uses an AudioWorklet, visible input levels, a 45-second limit, and resource cleanup. The audio pipeline segments narration, applies a consistent voice description and seed, repairs WAV headers, and assembles the recording.
The focus room and main view share one audio element, keeping playback position and speed consistent. Session handling preserves a user's live draft while browsing samples or revisiting a previous reflection. PNG export draws the reminder into a downloadable image.
Live text, recordings, and scripts are processed by Alibaba Cloud under its service policies. The application does not write disclosures or generated audio to a long-term database. Active results stay in page memory unless the user downloads them.
Challenges we ran into
Audio needed reliable handling across provider download URLs, file headers, and the edge runtime. We also had to make cancellation, retries, and returning to edit preserve the user's work.
Another challenge was keeping the experience honest. Sample edits must never return an unrelated prerecorded response. A previous reflection must remain distinguishable from a newer draft. Optional imagery must remain an invitation, without becoming a promise about health or relationships.
We added bounded routing for explicit immediate-danger statements and an always-visible path to real-world support. These safeguards cannot identify every possible situation.
Accomplishments that we're proud of
We verified the complete live journey: edited needs informed a new English script, real audio was generated, and the browser played and downloaded it. All three sample journeys work.
The polished release passes 46 automated tests, the TypeScript check, and the production build. Browser checks covered narrow layouts, playback controls, focus entry and exit, optional ambience, draft preservation, and a visually inspected PNG reminder. Generated recordings were transcribed to check fidelity against their scripts.
What we learned
A single accurately heard detail can make a reflection feel personal. The opportunity to correct the system matters as much as the wording it generates.
We also learned that care includes practical interaction details: keeping someone's draft, letting them skip a prompt, and allowing them to stop without losing their work.
What's next for Innerlight
Next, we want consent-based user testing focused on understanding, comfort, usefulness, and uncomfortable or inaccurate responses. We would seek qualified mental health review, reduce generation latency, refine voice consistency, and extend real-device microphone testing.
Innerlight is an emotional well-being prototype. It does not diagnose or provide treatment, and its clinical effectiveness has not been established.
Demo access
Explore the public project homepage and listen to three clearly labeled fictional sample journeys without signing in. This public preview plays existing AI narration; it does not record voice or generate new content.
The GitHub repository includes the application source, setup instructions, and architecture. The full live hosted prototype requires authorized access. Gallery images use clearly labeled fictional scenarios.
Built With
- alibaba-cloud
- cloudflare-workers
- qwen
- react
- typescript
- vinext
- web-audio-api
Log in or sign up for Devpost to join the conversation.