diff --git a/apps/web/AGENTS.md b/apps/web/AGENTS.md index 15d40858b3..5604e07df0 100644 --- a/apps/web/AGENTS.md +++ b/apps/web/AGENTS.md @@ -8,3 +8,70 @@ infisical export \ --projectId=87dad7b5-72a6-4791-9228-b3b86b169db1 \ --path="/web" ``` + +## Design System + +All visual tokens live in `src/styles.css` inside the `@theme` block. Never use hardcoded hex values in components — always reference a token. + +### Color tokens + +| Token | Value | Use for | +|---|---|---| +| `--color-page` | `#F2F3F4` | Page/canvas background (`bg-page`) | +| `--color-surface` | `#ffffff` | Card, panel, modal backgrounds (`bg-surface`) | +| `--color-surface-subtle` | `#fafaf9` | Muted surface variants (`bg-surface-subtle`) | +| `--color-fg` | `#1c1917` | Primary text (`text-fg`) | +| `--color-fg-muted` | `#57534e` | Secondary/body text (`text-fg-muted`) | +| `--color-fg-subtle` | `#a8a29e` | Placeholder, disabled, icons (`text-fg-subtle`) | +| `--color-border` | `#CBC8BD` | Default borders, dividers (`border-border`) | +| `--color-border-subtle` | `#f5f5f5` | Hairline/structural borders (`border-border-subtle`) | +| `--color-brand` | `#78716c` | Brand accent — use sparingly (`bg-brand`, `text-brand`) | +| `--color-brand-dark` | `#57534e` | CTA button gradient end, emphasis (`bg-brand-dark`) | + +### Shadow tokens + +| Token | Use for | +|---|---| +| `--shadow-ring` | 1px outline border effect — prefer over `border` when stacking borders | +| `--shadow-ring-subtle` | Same, using the subtle border color | + +The `.border-shadow` utility class applies `--shadow-ring` as a convenience. + +### Typography + +- **Display / logo**: `font-serif` (Fraunces) — headings, logo wordmark, editorial emphasis +- **Body / UI text**: `font-sans` (Geist) — all body copy, labels, nav links +- **Code / buttons**: `font-mono` (Geist Mono) — code, button labels, monospaced UI + +### CTA button pattern + +Primary CTA always uses the warm gradient: + +```tsx +"bg-linear-to-t from-brand-dark to-brand rounded-full text-white" +``` + +Secondary / ghost uses surface + border: + +```tsx +"bg-surface border border-border rounded-lg text-fg-muted" +``` + +## Component structure + +Target folder layout. New components must go in the right folder — do not add to the flat root of `components/`. + +``` +src/components/ + layout/ # Header, Footer, Sidebar, SidebarNavigation + ui/ # Primitive brand components: Button, Badge, Card shells + sections/ # Page-level marketing sections (LogoCloud, CtaCard, GithubStars…) + mdx/ # MDX renderer components + notepad/ # Notepad feature + transcription/ # Transcription feature + admin/ # Admin tooling +``` + +Existing flat-root files are being migrated incrementally. When touching a file, move it to the right folder as part of that PR. + +For full brand reference, see `BRAND.md`. diff --git a/apps/web/BRAND.md b/apps/web/BRAND.md new file mode 100644 index 0000000000..18a49f4dc9 --- /dev/null +++ b/apps/web/BRAND.md @@ -0,0 +1,180 @@ +# Char Brand + +This document is the single source of truth for Char's visual identity on the web. All tokens referenced here are defined in `src/styles.css` and available as Tailwind utilities. + +--- + +## Color + +The palette is warm neutral — rooted in stone and off-white. One moment of warmth (the brand gradient on CTAs). Everything else recedes. + +### Palette + +| Role | Token | Hex | Tailwind class | +|---|---|---|---| +| Page background | `--color-page` | `#F2F3F4` | `bg-page` | +| Surface | `--color-surface` | `#ffffff` | `bg-surface` | +| Surface muted | `--color-surface-subtle` | `#fafaf9` | `bg-surface-subtle` | +| Primary text | `--color-fg` | `#1c1917` | `text-fg` | +| Secondary text | `--color-fg-muted` | `#57534e` | `text-fg-muted` | +| Placeholder / disabled | `--color-fg-subtle` | `#a8a29e` | `text-fg-subtle` | +| Default border | `--color-border` | `#CBC8BD` | `border-border` | +| Hairline border | `--color-border-subtle` | `#f5f5f5` | `border-border-subtle` | +| Brand accent | `--color-brand` | `#78716c` | `bg-brand` / `text-brand` | +| Brand dark | `--color-brand-dark` | `#57534e` | `bg-brand-dark` | + +### Usage rules + +- Never introduce a color outside this palette without updating the token set first. +- `color-brand` and `color-brand-dark` are the only "warm accent" moments. Use them exclusively for primary CTAs and interactive focus states. +- Tailwind's `neutral-*` and `stone-*` scales are available as fallback but semantic tokens above take precedence for any brand-facing UI. + +--- + +## Typography + +Three typefaces, each with a distinct role. Do not mix roles. + +| Face | Font | Variable | Role | +|---|---|---|---| +| Serif | Fraunces | `--font-serif` | Wordmark, editorial pull-quotes | +| Sans | Geist | `--font-sans` | All body copy, UI labels, navigation | +| Mono | Geist Mono | `--font-mono` | Button labels, display headings, code, technical UI | + +### Type scale principles + +- **Heading hierarchy**: h1/h2 use `font-mono` by default (per base styles). Serif is used selectively for editorial or brand moments, not for all headings. +- **Weight contrast**: Pair heavy display weight (`font-semibold` / `font-bold`) with light body weight (`font-normal`). Never use two heavy weights adjacently. +- **Letter spacing**: Tight (`tracking-tight`) on large display type. Open (`tracking-wider`) on all-caps labels and category tags. +- **Minimum readable size**: 14px for body, 12px only for all-caps labels or metadata. + +--- + +## Borders & Shadows + +| Token | Value | Class | Use | +|---|---|---|---| +| `--shadow-ring` | `0 0 0 1px #CBC8BD` | `.border-shadow` | Default card/panel outline | +| `--shadow-ring-subtle` | `0 0 0 1px #f5f5f5` | — | Hairline structural outlines | + +**Prefer `shadow-ring` over CSS `border`** when an element already has box-shadow — avoids double-border stacking issues. + +Border radius conventions: +- `rounded-xs` — tight UI elements (chips, small badges) +- `rounded-md` — cards, inputs, dropdowns +- `rounded-lg` — modals, large cards +- `rounded-full` — pill buttons, avatars, tags + +--- + +## Spacing + +The layout uses a base-4 spacing rhythm. Key structural values: + +| Purpose | Value | +|---|---| +| Header height | `69px` / `h-17.25` | +| Content max-width | `max-w-6xl` | +| Wide breakpoint | `72rem` (`laptop`) | +| Section vertical padding | `py-12` (mobile) / `py-16` (desktop) | +| Card internal padding | `p-4` (compact) / `p-8` (feature) | + +--- + +## Components + +### Primary CTA button + +The main action. Warm gradient, pill shape, scales on hover. + +```tsx + +``` + +### Secondary / ghost button + +Outline style, no fill. Used for secondary actions. + +```tsx + +``` + +### Nav link + +Text-only, dotted underline on hover. + +```tsx + + Link + +``` + +### Section label (category tag) + +All-caps mono, wide tracking, muted. + +```tsx + + Features + +``` + +### Card + +No heavy shadow. Border ring or hairline border, surface background. + +```tsx +
+ … +
+``` + +Or with `shadow-ring` instead of `border`: + +```tsx +
+ … +
+``` + +--- + +## Logo + +- **Wordmark**: "Char" in `font-serif` (Fraunces), `text-2xl`, `font-semibold`. +- **Do not** render the wordmark in `font-sans` or `font-mono`. +- **Scale animation** on hover: `hover:scale-105 transition-transform` is the only permitted motion on the logo. + +--- + +## Motion + +- Scale micro-interactions: `hover:scale-[102%] active:scale-[98%]` — used on all interactive cards and CTA buttons. +- Opacity transitions: `transition-opacity duration-200` — used for fade in/out on dynamic text. +- Page-level slide-in: `animate-in slide-in-from-top duration-300` — used for mobile menu only. +- No bounce, no spring, no decorative keyframes on brand UI. + +--- + +## Component folder structure + +``` +src/components/ + layout/ # Header, Footer, Sidebar — structural chrome + ui/ # Primitive, stateless brand components (Button, Badge, Card) + sections/ # Composed page sections (LogoCloud, CtaCard, GithubStars) + mdx/ # MDX renderer overrides + notepad/ # Notepad product feature + transcription/ # Transcription product feature + admin/ # Internal admin tooling +``` + +When creating a new component, ask: +- Is it a stateless visual primitive? → `ui/` +- Is it a full page section? → `sections/` +- Is it structural layout chrome? → `layout/` +- Is it tied to a specific product feature? → that feature's folder diff --git a/apps/web/content-collections.ts b/apps/web/content-collections.ts index 6d6f8b1f71..397826a878 100644 --- a/apps/web/content-collections.ts +++ b/apps/web/content-collections.ts @@ -803,6 +803,60 @@ const jobs = defineCollection({ }, }); +const solutions = defineCollection({ + name: "solutions", + directory: "content/solutions", + include: "*.mdx", + exclude: "AGENTS.md", + schema: z.object({ + label: z.string(), + icon: z.string(), + order: z.number().default(0), + metaTitle: z.string(), + metaDescription: z.string(), + hero: z.object({ + badgeText: z.string(), + title: z.string(), + description: z.string(), + primaryCTA: z.object({ label: z.string(), to: z.string() }), + secondaryCTA: z.object({ label: z.string(), to: z.string() }).optional(), + }), + features: z.object({ + title: z.string(), + description: z.string(), + items: z.array( + z.object({ + icon: z.string(), + title: z.string(), + description: z.string(), + }), + ), + }), + useCases: z.object({ + title: z.string(), + description: z.string(), + items: z.array( + z.object({ + title: z.string(), + description: z.string(), + }), + ), + }), + cta: z.object({ + title: z.string(), + description: z.string(), + }), + }), + transform: async (document) => { + const slug = document._meta.path.replace(/\.mdx$/, ""); + + return { + ...document, + slug, + }; + }, +}); + export default defineConfig({ collections: [ articles, @@ -820,5 +874,6 @@ export default defineConfig({ ossFriends, jobs, updates, + solutions, ], }); diff --git a/apps/web/content/solutions/coaching.mdx b/apps/web/content/solutions/coaching.mdx new file mode 100644 index 0000000000..c24cc71e15 --- /dev/null +++ b/apps/web/content/solutions/coaching.mdx @@ -0,0 +1,55 @@ +--- +label: "For Coaches" +icon: "mdi:heart-pulse" +order: 18 +metaTitle: "AI Meeting Notes for Coaches - Char" +metaDescription: "Capture coaching sessions, client progress, and breakthrough moments with AI-powered meeting notes. Focus on your clients with Char." +hero: + badgeText: "For Coaches" + title: "Transform lives with\nAI-powered meeting notes" + description: "Be fully present with your clients while Char captures every insight, tracks progress, and helps you deliver transformational coaching." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for coaching sessions" + description: "Every feature designed to help you stay present and track client transformation." + items: + - icon: "mdi:account-heart" + title: "Full Presence" + description: "Stop taking notes during sessions. Be fully present and engaged with your clients while AI captures everything." + - icon: "mdi:chart-line" + title: "Progress Tracking" + description: "Track client goals, commitments, and breakthroughs across sessions. See patterns and progress over time." + - icon: "mdi:lightbulb-on" + title: "Insight Capture" + description: "AI identifies key themes, mindset shifts, and breakthrough moments from coaching conversations." + - icon: "mdi:clipboard-check" + title: "Action Items" + description: "Automatically extract commitments, homework, and action items from each session for follow-up." + - icon: "mdi:message-reply-text" + title: "Session Summaries" + description: "Generate session summaries to share with clients. Help them remember key insights and next steps." + - icon: "mdi:shield-lock" + title: "Client Privacy" + description: "Local AI processing ensures sensitive coaching conversations stay completely private and secure." +useCases: + title: "For every coaching conversation" + description: "From life coaching to executive development, Char helps you deliver transformational results." + items: + - title: "Life Coaching" + description: "Capture personal goals, challenges, and transformation journeys. Track client progress toward their vision." + - title: "Executive Coaching" + description: "Document leadership challenges, strategic thinking, and professional development goals. Support high-stakes growth." + - title: "Career Coaching" + description: "Track career goals, skill development, and job search progress. Help clients navigate their career journey." + - title: "Health & Wellness" + description: "Record wellness goals, habit changes, and health milestones. Support clients in sustainable lifestyle changes." +cta: + title: "Ready to amplify your impact?" + description: "Join coaches who are transforming lives with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/consulting.mdx b/apps/web/content/solutions/consulting.mdx new file mode 100644 index 0000000000..71956884fd --- /dev/null +++ b/apps/web/content/solutions/consulting.mdx @@ -0,0 +1,55 @@ +--- +label: "For Consultants" +icon: "mdi:briefcase-account" +order: 10 +metaTitle: "AI Meeting Notes for Consultants - Char" +metaDescription: "Capture client conversations, project details, and strategic insights with AI-powered meeting notes. Deliver better recommendations with Char." +hero: + badgeText: "For Consultants" + title: "Deliver better insights with\nAI-powered meeting notes" + description: "Focus on advising your clients while Char captures every detail, extracts insights, and helps you create compelling deliverables." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for consulting engagements" + description: "Every feature designed to help you capture, analyze, and deliver client insights." + items: + - icon: "mdi:briefcase-check" + title: "Client Meeting Capture" + description: "Record client discussions, requirements, and strategic priorities. Keep detailed records of every engagement." + - icon: "mdi:lightbulb" + title: "Insight Extraction" + description: "AI identifies key themes, pain points, and opportunities from client conversations to inform your recommendations." + - icon: "mdi:file-document-multiple" + title: "Deliverable Support" + description: "Turn meeting notes into reports, presentations, and recommendations. Extract quotes and data points for your deliverables." + - icon: "mdi:account-group" + title: "Stakeholder Management" + description: "Track different stakeholder perspectives, concerns, and priorities across multiple conversations." + - icon: "mdi:clock-check" + title: "Billable Hours" + description: "Accurate meeting records support time tracking and billing documentation for client engagements." + - icon: "mdi:shield-lock" + title: "Client Confidentiality" + description: "Local AI processing ensures sensitive client information stays private and secure on your device." +useCases: + title: "For every consulting conversation" + description: "From discovery to delivery, Char helps you capture and act on every client interaction." + items: + - title: "Discovery & Scoping" + description: "Capture project requirements, success criteria, and constraints. Build comprehensive understanding of client needs." + - title: "Strategy Sessions" + description: "Document strategic discussions, decision rationale, and alignment points. Create clear records of recommendations." + - title: "Stakeholder Interviews" + description: "Record perspectives from different stakeholders. Identify patterns and conflicts across the organization." + - title: "Status Updates & Reviews" + description: "Track project progress, client feedback, and change requests. Maintain detailed engagement history." +cta: + title: "Ready to elevate your consulting?" + description: "Join consultants who are delivering better insights with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/customer-success.mdx b/apps/web/content/solutions/customer-success.mdx new file mode 100644 index 0000000000..4498181644 --- /dev/null +++ b/apps/web/content/solutions/customer-success.mdx @@ -0,0 +1,55 @@ +--- +label: "For Customer Success" +icon: "mdi:account-heart" +order: 14 +metaTitle: "AI Meeting Notes for Customer Success - Char" +metaDescription: "Capture every customer conversation with AI-powered meeting notes. Track health signals, document feedback, and drive retention with Char." +hero: + badgeText: "For Customer Success" + title: "Drive retention with\nAI-powered meeting notes" + description: "Focus on your customers, not your notepad. Char captures every conversation detail so you can drive success and retention." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for customer success" + description: "Every feature designed to help you understand, retain, and grow your customers." + items: + - 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." +useCases: + title: "For every customer interaction" + description: "From onboarding to renewal, Char helps you drive customer success." + items: + - 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." +cta: + title: "Ready to improve customer retention?" + description: "Join customer success teams who are driving retention with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/field-engineering.mdx b/apps/web/content/solutions/field-engineering.mdx new file mode 100644 index 0000000000..d4ff54c77d --- /dev/null +++ b/apps/web/content/solutions/field-engineering.mdx @@ -0,0 +1,55 @@ +--- +label: "For Field Engineering" +icon: "mdi:tools" +order: 20 +metaTitle: "AI Meeting Notes for Field Engineering - Char" +metaDescription: "Capture technical discussions and customer meetings on the go with AI-powered meeting notes. Document implementations, troubleshooting, and field visits with Char." +hero: + badgeText: "For Field Engineering" + title: "Capture technical details\nanywhere you work" + description: "From customer sites to remote locations, Char captures your technical discussions with AI that works offline." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "Learn about local AI" + to: "/product/local-ai/" +features: + title: "Built for field work" + description: "Every feature designed to help you capture technical details in any environment." + items: + - 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." +useCases: + title: "For every field engagement" + description: "From implementations to support calls, Char helps you document technical work." + items: + - 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." +cta: + title: "Ready to improve field documentation?" + description: "Join field engineers who are capturing every technical detail with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/government.mdx b/apps/web/content/solutions/government.mdx new file mode 100644 index 0000000000..ab4bff6858 --- /dev/null +++ b/apps/web/content/solutions/government.mdx @@ -0,0 +1,55 @@ +--- +label: "For Government" +icon: "mdi:bank" +order: 16 +metaTitle: "AI Meeting Notes for Government - Char" +metaDescription: "Secure AI meeting notes for government agencies. Capture public meetings, inter-agency coordination, and policy discussions with privacy-first local AI processing." +hero: + badgeText: "For Government" + title: "Secure AI notes for\ngovernment agencies" + description: "Capture public meetings and policy discussions with AI that processes everything locally. Your sensitive data stays on your secure infrastructure." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "Learn about self-hosting" + to: "/product/self-hosting/" +features: + title: "Built for government agencies" + description: "Every feature designed with security, compliance, and transparency in mind." + items: + - 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." +useCases: + title: "For every government conversation" + description: "From public hearings to inter-agency coordination, Char helps you document with security." + items: + - 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." +cta: + title: "Ready to improve government documentation?" + description: "Join government agencies who are improving meeting documentation while maintaining security." +--- + diff --git a/apps/web/content/solutions/healthcare.mdx b/apps/web/content/solutions/healthcare.mdx new file mode 100644 index 0000000000..132be9a180 --- /dev/null +++ b/apps/web/content/solutions/healthcare.mdx @@ -0,0 +1,55 @@ +--- +label: "For Healthcare" +icon: "mdi:hospital-building" +order: 11 +metaTitle: "AI Meeting Notes for Healthcare - Char" +metaDescription: "HIPAA-ready AI meeting notes for healthcare professionals. Capture patient consultations, clinical meetings, and care coordination with privacy-first local AI processing." +hero: + badgeText: "For Healthcare" + title: "Privacy-first AI notes\nfor healthcare teams" + description: "Capture clinical meetings and patient discussions with AI that processes everything locally. Your patient data never leaves your device." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "Learn about local AI" + to: "/product/local-ai/" +features: + title: "Built for healthcare teams" + description: "Every feature designed with patient privacy and clinical workflows in mind." + items: + - 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." +useCases: + title: "For every clinical conversation" + description: "From patient consultations to team meetings, Char helps you document with confidence." + items: + - 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." +cta: + title: "Ready to streamline clinical documentation?" + description: "Join healthcare teams who are saving time on documentation while maintaining patient privacy." +--- + diff --git a/apps/web/content/solutions/journalism.mdx b/apps/web/content/solutions/journalism.mdx new file mode 100644 index 0000000000..ad6119f7c8 --- /dev/null +++ b/apps/web/content/solutions/journalism.mdx @@ -0,0 +1,55 @@ +--- +label: "For Journalists" +icon: "mdi:newspaper" +order: 13 +metaTitle: "AI Meeting Notes for Journalists - Char" +metaDescription: "Capture interviews, press briefings, and source conversations with AI-powered meeting notes. Report with confidence using Char." +hero: + badgeText: "For Journalists" + title: "Report with confidence using\nAI-powered meeting notes" + description: "Focus on asking the right questions while Char captures every quote, verifies accuracy, and helps you tell compelling stories." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for reporting" + description: "Every feature designed to help you capture, verify, and report with confidence." + items: + - icon: "mdi:microphone" + title: "Interview Recording" + description: "Record interviews, press conferences, and source conversations. Get accurate transcriptions with timestamps." + - icon: "mdi:format-quote-open" + title: "Precise Quotes" + description: "Extract exact quotes with context. Ensure accuracy and attribution in your reporting." + - icon: "mdi:magnify" + title: "Fact Verification" + description: "Search through interview transcripts to verify details, dates, and claims from your sources." + - icon: "mdi:clock-fast" + title: "Fast Turnaround" + description: "Get instant transcriptions. Spend less time on notes and more time writing your story." + - icon: "mdi:archive" + title: "Source Documentation" + description: "Maintain detailed records of all interviews and conversations. Protect your reporting with documentation." + - icon: "mdi:shield-lock" + title: "Source Protection" + description: "Local AI processing ensures sensitive source information stays private and secure on your device." +useCases: + title: "For every story" + description: "From investigations to breaking news, Char helps you report with accuracy." + items: + - title: "Investigative Reporting" + description: "Document complex interviews and source conversations. Build comprehensive records for long-form investigations." + - title: "Breaking News" + description: "Capture press briefings and rapid interviews. Get quotes fast for deadline reporting." + - title: "Feature Stories" + description: "Record in-depth interviews and personal narratives. Find the perfect quotes to bring your stories to life." + - title: "Press Events" + description: "Capture statements from press conferences, panel discussions, and media events with accurate attribution." +cta: + title: "Ready to report with confidence?" + description: "Join journalists who are telling better stories with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/knowledge-workers.mdx b/apps/web/content/solutions/knowledge-workers.mdx new file mode 100644 index 0000000000..a7e2384e3a --- /dev/null +++ b/apps/web/content/solutions/knowledge-workers.mdx @@ -0,0 +1,55 @@ +--- +label: "For Knowledge Workers" +icon: "mdi:account-group" +order: 0 +metaTitle: "AI Meeting Notes for Knowledge Workers - Char" +metaDescription: "Capture every meeting detail with AI-powered notes. Get automatic transcriptions, summaries, and action items. Focus on the conversation, not on taking notes." +hero: + badgeText: "For Knowledge Workers" + title: "Focus on the conversation,\nnot on taking notes" + description: "Stop scrambling to capture everything. Char records your meetings, transcribes conversations, and creates smart summaries so you can stay present." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for how you work" + description: "Every feature designed to help you capture, organize, and act on your meetings." + items: + - icon: "mdi:microphone" + title: "Capture Every Detail" + description: "Record meetings automatically. Never miss important discussions, decisions, or action items." + - icon: "mdi:text-box-check" + title: "Smart Summaries" + description: "AI extracts key points, decisions, and action items from every meeting automatically." + - icon: "mdi:clipboard-list" + title: "Action Items & Follow-ups" + description: "Automatically identify next steps, commitments, and follow-up tasks from every conversation." + - icon: "mdi:magnify" + title: "Searchable Archive" + description: "Find any meeting, note, or conversation instantly with powerful full-text search." + - icon: "mdi:share-variant" + title: "Easy Sharing" + description: "Share meeting summaries with your team. Keep everyone aligned and informed." + - icon: "mdi:shield-lock" + title: "Privacy-First" + description: "Your meetings stay private. Local AI processing means sensitive data never leaves your device." +useCases: + title: "For every conversation" + description: "From team syncs to client calls, Char helps you capture and act on every interaction." + items: + - title: "Team Meetings" + description: "Capture discussions, decisions, and action items. Keep your team aligned with shared meeting notes." + - title: "Client Calls" + description: "Focus on the conversation while AI captures requirements, feedback, and next steps." + - title: "Brainstorming Sessions" + description: "Record creative sessions and never lose a great idea. Review and organize thoughts later." + - title: "One-on-Ones" + description: "Document feedback, goals, and commitments. Build a searchable history of your conversations." +cta: + title: "Ready to transform your meetings?" + description: "Join knowledge workers who are getting more done with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/legal.mdx b/apps/web/content/solutions/legal.mdx new file mode 100644 index 0000000000..02727defec --- /dev/null +++ b/apps/web/content/solutions/legal.mdx @@ -0,0 +1,55 @@ +--- +label: "For Legal Teams" +icon: "mdi:scale-balance" +order: 17 +metaTitle: "AI Meeting Notes for Legal Teams - Char" +metaDescription: "Confidential AI meeting notes for legal professionals. Capture client consultations, depositions, and case discussions with privacy-first local AI processing." +hero: + badgeText: "For Legal Teams" + title: "Confidential AI notes\nfor legal professionals" + description: "Capture every client meeting and case discussion with AI that processes everything locally. Your privileged communications stay protected." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "Learn about local AI" + to: "/product/local-ai/" +features: + title: "Built for legal teams" + description: "Every feature designed with confidentiality and precision in mind." + items: + - 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." +useCases: + title: "For every legal conversation" + description: "From client consultations to case strategy, Char helps you document with confidence." + items: + - 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." +cta: + title: "Ready to streamline legal documentation?" + description: "Join legal teams who are saving time on documentation while maintaining client confidentiality." +--- + diff --git a/apps/web/content/solutions/media.mdx b/apps/web/content/solutions/media.mdx new file mode 100644 index 0000000000..0c850febfc --- /dev/null +++ b/apps/web/content/solutions/media.mdx @@ -0,0 +1,55 @@ +--- +label: "For Media & Entertainment" +icon: "mdi:movie" +order: 19 +metaTitle: "AI Meeting Notes for Media & Entertainment - Char" +metaDescription: "Capture creative meetings, production calls, and editorial discussions with AI-powered meeting notes. Streamline content production workflows with Char." +hero: + badgeText: "For Media & Entertainment" + title: "Capture every creative idea\nwith AI-powered notes" + description: "From brainstorms to production calls, Char captures your creative discussions so no brilliant idea gets lost." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for creative teams" + description: "Every feature designed to help you capture, develop, and deliver creative work." + items: + - 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." +useCases: + title: "For every creative conversation" + description: "From brainstorms to post-production, Char helps you capture and deliver creative work." + items: + - 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." +cta: + title: "Ready to streamline your creative workflow?" + description: "Join media teams who are capturing every creative idea with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/project-management.mdx b/apps/web/content/solutions/project-management.mdx new file mode 100644 index 0000000000..679fa98063 --- /dev/null +++ b/apps/web/content/solutions/project-management.mdx @@ -0,0 +1,55 @@ +--- +label: "For Project Management" +icon: "mdi:clipboard-text" +order: 12 +metaTitle: "AI Meeting Notes for Project Management - Char" +metaDescription: "Capture every project meeting with AI-powered notes. Track decisions, action items, and stakeholder discussions. Keep projects on track with Char." +hero: + badgeText: "For Project Management" + title: "Keep projects on track\nwith AI-powered notes" + description: "Focus on leading your projects, not taking notes. Char captures every meeting detail so nothing falls through the cracks." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for project teams" + description: "Every feature designed to help you track decisions, actions, and stakeholder alignment." + items: + - 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." +useCases: + title: "For every project conversation" + description: "From sprint planning to retrospectives, Char keeps your projects on track." + items: + - 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." +cta: + title: "Ready to improve project delivery?" + description: "Join project managers who are keeping projects on track with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/recruiting.mdx b/apps/web/content/solutions/recruiting.mdx new file mode 100644 index 0000000000..3738ade20c --- /dev/null +++ b/apps/web/content/solutions/recruiting.mdx @@ -0,0 +1,55 @@ +--- +label: "For Recruiting Teams" +icon: "mdi:account-tie" +order: 15 +metaTitle: "AI Meeting Notes for Recruiting - Char" +metaDescription: "Capture every candidate interview with AI-powered meeting notes. Get structured feedback, compare candidates objectively, and make better hiring decisions with Char." +hero: + badgeText: "For Recruiting Teams" + title: "Hire better with\nAI-powered interview notes" + description: "Focus on the candidate, not your notepad. Char captures every interview detail so you can make better hiring decisions." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for hiring" + description: "Every feature designed to help you evaluate, compare, and hire the best candidates." + items: + - 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." +useCases: + title: "For every stage of hiring" + description: "From phone screens to hiring committees, Char helps you make better decisions." + items: + - 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." +cta: + title: "Ready to transform your hiring process?" + description: "Join recruiting teams who are making better hiring decisions with AI-powered interview notes." +--- + diff --git a/apps/web/content/solutions/research.mdx b/apps/web/content/solutions/research.mdx new file mode 100644 index 0000000000..bffcf8ef5e --- /dev/null +++ b/apps/web/content/solutions/research.mdx @@ -0,0 +1,55 @@ +--- +label: "For Researchers" +icon: "mdi:flask" +order: 21 +metaTitle: "AI Meeting Notes for Researchers - Char" +metaDescription: "Capture interviews, observations, and research insights with AI-powered meeting notes. Analyze faster with Char." +hero: + badgeText: "For Researchers" + title: "Discover faster with\nAI-powered meeting notes" + description: "Focus on asking questions and observing while Char captures every detail, identifies themes, and helps you analyze research conversations." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for research" + description: "Every feature designed to help you capture, analyze, and synthesize research data." + items: + - icon: "mdi:microphone-variant" + title: "Interview Recording" + description: "Capture user interviews, expert conversations, and field observations. Get accurate transcriptions of every research session." + - icon: "mdi:tag-multiple" + title: "Theme Identification" + description: "AI helps identify recurring themes, patterns, and insights across multiple research sessions." + - icon: "mdi:format-quote-close" + title: "Quote Extraction" + description: "Easily find and extract participant quotes for reports, papers, and presentations." + - icon: "mdi:file-search" + title: "Search & Analysis" + description: "Search across all your research notes to find specific topics, responses, or insights instantly." + - icon: "mdi:book-open-variant" + title: "Research Synthesis" + description: "Turn raw interview data into structured findings. Support your analysis with detailed evidence." + - icon: "mdi:shield-lock" + title: "Participant Privacy" + description: "Local AI processing ensures sensitive research data and participant information stays private." +useCases: + title: "For every research method" + description: "From user interviews to ethnographic studies, Char helps you capture and analyze." + items: + - title: "User Research" + description: "Capture user interviews, usability tests, and feedback sessions. Identify patterns in user needs and behaviors." + - title: "Academic Research" + description: "Record research interviews, focus groups, and field observations. Support qualitative analysis with detailed transcripts." + - title: "Market Research" + description: "Document customer conversations, market interviews, and competitive insights. Extract themes and trends." + - title: "Ethnographic Studies" + description: "Capture field notes, participant observations, and contextual inquiries. Build rich qualitative datasets." +cta: + title: "Ready to accelerate your research?" + description: "Join researchers who are discovering faster with AI-powered meeting notes." +--- + diff --git a/apps/web/content/solutions/sales.mdx b/apps/web/content/solutions/sales.mdx new file mode 100644 index 0000000000..3143e6ab79 --- /dev/null +++ b/apps/web/content/solutions/sales.mdx @@ -0,0 +1,55 @@ +--- +label: "For Sales Teams" +icon: "mdi:briefcase" +order: 1 +metaTitle: "AI Meeting Notes for Sales Teams - Char" +metaDescription: "Capture every sales call detail with AI-powered meeting notes. Get automatic transcriptions, deal insights, and CRM-ready summaries. Close more deals with Char." +hero: + badgeText: "For Sales Teams" + title: "Close more deals with\nAI-powered meeting notes" + description: "Stop taking notes during sales calls. Focus on building relationships while Char captures every detail, extracts insights, and prepares your follow-ups." + primaryCTA: + label: "Download for free" + to: "/download/" + secondaryCTA: + label: "See how it works" + to: "/product/ai-notetaking/" +features: + title: "Built for sales teams" + description: "Every feature designed to help you capture deal intelligence and close more deals." + items: + - 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." +useCases: + title: "For every sales conversation" + description: "From discovery calls to QBRs, Char helps you capture and act on every deal interaction." + items: + - 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." +cta: + title: "Ready to supercharge your sales?" + description: "Join sales teams who are closing more deals with AI-powered meeting notes." +--- + diff --git a/apps/web/package.json b/apps/web/package.json index b0bd85e42b..c7a30871e1 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -3,8 +3,8 @@ "private": true, "type": "module", "scripts": { - "dev": "VITE_APP_URL=\"http://localhost:3000\" VITE_API_URL=\"http://localhost:3001\" dotenvx run --ignore MISSING_ENV_FILE -f ../../.env.supabase -f .env -- vite dev --port 3000", - "build": "vite build && cp public/sitemap.xml dist/client/sitemap.xml && pagefind --site ./dist/client", + "dev": "NODE_OPTIONS='--max-old-space-size=8192' VITE_APP_URL=\"http://localhost:3000\" VITE_API_URL=\"http://localhost:3001\" dotenvx run --ignore MISSING_ENV_FILE -f ../../.env.supabase -f .env -- vite dev --port 3000", + "build": "NODE_OPTIONS='--max-old-space-size=8192' vite build && cp public/sitemap.xml dist/client/sitemap.xml && pagefind --site ./dist/client", "serve": "vite preview", "test": "playwright test", "typecheck": "CI=true pnpm -F @hypr/web build && tsc --project tsconfig.json --noEmit", diff --git a/apps/web/public/avatars/anand.jpg b/apps/web/public/avatars/anand.jpg new file mode 100644 index 0000000000..c9a7233561 Binary files /dev/null and b/apps/web/public/avatars/anand.jpg differ diff --git a/apps/web/public/avatars/james.jpg b/apps/web/public/avatars/james.jpg new file mode 100644 index 0000000000..0482e55b32 Binary files /dev/null and b/apps/web/public/avatars/james.jpg differ diff --git a/apps/web/public/avatars/tobi.jpg b/apps/web/public/avatars/tobi.jpg new file mode 100644 index 0000000000..905509ead1 Binary files /dev/null and b/apps/web/public/avatars/tobi.jpg differ diff --git a/apps/web/public/avatars/tom.jpg b/apps/web/public/avatars/tom.jpg new file mode 100644 index 0000000000..be1c94c7bd Binary files /dev/null and b/apps/web/public/avatars/tom.jpg differ diff --git a/apps/web/public/bg-desktop.webp b/apps/web/public/bg-desktop.webp new file mode 100644 index 0000000000..031d9318d3 Binary files /dev/null and b/apps/web/public/bg-desktop.webp differ diff --git a/apps/web/public/icons/Chatgpt-logo.svg b/apps/web/public/icons/Chatgpt-logo.svg new file mode 100644 index 0000000000..b55db6427e --- /dev/null +++ b/apps/web/public/icons/Chatgpt-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/public/icons/Claude-logo.svg b/apps/web/public/icons/Claude-logo.svg new file mode 100644 index 0000000000..4c3838d2f5 --- /dev/null +++ b/apps/web/public/icons/Claude-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/web/public/icons/file.webp b/apps/web/public/icons/file.webp new file mode 100644 index 0000000000..454aa75d3f Binary files /dev/null and b/apps/web/public/icons/file.webp differ diff --git a/apps/web/public/icons/folderchar.svg b/apps/web/public/icons/folderchar.svg new file mode 100644 index 0000000000..bb7c923355 --- /dev/null +++ b/apps/web/public/icons/folderchar.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/icons/google-meet logo.svg b/apps/web/public/icons/google-meet logo.svg new file mode 100644 index 0000000000..d294f0e417 --- /dev/null +++ b/apps/web/public/icons/google-meet logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/icons/google-meet.svg b/apps/web/public/icons/google-meet.svg deleted file mode 100644 index 699169db2c..0000000000 --- a/apps/web/public/icons/google-meet.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/apps/web/public/icons/inperson logo.svg b/apps/web/public/icons/inperson logo.svg new file mode 100644 index 0000000000..21d28c518a --- /dev/null +++ b/apps/web/public/icons/inperson logo.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/icons/manus logo.svg b/apps/web/public/icons/manus logo.svg new file mode 100644 index 0000000000..054926f595 --- /dev/null +++ b/apps/web/public/icons/manus logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/icons/reminder.svg b/apps/web/public/icons/reminder.svg new file mode 100644 index 0000000000..a44fb494a5 --- /dev/null +++ b/apps/web/public/icons/reminder.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/icons/teams logo.svg b/apps/web/public/icons/teams logo.svg new file mode 100644 index 0000000000..ee2a8372a0 --- /dev/null +++ b/apps/web/public/icons/teams logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/apps/web/public/patterns/slash.svg b/apps/web/public/patterns/slash.svg deleted file mode 100644 index a19437f96c..0000000000 --- a/apps/web/public/patterns/slash.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/apps/web/src/components/ai-feature-panel.tsx b/apps/web/src/components/ai-feature-panel.tsx new file mode 100644 index 0000000000..aa80b77e42 --- /dev/null +++ b/apps/web/src/components/ai-feature-panel.tsx @@ -0,0 +1,208 @@ +import { Icon } from "@iconify-icon/react"; +import { AnimatePresence, motion } from "motion/react"; +import { useEffect, useState } from "react"; + +import { cn } from "@hypr/utils"; + +export function SearchToolCall({ loopKey }: { loopKey: number }) { + const [phase, setPhase] = useState(0); + + useEffect(() => { + setPhase(0); + const t1 = setTimeout(() => setPhase(1), 800); + const t2 = setTimeout(() => setPhase(2), 1400); + return () => { + clearTimeout(t1); + clearTimeout(t2); + }; + }, [loopKey]); + + const meetings = [ + "Weekly Sync — Oct 12", + "1:1 with Sarah — Oct 10", + "Sprint Planning — Oct 8", + ]; + + return ( +
+
+
+ + {phase < 2 ? "Searching meetings..." : "3 meetings found"} + +
+ + {phase >= 1 && ( + + {meetings.slice(0, phase >= 2 ? 3 : 1).map((m) => ( + + + {m} + + ))} + + )} + +
+ ); +} + +export function JiraToolCall({ loopKey }: { loopKey: number }) { + const [phase, setPhase] = useState(0); + + useEffect(() => { + setPhase(0); + const t1 = setTimeout(() => setPhase(1), 600); + const t2 = setTimeout(() => setPhase(2), 1400); + const t3 = setTimeout(() => setPhase(3), 2000); + return () => { + clearTimeout(t1); + clearTimeout(t2); + clearTimeout(t3); + }; + }, [loopKey]); + + return ( +
+
+ + + {phase < 1 ? ( + + + Creating ticket... + + ) : ( + + ENG-247 + + Created + + + )} + +
+ + {phase >= 2 && ( + +

+ Mobile UI bug fix +

+
+ )} +
+ + {phase >= 3 && ( + +
+ S +
+ Sarah +
+ )} +
+
+ ); +} + +export function TranscriptToolCall({ + loopKey, + static: isStatic, +}: { + loopKey: number; + static?: boolean; +}) { + const [phase, setPhase] = useState(isStatic ? 2 : 0); + + useEffect(() => { + if (isStatic) return; + setPhase(0); + const t1 = setTimeout(() => setPhase(1), 500); + const t2 = setTimeout(() => setPhase(2), 1200); + return () => { + clearTimeout(t1); + clearTimeout(t2); + }; + }, [loopKey, isStatic]); + + return ( +
+
+ + {phase >= 1 && ( + + Sarah: + + The API changes will need at least two sprints... + + + )} + + + {phase >= 2 && ( + + Ben: + + I can start on the auth module this week. + + + )} + + {phase === 0 && ( +
+ + Reading transcript... +
+ )} +
+
+ ); +} diff --git a/apps/web/src/components/app-preview.tsx b/apps/web/src/components/app-preview.tsx new file mode 100644 index 0000000000..951f82c612 --- /dev/null +++ b/apps/web/src/components/app-preview.tsx @@ -0,0 +1,748 @@ +import { Icon } from "@iconify-icon/react"; +import { + ArrowLeftIcon, + CalendarIcon, + ChevronDownIcon, + ChevronUpIcon, + CircleHelpIcon, + FolderOpenIcon, + MailIcon, + MessageCircleIcon, + PanelRightIcon, + PlusIcon, + SearchIcon, + SettingsIcon, + SlidersHorizontalIcon, + SparklesIcon, + SquareArrowOutUpRightIcon, + UsersIcon, + X, +} from "lucide-react"; +import { AnimatePresence, motion } from "motion/react"; +import { useState } from "react"; + +import { NoteTab } from "@hypr/ui/components/ui/note-tab"; +import { cn } from "@hypr/utils"; + +type MockNote = { + id: string; + time: string; + title: string; + group: "Today" | "Yesterday"; + noteContent: { + title: string; + summary: React.ReactNode; + memos: string; + transcript: { speaker: string; text: string }[]; + }; +}; + +const mockNotes: MockNote[] = [ + { + id: "n1", + time: "9:30 AM", + title: "Team Standup", + group: "Today", + noteContent: { + title: "Team Standup — March 20", + summary: ( + <> +

Mobile UI Update and API Adjustments

+ +

New Dashboard — Urgent Priority

+ + + ), + memos: "ui update - moble\napi\nnew dash - urgnet", + transcript: [ + { + speaker: "You", + text: "Alright, let's go through the updates. Sarah, how's the mobile UI coming along?", + }, + { + speaker: "Sarah", + text: "We've got the new navigation bar ready. Button placements are improved for accessibility — much cleaner flow overall.", + }, + { + speaker: "Ben", + text: "I'll need to adjust the API to support the dynamic UI changes. Mainly around fetching personalized user data more efficiently.", + }, + { + speaker: "Alice", + text: "Before we move on — the new analytics dashboard needs to be prioritized. Stakeholders have been asking about it a lot.", + }, + { + speaker: "You", + text: "Agreed. Let's phase the UI update and make sure the API work is done first. Alice, can you spec out the dashboard requirements by Friday?", + }, + ], + }, + }, + { + id: "n2", + time: "2:00 PM", + title: "Product Review", + group: "Today", + noteContent: { + title: "Product Review — Sprint 14", + summary: ( + <> +

Overview

+

+ Reviewed the new onboarding flow with the design team. A/B test + results show a 12% conversion lift on the simplified variant. +

+

Key Decisions

+ +

Open Questions

+ + + ), + memos: + "The 12% lift is solid — worth noting that most of the gain came from removing the workspace setup step. Users were dropping off there.\n\nFuzzy search is interesting but we don't have a clear spec yet. Alex volunteered to write one.", + transcript: [ + { + speaker: "You", + text: "Let's start with the onboarding A/B results. Alex, can you walk us through?", + }, + { + speaker: "Alex", + text: "Sure. The simplified variant — the one without the workspace setup step — showed a 12% lift in completion rate.", + }, + { + speaker: "Maya", + text: "That's significant. I think we should ship it to everyone.", + }, + { + speaker: "You", + text: "Agreed. Let's plan for a full rollout next week. What about the search improvements?", + }, + { + speaker: "Alex", + text: "The fuzzy matching feature needs more scoping. I'd suggest we push it to next quarter.", + }, + ], + }, + }, + { + id: "n3", + time: "11:00 AM", + title: "1:1 with Sarah", + group: "Today", + noteContent: { + title: "1:1 with Sarah", + summary: ( + <> +

Career Growth

+ +

Current Work

+ +

Follow-ups

+ + + ), + memos: + "Sarah is clearly ready for more ownership — the API docs project is a good fit. Should also think about putting her name forward for the tech lead track.\n\nConference is React Summit in June. Budget is ~$2,400 including travel.", + transcript: [ + { + speaker: "You", + text: "How's everything going? How did the notification redesign land?", + }, + { + speaker: "Sarah", + text: "Really well! TestFlight feedback has been positive. I'm feeling good about it.", + }, + { + speaker: "You", + text: "Great. Let's talk about what's next for you. Any projects you're excited about?", + }, + { + speaker: "Sarah", + text: "I'd love to take point on the API documentation project. I've been thinking about how to structure it.", + }, + { + speaker: "You", + text: "I think that's a great fit. Let's make it happen.", + }, + ], + }, + }, + { + id: "n4", + time: "4:00 PM", + title: "Q1 Planning Sync", + group: "Yesterday", + noteContent: { + title: "Q1 Planning Sync", + summary: ( + <> +

Q1 Priorities

+ +

Constraints

+ +

Marketing

+ + + ), + memos: + "Three priorities is already ambitious. Self-serve tier is n1.\n\nMarketing launch by next Friday.", + transcript: [ + { + speaker: "You", + text: "Let's align on Q1 priorities. I've got three on the list.", + }, + { + speaker: "David", + text: "Before we start — are we getting any new headcount?", + }, + { + speaker: "You", + text: "No, we're staying flat. So we need to be really focused.", + }, + { speaker: "David", text: "Got it. What are the three priorities?" }, + { + speaker: "You", + text: "Self-serve tier, p95 latency under 200ms, and the integrations marketplace.", + }, + ], + }, + }, +]; + +function groupNotes(notes: MockNote[]) { + const groups: Record = {}; + for (const n of notes) { + if (!groups[n.group]) groups[n.group] = []; + groups[n.group].push(n); + } + return groups; +} + +const grouped = groupNotes(mockNotes); +const editorTabs = ["Summary", "Memos", "Transcript"]; + +export function AppPreviewSection() { + return ( +
+
+ +
+
+ ); +} + +function MockDesktopApp() { + const [activeNoteId, setActiveNoteId] = useState(mockNotes[0].id); + const [activeEditorTab, setActiveEditorTab] = useState(0); + const [chatOpen, setChatOpen] = useState(true); + const activeNote = + mockNotes.find((n) => n.id === activeNoteId) || mockNotes[0]; + + function handleNoteClick(noteId: string) { + setActiveNoteId(noteId); + setActiveEditorTab(0); + } + + return ( +
+
+ {/* Sidebar */} +
+
+
+
+
+
+
+
+ +
+ + +
+ +
+ {Object.entries(grouped).map(([group, items]) => ( +
+
+
+ {group} +
+
+ {items.map((note) => ( + + ))} +
+ ))} +
+ + {/* Profile section */} + +
+ + {/* Body */} +
+ {/* Header */} +
+
+
+
+
+
+
+
+ +
+ +
+ +
+
+
+
+
+
+ +
+ + {activeNote.title} + +
+ +
+
+
+
+ +
+ +
+
+ + {/* Note content */} +
+ + +
+
+
+
+
+ +
+
+
+ {activeNote.noteContent.title} +
+
+
+ +
+
+
+
+
+ {editorTabs.map((tabLabel, i) => ( + setActiveEditorTab(i)} + > + {tabLabel} + + ))} +
+
+
+
+
+ +
+ {activeEditorTab === 0 && ( +
+ {activeNote.noteContent.summary} +
+ )} + {activeEditorTab === 1 && ( +