Skip to content

thisyearnofear/Saywaht

 
 

Repository files navigation

saywaht (prev AppCut)

A free, open-source video editor for web, desktop, and mobile.

Why?

  • Privacy: Your videos stay on your device
  • Free features: Every basic feature of CapCut is paywalled now
  • Simple: People want editors that are easy to use - CapCut proved that

Features

🎬 Video Creation

  • Timeline-based editing - Professional video editing in your browser
  • Multi-track support - Layer videos, audio, and effects
  • Real-time preview - See changes instantly
  • Intelligent export - Multiple export methods with automatic optimization:
    • Backend export - Professional FFmpeg processing for maximum quality
    • Offline rendering - Reliable browser-based processing
    • Auto-selection - Intelligently chooses the best method for your content

⛓️ Decentralized Storage (Filecoin + IPFS)

  • Dual-layer storage routing - Automatically selects optimal storage based on file size:
    • ≤8MB: Grove/IPFS - Fast, free, instant availability
    • 8MB-254MB: Filecoin (FilCDN) - Permanent, verifiable, cost-effective
  • Filecoin export archival - Exported video + caption transcript JSON archived via Synapse SDK
  • Content-addressed storage - Videos identified by unique CID (Content Identifier)
  • Permanent availability - No server maintenance, no deletion risk
  • Censorship-resistant - Distributed across global storage network
  • Zora integration - Exported videos automatically linked to creator coins

🪙 Creator Economy

  • Video creator coins - Each video becomes a tradeable coin using Zora Protocol
  • Creator-supporter trading - Fans can invest in creators through coin trading
  • Automated rewards - Creators earn from trading fees (50% of all trades)
  • Uniswap V4 integration - Seamless liquidity and price discovery

🤖 AI & Privacy

  • On-device Whisper transcription - AI captioning runs 100% in browser (no audio sent to servers)
  • Privacy-preserving AI - Your voice never leaves your device
  • Offline AI processing - Works without internet after model download
  • Open-source models - Uses HuggingFace Transformers.js (open weights)

Filecoin Architecture

flowchart LR
  A["Timeline edit in browser"] --> B["Export pipeline (offline/backend)"]
  A --> C["Whisper transcription in browser"]
  C --> D["Caption entries JSON"]
  B --> E["Exported video blob"]
  E --> F["/api/filecoin/upload"]
  D --> F
  F --> G["Synapse SDK + Filecoin Calibration PDP"]
  G --> H["FilCDN retrieval URLs (video/captions)"]
  H --> I["Manifest JSON upload to FilCDN"]
  I --> J["Retrieval links in metadata"]
Loading
  • Exports larger than 8MB and captioned exports are archived to Filecoin.
  • Archive output includes video URL/CID, captions URL/CID, and a retrieval manifest URL/CID.
  • FILECOIN_CALIBRATION_RPC is used by status checks and Synapse upload initialization.

🔐 Decentralized & Private

  • Wallet-based authentication - No accounts, just connect your Web3 wallet
  • No watermarks or subscriptions - Completely free and open source
  • Mobile-first design - Optimized for mobile without traditional navigation
  • No data collection - Content stays decentralized, not on our servers

Project Structure

  • apps/web/ – Main Next.js web application
  • src/components/ – UI and editor components
  • src/hooks/ – Custom React hooks
  • src/lib/ – Utility and API logic
  • src/stores/ – State management (Zustand, etc.)
  • src/types/ – TypeScript types

Tech Stack

  • Framework: Next.js 15 with App Router
  • Language: TypeScript (strict mode enabled)
  • Styling: Tailwind CSS
  • Icons: React Icons (Lucide variants)
  • State Management: Zustand
  • Web3: Wagmi, Viem, WalletConnect
  • Storage: Grove/IPFS + Filecoin (FilCDN via Synapse SDK), Upstash Redis
  • Blockchain: Base (Ethereum L2), Zora Protocol
  • Video Processing: FFmpeg (backend), WebCodecs API (frontend)
  • Backend Service: Node.js + Express for video export processing
  • Package Manager: Bun (recommended)

Getting Started

Prerequisites

Before you begin, ensure you have the following installed on your system:

  • Bun (recommended) or Node.js
  • A Web3 wallet (MetaMask, WalletConnect, etc.) for authentication

