[object Object]

← back to Nineoh Guide

loop refine 3/n: ISR (hourly revalidate) on stable pages (home/show/cast/cast-detail/episode-detail) — cached HTML ~77ms, less DB load; dynamic pages (news/episodes/search) unchanged

78a8f84a7dd38bb9f257ae624465afc7c26e5aac · 2026-07-26 16:37:04 -0700 · Steve

Files touched

Diff

commit 78a8f84a7dd38bb9f257ae624465afc7c26e5aac
Author: Steve <steve@designerwallcoverings.com>
Date:   Sun Jul 26 16:37:04 2026 -0700

    loop refine 3/n: ISR (hourly revalidate) on stable pages (home/show/cast/cast-detail/episode-detail) — cached HTML ~77ms, less DB load; dynamic pages (news/episodes/search) unchanged
---
 apps/web/app/cast/[slug]/page.tsx                 | 2 +-
 apps/web/app/cast/page.tsx                        | 2 +-
 apps/web/app/episodes/[season]/[episode]/page.tsx | 2 +-
 apps/web/app/page.tsx                             | 2 +-
 apps/web/app/show/page.tsx                        | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/apps/web/app/cast/[slug]/page.tsx b/apps/web/app/cast/[slug]/page.tsx
index c7a7dde..8c37353 100644
--- a/apps/web/app/cast/[slug]/page.tsx
+++ b/apps/web/app/cast/[slug]/page.tsx
@@ -20,7 +20,7 @@ function toAsset(r: any): Asset | null {
   };
 }
 
-export const dynamic = "force-dynamic";
+export const revalidate = 3600; // ISR: cached HTML, hourly background refresh
 
 type Params = { slug: string };
 
diff --git a/apps/web/app/cast/page.tsx b/apps/web/app/cast/page.tsx
index 5f4ebf3..57b6cad 100644
--- a/apps/web/app/cast/page.tsx
+++ b/apps/web/app/cast/page.tsx
@@ -18,7 +18,7 @@ function toAsset(r: any): Asset | null {
   };
 }
 
-export const dynamic = "force-dynamic";
+export const revalidate = 3600; // ISR: cached HTML, hourly background refresh
 export const metadata = { title: "Cast" };
 
 async function getCast() {
diff --git a/apps/web/app/episodes/[season]/[episode]/page.tsx b/apps/web/app/episodes/[season]/[episode]/page.tsx
index 7d7ee56..5fdc944 100644
--- a/apps/web/app/episodes/[season]/[episode]/page.tsx
+++ b/apps/web/app/episodes/[season]/[episode]/page.tsx
@@ -3,7 +3,7 @@ import { notFound } from "next/navigation";
 import { pool } from "@/lib/db";
 import { SITE_URL, episodePath } from "@nineoh/core";
 
-export const dynamic = "force-dynamic";
+export const revalidate = 3600; // ISR: cached HTML, hourly background refresh
 
 type Params = { season: string; episode: string };
 
diff --git a/apps/web/app/page.tsx b/apps/web/app/page.tsx
index be5546a..b5cafd4 100644
--- a/apps/web/app/page.tsx
+++ b/apps/web/app/page.tsx
@@ -1,7 +1,7 @@
 import { pool } from "@/lib/db";
 import { HeroArt } from "@/components/HeroArt";
 
-export const dynamic = "force-dynamic";
+export const revalidate = 3600; // ISR: cached HTML, hourly background refresh
 
 async function getStats() {
   try {
diff --git a/apps/web/app/show/page.tsx b/apps/web/app/show/page.tsx
index d87fc37..be66f21 100644
--- a/apps/web/app/show/page.tsx
+++ b/apps/web/app/show/page.tsx
@@ -1,7 +1,7 @@
 import { pool } from "@/lib/db";
 import { castPath } from "@nineoh/core";
 
-export const dynamic = "force-dynamic";
+export const revalidate = 3600; // ISR: cached HTML, hourly background refresh
 export const metadata = {
   title: "90210 — Series Overview",
   description:

← 4c1a88b loop refine 2/n: sort (season asc/desc) + comfortable/compac  ·  back to Nineoh Guide  ·  loop refine 4/n: character detail pages (/characters + /char c766b0c →