Commit Graph

2870 Commits

Author SHA1 Message Date
Strtus
b9bef5e264 Load gallery images directly from R2 CDN, bypassing Next image proxy.
Use unoptimized next/image with pre-sized R2 URLs (-sm/-md/-lg) when a public R2 domain is configured. Falls back to the original file if a sized variant is missing.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-20 20:03:47 +08:00
Strtus
69094071c8 Add Docker self-hosting configuration for standalone Next.js build.
Include Dockerfile, compose file, dockerignore, and next.config output standalone for server deployment.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-20 17:35:53 +08:00
Strtus
8e6df1e70c Simplify About page to title, subhead, and description only.
Remove avatar/hero photos and gallery stats from the public About view and admin editor, and add env-backed defaults for ABOUT_TITLE and ABOUT_SUBHEAD.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-20 17:16:31 +08:00
Strtus
2315647743 Fix EdgeOne auth runtime configuration
Set trustHost and explicitly provide AUTH_SECRET in NextAuth config
so auth routes do not fail host/config validation on non-Vercel
platforms like EdgeOne.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:41:15 +08:00
Strtus
0ac550c039 Fix client-side Vercel Blob fallback never executing
HAS_VERCEL_BLOB_STORAGE depends on BLOB_READ_WRITE_TOKEN which is a
server-only env var (not NEXT_PUBLIC_*), so it evaluates to false in
the browser. When the R2 presigned-URL PUT fails (e.g. due to missing
CORS on the R2 bucket), the fallback branch was unreachable and the
original "Failed to fetch" error propagated to the UI.

vercelBlobUploadFromClient works client-side because it obtains the
token via a server round-trip to handleUploadUrl, so try it
unconditionally as a fallback.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 10:54:33 +08:00
Strtus
66fa66d3d3 Skip auth middleware for public proxy routes
Route public paths through proxy without invoking auth so category pages no longer fail with runtime auth errors on EdgeOne.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 01:11:42 +08:00
Strtus
6a01efce18 Add static generation throttles for constrained build environments
Allow disabling static generation and tuning static params limits via env vars to reduce build output size on low-disk CI providers.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 00:58:05 +08:00
Strtus
053a3b4acc Harden client uploads and add storage fallback
Validate presigned upload responses and fall back to Vercel Blob when third-party storage upload fails so photo uploads remain available.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 00:54:46 +08:00
Strtus
d5001c9ee5 Use default export in Next config for EdgeOne compatibility
Switch next.config.ts from CommonJS export to default export so OpenNext wrappers can import the original config during type checking.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 00:40:34 +08:00
Strtus
2c630ebd50 Exclude all API routes from proxy matcher
Prevent middleware proxy from intercepting storage upload endpoints by excluding every /api path, restoring upload token handshake reliability.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 00:38:07 +08:00
Strtus
711a44265c Fix image OG grid crash when photo URLs are missing
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>
2026-05-19 00:28:19 +08:00
Sam Becker
a11560b437 Show current page in cmd-k menu 2026-05-09 16:43:22 -05:00
Sam Becker
4e4942efbc Bump next-auth version 2026-05-09 16:33:24 -05:00
Sam Becker
b7e6e71189 Add empty packages field to pnpm workspace 2026-05-09 16:17:18 -05:00
Sam Becker
2f480cfe93 Refine tag input control 2026-05-09 16:13:55 -05:00
Sam Becker
645110fc36 Refactor redis config 2026-05-09 15:57:27 -05:00
João Pedro Sconetto
175970252c
fix(app): add normalize func for redis url (#391)
- solves issue when providers use rediss:// instead of https://
2026-05-09 15:48:28 -05:00
Sam Becker
d7305de268 Bump deps 2026-05-09 15:38:20 -05:00
Sam Becker
91091b63a5 Bump deps 2026-05-02 16:05:08 -05:00
John
86d4f3dfca
Add masonry layout for photo grids (#390)
* 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>
2026-05-02 16:01:08 -05:00
Sam Becker
af48b8d6d2 Bump deps 2026-04-20 17:44:14 -05:00
Sam Becker
b8bc4c7491 Bump deps 2026-04-10 19:14:57 -05:00
Sam Becker
f3b3b82c6c Improve rate limit config compatibility 2026-04-10 19:12:36 -05:00
Sam Becker
c062795f75 Bump deps 2026-04-07 09:23:38 -05:00
Sam Becker
d505dfa092 Merge remote-tracking branch 'refs/remotes/origin/main' 2026-04-07 09:20:42 -05:00
Sam Becker
b9494272f0 Add database dump to .gitignore 2026-04-06 10:21:18 -05:00
Ni Z.H.
a8b7c05e0c
Handle null exif.tags in getOffsetFromExif (#389)
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.
2026-03-26 17:39:18 -05:00
Sam Becker
da6c6ef09c Bump deps 2026-03-21 11:30:13 -05:00
Sam Becker
58f8f17011 Bump deps 2026-03-15 18:47:29 -05:00
Sam Becker
2e017f0a51 Refine photo chooser 2026-03-13 22:01:13 -05:00
Sam Becker
2919f44a47 Add "manage albums" to cmd-k 2026-03-13 21:47:54 -05:00
Sam Becker
440c7b3f03 Add places to about page 2026-03-13 21:45:34 -05:00
Sam Becker
d3b1339c69 Increase time inputs to prevent iOS form zooming 2026-03-13 21:10:59 -05:00
Sam Becker
002124b161 Fix floating thumbnail on large screens 2026-03-13 21:09:05 -05:00
Sam Becker
cdb6130345 Extract date utility logic 2026-03-12 09:08:10 -05:00
Brandon
397d70c0a3
Add datetime picker to Taken At fields (#388)
* Add DateTimePicker component and integrate into PhotoForm for date selection
2026-03-12 08:39:29 -05:00
Sam Becker
ac96350849 Update package manager 2026-03-11 08:58:02 -05:00
Sam Becker
2f94d79746 Improve about grid layout when there's less content 2026-03-08 16:59:43 -05:00
Sam Becker
8fe3e81bde Allow about photos to be cleared 2026-03-08 16:56:38 -05:00
Sam Becker
58fac5c81b Add 'clear cache' to cmdk menu 2026-03-08 16:22:10 -05:00
Sam Becker
4ab56b603f Stop displaying 0ev exposure compensation by default 2026-03-08 13:03:56 -05:00
Sam Becker
bc4fe9b7a2 Update ISO field to integer 2026-03-06 09:13:03 -06:00
Sam Becker
691a39c85c
Fix config flag 2026-03-05 21:38:46 -06:00
Sam Becker
f7ef89e1c0 Bump deps 2026-03-05 18:33:30 -08:00
Sam Becker
e18af1a07d Update Vercel storage docs 2026-03-05 18:32:07 -08:00
Sam Becker
5e6e13ea09 Fix es-es locale import 2026-03-02 09:27:12 -06:00
Sam Becker
514be4de4a Fix about edit caching issue 2026-03-02 08:57:20 -06:00
Sam Becker
2f99f8f558 Fix about default description behavior 2026-03-01 23:29:16 -06:00
Sam Becker
4f5461e327 Refine default about description 2026-03-01 23:19:26 -06:00
Sam Becker
8569347c27 Leverage adjacent meta for about description 2026-03-01 22:36:11 -06:00