Setup

  1. Clone the repository

    git clone <repo-url>
    cd saywaht
  2. Install dependencies

    bun install
  3. Database Setup (Recommended for Auth)

    Create a Neon PostgreSQL database:

    a. Sign up at Neon and create a new project b. Skip Neon Auth - saywaht has its own auth system c. Copy your connection string d. Configure environment variables:

    # packages/db/.env.local
    DATABASE_URL=postgresql://user:password@host.neon.tech/neondb?sslmode=require
    
    # apps/web/.env.local  
    DATABASE_URL=postgresql://user:password@host.neon.tech/neondb?sslmode=require

    e. Push the database schema:

    cd apps/web
    npx drizzle-kit push
  4. Environment Setup (Optional)

    For full functionality, create apps/web/.env.local:

    # Database (Required for auth features)
    DATABASE_URL=your-postgresql-connection-string
    
    # Wallet Connection (Required for mobile wallet support)
    NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=your-walletconnect-project-id
    
    # Core Features (Required for FilCDN + Trading)
    FILECOIN_PRIVATE_KEY=your-filecoin-private-key
    FILECOIN_WALLET_ADDRESS=0xYourWalletAddress
    FILECOIN_CALIBRATION_RPC=https://api.calibration.node.glif.io/rpc/v1
    NEXT_PUBLIC_FILECOIN_CALIBRATION_RPC=https://api.calibration.node.glif.io/rpc/v1
    ZORA_API_KEY=your-zora-api-key
    
    # Storacha (Optional - for permanent caption archival)
    # Get started at: https://storacha.network/
    STORACHA_PRIVATE_KEY=your-storacha-private-key
    STORACHA_DELEGATION=your-delegation-proof
    
    # Backend Export Service (Optional - enables server-side video processing)
    NEXT_PUBLIC_BACKEND_EXPORT_URL=http://157.180.36.156:3100
    
    # Optional Features
    ELEVENLABS_API_KEY=your-elevenlabs-key
    UPSTASH_REDIS_REST_URL=your-redis-url
    UPSTASH_REDIS_REST_TOKEN=your-redis-token
    
    # Analytics (Optional)
    # DataBuddy - 100% Anonymized & Non-invasive analytics
    # Get your client ID from: https://www.databuddy.cc
    NEXT_PUBLIC_DATABUDDY_CLIENT_ID=your-databuddy-client-id

    Note: To enable mobile wallet connections (MetaMask Mobile, Trust Wallet, etc.), get a free WalletConnect Project ID from https://cloud.walletconnect.com/ and add it to your .env.local file. Without this, only browser extension wallets will be available.

  5. Start the development server

    bun run dev
  6. Connect your wallet & start creating

    • Open http://localhost:3000
    • Connect your Web3 wallet (MetaMask, WalletConnect, etc.)
    • Start creating and trading video coins immediately!
  7. Explore the platform

    • Landing (/) - Wallet connection and coin discovery
    • Editor (/editor) - Professional video editing with FilCDN
    • Trading (/trade) - Creator coin marketplace

The application will be available at http://localhost:3000.

Development Status

Recent Improvements ✅

  • TypeScript Strict Mode: Full compliance with TypeScript strict mode for better type safety
  • Icon Library Migration: Migrated from lucide-react to react-icons for better compatibility
  • Build Optimization: Resolved all TypeScript compilation errors for production builds
  • Component Type Safety: Enhanced type definitions across all React components
  • Production Ready: Successfully building and deploying without errors

Current Features

  • Video Editor: Timeline-based editing with multi-track support
  • Web3 Integration: Wallet connection and authentication
  • IPFS Storage: Decentralized file storage via Grove
  • Filecoin Archive: Exported videos + caption transcripts archived to FilCDN
  • AI Transcription: On-device Whisper.js caption generation
  • Storacha (Optional Add-on): Can be added as secondary archival layer for transcripts
  • Creator Coins: Video tokenization using Zora Protocol
  • Multi-tier Storage: Automatic routing between Grove/Filecoin
  • Mobile Support: Responsive design optimized for mobile devices
  • TypeScript: Full type safety with strict mode enabled
  • Farcaster Mini App: Fully native experience within Warpcast with hash-based navigation
  • Simplified Mobile Minting: 3-step streamlined flow for creating and deploying coins
  • Real-time Discovery: Integrated trading feed with video preview and sorting
  • Mobile UX Polish: Per-clip loading, undo/redo toasts, and animated transitions

🌐 Three-Phase App Architecture

saywaht follows a mobile-first, three-phase design:

Phase 1: Landing & Discovery (/)

  • Wallet connection - Instant access with any Web3 wallet (MetaMask, WalletConnect)
  • Coin discovery - Browse and trade existing creator coins
  • Mobile-first design - Optimized for mobile without traditional navigation

Phase 2: Video Creation (/editor)

  • Professional editing - Timeline-based video editor
  • Decentralized storage - Grove/IPFS + Filecoin archival for large exports
  • Project sharing - Share projects via IPFS links

Phase 3: Trading & Discovery (/trade)

  • Creator coin trading - Buy/sell video creator coins
  • Mobile-first interface - TikTok-style vertical feed
  • Real-time markets - Uniswap V4 integration for liquidity
  • Creator economy - Supporters invest in creators, creators earn from trading

🏗️ Decentralized Storage Architecture

