Inspiration
Most apps are designed to connect us with other people. For the theme Connections, we wanted to explore a different kind of connection — the connection between who we are today and who we used to be.
People write journals during important moments in their lives: when they are excited, confused, struggling, making decisions, or starting something new. But as time passes, those thoughts become buried under newer entries.
We asked ourselves:
What if a journal could recognize when something you're feeling today connects with something you wrote months ago?
That question became Past Me.
Past Me is built around one principle:
Past Me reminds. It never decides.
The goal isn't to have AI tell users what their memories mean or what decisions they should make. Instead, Past Me brings back the user's own words and allows them to decide what those words mean to them today.
What it does
Past Me is a reflective journaling application that creates meaningful connections between a user's present thoughts and their previous journal entries.
Users can write, edit, search, and organize personal journal entries like a normal journaling application.
The main difference happens when a new journal is saved.
Past Me analyzes the meaning of the new entry and compares it with memories written previously. When it discovers a meaningful semantic connection, the user sees:
✦ PAST ME FOUND SOMETHING
Instead of immediately displaying the memory, Past Me asks whether the user wants to hear from their past self.
If they choose to continue, the application presents a Then → Now comparison showing their previous words alongside what they are writing today.
A single journal can contain several different topics. Past Me can identify multiple connections within one entry and allow the user to move between related memories.
The application also includes:
- Take Me Back — randomly revisit an older journal entry.
- Pocket Note — receive a small reflective message separate from the user's actual memories.
- Journal Search — find previous entries by title or content.
- Monthly Journal History — organize previous memories in a simple sidebar.
- Authentication and private user data — each user has their own journal history.
How we built it
We built the frontend using React, TypeScript, Vite, and CSS.
The backend is built with Python and FastAPI.
For authentication and data storage, we use Supabase, with PostgreSQL as the database and Row Level Security (RLS) to keep each user's journal data separated.
The core of Past Me is its semantic connection system.
Instead of comparing journal entries using only exact keywords, we convert journal text into 384-dimensional semantic embeddings using the all-MiniLM-L6-v2 sentence-transformer model.
Those embeddings are stored in PostgreSQL using pgvector.
When a user saves a new journal, the backend performs vector similarity searches against previous memories belonging to that user.
We also realized that comparing only the entire journal was not enough. A journal could talk about school in one paragraph, family in another, and health in another.
To handle this, Past Me analyzes:
- The complete journal
- Individual meaningful sentences
- Adjacent sentence groups
The results are combined, duplicate memories are removed, and the strongest meaningful connections are returned.
We also made the matching time-aware. A journal can only be presented as a "past" memory when its date is earlier than the journal currently being written.
Challenges we ran into
One of our biggest challenges was designing semantic matching that felt meaningful instead of random.
Initially, our similarity threshold was too strict, which meant entries that were clearly related to a person could sometimes fail to connect mathematically. We tested the system with different journal styles and adjusted the matching approach so that related ideas could be recognized without requiring identical wording.
Another challenge was multi-topic journals. Comparing one large journal embedding could cause smaller but important topics to disappear. Breaking entries into meaningful segments and combining the results made it possible to discover multiple independent connections from the same journal.
We also had to carefully think about the role of AI in a personal reflection application.
It would have been easy to make Past Me generate advice such as "you made the right decision" or "you should do this." We intentionally chose not to do that.
The system retrieves memories, but the interpretation remains with the user.
We also faced deployment constraints because running a local sentence-transformer model requires more memory than some free cloud environments provide. For our hackathon version, we prioritized having a reliable local semantic model and a working application rather than replacing it with a paid AI API simply for deployment.
Accomplishments that we're proud of
We're especially proud that Past Me can recognize relationships between entries even when they don't use the same words.
For example, an older journal might say:
"I worked incredibly hard to get the opportunity to study in the United States. I was excited about starting a new chapter."
Months later, the user might write:
"I keep wondering whether moving to the US was actually a good decision."
There is no simple keyword rule that fully captures the relationship between those thoughts, but semantic embeddings allow Past Me to recognize their meaning.
We're also proud that one new journal can reconnect a user with several different memories while still keeping the experience simple and personal.
Most importantly, we built the application without turning the user's past into an AI-generated interpretation.
Their own words remain the most important part of the experience.
What we learned
This project taught us that semantic search can be used for much more than traditional search engines.
Vector embeddings can create experiences where software understands relationships between ideas rather than simply matching words.
We also learned a lot about integrating a complete application across multiple technologies, including React, TypeScript, FastAPI, Supabase, PostgreSQL, authentication, Row Level Security, sentence transformers, and pgvector.
Beyond the technical side, we learned that adding more AI is not always the best product decision.
Sometimes the most meaningful thing technology can do is surface the right information at the right moment and let the user decide what it means.
What's next for Past Me
In the future, we would like to expand Past Me with:
- Production cloud deployment
- Mobile application support
- Connection timelines
- Long-term reflection patterns
- User-controlled connection sensitivity
- Journal export
- Additional privacy controls
- Improved semantic models
- Personal reflection statistics
We would also like to explore ways of visualizing how thoughts and priorities evolve over months or years while keeping the user's privacy and control at the center of the experience.
Why Past Me fits Connections
Most technology thinks about connection as:
Person ↔ Person
Past Me explores:
Present Self ↔ Past Self
Instead of introducing you to someone new, Past Me reconnects you with someone you may have forgotten:
the person you used to be.
Past Me reminds. It never decides.
Built With
- api
- css
- embeddings
- face
- fastapi
- hugging
- learning
- machine
- minilm
- pgvector
- postgresql
- python
- react
- rest
- search
- semantic
- sentence
- supabase
- transformers
- typescript
- vector
- vite
Log in or sign up for Devpost to join the conversation.