Guard the OG photo grid against empty URL results so prerendering does not crash when an optimized image fetch fails.
Co-authored-by: Cursor <cursoragent@cursor.com>
* add masonry layout for photo grids
- NEXT_PUBLIC_MASONRY_GRID env variable to turn masonry layout on and
off
- added PhotoGridMasonry.tsx to handle masonry layout
* fixed albums showing all photos when masonry grid is enabled
* only render infinite photo scroll for masonry grid when total photo count is greater than loaded photos
* fixed masonry grid lcp warnings
* add NEXT_PUBLIC_MASONRY_GRID description to README
* Use custom icon for masonry layout
* Add masonry to in-app config
* Simplify masonry architecture
---------
Co-authored-by: Sam Becker <sam@sambecker.com>
Handle null exif.tags in getOffsetFromExif
`Object.values()` throws "Cannot convert undefined or null to object"
when `exif.tags` or `exifr` is null/undefined. This occurs when
uploading images that lack EXIF data (e.g., AI-generated images,
screenshots, or graphics). The issue is reproducible on Chrome but
not on Safari, likely due to differences in how each browser's
EXIF parsing pipeline populates these values.
This fix adds nullish coalescing fallbacks (`?? {}`) so that
`Object.values()` always receives a valid object.
* Fix optional chaining in getOffsetFromExif
If `exif` itself is null/undefined,
accessing `exif.tags` would throw before the `??` fallback kicks in.
* Highlight /about in nav
* Refine full frame icon
* Add timestamp to /about
* Add /about to cmdk menu
* Enrich /about content
* Make /about categories responsive
* Enlarge app nav buttons
* Add /about richer categories
* Widen main nav buttons
* Add more /about category content
* Catch db errors in /about
* Update key /about image
* Add /about avatar
* Add jest TextEncoder polyfill
* Refactor sidebar text configuration
* Show /about hero photo meta
* Hoist about content to server page
* Hide admin email on small screens
* Add basic about page form
* Finalize basic /about upsert functionality
* Make /about/edit safe for blank templates
* Add configuration to hide /about page
* Add default /about title text
* Add interactive photos to /about edit form
* Apply final /about i18n
* Ensure /about static optimization
* Add CTA for admins to add /about descriptions
* Add convenience for accepting full photo urls
* Add photo placeholder icon
* Show /about empty state when there are no photos
* Hide sort control when in app empty state