SPARKHACKS 2026
WEEKLY PERSONALIZED PORTFOLIO UPLOAD
where random moments strike into untold narrative masterpieces ...
Track 02: Narrative & Interactive Experience
A reflective storytelling system that converts weekly user activity into structured narrative insight using embeddings, similarity matching, and generative AI.
The Cutting Room transforms weekly digital activity into a structured narrative using embeddings and generative AI, helping users understand the story hidden inside their everyday behavior.
Click to open demo screenshots
Viet Thai Nguyen - vnguy87@uic.edu
Han Dang - ldang7@uic.edu
Minh Khoa Cao - mcao@uic.edu
Hoang Minh Nguyen - mngu@uic.edu
react, express.js, node.js, venv, python, python-package-index, mongodb, figma, canva, aedify.ai
Deployed on Aedify.ai
π [Insert Aedify deployment link here]
To run locally:
git clone <repo-link>
cd server && npm install && npm run dev
cd ../frontend && npm install && npm run dev
source venv/bin/activate && cd server/services/ml && python3 server.pyModern social platforms document events but do not interpret patterns.
Users post isolated content:
- Photos
- Short text
- Captions
But platforms rarely answer:
- What themes defined your week?
- Did your mood shift?
- How does your experience compare to others?
We wanted to build a system that transforms small moments into structured narrative reflection.
The Cutting Room introduces Weekly Tracks. Instead of a feed, users build a connected chain of posts called a track.
Each post (Node) contains:
- One photo OR one text entry
- Optional caption
- AI-generated one-sentence recap
Users are limited to:
- 3 posts per day
- 20 friends max
This enforces intentional interaction and reduces performance-driven behavior
At the end of each week, the system generates:
- A Personal Story (5β8 sentence behavioral summary)
- A Community Reflection (comparative trend analysis)
The result is an interactive narrative shaped by user behavior.
- 3 posts per day
- 20 friend limit
- Weekly reset cycle
These constraints improve narrative pacing and reduce content overload.
Each upload generates a semantic embedding:
node β embedding β nearest neighbors (kNN)
The system links:
- Current node β previous node (personal continuity)
- Current node β semantically similar posts (community parallel)
This creates a structured narrative graph rather than a flat feed.
Each node receives a reflective one-sentence recap generated from:
- Node content
- Previous-node similarity distance
- Neighbor context
This creates narrative continuity between moments.
Weekly batch process:
1. Collect all nodes in track
2. Order chronologically
3. Cluster embeddings
4. Extract recurring motifs
5. Compare to global embedding clusters
6. Generate:
Personal story
Community reflection
Narrative is generated from structural patterns β not just summaries.
- React (Vite)
- TailwindCSS
- Framer Motion (node linking animation)
- Zustand / Redux Toolkit
- React Query
Responsibilities:
- Upload flow
- Track visualization
- Friend visibility controls
- Story display
- Node.js
- Express
- Google OAuth 2.0
- REST architecture
Services:
- Node creation
- Track management
- Async AI job scheduling
- Permission management
- MongoDB Atlas
Stores:
- Users
- Nodes (with embedding vectors)
- Tracks (weekly narrative state)
- AWS S3 or Cloudflare R2 for media
- Database stores URL references + embeddings
Separate Python FastAPI service handles:
- Embedding generation
- Cosine similarity matching
- kNN neighbor selection
- LLM recap generation
- Weekly narrative generation
Architecture:
React Client
β
Express API (Hosted on Aedify.ai)
β
Model Service (Python / FastAPI)
β
MongoDB Update
This separation improves modularity and scalability.
The backend API is deployed on Aedify.ai for scalable hosting and rapid hackathon deployment.
- Balancing AI ambition with hackathon time constraints
- Ensuring embedding consistency between text and image inputs
- Designing constraints (3/day, 20 friends) that improved narrative quality
- Coordinating frontend, backend, and model service asynchronously
We prioritized stable end-to-end functionality over experimental features.
Unlike journaling apps or social feeds, our system:
- Uses embeddings to structure narrative relationships
- Generates stories from behavioral patterns
- Connects personal activity with anonymous community parallels
- Applies intentional design constraints to shape user experience
We are not generating stories from single posts. We are generating stories from structural change over time.
This project explores:
Reflective digital storytelling
AI-assisted behavioral insight
Reduced-performance social interaction
Intentional posting design
Potential use cases:
Student reflection
Creative journaling
Mental pattern awareness
Weekly behavioral insight tracking
Technically
Narrative can emerge from embedding structure; Modular AI services improve system reliability.
Interpersonally
Through out this experience, each team member took delight in acquiring the ability to adapt and improvise, even in the face of limited resources, limited time constraints in a Hackathon context. We learnt how to collaborate effectively with each other in which each member know how to maximize given time and effectively apply our strengths towards the common final goal.
- Monthly and semester-level narrative arcs
- Mood trajectory visualization
- More advanced clustering (hierarchical / dynamic K)
- Personalized long-term trend detection