diff --git a/.gitignore b/.gitignore index ee1c50c..aa546cb 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ out .deploy .logs *.tsbuildinfo +.gstack/ diff --git a/CLAUDE.md b/CLAUDE.md index 9f90528..e1c8879 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,19 +1,34 @@ -# Knowcap Landing Page +# Knowcap Marketing Page ## What This Is -Marketing landing page for Knowcap (knowcap.ai). Deployed on Vercel, auto-deploys from `main`. +Brand + marketing + website for Knowcap (knowcap.ai). Renamed from `knowcap-landing` on 2026-06-01. -- **Repo:** Knowcap-V2/knowcap-landing +The website lives in `app/`. Everything else is brand/marketing surface area. + +- **Repo:** Knowcap-V2/knowcap-marketing - **Stack:** Next.js 14, Tailwind, deployed via Vercel - **Vercel project:** `app` on team `hsa-smetoolsios-projects` - **Root directory on Vercel:** `app/` (the Next.js subfolder, not repo root) - **Domain:** knowcap.ai (Cloudflare → Vercel) +## Where things live + +| What | Where | +|---|---| +| Website code | `app/` (Next.js) | +| Shipped blog posts | `app/content/blog/*.md` | +| Brand DNA | `brand/` (VISION, POSITIONING, MOAT, STRATEGY, PRODUCT, personas, decisions, design-explorations, legacy) | +| Marketing research | `research/` (audits/, data/, competitors/) | +| Campaigns | `campaigns/` (stratdev/, landing-pages/, linkedin-outbound, meta-paid-sprint) | +| Content drafts | `content-pipeline/` (strategy/, drafts/, ideas/, video/) | +| Strategy | `strategy/` (gtm-strategy.md, june-2026-gtm-game.md) | + ## Design System -Always read DESIGN.md before making any visual or UI decisions. -All font choices, colors, spacing, and aesthetic direction are defined there. -Do not deviate without explicit user approval. -In QA mode, flag any code that doesn't match DESIGN.md. +Always read `DESIGN.md` (or `DESIGN-E.md` for the /e variant) before making any visual or UI decisions. +Font choices, colors, spacing, and aesthetic direction are defined there. + +## Vision / brand DNA +`brand/VISION.md` is the source of truth for everything Knowcap means. Cited by every feat() PR body in the main `knowcap` repo via full GitHub URL. ## Branch Rules Same as all Knowcap-V2 repos: never push to main. Branch + PR only. @@ -24,6 +39,8 @@ Same as all Knowcap-V2 repos: never push to main. Branch + PR only. - `app/components/navbar.tsx` — sticky nav with logo, links, theme dots - `app/components/hero-section-general.tsx` — dark hero section - `app/next.config.js` — has `ignoreBuildErrors: true` (legacy API routes have TS errors) +- `app/app/robots.ts` — origin robots.txt overrides Cloudflare's managed AI-bot block +- `app/app/sitemap.ts` — sitemap incl. /for/* and /compare/* sub-pages ## Skill routing diff --git a/EMAIL_SETUP.md b/EMAIL_SETUP.md deleted file mode 100644 index 77cb7f3..0000000 --- a/EMAIL_SETUP.md +++ /dev/null @@ -1,100 +0,0 @@ - -# Email Configuration Setup Guide - -This guide will help you set up email notifications for the beta application form. - -## Quick Setup with Gmail (Recommended) - -### Step 1: Enable 2-Factor Authentication -1. Go to your Google Account: https://myaccount.google.com -2. Navigate to **Security** -3. Enable **2-Step Verification** if not already enabled - -### Step 2: Create an App Password -1. Go to: https://myaccount.google.com/apppasswords -2. Select **Mail** as the app -3. Select **Other** as the device and name it "Knowcap Beta Form" -4. Click **Generate** -5. Copy the 16-character password (remove spaces) - -### Step 3: Configure Environment Variables -1. Copy `.env.example` to `.env.local`: - ```bash - cp .env.example .env.local - ``` - -2. Edit `.env.local` with your details: - ```env - SMTP_HOST=smtp.gmail.com - SMTP_PORT=587 - SMTP_SECURE=false - SMTP_USER=your-gmail-address@gmail.com - SMTP_PASS=your-16-char-app-password - SMTP_FROM=your-gmail-address@gmail.com - ``` - -3. Replace: - - `your-gmail-address@gmail.com` with your actual Gmail address - - `your-16-char-app-password` with the app password you generated - -### Step 4: Restart Your Development Server -```bash -yarn dev -``` - -## Testing - -1. Navigate to the `/odoo` page -2. Click "Apply for Beta Access" -3. Fill out and submit the form -4. Check your inbox at hsa@knowcap.ai for the notification - -## Alternative SMTP Providers - -### SendGrid -```env -SMTP_HOST=smtp.sendgrid.net -SMTP_PORT=587 -SMTP_SECURE=false -SMTP_USER=apikey -SMTP_PASS=your-sendgrid-api-key -``` - -### Mailgun -```env -SMTP_HOST=smtp.mailgun.org -SMTP_PORT=587 -SMTP_SECURE=false -SMTP_USER=your-mailgun-smtp-username -SMTP_PASS=your-mailgun-smtp-password -``` - -### AWS SES -```env -SMTP_HOST=email-smtp.us-east-1.amazonaws.com -SMTP_PORT=587 -SMTP_SECURE=false -SMTP_USER=your-aws-smtp-username -SMTP_PASS=your-aws-smtp-password -``` - -## Troubleshooting - -### "Invalid login" error -- Make sure you're using an App Password, not your regular Gmail password -- Verify 2FA is enabled on your Google account - -### "Connection timeout" error -- Check that port 587 is not blocked by your firewall -- Try port 465 with SMTP_SECURE=true - -### Emails not arriving -- Check spam/junk folder -- Verify the recipient email (hsa@knowcap.ai) is correct -- Check server logs for error messages - -## Security Notes - -⚠️ **Never commit `.env.local` to version control!** - -The `.env.local` file is already in `.gitignore`. Keep your SMTP credentials secure and never share them publicly. diff --git a/GMAIL_SETUP_GUIDE.md b/GMAIL_SETUP_GUIDE.md deleted file mode 100644 index 972adae..0000000 --- a/GMAIL_SETUP_GUIDE.md +++ /dev/null @@ -1,88 +0,0 @@ -# Gmail App Password Setup Guide - -## Overview -To enable email notifications for beta applications, you need to generate a Gmail App Password for the hsa@knowcap.ai account. - -## Steps to Generate Gmail App Password - -### 1. Enable 2-Factor Authentication (If Not Already Enabled) -1. Go to your Google Account: https://myaccount.google.com/ -2. Click on **Security** in the left sidebar -3. Under "How you sign in to Google", click on **2-Step Verification** -4. Follow the prompts to set up 2FA if not already enabled - -### 2. Generate App Password -1. Go to https://myaccount.google.com/apppasswords -2. You may need to sign in again -3. In the "Select app" dropdown, choose **Mail** -4. In the "Select device" dropdown, choose **Other (Custom name)** -5. Enter a name like "Knowcap Beta Notifications" -6. Click **Generate** -7. Google will display a 16-character password (format: xxxx xxxx xxxx xxxx) -8. **Copy this password immediately** - you won't be able to see it again! - -### 3. Update the Environment Variable -1. SSH into your server or open your deployment environment -2. Edit the `.env` file in `/home/ubuntu/knowcap_landing/app/` -3. Replace the placeholder value: - ``` - GMAIL_APP_PASSWORD=YOUR_16_CHARACTER_APP_PASSWORD - ``` - Example: - ``` - GMAIL_APP_PASSWORD=abcd efgh ijkl mnop - ``` - (Note: You can include or exclude spaces - both work) - -4. Save the file -5. Restart your application for changes to take effect - -### 4. Test the Email Functionality -1. Visit https://knowcap.ai/ -2. Fill out the beta application form -3. Submit the form -4. Check hsa@knowcap.ai inbox for the notification email - -## Troubleshooting - -### Email Not Sending? -- **Check the app password**: Make sure it's correctly copied (16 characters) -- **Check 2FA**: Gmail app passwords require 2-Factor Authentication to be enabled -- **Check Gmail settings**: Make sure "Less secure app access" is not blocking the connection -- **Check server logs**: Look for error messages in the console - -### Common Errors -- **"Invalid credentials"**: App password is incorrect or not set -- **"Username and Password not accepted"**: 2FA is not enabled or app password is expired -- **"Connection timeout"**: Firewall may be blocking port 587 - -## Security Notes -- **Never share your app password** - treat it like your account password -- **Use app-specific passwords** for each application -- **Revoke unused passwords** from https://myaccount.google.com/apppasswords -- App passwords bypass 2FA, so keep them secure - -## What's New - -### Database Storage -- All beta applications are now stored in a PostgreSQL database -- Applications persist even if emails fail to send -- Easy to query and export data - -### Admin Dashboard -- View all applications at: https://knowcap.ai/betaapp -- Features: - - Real-time application list - - Search and filter capabilities - - Export to CSV - - Statistics and analytics - - Direct email links to applicants - -### Email Notifications -- Emails sent to: hsa@knowcap.ai -- Includes all application details -- Direct link to admin dashboard -- Application ID for reference - -## Need Help? -If you encounter any issues, check the application logs or contact your system administrator. diff --git a/GMAIL_SETUP_GUIDE.pdf b/GMAIL_SETUP_GUIDE.pdf deleted file mode 100644 index 39d26b9..0000000 Binary files a/GMAIL_SETUP_GUIDE.pdf and /dev/null differ diff --git a/KNOWAPP_DIAGNOSIS.md b/KNOWAPP_DIAGNOSIS.md deleted file mode 100644 index 3bc344b..0000000 --- a/KNOWAPP_DIAGNOSIS.md +++ /dev/null @@ -1,164 +0,0 @@ -# Knowapp Functionality Diagnosis Report - -## Investigation Summary -**Date**: December 7, 2025 -**Issue Reported**: Upload functionality not working properly - Eye preview button not showing, X button not functional - -## Code Comparison Results - -### Files Compared: -1. **App.tsx** - ✅ Functionally Identical (only API key variable name changed for Next.js) -2. **NotebookView.tsx** - ✅ 100% Identical -3. **QuickRecorder.tsx** - ✅ Not modified -4. **ScreenRecorder.tsx** - ✅ Not modified -5. **db.ts** - ✅ 100% Identical -6. **storage.ts** - ✅ 100% Identical -7. **geminiService.ts** - ✅ Functionally Identical (only API key variable changed) -8. **types.ts** - ✅ 100% Identical - -### Key Findings: - -1. **Styling Issue - RESOLVED** ✅ - - Root cause: Tailwind wasn't scanning `./lib/` directory - - Fix: Added `'./lib/**/*.{js,ts,jsx,tsx,mdx}'` to tailwind.config.ts - - Status: Fixed and deployed - -2. **API Key Configuration - RESOLVED** ✅ - - Root cause: Build was using old placeholder value - - Fix: Triggered fresh build with actual API key - - Status: API key now properly embedded in build - -3. **Upload Functionality - REQUIRES TESTING** ⚠️ - - Code Analysis: All handlers present and correct - - Expected Behavior: - * File upload → Creates source with `processingStatus: 'processing'` - * Blob URL created immediately for preview - * File saved to IndexedDB - * Gemini API called for transcription - * Status transitions: `processing` → `analyzing` → `completed` - * Eye button appears when status is NOT 'processing' - * X button should abort processing and remove source - - - Potential Issues: - * Gemini API failures not being caught - * Blob URLs not persisting - * Processing stuck in 'processing' state - * IndexedDB quota issues - -## Code Flow Analysis - -### File Upload Process: -``` -1. User clicks "Add Sources" → File picker opens -2. User selects file(s) → handleUploadFiles called -3. For each file: - a. Generate unique sourceId - b. Create blob URL: URL.createObjectURL(file) - c. Create Source object with: - - processingStatus: 'processing' - - processingProgress: 1 - - audioData/videoData: blobUrl (for immediate playback) - d. Add to UI immediately (instant feedback) - e. Save file to IndexedDB (background) - f. Call processSourceBackground: - - Update status to 'analyzing' - - Call Gemini API (analyzeAudio/analyzeScreenRecording) - - On success: status → 'completed', progress → 100 - - On error: status → 'failed' -``` - -### Button Visibility Logic: -```javascript -const isUploading = source.processingStatus === 'processing'; -const isAnalyzing = source.processingStatus === 'analyzing' || source.processingStatus === 'transcribing'; -const isFailed = source.processingStatus === 'failed'; - -// Eye button: Shows when NOT uploading -{!isUploading && ( - -)} - -// X button: Shows when uploading (to cancel) -{isUploading && ( - -)} - -// Play button: Shows when NOT uploading and type is audio/video -{!isUploading && (source.type === 'audio' || source.type === 'video') && ( - -)} -``` - -## Identified Issues - -### Issue 1: Status Might Get Stuck in 'processing' -**Symptom**: Eye button never appears, shows "Uploading 1%" indefinitely -**Cause**: If `processSourceBackground` fails silently or Gemini API throws an error, status remains 'processing' -**Solution**: Enhanced error handling with console logging - -### Issue 2: Abort Controller Might Not Be Working -**Symptom**: X button doesn't cancel upload -**Cause**: AbortController signal not properly propagated or caught -**Solution**: Improved abort handling with better error messages - -### Issue 3: Gemini API Key Might Not Be Working -**Symptom**: Analysis never completes -**Cause**: API key invalid or rate limited -**Solution**: Test API key, add retry logic - -## Recommended Fixes - -1. **Add Debug Logging** - - Log every status transition - - Log API responses - - Log errors with full stack traces - -2. **Improve Error Handling** - - Catch all API errors - - Set status to 'failed' on any error - - Display error message to user - -3. **Add Status Timeout** - - If processing takes > 5 minutes, auto-fail - - Prevent indefinite "Uploading..." state - -4. **Test with Sample Files** - - Small audio file (< 1MB) - - Check console for errors - - Verify status transitions - -## Next Steps - -1. Deploy enhanced version with debug logging -2. Test with actual audio/video file -3. Monitor console for errors -4. Check Network tab for API failures -5. Verify IndexedDB storage - -## Browser Testing Checklist - -- [ ] File upload opens picker -- [ ] Source appears immediately after selection -- [ ] Blob URL allows immediate playback -- [ ] Processing status shows progress -- [ ] Eye button appears after processing -- [ ] X button cancels and removes source -- [ ] Play button works for audio/video -- [ ] Chat works with completed sources -- [ ] Speaker identification works -- [ ] Export transcript works - -## Conclusion - -The code is correct and matches the original. The issue is likely: -1. **Gemini API failures** - Need better error visibility -2. **Browser compatibility** - IndexedDB or blob URL issues -3. **Real-world file processing** - Large files causing timeouts - -Proposed solution: Enhanced error handling + debug logging diff --git a/KNOWAPP_DIAGNOSIS.pdf b/KNOWAPP_DIAGNOSIS.pdf deleted file mode 100644 index e0f293e..0000000 Binary files a/KNOWAPP_DIAGNOSIS.pdf and /dev/null differ diff --git a/PITCH_V4.1_CHANGES.md b/PITCH_V4.1_CHANGES.md deleted file mode 100644 index 0141e3d..0000000 --- a/PITCH_V4.1_CHANGES.md +++ /dev/null @@ -1,233 +0,0 @@ - -# Knowcap.ai Pitch Deck v4.1 — Visual Changes Summary - -## Overview -Updated `/pitch` page with exact v4.1 copy while preserving Knowcap's visual identity. Applied subtle readability improvements focused on hierarchy, spacing, and emphasis. - ---- - -## Global Changes Applied - -### Typography & Hierarchy -- **Slide Labels**: Reduced to 12px, muted color (#005EFF), uppercase with tracking -- **Main Headers**: Increased to 48-60px, bold weight, high contrast (#191F2E) -- **Body Text**: 18-20px with 1.5-1.6 line spacing for optimal readability -- **Key Phrases**: Applied bold weight to critical terms: - - "source-backed deliverables" - - "verified by design" - - "visible proof" - - "$84K ARR pipeline" - - "~85%" gross margin - - "$2B Proof Economy" - - "AI Governance Layer" - -### Spacing & Whitespace -- Increased section padding: `py-28` (28 units = 112px) -- Added 10-20% more vertical spacing between paragraphs -- Increased margin-bottom on headers: `mb-16` for better breathing room -- Target whitespace ratio: ~40% of slide height achieved - -### Visual Elements -- **Metrics Cards**: Clean 3-column grid with centered text and colored numbers -- **Quote Blocks**: Left border (4px #005EFF), light background, italic text -- **Tables**: Two-color format (dark header, white rows) without gridlines -- **Highlight Boxes**: Subtle gray backgrounds (#F5F5F5) for secondary content -- **Dark Sections**: Alternating white/gray backgrounds for rhythm - ---- - -## Slide-by-Slide Changes - -### Slide 1: Title -**Changes:** -- Increased vertical spacing between all paragraphs (mb-6, mb-8, mb-10) -- Bolded "source-backed deliverables" and "visible proof" -- Made tagline italic: "Because 'AI-generated' means nothing..." -- Moved funding ask to dark box (bg-[#0A0D12]) for visual emphasis -- Added example in light box with proper hierarchy -- Changed valuation: $14M → $10M pre-money - -### Slide 2: Validation & Traction (formerly "Core Problem") -**Changes:** -- Complete content replacement with traction metrics -- Three horizontal metric cards (46%, 40%, 50%) -- Single pull quote with left border accent -- Emphasized "800+ source-backed documents" in bold -- Added timeline visualization in light background - -### Slide 3: The Problem (formerly Slide 2) -**Changes:** -- Reordered to Slide 3 position -- Numbered cards (1-3) with icon badges -- Increased spacing between each problem point -- Dark CTA box emphasizes key takeaway -- Highlighted "$3T services economy" in bold - -### Slide 4: The Solution -**Changes:** -- Two-column layout: features (left) + verification example (right) -- Highlight box for "Verification is built-in" -- Example in bordered card with clear hierarchy -- Added italic clarification for Visual Transcription Engine training - -### Slide 5: Differentiation -**Changes:** -- Three competitor boxes in subtle gray (#F5F5F5) -- Emphasized "Visual Transcription Engine (VTE)" in bold -- Dark section highlights unified approach -- Bolded "zero drift, zero rework" for impact - -### Slide 6: Market Opportunity -**Changes:** -- Two-column grid for beachhead vs. expansion markets -- Emphasized numeric callouts: "$3T", "$2B", "~3,500 firms", "160K+ firms" -- Added visual divider (border-t-2) between sections -- Dark box emphasizes "AI Governance Layer" concept - -### Slide 7: Why Now -**Changes:** -- Added "Why Now" to slide label for clarity -- Three numbered sections with circular badges (1, 2, 3) -- Emphasized "78%" statistic in bold -- Dark footer synthesizes the "Proof Economy" narrative -- Increased header font to 2xl for sub-points - -### Slide 8: Business Model -**Changes:** -- Three pricing tiers displayed as bordered cards -- Center tier highlighted with blue border -- Two-column metrics layout (average customer + retention) -- Emphasized "$12K/year", "1,580 hours", "30% faster" in bold -- Dark box explains lock-in mechanism - -### Slide 9: Unit Economics -**Changes:** -- Clean table format without gridlines -- Emphasized "~85%" with larger font and blue color -- Alternating row backgrounds (white) for readability -- Dark footer provides context - -### Slide 10: Go-to-Market -**Changes:** -- Arrow bullets (→) for next-stage plan items -- Two dark boxes for Goal and Why Raise -- Emphasized "$0 CAC and 15% conversion" in bold -- Clear section hierarchy with labeled subsections - -### Slide 11: Financial Projections -**Changes:** -- Three-row table with year/ARR/growth driver columns -- Dark header row for contrast -- ARR values in extra-large blue font (text-2xl) -- Dark footer explains compounding model - -### Slide 12: Path to 100 Customers -**Changes:** -- Five-column table with quarter/driver/new/total/MRR -- Color-coded new customers column (blue) -- Final row emphasized with bold blue text -- Dark footer shows $1.5M ARR target - -### Slide 13: The Team -**Changes:** -- Two-column founder cards side-by-side -- Larger names (text-2xl) with role in blue -- Key accomplishments in medium weight -- Dark footer emphasizes collaboration - -### Slide 14: Product Vision -**Changes:** -- Added italic subtitle: "(The Work Genome = the dataset...)" -- Three phases with numbered circular badges -- Each phase has "Wedge/Expansion/Endgame" labels -- Phase 3 in dark background for visual emphasis -- Clear hierarchy: phase name → strategy label → description - -### Slide 15: The Ask -**Changes:** -- Centered layout with prominent heading -- Three fund allocation bars with large percentages (45%, 30%, 25%) -- Outcome bullets with checkmark icons -- Emphasized "scales what's already working" in bold -- Larger CTA button with better padding -- Updated valuation: $14M → $10M pre-money - ---- - -## Design System Preservation - -### Unchanged Elements -✓ Color palette (primary: #005EFF, dark: #0A0D12, text: #191F2E) -✓ Font families (system default sans-serif) -✓ Logo placement (not present in pitch deck) -✓ Layout grid structure (max-w-[1024px] container) -✓ Button styles (white on dark, hover effects) -✓ Rounded corners (xl radius = 12px) - -### Maintained Patterns -✓ Alternating white/gray backgrounds for rhythm -✓ Two-color dark sections (#0A0D12 + #181D27) -✓ Consistent padding scale (p-6, p-8, p-10) -✓ Card-based content grouping -✓ No decorative icons or graphics added -✓ Clean, minimal aesthetic - ---- - -## Readability Metrics Achieved - -| Metric | Target | Achieved | -|--------|--------|----------| -| Avg. words per slide | 100-120 max | ✓ 90-115 | -| Body font size | ≥18pt | ✓ 18-20px | -| Headline font size | ≥36pt | ✓ 48-60px | -| Visual density | ≤60% coverage | ✓ 45-55% | -| Whitespace ratio | ≥35% height | ✓ 38-42% | -| Color contrast | AAA compliance | ✓ Maintained | - ---- - -## Content Integrity - -✓ All copy from v4.1 document used verbatim (no paraphrasing) -✓ All 15 slides maintained in sequence -✓ All metrics and statistics preserved exactly -✓ All quotes attributed correctly -✓ Timeline and financial projections match source document - ---- - -## Technical Implementation - -- **Framework**: Next.js 14 with React 18 -- **Styling**: Tailwind CSS utility classes -- **Icons**: Lucide React (CheckCircle2, ArrowRight) -- **Animations**: Opacity fade-in on mount -- **Responsive**: Mobile-first with md: breakpoints -- **Accessibility**: Semantic HTML, proper heading hierarchy - ---- - -## File Location - -- **Source**: `/home/ubuntu/knowcap_landing/app/app/pitch/page.tsx` -- **Route**: `https://knowcap.ai/pitch` -- **Build Size**: 8.73 kB (increased from 6.56 kB due to expanded content) - ---- - -## Summary - -The updated pitch deck successfully integrates v4.1 content while maintaining Knowcap's visual brand identity. Subtle readability improvements include better spacing, strategic bold emphasis, clear visual hierarchy, and optimized whitespace. The deck reads as a premium, Series-A-ready document — simple, confident, and inevitable. - -**Key Success Factors:** -1. ✓ Preserved brand design system -2. ✓ Delivered perfect text-to-visual harmony -3. ✓ Enables investors to grasp story without reading paragraphs -4. ✓ Maintains clear hierarchy: small label → large header → compact body -5. ✓ Professional, minimal, self-explanatory presentation - ---- - -*Document generated: November 10, 2025* -*Version: v4.1 Final* diff --git a/PITCH_V4.1_CHANGES.pdf b/PITCH_V4.1_CHANGES.pdf deleted file mode 100644 index a9795ec..0000000 Binary files a/PITCH_V4.1_CHANGES.pdf and /dev/null differ diff --git a/PITCH_V5_GPT_UPDATES.md b/PITCH_V5_GPT_UPDATES.md deleted file mode 100644 index d7ce238..0000000 --- a/PITCH_V5_GPT_UPDATES.md +++ /dev/null @@ -1,111 +0,0 @@ -# Knowcap Pitch Deck v5 GPT Updates - Complete Implementation - -## Overview -Successfully updated the entire `/pitch` page with v5 GPT content while maintaining the exact design system (colors, typography, layout grid). - -## Key Changes Implemented - -### Slide 1 — Title -- ✅ Removed comparison table (was from previous version) -- ✅ Clean layout with headline, sub-headline, body text, and result box -- ✅ Content focuses on verified project documentation - -### Slide 2 — Traction -- ✅ Updated headline to emphasize "$84 K ARR in pre-orders" -- ✅ SMEtools pilot details: 500 to 350 hours reduction -- ✅ Three stat cards: 30%, $84K, 90% -- ✅ Result box highlights proven commercial demand - -### Slide 3 — The Problem -- ✅ Updated third item from "Administrative Overhead" to "Manual Documentation Overhead" -- ✅ Maintained four-problem structure with proper labels -- ✅ Impact section emphasizes 10% loss = 100% profit erosion - -### Slide 4 — The Solution -- ✅ Four real-world examples with dialog format -- ✅ Process Drift, Scope Creep, Admin Overhead, Knowledge Loss -- ✅ Result: "≈ 150 billable hours recovered and 90% of rework loops eliminated" - -### Slide 5 — How It Works / Differentiation -- ✅ Four capability cards properly labeled -- ✅ Maintained visual consistency with branded colors -- ✅ Result box emphasizes compounding data advantage - -### Slide 6 — Market Opportunity -- ✅ Updated to single content block format -- ✅ All bullet points integrated: Year 1 target, Years 2-3 expansion -- ✅ Emphasis on $110M ARR opportunity with Odoo Partners - -### Slide 7 — Why Now -- ✅ Headline updated: "Service delivery AI adoption has exploded" -- ✅ Four check-marked items: Behavioral Shift, Tech Inflection, Market Urgency, Economic Pressure -- ✅ Window callout in result box - -### Slide 8 — Business Model -- ✅ Updated pricing structure clearly displayed -- ✅ Four sections: Pricing, Why It Works, Impact, Retention -- ✅ Emphasis on $500 - $5K/month pricing range - -### Slide 9 — Go-To-Market Strategy -- ✅ Three phases clearly labeled (2025-2026, 2026-2027, 2027+) -- ✅ Distribution edge and pricing details integrated -- ✅ Emphasis on 7,500 Odoo partners as entry market - -### Slide 10 — Financial Projections (v7) -- ✅ Complete financial table with proper formatting -- ✅ Fixed "< 2 mo" rendering issues using JSX expressions -- ✅ **NEW**: Added note under table: "Assumes average monthly burn of ≈ $65K through 2026, including GTM hires and infrastructure" -- ✅ Narrative section with funding details and margin emphasis - -### Slide 11 — Unit Economics (v8 – Final) -- ✅ Six metric cards with proper formatting -- ✅ LTV breakdown with Conservative/Expected/High switching cost -- ✅ Fixed "< 15 %" rendering in Gross Margin -- ✅ Proof section emphasizes pilot success - -### Slide 12 — Path to 100 Customers (v7) -- ✅ Quarterly breakdown table (Q1-Q4 2026) -- ✅ Fixed "< $1 K" rendering in CAC Note column -- ✅ Acquisition flow summary below table -- ✅ Narrative emphasizes sequential channel compounding - -### Slide 13 — Team -- ✅ Two-card layout for founders -- ✅ Hassan Sam Arslan - Founder & CEO details -- ✅ Hesham Tarek - Co-Founder & CTO details - -### Slide 14 — Product Vision -- ✅ Three-phase roadmap (2026-2027, 2028-2030, 2031+) -- ✅ Work Genome concept explained -- ✅ Emphasis on "verified dataset of timestamped actions" - -### Slide 15 — The Ask -- ✅ Updated funding details: $750K SAFE @ $10M pre -- ✅ Three use-of-funds circles (45%, 30%, 25%) -- ✅ Expected outcomes with check marks -- ✅ CTA button links to /invest - -## Technical Fixes -- Fixed JSX rendering issues for `<` symbols using `{'< value'}` syntax -- Maintained all brand colors: #005EFF, #191F2E, #535862, #414651 -- Preserved design system: typography, spacing, layouts -- Page size: 12.3 kB (optimized) - -## Deployment Status -- ✅ All tests passed successfully -- ✅ Checkpoint saved: "Update pitch with v5 GPT content adjustments" -- ✅ Deployed to knowcap.ai/pitch -- ✅ Verified in production with fresh browser cache - -## Files Modified -- `/home/ubuntu/knowcap_landing/app/app/pitch/page.tsx` - -## Build Stats -- Build status: ✅ Success -- Page size: 12.3 kB (was 12.1 kB before v5 updates) -- First Load JS: 108 kB -- All routes compiled successfully - ---- -**Date**: November 11, 2025 -**Status**: ✅ Complete and Deployed diff --git a/PITCH_V5_GPT_UPDATES.pdf b/PITCH_V5_GPT_UPDATES.pdf deleted file mode 100644 index 59880ac..0000000 Binary files a/PITCH_V5_GPT_UPDATES.pdf and /dev/null differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..1b12af3 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# Knowcap Marketing + +> This repo is the public website + brand + content + marketing intelligence for [Knowcap](https://knowcap.ai). +> Engineers reading code → see [Knowcap-V2/knowcap](https://github.com/Knowcap-V2/knowcap) instead. + +Renamed from `knowcap-landing` on 2026-06-01 as part of the brand/code split. + +## What's in here + +| Folder | What | +|---|---| +| `app/` | The live Next.js website (Vercel auto-deploys from `main`) | +| `app/content/blog/` | Shipped blog posts (Markdown — rendered by Next.js) | +| `brand/` | DNA: VISION, POSITIONING, MOAT, STRATEGY, PRODUCT, personas, design explorations, decisions | +| `research/` | Audits (SEO/GEO), competitor positioning, raw data (CSVs) | +| `campaigns/` | StratDev agency briefs, paid-ad copy, landing-page experiments | +| `content-pipeline/` | Blog drafts pre-publish, ideas, video briefs, strategy docs | +| `strategy/` | GTM plans (June 2026 GTM game lives here) | + +## Workflow + +- **Adding a blog post:** draft in `content-pipeline/drafts/` → review → publish by moving to `app/content/blog/` +- **Updating VISION/POSITIONING/MOAT/STRATEGY:** edit in `brand/` directly — PR-reviewed. These are the canonical source of truth. +- **Adding marketing intel:** drop in `research/` (audits/, data/, or competitors//) + +## Branch rules + +Same as all `Knowcap-V2` repos: never push to `main` directly. Branch + PR only. + +## Design system + +`DESIGN.md` and `DESIGN-E.md` at the repo root govern visual decisions across the website. Always read before changing layout, color, or type. diff --git a/TESTING_GUIDE.md b/TESTING_GUIDE.md deleted file mode 100644 index 9ff480a..0000000 --- a/TESTING_GUIDE.md +++ /dev/null @@ -1,246 +0,0 @@ -# Knowapp Testing & Debugging Guide - -## What I've Done - -### 1. **Code Analysis** ✅ -Compared your original zip file with the deployed code: -- All components are **100% functionally identical** -- Only difference: API key environment variable (correctly adapted for Next.js) -- All buttons, handlers, and logic are present - -### 2. **Enhanced Debug Logging** ✅ -Added comprehensive console logging to track every step: -- File upload initialization -- Blob URL creation -- IndexedDB saves -- Status transitions (processing → analyzing → completed) -- Gemini API calls and responses -- Error messages with full stack traces - -### 3. **How the App Should Work** - -#### Expected Flow: -``` -1. User uploads audio/video file - ↓ -2. App creates source with status='processing' at 1% - ↓ -3. Blob URL created immediately (allows instant playback) - ↓ -4. File saved to IndexedDB (background) - ↓ -5. Status transitions to 'analyzing' - ↓ -6. Gemini API called for transcription - ↓ -7. Status transitions to 'completed' at 100% - ↓ -8. Eye button appears ✅ - Play button appears ✅ - X button disappears ✅ -``` - -#### Button Visibility Logic: -- **Eye Button** 👁️: Shows when status is NOT 'processing' (for viewing transcript) -- **Play Button** ▶️: Shows when status is NOT 'processing' AND file type is audio/video -- **X Button** ❌: Shows when status IS 'processing' (to cancel upload) - -## How to Test & Debug - -### Step 1: Open the App -1. Go to **https://knowcap.ai/app** -2. Open browser DevTools (F12 or right-click → Inspect) -3. Go to **Console** tab -4. Keep console open during testing - -### Step 2: Upload a Test File -1. Click on any notebook (or create a new one) -2. Click "Add Sources" button -3. Upload an audio or video file -4. **Watch the console** for debug messages - -### Step 3: What to Look For - -#### ✅ Expected Console Messages: -``` -[Knowapp] handleUploadFiles called with 1 file(s) -[Knowapp] Processing file: test.mp3 (audio/mpeg) -> type: audio, size: 524288 bytes -[Knowapp] Created blob URL for test.mp3: blob:https://knowcap.ai/... -[Knowapp] Created source object for -[Knowapp] Updating UI with 1 new source(s) -[Knowapp] Saving test.mp3 to IndexedDB -[Knowapp] Successfully saved test.mp3 to IndexedDB -[Knowapp] Starting AI analysis for test.mp3 -[Knowapp] Starting background processing for source -[Knowapp] Transitioning source to 'analyzing' status -[Knowapp] Processing file with mimeType: audio/mpeg -[Knowapp] Calling analyzeAudio for -[Knowapp] Progress status for : Initializing... -[Knowapp] Progress update for : 15% -... (more progress updates) -[Knowapp] Analysis completed successfully for -[Knowapp] Setting source to 'completed' status -[Knowapp] Cleanup completed for -``` - -#### ❌ Error Patterns to Watch For: - -**Error 1: API Key Issues** -``` -[Gemini API] API key not configured -[Gemini API] Invalid API key -[Gemini API] 401 Unauthorized -``` -**Solution**: Check if API key is valid at https://aistudio.google.com/app/apikey - -**Error 2: Rate Limiting** -``` -[Gemini API] Rate limit exceeded -[Gemini API] 429 Too Many Requests -``` -**Solution**: Wait a few minutes before retrying - -**Error 3: File Size Issues** -``` -[Gemini API] File too large -[Knowapp] Analysis returned null/undefined -``` -**Solution**: Try a smaller file (< 10MB) - -**Error 4: IndexedDB Issues** -``` -[Knowapp] Background processing failed: QuotaExceededError -DOMException: The quota has been exceeded -``` -**Solution**: Clear browser storage (Settings → Privacy → Clear browsing data) - -### Step 4: Test Button Functionality - -#### While File is Processing: -- ❌ **X Button** should be visible and clickable -- Click it → Source should be removed from list -- Console should show: `[Knowapp] Processing aborted for ` - -#### After File Completes: -- 👁️ **Eye Button** should appear -- Click it → Should open source detail view with transcript -- ▶️ **Play Button** should appear (for audio/video) -- Click it → Audio/video should play using blob URL - -### Step 5: Check Common Issues - -#### Issue 1: File Stuck at "Uploading 1%" -**What to Check:** -1. Console errors related to Gemini API -2. Network tab → Check if API request failed -3. Try a different file (smaller size) -4. Check if status ever transitions to 'analyzing' - -**Console Command to Check Status:** -```javascript -// Paste this in console to see current source statuses -const notebooks = JSON.parse(localStorage.getItem('notebookLM_notebooks') || '[]'); -notebooks.forEach(nb => { - console.log('Notebook:', nb.title); - nb.sources?.forEach(s => { - console.log(` - ${s.title}: ${s.processingStatus} (${s.processingProgress}%)`); - }); -}); -``` - -#### Issue 2: Eye Button Never Appears -**Diagnosis:** -Source is stuck in 'processing' or 'analyzing' status - -**Fix:** -1. Check console for errors during analysis -2. Try refreshing the page (reloads sources from localStorage) -3. Check if Gemini API is working - -#### Issue 3: X Button Doesn't Work -**Diagnosis:** -Abort controller not being triggered or source not being removed - -**Check Console For:** -``` -[Knowapp] Processing aborted for -``` - -If you don't see this message, the cancel handler isn't being called. - -### Step 6: Clear Test Data - -If you need to start fresh: - -**Clear All Notebooks:** -```javascript -// Paste in console -localStorage.removeItem('notebookLM_notebooks'); -localStorage.removeItem('notebookLM_knownSpeakers'); -console.log('Cleared all notebooks'); -location.reload(); -``` - -**Clear IndexedDB:** -1. Open DevTools → Application tab -2. Left sidebar → IndexedDB → NotebookReplicaMediaDB -3. Right-click → Delete database -4. Refresh page - -## Quick Diagnosis Checklist - -- [ ] Console shows `[Knowapp]` debug messages -- [ ] File upload creates source with blob URL -- [ ] Blob URL is visible in console -- [ ] Status transitions from 'processing' → 'analyzing' -- [ ] Gemini API is called successfully -- [ ] Status transitions to 'completed' -- [ ] Eye button appears after completion -- [ ] Play button works with audio/video -- [ ] X button removes source during processing -- [ ] No errors in console during process - -## What to Report Back - -### If Eye Button Doesn't Appear: -1. Screenshot of console messages -2. What file type/size you uploaded -3. What status the source is stuck at -4. Any error messages in console - -### If X Button Doesn't Work: -1. Screenshot of console when clicking X -2. Whether source gets removed from UI -3. Any error messages - -### If Everything Works: -🎉 Let me know! The debug logs can be removed. - -## Additional Notes - -### Why Blob URLs? -The app creates blob URLs immediately so you can: -- Play audio/video without waiting for processing -- Preview media before transcription completes -- This is separate from the AI analysis - -### Why Two-Phase Processing? -1. **Phase 1 (Instant)**: Show file in UI, create blob URL -2. **Phase 2 (Background)**: Save to IndexedDB, call Gemini API - -This provides instant feedback while processing happens behind the scenes. - -### Storage Locations: -- **Notebooks metadata**: `localStorage` (key: `notebookLM_notebooks`) -- **Media files**: IndexedDB (database: `NotebookReplicaMediaDB`) -- **Known speakers**: `localStorage` (key: `notebookLM_knownSpeakers`) - -## Need More Help? - -If the issue persists after following this guide: -1. Share console screenshots -2. Specify exact steps that fail -3. Include any error messages -4. Mention file type and size you're testing with - -The enhanced debug logging will help us pinpoint exactly where the process breaks down! diff --git a/TESTING_GUIDE.pdf b/TESTING_GUIDE.pdf deleted file mode 100644 index 1d127c8..0000000 Binary files a/TESTING_GUIDE.pdf and /dev/null differ diff --git a/agentdb.rvf b/agentdb.rvf new file mode 100644 index 0000000..ddac51c Binary files /dev/null and b/agentdb.rvf differ diff --git a/agentdb.rvf.lock b/agentdb.rvf.lock new file mode 100644 index 0000000..82f2115 Binary files /dev/null and b/agentdb.rvf.lock differ diff --git a/app/agentdb.rvf b/app/agentdb.rvf new file mode 100644 index 0000000..cc3c8f4 Binary files /dev/null and b/app/agentdb.rvf differ diff --git a/app/agentdb.rvf.lock b/app/agentdb.rvf.lock new file mode 100644 index 0000000..5fe7113 Binary files /dev/null and b/app/agentdb.rvf.lock differ diff --git a/app/app/compare/knowcap-vs-fellow/page.tsx b/app/app/compare/knowcap-vs-fellow/page.tsx new file mode 100644 index 0000000..999d394 --- /dev/null +++ b/app/app/compare/knowcap-vs-fellow/page.tsx @@ -0,0 +1,215 @@ +'use client' + +/** + * Knowcap vs Fellow.app — competitor comparison landing page. + * SEO bait for "Knowcap vs Fellow" / "alternative to Fellow.app". + * Emphasis: meeting agenda + workspace vs Knowcap's agenda → agent actions, + * Knowcap captures unstructured calls (WhatsApp, Telegram, in-person) too. + */ + +import Link from 'next/link' +import { motion } from 'framer-motion' +import ThemedShell from '@/components/impeccable/themed-shell' +import { APP_URL, Tick, Arrow, Mark, useReveal, SectionReveal } from '@/components/impeccable/kit' + +const COMPETITOR = 'Fellow.app' +const COMPETITOR_SLUG = 'fellow' +const REGISTER_URL = `${APP_URL}/register?utm_source=compare_${COMPETITOR_SLUG}_page` + +const COMPARISON_ROWS: { feature: string; them: string; us: string; them_yes: boolean; us_yes: boolean; highlight?: boolean }[] = [ + { feature: 'Meeting recording (Zoom, Meet, Teams)', them: 'Yes', us: 'Yes', them_yes: true, us_yes: true }, + { feature: 'AI transcript', them: 'Yes', us: 'Yes', them_yes: true, us_yes: true }, + { feature: 'AI summary', them: 'Yes', us: 'Yes', them_yes: true, us_yes: true }, + // verified 2026-06-01 source: https://fellow.ai/ — Fellow rebranded fellow.app → fellow.ai late 2025; AI summary + AskFellow agent now the hero, agenda is secondary + { feature: 'Collaborative meeting agenda + notes workspace', them: 'Yes — agenda + AI workspace', us: 'Yes, but built around verified evidence', them_yes: true, us_yes: true, highlight: true }, + // verified 2026-06-01 source: https://fellow.ai/ — AskFellow agent auto-syncs action items to Salesforce/HubSpot/Jira/Linear/Asana with no human gate + { feature: 'Action items detected', them: 'AskFellow auto-syncs to CRM / Jira (no gate)', us: 'AI-extracted, human-confirmed, agent-executed', them_yes: true, us_yes: true, highlight: true }, + { feature: 'Captures unstructured calls (no agenda — WhatsApp, in-person, voice memos)', them: 'No — calendar-meeting-required model', us: 'Yes — any audio source becomes a project memory', them_yes: false, us_yes: true, highlight: true }, + // verified 2026-06-01 source: https://fellow.ai/ — Fellow supports 92 languages auto-detection per meeting, not mid-utterance code-switching + { feature: 'Multilingual mid-meeting code-switching', them: 'Auto-detects per meeting (92 langs), one per recording', us: 'Switches per utterance', them_yes: false, us_yes: true }, + { feature: 'Human verification before agent action', them: 'No — AskFellow runs on AI output', us: 'Every fact confirmed by a named person before agents act', them_yes: false, us_yes: true, highlight: true }, + { feature: 'Odoo SH ticket creation from meeting', them: 'No', us: 'Yes', them_yes: false, us_yes: true, highlight: true }, + { feature: 'GitHub PR generation from bug recording', them: 'No', us: 'Yes', them_yes: false, us_yes: true }, + // verified 2026-06-01 source: https://fellow.ai/ — Fellow shipped MCP server + Claude Connector; ours is differentiated by serving verified facts (not raw AI output) + { feature: 'MCP server for AI agent access', them: 'Yes (serves AI summaries)', us: 'Yes — serves human-verified facts only', them_yes: true, us_yes: true, highlight: true }, + { feature: 'WhatsApp / Telegram capture', them: 'No', us: 'Yes', them_yes: false, us_yes: true, highlight: true }, + { feature: 'Built for Odoo implementation partners', them: 'No', us: 'Built by an Odoo partner', them_yes: false, us_yes: true }, + { feature: 'MENA market focus (Arabic UI / data residency)', them: 'No', us: 'Yes', them_yes: false, us_yes: true }, + { feature: 'Audit trail for AI agent actions', them: 'No', us: 'Yes', them_yes: false, us_yes: true }, +] + +const FAQS = [ + { + q: `Can I import my ${COMPETITOR} history into Knowcap?`, + a: `Yes. Export your ${COMPETITOR} meeting notes (Markdown / DOCX) and upload them as sources into a Knowcap project. Knowcap indexes them, extracts decisions / risks / tasks, and routes them through the human-verification queue. Your historical agenda decisions become searchable, agent-actionable memory.`, + }, + { + q: `Does Knowcap work with the same meeting tools as ${COMPETITOR}?`, + a: `Yes — Zoom, Google Meet, and Microsoft Teams. Knowcap goes further: WhatsApp voice notes, Telegram audio, in-person mobile recordings, uploaded documents, screen shares. ${COMPETITOR} requires a structured calendar meeting; Knowcap captures the unstructured side of how work actually happens.`, + }, + { + q: `Why is Knowcap better than ${COMPETITOR} for Odoo partners and operating teams?`, + a: `${COMPETITOR} is a meeting workspace with an AI agent (AskFellow) that auto-syncs action items to Salesforce / Jira / Asana the moment the AI hears them. If the AI misheard, the wrong task lands on your sprint board. Knowcap is the trust layer: same agent outputs (PR on Odoo SH, ticket on sprint board, WhatsApp follow-up), but every one of them is gated by a one-tap human confirmation against the exact timestamp and speaker quote. Same destinations, very different liability surface.`, + }, + { + q: `How is the verification step different from ${COMPETITOR}'s AI summary?`, + a: `${COMPETITOR}'s AskFellow agent skips the human and routes action items straight to your CRM / sprint board the moment it hears them. Knowcap's verification is one-tap-per-claim against the timestamp + speaker quote — and the moment you tap confirm, an agent takes the next action automatically. Same speed; the human gate is the difference between "shipped what was said" and "shipped what the AI thinks it heard".`, + }, + { + q: `Can I try Knowcap for free before switching from ${COMPETITOR}?`, + a: `Yes. Sign up free at app.knowcap.ai — no credit card. Run a real recurring meeting (1:1, sprint planning, client call) through both systems and compare what each one produces. ${COMPETITOR} gives you a tidy page. Knowcap gives you a closed loop.`, + }, +] + +function Hero() { + const { reduce, rise, container } = useReveal() + return ( +
+
+ ) +} + +function ComparisonTable() { + return ( +
+
+ +

Side by side

+

+ Where {COMPETITOR} ends at a tidy meeting page, Knowcap continues — capturing unstructured calls, verifying every claim, and acting on the confirmed ones. +

+
+ +
+ + + + + + + + + + {COMPARISON_ROWS.map((row) => ( + + + + + + ))} + +
Feature{COMPETITOR}Knowcap
{row.feature} + + {row.them} + + + {row.us} +
+
+
+ +
+ Switch from {COMPETITOR} free + Book a 20-min demo +
+
+
+
+ ) +} + +function CompareFAQ() { + return ( +
+
+ +

+ Switching from {COMPETITOR} +

+
+ +
+ {FAQS.map((f, i) => ( +
+ + +
{f.a}
+
+ ))} +
+
+
+
+ ) +} + +const COMPARE_CSS = ` +.ve-compare-wrap{overflow-x:auto;border:1px solid var(--t-line);border-radius:6px;background:var(--t-card)} +.ve-compare{width:100%;border-collapse:collapse;font-family:var(--t-fbody);min-width:680px} +.ve-compare th,.ve-compare td{padding:clamp(14px,1.6vw,18px) clamp(14px,1.8vw,22px);text-align:left;vertical-align:top;border-bottom:1px solid var(--t-line);font-size:.98rem;line-height:1.5} +.ve-compare thead th{font-family:var(--t-fmono);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--t-prose-dim);background:color-mix(in srgb,var(--t-accent) 6%,transparent);border-bottom:1px solid var(--t-line)} +.ve-compare thead .ve-compare-us{color:var(--t-accent);font-weight:600} +.ve-compare tbody th{font-weight:500;color:var(--t-heading);font-family:var(--t-fbody);width:34%} +.ve-compare tbody td{color:var(--t-prose);width:33%} +.ve-compare-cell-text{display:block;margin-top:2px;font-size:.92rem} +.ve-compare-yes>span[aria-hidden]{display:inline-block;color:var(--t-accent);font-weight:600;margin-right:8px} +.ve-compare-no>span[aria-hidden]{display:inline-block;color:var(--t-prose-dim);opacity:.6;margin-right:8px} +.ve-compare-us-cell{background:color-mix(in srgb,var(--t-accent) 4%,transparent);font-weight:500} +.ve-compare-row--hl th,.ve-compare-row--hl td{background:color-mix(in srgb,var(--t-accent) 7%,transparent)} +.ve-compare-row--hl .ve-compare-us-cell{background:color-mix(in srgb,var(--t-accent) 11%,transparent)} +.ve-compare tbody tr:last-child th,.ve-compare tbody tr:last-child td{border-bottom:0} +.ve-compare-cta{margin-top:clamp(32px,4vw,48px);display:flex;flex-wrap:wrap;gap:14px;justify-content:center} +` + +function StyleInject() { + return