diff --git a/apps/web/content-collections.ts b/apps/web/content-collections.ts index 02637fb492..a9bf73e912 100644 --- a/apps/web/content-collections.ts +++ b/apps/web/content-collections.ts @@ -211,6 +211,7 @@ const templates = defineCollection({ schema: z.object({ title: z.string(), description: z.string(), + category: z.string(), sections: z.array( z.object({ title: z.string(), diff --git a/apps/web/content/templates/board-meeting.mdx b/apps/web/content/templates/board-meeting.mdx index 6154540bcc..507212bb6d 100644 --- a/apps/web/content/templates/board-meeting.mdx +++ b/apps/web/content/templates/board-meeting.mdx @@ -1,6 +1,7 @@ --- title: "Board Meeting" description: "Comprehensive template for board meetings and governance discussions" +category: "Leadership & Management" sections: - title: "Company Performance" description: "Financial and operational updates" diff --git a/apps/web/content/templates/brainstorming-session.mdx b/apps/web/content/templates/brainstorming-session.mdx index 2c95063d41..17207ab069 100644 --- a/apps/web/content/templates/brainstorming-session.mdx +++ b/apps/web/content/templates/brainstorming-session.mdx @@ -1,6 +1,7 @@ --- title: "Brainstorming Session" description: "Template for creative brainstorming and ideation sessions" +category: "Product & Design" sections: - title: "Session Goal" description: "What problem or opportunity are we exploring?" diff --git a/apps/web/content/templates/client-kickoff.mdx b/apps/web/content/templates/client-kickoff.mdx index a484dd87ff..31bccee890 100644 --- a/apps/web/content/templates/client-kickoff.mdx +++ b/apps/web/content/templates/client-kickoff.mdx @@ -1,6 +1,7 @@ --- title: "Client Kickoff Meeting" description: "Template for starting new client engagements and setting expectations" +category: "Sales & Customer Success" sections: - title: "Project Overview" description: "Scope, objectives, and deliverables" diff --git a/apps/web/content/templates/customer-discovery.mdx b/apps/web/content/templates/customer-discovery.mdx index b0d059f34f..68eeb815ca 100644 --- a/apps/web/content/templates/customer-discovery.mdx +++ b/apps/web/content/templates/customer-discovery.mdx @@ -1,6 +1,7 @@ --- title: "Customer Discovery Interview" description: "Template for conducting customer discovery and user research interviews" +category: "Product & Design" sections: - title: "Background" description: "Customer context and background" diff --git a/apps/web/content/templates/daily-standup.mdx b/apps/web/content/templates/daily-standup.mdx index 604e6459f8..1534f8e6c9 100644 --- a/apps/web/content/templates/daily-standup.mdx +++ b/apps/web/content/templates/daily-standup.mdx @@ -1,6 +1,7 @@ --- title: "Daily Standup" description: "Quick daily sync template for agile teams to share progress and blockers" +category: "Engineering & Development" sections: - title: "Yesterday's Accomplishments" description: "What did you complete yesterday?" diff --git a/apps/web/content/templates/executive-briefing.mdx b/apps/web/content/templates/executive-briefing.mdx index 332f2e3848..b680665410 100644 --- a/apps/web/content/templates/executive-briefing.mdx +++ b/apps/web/content/templates/executive-briefing.mdx @@ -1,6 +1,7 @@ --- title: "Executive Briefing" description: "Template for executives to capture high-level strategic discussions and decisions" +category: "Leadership & Management" sections: - title: "Strategic Overview" description: "High-level context and objectives" diff --git a/apps/web/content/templates/incident-postmortem.mdx b/apps/web/content/templates/incident-postmortem.mdx index ecca2cd177..3ca9b82904 100644 --- a/apps/web/content/templates/incident-postmortem.mdx +++ b/apps/web/content/templates/incident-postmortem.mdx @@ -1,6 +1,7 @@ --- title: "Incident Postmortem" description: "Template for conducting blameless postmortems after incidents or outages" +category: "Engineering & Development" sections: - title: "Incident Summary" description: "What happened and when" diff --git a/apps/web/content/templates/investor-pitch.mdx b/apps/web/content/templates/investor-pitch.mdx index b11ece0c20..4b8ed11761 100644 --- a/apps/web/content/templates/investor-pitch.mdx +++ b/apps/web/content/templates/investor-pitch.mdx @@ -1,6 +1,7 @@ --- title: "Investor Pitch Meeting" description: "Template for founders pitching to investors and VCs" +category: "Business Development" sections: - title: "Meeting Context" description: "Investor background and meeting purpose" diff --git a/apps/web/content/templates/lecture-notes.mdx b/apps/web/content/templates/lecture-notes.mdx index 605e56eba9..e22e549892 100644 --- a/apps/web/content/templates/lecture-notes.mdx +++ b/apps/web/content/templates/lecture-notes.mdx @@ -1,6 +1,7 @@ --- title: "Lecture Notes" description: "Template for students to capture and organize lecture content" +category: "Learning & Research" sections: - title: "Lecture Information" description: "Course, date, and topic" diff --git a/apps/web/content/templates/one-on-one-meeting.mdx b/apps/web/content/templates/one-on-one-meeting.mdx index 9044f6d75c..b33f6e903d 100644 --- a/apps/web/content/templates/one-on-one-meeting.mdx +++ b/apps/web/content/templates/one-on-one-meeting.mdx @@ -1,6 +1,7 @@ --- title: "1:1 Meeting" description: "A structured template for one-on-one meetings with team members" +category: "Leadership & Management" sections: - title: "Updates" description: "What's been happening since last time?" diff --git a/apps/web/content/templates/performance-review.mdx b/apps/web/content/templates/performance-review.mdx index 0871573cf0..81581933ed 100644 --- a/apps/web/content/templates/performance-review.mdx +++ b/apps/web/content/templates/performance-review.mdx @@ -1,6 +1,7 @@ --- title: "Performance Review" description: "Template for conducting employee performance reviews and career development discussions" +category: "Leadership & Management" sections: - title: "Review Period Summary" description: "Overview of the review period" diff --git a/apps/web/content/templates/product-roadmap-review.mdx b/apps/web/content/templates/product-roadmap-review.mdx index 70222133c9..cbc57489e7 100644 --- a/apps/web/content/templates/product-roadmap-review.mdx +++ b/apps/web/content/templates/product-roadmap-review.mdx @@ -1,6 +1,7 @@ --- title: "Product Roadmap Review" description: "Template for product managers to review and align on product roadmap priorities" +category: "Product & Design" sections: - title: "Current Status" description: "Progress on in-flight initiatives" diff --git a/apps/web/content/templates/project-kickoff.mdx b/apps/web/content/templates/project-kickoff.mdx index 5a9a7bf2d4..a5699b7099 100644 --- a/apps/web/content/templates/project-kickoff.mdx +++ b/apps/web/content/templates/project-kickoff.mdx @@ -1,6 +1,7 @@ --- title: "Project Kickoff" description: "Comprehensive template for starting new projects with clear objectives and alignment" +category: "Leadership & Management" sections: - title: "Project Overview" - title: "Goals & Success Metrics" diff --git a/apps/web/content/templates/sales-discovery-call.mdx b/apps/web/content/templates/sales-discovery-call.mdx index 167eebca24..1328e19ae7 100644 --- a/apps/web/content/templates/sales-discovery-call.mdx +++ b/apps/web/content/templates/sales-discovery-call.mdx @@ -1,6 +1,7 @@ --- title: "Sales Discovery Call" description: "Template for sales teams to qualify leads and understand customer needs" +category: "Sales & Customer Success" sections: - title: "Company Overview" description: "Background on the prospect" diff --git a/apps/web/content/templates/sprint-planning.mdx b/apps/web/content/templates/sprint-planning.mdx index 2b5dbf7ade..5408458124 100644 --- a/apps/web/content/templates/sprint-planning.mdx +++ b/apps/web/content/templates/sprint-planning.mdx @@ -1,6 +1,7 @@ --- title: "Sprint Planning" description: "Template for planning development sprints and setting team goals" +category: "Engineering & Development" sections: - title: "Sprint Goal" description: "What is the main objective for this sprint?" diff --git a/apps/web/content/templates/sprint-retrospective.mdx b/apps/web/content/templates/sprint-retrospective.mdx index e7e15403f9..e0b644b83c 100644 --- a/apps/web/content/templates/sprint-retrospective.mdx +++ b/apps/web/content/templates/sprint-retrospective.mdx @@ -1,6 +1,7 @@ --- title: "Sprint Retrospective" description: "Reflect on the sprint to continuously improve team processes and collaboration" +category: "Engineering & Development" sections: - title: "What Went Well" description: "Celebrate wins and positive outcomes" diff --git a/apps/web/content/templates/technical-design-review.mdx b/apps/web/content/templates/technical-design-review.mdx index 26675b1949..72f57b2c67 100644 --- a/apps/web/content/templates/technical-design-review.mdx +++ b/apps/web/content/templates/technical-design-review.mdx @@ -1,6 +1,7 @@ --- title: "Technical Design Review" description: "Template for engineers to review technical designs and architecture decisions" +category: "Engineering & Development" sections: - title: "Problem Statement" description: "What problem are we solving?" diff --git a/apps/web/src/routeTree.gen.ts b/apps/web/src/routeTree.gen.ts index 1ad5ba21a9..b4f089a986 100644 --- a/apps/web/src/routeTree.gen.ts +++ b/apps/web/src/routeTree.gen.ts @@ -23,6 +23,7 @@ import { Route as ViewIndexRouteImport } from './routes/_view/index' import { Route as WebhookStripeRouteImport } from './routes/webhook/stripe' import { Route as WebhookNangoRouteImport } from './routes/webhook/nango' import { Route as ApiTemplatesRouteImport } from './routes/api/templates' +import { Route as ViewTemplatesRouteImport } from './routes/_view/templates' import { Route as ViewTeamRouteImport } from './routes/_view/team' import { Route as ViewRoadmapRouteImport } from './routes/_view/roadmap' import { Route as ViewPricingRouteImport } from './routes/_view/pricing' @@ -37,16 +38,12 @@ import { Route as ViewDocsIndexRouteImport } from './routes/_view/docs/index' import { Route as ViewChangelogIndexRouteImport } from './routes/_view/changelog/index' import { Route as ViewBlogIndexRouteImport } from './routes/_view/blog/index' import { Route as ViewAppIndexRouteImport } from './routes/_view/app/index' -import { Route as ViewProductWebRouteImport } from './routes/_view/product/web' +import { Route as ViewProductWorkflowsRouteImport } from './routes/_view/product/workflows' import { Route as ViewProductSelfHostingRouteImport } from './routes/_view/product/self-hosting' -import { Route as ViewProductOwhisperRouteImport } from './routes/_view/product/owhisper' import { Route as ViewProductNotepadRouteImport } from './routes/_view/product/notepad' +import { Route as ViewProductMiniAppsRouteImport } from './routes/_view/product/mini-apps' import { Route as ViewProductLocalAiRouteImport } from './routes/_view/product/local-ai' -import { Route as ViewProductFloatingPanelRouteImport } from './routes/_view/product/floating-panel' -import { Route as ViewProductExtensibilityRouteImport } from './routes/_view/product/extensibility' -import { Route as ViewProductDailyNoteRouteImport } from './routes/_view/product/daily-note' -import { Route as ViewProductContactsRouteImport } from './routes/_view/product/contacts' -import { Route as ViewProductCalendarRouteImport } from './routes/_view/product/calendar' +import { Route as ViewProductExtensionsRouteImport } from './routes/_view/product/extensions' import { Route as ViewProductBotRouteImport } from './routes/_view/product/bot' import { Route as ViewProductApiRouteImport } from './routes/_view/product/api' import { Route as ViewProductAiNotetakingRouteImport } from './routes/_view/product/ai-notetaking' @@ -129,6 +126,11 @@ const ApiTemplatesRoute = ApiTemplatesRouteImport.update({ path: '/api/templates', getParentRoute: () => rootRouteImport, } as any) +const ViewTemplatesRoute = ViewTemplatesRouteImport.update({ + id: '/templates', + path: '/templates', + getParentRoute: () => ViewRouteRoute, +} as any) const ViewTeamRoute = ViewTeamRouteImport.update({ id: '/team', path: '/team', @@ -199,9 +201,9 @@ const ViewAppIndexRoute = ViewAppIndexRouteImport.update({ path: '/', getParentRoute: () => ViewAppRouteRoute, } as any) -const ViewProductWebRoute = ViewProductWebRouteImport.update({ - id: '/product/web', - path: '/product/web', +const ViewProductWorkflowsRoute = ViewProductWorkflowsRouteImport.update({ + id: '/product/workflows', + path: '/product/workflows', getParentRoute: () => ViewRouteRoute, } as any) const ViewProductSelfHostingRoute = ViewProductSelfHostingRouteImport.update({ @@ -209,46 +211,24 @@ const ViewProductSelfHostingRoute = ViewProductSelfHostingRouteImport.update({ path: '/product/self-hosting', getParentRoute: () => ViewRouteRoute, } as any) -const ViewProductOwhisperRoute = ViewProductOwhisperRouteImport.update({ - id: '/product/owhisper', - path: '/product/owhisper', - getParentRoute: () => ViewRouteRoute, -} as any) const ViewProductNotepadRoute = ViewProductNotepadRouteImport.update({ id: '/product/notepad', path: '/product/notepad', getParentRoute: () => ViewRouteRoute, } as any) +const ViewProductMiniAppsRoute = ViewProductMiniAppsRouteImport.update({ + id: '/product/mini-apps', + path: '/product/mini-apps', + getParentRoute: () => ViewRouteRoute, +} as any) const ViewProductLocalAiRoute = ViewProductLocalAiRouteImport.update({ id: '/product/local-ai', path: '/product/local-ai', getParentRoute: () => ViewRouteRoute, } as any) -const ViewProductFloatingPanelRoute = - ViewProductFloatingPanelRouteImport.update({ - id: '/product/floating-panel', - path: '/product/floating-panel', - getParentRoute: () => ViewRouteRoute, - } as any) -const ViewProductExtensibilityRoute = - ViewProductExtensibilityRouteImport.update({ - id: '/product/extensibility', - path: '/product/extensibility', - getParentRoute: () => ViewRouteRoute, - } as any) -const ViewProductDailyNoteRoute = ViewProductDailyNoteRouteImport.update({ - id: '/product/daily-note', - path: '/product/daily-note', - getParentRoute: () => ViewRouteRoute, -} as any) -const ViewProductContactsRoute = ViewProductContactsRouteImport.update({ - id: '/product/contacts', - path: '/product/contacts', - getParentRoute: () => ViewRouteRoute, -} as any) -const ViewProductCalendarRoute = ViewProductCalendarRouteImport.update({ - id: '/product/calendar', - path: '/product/calendar', +const ViewProductExtensionsRoute = ViewProductExtensionsRouteImport.update({ + id: '/product/extensions', + path: '/product/extensions', getParentRoute: () => ViewRouteRoute, } as any) const ViewProductBotRoute = ViewProductBotRouteImport.update({ @@ -331,6 +311,7 @@ export interface FileRoutesByFullPath { '/pricing': typeof ViewPricingRoute '/roadmap': typeof ViewRoadmapRoute '/team': typeof ViewTeamRoute + '/templates': typeof ViewTemplatesRoute '/api/templates': typeof ApiTemplatesRoute '/webhook/nango': typeof WebhookNangoRoute '/webhook/stripe': typeof WebhookStripeRoute @@ -347,16 +328,12 @@ export interface FileRoutesByFullPath { '/product/ai-notetaking': typeof ViewProductAiNotetakingRoute '/product/api': typeof ViewProductApiRoute '/product/bot': typeof ViewProductBotRoute - '/product/calendar': typeof ViewProductCalendarRoute - '/product/contacts': typeof ViewProductContactsRoute - '/product/daily-note': typeof ViewProductDailyNoteRoute - '/product/extensibility': typeof ViewProductExtensibilityRoute - '/product/floating-panel': typeof ViewProductFloatingPanelRoute + '/product/extensions': typeof ViewProductExtensionsRoute '/product/local-ai': typeof ViewProductLocalAiRoute + '/product/mini-apps': typeof ViewProductMiniAppsRoute '/product/notepad': typeof ViewProductNotepadRoute - '/product/owhisper': typeof ViewProductOwhisperRoute '/product/self-hosting': typeof ViewProductSelfHostingRoute - '/product/web': typeof ViewProductWebRoute + '/product/workflows': typeof ViewProductWorkflowsRoute '/app/': typeof ViewAppIndexRoute '/blog': typeof ViewBlogIndexRoute '/changelog': typeof ViewChangelogIndexRoute @@ -380,6 +357,7 @@ export interface FileRoutesByTo { '/pricing': typeof ViewPricingRoute '/roadmap': typeof ViewRoadmapRoute '/team': typeof ViewTeamRoute + '/templates': typeof ViewTemplatesRoute '/api/templates': typeof ApiTemplatesRoute '/webhook/nango': typeof WebhookNangoRoute '/webhook/stripe': typeof WebhookStripeRoute @@ -396,16 +374,12 @@ export interface FileRoutesByTo { '/product/ai-notetaking': typeof ViewProductAiNotetakingRoute '/product/api': typeof ViewProductApiRoute '/product/bot': typeof ViewProductBotRoute - '/product/calendar': typeof ViewProductCalendarRoute - '/product/contacts': typeof ViewProductContactsRoute - '/product/daily-note': typeof ViewProductDailyNoteRoute - '/product/extensibility': typeof ViewProductExtensibilityRoute - '/product/floating-panel': typeof ViewProductFloatingPanelRoute + '/product/extensions': typeof ViewProductExtensionsRoute '/product/local-ai': typeof ViewProductLocalAiRoute + '/product/mini-apps': typeof ViewProductMiniAppsRoute '/product/notepad': typeof ViewProductNotepadRoute - '/product/owhisper': typeof ViewProductOwhisperRoute '/product/self-hosting': typeof ViewProductSelfHostingRoute - '/product/web': typeof ViewProductWebRoute + '/product/workflows': typeof ViewProductWorkflowsRoute '/app': typeof ViewAppIndexRoute '/blog': typeof ViewBlogIndexRoute '/changelog': typeof ViewChangelogIndexRoute @@ -433,6 +407,7 @@ export interface FileRoutesById { '/_view/pricing': typeof ViewPricingRoute '/_view/roadmap': typeof ViewRoadmapRoute '/_view/team': typeof ViewTeamRoute + '/_view/templates': typeof ViewTemplatesRoute '/api/templates': typeof ApiTemplatesRoute '/webhook/nango': typeof WebhookNangoRoute '/webhook/stripe': typeof WebhookStripeRoute @@ -449,16 +424,12 @@ export interface FileRoutesById { '/_view/product/ai-notetaking': typeof ViewProductAiNotetakingRoute '/_view/product/api': typeof ViewProductApiRoute '/_view/product/bot': typeof ViewProductBotRoute - '/_view/product/calendar': typeof ViewProductCalendarRoute - '/_view/product/contacts': typeof ViewProductContactsRoute - '/_view/product/daily-note': typeof ViewProductDailyNoteRoute - '/_view/product/extensibility': typeof ViewProductExtensibilityRoute - '/_view/product/floating-panel': typeof ViewProductFloatingPanelRoute + '/_view/product/extensions': typeof ViewProductExtensionsRoute '/_view/product/local-ai': typeof ViewProductLocalAiRoute + '/_view/product/mini-apps': typeof ViewProductMiniAppsRoute '/_view/product/notepad': typeof ViewProductNotepadRoute - '/_view/product/owhisper': typeof ViewProductOwhisperRoute '/_view/product/self-hosting': typeof ViewProductSelfHostingRoute - '/_view/product/web': typeof ViewProductWebRoute + '/_view/product/workflows': typeof ViewProductWorkflowsRoute '/_view/app/': typeof ViewAppIndexRoute '/_view/blog/': typeof ViewBlogIndexRoute '/_view/changelog/': typeof ViewChangelogIndexRoute @@ -486,6 +457,7 @@ export interface FileRouteTypes { | '/pricing' | '/roadmap' | '/team' + | '/templates' | '/api/templates' | '/webhook/nango' | '/webhook/stripe' @@ -502,16 +474,12 @@ export interface FileRouteTypes { | '/product/ai-notetaking' | '/product/api' | '/product/bot' - | '/product/calendar' - | '/product/contacts' - | '/product/daily-note' - | '/product/extensibility' - | '/product/floating-panel' + | '/product/extensions' | '/product/local-ai' + | '/product/mini-apps' | '/product/notepad' - | '/product/owhisper' | '/product/self-hosting' - | '/product/web' + | '/product/workflows' | '/app/' | '/blog' | '/changelog' @@ -535,6 +503,7 @@ export interface FileRouteTypes { | '/pricing' | '/roadmap' | '/team' + | '/templates' | '/api/templates' | '/webhook/nango' | '/webhook/stripe' @@ -551,16 +520,12 @@ export interface FileRouteTypes { | '/product/ai-notetaking' | '/product/api' | '/product/bot' - | '/product/calendar' - | '/product/contacts' - | '/product/daily-note' - | '/product/extensibility' - | '/product/floating-panel' + | '/product/extensions' | '/product/local-ai' + | '/product/mini-apps' | '/product/notepad' - | '/product/owhisper' | '/product/self-hosting' - | '/product/web' + | '/product/workflows' | '/app' | '/blog' | '/changelog' @@ -587,6 +552,7 @@ export interface FileRouteTypes { | '/_view/pricing' | '/_view/roadmap' | '/_view/team' + | '/_view/templates' | '/api/templates' | '/webhook/nango' | '/webhook/stripe' @@ -603,16 +569,12 @@ export interface FileRouteTypes { | '/_view/product/ai-notetaking' | '/_view/product/api' | '/_view/product/bot' - | '/_view/product/calendar' - | '/_view/product/contacts' - | '/_view/product/daily-note' - | '/_view/product/extensibility' - | '/_view/product/floating-panel' + | '/_view/product/extensions' | '/_view/product/local-ai' + | '/_view/product/mini-apps' | '/_view/product/notepad' - | '/_view/product/owhisper' | '/_view/product/self-hosting' - | '/_view/product/web' + | '/_view/product/workflows' | '/_view/app/' | '/_view/blog/' | '/_view/changelog/' @@ -737,6 +699,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ApiTemplatesRouteImport parentRoute: typeof rootRouteImport } + '/_view/templates': { + id: '/_view/templates' + path: '/templates' + fullPath: '/templates' + preLoaderRoute: typeof ViewTemplatesRouteImport + parentRoute: typeof ViewRouteRoute + } '/_view/team': { id: '/_view/team' path: '/team' @@ -835,11 +804,11 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewAppIndexRouteImport parentRoute: typeof ViewAppRouteRoute } - '/_view/product/web': { - id: '/_view/product/web' - path: '/product/web' - fullPath: '/product/web' - preLoaderRoute: typeof ViewProductWebRouteImport + '/_view/product/workflows': { + id: '/_view/product/workflows' + path: '/product/workflows' + fullPath: '/product/workflows' + preLoaderRoute: typeof ViewProductWorkflowsRouteImport parentRoute: typeof ViewRouteRoute } '/_view/product/self-hosting': { @@ -849,13 +818,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewProductSelfHostingRouteImport parentRoute: typeof ViewRouteRoute } - '/_view/product/owhisper': { - id: '/_view/product/owhisper' - path: '/product/owhisper' - fullPath: '/product/owhisper' - preLoaderRoute: typeof ViewProductOwhisperRouteImport - parentRoute: typeof ViewRouteRoute - } '/_view/product/notepad': { id: '/_view/product/notepad' path: '/product/notepad' @@ -863,6 +825,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewProductNotepadRouteImport parentRoute: typeof ViewRouteRoute } + '/_view/product/mini-apps': { + id: '/_view/product/mini-apps' + path: '/product/mini-apps' + fullPath: '/product/mini-apps' + preLoaderRoute: typeof ViewProductMiniAppsRouteImport + parentRoute: typeof ViewRouteRoute + } '/_view/product/local-ai': { id: '/_view/product/local-ai' path: '/product/local-ai' @@ -870,39 +839,11 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewProductLocalAiRouteImport parentRoute: typeof ViewRouteRoute } - '/_view/product/floating-panel': { - id: '/_view/product/floating-panel' - path: '/product/floating-panel' - fullPath: '/product/floating-panel' - preLoaderRoute: typeof ViewProductFloatingPanelRouteImport - parentRoute: typeof ViewRouteRoute - } - '/_view/product/extensibility': { - id: '/_view/product/extensibility' - path: '/product/extensibility' - fullPath: '/product/extensibility' - preLoaderRoute: typeof ViewProductExtensibilityRouteImport - parentRoute: typeof ViewRouteRoute - } - '/_view/product/daily-note': { - id: '/_view/product/daily-note' - path: '/product/daily-note' - fullPath: '/product/daily-note' - preLoaderRoute: typeof ViewProductDailyNoteRouteImport - parentRoute: typeof ViewRouteRoute - } - '/_view/product/contacts': { - id: '/_view/product/contacts' - path: '/product/contacts' - fullPath: '/product/contacts' - preLoaderRoute: typeof ViewProductContactsRouteImport - parentRoute: typeof ViewRouteRoute - } - '/_view/product/calendar': { - id: '/_view/product/calendar' - path: '/product/calendar' - fullPath: '/product/calendar' - preLoaderRoute: typeof ViewProductCalendarRouteImport + '/_view/product/extensions': { + id: '/_view/product/extensions' + path: '/product/extensions' + fullPath: '/product/extensions' + preLoaderRoute: typeof ViewProductExtensionsRouteImport parentRoute: typeof ViewRouteRoute } '/_view/product/bot': { @@ -1031,6 +972,7 @@ interface ViewRouteRouteChildren { ViewPricingRoute: typeof ViewPricingRoute ViewRoadmapRoute: typeof ViewRoadmapRoute ViewTeamRoute: typeof ViewTeamRoute + ViewTemplatesRoute: typeof ViewTemplatesRoute ViewIndexRoute: typeof ViewIndexRoute ViewBlogSlugRoute: typeof ViewBlogSlugRoute ViewCallbackAuthRoute: typeof ViewCallbackAuthRoute @@ -1041,16 +983,12 @@ interface ViewRouteRouteChildren { ViewProductAiNotetakingRoute: typeof ViewProductAiNotetakingRoute ViewProductApiRoute: typeof ViewProductApiRoute ViewProductBotRoute: typeof ViewProductBotRoute - ViewProductCalendarRoute: typeof ViewProductCalendarRoute - ViewProductContactsRoute: typeof ViewProductContactsRoute - ViewProductDailyNoteRoute: typeof ViewProductDailyNoteRoute - ViewProductExtensibilityRoute: typeof ViewProductExtensibilityRoute - ViewProductFloatingPanelRoute: typeof ViewProductFloatingPanelRoute + ViewProductExtensionsRoute: typeof ViewProductExtensionsRoute ViewProductLocalAiRoute: typeof ViewProductLocalAiRoute + ViewProductMiniAppsRoute: typeof ViewProductMiniAppsRoute ViewProductNotepadRoute: typeof ViewProductNotepadRoute - ViewProductOwhisperRoute: typeof ViewProductOwhisperRoute ViewProductSelfHostingRoute: typeof ViewProductSelfHostingRoute - ViewProductWebRoute: typeof ViewProductWebRoute + ViewProductWorkflowsRoute: typeof ViewProductWorkflowsRoute ViewBlogIndexRoute: typeof ViewBlogIndexRoute ViewChangelogIndexRoute: typeof ViewChangelogIndexRoute ViewDownloadIndexRoute: typeof ViewDownloadIndexRoute @@ -1066,6 +1004,7 @@ const ViewRouteRouteChildren: ViewRouteRouteChildren = { ViewPricingRoute: ViewPricingRoute, ViewRoadmapRoute: ViewRoadmapRoute, ViewTeamRoute: ViewTeamRoute, + ViewTemplatesRoute: ViewTemplatesRoute, ViewIndexRoute: ViewIndexRoute, ViewBlogSlugRoute: ViewBlogSlugRoute, ViewCallbackAuthRoute: ViewCallbackAuthRoute, @@ -1076,16 +1015,12 @@ const ViewRouteRouteChildren: ViewRouteRouteChildren = { ViewProductAiNotetakingRoute: ViewProductAiNotetakingRoute, ViewProductApiRoute: ViewProductApiRoute, ViewProductBotRoute: ViewProductBotRoute, - ViewProductCalendarRoute: ViewProductCalendarRoute, - ViewProductContactsRoute: ViewProductContactsRoute, - ViewProductDailyNoteRoute: ViewProductDailyNoteRoute, - ViewProductExtensibilityRoute: ViewProductExtensibilityRoute, - ViewProductFloatingPanelRoute: ViewProductFloatingPanelRoute, + ViewProductExtensionsRoute: ViewProductExtensionsRoute, ViewProductLocalAiRoute: ViewProductLocalAiRoute, + ViewProductMiniAppsRoute: ViewProductMiniAppsRoute, ViewProductNotepadRoute: ViewProductNotepadRoute, - ViewProductOwhisperRoute: ViewProductOwhisperRoute, ViewProductSelfHostingRoute: ViewProductSelfHostingRoute, - ViewProductWebRoute: ViewProductWebRoute, + ViewProductWorkflowsRoute: ViewProductWorkflowsRoute, ViewBlogIndexRoute: ViewBlogIndexRoute, ViewChangelogIndexRoute: ViewChangelogIndexRoute, ViewDownloadIndexRoute: ViewDownloadIndexRoute, diff --git a/apps/web/src/routes/_view/enterprise.tsx b/apps/web/src/routes/_view/enterprise.tsx index 21ff4335fe..d6f469a4c2 100644 --- a/apps/web/src/routes/_view/enterprise.tsx +++ b/apps/web/src/routes/_view/enterprise.tsx @@ -2,11 +2,7 @@ import { cn } from "@hypr/utils"; import { Icon } from "@iconify-icon/react"; import { createFileRoute, Link } from "@tanstack/react-router"; -import { useEffect, useState } from "react"; -import { GitHubOpenSource } from "@/components/github-open-source"; -import { Image } from "@/components/image"; -import { MockWindow } from "@/components/mock-window"; import { SlashSeparator } from "@/components/slash-separator"; export const Route = createFileRoute("/_view/enterprise")({ @@ -16,13 +12,14 @@ export const Route = createFileRoute("/_view/enterprise")({ { title: "Enterprise - Hyprnote" }, { name: "description", - content: "A notetaking tool your team will actually love, with enterprise features when you need them.", + content: + "Enterprise-ready meeting notes with data sovereignty, consent management, security, and access control.", }, { property: "og:title", content: "Enterprise - Hyprnote" }, { property: "og:description", content: - "Deploy Hyprnote across your organization with flexible options for security, compliance, and deployment.", + "Deploy Hyprnote across your organization with enterprise features for security, compliance, and data sovereignty.", }, { property: "og:type", content: "website" }, { property: "og:url", content: "https://hyprnote.com/enterprise" }, @@ -31,604 +28,94 @@ export const Route = createFileRoute("/_view/enterprise")({ }); function Component() { + const faqs = [ + { + question: "How can i boost my team's product while ensuring data sovereignty?", + answer: + "Deploy Hyprnote on your own infrastructure to maintain complete control over your data. Your meeting recordings and transcripts never leave your network, ensuring full compliance with data residency requirements.", + }, + { + question: "Is there a way to ensure consents are properly granted and managed?", + answer: + "Hyprnote provides multiple consent options including voice-activated consent during meetings, pre-meeting consent links, and explicit consent prompts when joining. We prioritize transparency and respect in every recording scenario.", + }, + { + question: "How secure is the platform?", + answer: + "We deeply prioritize security. We're working on end-to-end encryption, seamless SSO and MFA integration, and are actively pursuing SOC 2 Type II certification. All enterprise deployments meet industry-standard security requirements.", + }, + { + question: "How do you manage access control?", + answer: + "Administrators have granular control over permissions, team workspaces, and user access. Set role-based permissions, manage team structures, and maintain centralized oversight across your entire organization.", + }, + { + question: "What deployment options are available?", + answer: + "Hyprnote adapts to your workflow with multiple form factors: native desktop applications (currently available for macOS), web interface, mobile apps, or even bot integration for remote meeting capture. Choose the deployment method that works best for your team.", + }, + ]; + return (
- - - - - - - - - - - - - - - -
-
- ); -} - -function HeroSection() { - return ( -
-
-
-

- Enterprise -

-

- An open-source notetaking tool your team will actually love, with enterprise features when you need them. -

-
- -
- - Contact Sales - -
-
-
- ); -} - -function PhilosophySection() { - return ( -
-
-
-
-

To organizations,

- -
-

- We built Hyprnote because we believe that great tools should empower people, not constrain them. Your - teams deserve software that respects their intelligence, their privacy, and their agency. + {/* Hero Section */} +

+
+
+

+ Enterprise +

+

+ Meeting notes your team will love, with enterprise features when you need them.

-

- We're open source because transparency builds trust. We prioritize consent because respect matters. We - give you deployment flexibility because every organization is different. And we focus on building - something that people actually enjoy using—because adoption shouldn't require force. +

+ We'll help you with your concerns

-

- Whether you need secure cloud, on-premises deployment, or even bot integration (though we'd rather you - didn't), we'll work with you. We're not here to dictate how you should work. We're here to support the - way you choose to work. -

-

- If you believe software should adapt to people instead of the other way around, we should talk. -

-
- -
- John Jeong - Yujong Lee
-
-
-

Hyprnote

-

John Jeong, Yujong Lee

-
- -
- Hyprnote Signature -
+
+ + + Schedule a Call +
-
-
-
- ); -} - -function DeploymentOptionsSection() { - return ( -
-
-
-

- We adapt to your needs -

-

- Whether you want secure cloud, on-premises, or something in between—we can make it work. -

-
+
-
- - - -
- - - ); -} - -function DeploymentOption({ - icon, - title, - description, - badges, - features, - note, -}: { - icon: string; - title: string; - description: string; - badges?: string[]; - features?: string[]; - note?: string; -}) { - return ( -
-
-
-
- -
-
-
-

{title}

-

{description}

+ - {badges && badges.length > 0 && ( -
- {badges.map((badge, idx) => ( - - {badge} - + {/* FAQ Section */} +
+
+

+ Frequently Asked Questions +

+
+ {faqs.map((faq, index) => ( +
+

+ Q: {faq.question} +

+

+ A: {faq.answer} +

+
))}
- )} - - {features && features.length > 0 && ( -
    - {features.map((feature, idx) => ( -
  • - - {feature} -
  • - ))} -
- )} - - {note &&

{note}

} -
-
-
- ); -} - -function HowWeCaptureMeetingsSection() { - const [typedText1, setTypedText1] = useState(""); - const [typedText2, setTypedText2] = useState(""); - const [enhancedLines, setEnhancedLines] = useState(0); - - const text1 = "metrisc w/ john"; - const text2 = "stakehlder mtg"; - - useEffect(() => { - const runAnimation = () => { - setTypedText1(""); - setTypedText2(""); - setEnhancedLines(0); - - let currentIndex1 = 0; - setTimeout(() => { - const interval1 = setInterval(() => { - if (currentIndex1 < text1.length) { - setTypedText1(text1.slice(0, currentIndex1 + 1)); - currentIndex1++; - } else { - clearInterval(interval1); - - let currentIndex2 = 0; - const interval2 = setInterval(() => { - if (currentIndex2 < text2.length) { - setTypedText2(text2.slice(0, currentIndex2 + 1)); - currentIndex2++; - } else { - clearInterval(interval2); - - setTimeout(() => { - setEnhancedLines(1); - setTimeout(() => { - setEnhancedLines(2); - setTimeout(() => { - setEnhancedLines(3); - setTimeout(() => { - setEnhancedLines(4); - setTimeout(() => runAnimation(), 1000); - }, 800); - }, 800); - }, 800); - }, 500); - } - }, 50); - } - }, 50); - }, 500); - }; - - runAnimation(); - }, []); - - return ( -
-
-

- How we capture meetings -

-
-
-
-
-

- When you attend meetings,{" "} - Hyprnote runs locally on your device and transcribes everything in real-time. -

-
-
- -
- {enhancedLines === 0 - ? ( -
-
ui update - moble
-
api
-
new dash - urgnet
-
a/b tst next wk
-
- {typedText1} - {typedText1 && typedText1.length < text1.length && |} -
-
- {typedText2} - {typedText2 && typedText2.length < text2.length && |} -
-
- ) - : ( -
-
-

= 1 ? "opacity-100" : "opacity-0", - )} - > - Mobile UI Update and API Adjustments -

-
    -
  • = 1 ? "opacity-100" : "opacity-0", - )} - > - Sarah presented the new mobile UI update, which includes a streamlined navigation bar and - improved button placements for better accessibility. -
  • -
  • = 2 ? "opacity-100" : "opacity-0", - )} - > - Ben confirmed that API adjustments are needed to support dynamic UI changes, particularly - for fetching personalized user data more efficiently. -
  • -
  • = 3 ? "opacity-100" : "opacity-0", - )} - > - The UI update will be implemented in phases, starting with core navigation improvements. Ben - will ensure API modifications are completed before development begins. -
  • -
-
-
-

= 4 ? "opacity-100" : "opacity-0", - )} - > - New Dashboard – Urgent Priority -

-
    -
  • = 4 ? "opacity-100" : "opacity-0", - )} - > - Alice emphasized that the new analytics dashboard must be prioritized due to increasing - stakeholder demand. -
  • -
-
-
- )} -
-
-
-
-
-
-

- When you can't attend,{" "} - Hyprbot can join meetings on your behalf and capture everything. -

-
-
- -
-
- Sarah M. -
-
- - Hyprbot -
-
- Ben K. -
-
- Alice R. -
-
-
-
-
-
- -
-
-
-

- When you attend meetings,{" "} - Hyprnote runs locally on your device and transcribes everything in real-time. -

-
-
- -
-
-
Notes
-
-
ui update - mobile
-
api
-
new dash - urgent
-
-
-
-
Summary
-
-
Mobile UI Update
-
Sarah presented new UI...
-
-
-
-
-
-
-
-
-

- When you can't attend,{" "} - Hyprbot can join meetings on your behalf and capture everything. -

-
-
- -
-
- Sarah M. -
-
- Ben K. -
-
- Alice R. -
-
- - Hyprbot -
-
-
-
-
-
- ); -} - -function ConsentSection() { - return ( -
-
-
-

- Consent management -

-

- We deeply care about consent and give you smart ways to manage it across your organization. -

-
- -
- - - - -
-
-
- ); -} - -function ConsentFeature({ - icon, - title, - description, -}: { - icon: string; - title: string; - description: string; -}) { - return ( -
-
- -
-
-

{title}

-

{description}

+
-
- ); -} - -function ComplianceSection() { - return ( -
-
-

- Compliance & Security -

-

- We're actively working towards industry-standard certifications to meet your regulatory requirements. -

-
- - SOC 2 Type II - In Progress -
-

- Additional compliance certifications available based on your needs (HIPAA, GDPR, ISO 27001) -

-
-
- ); -} - -function CTASection() { - return ( -
-
-
- Hyprnote -
- -
-

- Let's talk about your needs -

-

- Every organization is different. Let's discuss how we can adapt Hyprnote to work for you. -

-
-
- - Schedule a Call - -
-
-
+ ); } diff --git a/apps/web/src/routes/_view/product/ai-notetaking.tsx b/apps/web/src/routes/_view/product/ai-notetaking.tsx index d97c84f9bf..72bdc0a3a8 100644 --- a/apps/web/src/routes/_view/product/ai-notetaking.tsx +++ b/apps/web/src/routes/_view/product/ai-notetaking.tsx @@ -192,45 +192,21 @@ function Component() { {allTemplates.length} templates or create your own custom format for different meeting types.

-
-

Sprint Planning

-
    -
  • • Sprint goals
  • -
  • • Backlog items
  • -
  • • Capacity planning
  • -
  • • Dependencies
  • -
-
-
-

Sales Call

-
    -
  • • Company overview
  • -
  • • Pain points
  • -
  • • Budget & timeline
  • -
  • • Next steps
  • -
-
-
-

1:1 Meeting

-
    -
  • • Updates
  • -
  • • Wins & challenges
  • -
  • • Feedback
  • -
  • • Action items
  • -
-
+ {allTemplates.slice(0, 6).map((template) => )} +
+
+ + Browse all {allTemplates.length} templates + +
- - {Object.entries(getTemplatesByCategory()).map(([category, templates]) => ( -
-

- {category} -

-
- {templates.map((template) => )} -
-
- ))}
@@ -420,44 +396,6 @@ function UseCase({ ); } -function getTemplatesByCategory() { - return allTemplates.reduce((acc, template) => { - const category = getCategory(template.title); - if (!acc[category]) { - acc[category] = []; - } - acc[category].push(template); - return acc; - }, {} as Record); -} - -function getCategory(title: string): string { - if ( - ["Sprint Planning", "Sprint Retrospective", "Daily Standup", "Technical Design Review", "Incident Postmortem"] - .includes(title) - ) { - return "Engineering & Development"; - } - if (["Product Roadmap Review", "Customer Discovery Interview", "Brainstorming Session"].includes(title)) { - return "Product & Design"; - } - if (["Sales Discovery Call", "Client Kickoff Meeting"].includes(title)) { - return "Sales & Customer Success"; - } - if ( - ["1:1 Meeting", "Performance Review", "Executive Briefing", "Board Meeting", "Project Kickoff"].includes(title) - ) { - return "Leadership & Management"; - } - if (["Lecture Notes"].includes(title)) { - return "Learning & Research"; - } - if (["Investor Pitch Meeting"].includes(title)) { - return "Business Development"; - } - return "General"; -} - function getIconForTemplate(title: string): string { const iconMap: Record = { "Daily Standup": "mdi:run-fast", diff --git a/apps/web/src/routes/_view/product/calendar.tsx b/apps/web/src/routes/_view/product/calendar.tsx deleted file mode 100644 index 23efc680a9..0000000000 --- a/apps/web/src/routes/_view/product/calendar.tsx +++ /dev/null @@ -1,300 +0,0 @@ -import { cn } from "@hypr/utils"; - -import { Icon } from "@iconify-icon/react"; -import { createFileRoute, Link } from "@tanstack/react-router"; - -export const Route = createFileRoute("/_view/product/calendar")({ - component: Component, - head: () => ({ - meta: [ - { title: "Calendar Integration - Hyprnote" }, - { - name: "description", - content: - "Connect your calendar to Hyprnote for automatic meeting preparation and seamless note organization. See your schedule alongside conversation context.", - }, - ], - }), -}); - -function Component() { - return ( -
-
-
-
-

- Your calendar, -
- supercharged -

-

- Connect Hyprnote to your calendar for intelligent meeting preparation, automatic note organization, and a - unified view of your schedule with conversation context. -

-
- -
-

Calendar integration benefits

-
-
- -

Automatic meeting linking

-

- Your recordings are automatically associated with calendar events, creating a complete meeting record. -

-
-
- -

Meeting preparation

-

- Before meetings, see notes and action items from previous conversations with the same attendees. -

-
-
- -

Timeline view

-

- Visualize your meetings and notes in a chronological calendar view for better context. -

-
-
- -

Smart notifications

-

- Get reminded to start recording when meetings begin and to review notes afterward. -

-
-
-
- -
-

- Seamless workflow -

-
-
-
- 1 -
-

Connect calendar

-

- Link your Google Calendar, Outlook, or other calendar service -

-
-
-
- 2 -
-

See context

-

- View meeting agendas, attendees, and past conversations in one place -

-
-
-
- 3 -
-

Record & organize

-

- Notes automatically link to calendar events for easy retrieval -

-
-
-
- -
-

Pre-meeting intelligence

-
-
-
- -
-

Weekly Team Sync

-

Today at 10:00 AM · 30 minutes

-
- -
- -
-
-

Attendees (4)

-
- Sarah Johnson - Mike Chen - +2 more -
-
- -
-

Last meeting context

-
-
Jan 8, 2025 - Weekly Team Sync
-

- Discussed Q1 roadmap, decided to prioritize mobile app. Sarah to review designs by Jan 15. -

-
-
- -
-

Open action items

-
-
- - Sarah: Review design mockups (due today) -
-
- - Mike: Update sprint board (overdue) -
-
-
-
-
-

- Get full context before every meeting - no more asking "what did we discuss last time?" -

-
-
- -
-

Calendar view features

-
-
- -
-

Search by date

-

- Jump to any date to see meetings and notes from that day in a unified timeline. -

-
-
-
- -
-

Filter by type

-

- Show only 1:1s, team meetings, client calls, or other custom categories. -

-
-
-
- -
-

Filter by attendee

-

- See all meetings with a specific person or team across time. -

-
-
-
- -
-

Meeting analytics

-

- Understand how much time you spend in meetings and with different people. -

-
-
-
-
- -
-

Perfect for

-
-
- -

Back-to-back meetings

-

- Quickly prep between meetings by reviewing past notes and action items. -

-
-
- -

Client management

-

- See complete client history before calls - past discussions, commitments, and context. -

-
-
- -

Recurring meetings

-

- Track progress across weekly syncs, standups, and regular check-ins. -

-
-
- -

Project tracking

-

- See all meetings related to a project organized in chronological order. -

-
-
- -

Follow-ups

-

- Get reminded about action items tied to specific calendar events. -

-
-
- -

Time analysis

-

- Understand where your meeting time goes and optimize your schedule. -

-
-
-
- -
-
- -

- Privacy-first integration -

-

- Calendar integration is read-only and local. We only access event metadata (title, time, attendees) to - provide context. No calendar data is uploaded to external servers. -

-
-
- -
-

- Connect your calendar today -

-

- Bring together your schedule and your notes for a complete view of your work and conversations. -

-
- - Download for free - - - Learn about contacts - -
-
-
-
-
- ); -} diff --git a/apps/web/src/routes/_view/product/contacts.tsx b/apps/web/src/routes/_view/product/contacts.tsx deleted file mode 100644 index 196aaac4d5..0000000000 --- a/apps/web/src/routes/_view/product/contacts.tsx +++ /dev/null @@ -1,272 +0,0 @@ -import { cn } from "@hypr/utils"; - -import { Icon } from "@iconify-icon/react"; -import { createFileRoute, Link } from "@tanstack/react-router"; - -export const Route = createFileRoute("/_view/product/contacts")({ - component: Component, - head: () => ({ - meta: [ - { title: "Contact Management - Hyprnote" }, - { - name: "description", - content: - "Automatically track who you meet with and what you discuss. Hyprnote builds a living database of your professional relationships.", - }, - ], - }), -}); - -function Component() { - return ( -
-
-
-
-

- Remember every -
- conversation -

-

- Hyprnote automatically builds a database of everyone you meet with, tracking conversation history, - discussion topics, and relationship context. Never forget what you talked about. -

-
- -
-

Automatic relationship tracking

-
-
- -

Auto-detected contacts

-

- Hyprnote identifies people from meeting participants and speaker identification, automatically - creating contact profiles. -

-
-
- -

Conversation timeline

-

- See a chronological history of every meeting and conversation you've had with each person. -

-
-
- -

Topic tracking

-

- AI automatically tags discussion topics, making it easy to see what you've covered with each contact. -

-
-
- -

Context at a glance

-

- Before meetings, quickly review past conversations and action items with that person. -

-
-
-
- -
-

- Contact profile overview -

-
-
-
- -
-
-

Sarah Johnson

-

Product Manager at Acme Inc

-
- - - 12 meetings - - - - Last met: 2 days ago - -
-
-
- -
-
-

Recent Topics

-
- Q1 Planning - Mobile App - User Research -
-
- -
-

Recent Conversations

-
-
-
- Product Roadmap Review - Jan 15, 2025 -
-

Discussed Q1 priorities and mobile app timeline...

-
-
-
- Weekly Sync - Jan 8, 2025 -
-

Status update on user research findings...

-
-
-
- -
-

Outstanding Action Items

-
-
- - Follow up on design mockups -
-
- - Schedule user testing session -
-
-
-
-
-
- -
-

Perfect for

-
-
- -

Client relationships

-

- Track what each client cares about, their preferences, and past discussions. -

-
-
- -

Sales & partnerships

-

- Remember details about prospects, their pain points, and follow-up items. -

-
-
- -

Team collaboration

-

- Keep track of 1:1s, feedback sessions, and ongoing projects with teammates. -

-
-
- -

Stakeholder management

-

- Maintain context on what matters to each stakeholder and decision maker. -

-
-
- -

Mentorship

-

- Track advice given, progress discussed, and goals for each mentee. -

-
-
- -

Professional networking

-

- Remember conversations with industry contacts and potential collaborators. -

-
-
-
- -
-

Smart features

-
-
- -
-

Quick search

-

- Find any contact or conversation instantly with full-text search across all your notes. -

-
-
-
- -
-

Smart filters

-

- Filter contacts by company, role, recent activity, or custom tags. -

-
-
-
- -
-

Follow-up reminders

-

- Get reminded about pending action items or when it's time to reconnect. -

-
-
-
- -
-

Export & integrate

-

- Export contact information and sync with your CRM or other tools. -

-
-
-
-
- -
-

- Never lose relationship context -

-

- Build stronger professional relationships by remembering every conversation, follow-up, and detail that - matters. -

-
- - Download for free - - - Learn about calendar - -
-
-
-
-
- ); -} diff --git a/apps/web/src/routes/_view/product/daily-note.tsx b/apps/web/src/routes/_view/product/daily-note.tsx deleted file mode 100644 index 393d8037d4..0000000000 --- a/apps/web/src/routes/_view/product/daily-note.tsx +++ /dev/null @@ -1,238 +0,0 @@ -import { cn } from "@hypr/utils"; -import { Icon } from "@iconify-icon/react"; - -import { createFileRoute, Link } from "@tanstack/react-router"; - -export const Route = createFileRoute("/_view/product/daily-note")({ - component: Component, - head: () => ({ - meta: [ - { title: "Daily Notes - Hyprnote" }, - { - name: "description", - content: - "Automatic daily notes that consolidate all your meetings, action items, and insights into one organized view for each day.", - }, - ], - }), -}); - -function Component() { - return ( -
-
-
-
-
- - In Construction -
-

- Your day, -
- automatically organized -

-

- Daily notes automatically consolidate all your meetings, conversations, and tasks into one chronological - view. See everything that happened each day at a glance. -

-
- -
-

Everything in one place

-
-
- -

Automatic aggregation

-

- All meetings, notes, and action items from a single day automatically appear in your daily note. -

-
-
- -

Chronological timeline

-

- See your day unfold in order, with timestamps showing when each meeting or note was created. -

-
-
- -

Unified action items

-

- All tasks and to-dos from every meeting collected in one section for easy tracking. -

-
-
- -

Daily summary

-

- AI-generated overview highlighting the most important moments and decisions of your day. -

-
-
-
- -
-

- What's in a daily note -

-
-
-
- -
-

Meetings & Calls

-

- All recorded meetings with their summaries, key points, and timestamps. -

-
-
9:00 AM - Team Standup
-
Key decisions, action items, next steps...
-
-
-
-
- -
-
- -
-

Action Items

-

- Consolidated list of all tasks and to-dos mentioned across meetings. -

-
-
□ Review design mockups by EOD
-
□ Schedule follow-up with client
-
□ Update project timeline
-
-
-
-
- -
-
- -
-

Key Insights

-

- Important decisions, blockers, and highlights from across all conversations. -

-
-
• Decided to prioritize mobile app for Q1
-
• Budget approved for new designer
-
-
-
-
- -
-
- -
-

Manual Notes

-

- Your own thoughts, reflections, and notes added throughout the day. -

-
-
Ideas for new feature, follow-up questions...
-
-
-
-
-
-
- -
-

Perfect for reflection

-
-
- -
-

End-of-day review

-

- Quickly scan your daily note to see what you accomplished and what needs attention tomorrow. -

-
-
-
- -
-

Weekly planning

-

- Review the week's daily notes to prepare status updates and plan ahead. -

-
-
-
- -
-

Track progress

-

- See patterns in your work, identify bottlenecks, and understand where your time goes. -

-
-
-
- -
-

1:1 preparation

-

- Review recent daily notes before manager meetings to discuss what you've been working on. -

-
-
-
-
- -
-
- -

- Coming soon -

-

- Daily notes are currently in development. We're building a beautiful, automatic way to organize and - reflect on your day. -

-
-
- -
-

- Be notified when it's ready -

-

- Join the waitlist to get early access to daily notes and other upcoming features. -

-
- - Join waitlist - - - Download Hyprnote - -
-
-
-
-
- ); -} diff --git a/apps/web/src/routes/_view/product/extensibility.tsx b/apps/web/src/routes/_view/product/extensions.tsx similarity index 68% rename from apps/web/src/routes/_view/product/extensibility.tsx rename to apps/web/src/routes/_view/product/extensions.tsx index b327626c14..a1ff8a1bbb 100644 --- a/apps/web/src/routes/_view/product/extensibility.tsx +++ b/apps/web/src/routes/_view/product/extensions.tsx @@ -3,15 +3,15 @@ import { cn } from "@hypr/utils"; import { Icon } from "@iconify-icon/react"; import { createFileRoute } from "@tanstack/react-router"; -export const Route = createFileRoute("/_view/product/extensibility")({ +export const Route = createFileRoute("/_view/product/extensions")({ component: Component, head: () => ({ meta: [ - { title: "Integrations & API - Hyprnote" }, + { title: "Extensions - Hyprnote" }, { name: "description", content: - "Connect Hyprnote with your favorite tools and build custom integrations with our API. Integrations and developer API coming soon.", + "Connect Hyprnote with your favorite tools and build custom integrations with our API. Extensions coming soon.", }, ], }), @@ -103,90 +103,14 @@ function Component() {

Extend Hyprnote with
- workflows, integrations & API + integrations & API

- Automate your workflow with built-in automation, connect with your favorite tools through integrations, or - build custom solutions with our developer API. Coming soon. + Connect with your favorite tools through integrations, or build custom solutions with our developer API. + Coming soon.

-
-

Workflow automation

-

- Automate repetitive tasks with powerful workflows. No coding required. -

-
-
- -

Auto-process meetings

-

- Automatically transcribe, summarize, and extract action items from all your meetings without manual - intervention. -

-
    -
  • - - Trigger workflows on meeting end -
  • -
  • - - Apply custom templates automatically -
  • -
  • - - Tag and categorize by meeting type -
  • -
-
-
- -

Smart notifications

-

- Get notified when important events happen in your meetings. Set up custom alerts based on keywords, - speakers, or topics. -

-
    -
  • - - Alert on specific keywords mentioned -
  • -
  • - - Notify on action items assigned to you -
  • -
  • - - Daily/weekly digest summaries -
  • -
-
-
-
-
- -

Auto-export

-

- Automatically export notes to specific folders or formats after each meeting. -

-
-
- -

Email summaries

-

- Send meeting summaries to participants or stakeholders automatically. -

-
-
- -

Calendar sync

-

- Attach notes to calendar events and sync action items as tasks. -

-
-
-
-

Built-in integrations

@@ -332,7 +256,7 @@ console.log(meeting.action_items);`} Get notified when we launch

- Be the first to know when integrations and API become available. + Be the first to know when extensions become available.

({ - meta: [ - { title: "Floating Panel - Hyprnote" }, - { - name: "description", - content: - "Keep your notes accessible with a floating panel that stays on top of all windows. Quick access to transcripts and summaries during meetings.", - }, - ], - }), -}); - -function Component() { - return ( -
-
-
-
-
- - In Construction -
-

- Always-accessible -
- floating panel -

-

- A lightweight, always-on-top panel that gives you instant access to meeting transcripts, summaries, and - notes without leaving your current application. -

-
- -
-

Stay focused, stay informed

-
-
- -

Always on top

-

- The floating panel stays visible above all your other windows, giving you constant access to your - notes. -

-
-
- -

Customizable size

-

- Resize and position the panel anywhere on your screen to fit your workflow perfectly. -

-
-
- -

Minimal distraction

-

- Compact and transparent design that doesn't interfere with your work or video calls. -

-
-
- -

Quick actions

-

- Start/stop recording, view live transcripts, and access recent notes with one click. -

-
-
-
- -
-

- Real-time insights during meetings -

-
-
- -

Live transcript

-

- See speech-to-text transcription appear in real-time as people speak. -

-
-
- -

Key moments

-

- AI highlights important points, decisions, and action items as they happen. -

-
-
- -

Quick bookmarks

-

- Tag important moments with keyboard shortcuts for easy reference later. -

-
-
-
- -
-

Use cases

-
-
- -

Presenting

-

- Keep notes visible while sharing your screen during presentations. -

-
-
- -

Coding

-

- Reference meeting notes while working in your IDE or terminal. -

-
-
- -

Video calls

-

- View live transcript alongside your video conferencing app. -

-
-
- -

Writing

-

- Keep meeting context visible while drafting documents or emails. -

-
-
- -

Task tracking

-

- See action items while working in project management tools. -

-
-
- -

Back-to-back meetings

-

- Quickly review previous meeting notes before the next one starts. -

-
-
-
- -
-
- -

- Coming soon -

-

- The floating panel is currently in development. We're working hard to bring you this powerful feature - that will transform how you access your notes during work. -

-
-
- -
-

- Get notified when it launches -

-

- Join the waitlist to be among the first to try the floating panel when it's ready. -

-
-
-
-
-
- ); -} diff --git a/apps/web/src/routes/_view/product/mini-apps.tsx b/apps/web/src/routes/_view/product/mini-apps.tsx new file mode 100644 index 0000000000..52425da61c --- /dev/null +++ b/apps/web/src/routes/_view/product/mini-apps.tsx @@ -0,0 +1,397 @@ +import { cn } from "@hypr/utils"; + +import { Icon } from "@iconify-icon/react"; +import { createFileRoute } from "@tanstack/react-router"; + +export const Route = createFileRoute("/_view/product/mini-apps")({ + component: Component, + head: () => ({ + meta: [ + { title: "Mini Apps - Hyprnote" }, + { + name: "description", + content: + "Built-in mini apps for contacts, calendar, daily notes, and noteshelf. Everything you need to stay organized alongside your meetings.", + }, + ], + }), +}); + +function Component() { + const miniApps = [ + { + icon: "mdi:account-multiple", + title: "Contacts", + description: "Automatic relationship tracking and conversation history", + color: "blue", + features: [ + "Auto-detected contacts from meetings", + "Conversation timeline and history", + "Topic tracking and context", + "Before-meeting preparation", + ], + }, + { + icon: "mdi:calendar", + title: "Calendar", + description: "Your calendar supercharged with meeting intelligence", + color: "green", + features: [ + "Automatic meeting linking", + "Pre-meeting context and preparation", + "Timeline view with notes", + "Smart notifications", + ], + }, + { + icon: "mdi:calendar-today", + title: "Daily Notes", + description: "Automatic daily summaries of all your meetings and tasks", + color: "orange", + features: [ + "Automatic aggregation of meetings", + "Chronological timeline view", + "Unified action items", + "AI-generated daily summary", + ], + badge: "Coming Soon", + }, + { + icon: "mdi:notebook", + title: "Noteshelf", + description: "Personal workspace for notes, ideas, and knowledge base", + color: "purple", + features: [ + "Personal notes and reflections", + "Knowledge base organization", + "Link notes to meetings", + "Full-text search across all notes", + ], + badge: "Coming Soon", + }, + ]; + + const getColorClasses = (color: string) => { + const colors = { + blue: { + icon: "text-blue-600", + bg: "bg-blue-50", + border: "border-blue-200", + badge: "bg-blue-100 text-blue-700", + }, + green: { + icon: "text-green-600", + bg: "bg-green-50", + border: "border-green-200", + badge: "bg-green-100 text-green-700", + }, + orange: { + icon: "text-orange-600", + bg: "bg-orange-50", + border: "border-orange-200", + badge: "bg-orange-100 text-orange-700", + }, + purple: { + icon: "text-purple-600", + bg: "bg-purple-50", + border: "border-purple-200", + badge: "bg-purple-100 text-purple-700", + }, + }; + return colors[color as keyof typeof colors] || colors.blue; + }; + + return ( +
+
+
+
+

+ Built-in mini apps +
+ for everything +

+

+ Hyprnote includes powerful mini apps for managing contacts, calendar, daily notes, and your personal + knowledge base. Everything works together seamlessly. +

+
+ +
+
+ {miniApps.map((app) => { + const colors = getColorClasses(app.color); + return ( +
+
+ + {app.badge && ( + + {app.badge} + + )} +
+

{app.title}

+

{app.description}

+
    + {app.features.map((feature) => ( +
  • + + {feature} +
  • + ))} +
+
+ ); + })} +
+
+ +
+

+ How they work together +

+
+
+
+ 1 +
+

Connect calendar

+

+ Link your calendar to see upcoming meetings with full context and history. +

+
+
+
+ 2 +
+

Record meetings

+

+ Meetings auto-link to contacts, calendar events, and daily notes. +

+
+
+
+ 3 +
+

Stay organized

+

+ Everything connects automatically - notes, contacts, calendar, and knowledge base. +

+
+
+
+ +
+

Contacts

+

+ Automatically track who you meet with and what you discuss. Never forget a conversation. +

+
+
+ +

Auto-detected contacts

+

+ Hyprnote identifies people from meeting participants and speaker identification, automatically + creating contact profiles. +

+
+
+ +

Conversation timeline

+

+ See a chronological history of every meeting and conversation you've had with each person. +

+
+
+
+
+
+ +
+
+

Sarah Johnson

+

Product Manager at Acme Inc

+
+ + + 12 meetings + + + + Last met: 2 days ago + +
+
+
+
+
+

Recent Topics

+
+ Q1 Planning + Mobile App + User Research +
+
+
+
+
+ +
+

Calendar

+

+ Connect your calendar for intelligent meeting preparation and automatic note organization. +

+
+
+ +

Automatic meeting linking

+

+ Recordings automatically associate with calendar events, creating a complete meeting record. +

+
+
+ +

Meeting preparation

+

+ Before meetings, see notes and action items from previous conversations with the same attendees. +

+
+
+
+
+ +
+

Weekly Team Sync

+

Today at 10:00 AM · 30 minutes

+
+ +
+
+
+

Last meeting context

+
+
Jan 8, 2025 - Weekly Team Sync
+

+ Discussed Q1 roadmap, decided to prioritize mobile app. Sarah to review designs by Jan 15. +

+
+
+
+
+
+ +
+

Daily Notes

+
+ + Coming Soon +
+

+ Automatic daily summaries that consolidate all your meetings, action items, and insights. +

+
+
+ +

Automatic aggregation

+

+ All meetings, notes, and action items from a single day automatically appear in your daily note. +

+
+
+ +

Daily summary

+

+ AI-generated overview highlighting the most important moments and decisions of your day. +

+
+
+
+ +
+

Noteshelf

+
+ + Coming Soon +
+

+ Your personal knowledge base for notes, ideas, and reflections alongside your meetings. +

+
+
+ +

Personal notes

+

+ Write and organize your thoughts separate from meeting transcripts. +

+
+
+ +

Link to meetings

+

+ Connect notes to specific meetings or contacts for easy reference. +

+
+
+ +

Organize freely

+

+ Use folders, tags, and collections to structure your knowledge base. +

+
+
+ +

Full-text search

+

+ Search across all notes and meeting transcripts in one place. +

+
+
+
+ +
+
+ +

+ Everything stays local +

+

+ All mini apps work entirely on your device. Your contacts, calendar integration, notes, and data never + leave your computer. +

+
+
+ +
+

+ Get the complete experience +

+

+ Download Hyprnote to start using contacts and calendar integration today. Daily notes and noteshelf coming + soon. +

+ + Download for free + +
+
+
+
+ ); +} diff --git a/apps/web/src/routes/_view/product/owhisper.tsx b/apps/web/src/routes/_view/product/owhisper.tsx deleted file mode 100644 index 8697dad3a3..0000000000 --- a/apps/web/src/routes/_view/product/owhisper.tsx +++ /dev/null @@ -1,282 +0,0 @@ -import { cn } from "@hypr/utils"; -import { Icon } from "@iconify-icon/react"; -import { createFileRoute } from "@tanstack/react-router"; - -export const Route = createFileRoute("/_view/product/owhisper")({ - component: Component, - head: () => ({ - meta: [ - { title: "OWhisper - Hyprnote" }, - { - name: "description", - content: - "Open-source Whisper implementation for high-quality speech-to-text transcription. Powered by Hyprnote.", - }, - ], - }), -}); - -function Component() { - return ( -
-
-
-
-
- - Open Source -
-

- OWhisper -

-

- High-quality, open-source speech-to-text transcription powered by OpenAI's Whisper. The same technology - that powers Hyprnote's local AI transcription. -

-
- -
-

What is OWhisper?

-
-
- -

Open-source implementation

-

- Our optimized, open-source implementation of OpenAI's Whisper model for fast, accurate transcription - on any device. -

-
-
- -

Optimized performance

-

- Highly optimized for speed and efficiency. Transcribe hours of audio in minutes on modern hardware. -

-
-
- -

100+ languages

-

- Support for over 100 languages with automatic language detection and robust accent handling. -

-
-
- -

Runs locally

-

- Process audio entirely on your device. No cloud uploads, complete privacy, and works offline. -

-
-
-
- -
-

- Features -

-
-
- -
-

High accuracy

-

- Near-human-level accuracy with state-of-the-art Whisper models -

-
-
-
- -
-

Timestamps

-

- Word-level and segment-level timestamps for precise navigation -

-
-
-
- -
-

Speaker diarization

-

- Identify and label different speakers in conversations -

-
-
-
- -
-

Noise reduction

-

- Robust handling of background noise and poor audio quality -

-
-
-
- -
-

Multiple formats

-

- Support for various audio formats: MP3, M4A, WAV, FLAC, and more -

-
-
-
- -
-

API & CLI

-

- Use via command-line interface or integrate into your applications -

-
-
-
-
- -
-

Model sizes

-

- Choose the right model size for your needs. Larger models provide better accuracy, smaller models are - faster. -

-
-
-

Tiny & Base

-

- Fast transcription for quick notes and simple use cases -

-
- ~39M - 74M parameters -
-
-
-
- Recommended -
-

Small & Medium

-

- Best balance of speed and accuracy for most use cases -

-
- ~244M - 769M parameters -
-
-
-

Large

-

- Maximum accuracy for critical transcriptions and research -

-
- ~1550M parameters -
-
-
-
- -
-

Use cases

-
-
- -

Meeting transcription

-

- Transcribe recorded meetings and video calls with high accuracy -

-
-
- -

Podcast transcripts

-

- Generate searchable transcripts for podcast episodes -

-
-
- -

Lecture notes

-

- Convert recorded lectures and educational content to text -

-
-
- -

Interview transcription

-

- Transcribe interviews for research and journalism -

-
-
- -

Subtitle generation

-

- Create subtitles and captions for videos automatically -

-
-
- -

Voice memos

-

- Convert voice recordings to searchable text notes -

-
-
-
- -
-

- Open source & community-driven -

-

- OWhisper is open source and maintained by the Hyprnote team and community contributors. -

- -
- -
-

- Powered by Hyprnote -

-

- OWhisper is the transcription engine that powers Hyprnote's local AI notetaking. Experience it in action. -

- - Download Hyprnote - -
-
-
-
- ); -} diff --git a/apps/web/src/routes/_view/product/web.tsx b/apps/web/src/routes/_view/product/web.tsx deleted file mode 100644 index b95525aa15..0000000000 --- a/apps/web/src/routes/_view/product/web.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { createFileRoute } from "@tanstack/react-router"; - -export const Route = createFileRoute("/_view/product/web")({ - component: Component, - head: () => ({ - meta: [ - { title: "Web - Hyprnote" }, - { - name: "description", - content: "Hyprnote on the web. Coming soon.", - }, - ], - }), -}); - -function Component() { - return ( -
-
-
-
-

- Hyprnote Web -

-

- Access your notes from anywhere with Hyprnote Web. -

- -
-
-
-
- ); -} diff --git a/apps/web/src/routes/_view/product/workflows.tsx b/apps/web/src/routes/_view/product/workflows.tsx new file mode 100644 index 0000000000..36d2000a7a --- /dev/null +++ b/apps/web/src/routes/_view/product/workflows.tsx @@ -0,0 +1,231 @@ +import { cn } from "@hypr/utils"; + +import { Icon } from "@iconify-icon/react"; +import { createFileRoute } from "@tanstack/react-router"; + +export const Route = createFileRoute("/_view/product/workflows")({ + component: Component, + head: () => ({ + meta: [ + { title: "Workflows - Hyprnote" }, + { + name: "description", + content: "Automate your meeting workflow with powerful automation. No coding required. Workflows coming soon.", + }, + ], + }), +}); + +function Component() { + return ( +
+
+
+
+
+ Coming Soon +
+

+ Automate your workflow +
+ with powerful automation +

+

+ Automate repetitive tasks with powerful workflows. No coding required. Coming soon. +

+
+ +
+

Workflow automation

+

+ Set up workflows once and let them handle repetitive tasks automatically. +

+
+
+ +

Auto-process meetings

+

+ Automatically transcribe, summarize, and extract action items from all your meetings without manual + intervention. +

+
    +
  • + + Trigger workflows on meeting end +
  • +
  • + + Apply custom templates automatically +
  • +
  • + + Tag and categorize by meeting type +
  • +
+
+
+ +

Smart notifications

+

+ Get notified when important events happen in your meetings. Set up custom alerts based on keywords, + speakers, or topics. +

+
    +
  • + + Alert on specific keywords mentioned +
  • +
  • + + Notify on action items assigned to you +
  • +
  • + + Daily/weekly digest summaries +
  • +
+
+
+
+
+ +

Auto-export

+

+ Automatically export notes to specific folders or formats after each meeting. +

+
+
+ +

Email summaries

+

+ Send meeting summaries to participants or stakeholders automatically. +

+
+
+ +

Calendar sync

+

+ Attach notes to calendar events and sync action items as tasks. +

+
+
+
+ +
+

+ Workflow use cases +

+
+
+ +

Team standups

+

+ Automatically transcribe daily standups, extract updates from each team member, and send a digest to + the team channel. +

+
+
+ +

Client meetings

+

+ Process client calls, extract action items, create tasks in your project management tool, and send + follow-up emails. +

+
+
+ +

Interviews

+

+ Transcribe interviews, extract key insights, apply custom evaluation templates, and save to your ATS. +

+
+
+ +

Sales calls

+

+ Record sales calls, identify key objections and questions, log to CRM, and notify relevant team + members. +

+
+
+
+ +
+

+ How workflows work +

+
+
+
+ 1 +
+
+

Set triggers

+

+ Choose what starts your workflow: meeting end, keyword detection, scheduled time, or manual trigger. +

+
+
+
+
+ 2 +
+
+

Add conditions

+

+ Add rules to filter when workflows run: meeting duration, participants, tags, or custom conditions. +

+
+
+
+
+ 3 +
+
+

Define actions

+

+ Choose what happens next: send notifications, export files, create tasks, or connect to + integrations. +

+
+
+
+
+ 4 +
+
+

Let it run

+

+ Workflows run automatically in the background. Monitor activity and adjust as needed. +

+
+
+
+
+ +
+

+ Get notified when we launch +

+

+ Be the first to know when workflows become available. +

+ + Join waitlist + +
+
+
+
+ ); +} diff --git a/apps/web/src/routes/_view/route.tsx b/apps/web/src/routes/_view/route.tsx index a353de26c5..c1fc234635 100644 --- a/apps/web/src/routes/_view/route.tsx +++ b/apps/web/src/routes/_view/route.tsx @@ -45,22 +45,15 @@ function Component() { const productsList = [ { to: "/product/notepad", label: "Notepad" }, { to: "/product/bot", label: "Bot", badge: "Coming Soon" }, - { to: "/product/web", label: "Web", badge: "Coming Soon" }, { to: "/product/api", label: "API", badge: "Coming Soon" }, - { to: "/product/local-ai", label: "Local AI" }, - { to: "/product/owhisper", label: "OWhisper" }, - { to: "/product/self-hosting", label: "Self-Hosting", badge: "Coming Soon" }, + { to: "/product/extensions", label: "Extensions", badge: "Coming Soon" }, ]; const featuresList = [ { to: "/product/ai-notetaking", label: "AI Notetaking" }, { to: "/product/ai-assistant", label: "AI Assistant" }, - { to: "/product/contacts", label: "Contacts" }, - { to: "/product/calendar", label: "Calendar" }, - { to: "/product/floating-panel", label: "Floating Panel", badge: "Coming Soon" }, - { to: "/product/daily-note", label: "Daily Note", badge: "Coming Soon" }, - { to: "/product/noteshelf", label: "Noteshelf", badge: "Coming Soon" }, - { to: "/product/extensibility", label: "Extensibility", badge: "Coming Soon" }, + { to: "/product/mini-apps", label: "Mini Apps" }, + { to: "/product/workflows", label: "Workflows", badge: "Coming Soon" }, ]; function Header() { @@ -136,20 +129,22 @@ function Header() {
Features
- {featuresList.map((link) => ( - - {link.label} - {link.badge && ( - - {link.badge} - - )} - - ))} +
+ {featuresList.map((link) => ( + + {link.label} + {link.badge && ( + + {link.badge} + + )} + + ))} +
diff --git a/apps/web/src/routes/_view/templates.tsx b/apps/web/src/routes/_view/templates.tsx new file mode 100644 index 0000000000..78db6d5d92 --- /dev/null +++ b/apps/web/src/routes/_view/templates.tsx @@ -0,0 +1,260 @@ +import { cn } from "@hypr/utils"; + +import { Icon } from "@iconify-icon/react"; +import { createFileRoute } from "@tanstack/react-router"; +import { allTemplates } from "content-collections"; +import { useMemo, useState } from "react"; + +import { DownloadButton } from "@/components/download-button"; +import { SlashSeparator } from "@/components/slash-separator"; + +export const Route = createFileRoute("/_view/templates")({ + component: Component, + head: () => ({ + meta: [ + { title: "Meeting Templates - Hyprnote" }, + { + name: "description", + content: + "Discover our library of AI meeting templates. Get structured summaries for sprint planning, sales calls, 1:1s, and more. Create custom templates for your workflow.", + }, + { property: "og:title", content: "Meeting Templates - Hyprnote" }, + { + property: "og:description", + content: + "Browse our collection of AI meeting templates. From engineering standups to sales discovery calls, find the perfect template for your meeting type.", + }, + { property: "og:type", content: "website" }, + { property: "og:url", content: "https://hyprnote.com/templates" }, + ], + }), +}); + +function Component() { + const [searchQuery, setSearchQuery] = useState(""); + const [selectedCategory, setSelectedCategory] = useState(null); + + const templatesByCategory = getTemplatesByCategory(); + const categories = Object.keys(templatesByCategory); + + const filteredTemplates = useMemo(() => { + let templates = allTemplates; + + // Filter by category + if (selectedCategory) { + templates = templates.filter((t) => t.category === selectedCategory); + } + + // Filter by search query + if (searchQuery.trim()) { + const query = searchQuery.toLowerCase(); + templates = templates.filter( + (t) => + t.title.toLowerCase().includes(query) + || t.description.toLowerCase().includes(query) + || t.category.toLowerCase().includes(query), + ); + } + + return templates; + }, [searchQuery, selectedCategory]); + + const filteredByCategory = useMemo(() => { + return filteredTemplates.reduce( + (acc, template) => { + const category = template.category; + if (!acc[category]) { + acc[category] = []; + } + acc[category].push(template); + return acc; + }, + {} as Record, + ); + }, [filteredTemplates]); + + return ( +
+
+ {/* Hero Section */} +
+
+
+

+ Meeting templates for
every conversation +

+

+ Choose from {allTemplates.length} templates to structure your AI summaries.{" "} +
+ From sprint planning to sales calls, find the perfect format. +

+
+ + {/* Search Bar */} +
+
+ setSearchQuery(e.target.value)} + className="flex-1 px-4 py-2.5 text-sm outline-none bg-white text-center placeholder:text-center" + /> +
+
+ + {/* Category Chips */} +
+ + {categories.map((category) => ( + + ))} +
+
+
+ + + + {/* Templates List */} +
+ {/* Templates List */} +
+ {filteredTemplates.length === 0 + ? ( +
+ +

No templates found matching your search.

+
+ ) + : ( + Object.entries(filteredByCategory).map(([category, templates]) => ( +
+

+ {category} +

+
+ {templates.map((template) => )} +
+
+ )) + )} +
+
+ + + + {/* CTA Section */} +
+
+

+ Ready to transform your meetings? +

+

+ Download Hyprnote and start using these templates to capture perfect meeting notes with AI. +

+
+ +

+ Free to use. No credit card required. +

+
+
+
+
+
+ ); +} + +function getTemplatesByCategory() { + return allTemplates.reduce( + (acc, template) => { + const category = template.category; + if (!acc[category]) { + acc[category] = []; + } + acc[category].push(template); + return acc; + }, + {} as Record, + ); +} + +function getIconForTemplate(title: string): string { + const iconMap: Record = { + "Daily Standup": "mdi:run-fast", + "Sprint Planning": "mdi:calendar-star", + "Sprint Retrospective": "mdi:mirror", + "Product Roadmap Review": "mdi:road-variant", + "Customer Discovery Interview": "mdi:account-search", + "Sales Discovery Call": "mdi:phone", + "Technical Design Review": "mdi:draw", + "Executive Briefing": "mdi:tie", + "Board Meeting": "mdi:office-building", + "Performance Review": "mdi:chart-line", + "Client Kickoff Meeting": "mdi:rocket-launch", + "Brainstorming Session": "mdi:lightbulb-on", + "Incident Postmortem": "mdi:alert-circle", + "Lecture Notes": "mdi:school", + "Investor Pitch Meeting": "mdi:cash-multiple", + "1:1 Meeting": "mdi:account-multiple", + "Project Kickoff": "mdi:flag", + }; + return iconMap[title] || "mdi:file-document"; +} + +function TemplateCard({ template }: { template: (typeof allTemplates)[0] }) { + const icon = getIconForTemplate(template.title); + + return ( +
+
+
+ +
+
+

+ {template.title} +

+

{template.description}

+
+
+
+
Sections
+
+ {template.sections.slice(0, 3).map((section) => ( + + {section.title} + + ))} + {template.sections.length > 3 && ( + +{template.sections.length - 3} more + )} +
+
+
+ ); +}