2026-04-11 23:38:12 -07:00
interface JsonLdProps {
data : Record < string , unknown > ;
}
export function JsonLd ( { data } : JsonLdProps ) {
return (
2026-04-14 21:26:00 -07:00
// biome-ignore lint/security/noDangerouslySetInnerHtml: JSON-LD structured data requires dangerouslySetInnerHTML for script injection
< script type = "application/ld+json" dangerouslySetInnerHTML = { { __html : JSON.stringify ( data ) } } / >
2026-04-11 23:38:12 -07:00
) ;
}
export function OrganizationJsonLd() {
return (
< JsonLd
data = { {
"@context" : "https://schema.org" ,
"@type" : "Organization" ,
name : "SurfSense" ,
2026-05-15 12:35:15 -07:00
url : "https://www.surfsense.com" ,
logo : "https://www.surfsense.com/logo.png" ,
2026-04-14 21:26:00 -07:00
description :
feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
/<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
(canonical route is [workspace_id])
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00
"SurfSense is an open-source competitive intelligence platform. AI agents monitor competitors, track rankings, and listen to your market through one API or MCP server." ,
2026-07-05 21:57:39 -07:00
sameAs : [
"https://github.com/MODSetter/SurfSense" ,
"https://discord.gg/ejRNvftDp9" ,
"https://www.reddit.com/r/SurfSense/" ,
"https://www.linkedin.com/company/surfsense/" ,
] ,
2026-04-11 23:38:12 -07:00
contactPoint : {
"@type" : "ContactPoint" ,
email : "rohan@surfsense.com" ,
contactType : "sales" ,
} ,
} }
/ >
) ;
}
export function WebSiteJsonLd() {
return (
< JsonLd
data = { {
"@context" : "https://schema.org" ,
"@type" : "WebSite" ,
name : "SurfSense" ,
2026-05-15 12:35:15 -07:00
url : "https://www.surfsense.com" ,
2026-04-14 21:26:00 -07:00
description :
feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
/<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
(canonical route is [workspace_id])
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00
"SurfSense is an open-source competitive intelligence platform for AI agents, with live data connectors served through one API or MCP server." ,
2026-04-11 23:38:12 -07:00
potentialAction : {
"@type" : "SearchAction" ,
target : {
"@type" : "EntryPoint" ,
2026-05-15 12:35:15 -07:00
urlTemplate : "https://www.surfsense.com/docs?search={search_term_string}" ,
2026-04-11 23:38:12 -07:00
} ,
"query-input" : "required name=search_term_string" ,
} ,
} }
/ >
) ;
}
export function SoftwareApplicationJsonLd() {
return (
< JsonLd
data = { {
"@context" : "https://schema.org" ,
"@type" : "SoftwareApplication" ,
name : "SurfSense" ,
applicationCategory : "BusinessApplication" ,
operatingSystem : "Windows, macOS, Linux, Web" ,
offers : {
"@type" : "Offer" ,
price : "0" ,
priceCurrency : "USD" ,
2026-07-05 20:45:23 -07:00
description :
"Free self-hosted from the open-source repo; cloud starts with $5 of free credit, then pay as you go" ,
2026-04-11 23:38:12 -07:00
} ,
2026-04-14 21:26:00 -07:00
description :
feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
/<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
(canonical route is [workspace_id])
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00
"SurfSense is an open-source competitive intelligence platform. AI agents monitor competitors, track rankings, and listen to your market with platform-native connectors for Reddit, YouTube, Google Maps, Google Search, and the open web, through one API or MCP server." ,
2026-05-15 12:35:15 -07:00
url : "https://www.surfsense.com" ,
2026-04-11 23:38:12 -07:00
downloadUrl : "https://github.com/MODSetter/SurfSense/releases" ,
2026-04-14 21:26:00 -07:00
featureList : [
feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
/<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
(canonical route is [workspace_id])
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00
"Platform-native connectors: Reddit, YouTube, Google Maps, Google Search, Web Crawl" ,
"MCP server that exposes every connector as a native agent tool" ,
"Agent harness with retries, structured output, and credit metering" ,
"Competitor, brand, and rank monitoring with briefs and alerts" ,
2026-05-31 19:22:50 -07:00
"AI automations and agents (scheduled and event-triggered workflows)" ,
feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
/<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
(canonical route is [workspace_id])
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00
"AI-powered semantic search across connected tools and documents" ,
2026-07-05 20:45:23 -07:00
"Knowledge base with file uploads and Google Drive, OneDrive, and Dropbox sync" ,
feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
/<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
(canonical route is [workspace_id])
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00
"Document Q&A with citations, report, podcast, and video generation" ,
2026-04-14 21:26:00 -07:00
"Real-time collaborative team chats" ,
feat(marketing): CI-first homepage, connector API pages, and hero chat demo
- Homepage rebuilt around competitive-intelligence positioning: connector grid,
how-it-works, use-case art, compare table, FAQ, and a scripted new-chat hero
demo (typewriter prompt, agent timeline, streamed answer, /login on send)
- Marketing pages for the Reddit/YouTube/Maps/SERP/Web Crawl scrape APIs at
/<slug>, a /connectors hub, and a bespoke /mcp-connector page
- Remove stale app/dashboard/[search_space_id] tree that broke the build
(canonical route is [workspace_id])
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 20:28:27 -07:00
"Native desktop app with Quick, General, and Screenshot Assist" ,
"Open source and self-hostable with no data limits" ,
2026-04-14 21:26:00 -07:00
] ,
2026-04-11 23:38:12 -07:00
} }
/ >
) ;
}
export function ArticleJsonLd ( {
title ,
description ,
url ,
datePublished ,
2026-05-15 12:35:15 -07:00
dateModified ,
2026-04-11 23:38:12 -07:00
author ,
image ,
} : {
title : string ;
description : string ;
url : string ;
datePublished : string ;
2026-05-15 12:35:15 -07:00
dateModified? : string ;
2026-04-11 23:38:12 -07:00
author : string ;
image? : string ;
} ) {
return (
< JsonLd
data = { {
"@context" : "https://schema.org" ,
"@type" : "Article" ,
headline : title ,
description ,
url ,
datePublished ,
2026-05-15 12:35:15 -07:00
. . . ( dateModified ? { dateModified } : { } ) ,
2026-04-11 23:38:12 -07:00
author : {
"@type" : "Organization" ,
name : author ,
} ,
publisher : {
"@type" : "Organization" ,
name : "SurfSense" ,
logo : {
"@type" : "ImageObject" ,
2026-05-15 12:35:15 -07:00
url : "https://www.surfsense.com/logo.png" ,
2026-04-11 23:38:12 -07:00
} ,
} ,
2026-05-15 12:35:15 -07:00
image : image || "https://www.surfsense.com/og-image.png" ,
2026-04-11 23:38:12 -07:00
mainEntityOfPage : {
"@type" : "WebPage" ,
"@id" : url ,
} ,
} }
/ >
) ;
}
2026-04-14 21:26:00 -07:00
export function BreadcrumbJsonLd ( { items } : { items : { name : string ; url : string } [ ] } ) {
2026-04-11 23:38:12 -07:00
return (
< JsonLd
data = { {
"@context" : "https://schema.org" ,
"@type" : "BreadcrumbList" ,
itemListElement : items.map ( ( item , index ) = > ( {
"@type" : "ListItem" ,
position : index + 1 ,
name : item.name ,
item : item.url ,
} ) ) ,
} }
/ >
) ;
}
2026-04-14 21:26:00 -07:00
export function FAQJsonLd ( { questions } : { questions : { question : string ; answer : string } [ ] } ) {
2026-04-11 23:38:12 -07:00
return (
< JsonLd
data = { {
"@context" : "https://schema.org" ,
"@type" : "FAQPage" ,
mainEntity : questions.map ( ( q ) = > ( {
"@type" : "Question" ,
name : q.question ,
acceptedAnswer : {
"@type" : "Answer" ,
text : q.answer ,
} ,
} ) ) ,
} }
/ >
) ;
}