Project Info
This project did not submit a demo video on Devpost.
Inspiration
Have you ever woken from the most vivid dream, where the events play out in your head like a film and you’re the star; only for, in the next minute, it all disappears like smoke in the wind. Dreaming is a universal human experience that has been subject of both elusive fascination and wonderment since the advent of human communication. From the mystic to the scientific, it is only natural that we wonder about the basic question: “What do my dreams mean?” Research from the McGovern Institute at MIT theorizes that dreaming is a byproduct of the biological process reorganizing memories in our brain. While they state that dreams “aren’t instilled with meaning, symbolism, and wisdom in the way we’ve always imagined,” because of how much emotion and sensory experience is involved, a look into our dreams may also be a look into ourselves. To bridge the gap between the fleeting nature of dreams and our desire to preserve and understand them, many people turn to dream journals. Regularly recording dreams can significantly improve recall, helping individuals identify recurring themes, emotions, and imagery. However, the process of documenting dreams, especially right after waking, can be tedious. Some try using voice memos as a quicker method, but reviewing and transcribing these recordings often becomes a chore in itself. This inspired us to build WanderLandAI.
What it does
A mobile application that streamlines this process: users can simply record themselves describing their dreams upon waking, and the app automatically transcribes the audio into text and generates a dreamy, watercolor-styled comic strip based on the description.
How we built it
We utilized a multi-layered LLM API approach that relies on our beloved sponsor, Google, and their Gemini API. First audio is recorded from the user’s device where the mp3 file is then passed to Gemini for audio transcription. Next, the transcribed audio is parsed into a detailed summary and emotion and sentiment analysis for the dream. This detailed description is then chunked into 6 dream chapters where each of those chapters is passed into the text to image API with a prompt template that creates watercolor style comic images of the dream. The backend was built in node JS. As we are first time hackers, we used Cursor to help us with setting up the backend. Our designer created a UI that mirrored the dreamlike quality of the generated images, using flowing visuals and a gentle color palette to evoke the feeling of being between sleep and memory. Meanwhile, our front-end developer bridged the gap between the user interface and back-end logic, ensuring seamless communication that brought the entire experience to life.
Challenges we ran into
We are new to hackathons so we faced various challenges. The biggest challenges were converting the web design into a mobile app frontend. Additionally, we had trouble connecting the backend with the frontend. We were also struggling with the API credits as we only had $5 worth of Gemini API credits.
Accomplishments we're proud of
3/4 of our team are first-time hackers. No one on our team had prior experience in mobile development. From setting up the development environment to integrating speech-to-text and image generation models like Gemini, the learning curve was steep but ultimately rewarding as we troubleshooted, pivoted, pivoted again, and again, and had to find creative ways of working through a development space we had little knowledge of.
What we learned
Throughout the hackathon, one of the biggest learning curves was mobile app development. None of us had prior experience building a mobile app from scratch, so we had to quickly familiarize ourselves with mobile frameworks, UI/UX design principles, and the intricacies of debugging across different front-end and back-end codes. We experimented with different toolkits, read through documentation, and learned how to design user-friendly interfaces that felt intuitive and engaging. This hands-on crash course not only taught us how to bring an idea to life on a mobile platform, but also gave us a deep appreciation for the design process. We also discovered the power of collaboration tools like Cursor AI, which helped us streamline our codebase, troubleshoot bugs more efficiently, and even learn from AI-generated suggestions that sped up our development process. Beyond the technical skills, perhaps the most important thing we learned was how to stay motivated and support one another. When things didn’t work, and they often didn’t, we reminded each other of what our goals were for this project, why we were here, and realigning between cookies and energy drinks. In moments of frustration or burnout, it was our mutual encouragement, shared vision, and long hour breakthroughs that kept us moving. This experience wasn’t just about building an app, it was about learning how to build as a team.
What's next
Looking ahead, our next goal is to build out user account functionality so the public can securely save and revisit their dream logs within the app. This will allow users to build a personal dream archive and track patterns or changes over time. One feature we were especially excited about, but didn’t have time to implement, was a conversational AI component. We envision that a future iteration of the app would include an interactive chat that would generate thoughtful, reflective prompts based on a user's dream content. This feature would encourage deeper introspection and help users explore the emotional layers of their dreams in a more guided and meaningful way.
Dream Recorder Backend
A backend API for recording dreams via audio, transcribing them, and generating comic strip visualizations.
Features
- 🎙️ Audio file upload and storage
- 📝 Dream transcription (placeholder endpoints)
- 🎨 Comic strip generation (placeholder endpoints)
- 📊 Dream statistics and analytics
- 🏷️ Dream tagging and mood tracking
- 🔍 Filtering and search capabilities
- 💾 Simple file-based persistence (easily replaceable with a database)
Quick Start
-
Install dependencies:
npm install -
Set up environment variables:
cp .env.example .env # Edit .env with your configuration -
Start the server:
# Development mode with auto-reload npm run dev # Production mode npm start -
The server will run on http://localhost:3000
API Endpoints
Health Check
GET /api/health- Basic health checkGET /api/health/detailed- Detailed health check with statistics
Dreams
GET /api/dreams- Get all dreams (with optional filters)GET /api/dreams/:id- Get specific dreamPOST /api/dreams/upload- Upload audio file and create dreamPOST /api/dreams- Create dream without audio (for testing)PUT /api/dreams/:id- Update dreamDELETE /api/dreams/:id- Delete dreamGET /api/dreams/stats/overview- Get dream statistics
Processing (Placeholder endpoints)
POST /api/dreams/:id/transcribe- Start transcription processPOST /api/dreams/:id/generate-comic- Generate comic from transcription
Dream Data Structure
{
"id": "uuid",
"title": "Dream Title",
"audioFilePath": "/path/to/audio.mp3",
"transcription": "Transcribed dream text...",
"comicImages": ["image1.jpg", "image2.jpg"],
"tags": ["flying", "adventure"],
"mood": "exciting",
"createdAt": "2023-12-01T10:00:00Z",
"updatedAt": "2023-12-01T10:05:00Z",
"userId": "user-uuid",
"status": "completed"
}
API Usage Examples
Upload Audio Dream
curl -X POST http://localhost:3000/api/dreams/upload \
-F "audio=@dream.mp3" \
-F "title=My Amazing Dream" \
-F "mood=exciting" \
-F "tags=[\"flying\", \"adventure\"]"
Get All Dreams
curl http://localhost:3000/api/dreams
Filter Dreams by Mood
curl "http://localhost:3000/api/dreams?mood=exciting"
Update Dream with Transcription
curl -X PUT http://localhost:3000/api/dreams/{dream-id} \
-H "Content-Type: application/json" \
-d '{"transcription": "I was flying over a beautiful landscape..."}'
File Structure
├── server.js # Main server file
├── package.json # Dependencies and scripts
├── .env.example # Environment variables template
├── models/
│ └── Dream.js # Dream data model
├── services/
│ └── DreamService.js # Business logic and data management
├── routes/
│ ├── health.js # Health check endpoints
│ └── dreams.js # Dream API endpoints
├── uploads/ # Audio file storage (auto-created)
└── data/
└── dreams.json # Simple file-based storage (auto-created)
Available Moods
- happy
- sad
- scary
- weird
- exciting
- peaceful
- confusing
- romantic
Dream Status Flow
uploaded- Audio file uploadedtranscribing- Transcription in progresstranscribed- Transcription completedgenerating_images- Comic generation in progresscompleted- All processing doneerror- Error occurred during processing
Adding API Integrations
The backend includes placeholder endpoints for:
-
Transcription (
POST /api/dreams/:id/transcribe)- Add your speech-to-text API integration here
- Popular options: OpenAI Whisper, Google Speech-to-Text, Azure Speech
-
Image Generation (
POST /api/dreams/:id/generate-comic)- Add your text-to-image API integration here
- Popular options: DALL-E, Midjourney, Stable Diffusion
Future Enhancements
- Replace file-based storage with a proper database (PostgreSQL, MongoDB)
- Add user authentication and authorization
- Implement real-time notifications for processing status
- Add audio format conversion and compression
- Implement caching for frequently accessed dreams
- Add backup and restore functionality
- Implement rate limiting for API endpoints
- Add comprehensive logging and monitoring
Development
Running Tests
npm test
Project Structure Guidelines
- Models: Data structures and business entities
- Services: Business logic and data management
- Routes: API endpoint definitions
- Middleware: Request/response processing
Adding New Features
- Define the data model in
/models - Implement business logic in
/services - Create API routes in
/routes - Add appropriate validation and error handling
Analysis
View
Metric
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- ExpressIn code
- Google GeminiIn code
- HTMLIn code
- JavaScriptIn code
- OpenAIIn code
- Node.jsClaimed
- ReactClaimed
5 of 7 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
154 KB
Source files
15
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
jnoahbaier/AI-Hackathon-2025
74 files · 59.9 MB · @ 8a3e824
Structure
API & routing
3 files · 4%Request entry points: routes, handlers and controllers.
Application logic
8 files · 11%Domain rules, services and shared utilities.
Data & schema
1 file · 1%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript73%
- HTML23%
- Markdown3%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 14- @google/genai
- @google/generative-ai
- body-parser
- cors
- dotenv
- express
- express-validator
- helmet
- morgan
- multer
- openai
- uuid
- +2 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.