Saywaht uses a multi-tier decentralized storage system optimized for creator content:

Storage Routing Logic

Video Export (Any Size)
    ↓
Size Check
    ↓
┌─────────────────┬──────────────────┐
│    ≤ 8MB        │    > 8MB         │
│  (Small files)  │  (Large files)   │
└────────┬────────┴────────┬─────────┘
         ↓                 ↓
    Grove/IPFS       Filecoin
    • Fast           • Permanent
    • Free           • Up to 254MB
    • Instant        • Verifiable

Storage Providers

Provider Max Size Cost Use Case Speed
Grove 8 MB Free Short videos, thumbnails, metadata ⚡ Instant
Filecoin (FilCDN) 254 MB Allowance-based Long-form content, high-quality exports 🕐 1-2 min
Storacha (optional) Varies by account Free tier Secondary archive for captions/metadata ⚡ Fast

Filecoin Integration

Large videos (>8MB) are stored on Filecoin Calibration Testnet via FilCDN:

  1. Video exported from editor
  2. Uploaded to /api/filecoin/upload
  3. Synapse SDK stores on Filecoin
  4. Content accessible via: https://{wallet}.calibration.filcdn.io/{cid}
  5. Video + captions + manifest URLs linked in Zora coin metadata

Key Features:

  • Verifiable storage proofs
  • Permanent retention (no expiry)
  • Content-addressed (deduplication)
  • Direct wallet ownership

AI Caption Pipeline

On-device AI with permanent storage:

User Audio
    ↓
Whisper.js (Browser) → No server upload
    ↓
Transcript Generated
    ↓
Stored with Filecoin archive manifest (FilCDN-first)
    ↓
Optional mirror to Storacha
  • 100% Private: Audio never leaves your device
  • Permanent archive path: Captions are stored with the Filecoin export bundle
  • Open Source: Uses HuggingFace open-source models

Architecture Diagram

See docs/FILECOIN_ARCHITECTURE.md for detailed architecture diagrams and data flows.

Troubleshooting

Database Issues

"Cannot find module 'drizzle-orm/pg-core'"

cd packages/db
npm install --no-save

"esbuild version mismatch"

  • This is resolved - the packages/db no longer includes explicit esbuild dependencies
  • If you still see this, delete packages/db/node_modules and run npm install in the workspace root

"DATABASE_URL is not set"

  • Make sure you've created both packages/db/.env.local and apps/web/.env.local
  • Both files need the same DATABASE_URL value

Schema push fails

# Make sure you're in the correct directory
cd apps/web
DATABASE_URL="your-connection-string" npx drizzle-kit push

Common Issues

TypeScript Errors

  • Ensure you're using TypeScript strict mode
  • All components should have proper type definitions
  • Use react-icons/lu for Lucide icons instead of lucide-react

Build Failures

  • Run bun run build to check for TypeScript errors
  • Ensure all dependencies are properly installed with bun install
  • Check that environment variables are properly configured

Web3 Connection Issues

  • Ensure you have a Web3 wallet installed (MetaMask, etc.)
  • Check that you're on a supported network (Base)
  • Verify wallet connection in browser developer tools

IPFS Upload Issues

  • Verify FILECOIN_PRIVATE_KEY and FILECOIN_WALLET_ADDRESS are set in apps/web/.env.local
  • Verify FILECOIN_CALIBRATION_RPC is reachable from your network
  • Check Grove API status and rate limits
  • Ensure file sizes are within acceptable limits
  • For large files (>8MB), ensure Filecoin Calibration testnet is accessible

Filecoin Storage Issues

  • "Allowance not sufficient": Increase your FilCDN allowance at https://filcdn.com
  • "File exceeds maximum size": Filecoin limit is 254MB. Use compression or split videos
  • "Storage provider unavailable": Check Calibration testnet status
  • Slow uploads: Large files take 1-2 minutes for Filecoin storage - this is normal

AI Transcription Issues

  • Model download fails: Whisper models are ~150MB, ensure stable internet for first use
  • Transcription timeout: Long videos (>5 min) may take time - transcription runs locally
  • Poor accuracy: Ensure clear audio, minimal background noise
  • Browser crashes: Very long videos may require more RAM - try shorter clips

Getting Help

  • Check the Issues page for known problems
  • Review the Docs folder for detailed documentation:
    • SETUP.md - Complete setup guide, environment variables, and deployment
    • ROADMAP.md - Feature roadmap, current status, and future plans
    • EXPORT.md - Video export system documentation and troubleshooting
    • FILECOIN_ARCHITECTURE.md - Decentralized storage architecture & Filecoin integration
    • TESTING.md - Testing checklists and quality assurance
  • Join our community discussions for support

License

MIT LICENSE

About

Based meme commentary coining platform on zora

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 97.5%
  • CSS 1.1%
  • Other 1.4%