Merge pull request #241 from fdnd-agency/235-user-story-as-a-logged-in-group-member-i-want-to-take-a-photo-for-an-active-snappmap-and-see-it-appear-in-the-grid-so-that-i-can-take-part-in-the-topic-before-the-deadline
235 user story as a logged in group member i want to take a photo for an active snappmap and see it appear in the grid so that i can take part in the topic before the deadline
#235 Port SnappThis to SvelteKit
This commit introduces the new SvelteKit app structure for SnappThis, including the shared layout, landing page, group pages, snappmap detail pages, and user/profile screens. It also adds reusable UI components for headers, footers, grids, countdowns, upload forms, and status dialogs, along with Directus-backed server load/actions for fetching snappmaps, uploading photos, and reverse geocoding location data.
#235 Add snappmap upload flow and page
Introduces the snappmap detail page with group metadata, upload form, live countdown, and status dialog. The form uploads photos to Directus, reverse geocodes coordinates for a place name, and refreshes the snapp grid after successful submissions.
#226 fix above-the-fold image loading
This change makes snapp thumbnails use eager loading and high fetch priority when they appear above the fold, improving perceived performance for visible previews. The parent snappmap preview now passes its eager flag through to each thumbnail so the homepage loads key images immediately without lazy-loading delays.
#226 Optimize above-the-fold image loading
Add an `eager` option to snapp thumbnails and snappmap previews, and enable it for the first two homepage snappmaps that are visible without scrolling. This reduces lazy-load delays for above-the-fold content and improves perceived performance.
#226 Add SnappThis homepage gallery
Load snappmap data from Directus on the homepage, sort active and user-owned maps first, and expose the five newest thumbnails for each map. Add reusable SnappThumbnail and SnappmapPreview components, then render the homepage gallery with header, empty state, and footer.