-
-
Intro screen: soft, organic flame prototype I built while learning GLSL, shown as a playful “Touch me!” greeting for the app.
-
Main screen: digital campfire, anonymous fragment bubble, and three-step reflection form at the bottom.
-
Share dialog: deciding whether to throw your fragment into the anonymous campfire or keep it only for yourself.
-
Reflection log: local archive of everything you’ve written, showing each fragment, problem, and essence.
-
Fragment detail view: opening the note behind a spark to read someone’s full three-step reflection.
-
Early concept board (Japanese). I mapped how student self-hate could turn into anonymous fragments shared around a campfire.
Inspiration
I am a Japanese high school student who is partly out of school and grew up in a Buddhist temple. Outside of class, I spend most of my time on creative work and a long-term project to digitally preserve temples that are quietly disappearing. In that sense I feel closer to a creator or an artist than a “pure” programmer.
For years I believed that every wall in life had to be overcome by becoming stronger. If you just train harder, fix your habits, and optimize yourself, you can keep going — that was my belief. But after I became partly absent from school, that idea started to crack. In modern student life there is always another wall: exams, future plans, social expectations. If the only answer is “be stronger,” life turns into an endless fight against your own weakness.
Especially for students, we live inside competition so much that we forget how to stay with ourselves. We learn how to compare, how to perform, how to endure — but not how to accept the parts of us that don’t fit.
This project started from the belief that real self-acceptance requires introspection. To accept yourself, you have to sit with your own feelings, including the messy and “unsocial” ones, and give them an honest shape. It is close to the Buddhist idea of 布薩 (uposatha): a small ritual of confession and reflection, not about winning but about returning to yourself.
I built this app for students who quietly dislike themselves or feel they have no place — students like me, who do not fully fit into school. The core idea is that one student’s “weakness” can resonate with another student’s understanding. When someone is stuck in a harmful or distorted story about themselves, a fragment of someone else’s past reflection can dissolve that dead end and become a new spark.
Those sparks circulate. Each new insight can later become part of the small fire that helps someone else. For me, this is not just a product idea; it is a way to prove that even the parts of us that feel like failures can still become warmth for someone in the dark.
What it does
This project is a mobile-like web app where students practice gentle introspection and anonymous resonance, rather than productivity or self-optimization.
The app guides you through three simple questions: what is troubling you right now, why you might feel that way, and what it could be in essence. The copy and examples are written to block self-attacking language like “I’m just lazy” and instead invite curiosity toward your own feelings. The goal is not to solve your life, but to give your vague “moyamoya” — the foggy heaviness in your chest — a clearer, kinder name.
Your writing becomes a private reflection note stored only on your device. From that note, the app generates a short one-line “fragment” that captures the essence of what you wrote. You can keep everything private, or you can choose to throw that anonymous fragment into the digital campfire.
Above the animated campfire, fragments appear from people whose “what is the problem” text is similar to yours. When you tap a fragment, you can read the full three-step note behind it, but never see who wrote it. The understanding process is gradual, and in the full version the AI acts as a mediator: it reads your writing, finds reflections that are close to your situation but slightly ahead in insight, and surfaces those as sparks to nudge your introspection forward.
This is how it differs from a diary or task manager. A diary usually sits in isolation inside one person, and a task app immediately turns feelings into goals, checkboxes, and progress. Bonfire of Thoughts does not ask you to fix anything or become more productive. It keeps a non-competitive space where your inner conflict can resonate with others’ interpretations and slowly reorder itself.
How we built it
I built the app with Next.js, React, TypeScript, and Tailwind CSS, using a single-column, mobile-first layout that feels like a focused note app. The UI intentionally stays minimal and dark, with the campfire as the visual center and the text as the main character.
The campfire itself is rendered with WebGL and a custom GLSL fragment shader inside a FireCanvas component. I tuned the noise, shape, and color so the fire feels alive but not overwhelming, and added small silhouettes in front of it to represent other students quietly gathering around. In the production version, I plan to host the app via Cloudflare and add lofi music and fire sounds, so visiting the site feels like entering a small nighttime space rather than opening a typical app.
Reflection data is stored entirely in localStorage. Each entry keeps “what,” “why,” “essence,” a concatenated full text, a generated fragment, a shared flag, and a timestamp. There is no login or profile; everything remains on the device. For similarity, I currently use a lightweight term-frequency and cosine similarity approach in the browser to pick fragments that are close to the user’s current “what.” The architecture is prepared for a future backend and embedding-based matching when the time and resources allow.
All core concepts, the campfire metaphor, and the overall flow of the app were designed by me without using AI for ideation. During implementation I used a language model as a pair programmer: it helped me write and debug parts of the TypeScript/React/Tailwind and WebGL code, and I also adapted some utility code from my previous projects. I originally wrote the project explanation and in-app copy in Japanese, then used AI to translate it into English and polish the wording while keeping my original intent.
Challenges we ran into
One of the biggest challenges was conceptual: building a student tool that does not drift back into productivity culture. Many ideas I had would have turned this into a task manager, a habit tracker, or a “self-improvement” app. I had to keep cutting features and rewriting copy so that the core remained self-acceptance and introspection, not performance.
Technically, working with GLSL and WebGL inside a Next.js app was another challenge. I tried porting complex Shadertoy campfire shaders and ran into WebGL version issues, compilation errors, and strange visuals. Through trial and error I simplified the shader, focused on believable motion and atmosphere rather than perfect realism, and adjusted the composition so the fire supports the mood without distracting from the text.
I also originally planned to use modern AI embeddings to match similar reflections and to let AI act as a more intelligent mediator. Because of time and API limits, I had to design a simpler local algorithm that still expresses the idea: introspection is guided not by metrics, but by carefully chosen fragments from people walking similar paths.
Accomplishments that we're proud of
I am proud that Bonfire of Thoughts refuses to turn student suffering into another race. The app does not ask users to optimize or “fix” themselves; it invites them to sit with their feelings and trace their real shape. The three-step structure helps transform raw self-hate into a more honest story about what is happening and why it hurts.
I am also proud of how the concept, visuals, and interaction align. The campfire, the darkness, the small crowd, and the absence of social features all point in the same direction: this is not a stage, but a nighttime circle. Even in its current form, with local storage and a simple similarity function, the app already lets students keep a private archive of introspection and occasionally meet the echoes of someone else’s struggle in the flame.
What we learned
Through this project I learned how much language shapes the way students relate to themselves. Slight changes in wording—like moving from “Why am I like this?” to “Why might I feel this way?”—can shift the entire emotional posture from self-attack to curiosity. Designing for self-acceptance is as much about writing as it is about code.
I also learned a lot about mixing creative graphics with modern web frameworks. Debugging shaders in a Next.js environment, balancing performance with aesthetics, and accepting a simpler but more reliable fire taught me to respect practical limits without giving up the atmosphere I wanted.
Finally, I learned how important it is to design around constraints in AI. It is easy to imagine a powerful embedding system that does everything; it is harder (but valuable) to design a small, transparent algorithm that still communicates the core idea. That constraint forced me to think clearly about what “guidance” means in introspection, and how AI can act as a mediator instead of a judge.
What's next for Bonfire of Thoughts
The next step is to turn this prototype into a truly shared space while keeping it soft and anonymous. I plan to add a minimal backend so that anonymous fragments from many students can be stored and distributed across devices, and then upgrade the similarity system to use embeddings. That would let struggles with different wording still recognize each other.
I also want to design a gentle safety layer. When the text clearly points toward self-harm or crisis, the app should be able to quietly show resources or hotlines without exposing identity or breaking the ritual-like feeling of the space. In parallel, I want to properly support both Japanese and English, since my initial focus is on Japanese students but the core ideas—self-acceptance, introspection, and resonance—are universal.
Beyond features, my goal is simple: when a student opens this app late at night, with lofi and fire sounds in the background, I want them to feel like they have stepped into a small circle where they can finally say, “This is what I feel,” and know that somewhere in the dark, someone else has felt something similar and kept going.
Even with these constraints, I wanted the entire space — from GLSL fire to local storage — to reflect the same promise: your thoughts stay with you, but their echoes can gently reach others.
Built With
- chatgpt
- cloudflare
- glsl
- next.js
- tailwindcss
- typescript
Log in or sign up for Devpost to join the conversation.