@@ -90,12 +90,80 @@ export const viewport = {
90
90
initialScale : 1 ,
91
91
} ;
92
92
93
+ const jsonLd = {
94
+ '@context' : 'https://schema.org' ,
95
+ '@type' : 'SoftwareApplication' ,
96
+ '@id' : `${ siteConfig . url } /#software` ,
97
+ 'name' : siteConfig . name ,
98
+ 'description' : siteConfig . description ,
99
+ 'applicationCategory' : 'FinanceApplication' ,
100
+ 'operatingSystem' : 'Web' ,
101
+ 'url' : siteConfig . url ,
102
+ 'offers' : [
103
+ {
104
+ '@type' : 'Offer' ,
105
+ 'name' : 'Premium Plan' ,
106
+ 'category' : 'SubscriptionPlan' ,
107
+ 'price' : '1.50' ,
108
+ 'priceCurrency' : 'EUR' ,
109
+ 'availability' : 'https://schema.org/InStock' ,
110
+ 'priceValidUntil' : `${ ( new Date ( ) ) . getFullYear ( ) } -12-31` ,
111
+ 'seller' : {
112
+ '@type' : 'Organization' ,
113
+ 'name' : siteConfig . author . name ,
114
+ 'url' : siteConfig . author . url
115
+ }
116
+ } ,
117
+ {
118
+ '@type' : 'Offer' ,
119
+ 'name' : 'Self-Hosted Edition' ,
120
+ 'price' : '0' ,
121
+ 'priceCurrency' : 'EUR' ,
122
+ 'availability' : 'https://schema.org/InStock' ,
123
+ 'seller' : {
124
+ '@type' : 'Organization' ,
125
+ 'name' : siteConfig . author . name ,
126
+ 'url' : siteConfig . author . url
127
+ }
128
+ }
129
+ ] ,
130
+ 'featureList' : [
131
+ 'Subscription tracking' ,
132
+ 'Payment reminders' ,
133
+ 'Multi-currency support' ,
134
+ 'Expense analytics' ,
135
+ 'Timezone support' ,
136
+ 'Push notifications' ,
137
+ 'Email notifications' ,
138
+ ] ,
139
+ 'screenshot' : `${ siteConfig . url } /images/og.png` ,
140
+ 'softwareVersion' : '1.0' ,
141
+ 'datePublished' : '2025-02-25' ,
142
+ 'keywords' : siteConfig . keywords ,
143
+ 'author' : {
144
+ '@type' : 'Organization' ,
145
+ 'name' : siteConfig . author . name ,
146
+ 'url' : siteConfig . author . url
147
+ } ,
148
+ 'provider' : {
149
+ '@type' : 'Organization' ,
150
+ 'name' : siteConfig . author . name ,
151
+ 'url' : siteConfig . author . url
152
+ }
153
+ } ;
154
+
93
155
// Root Layout
94
156
export default async function RootLayout ( { children } ) {
95
157
const session = await auth ( ) ;
96
158
97
159
return (
98
160
< html lang = 'en' suppressHydrationWarning >
161
+ < head >
162
+ < script
163
+ type = 'application/ld+json'
164
+ dangerouslySetInnerHTML = { { __html : JSON . stringify ( jsonLd ) } }
165
+ />
166
+ </ head >
99
167
< body className = { `${ inter . className } antialiased` } >
100
168
< SessionProvider session = { session } >
101
169
< ThemeProvider attribute = 'class' defaultTheme = 'system' enableSystem disableTransitionOnChange >
0 commit comments