The Map / 'can she even make this thing'

  • Chose the geoConicConformal projection to render the 5 states the CDT traverses.
  • Extracted data from Garmin device account to get coordinates of all messages sent
  • Extracted photo metadata to plot photo locations.
  • Identified my campsite locations by filtering Garmin message contents for my preset 'camped for the night!' messages
  • Added custom map symbols (circles, triangles) to distinguish campsites, messages, photos, and resupply towns.
  • Used locations of photos, messages, on map to draw my daily progress with CalTopo.
  • Exported CalTopo tracks as GeoJSON and added to the map.

Lets make it React

  • Migrated map rendering into a Next.js 14 (App Router) + React + TypeScript project.
  • Installed and configured TailwindCSS for styling.
  • Began shaping the concept into a full-stack trail journal app (not just a map).

Cleaning up the Data

  • Chose PostgreSQL as the database.
  • Defined schema: users, dates, entries, photos, tracks/legs.
  • Aggregated photos into an array per daily entry using json_agg.
  • Built SQL queries to fetch journal entries by date and photos taken on same date.
  • Created a form, used only by me to assign CAL-topo generated legs to dates, creating relationships between the two database tables, removing dates and legs as they were assigned to eachother with the use of SQL anti-joins

Making it pretty and pretty usable

  • Componetize all buttons, JournalCards, navigation, etc.
  • Set up create and edit routes for journal entries using React Server Actions.
  • Used Typsescript to ensure end-to-end type safety.
  • Styled with shadcn/ui + Tailwind for clean, consistent UI.
  • For the create entry form, pre-populate the date drop down with dates that have no associated entry yet, this journal will only ever have one entry per date.
  • Added loading skeletons for better UX during data fetches.

Authentication / It's my Diary after all

  • Implemented username + password authentication with NextAuth.js.
  • Secured journal routes to ensure only authenticated users (me) can view complete entries.
  • Hid contents of garmin messages in data visuaization behind authentication.

More to come

  • Build uploads for the data files
  • Further work on components and styling
  • Add a mini map to each journal entry showing location of photos taken that day along the daily track