anky2002 commited on
Commit
e13aca4
·
verified ·
1 Parent(s): 9803366

perf: add ISR revalidation (30s) to explore page

Browse files
Files changed (1) hide show
  1. src/app/explore/page.tsx +47 -43
src/app/explore/page.tsx CHANGED
@@ -2,13 +2,13 @@ import { Suspense } from "react"
2
  import { Metadata } from "next"
3
  import prisma from "@/lib/prisma"
4
  import { ExploreClient } from "@/components/explore/explore-client"
5
- import { Badge } from "@/components/ui/badge"
6
  import { Loader2 } from "lucide-react"
7
  import { generateSEO } from "@/lib/seo"
8
 
9
  const BASE_URL = process.env.NEXT_PUBLIC_APP_URL || 'https://open-prompt.netlify.app'
10
 
11
- export const dynamic = 'force-dynamic'
 
12
 
13
  export const metadata: Metadata = generateSEO({
14
  title: "Explore AI Prompts | OpenPrompt",
@@ -18,56 +18,60 @@ export const metadata: Metadata = generateSEO({
18
  }) as Metadata
19
 
20
  async function getInitialPrompts(category?: string, search?: string, sort?: string) {
21
- const orderBy: Record<string, 'asc' | 'desc'>[] = []
 
22
 
23
- switch (sort) {
24
- case 'recent':
25
- orderBy.push({ createdAt: 'desc' })
26
- break
27
- case 'stars':
28
- orderBy.push({ starsCount: 'desc' })
29
- break
30
- case 'runs':
31
- orderBy.push({ totalRuns: 'desc' })
32
- break
33
- default:
34
- orderBy.push({ totalRuns: 'desc' })
35
- }
36
 
37
- // Add secondary sort by ID for stability
38
- orderBy.push({ id: 'desc' })
39
 
40
- const where: Record<string, unknown> = {
41
- visibility: 'public',
42
- }
43
 
44
- if (category) {
45
- where.category = category
46
- }
47
 
48
- if (search) {
49
- where.OR = [
50
- { title: { contains: search, mode: 'insensitive' } },
51
- { description: { contains: search, mode: 'insensitive' } },
52
- ]
53
- }
54
 
55
- const prompts = await prisma.prompt.findMany({
56
- where,
57
- include: {
58
- creator: {
59
- select: {
60
- name: true,
61
- username: true,
62
- image: true,
 
63
  },
64
  },
65
- },
66
- orderBy,
67
- take: 12,
68
- })
69
 
70
- return prompts
 
 
 
 
71
  }
72
 
73
  interface ExplorePageProps {
 
2
  import { Metadata } from "next"
3
  import prisma from "@/lib/prisma"
4
  import { ExploreClient } from "@/components/explore/explore-client"
 
5
  import { Loader2 } from "lucide-react"
6
  import { generateSEO } from "@/lib/seo"
7
 
8
  const BASE_URL = process.env.NEXT_PUBLIC_APP_URL || 'https://open-prompt.netlify.app'
9
 
10
+ // Revalidate every 30 seconds instead of force-dynamic
11
+ export const revalidate = 30
12
 
13
  export const metadata: Metadata = generateSEO({
14
  title: "Explore AI Prompts | OpenPrompt",
 
18
  }) as Metadata
19
 
20
  async function getInitialPrompts(category?: string, search?: string, sort?: string) {
21
+ try {
22
+ const orderBy: Record<string, 'asc' | 'desc'>[] = []
23
 
24
+ switch (sort) {
25
+ case 'recent':
26
+ orderBy.push({ createdAt: 'desc' })
27
+ break
28
+ case 'stars':
29
+ orderBy.push({ starsCount: 'desc' })
30
+ break
31
+ case 'runs':
32
+ orderBy.push({ totalRuns: 'desc' })
33
+ break
34
+ default:
35
+ orderBy.push({ totalRuns: 'desc' })
36
+ }
37
 
38
+ orderBy.push({ id: 'desc' })
 
39
 
40
+ const where: Record<string, unknown> = {
41
+ visibility: 'public',
42
+ }
43
 
44
+ if (category) {
45
+ where.category = category
46
+ }
47
 
48
+ if (search) {
49
+ where.OR = [
50
+ { title: { contains: search, mode: 'insensitive' } },
51
+ { description: { contains: search, mode: 'insensitive' } },
52
+ ]
53
+ }
54
 
55
+ const prompts = await prisma.prompt.findMany({
56
+ where,
57
+ include: {
58
+ creator: {
59
+ select: {
60
+ name: true,
61
+ username: true,
62
+ image: true,
63
+ },
64
  },
65
  },
66
+ orderBy,
67
+ take: 12,
68
+ })
 
69
 
70
+ return prompts
71
+ } catch (error) {
72
+ console.error('Explore page data fetch error:', error)
73
+ return []
74
+ }
75
  }
76
 
77
  interface ExplorePageProps {