← 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
M apps/web/app/cast/[slug]/page.tsxM apps/web/app/cast/page.tsxM apps/web/app/episodes/[season]/[episode]/page.tsxM apps/web/app/page.tsxM apps/web/app/show/page.tsx
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 →