Inspiration
The best parts of trips rarely make it into photo albums. All of the information ends up living in the group chat, like the voice note that everyone replayed, the joke that lasted five days for no reason, and the friend that took all of the photos but barely appeared in any. Not even a month later, most of these moments are usually buried under hundreds of messages, never to be seen again. We built Campfire to bring all of this information to light, both during the duration of the trip and afterwards.
What it does
Campfire joins the WhatsApp group chat your group is using, and after someone types /campfire start, everyone keeps talking in the group like usual. Campfire captures the trip’s messages, photos, voice memos, and locations mentioned. Each night at a set time, it sends a narrated recap back to the chat, detailing everything that happened that day. Then, when the trip ends (when someone uses the command /campfire end), the group can open Around the Campfire, a story player that moves through the trip’s locations while narration, captions, and real voice memos by members of the group bring the moments back to life.
Also, we made sure to make privacy a big part of the experience. Campfire announces when a trip starts and stops capturing no matter what when hit with /campfire end. It also supports the command /campfire off the record and /campfire on the record, which stop tracking the conversation and restart tracking the conversation respectively. Finally, Campfire also lets group members remove a captured message with /campfire forget. It does not read ordinary direct messages between people, and the flexibility in stopping the tracking and deletion of messages makes sure users feel comfortable with having it in the conversation.
The app also shows how a finished story can lead into the next possible trip, as trip suggestions are informed by what the group said they enjoyed or found difficult, just so that the end of one trip can become the start of planning the next one together.
How we built it
A Node.js service using Baileys connects to the WhatsApp group chat and passes the events as they happen through Redis streams. A Flask backend then stores the trips and messages that come through over and over in PostgreSQL and uses Celery for future story work, which is done in the background. OpenAI then turns the conversation into story segments that are ordered properly, and ElevenLabs handles the voice-note transcription and narration for the whole project. Finally, Backboard provides long term memory to provide to the OpenAI agent which can be used to provide context for memories across different days of the group’s trips, and Muse Spark can add local food and activity suggestions after the nightly recap.
We built the frontend playback experience in React and Vite. Its illustrated map follows the story’s stored locations as mentioned in the group messages, and the online player holds the map, the captions from the group chat, and the available audio. Docker Compose runs the local stack, and we set it up to run on a Vultr VPS so that the Campfire bot can keep listening in the chat around the clock. Campfire is available at campfireai.tech.
Challenges and what we learned
We learned that a group chat is super messy; people use nicknames, refer to places that aren't explicitly named, reply hours later than they should, and turn one simple sentence into a running joke for no explainable reason. Building Campfire is meant to treat those messages as a shared conversation rather than a folder of files that are hard to interpret.
We also had to make the capture window explicit so that all the group members knew what was going on. A memory app only feels welcoming and safe if the group knows when the agent is listening and when they can decide what stays out of the story.
What’s next
Our current demo includes prepared trip content, the working capture of information, a story pipeline, and a way to keep the group connected afterwards. Moving forwards, we want to improve the photo-to-place matching and geocoding, implement more features like Side Quests that explain to the rest of the group certain activities that specific people did, and send callbacks on certain anniversaries that reunite the group together around a trip a year later.
Built With
- backboard
- baileys
- caddy
- celery
- d3.js
- docker
- docker-compose
- elevenlabs
- flask
- gunicorn
- javascript
- muse
- node.js
- openai
- pgvector
- postgresql
- python
- react
- react-router
- redis
- sqlalchemy
- topojson
- vite
- vultr

Log in or sign up for Devpost to join the conversation.