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 write permissions 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

Email

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!

Keep reading