diff --git a/apps/web/content-collections.ts b/apps/web/content-collections.ts index ef277b1c6e..c0ca295c9e 100644 --- a/apps/web/content-collections.ts +++ b/apps/web/content-collections.ts @@ -401,6 +401,44 @@ const vs = defineCollection({ }, }); +const shortcuts = defineCollection({ + name: "shortcuts", + directory: "content/shortcuts", + include: "*.mdx", + exclude: "AGENTS.md", + schema: z.object({ + title: z.string(), + description: z.string(), + category: z.string(), + prompt: z.string(), + }), + transform: async (document, context) => { + const mdx = await compileMDX(context, document, { + remarkPlugins: [remarkGfm, mdxMermaid], + rehypePlugins: [ + rehypeSlug, + [ + rehypeAutolinkHeadings, + { + behavior: "wrap", + properties: { + className: ["anchor"], + }, + }, + ], + ], + }); + + const slug = document._meta.path.replace(/\.mdx$/, ""); + + return { + ...document, + mdx, + slug, + }; + }, +}); + const roadmap = defineCollection({ name: "roadmap", directory: "content/roadmap", @@ -445,6 +483,67 @@ const roadmap = defineCollection({ }, }); +const handbook = defineCollection({ + name: "handbook", + directory: "content/handbook", + include: "**/*.mdx", + exclude: "AGENTS.md", + schema: z.object({ + title: z.string(), + section: z.string(), + summary: z.string().optional(), + author: z.string().optional(), + created: z.string().optional(), + updated: z.string().optional(), + }), + transform: async (document, context) => { + const toc = extractToc(document.content); + + const mdx = await compileMDX(context, document, { + remarkPlugins: [remarkGfm, mdxMermaid], + rehypePlugins: [ + rehypeSlug, + [ + rehypeAutolinkHeadings, + { + behavior: "wrap", + properties: { + className: ["anchor"], + }, + }, + ], + ], + }); + + const pathParts = document._meta.path.split("/"); + const fileName = pathParts.pop()!.replace(/\.mdx$/, ""); + + const sectionFolder = pathParts[0] || "general"; + + const isIndex = fileName === "index"; + + const orderMatch = fileName.match(/^(\d+)\./); + const order = orderMatch ? parseInt(orderMatch[1], 10) : 999; + + const cleanFileName = fileName.replace(/^\d+\./, ""); + const cleanPath = + pathParts.length > 0 + ? `${pathParts.join("/")}/${cleanFileName}` + : cleanFileName; + const slug = cleanPath; + + return { + ...document, + mdx, + slug, + sectionFolder, + isIndex, + order, + toc, + }; + }, +}); + export default defineConfig({ collections: [ articles, @@ -452,9 +551,11 @@ export default defineConfig({ docs, legal, templates, + shortcuts, hooks, deeplinks, vs, + handbook, roadmap, ], }); diff --git a/apps/web/content/handbook/about/0.what-hyprnote-is.mdx b/apps/web/content/handbook/about/0.what-hyprnote-is.mdx new file mode 100644 index 0000000000..388615c31d --- /dev/null +++ b/apps/web/content/handbook/about/0.what-hyprnote-is.mdx @@ -0,0 +1,15 @@ +--- +title: "What Hyprnote is" +section: "About" +summary: "Hyprnote is the first open-source AI notetaker for the enterprise, designed with a privacy-first, local-first philosophy." +--- + +Hyprnote is the first open-source AI notetaker for the enterprise, designed with a privacy-first, local-first philosophy. At its core, Hyprnote is more than just a notetaker — it's the beginning of an AI-native executive assistant. + +## Reducing Cognitive Load + +Note-taking reduces cognitive load. We're extending that idea: what other cognitive burdens can we offload to software? Our vision is for Hyprnote to take care of your notes today, and in the future, your email, calendar, and broader workflow — giving you the experience of having someone trustworthy "taking care of things" on your behalf. + +## Simple and Accessible + +Hyprnote is simple, accessible, and platform-agnostic. Like Apple Notes, but built for meetings. Like an assistant that not only records but also understands and organizes what matters. diff --git a/apps/web/content/handbook/about/1.how-hyprnote-was-born.mdx b/apps/web/content/handbook/about/1.how-hyprnote-was-born.mdx new file mode 100644 index 0000000000..aa1805f1e6 --- /dev/null +++ b/apps/web/content/handbook/about/1.how-hyprnote-was-born.mdx @@ -0,0 +1,19 @@ +--- +title: "How Hyprnote was born" +section: "About" +summary: "Hyprnote was born from real frustration with existing meeting tools." +--- + +Hyprnote was born from real frustration. + +## The Founders' Perspectives + +**John's background in sales** meant living through countless meetings where tools like ClovaNote or Granola weren't enough — they transcribed, but didn't go further. + +**Yujong's deep open-source background** brought the conviction that the best solutions must be transparent, extensible, and community-driven. The world is built on open source, and we believe the best way forward is to create massive value first, then capture some of it. + +**Together with Duck**, we wanted a product that reflected our shared obsession with craft and simplicity. Hyprnote had to feel trustworthy, reliable, and uncompromising in quality. + +## Perfect Timing + +The rise of LLMs made this timing perfect: ideas can be prototyped faster, models run locally, and hardware performance keeps getting stronger. What once felt impossible (AI assistants running fully on-device) is now real. diff --git a/apps/web/content/handbook/about/2.the-team.mdx b/apps/web/content/handbook/about/2.the-team.mdx new file mode 100644 index 0000000000..6314d23af4 --- /dev/null +++ b/apps/web/content/handbook/about/2.the-team.mdx @@ -0,0 +1,17 @@ +--- +title: "The team behind Hyprnote" +section: "About" +summary: "Meet the founders building Hyprnote." +--- + +## The Founders + +**Jeeheon "John" Jeong**: Product design and sales background. Passionate about simplicity, industrial design, and thoughtful UX. Believes in products that remove friction rather than add it. + +**Yujong Lee**: Open-source engineer, contributor to projects like Hono and LiteLLM. Systems thinker who goes deep into fundamentals, ensuring robust, scalable architecture. + +**Deokhaeng "Duck" Lee**: CS major from Duke, relentless about product quality and code craftsmanship. Obsessed with reliability, testing, and never compromising on user experience. + +## Shared Values + +We've worked together for years, and though our backgrounds are different, our strength is shared values: we care about craft, simplicity, and building things that people truly want to use. diff --git a/apps/web/content/handbook/about/3.why-hyprnote-is-important.mdx b/apps/web/content/handbook/about/3.why-hyprnote-is-important.mdx new file mode 100644 index 0000000000..7ea7e511cd --- /dev/null +++ b/apps/web/content/handbook/about/3.why-hyprnote-is-important.mdx @@ -0,0 +1,19 @@ +--- +title: "Why Hyprnote is important" +section: "About" +summary: "In a world where work is increasingly digital, individuals and companies need tools they can trust." +--- + +In a world where work is increasingly digital and fragmented, individuals and companies need tools they can trust. Most note-taking and assistant products are cloud-first, with trade-offs in privacy and control. Hyprnote proves another path is possible: + +## Our Differentiators + +**Local-first, privacy-first.** Your data stays yours. + +**Enterprise-grade, open-source.** Compliance-ready, extensible, and transparent. + +**Future-proof.** Hardware is advancing rapidly, and local AI is becoming the norm. Hyprnote is built to harness this shift. + +## Our Belief + +We believe every company and individual deserves software that works for them, not against them. diff --git a/apps/web/content/handbook/about/4.where-were-heading.mdx b/apps/web/content/handbook/about/4.where-were-heading.mdx new file mode 100644 index 0000000000..0bc2d5ddfd --- /dev/null +++ b/apps/web/content/handbook/about/4.where-were-heading.mdx @@ -0,0 +1,19 @@ +--- +title: "Where we're heading" +section: "About" +summary: "Hyprnote today is a notetaker. But tomorrow, it will be much more." +--- + +Hyprnote today is a notetaker. But tomorrow, it will be much more: + +## Our Vision + +**A trusted executive assistant** for managing not only your notes, but also your inbox, calendar, and workflow. + +**A suite of open-source, AI-native tools** that empower individuals and organizations without locking them into opaque platforms. + +**A fortress-grade enterprise solution** that serves compliance-sensitive industries while remaining simple enough for everyday use. + +## Our Ambition + +Our ambition is simple: build the AI-native productivity stack that feels as natural and indispensable as having a world-class assistant by your side. diff --git a/apps/web/content/handbook/communication/0.why-this-matters.mdx b/apps/web/content/handbook/communication/0.why-this-matters.mdx new file mode 100644 index 0000000000..b8e983a530 --- /dev/null +++ b/apps/web/content/handbook/communication/0.why-this-matters.mdx @@ -0,0 +1,11 @@ +--- +title: "Why This Matters" +section: "Communication" +summary: "Communication is how we build trust with our community and customers." +--- + +Communication is how we build trust with our community and customers. In a world of noisy marketing and empty promises, we stand out by being genuine, helpful, and transparent. + +## The Stakes + +Every piece of content we publish, every interaction we have, shapes how people perceive Hyprnote. We take this responsibility seriously. diff --git a/apps/web/content/handbook/communication/1.our-north-star.mdx b/apps/web/content/handbook/communication/1.our-north-star.mdx new file mode 100644 index 0000000000..9e7940f905 --- /dev/null +++ b/apps/web/content/handbook/communication/1.our-north-star.mdx @@ -0,0 +1,7 @@ +--- +title: "Our North Star" +section: "Communication" +summary: "The guiding principle for all our communications." +--- + +Our north star is simple: be genuinely helpful. Every piece of content should either educate, inspire, or solve a problem. If it doesn't do one of these things, we don't publish it. diff --git a/apps/web/content/handbook/communication/2.principles.mdx b/apps/web/content/handbook/communication/2.principles.mdx new file mode 100644 index 0000000000..227cd56a4d --- /dev/null +++ b/apps/web/content/handbook/communication/2.principles.mdx @@ -0,0 +1,21 @@ +--- +title: "Communication Principles" +section: "Communication" +summary: "The four principles that guide how we communicate." +--- + +## 1. Own the Channel + +We control our narrative by owning our communication channels — our website, blog, documentation, and social presence. We don't rely on third-party platforms for our core messaging. + +## 2. Consistency Across Everything + +Whether it's a tweet, a blog post, or a support email, the voice should feel unmistakably Hyprnote — clear, helpful, and human. + +## 3. Frictionless Publishing + +We've built systems that make it easy to publish and update content. No bureaucracy, no approval chains for routine updates. Move fast, stay accurate. + +## 4. Build in Public, Transparently + +We share our journey openly — the wins, the challenges, the lessons learned. This builds trust and invites our community to be part of the story. diff --git a/apps/web/content/handbook/go-to-market/0.customers.mdx b/apps/web/content/handbook/go-to-market/0.customers.mdx new file mode 100644 index 0000000000..d9549b84d0 --- /dev/null +++ b/apps/web/content/handbook/go-to-market/0.customers.mdx @@ -0,0 +1,15 @@ +--- +title: "Who our customers are" +section: "Go-to-market" +summary: "Understanding who we build for and why." +--- + +Our customers are knowledge workers, teams, and enterprises who need to capture and act on their conversations. They value privacy, want control over their data, and appreciate tools that work reliably without complexity. + +## Primary Segments + +**Individual professionals** who attend frequent meetings and need organized, searchable notes. + +**Teams** that want to stay aligned without spending hours on documentation. + +**Enterprises** in compliance-sensitive industries that need on-premises or self-hosted solutions. diff --git a/apps/web/content/handbook/go-to-market/1.value-we-provide.mdx b/apps/web/content/handbook/go-to-market/1.value-we-provide.mdx new file mode 100644 index 0000000000..2687460f5d --- /dev/null +++ b/apps/web/content/handbook/go-to-market/1.value-we-provide.mdx @@ -0,0 +1,17 @@ +--- +title: "The value we provide" +section: "Go-to-market" +summary: "What makes Hyprnote valuable to our customers." +--- + +We give people back their focus. Instead of frantically taking notes or trying to remember what was said, our users can be fully present in their conversations knowing Hyprnote has them covered. + +## Core Value Propositions + +**Time savings** — No more manual note-taking or post-meeting documentation. + +**Better recall** — Searchable transcripts and summaries mean nothing gets lost. + +**Privacy and control** — Local-first architecture means your data stays yours. + +**Simplicity** — Powerful features that feel effortless to use. diff --git a/apps/web/content/handbook/go-to-market/2.how-customers-find-us.mdx b/apps/web/content/handbook/go-to-market/2.how-customers-find-us.mdx new file mode 100644 index 0000000000..ee5e389368 --- /dev/null +++ b/apps/web/content/handbook/go-to-market/2.how-customers-find-us.mdx @@ -0,0 +1,17 @@ +--- +title: "How customers find us" +section: "Go-to-market" +summary: "Our approach to reaching potential customers." +--- + +We believe in building in public and letting our work speak for itself. + +## Discovery Channels + +**Open source community** — Our GitHub presence and contributions to the ecosystem. + +**Content and SEO** — Blog posts, documentation, and educational content. + +**Word of mouth** — Happy users who share Hyprnote with their networks. + +**Direct outreach** — For enterprise customers with specific compliance needs. diff --git a/apps/web/content/handbook/go-to-market/3.how-we-talk-with-them.mdx b/apps/web/content/handbook/go-to-market/3.how-we-talk-with-them.mdx new file mode 100644 index 0000000000..9c5a048e64 --- /dev/null +++ b/apps/web/content/handbook/go-to-market/3.how-we-talk-with-them.mdx @@ -0,0 +1,17 @@ +--- +title: "How we talk with them" +section: "Go-to-market" +summary: "Our communication approach with customers." +--- + +We communicate with honesty and clarity. No marketing fluff, no overpromising. We tell people what Hyprnote does well and where we're still improving. + +## Communication Principles + +**Be direct** — Say what we mean, mean what we say. + +**Be helpful** — Focus on solving problems, not selling features. + +**Be responsive** — Treat every piece of feedback as valuable. + +**Be transparent** — Share our roadmap, acknowledge our limitations. diff --git a/apps/web/content/handbook/go-to-market/4.how-we-price.mdx b/apps/web/content/handbook/go-to-market/4.how-we-price.mdx new file mode 100644 index 0000000000..a0f5825002 --- /dev/null +++ b/apps/web/content/handbook/go-to-market/4.how-we-price.mdx @@ -0,0 +1,15 @@ +--- +title: "How we price our product" +section: "Go-to-market" +summary: "Our pricing philosophy and approach." +--- + +We believe powerful tools should be accessible. Our core product is free and open source. We monetize through enterprise features and support for organizations with specific needs. + +## Pricing Philosophy + +**Free for individuals** — The core Hyprnote experience is free forever. + +**Fair for teams** — Reasonable pricing that scales with value delivered. + +**Custom for enterprise** — Tailored solutions for compliance-sensitive organizations. diff --git a/apps/web/content/handbook/how-we-work/0.work-styles.mdx b/apps/web/content/handbook/how-we-work/0.work-styles.mdx new file mode 100644 index 0000000000..f7ab8b9f23 --- /dev/null +++ b/apps/web/content/handbook/how-we-work/0.work-styles.mdx @@ -0,0 +1,19 @@ +--- +title: "Work styles" +section: "How-we-work" +summary: "At Hyprnote, our way of working is designed to maximize focus, creativity, and speed." +--- + +At Hyprnote, our way of working is designed to maximize focus, creativity, and speed. Each founder has a different style, and we embrace that diversity to get the best out of ourselves. + +## Individual Styles + +**John** works best when in motion, shifting between spaces — coffee shops, parks, different environments. Moving helps reset focus, and speaking ideas aloud (almost like talking to someone) is part of his creative process. + +**Yujong** thrives in calm, ordered environments where he can achieve deep focus and think through systems at the root level. + +**Duck** prefers structure and used to maintain an office commute for better concentration, showing that physical separation helps him be fully engaged at work. + +## Our Culture + +Our culture acknowledges these differences. Productivity comes not from forcing uniformity, but from creating conditions where each person can deliver their best. diff --git a/apps/web/content/handbook/how-we-work/1.communication-and-focus.mdx b/apps/web/content/handbook/how-we-work/1.communication-and-focus.mdx new file mode 100644 index 0000000000..1f6ffe6bfb --- /dev/null +++ b/apps/web/content/handbook/how-we-work/1.communication-and-focus.mdx @@ -0,0 +1,15 @@ +--- +title: "Communication and focus" +section: "How-we-work" +summary: "We balance independence with frequent sync to stay aligned and focused." +--- + +We balance independence with frequent sync. Too much disturbance kills focus; too little sync causes drift. To stay aligned, we use: + +## Our Tools + +**Slack and async docs** for day-to-day communication. + +**GitHub Issues** as our single source of truth for product development and feedback (integrated with Linear). + +**Open documentation culture** we're still building, so everyone can contribute and learn. diff --git a/apps/web/content/handbook/how-we-work/2.customer-feedback.mdx b/apps/web/content/handbook/how-we-work/2.customer-feedback.mdx new file mode 100644 index 0000000000..a5f6cb339c --- /dev/null +++ b/apps/web/content/handbook/how-we-work/2.customer-feedback.mdx @@ -0,0 +1,11 @@ +--- +title: "Customer feedback and issues" +section: "How-we-work" +summary: "GitHub Issues is our main public channel for feedback, keeping us open-source friendly and transparent." +--- + +Early on, we had too many feedback channels — email, Intercom, Canny, Discord, GitHub, Linear. We've since streamlined. Today, GitHub Issues is our main public channel, with everything else synced into it. This helps us stay open-source friendly, transparent, and focused. + +## The Principle + +The principle is simple: one source of truth, open to everyone. diff --git a/apps/web/content/handbook/who-we-want/0.core-traits.mdx b/apps/web/content/handbook/who-we-want/0.core-traits.mdx new file mode 100644 index 0000000000..fce3dad241 --- /dev/null +++ b/apps/web/content/handbook/who-we-want/0.core-traits.mdx @@ -0,0 +1,17 @@ +--- +title: "The Core Traits We Look For" +section: "Who-we-want" +summary: "The three core traits we value most in teammates: Grit, Intellectual honesty, and Sharpness." +--- + +## 1. Grit + +Building a startup is hard. There will be moments of doubt, frustration, and exhaustion. We need people who push through — not blindly, but with resilience and purpose. Grit means staying committed to the mission even when progress feels slow. + +## 2. Intellectual Honesty + +We value people who can say "I don't know" or "I was wrong." Ego has no place here. We want teammates who seek truth over being right, who challenge ideas constructively, and who update their views when presented with better evidence. + +## 3. Sharpness + +Speed matters. We look for people who think quickly, communicate clearly, and execute decisively. Sharpness isn't about being the smartest — it's about being effective under pressure and making good decisions fast. diff --git a/apps/web/content/handbook/who-we-want/1.hard-skills.mdx b/apps/web/content/handbook/who-we-want/1.hard-skills.mdx new file mode 100644 index 0000000000..b02b42995a --- /dev/null +++ b/apps/web/content/handbook/who-we-want/1.hard-skills.mdx @@ -0,0 +1,7 @@ +--- +title: "Hard skills matter too" +section: "Who-we-want" +summary: "While soft traits are essential, we also need people who are excellent at what they do." +--- + +While soft traits are essential, we also need people who are excellent at what they do. Whether it's engineering, design, sales, or operations — we expect deep competence. We're a small team, and everyone needs to pull their weight. diff --git a/apps/web/content/handbook/who-we-want/2.founders-example.mdx b/apps/web/content/handbook/who-we-want/2.founders-example.mdx new file mode 100644 index 0000000000..1b735d7d11 --- /dev/null +++ b/apps/web/content/handbook/who-we-want/2.founders-example.mdx @@ -0,0 +1,7 @@ +--- +title: "The example of our founders" +section: "Who-we-want" +summary: "We hold ourselves to the same standards we expect from others." +--- + +We hold ourselves to the same standards we expect from others. We're not perfect, but we try to embody grit, honesty, and sharpness every day. We expect future teammates to do the same — and to call us out when we fall short. diff --git a/apps/web/content/handbook/who-we-want/3.future-teammates.mdx b/apps/web/content/handbook/who-we-want/3.future-teammates.mdx new file mode 100644 index 0000000000..83a7f8f681 --- /dev/null +++ b/apps/web/content/handbook/who-we-want/3.future-teammates.mdx @@ -0,0 +1,7 @@ +--- +title: "What this means for future teammates" +section: "Who-we-want" +summary: "If you join Hyprnote, you'll be expected to own your work, move fast, and communicate openly." +--- + +If you join Hyprnote, you'll be expected to own your work, move fast, and communicate openly. We don't micromanage — we trust you to figure things out. In return, we offer autonomy, impact, and the chance to build something meaningful. diff --git a/apps/web/content/shortcuts/action-items.mdx b/apps/web/content/shortcuts/action-items.mdx new file mode 100644 index 0000000000..747b1c3b48 --- /dev/null +++ b/apps/web/content/shortcuts/action-items.mdx @@ -0,0 +1,24 @@ +--- +title: "Extract Action Items" +description: "Pull out all action items, tasks, and commitments from the meeting" +category: "Productivity" +prompt: "You are a meticulous executive assistant. Review the meeting transcript and extract all action items, tasks, and commitments. For each item, identify: 1) The specific task or action 2) Who is responsible (if mentioned) 3) The deadline or timeframe (if mentioned) 4) Any dependencies or blockers. Format the output as a clear, prioritized list that can be easily copied into a task management system. Flag any items that seem urgent or time-sensitive." +--- + +## When to use + +Use this shortcut after any meeting where tasks were assigned or commitments were made. + +## What you'll get + +- A comprehensive list of all action items discussed +- Clear ownership assignments where mentioned +- Deadlines and timeframes extracted +- Priority indicators for urgent items +- Dependencies and blockers identified + +## Example questions to ask + +- "What are all the action items from this meeting?" +- "Who committed to doing what?" +- "What needs to be done before our next meeting?" diff --git a/apps/web/content/shortcuts/customer-concerns.mdx b/apps/web/content/shortcuts/customer-concerns.mdx new file mode 100644 index 0000000000..c7dfa03574 --- /dev/null +++ b/apps/web/content/shortcuts/customer-concerns.mdx @@ -0,0 +1,24 @@ +--- +title: "Customer Concerns Analysis" +description: "Identify and analyze customer concerns, objections, and pain points from the conversation" +category: "Customer Success" +prompt: "You are an expert customer success manager. Analyze this conversation and identify all customer concerns, objections, and pain points. For each concern: 1) Clearly state the concern 2) Assess its severity (high/medium/low) 3) Identify the root cause if apparent 4) Note how it was addressed in the conversation (if at all) 5) Suggest follow-up actions to resolve or mitigate the concern. Prioritize concerns by their potential impact on the customer relationship or deal." +--- + +## When to use + +Use this shortcut after customer calls, support conversations, or sales meetings to ensure no concerns slip through the cracks. + +## What you'll get + +- Comprehensive list of all concerns raised +- Severity assessment for prioritization +- Root cause analysis +- Gap analysis of unaddressed concerns +- Recommended follow-up actions + +## Example questions to ask + +- "What concerns did the customer raise?" +- "Were there any unaddressed objections?" +- "What should we follow up on?" diff --git a/apps/web/content/shortcuts/decision-summary.mdx b/apps/web/content/shortcuts/decision-summary.mdx new file mode 100644 index 0000000000..cb868a85ac --- /dev/null +++ b/apps/web/content/shortcuts/decision-summary.mdx @@ -0,0 +1,24 @@ +--- +title: "Decision Summary" +description: "Extract and document all decisions made during the meeting" +category: "Productivity" +prompt: "You are a skilled meeting facilitator and documenter. Review the meeting transcript and identify all decisions that were made. For each decision: 1) State the decision clearly and concisely 2) Note who made or approved the decision 3) Capture the reasoning or context behind the decision 4) Identify any conditions, caveats, or dependencies 5) Note any dissenting opinions or concerns raised. Format the output as a clear decision log that can be shared with stakeholders or referenced in the future." +--- + +## When to use + +Use this shortcut after strategic meetings, planning sessions, or any meeting where important decisions were made. + +## What you'll get + +- Clear documentation of all decisions made +- Context and reasoning captured +- Decision makers identified +- Conditions and dependencies noted +- Dissenting opinions recorded + +## Example questions to ask + +- "What decisions were made in this meeting?" +- "Who approved the budget increase?" +- "Were there any conditional decisions?" diff --git a/apps/web/content/shortcuts/follow-up-email.mdx b/apps/web/content/shortcuts/follow-up-email.mdx new file mode 100644 index 0000000000..da86799a90 --- /dev/null +++ b/apps/web/content/shortcuts/follow-up-email.mdx @@ -0,0 +1,24 @@ +--- +title: "Draft Follow-up Email" +description: "Generate a professional follow-up email based on the meeting discussion" +category: "Communication" +prompt: "You are an expert business communicator. Based on the meeting transcript, draft a professional follow-up email. The email should: 1) Thank participants for their time 2) Summarize the key points discussed 3) Confirm any decisions made 4) List action items with owners and deadlines 5) Propose next steps or a follow-up meeting if appropriate. Keep the tone professional but warm, and make the email concise and scannable. Include a clear subject line suggestion." +--- + +## When to use + +Use this shortcut after any meeting where you need to send a follow-up email to participants. + +## What you'll get + +- A professionally written follow-up email +- Clear summary of key discussion points +- Confirmed decisions and action items +- Suggested next steps +- Appropriate subject line + +## Example questions to ask + +- "Draft a follow-up email for this meeting" +- "Write a summary email to send to the team" +- "Create a recap email with action items" diff --git a/apps/web/content/shortcuts/meeting-insights.mdx b/apps/web/content/shortcuts/meeting-insights.mdx new file mode 100644 index 0000000000..81d2703673 --- /dev/null +++ b/apps/web/content/shortcuts/meeting-insights.mdx @@ -0,0 +1,24 @@ +--- +title: "Meeting Insights" +description: "Get deep insights and analysis from your meeting conversation" +category: "Analysis" +prompt: "You are a strategic business analyst. Analyze this meeting transcript and provide deep insights. Focus on: 1) Key themes and topics discussed 2) Sentiment and tone of the conversation 3) Areas of agreement and disagreement 4) Underlying concerns or motivations that may not have been explicitly stated 5) Opportunities or risks identified 6) Recommendations for follow-up. Provide your analysis in a structured format that helps the reader quickly understand the dynamics and outcomes of the meeting." +--- + +## When to use + +Use this shortcut when you want to understand the deeper dynamics of a meeting beyond just the surface-level discussion. + +## What you'll get + +- Identification of key themes and patterns +- Sentiment analysis of the conversation +- Hidden concerns or motivations uncovered +- Strategic opportunities identified +- Risk assessment and recommendations + +## Example questions to ask + +- "What were the underlying concerns in this meeting?" +- "What opportunities did we miss discussing?" +- "How did the tone of the meeting change over time?" diff --git a/apps/web/content/shortcuts/sales-feedback.mdx b/apps/web/content/shortcuts/sales-feedback.mdx new file mode 100644 index 0000000000..a5e48dba79 --- /dev/null +++ b/apps/web/content/shortcuts/sales-feedback.mdx @@ -0,0 +1,24 @@ +--- +title: "Sales Call Feedback" +description: "Analyze your sales call and get actionable feedback on what you could have done better" +category: "Sales" +prompt: "You are an expert sales coach. Analyze the transcript of this sales call and provide constructive feedback. Focus on: 1) Discovery questions - were the right questions asked to understand the prospect's needs? 2) Objection handling - how well were concerns addressed? 3) Value proposition - was the value clearly communicated? 4) Next steps - were clear next steps established? 5) Rapport building - how was the relationship developed? Provide specific examples from the call and actionable suggestions for improvement." +--- + +## When to use + +Use this shortcut after a sales discovery call, demo, or negotiation to get AI-powered feedback on your performance. + +## What you'll get + +- Analysis of your discovery questions and listening skills +- Evaluation of how you handled objections +- Feedback on your value proposition delivery +- Assessment of rapport building and relationship development +- Specific, actionable suggestions for improvement + +## Example questions to ask + +- "What could I have done better in this call?" +- "How well did I handle the pricing objection?" +- "Did I ask enough discovery questions?" diff --git a/apps/web/netlify/edge-functions/og.tsx b/apps/web/netlify/edge-functions/og.tsx index 8d2b66cabf..c8a8a7d576 100644 --- a/apps/web/netlify/edge-functions/og.tsx +++ b/apps/web/netlify/edge-functions/og.tsx @@ -3,12 +3,19 @@ import React from "https://esm.sh/react@18.2.0"; // deno-lint-ignore no-import-prefix import { z } from "https://deno.land/x/zod@v3.23.8/mod.ts"; -const templateSchema = z.object({ +const meetingSchema = z.object({ type: z.literal("meeting"), title: z.string(), headers: z.array(z.string()), }); +const templatesSchema = z.object({ + type: z.literal("templates"), + title: z.string(), + category: z.string(), + description: z.string().optional(), +}); + const changelogSchema = z.object({ type: z.literal("changelog"), version: z.string(), @@ -29,7 +36,7 @@ const docsSchema = z.object({ description: z.string().optional(), }); -const OGSchema = z.discriminatedUnion("type", [templateSchema, changelogSchema, blogSchema, docsSchema]); +const OGSchema = z.discriminatedUnion("type", [meetingSchema, templatesSchema, changelogSchema, blogSchema, docsSchema]); function preventWidow(text: string): string { const words = text.trim().split(/\s+/); @@ -74,6 +81,15 @@ function parseSearchParams(url: URL): z.infer | null { return result.success ? result.data : null; } + if (type === "templates") { + const title = url.searchParams.get("title"); + const category = url.searchParams.get("category"); + const description = url.searchParams.get("description") || undefined; + + const result = OGSchema.safeParse({ type, title, category, description }); + return result.success ? result.data : null; + } + const title = url.searchParams.get("title"); const headers = url.searchParams.getAll("headers"); @@ -81,7 +97,7 @@ function parseSearchParams(url: URL): z.infer | null { return result.success ? result.data : null; } -function renderTemplate(params: z.infer) { +function renderMeetingTemplate(params: z.infer) { return (
) { ); } +function renderTemplatesTemplate(params: z.infer) { + return ( +
+
+ +
Meeting Templates
+
+
+
{params.category}
+
{preventWidow(params.title)}
+ {params.description && ( +
{params.description}
+ )} +
+
+ ); +} + export default async function handler(req: Request) { const url = new URL(req.url); @@ -246,11 +280,13 @@ export default async function handler(req: Request) { response = renderBlogTemplate(params); } else if (params.type === "docs") { response = renderDocsTemplate(params); + } else if (params.type === "templates") { + response = renderTemplatesTemplate(params); } else { - response = renderTemplate(params); + response = renderMeetingTemplate(params); } - const needsCustomFonts = params.type === "changelog" || params.type === "blog" || params.type === "docs"; + const needsCustomFonts = params.type === "changelog" || params.type === "blog" || params.type === "docs" || params.type === "templates"; const fonts = needsCustomFonts ? [ { diff --git a/apps/web/src/routeTree.gen.ts b/apps/web/src/routeTree.gen.ts index d61ed8a5de..dc77f2b4d4 100644 --- a/apps/web/src/routeTree.gen.ts +++ b/apps/web/src/routeTree.gen.ts @@ -26,18 +26,21 @@ import { Route as ApiTemplatesRouteImport } from './routes/api/templates' import { Route as ViewSecurityRouteImport } from './routes/_view/security' import { Route as ViewPricingRouteImport } from './routes/_view/pricing' import { Route as ViewPressKitRouteImport } from './routes/_view/press-kit' +import { Route as ViewFreeRouteImport } from './routes/_view/free' import { Route as ViewFileTranscriptionRouteImport } from './routes/_view/file-transcription' import { Route as ViewFaqRouteImport } from './routes/_view/faq' import { Route as ViewEnterpriseRouteImport } from './routes/_view/enterprise' import { Route as ViewBrandRouteImport } from './routes/_view/brand' import { Route as ViewAboutRouteImport } from './routes/_view/about' import { Route as ViewDocsRouteRouteImport } from './routes/_view/docs/route' +import { Route as ViewCompanyHandbookRouteRouteImport } from './routes/_view/company-handbook/route' import { Route as ViewAppRouteRouteImport } from './routes/_view/app/route' -import { Route as ViewRoadmapIndexRouteImport } from './routes/_view/roadmap/index' import { Route as ViewTemplatesIndexRouteImport } from './routes/_view/templates/index' +import { Route as ViewRoadmapIndexRouteImport } from './routes/_view/roadmap/index' import { Route as ViewLegalIndexRouteImport } from './routes/_view/legal/index' import { Route as ViewDownloadIndexRouteImport } from './routes/_view/download/index' import { Route as ViewDocsIndexRouteImport } from './routes/_view/docs/index' +import { Route as ViewCompanyHandbookIndexRouteImport } from './routes/_view/company-handbook/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' @@ -72,6 +75,7 @@ import { Route as ViewLegalSlugRouteImport } from './routes/_view/legal/$slug' import { Route as ViewDownloadAppleSiliconRouteImport } from './routes/_view/download/apple-silicon' import { Route as ViewDownloadAppleIntelRouteImport } from './routes/_view/download/apple-intel' import { Route as ViewDocsSplatRouteImport } from './routes/_view/docs/$' +import { Route as ViewCompanyHandbookSplatRouteImport } from './routes/_view/company-handbook/$' import { Route as ViewChangelogSlugRouteImport } from './routes/_view/changelog/$slug' import { Route as ViewCallbackAuthRouteImport } from './routes/_view/callback/auth' import { Route as ViewBlogSlugRouteImport } from './routes/_view/blog/$slug' @@ -164,6 +168,11 @@ const ViewPressKitRoute = ViewPressKitRouteImport.update({ path: '/press-kit', getParentRoute: () => ViewRouteRoute, } as any) +const ViewFreeRoute = ViewFreeRouteImport.update({ + id: '/free', + path: '/free', + getParentRoute: () => ViewRouteRoute, +} as any) const ViewFileTranscriptionRoute = ViewFileTranscriptionRouteImport.update({ id: '/file-transcription', path: '/file-transcription', @@ -194,19 +203,27 @@ const ViewDocsRouteRoute = ViewDocsRouteRouteImport.update({ path: '/docs', getParentRoute: () => ViewRouteRoute, } as any) +const ViewCompanyHandbookRouteRoute = + ViewCompanyHandbookRouteRouteImport.update({ + id: '/company-handbook', + path: '/company-handbook', + getParentRoute: () => ViewRouteRoute, + } as any) const ViewAppRouteRoute = ViewAppRouteRouteImport.update({ id: '/app', path: '/app', getParentRoute: () => ViewRouteRoute, } as any) -const ViewRoadmapIndexRoute = ViewRoadmapIndexRouteImport.update({ - id: '/roadmap/', - path: '/roadmap/', const ViewTemplatesIndexRoute = ViewTemplatesIndexRouteImport.update({ id: '/templates/', path: '/templates/', getParentRoute: () => ViewRouteRoute, } as any) +const ViewRoadmapIndexRoute = ViewRoadmapIndexRouteImport.update({ + id: '/roadmap/', + path: '/roadmap/', + getParentRoute: () => ViewRouteRoute, +} as any) const ViewLegalIndexRoute = ViewLegalIndexRouteImport.update({ id: '/legal/', path: '/legal/', @@ -222,6 +239,12 @@ const ViewDocsIndexRoute = ViewDocsIndexRouteImport.update({ path: '/', getParentRoute: () => ViewDocsRouteRoute, } as any) +const ViewCompanyHandbookIndexRoute = + ViewCompanyHandbookIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => ViewCompanyHandbookRouteRoute, + } as any) const ViewChangelogIndexRoute = ViewChangelogIndexRouteImport.update({ id: '/changelog/', path: '/changelog/', @@ -396,6 +419,12 @@ const ViewDocsSplatRoute = ViewDocsSplatRouteImport.update({ path: '/$', getParentRoute: () => ViewDocsRouteRoute, } as any) +const ViewCompanyHandbookSplatRoute = + ViewCompanyHandbookSplatRouteImport.update({ + id: '/$', + path: '/$', + getParentRoute: () => ViewCompanyHandbookRouteRoute, + } as any) const ViewChangelogSlugRoute = ViewChangelogSlugRouteImport.update({ id: '/changelog/$slug', path: '/changelog/$slug', @@ -444,12 +473,14 @@ export interface FileRoutesByFullPath { '/x': typeof XRoute '/youtube': typeof YoutubeRoute '/app': typeof ViewAppRouteRouteWithChildren + '/company-handbook': typeof ViewCompanyHandbookRouteRouteWithChildren '/docs': typeof ViewDocsRouteRouteWithChildren '/about': typeof ViewAboutRoute '/brand': typeof ViewBrandRoute '/enterprise': typeof ViewEnterpriseRoute '/faq': typeof ViewFaqRoute '/file-transcription': typeof ViewFileTranscriptionRoute + '/free': typeof ViewFreeRoute '/press-kit': typeof ViewPressKitRouteWithChildren '/pricing': typeof ViewPricingRoute '/security': typeof ViewSecurityRoute @@ -464,6 +495,7 @@ export interface FileRoutesByFullPath { '/blog/$slug': typeof ViewBlogSlugRoute '/callback/auth': typeof ViewCallbackAuthRoute '/changelog/$slug': typeof ViewChangelogSlugRoute + '/company-handbook/$': typeof ViewCompanyHandbookSplatRoute '/docs/$': typeof ViewDocsSplatRoute '/download/apple-intel': typeof ViewDownloadAppleIntelRoute '/download/apple-silicon': typeof ViewDownloadAppleSiliconRoute @@ -498,6 +530,7 @@ export interface FileRoutesByFullPath { '/app/': typeof ViewAppIndexRoute '/blog': typeof ViewBlogIndexRoute '/changelog': typeof ViewChangelogIndexRoute + '/company-handbook/': typeof ViewCompanyHandbookIndexRoute '/docs/': typeof ViewDocsIndexRoute '/download': typeof ViewDownloadIndexRoute '/legal': typeof ViewLegalIndexRoute @@ -519,6 +552,7 @@ export interface FileRoutesByTo { '/enterprise': typeof ViewEnterpriseRoute '/faq': typeof ViewFaqRoute '/file-transcription': typeof ViewFileTranscriptionRoute + '/free': typeof ViewFreeRoute '/press-kit': typeof ViewPressKitRouteWithChildren '/pricing': typeof ViewPricingRoute '/security': typeof ViewSecurityRoute @@ -533,6 +567,7 @@ export interface FileRoutesByTo { '/blog/$slug': typeof ViewBlogSlugRoute '/callback/auth': typeof ViewCallbackAuthRoute '/changelog/$slug': typeof ViewChangelogSlugRoute + '/company-handbook/$': typeof ViewCompanyHandbookSplatRoute '/docs/$': typeof ViewDocsSplatRoute '/download/apple-intel': typeof ViewDownloadAppleIntelRoute '/download/apple-silicon': typeof ViewDownloadAppleSiliconRoute @@ -567,6 +602,7 @@ export interface FileRoutesByTo { '/app': typeof ViewAppIndexRoute '/blog': typeof ViewBlogIndexRoute '/changelog': typeof ViewChangelogIndexRoute + '/company-handbook': typeof ViewCompanyHandbookIndexRoute '/docs': typeof ViewDocsIndexRoute '/download': typeof ViewDownloadIndexRoute '/legal': typeof ViewLegalIndexRoute @@ -586,12 +622,14 @@ export interface FileRoutesById { '/x': typeof XRoute '/youtube': typeof YoutubeRoute '/_view/app': typeof ViewAppRouteRouteWithChildren + '/_view/company-handbook': typeof ViewCompanyHandbookRouteRouteWithChildren '/_view/docs': typeof ViewDocsRouteRouteWithChildren '/_view/about': typeof ViewAboutRoute '/_view/brand': typeof ViewBrandRoute '/_view/enterprise': typeof ViewEnterpriseRoute '/_view/faq': typeof ViewFaqRoute '/_view/file-transcription': typeof ViewFileTranscriptionRoute + '/_view/free': typeof ViewFreeRoute '/_view/press-kit': typeof ViewPressKitRouteWithChildren '/_view/pricing': typeof ViewPricingRoute '/_view/security': typeof ViewSecurityRoute @@ -606,6 +644,7 @@ export interface FileRoutesById { '/_view/blog/$slug': typeof ViewBlogSlugRoute '/_view/callback/auth': typeof ViewCallbackAuthRoute '/_view/changelog/$slug': typeof ViewChangelogSlugRoute + '/_view/company-handbook/$': typeof ViewCompanyHandbookSplatRoute '/_view/docs/$': typeof ViewDocsSplatRoute '/_view/download/apple-intel': typeof ViewDownloadAppleIntelRoute '/_view/download/apple-silicon': typeof ViewDownloadAppleSiliconRoute @@ -640,6 +679,7 @@ export interface FileRoutesById { '/_view/app/': typeof ViewAppIndexRoute '/_view/blog/': typeof ViewBlogIndexRoute '/_view/changelog/': typeof ViewChangelogIndexRoute + '/_view/company-handbook/': typeof ViewCompanyHandbookIndexRoute '/_view/docs/': typeof ViewDocsIndexRoute '/_view/download/': typeof ViewDownloadIndexRoute '/_view/legal/': typeof ViewLegalIndexRoute @@ -659,12 +699,14 @@ export interface FileRouteTypes { | '/x' | '/youtube' | '/app' + | '/company-handbook' | '/docs' | '/about' | '/brand' | '/enterprise' | '/faq' | '/file-transcription' + | '/free' | '/press-kit' | '/pricing' | '/security' @@ -679,6 +721,7 @@ export interface FileRouteTypes { | '/blog/$slug' | '/callback/auth' | '/changelog/$slug' + | '/company-handbook/$' | '/docs/$' | '/download/apple-intel' | '/download/apple-silicon' @@ -713,6 +756,7 @@ export interface FileRouteTypes { | '/app/' | '/blog' | '/changelog' + | '/company-handbook/' | '/docs/' | '/download' | '/legal' @@ -734,6 +778,7 @@ export interface FileRouteTypes { | '/enterprise' | '/faq' | '/file-transcription' + | '/free' | '/press-kit' | '/pricing' | '/security' @@ -748,6 +793,7 @@ export interface FileRouteTypes { | '/blog/$slug' | '/callback/auth' | '/changelog/$slug' + | '/company-handbook/$' | '/docs/$' | '/download/apple-intel' | '/download/apple-silicon' @@ -782,6 +828,7 @@ export interface FileRouteTypes { | '/app' | '/blog' | '/changelog' + | '/company-handbook' | '/docs' | '/download' | '/legal' @@ -800,12 +847,14 @@ export interface FileRouteTypes { | '/x' | '/youtube' | '/_view/app' + | '/_view/company-handbook' | '/_view/docs' | '/_view/about' | '/_view/brand' | '/_view/enterprise' | '/_view/faq' | '/_view/file-transcription' + | '/_view/free' | '/_view/press-kit' | '/_view/pricing' | '/_view/security' @@ -820,6 +869,7 @@ export interface FileRouteTypes { | '/_view/blog/$slug' | '/_view/callback/auth' | '/_view/changelog/$slug' + | '/_view/company-handbook/$' | '/_view/docs/$' | '/_view/download/apple-intel' | '/_view/download/apple-silicon' @@ -854,6 +904,7 @@ export interface FileRouteTypes { | '/_view/app/' | '/_view/blog/' | '/_view/changelog/' + | '/_view/company-handbook/' | '/_view/docs/' | '/_view/download/' | '/_view/legal/' @@ -1000,6 +1051,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewPressKitRouteImport parentRoute: typeof ViewRouteRoute } + '/_view/free': { + id: '/_view/free' + path: '/free' + fullPath: '/free' + preLoaderRoute: typeof ViewFreeRouteImport + parentRoute: typeof ViewRouteRoute + } '/_view/file-transcription': { id: '/_view/file-transcription' path: '/file-transcription' @@ -1042,6 +1100,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewDocsRouteRouteImport parentRoute: typeof ViewRouteRoute } + '/_view/company-handbook': { + id: '/_view/company-handbook' + path: '/company-handbook' + fullPath: '/company-handbook' + preLoaderRoute: typeof ViewCompanyHandbookRouteRouteImport + parentRoute: typeof ViewRouteRoute + } '/_view/app': { id: '/_view/app' path: '/app' @@ -1049,11 +1114,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewAppRouteRouteImport parentRoute: typeof ViewRouteRoute } - '/_view/roadmap/': { - id: '/_view/roadmap/' - path: '/roadmap' - fullPath: '/roadmap' - preLoaderRoute: typeof ViewRoadmapIndexRouteImport '/_view/templates/': { id: '/_view/templates/' path: '/templates' @@ -1061,6 +1121,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewTemplatesIndexRouteImport parentRoute: typeof ViewRouteRoute } + '/_view/roadmap/': { + id: '/_view/roadmap/' + path: '/roadmap' + fullPath: '/roadmap' + preLoaderRoute: typeof ViewRoadmapIndexRouteImport + parentRoute: typeof ViewRouteRoute + } '/_view/legal/': { id: '/_view/legal/' path: '/legal' @@ -1082,6 +1149,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewDocsIndexRouteImport parentRoute: typeof ViewDocsRouteRoute } + '/_view/company-handbook/': { + id: '/_view/company-handbook/' + path: '/' + fullPath: '/company-handbook/' + preLoaderRoute: typeof ViewCompanyHandbookIndexRouteImport + parentRoute: typeof ViewCompanyHandbookRouteRoute + } '/_view/changelog/': { id: '/_view/changelog/' path: '/changelog' @@ -1320,6 +1394,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ViewDocsSplatRouteImport parentRoute: typeof ViewDocsRouteRoute } + '/_view/company-handbook/$': { + id: '/_view/company-handbook/$' + path: '/$' + fullPath: '/company-handbook/$' + preLoaderRoute: typeof ViewCompanyHandbookSplatRouteImport + parentRoute: typeof ViewCompanyHandbookRouteRoute + } '/_view/changelog/$slug': { id: '/_view/changelog/$slug' path: '/changelog/$slug' @@ -1392,6 +1473,22 @@ const ViewAppRouteRouteWithChildren = ViewAppRouteRoute._addFileChildren( ViewAppRouteRouteChildren, ) +interface ViewCompanyHandbookRouteRouteChildren { + ViewCompanyHandbookSplatRoute: typeof ViewCompanyHandbookSplatRoute + ViewCompanyHandbookIndexRoute: typeof ViewCompanyHandbookIndexRoute +} + +const ViewCompanyHandbookRouteRouteChildren: ViewCompanyHandbookRouteRouteChildren = + { + ViewCompanyHandbookSplatRoute: ViewCompanyHandbookSplatRoute, + ViewCompanyHandbookIndexRoute: ViewCompanyHandbookIndexRoute, + } + +const ViewCompanyHandbookRouteRouteWithChildren = + ViewCompanyHandbookRouteRoute._addFileChildren( + ViewCompanyHandbookRouteRouteChildren, + ) + interface ViewDocsRouteRouteChildren { ViewDocsSplatRoute: typeof ViewDocsSplatRoute ViewDocsIndexRoute: typeof ViewDocsIndexRoute @@ -1420,12 +1517,14 @@ const ViewPressKitRouteWithChildren = ViewPressKitRoute._addFileChildren( interface ViewRouteRouteChildren { ViewAppRouteRoute: typeof ViewAppRouteRouteWithChildren + ViewCompanyHandbookRouteRoute: typeof ViewCompanyHandbookRouteRouteWithChildren ViewDocsRouteRoute: typeof ViewDocsRouteRouteWithChildren ViewAboutRoute: typeof ViewAboutRoute ViewBrandRoute: typeof ViewBrandRoute ViewEnterpriseRoute: typeof ViewEnterpriseRoute ViewFaqRoute: typeof ViewFaqRoute ViewFileTranscriptionRoute: typeof ViewFileTranscriptionRoute + ViewFreeRoute: typeof ViewFreeRoute ViewPressKitRoute: typeof ViewPressKitRouteWithChildren ViewPricingRoute: typeof ViewPricingRoute ViewSecurityRoute: typeof ViewSecurityRoute @@ -1470,12 +1569,14 @@ interface ViewRouteRouteChildren { const ViewRouteRouteChildren: ViewRouteRouteChildren = { ViewAppRouteRoute: ViewAppRouteRouteWithChildren, + ViewCompanyHandbookRouteRoute: ViewCompanyHandbookRouteRouteWithChildren, ViewDocsRouteRoute: ViewDocsRouteRouteWithChildren, ViewAboutRoute: ViewAboutRoute, ViewBrandRoute: ViewBrandRoute, ViewEnterpriseRoute: ViewEnterpriseRoute, ViewFaqRoute: ViewFaqRoute, ViewFileTranscriptionRoute: ViewFileTranscriptionRoute, + ViewFreeRoute: ViewFreeRoute, ViewPressKitRoute: ViewPressKitRouteWithChildren, ViewPricingRoute: ViewPricingRoute, ViewSecurityRoute: ViewSecurityRoute, diff --git a/apps/web/src/routes/_view/company-handbook/$.tsx b/apps/web/src/routes/_view/company-handbook/$.tsx new file mode 100644 index 0000000000..44fdd88e9a --- /dev/null +++ b/apps/web/src/routes/_view/company-handbook/$.tsx @@ -0,0 +1,67 @@ +import { createFileRoute, redirect } from "@tanstack/react-router"; +import { allHandbooks } from "content-collections"; + +import { HandbookLayout } from "./-components"; +import { handbookStructure } from "./structure"; + +export const Route = createFileRoute("/_view/company-handbook/$")({ + component: Component, + beforeLoad: ({ params }) => { + const splat = params._splat || ""; + const normalizedSplat = splat.replace(/\/$/, ""); + + if (handbookStructure.defaultPages[normalizedSplat]) { + throw redirect({ + to: "/company-handbook/$", + params: { _splat: handbookStructure.defaultPages[normalizedSplat] }, + }); + } + + let doc = allHandbooks.find((doc) => doc.slug === normalizedSplat); + if (!doc) { + doc = allHandbooks.find((doc) => doc.slug === `${normalizedSplat}/index`); + } + + if (!doc) { + if (normalizedSplat === "about/what-hyprnote-is") { + return; + } + throw redirect({ + to: "/company-handbook/$", + params: { _splat: "about/what-hyprnote-is" }, + }); + } + }, + loader: async ({ params }) => { + const splat = params._splat || ""; + const normalizedSplat = splat.replace(/\/$/, ""); + + let doc = allHandbooks.find((doc) => doc.slug === normalizedSplat); + if (!doc) { + doc = allHandbooks.find((doc) => doc.slug === `${normalizedSplat}/index`); + } + + return { doc: doc! }; + }, + head: ({ loaderData }) => { + const { doc } = loaderData!; + const url = `https://hyprnote.com/company-handbook/${doc.slug}`; + + return { + meta: [ + { title: `${doc.title} - Company Handbook - Hyprnote` }, + { name: "description", content: doc.summary || doc.title }, + { property: "og:title", content: `${doc.title} - Company Handbook` }, + { property: "og:description", content: doc.summary || doc.title }, + { property: "og:type", content: "article" }, + { property: "og:url", content: url }, + ], + }; + }, +}); + +function Component() { + const { doc } = Route.useLoaderData(); + + return ; +} diff --git a/apps/web/src/routes/_view/company-handbook/-components.tsx b/apps/web/src/routes/_view/company-handbook/-components.tsx new file mode 100644 index 0000000000..9892017826 --- /dev/null +++ b/apps/web/src/routes/_view/company-handbook/-components.tsx @@ -0,0 +1,238 @@ +import { MDXContent } from "@content-collections/mdx/react"; +import { Link } from "@tanstack/react-router"; +import { allHandbooks } from "content-collections"; + +import { + Accordion, + Card, + Columns, + Info, + Note, + Step, + Steps, + Tip, +} from "@hypr/ui/docs"; +import { cn } from "@hypr/utils"; + +export function HandbookLayout({ + doc, + showSectionTitle = true, +}: { + doc: any; + showSectionTitle?: boolean; +}) { + return ( + <> +
+ + + +
+ + + + ); +} + +function ArticleHeader({ + doc, + showSectionTitle, +}: { + doc: any; + showSectionTitle: boolean; +}) { + const sectionTitle = + allHandbooks.find((d) => d.sectionFolder === doc.sectionFolder && d.isIndex) + ?.title || + doc.sectionFolder + .split("-") + .map((word: string) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" "); + + return ( +
+ {showSectionTitle && ( +
+ {sectionTitle} +
+ )} +

+ {doc.title} +

+ {doc.summary && ( +

+ {doc.summary} +

+ )} + + {(doc.author || doc.created) && ( +
+ {doc.author && {doc.author}} + {doc.author && doc.created && ·} + {doc.created && ( + + )} + {doc.updated && doc.updated !== doc.created && ( + <> + · + + Updated{" "} + {new Date(doc.updated).toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + })} + + + )} +
+ )} +
+ ); +} + +function ArticleContent({ doc }: { doc: any }) { + return ( +
+ +
+ ); +} + +function ArticleFooter() { + const currentYear = new Date().getFullYear(); + + return ( + + ); +} + +function RightSidebar({ + toc, +}: { + toc: Array<{ id: string; text: string; level: number }>; +}) { + return ( + + ); +} diff --git a/apps/web/src/routes/_view/company-handbook/index.tsx b/apps/web/src/routes/_view/company-handbook/index.tsx new file mode 100644 index 0000000000..da0ac586db --- /dev/null +++ b/apps/web/src/routes/_view/company-handbook/index.tsx @@ -0,0 +1,10 @@ +import { createFileRoute, redirect } from "@tanstack/react-router"; + +export const Route = createFileRoute("/_view/company-handbook/")({ + beforeLoad: () => { + throw redirect({ + to: "/company-handbook/$", + params: { _splat: "about/what-hyprnote-is" }, + }); + }, +}); diff --git a/apps/web/src/routes/_view/company-handbook/route.tsx b/apps/web/src/routes/_view/company-handbook/route.tsx new file mode 100644 index 0000000000..f416d94360 --- /dev/null +++ b/apps/web/src/routes/_view/company-handbook/route.tsx @@ -0,0 +1,106 @@ +import { + createFileRoute, + Link, + Outlet, + useMatchRoute, +} from "@tanstack/react-router"; +import { allHandbooks } from "content-collections"; +import { useMemo } from "react"; + +import { handbookStructure } from "./structure"; + +export const Route = createFileRoute("/_view/company-handbook")({ + component: Component, +}); + +function Component() { + return ( +
+
+
+ + +
+
+
+ ); +} + +function LeftSidebar() { + const matchRoute = useMatchRoute(); + const match = matchRoute({ to: "/company-handbook/$", fuzzy: true }); + + const currentSlug = ( + match && typeof match !== "boolean" ? match._splat : undefined + ) as string | undefined; + + const handbooksBySection = useMemo(() => { + const sectionGroups: Record< + string, + { title: string; docs: (typeof allHandbooks)[0][] } + > = {}; + + allHandbooks.forEach((doc) => { + if (doc.slug === "index" || doc.isIndex) { + return; + } + + const sectionName = doc.section; + + if (!sectionGroups[sectionName]) { + sectionGroups[sectionName] = { + title: sectionName, + docs: [], + }; + } + + sectionGroups[sectionName].docs.push(doc); + }); + + Object.keys(sectionGroups).forEach((sectionName) => { + sectionGroups[sectionName].docs.sort((a, b) => a.order - b.order); + }); + + const sections = handbookStructure.sections + .map((sectionId) => { + const sectionName = + sectionId.charAt(0).toUpperCase() + sectionId.slice(1); + return sectionGroups[sectionName]; + }) + .filter(Boolean); + + return { sections }; + }, []); + + return ( + + ); +} diff --git a/apps/web/src/routes/_view/company-handbook/structure.ts b/apps/web/src/routes/_view/company-handbook/structure.ts new file mode 100644 index 0000000000..75fcd8c1c9 --- /dev/null +++ b/apps/web/src/routes/_view/company-handbook/structure.ts @@ -0,0 +1,16 @@ +export const handbookStructure = { + sections: [ + "about", + "how-we-work", + "who-we-want", + "go-to-market", + "communication", + ], + defaultPages: { + about: "about/what-hyprnote-is", + "how-we-work": "how-we-work/work-styles", + "who-we-want": "who-we-want/core-traits", + "go-to-market": "go-to-market/customers", + communication: "communication/why-this-matters", + } as Record, +}; diff --git a/apps/web/src/routes/_view/free.tsx b/apps/web/src/routes/_view/free.tsx new file mode 100644 index 0000000000..057ab75e1f --- /dev/null +++ b/apps/web/src/routes/_view/free.tsx @@ -0,0 +1,440 @@ +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; + +export const Route = createFileRoute("/_view/free")({ + component: Component, + head: () => ({ + meta: [ + { title: "Free AI Meeting Notes - Hyprnote" }, + { + name: "description", + content: + "Get powerful AI meeting notes completely free. Record meetings, transcribe audio, generate summaries, and more. No credit card required. Local AI processing for complete privacy.", + }, + { property: "og:title", content: "Free AI Meeting Notes - Hyprnote" }, + { + property: "og:description", + content: + "Hyprnote offers free AI-powered meeting transcription and notes. Local processing, unlimited recordings, and no usage limits. Download now.", + }, + { property: "og:type", content: "website" }, + { property: "og:url", content: "https://hyprnote.com/free" }, + ], + }), +}); + +const freeFeatures = [ + { + icon: "mdi:microphone", + title: "Unlimited Recording", + description: + "Record as many meetings as you want with no time limits or restrictions. Your meetings, your data.", + }, + { + icon: "mdi:text-recognition", + title: "AI Transcription", + description: + "Get accurate transcriptions powered by local Whisper models. Works offline with no cloud uploads.", + }, + { + icon: "mdi:file-document-edit", + title: "Smart Summaries", + description: + "Generate intelligent meeting summaries with action items, decisions, and key points automatically.", + }, + { + icon: "mdi:calendar-sync", + title: "Calendar Integration", + description: + "Connect Apple Calendar, Google Calendar, or Outlook to automatically organize your meeting notes.", + }, + { + icon: "mdi:shield-lock", + title: "Complete Privacy", + description: + "All processing happens locally on your device. Your conversations never leave your computer.", + }, + { + icon: "mdi:cloud-off", + title: "Works Offline", + description: + "No internet required for core features. Record, transcribe, and summarize without connectivity.", + }, +]; + +const comparisonFeatures = [ + { feature: "Meeting recording", hyprnote: true, others: "Limited" }, + { feature: "AI transcription", hyprnote: true, others: "Paid" }, + { feature: "Meeting summaries", hyprnote: true, others: "Paid" }, + { feature: "Local AI processing", hyprnote: true, others: false }, + { feature: "Offline support", hyprnote: true, others: false }, + { feature: "Calendar integration", hyprnote: true, others: "Limited" }, + { feature: "Custom templates", hyprnote: true, others: "Paid" }, + { feature: "No usage limits", hyprnote: true, others: false }, + { feature: "Open source", hyprnote: true, others: false }, + { feature: "Self-hosting option", hyprnote: true, others: false }, +]; + +const useCases = [ + { + icon: "mdi:briefcase", + title: "Sales Calls", + description: + "Never miss a detail from prospect conversations. Get automatic summaries with next steps and objections.", + }, + { + icon: "mdi:school", + title: "Lectures & Classes", + description: + "Record lectures and get organized notes. Perfect for students who want to focus on learning.", + }, + { + icon: "mdi:account-group", + title: "Team Meetings", + description: + "Keep everyone aligned with shared meeting notes. Track decisions and action items automatically.", + }, + { + icon: "mdi:lightbulb", + title: "Brainstorming", + description: + "Capture every idea during creative sessions. Let AI organize and categorize your thoughts.", + }, + { + icon: "mdi:phone", + title: "Client Calls", + description: + "Document client requirements and feedback accurately. Build better relationships with detailed records.", + }, + { + icon: "mdi:medical-bag", + title: "Healthcare", + description: + "HIPAA-ready with local processing. Perfect for patient consultations and medical documentation.", + }, +]; + +function Component() { + return ( +
+
+ + + + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+ + 100% Free Forever +
+

+ AI meeting notes +
+ without the price tag +

+

+ Record meetings, get AI transcriptions, and generate smart summaries. + All for free, with no usage limits and complete privacy. +

+
+ + + Download Free + + + See Features + +
+

+ No credit card required. No account needed to start. +

+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+
+

+ Everything you need, free +

+

+ No hidden costs, no premium tiers for essential features +

+
+
+ {freeFeatures.map((feature) => ( +
+ +

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function ComparisonSection() { + return ( +
+
+
+

+ More value than paid alternatives +

+

+ See how Hyprnote compares to other meeting note tools +

+
+
+
+
Feature
+
+ Hyprnote + + Free + +
+
+ Others +
+
+ {comparisonFeatures.map((row, index) => ( +
+
{row.feature}
+
+ {row.hyprnote === true ? ( + + ) : ( + + {row.hyprnote} + + )} +
+
+ {row.others === true ? ( + + ) : row.others === false ? ( + + ) : ( + {row.others} + )} +
+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+
+

+ Built for every conversation +

+

+ From sales calls to lectures, Hyprnote adapts to your needs +

+
+
+ {useCases.map((useCase) => ( +
+ +

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function OpenSourceSection() { + return ( +
+
+
+
+
+ + Open Source +
+

+ Transparent by design +

+

+ Hyprnote is fully open source. Inspect the code, contribute + improvements, or self-host on your own infrastructure. No vendor + lock-in, no hidden data collection. +

+
+ + + View on GitHub + + + Self-hosting Guide + +
+
+
+
+
+ 100% +
+
Open Source
+
+
+
0
+
Data Collection
+
+
+
+ Local +
+
AI Processing
+
+
+
+ Free +
+
Forever
+
+
+
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to try Hyprnote? +

+

+ Download now and start capturing better meeting notes in minutes. No + signup required. +

+ + + Download for Free + +
+ + + macOS + + + + Linux + + + + Windows (coming soon) + +
+
+
+ ); +} diff --git a/apps/web/src/routes/_view/product/local-ai.tsx b/apps/web/src/routes/_view/product/local-ai.tsx index 7645812b85..8d1067bacf 100644 --- a/apps/web/src/routes/_view/product/local-ai.tsx +++ b/apps/web/src/routes/_view/product/local-ai.tsx @@ -11,7 +11,18 @@ export const Route = createFileRoute("/_view/product/local-ai")({ { name: "description", content: - "Powerful AI processing that runs entirely on your device. Private, fast, and offline-capable with local AI models.", + "Powerful AI processing that runs entirely on your device. Private, fast, and offline-capable meeting transcription and summarization with local Whisper and LLM models.", + }, + { property: "og:title", content: "Local AI - Hyprnote" }, + { + property: "og:description", + content: + "AI-powered meeting notes without cloud uploads. Local transcription with Whisper, on-device summarization, and complete privacy. Works offline with no usage limits.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/product/local-ai", }, ], }), diff --git a/apps/web/src/routes/_view/product/self-hosting.tsx b/apps/web/src/routes/_view/product/self-hosting.tsx index e3727d81ea..dbe31303ce 100644 --- a/apps/web/src/routes/_view/product/self-hosting.tsx +++ b/apps/web/src/routes/_view/product/self-hosting.tsx @@ -1,4 +1,5 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; import { cn } from "@hypr/utils"; @@ -10,7 +11,18 @@ export const Route = createFileRoute("/_view/product/self-hosting")({ { name: "description", content: - "Deploy Hyprnote on your own infrastructure. Complete control, maximum security, and full data sovereignty.", + "Deploy Hyprnote on your own infrastructure. Complete control over your meeting data with on-premises deployment, air-gapped environments, and full data sovereignty.", + }, + { property: "og:title", content: "Self-Hosting - Hyprnote" }, + { + property: "og:description", + content: + "Run Hyprnote entirely on your own servers. Enterprise-grade meeting transcription with complete infrastructure control, compliance-ready deployment, and zero external dependencies.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/product/self-hosting", }, ], }), @@ -19,32 +31,475 @@ export const Route = createFileRoute("/_view/product/self-hosting")({ function Component() { return (
-
-
-
-

- Self-Hosting +
+
+
+

+ Run Hyprnote on +
+ your infrastructure

-

- Deploy Hyprnote on your own infrastructure for complete control, - maximum security, and full data sovereignty. +

+ Deploy Hyprnote entirely on your own servers. Complete control + over your meeting data with on-premises deployment, air-gapped + environments, and full data sovereignty. +

+
+ +
+

+ Why self-host +

+
+
+ +

+ Complete data sovereignty +

+

+ Your meeting recordings, transcripts, and AI-generated + summaries stay within your network perimeter. No data ever + leaves your infrastructure. +

+
+
+ +

+ Compliance ready +

+

+ Meet HIPAA, GDPR, SOC 2, and other regulatory requirements + with on-premises deployment. Simplify audits with complete + infrastructure control. +

+
+
+ +

+ Air-gapped deployment +

+

+ Run Hyprnote in completely isolated environments with zero + internet connectivity. Perfect for defense, government, and + high-security organizations. +

+
+
+ +

+ Full customization +

+

+ Modify any component to fit your workflow. Integrate with + internal systems, customize AI models, and adapt the interface + to your needs. +

+
+
+
+ +
+

+ Self-hosted vs. Cloud +

+
+
+
+ +

+ Cloud-hosted Solutions +

+
+
    +
  • + + Data stored on vendor servers +
  • +
  • + + Limited compliance control +
  • +
  • + + Vendor lock-in risks +
  • +
  • + + Internet dependency +
  • +
  • + + Third-party data access risks +
  • +
  • + + Limited customization options +
  • +
+
+
+
+ +

+ Hyprnote Self-hosted +

+
+
    +
  • + + Data stays on your servers +
  • +
  • + + Full compliance control +
  • +
  • + + No vendor dependencies +
  • +
  • + + Works completely offline +
  • +
  • + + Zero external data access +
  • +
  • + + Fully customizable codebase +
  • +
+
+
+
+ +
+

+ Deployment options +

+
+
+ +

+ Docker containers +

+

+ Deploy with Docker Compose for quick setup. Ideal for teams + wanting containerized infrastructure. +

+
+
+ +

Kubernetes

+

+ Scale across clusters with Helm charts. Built for enterprise + orchestration and high availability. +

+
+
+ +

Bare metal

+

+ Install directly on your servers for maximum performance and + complete hardware control. +

+
+
+ +

+ Private cloud +

+

+ Deploy on AWS, GCP, or Azure within your VPC. Your cloud, your + rules, your data. +

+
+
+ +

Air-gapped

+

+ Fully isolated deployment with no network connectivity. All + dependencies bundled offline. +

+
+
+ +

On-premises

+

+ Run in your own data center with dedicated hardware. Maximum + security and performance. +

+
+
+
+ +
+

+ What you can self-host +

+
+
+
+ +
+

+ Transcription server +

+

+ Run Whisper models on your own GPU servers. Process + unlimited audio without external API calls. Supports + multiple model sizes from tiny to large-turbo. +

+
+
+
+
+
+ +
+

+ LLM inference +

+

+ Deploy HyperLLM or bring your own models. Run + summarization, extraction, and analysis entirely within + your network. Compatible with Ollama and vLLM. +

+
+
+
+
+
+ +
+

+ Data storage +

+

+ Store all meeting data in your own database. SQLite for + single-node, PostgreSQL for distributed deployments. Full + backup and migration control. +

+
+
+
+
+
+ +
+

+ Built for enterprise +

+
+
+ +
+

+ HIPAA & SOC 2 ready +

+

+ Self-hosting simplifies compliance by keeping all data + within your controlled environment. No third-party + processors to audit. +

+
+
+
+ +
+

+ SSO & LDAP integration +

+

+ Connect to your existing identity provider. Support for + SAML, OIDC, and Active Directory out of the box. +

+
+
+
+ +
+

+ Usage analytics +

+

+ Monitor adoption and usage across your organization with + built-in analytics. All data stays internal. +

+
+
+
+ +
+

+ Dedicated support +

+

+ Enterprise customers get priority support, deployment + assistance, and custom development options. +

+
+
+
+
+ +
+

+ Open source foundation +

+
+
+ +
+

+ Fully auditable codebase +

+

+ Hyprnote is open source under GPL-3.0. Inspect every line of + code, verify security practices, and customize to your + needs. No black boxes, no hidden data collection. +

+ + + View on GitHub + + +
+
+
+
+ +
+

+ Ready to self-host? +

+

+ Get enterprise-grade meeting transcription on your own + infrastructure. Contact us for deployment assistance and custom + solutions.

-
- + Learn about Local AI +
-
+

diff --git a/apps/web/src/routes/_view/solution/customer-success.tsx b/apps/web/src/routes/_view/solution/customer-success.tsx index b13c49e01e..0907949e5b 100644 --- a/apps/web/src/routes/_view/solution/customer-success.tsx +++ b/apps/web/src/routes/_view/solution/customer-success.tsx @@ -1,9 +1,243 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/customer-success")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Customer Success - Hyprnote" }, + { + name: "description", + content: + "Capture every customer conversation with AI-powered meeting notes. Track health signals, document feedback, and drive retention with Hyprnote.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Customer Success - Hyprnote", + }, + { + property: "og:description", + content: + "Never miss customer insights. AI-powered meeting notes capture feedback, track health signals, and help you drive customer retention.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/solution/customer-success", + }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/customer-success"!
; +const features = [ + { + icon: "mdi:heart-pulse", + title: "Track Health Signals", + description: + "AI identifies customer sentiment, concerns, and satisfaction indicators from every conversation.", + }, + { + icon: "mdi:message-text", + title: "Capture Feedback", + description: + "Document feature requests, pain points, and product feedback to share with your product team.", + }, + { + icon: "mdi:clipboard-check", + title: "Action Items", + description: + "Automatically extract commitments, follow-ups, and action items from customer meetings.", + }, + { + icon: "mdi:chart-line", + title: "Renewal Preparation", + description: + "Build comprehensive account histories to prepare for renewal conversations and expansion opportunities.", + }, + { + icon: "mdi:share-variant", + title: "Team Handoffs", + description: + "Share detailed meeting notes for smooth handoffs between CSMs and across account teams.", + }, + { + icon: "mdi:shield-lock", + title: "Customer Privacy", + description: + "Local AI processing keeps sensitive customer conversations secure. Control what gets shared and stored.", + }, +]; + +const useCases = [ + { + title: "Onboarding Calls", + description: + "Document onboarding sessions, training discussions, and implementation meetings for successful customer launches.", + }, + { + title: "QBRs & Business Reviews", + description: + "Capture quarterly business reviews, success metrics discussions, and strategic planning sessions.", + }, + { + title: "Support Escalations", + description: + "Record escalation calls and resolution discussions. Build comprehensive case histories for complex issues.", + }, + { + title: "Renewal Conversations", + description: + "Document renewal discussions, contract negotiations, and expansion conversations with complete accuracy.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Customer Success +
+

+ Drive retention with +
+ AI-powered meeting notes +

+

+ Focus on your customers, not your notepad. Hyprnote captures every + conversation detail so you can drive success and retention. +

+
+ + Download for free + + + See how it works + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for customer success +

+

+ Every feature designed to help you understand and retain your + customers. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every customer interaction +

+

+ From onboarding to renewal, capture what matters at every touchpoint. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to improve customer retention? +

+

+ Join customer success teams who are driving retention with AI-powered + meeting notes. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/field-engineering.tsx b/apps/web/src/routes/_view/solution/field-engineering.tsx index 807ccc2160..a1bc1bddcc 100644 --- a/apps/web/src/routes/_view/solution/field-engineering.tsx +++ b/apps/web/src/routes/_view/solution/field-engineering.tsx @@ -1,9 +1,242 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/field-engineering")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Field Engineering - Hyprnote" }, + { + name: "description", + content: + "Capture technical discussions and customer meetings on the go with AI-powered meeting notes. Document implementations, troubleshooting, and field visits with Hyprnote.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Field Engineering - Hyprnote", + }, + { + property: "og:description", + content: + "Never miss technical details. AI-powered meeting notes capture implementations, troubleshooting sessions, and customer discussions for field engineers.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/solution/field-engineering", + }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/field-engineering"!
; +const features = [ + { + icon: "mdi:wrench", + title: "Technical Documentation", + description: + "Capture implementation details, configuration discussions, and technical decisions during customer visits.", + }, + { + icon: "mdi:bug", + title: "Troubleshooting Records", + description: + "Document debugging sessions, root cause analyses, and resolution steps for future reference.", + }, + { + icon: "mdi:account-hard-hat", + title: "On-Site Meetings", + description: + "Record customer meetings, site assessments, and technical reviews even in challenging environments.", + }, + { + icon: "mdi:share-variant", + title: "Knowledge Sharing", + description: + "Share detailed technical notes with your team. Build a knowledge base from field experiences.", + }, + { + icon: "mdi:wifi-off", + title: "Offline Capable", + description: + "Local AI processing works without internet. Capture meetings anywhere, sync when connected.", + }, + { + icon: "mdi:shield-lock", + title: "Customer Privacy", + description: + "Local processing keeps sensitive customer infrastructure details secure on your device.", + }, +]; + +const useCases = [ + { + title: "Implementation Meetings", + description: + "Document deployment discussions, configuration decisions, and integration requirements during customer implementations.", + }, + { + title: "Technical Support Calls", + description: + "Capture troubleshooting sessions, diagnostic findings, and resolution steps for complex technical issues.", + }, + { + title: "Site Assessments", + description: + "Record site survey findings, infrastructure evaluations, and technical recommendations for customers.", + }, + { + title: "Training Sessions", + description: + "Document customer training sessions, Q&A discussions, and follow-up action items.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Field Engineering +
+

+ Capture technical details +
+ anywhere you work +

+

+ From customer sites to remote locations, Hyprnote captures your + technical discussions with AI that works offline. +

+
+ + Download for free + + + Learn about local AI + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for field engineers +

+

+ Every feature designed for technical work in the field. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every field engagement +

+

+ From implementations to support calls, capture what matters most. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to improve field documentation? +

+

+ Join field engineers who are capturing every technical detail with + AI-powered meeting notes. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/government.tsx b/apps/web/src/routes/_view/solution/government.tsx index 857d7a3724..cfb61cd9e7 100644 --- a/apps/web/src/routes/_view/solution/government.tsx +++ b/apps/web/src/routes/_view/solution/government.tsx @@ -1,9 +1,244 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/government")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Government - Hyprnote" }, + { + name: "description", + content: + "Secure AI meeting notes for government agencies. Capture public meetings, inter-agency coordination, and policy discussions with privacy-first local AI processing.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Government - Hyprnote", + }, + { + property: "og:description", + content: + "Secure, compliant AI notetaking for government. Local processing keeps sensitive discussions protected while improving meeting documentation.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/solution/government", + }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/government"!
; +const features = [ + { + icon: "mdi:shield-check", + title: "Security First", + description: + "Local AI processing keeps sensitive government discussions on your secure infrastructure. No data leaves your network.", + }, + { + icon: "mdi:file-document-check", + title: "Compliance Ready", + description: + "Self-hosting options support FedRAMP, FISMA, and other government compliance requirements.", + }, + { + icon: "mdi:account-multiple", + title: "Public Meeting Records", + description: + "Create accurate records of public meetings, hearings, and community sessions for transparency.", + }, + { + icon: "mdi:handshake", + title: "Inter-Agency Coordination", + description: + "Document cross-agency meetings, task force discussions, and collaborative initiatives.", + }, + { + icon: "mdi:magnify", + title: "Searchable Archives", + description: + "Find specific discussions, decisions, or action items across all your meeting records instantly.", + }, + { + icon: "mdi:server-security", + title: "Self-Hosting Available", + description: + "Deploy on government infrastructure for complete control over data residency and security.", + }, +]; + +const useCases = [ + { + title: "Public Meetings", + description: + "Create accurate transcripts of town halls, council meetings, and public hearings for transparency and record-keeping.", + }, + { + title: "Policy Discussions", + description: + "Document internal policy meetings, strategy sessions, and planning discussions with comprehensive notes.", + }, + { + title: "Inter-Agency Coordination", + description: + "Capture cross-agency meetings, joint task forces, and collaborative initiatives with all stakeholders.", + }, + { + title: "Constituent Services", + description: + "Record constituent meetings and service discussions to ensure follow-through and accountability.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Government +
+

+ Secure AI notes for +
+ government agencies +

+

+ Capture public meetings and policy discussions with AI that + processes everything locally. Your sensitive data stays on your + secure infrastructure. +

+
+ + Download for free + + + Learn about self-hosting + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for government security +

+

+ Every feature designed with government security and compliance + requirements in mind. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every government meeting +

+

+ From public hearings to internal planning, capture what matters most. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to improve government documentation? +

+

+ Join government agencies who are improving meeting documentation while + maintaining security. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/healthcare.tsx b/apps/web/src/routes/_view/solution/healthcare.tsx index 8c5f39c9a2..30c56a8665 100644 --- a/apps/web/src/routes/_view/solution/healthcare.tsx +++ b/apps/web/src/routes/_view/solution/healthcare.tsx @@ -1,9 +1,245 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/healthcare")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Healthcare - Hyprnote" }, + { + name: "description", + content: + "HIPAA-ready AI meeting notes for healthcare professionals. Capture patient consultations, clinical meetings, and care coordination with privacy-first local AI processing.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Healthcare - Hyprnote", + }, + { + property: "og:description", + content: + "Privacy-first AI notetaking for healthcare. Local processing keeps patient data secure while capturing clinical discussions and care coordination meetings.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/solution/healthcare", + }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/healthcare"!
; +const features = [ + { + icon: "mdi:shield-check", + title: "Privacy-First Design", + description: + "Local AI processing keeps sensitive patient information on your device. No data leaves your system without your explicit consent.", + }, + { + icon: "mdi:microphone", + title: "Clinical Documentation", + description: + "Capture patient consultations, care team meetings, and clinical discussions with accurate transcription.", + }, + { + icon: "mdi:clipboard-pulse", + title: "Care Coordination", + description: + "Document handoffs, multidisciplinary team meetings, and care planning sessions with comprehensive notes.", + }, + { + icon: "mdi:account-group", + title: "Team Collaboration", + description: + "Share meeting summaries with care teams while maintaining appropriate access controls and privacy.", + }, + { + icon: "mdi:clock-outline", + title: "Time Savings", + description: + "Reduce documentation burden so clinicians can focus more time on patient care instead of paperwork.", + }, + { + icon: "mdi:server-security", + title: "Self-Hosting Option", + description: + "Deploy on your own infrastructure for complete control over data residency and compliance requirements.", + }, +]; + +const useCases = [ + { + title: "Patient Consultations", + description: + "Capture key discussion points, treatment plans, and follow-up actions from patient meetings without breaking eye contact.", + }, + { + title: "Care Team Meetings", + description: + "Document multidisciplinary rounds, case conferences, and care coordination discussions with all stakeholders.", + }, + { + title: "Administrative Meetings", + description: + "Track departmental meetings, quality improvement discussions, and operational planning sessions.", + }, + { + title: "Training & Education", + description: + "Record educational sessions, grand rounds, and training meetings for future reference and learning.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Healthcare +
+

+ Privacy-first AI notes +
+ for healthcare teams +

+

+ Capture clinical meetings and patient discussions with AI that + processes everything locally. Your patient data never leaves your + device. +

+
+ + Download for free + + + Learn about local AI + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for healthcare privacy +

+

+ Every feature designed with patient privacy and clinical workflows in + mind. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every clinical conversation +

+

+ From patient consultations to team meetings, capture what matters + most. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to streamline clinical documentation? +

+

+ Join healthcare teams who are saving time on documentation while + maintaining patient privacy. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/legal.tsx b/apps/web/src/routes/_view/solution/legal.tsx index 91c143c2fb..8fb2b40276 100644 --- a/apps/web/src/routes/_view/solution/legal.tsx +++ b/apps/web/src/routes/_view/solution/legal.tsx @@ -1,9 +1,241 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/legal")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Legal Teams - Hyprnote" }, + { + name: "description", + content: + "Confidential AI meeting notes for legal professionals. Capture client consultations, depositions, and case discussions with privacy-first local AI processing.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Legal Teams - Hyprnote", + }, + { + property: "og:description", + content: + "Attorney-client privilege protected. Local AI processing keeps confidential legal discussions secure while capturing every important detail.", + }, + { property: "og:type", content: "website" }, + { property: "og:url", content: "https://hyprnote.com/solution/legal" }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/legal"!
; +const features = [ + { + icon: "mdi:shield-lock", + title: "Confidentiality First", + description: + "Local AI processing ensures attorney-client privileged communications never leave your device or network.", + }, + { + icon: "mdi:microphone", + title: "Accurate Transcription", + description: + "Capture client meetings, depositions, and case discussions with precise transcription for your records.", + }, + { + icon: "mdi:file-document-outline", + title: "Case Documentation", + description: + "Build comprehensive case files with detailed meeting notes, action items, and key discussion points.", + }, + { + icon: "mdi:clock-outline", + title: "Billable Time Tracking", + description: + "Accurate meeting records help with time tracking and billing documentation for client matters.", + }, + { + icon: "mdi:magnify", + title: "Searchable Archives", + description: + "Find specific discussions, decisions, or commitments across all your case-related meetings instantly.", + }, + { + icon: "mdi:server-security", + title: "Self-Hosting Available", + description: + "Deploy on your firm's infrastructure for complete control over data residency and compliance.", + }, +]; + +const useCases = [ + { + title: "Client Consultations", + description: + "Capture initial consultations and ongoing client meetings with complete confidentiality and accuracy.", + }, + { + title: "Case Strategy Sessions", + description: + "Document internal case discussions, strategy planning, and team deliberations for comprehensive records.", + }, + { + title: "Witness Interviews", + description: + "Record and transcribe witness interviews with accurate documentation for case preparation.", + }, + { + title: "Partner & Team Meetings", + description: + "Track firm meetings, case assignments, and administrative discussions with detailed notes.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Legal Teams +
+

+ Confidential AI notes +
+ for legal professionals +

+

+ Capture every client meeting and case discussion with AI that + processes everything locally. Your privileged communications stay + protected. +

+
+ + Download for free + + + Learn about local AI + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for legal confidentiality +

+

+ Every feature designed with attorney-client privilege and legal + workflows in mind. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every legal conversation +

+

+ From client consultations to case strategy, capture what matters most. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to streamline legal documentation? +

+

+ Join legal teams who are saving time on documentation while + maintaining client confidentiality. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/media.tsx b/apps/web/src/routes/_view/solution/media.tsx index c1589a7f12..ec47d0a337 100644 --- a/apps/web/src/routes/_view/solution/media.tsx +++ b/apps/web/src/routes/_view/solution/media.tsx @@ -1,9 +1,240 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/media")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Media & Entertainment - Hyprnote" }, + { + name: "description", + content: + "Capture creative meetings, production calls, and editorial discussions with AI-powered meeting notes. Streamline content production workflows with Hyprnote.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Media & Entertainment - Hyprnote", + }, + { + property: "og:description", + content: + "Never miss creative ideas. AI-powered meeting notes capture brainstorms, production discussions, and editorial meetings for media teams.", + }, + { property: "og:type", content: "website" }, + { property: "og:url", content: "https://hyprnote.com/solution/media" }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/media"!
; +const features = [ + { + icon: "mdi:lightbulb-on", + title: "Capture Creative Ideas", + description: + "Record brainstorming sessions and creative meetings. Never lose brilliant ideas that come up in the moment.", + }, + { + icon: "mdi:movie-open", + title: "Production Coordination", + description: + "Document production meetings, scheduling discussions, and logistics planning with comprehensive notes.", + }, + { + icon: "mdi:pencil", + title: "Editorial Workflows", + description: + "Track editorial meetings, content reviews, and approval discussions with accurate transcription.", + }, + { + icon: "mdi:account-group", + title: "Team Collaboration", + description: + "Share meeting summaries with creative teams, producers, and stakeholders to keep everyone aligned.", + }, + { + icon: "mdi:magnify", + title: "Searchable Archives", + description: + "Find specific creative discussions, decisions, or feedback across all your project meetings instantly.", + }, + { + icon: "mdi:shield-lock", + title: "Protect Creative IP", + description: + "Local AI processing keeps sensitive creative content and unreleased projects secure on your device.", + }, +]; + +const useCases = [ + { + title: "Creative Brainstorms", + description: + "Capture every idea from creative sessions. Review and develop concepts that emerged during collaborative discussions.", + }, + { + title: "Production Meetings", + description: + "Document production schedules, resource allocation, and logistics discussions for smooth project execution.", + }, + { + title: "Client Reviews", + description: + "Record client feedback sessions and approval meetings. Track revisions and sign-offs accurately.", + }, + { + title: "Post-Production", + description: + "Capture editing notes, color correction discussions, and final review feedback for quality delivery.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Media & Entertainment +
+

+ Capture every creative idea +
+ with AI-powered notes +

+

+ From brainstorms to production calls, Hyprnote captures your + creative discussions so no brilliant idea gets lost. +

+
+ + Download for free + + + See how it works + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for creative teams +

+

+ Every feature designed to support creative workflows and content + production. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every production phase +

+

+ From concept to delivery, capture what matters at every stage. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to streamline your creative workflow? +

+

+ Join media teams who are capturing every creative idea with AI-powered + meeting notes. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/project-management.tsx b/apps/web/src/routes/_view/solution/project-management.tsx index c4dd1cecbe..d6afa873ad 100644 --- a/apps/web/src/routes/_view/solution/project-management.tsx +++ b/apps/web/src/routes/_view/solution/project-management.tsx @@ -1,9 +1,242 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/project-management")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Project Management - Hyprnote" }, + { + name: "description", + content: + "Capture every project meeting with AI-powered notes. Track decisions, action items, and stakeholder discussions. Keep projects on track with Hyprnote.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Project Management - Hyprnote", + }, + { + property: "og:description", + content: + "Never miss project decisions. AI-powered meeting notes capture action items, stakeholder feedback, and keep your projects on track.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/solution/project-management", + }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/project-management"!
; +const features = [ + { + icon: "mdi:clipboard-check", + title: "Action Item Tracking", + description: + "AI automatically extracts action items, owners, and deadlines from every project meeting.", + }, + { + icon: "mdi:account-group", + title: "Stakeholder Management", + description: + "Document stakeholder meetings, capture feedback, and track decisions across all project phases.", + }, + { + icon: "mdi:chart-gantt", + title: "Status Updates", + description: + "Generate meeting summaries for status reports. Keep stakeholders informed with accurate documentation.", + }, + { + icon: "mdi:alert-circle", + title: "Risk Documentation", + description: + "Capture risk discussions, mitigation plans, and issue resolutions from project meetings.", + }, + { + icon: "mdi:share-variant", + title: "Team Alignment", + description: + "Share meeting notes with project teams. Keep everyone aligned on decisions and next steps.", + }, + { + icon: "mdi:magnify", + title: "Searchable History", + description: + "Find past decisions, commitments, and discussions across all your project meetings instantly.", + }, +]; + +const useCases = [ + { + title: "Sprint Planning", + description: + "Capture sprint planning discussions, story refinements, and team commitments for agile projects.", + }, + { + title: "Stakeholder Reviews", + description: + "Document stakeholder feedback, approval decisions, and change requests from review meetings.", + }, + { + title: "Stand-ups & Check-ins", + description: + "Record daily stand-ups and team check-ins. Track blockers and progress across the project.", + }, + { + title: "Retrospectives", + description: + "Capture retrospective discussions, improvement ideas, and action items for continuous improvement.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Project Management +
+

+ Keep projects on track +
+ with AI-powered notes +

+

+ Focus on leading your projects, not taking notes. Hyprnote captures + every meeting detail so nothing falls through the cracks. +

+
+ + Download for free + + + See how it works + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for project managers +

+

+ Every feature designed to help you deliver projects successfully. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every project meeting +

+

+ From planning to retrospectives, capture what matters at every phase. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to improve project delivery? +

+

+ Join project managers who are keeping projects on track with + AI-powered meeting notes. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/recruiting.tsx b/apps/web/src/routes/_view/solution/recruiting.tsx index 97c4d7fc8d..8e149c183c 100644 --- a/apps/web/src/routes/_view/solution/recruiting.tsx +++ b/apps/web/src/routes/_view/solution/recruiting.tsx @@ -1,9 +1,242 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/recruiting")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Recruiting - Hyprnote" }, + { + name: "description", + content: + "Capture every candidate interview with AI-powered meeting notes. Get structured feedback, compare candidates objectively, and make better hiring decisions with Hyprnote.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Recruiting - Hyprnote", + }, + { + property: "og:description", + content: + "Never miss candidate insights. AI-powered interview notes capture responses, assess skills, and help you make data-driven hiring decisions.", + }, + { property: "og:type", content: "website" }, + { + property: "og:url", + content: "https://hyprnote.com/solution/recruiting", + }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/recruiting"!
; +const features = [ + { + icon: "mdi:account-search", + title: "Capture Every Response", + description: + "Record candidate interviews and get complete transcriptions. Never miss important answers or red flags.", + }, + { + icon: "mdi:clipboard-check", + title: "Structured Feedback", + description: + "AI extracts key competencies, skills mentioned, and cultural fit indicators from every interview.", + }, + { + icon: "mdi:scale-balance", + title: "Objective Comparison", + description: + "Compare candidates fairly with consistent documentation. Reduce bias with comprehensive interview records.", + }, + { + icon: "mdi:share-variant", + title: "Team Collaboration", + description: + "Share interview summaries with hiring managers and team members. Keep everyone aligned on candidate assessments.", + }, + { + icon: "mdi:clock-fast", + title: "Faster Decisions", + description: + "Review interview highlights quickly. Make hiring decisions faster with AI-generated summaries and key points.", + }, + { + icon: "mdi:shield-lock", + title: "Candidate Privacy", + description: + "Local AI processing keeps sensitive candidate information secure. Control what gets shared and stored.", + }, +]; + +const useCases = [ + { + title: "Phone Screens", + description: + "Capture initial screening calls efficiently. Identify qualified candidates quickly with AI-extracted highlights.", + }, + { + title: "Technical Interviews", + description: + "Document technical discussions, coding explanations, and problem-solving approaches for thorough evaluation.", + }, + { + title: "Panel Interviews", + description: + "Record multi-interviewer sessions and consolidate feedback from all participants in one place.", + }, + { + title: "Hiring Committee Reviews", + description: + "Share comprehensive interview documentation with hiring committees for informed decision-making.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Recruiting Teams +
+

+ Hire better with +
+ AI-powered interview notes +

+

+ Focus on the candidate, not your notepad. Hyprnote captures every + interview detail so you can make better hiring decisions. +

+
+ + Download for free + + + See how it works + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for recruiting excellence +

+

+ Every feature designed to help you find and hire the best talent. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every interview stage +

+

+ From first screen to final round, capture what matters at every step. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to transform your hiring process? +

+

+ Join recruiting teams who are making better hiring decisions with + AI-powered interview notes. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/solution/sales.tsx b/apps/web/src/routes/_view/solution/sales.tsx index 00cdbfe8de..0d7e991dcc 100644 --- a/apps/web/src/routes/_view/solution/sales.tsx +++ b/apps/web/src/routes/_view/solution/sales.tsx @@ -1,9 +1,242 @@ -import { createFileRoute } from "@tanstack/react-router"; +import { Icon } from "@iconify-icon/react"; +import { createFileRoute, Link } from "@tanstack/react-router"; + +import { cn } from "@hypr/utils"; export const Route = createFileRoute("/_view/solution/sales")({ - component: RouteComponent, + component: Component, + head: () => ({ + meta: [ + { title: "AI Meeting Notes for Sales Teams - Hyprnote" }, + { + name: "description", + content: + "Capture every sales call detail with AI-powered meeting notes. Get automatic transcriptions, deal insights, and CRM-ready summaries. Close more deals with Hyprnote.", + }, + { + property: "og:title", + content: "AI Meeting Notes for Sales Teams - Hyprnote", + }, + { + property: "og:description", + content: + "Never miss a sales opportunity. AI-powered meeting notes capture every detail, extract action items, and help you close deals faster.", + }, + { property: "og:type", content: "website" }, + { property: "og:url", content: "https://hyprnote.com/solution/sales" }, + ], + }), }); -function RouteComponent() { - return
Hello "/_view/solution/sales"!
; +const features = [ + { + icon: "mdi:microphone", + title: "Capture Every Detail", + description: + "Record sales calls and demos automatically. Never miss pricing discussions, objections, or buying signals.", + }, + { + icon: "mdi:text-box-check", + title: "Deal Intelligence", + description: + "AI extracts key deal information, competitor mentions, budget discussions, and decision-maker insights.", + }, + { + icon: "mdi:clipboard-list", + title: "Action Items & Follow-ups", + description: + "Automatically identify next steps, commitments, and follow-up tasks from every sales conversation.", + }, + { + icon: "mdi:chart-timeline-variant", + title: "Sales Coaching Insights", + description: + "Review call recordings to improve pitch delivery, objection handling, and closing techniques.", + }, + { + icon: "mdi:share-variant", + title: "Team Collaboration", + description: + "Share call summaries with your team. Keep everyone aligned on deal progress and customer needs.", + }, + { + icon: "mdi:shield-lock", + title: "Privacy-First", + description: + "Your sales conversations stay private. Local AI processing means sensitive deal data never leaves your device.", + }, +]; + +const useCases = [ + { + title: "Discovery Calls", + description: + "Capture prospect pain points, requirements, and buying criteria. Build comprehensive customer profiles from every conversation.", + }, + { + title: "Product Demos", + description: + "Focus on delivering great demos while AI captures questions, feature requests, and areas of interest.", + }, + { + title: "Negotiation Calls", + description: + "Track pricing discussions, contract terms, and stakeholder concerns. Never forget what was agreed upon.", + }, + { + title: "QBRs & Account Reviews", + description: + "Document customer feedback, renewal discussions, and expansion opportunities with detailed meeting notes.", + }, +]; + +function Component() { + return ( +
+
+ + + + +
+
+ ); +} + +function HeroSection() { + return ( +
+
+
+
+ + For Sales Teams +
+

+ Close more deals with +
+ AI-powered meeting notes +

+

+ Stop taking notes during sales calls. Focus on building + relationships while Hyprnote captures every detail, extracts + insights, and prepares your follow-ups. +

+
+ + Download for free + + + See how it works + +
+
+
+
+ ); +} + +function FeaturesSection() { + return ( +
+
+

+ Built for sales professionals +

+

+ Every feature designed to help you sell more effectively and close + deals faster. +

+
+ {features.map((feature) => ( +
+
+ +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ ); +} + +function UseCasesSection() { + return ( +
+
+

+ For every sales conversation +

+

+ From first touch to closed-won, Hyprnote helps you capture and act on + every interaction. +

+
+ {useCases.map((useCase) => ( +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ ))} +
+
+
+ ); +} + +function CTASection() { + return ( +
+
+

+ Ready to supercharge your sales? +

+

+ Join sales teams who are closing more deals with AI-powered meeting + notes. +

+ + Get started for free + +
+
+ ); } diff --git a/apps/web/src/routes/_view/templates/$slug.tsx b/apps/web/src/routes/_view/templates/$slug.tsx index 9acb336298..4bc94f33b1 100644 --- a/apps/web/src/routes/_view/templates/$slug.tsx +++ b/apps/web/src/routes/_view/templates/$slug.tsx @@ -22,17 +22,27 @@ export const Route = createFileRoute("/_view/templates/$slug")({ const { template } = loaderData!; const url = `https://hyprnote.com/templates/${template.slug}`; + const ogImageUrl = `https://hyprnote.com/og?type=templates&title=${encodeURIComponent(template.title)}&category=${encodeURIComponent(template.category)}${template.description ? `&description=${encodeURIComponent(template.description)}` : ""}`; + return { meta: [ - { title: `${template.title} Template - Hyprnote` }, + { title: `${template.title} - Meeting Template - Hyprnote` }, { name: "description", content: template.description }, - { property: "og:title", content: `${template.title} Template` }, + { + property: "og:title", + content: `${template.title} - Meeting Template`, + }, { property: "og:description", content: template.description }, - { property: "og:type", content: "website" }, + { property: "og:type", content: "article" }, { property: "og:url", content: url }, - { name: "twitter:card", content: "summary" }, - { name: "twitter:title", content: `${template.title} Template` }, + { property: "og:image", content: ogImageUrl }, + { name: "twitter:card", content: "summary_large_image" }, + { + name: "twitter:title", + content: `${template.title} - Meeting Template`, + }, { name: "twitter:description", content: template.description }, + { name: "twitter:image", content: ogImageUrl }, ], }; },