@@ -4,6 +4,7 @@ import { ReactFlowProvider } from "@xyflow/react";
44import { Provider } from "jotai" ;
55import type { ReactNode } from "react" ;
66import { AuthProvider } from "@/components/auth/provider" ;
7+ import { GitHubStarsProvider } from "@/components/github-stars-provider" ;
78import { ThemeProvider } from "@/components/theme-provider" ;
89import { Toaster } from "@/components/ui/sonner" ;
910import { PersistentCanvas } from "@/components/workflow/persistent-canvas" ;
@@ -24,33 +25,67 @@ export const viewport: Viewport = {
2425 viewportFit : "cover" ,
2526} ;
2627
28+ const GITHUB_REPO = "vercel-labs/workflow-builder-template" ;
29+
30+ async function getGitHubStars ( ) : Promise < number | null > {
31+ try {
32+ const response = await fetch (
33+ `https://api.github.com/repos/${ GITHUB_REPO } ` ,
34+ {
35+ headers : {
36+ Accept : "application/vnd.github.v3+json" ,
37+ ...( process . env . GITHUB_TOKEN && {
38+ Authorization : `Bearer ${ process . env . GITHUB_TOKEN } ` ,
39+ } ) ,
40+ } ,
41+ next : { revalidate : 3600 } , // Cache for 1 hour
42+ }
43+ ) ;
44+
45+ if ( ! response . ok ) {
46+ return null ;
47+ }
48+
49+ const data = await response . json ( ) ;
50+ return data . stargazers_count ;
51+ } catch {
52+ return null ;
53+ }
54+ }
55+
2756type RootLayoutProps = {
2857 children : ReactNode ;
2958} ;
3059
31- const RootLayout = ( { children } : RootLayoutProps ) => (
32- < html lang = "en" suppressHydrationWarning >
33- < body className = { cn ( sans . variable , mono . variable , "antialiased" ) } >
34- < ThemeProvider
35- attribute = "class"
36- defaultTheme = "system"
37- disableTransitionOnChange
38- enableSystem
39- >
40- < Provider >
41- < AuthProvider >
42- < ReactFlowProvider >
43- < PersistentCanvas />
44- < div className = "pointer-events-none relative z-10" >
45- { children }
46- </ div >
47- </ ReactFlowProvider >
48- < Toaster />
49- </ AuthProvider >
50- </ Provider >
51- </ ThemeProvider >
52- </ body >
53- </ html >
54- ) ;
60+ const RootLayout = async ( { children } : RootLayoutProps ) => {
61+ const stars = await getGitHubStars ( ) ;
62+
63+ return (
64+ < html lang = "en" suppressHydrationWarning >
65+ < body className = { cn ( sans . variable , mono . variable , "antialiased" ) } >
66+ < ThemeProvider
67+ attribute = "class"
68+ defaultTheme = "system"
69+ disableTransitionOnChange
70+ enableSystem
71+ >
72+ < Provider >
73+ < AuthProvider >
74+ < GitHubStarsProvider stars = { stars } >
75+ < ReactFlowProvider >
76+ < PersistentCanvas />
77+ < div className = "pointer-events-none relative z-10" >
78+ { children }
79+ </ div >
80+ </ ReactFlowProvider >
81+ </ GitHubStarsProvider >
82+ < Toaster />
83+ </ AuthProvider >
84+ </ Provider >
85+ </ ThemeProvider >
86+ </ body >
87+ </ html >
88+ ) ;
89+ } ;
5590
5691export default RootLayout ;
0 commit comments