Live app: https://the-planet-journal.vercel.app, Health: https://the-planet-journal.vercel.app/api/health. NOTE: The database is Aurora Serverless v2 with a minimum of 0 ACUs — it pauses after inactivity and takes 5-10 seconds to wake up on first load. If the page loads slowly or shows an error on first visit, wait a few seconds and refresh. Subsequent requests will be fast.

Inspiration

The idea for The Planet’s Journal came from a simple question: what if the planet could remember?

Not through monuments or plaques, but through small human moments tied to real places. A bench where you made a decision. A street corner where something ended. An airport gate where something began. These places still exist, but the memories attached to them usually fade.

I wanted to build a way to mark those moments before they disappear.

What it does

The Planet’s Journal lets you pin a short journal entry to the exact place where something happened.

You can explore a global map of memories, open story pins, filter by emotion, and create your own entry by dropping a pin on the map. Each story is tied to an emotion like wonder, longing, bloom, becoming, or brave.

It is not meant to feel like another social feed. The point is quieter: leave a memory for yourself, in the place where it happened. If someone else finds it someday, that is part of the magic.

How I built it

I built the app with Next.js, React, TypeScript, and deployed it on Vercel. The map is powered by MapLibre GL, with story pins placed across a dark global basemap.

I used v0 to help move faster on the frontend, especially for shaping early UI components, layouts, and interaction patterns. From there, I customized the experience so it matched the emotional tone of the product.

For the database, I used Amazon Aurora PostgreSQL with PostGIS. Each story is stored with a real geographic point, which makes location a core part of the system instead of just a pair of latitude and longitude values. This allows the app to support spatial queries and gives it a better path to scale.

The current demo includes 130 seeded stories across every continent, so the globe feels alive when someone first opens it.

Challenges I ran into

The hardest part was making the app feel like a place, not just a map with content on it.

A lot of the work was in the tone: the writing, the emotions, the animations, and the way stories open on the map. If it felt too dramatic, it became cheesy. If it felt too plain, it lost the reason to exist.

On the technical side, the biggest challenge was getting the Aurora and PostGIS setup working cleanly with the app. I also had to account for Aurora Serverless cold starts, since the database can take a few seconds to wake up after inactivity.

What I learned

I learned that the location is not just extra data. It is the whole product.

Once a memory is stored as an actual place, the app can start to do more interesting things: show nearby stories, surface emotional patterns across regions, and make the map feel personal instead of generic.

I also got a much better understanding of how to use Aurora for a location-based app and how to move quickly with Vercel and v0 while still customizing the final product into something that feels original.

What is next

At larger scale, The Planet’s Journal becomes more interesting. A city could start to develop an emotional layer. A park, bridge, school, station, or airport could hold many different memories from different people.

I would like to add better nearby discovery, private and public memory modes, richer story interactions, and eventually a way to see how emotions move across the world over time.

Built with

Next.js, React, TypeScript, v0, Vercel, MapLibre GL, Amazon Aurora PostgreSQL, PostGIS, Drizzle ORM, NextAuth

Built With

Share this project:

Updates