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