Today I’m releasing a little project I made: Journey Book
Journey Book is a lightweight social media platform that allows you to build & share your travel map.
You can collect & compare some basic stats on the percentage of countries you’ve been to, store memories you’ve made in each country or state and create shared maps with your friends and family.
Here’s my global map, but go to the site to test it yourself, then email me your feedback!

If you’re wondering, that’s 33 countries, one per year of my life. My plan is to keep growing that number faster than my age, even with a baby.
This is a project I worked on a couple of months ago, and I took a couple hours to tighten it up over the last few days.
Why I built it:
I’ve kept a series of Google Sheets for my family for years to track our travel, and if you’ve ever been over to my house, you’ve seen a number of physical maps we keep too.
This is a digital version of that that lets me include my family with more fun visualizations without having to manage their data entry.
What I learned:
How to configure a Postgres database. I’ve only very sparingly used
writepermissions in a SQL database before. This was a lot of fun & Supabase made it surprisingly easy, though I’ve shifted to using Supabase through Vercel on projects I’ve started since this one.Vercel: This was also my first time launching a new app on Vercel. It worked well, but there were a lot of compatibility issues in my early versions & it took a lot of time to get the hosting right. This pushed me on future projects to start the front-end out on Vercel v0.
I learned a lot about hardening my database & my app, spending a disproportionate amount of time getting feedback (from coding agents and people on the tests I should be running.
Testing is important (obviously). I’ve automated small tests myself before, but I’ve usually had more robust testing in place from more experienced engineers in my organization. I had to break a few things before I really learned this lesson.
Decisions Made:
1) Using Codex as my tutor
To call Codex my copilot here would be an understatement. It was also my tutor & mentor, as I had to learn a bunch of new tools, and I found it really helpful to spend time chatting with Codex directly in my terminal as if it was a tutor teaching me to use these new tools. It did a great job customizing my tutorials to what was most relevant to my project.
2) Google OAuth as the only sign-on method
I chose the 80/20 solution, using Google OAuth as the exclusive login to keep things simple & bypass a lot of potential risk of maintaining passwords & PII
Tech stack:
Component | Tool | Info |
|---|---|---|
Coding agent | Codex | AI coding agent |
App framework | Next.js 16 | React app using the App Router, server routes, middleware, and Vercel-friendly defaults |
Language | TypeScript | Used across the Next app, configs, middleware, and typed frontend/backend code |
UI | React 19 + Tailwind CSS 4 | Custom app UI styled with Tailwind and project-level CSS tokens |
Hosting | Vercel | Repo includes .vercel config and a Next.js setup that fits Vercel deployment well |
Database | Supabase Postgres | SQL schema, views, RLS/security hardening, migrations, and seed/import scripts |
Authentication | Supabase Auth + Google OAuth | Supabase SSR clients handle auth; Google sign-in routes through /auth/google and /auth/callback |
Resend | Used for sharing, sign up & feedback email delivery | |
Maps/Data Viz | D3 Geo + TopoJSON | Powers the interactive US/world travel maps using d3-geo, topojson-client, us-atlas, and world-atlas |
Data import | Excel + Python script | Travel seed data starts from my seed Google Sheets, then scripts/import_excel.py generated SQL seed data |
Testing | Playwright | End-to-end tests run with Chromium configured in my project. |
Repository | GitHub | Private Git repository |
Try it out & reply with your feedback or thoughts on the site, my writing or anything else!
