Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion open-next.config.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
import { defineCloudflareConfig } from '@opennextjs/cloudflare';
import r2IncrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache';

export default defineCloudflareConfig({});
// Without an incrementalCache, OpenNext has nowhere to persist a rendered page,
// so every prerendered route is regenerated from Supabase on EVERY request.
// Measured 2026-08-10 on courses.opengolfapi.org: `x-nextjs-cache: MISS` on six
// consecutive requests, TTFB 3.8-4.1s each, despite the response carrying
// `x-nextjs-prerender: 1` and `s-maxage=3600`. The page was already prerendered;
// there was simply no store to read it back out of.
export default defineCloudflareConfig({
incrementalCache: r2IncrementalCache,
});
7 changes: 7 additions & 0 deletions wrangler.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ directory = ".open-next/assets"
binding = "ASSETS"
run_worker_first = true

# Incremental cache store for OpenNext. The binding name is not arbitrary:
# @opennextjs/cloudflare's r2-incremental-cache override reads exactly
# NEXT_INC_CACHE_R2_BUCKET.
[[r2_buckets]]
binding = "NEXT_INC_CACHE_R2_BUCKET"
bucket_name = "opengolfapi-next-cache"

# Set production secrets via:
# wrangler secret put NEXT_PUBLIC_SUPABASE_URL
# wrangler secret put NEXT_PUBLIC_SUPABASE_ANON_KEY
Expand Down
Loading