vault-video-processor / docs /source-tree.md
dvijaykrishnan's picture
docs: Introduce comprehensive technical documentation and update planning artifacts to reflect MVP completion and detailed FR implementation status.
d03d74d
|
Raw
History Blame Contribute Delete
15.1 kB
# Vault - Source Tree Analysis
**Generated:** 2026-02-11
**Project Root:** `/`
---
## Root Directory Structure
```
vault/
β”œβ”€β”€ .github/ # GitHub workflows and configuration
β”‚ └── workflows/
β”‚ └── deploy.yml # CI/CD: Build, test, deploy to Vercel + Railway
β”‚
β”œβ”€β”€ .husky/ # Git hooks (pre-commit linting)
β”‚
β”œβ”€β”€ _bmad/ # BMAD methodology configuration
β”‚ β”œβ”€β”€ _config/ # Manifests and configuration
β”‚ β”œβ”€β”€ bmm/ # BMAD Method Module
β”‚ └── core/ # BMAD Core Module
β”‚
β”œβ”€β”€ _bmad-output/ # BMAD-generated artifacts
β”‚ β”œβ”€β”€ planning-artifacts/ # PRD, Architecture, Epics, Product Brief
β”‚ └── implementation-artifacts/ # Sprint status, story files
β”‚
β”œβ”€β”€ docs/ # Project documentation (this documentation)
β”‚
β”œβ”€β”€ drizzle/ # Database migrations
β”‚ └── *.sql # Migration files
β”‚
β”œβ”€β”€ legacy_configs/ # Legacy deployment configurations
β”‚ └── fly/ # Fly.io configs (deprecated)
β”‚
β”œβ”€β”€ public/ # Static assets
β”‚
β”œβ”€β”€ src/ # Source code (main application)
β”‚ β”œβ”€β”€ app/ # Next.js 15 App Router
β”‚ β”œβ”€β”€ components/ # Shared UI components
β”‚ β”œβ”€β”€ features/ # Feature-based modules
β”‚ β”œβ”€β”€ inngest/ # Background job functions
β”‚ β”œβ”€β”€ lib/ # Core utilities
β”‚ β”œβ”€β”€ config/ # Application configuration
β”‚ └── types/ # TypeScript type definitions
β”‚
β”œβ”€β”€ supabase/ # Supabase configuration
β”‚
β”œβ”€β”€ package.json # Dependencies and scripts
β”œβ”€β”€ tsconfig.json # TypeScript configuration
β”œβ”€β”€ next.config.ts # Next.js configuration
β”œβ”€β”€ drizzle.config.ts # Drizzle ORM configuration
β”œβ”€β”€ tailwind.config.ts # Tailwind CSS configuration
β”œβ”€β”€ vitest.config.ts # Vitest test configuration
β”œβ”€β”€ eslint.config.mjs # ESLint configuration
β”œβ”€β”€ Dockerfile # Docker configuration (Hugging Face Spaces)
└── vercel.json # Vercel deployment configuration
```
---
## Source Code Structure (`src/`)
### App Router (`src/app/`)
Next.js 15 App Router pages and API routes.
```
src/app/
β”œβ”€β”€ layout.tsx # Root layout (theme, fonts, toaster)
β”œβ”€β”€ page.tsx # Homepage (public landing)
β”œβ”€β”€ globals.css # Global styles (Tailwind)
β”œβ”€β”€ favicon.ico # Site favicon
β”‚
β”œβ”€β”€ api/ # API Route Handlers
β”‚ β”œβ”€β”€ auth/[...all]/route.ts # Better Auth endpoints
β”‚ β”œβ”€β”€ inngest/route.ts # Inngest webhook handler
β”‚ β”œβ”€β”€ health/route.ts # Health check endpoint
β”‚ β”œβ”€β”€ manual-trigger/route.ts # Manual workflow triggers (dev)
β”‚ └── youtube/
β”‚ β”œβ”€β”€ callback/route.ts # YouTube OAuth callback
β”‚ β”œβ”€β”€ connect/route.ts # Initiate YouTube connection
β”‚ └── disconnect/route.ts # Disconnect YouTube channel
β”‚
β”œβ”€β”€ login/
β”‚ └── page.tsx # Login page
β”‚
β”œβ”€β”€ register/
β”‚ └── page.tsx # Registration page
β”‚
β”œβ”€β”€ dashboard/ # Creator Dashboard
β”‚ β”œβ”€β”€ page.tsx # Main dashboard (videos, metrics)
β”‚ β”œβ”€β”€ moderation/
β”‚ β”‚ └── page.tsx # Moderation queue
β”‚ β”œβ”€β”€ requests/
β”‚ β”‚ └── page.tsx # Product requests & proposals
β”‚ └── fix-channels/
β”‚ └── page.tsx # Channel repair utility
β”‚
β”œβ”€β”€ admin/ # Admin Operations
β”‚ β”œβ”€β”€ page.tsx # Redirects to /admin/dashboard
β”‚ β”œβ”€β”€ layout.tsx # Admin layout with navigation
β”‚ β”œβ”€β”€ dashboard/
β”‚ β”‚ └── page.tsx # Platform overview
β”‚ β”œβ”€β”€ moderation/
β”‚ β”‚ └── page.tsx # Admin moderation queue
β”‚ β”œβ”€β”€ analysis-queue/
β”‚ β”‚ └── page.tsx # Video analysis queue
β”‚ β”œβ”€β”€ analysis/[id]/
β”‚ β”‚ └── page.tsx # Individual analysis detail
β”‚ β”œβ”€β”€ requests/
β”‚ β”‚ └── page.tsx # Request hub (proposals, requests)
β”‚ └── users/
β”‚ └── page.tsx # User management
β”‚
β”œβ”€β”€ vault/[creatorSlug]/ # Public Creator Vault
β”‚ β”œβ”€β”€ page.tsx # Vault grid (SSR/ISR)
β”‚ └── product/[productId]/
β”‚ └── page.tsx # Product detail page
β”‚
β”œβ”€β”€ showcase/ # Demo/Showcase Mode
β”‚ β”œβ”€β”€ page.tsx # Featured creators grid
β”‚ └── [videoId]/
β”‚ β”œβ”€β”€ page.tsx # Video showcase
β”‚ └── moderate/
β”‚ └── page.tsx # Showcase moderation
β”‚
β”œβ”€β”€ creators/
β”‚ └── page.tsx # Creator discovery
β”‚
β”œβ”€β”€ design/
β”‚ └── page.tsx # Design system preview
β”‚
└── unsubscribe/[token]/
└── page.tsx # Email unsubscribe
```
### Components (`src/components/`)
Shared UI components (shadcn/ui based).
```
src/components/
β”œβ”€β”€ mode-toggle.tsx # Dark/light theme toggle
β”œβ”€β”€ theme-provider.tsx # Theme context provider
β”‚
β”œβ”€β”€ auth/
β”‚ β”œβ”€β”€ sign-in-form.tsx # Login form
β”‚ β”œβ”€β”€ sign-up-form.tsx # Registration form
β”‚ β”œβ”€β”€ user-nav.tsx # User avatar dropdown
β”‚ └── auto-claimer.tsx # Auto-claim vault ownership
β”‚
└── ui/ # shadcn/ui components
β”œβ”€β”€ alert-dialog.tsx
β”œβ”€β”€ alert.tsx
β”œβ”€β”€ avatar.tsx
β”œβ”€β”€ badge.tsx
β”œβ”€β”€ button.tsx
β”œβ”€β”€ card.tsx
β”œβ”€β”€ checkbox.tsx
β”œβ”€β”€ dialog.tsx
β”œβ”€β”€ dropdown-menu.tsx
β”œβ”€β”€ input.tsx
β”œβ”€β”€ label.tsx
β”œβ”€β”€ scroll-area.tsx
β”œβ”€β”€ select.tsx
β”œβ”€β”€ separator.tsx
β”œβ”€β”€ skeleton.tsx
β”œβ”€β”€ sonner.tsx # Toast notifications
β”œβ”€β”€ tabs.tsx
└── textarea.tsx
```
### Feature Modules (`src/features/`)
Feature-based organization for business logic.
```
src/features/
β”‚
β”œβ”€β”€ analytics/ # Metrics and tracking
β”‚ └── components/
β”‚ └── key-metrics-row.tsx # Dashboard metrics display
β”‚
β”œβ”€β”€ discovery/ # AI Video Scanning
β”‚ β”œβ”€β”€ actions/
β”‚ β”‚ └── connect-youtube.ts # YouTube OAuth action
β”‚ β”œβ”€β”€ components/
β”‚ β”‚ └── youtube-connect-section.tsx
β”‚ └── services/
β”‚ β”œβ”€β”€ youtube-videos.service.ts # YouTube Data API
β”‚ β”œβ”€β”€ frame-extraction.service.ts # FFmpeg processing
β”‚ β”œβ”€β”€ ai-vision.service.ts # Vision provider abstraction
β”‚ β”œβ”€β”€ vision-provider.factory.ts # Provider factory
β”‚ β”œβ”€β”€ storage.service.ts # Supabase storage
β”‚ └── providers/
β”‚ β”œβ”€β”€ vision-provider.interface.ts
β”‚ β”œβ”€β”€ gemini.provider.ts
β”‚ └── huggingface.provider.ts
β”‚
β”œβ”€β”€ interest/ # "I Want This" Feature
β”‚ β”œβ”€β”€ actions/
β”‚ β”‚ └── create-interest-pledge.ts
β”‚ β”œβ”€β”€ components/
β”‚ β”‚ └── interest-capture-modal.tsx
β”‚ └── types/
β”‚ └── interest.types.ts
β”‚
β”œβ”€β”€ marketplace/ # Marketplace Integration
β”‚ β”œβ”€β”€ actions/
β”‚ β”‚ β”œβ”€β”€ trigger-marketplace-match.ts
β”‚ β”‚ └── trigger-link-health-check.ts
β”‚ └── services/
β”‚ β”œβ”€β”€ amazon.service.ts # Amazon PA-API
β”‚ β”œβ”€β”€ ebay.service.ts # eBay Finding API
β”‚ β”œβ”€β”€ etsy.service.ts # Etsy Open API
β”‚ β”œβ”€β”€ errors.ts # Custom errors
β”‚ β”œβ”€β”€ link-health.service.ts
β”‚ └── marketplace-cache.service.ts
β”‚
β”œβ”€β”€ moderation/ # Creator Moderation
β”‚ β”œβ”€β”€ actions/
β”‚ β”‚ β”œβ”€β”€ approve-detection.ts
β”‚ β”‚ β”œβ”€β”€ reject-detection.ts
β”‚ β”‚ β”œβ”€β”€ bulk-approve.ts
β”‚ β”‚ β”œβ”€β”€ bulk-reject.ts
β”‚ β”‚ β”œβ”€β”€ edit-detection.ts
β”‚ β”‚ β”œβ”€β”€ delete-detection.ts
β”‚ β”‚ β”œβ”€β”€ add-detection.ts
β”‚ β”‚ β”œβ”€β”€ admin-correct-detection.ts
β”‚ β”‚ β”œβ”€β”€ admin-mark-incorrect.ts
β”‚ β”‚ β”œβ”€β”€ fetch-product-metadata.ts
β”‚ β”‚ β”œβ”€β”€ handle-proposal.ts
β”‚ β”‚ β”œβ”€β”€ transfer-temporary-products.ts
β”‚ β”‚ └── upload-product-image.ts
β”‚ β”œβ”€β”€ components/
β”‚ β”‚ β”œβ”€β”€ moderation-queue.tsx
β”‚ β”‚ β”œβ”€β”€ admin-moderation-queue.tsx
β”‚ β”‚ β”œβ”€β”€ admin-detection-card.tsx
β”‚ β”‚ β”œβ”€β”€ edit-detection-dialog.tsx
β”‚ β”‚ β”œβ”€β”€ add-product-dialog.tsx
β”‚ β”‚ β”œβ”€β”€ product-form.tsx
β”‚ β”‚ β”œβ”€β”€ image-upload-field.tsx
β”‚ β”‚ β”œβ”€β”€ admin-correction-modal.tsx
β”‚ β”‚ └── admin-mark-incorrect-modal.tsx
β”‚ β”œβ”€β”€ services/
β”‚ β”‚ β”œβ”€β”€ moderation.service.ts
β”‚ β”‚ └── admin-moderation.service.ts
β”‚ └── utils/
β”‚ └── demo.ts # Demo mode utilities
β”‚
β”œβ”€β”€ vault/ # Public Vault Experience
β”‚ β”œβ”€β”€ actions/
β”‚ β”‚ β”œβ”€β”€ add-to-workbench.ts
β”‚ β”‚ β”œβ”€β”€ quick-analyze.ts
β”‚ β”‚ β”œβ”€β”€ redirect-to-marketplace.ts
β”‚ β”‚ β”œβ”€β”€ refresh-metadata.ts
β”‚ β”‚ β”œβ”€β”€ search-products.ts
β”‚ β”‚ └── trigger-analysis.ts
β”‚ β”œβ”€β”€ components/
β”‚ β”‚ β”œβ”€β”€ vault-grid.tsx # Main product grid
β”‚ β”‚ β”œβ”€β”€ vault-header.tsx # Creator info header
β”‚ β”‚ β”œβ”€β”€ vault-filters.tsx # Filter controls
β”‚ β”‚ β”œβ”€β”€ vault-grid-skeleton.tsx
β”‚ β”‚ β”œβ”€β”€ vault-grid-with-temp-products.tsx
β”‚ β”‚ β”œβ”€β”€ product-card.tsx # Individual product
β”‚ β”‚ β”œβ”€β”€ product-grid.tsx
β”‚ β”‚ β”œβ”€β”€ product-card-skeleton.tsx
β”‚ β”‚ β”œβ”€β”€ product-request-dialog.tsx
β”‚ β”‚ β”œβ”€β”€ category-filter.tsx
β”‚ β”‚ β”œβ”€β”€ search-bar.tsx
β”‚ β”‚ β”œβ”€β”€ search-results.tsx
β”‚ β”‚ β”œβ”€β”€ video-card.tsx
β”‚ β”‚ β”œβ”€β”€ video-embed.tsx
β”‚ β”‚ β”œβ”€β”€ discovery-panel.tsx
β”‚ β”‚ β”œβ”€β”€ claim-handler.tsx
β”‚ β”‚ β”œβ”€β”€ claim-vault-button.tsx
β”‚ β”‚ β”œβ”€β”€ unauthenticated-banner.tsx
β”‚ β”‚ β”œβ”€β”€ affiliate-submission-dialog.tsx
β”‚ β”‚ β”œβ”€β”€ quick-analyze-tool.tsx
β”‚ β”‚ └── add-to-workbench-button.tsx
β”‚ β”œβ”€β”€ services/
β”‚ β”‚ β”œβ”€β”€ vault.service.ts # Data fetching + caching
β”‚ β”‚ β”œβ”€β”€ showcase.service.ts
β”‚ β”‚ └── click-tracking.service.ts
β”‚ β”œβ”€β”€ hooks/
β”‚ β”‚ └── use-temporary-products.ts
β”‚ β”œβ”€β”€ config/
β”‚ β”‚ β”œβ”€β”€ demo-config.ts
β”‚ β”‚ └── sample-data.ts
β”‚ └── types/
β”‚ └── vault.types.ts
β”‚
β”œβ”€β”€ admin/ # Admin Operations
β”‚ └── actions/
β”‚ └── stats.ts # Platform statistics
β”‚
└── dashboard/ # Creator Dashboard
β”œβ”€β”€ actions/
β”‚ └── fetch-videos.ts
└── components/
└── video-workbench.tsx
```
### Inngest Functions (`src/inngest/`)
Background job orchestration.
```
src/inngest/
β”œβ”€β”€ client.ts # Inngest client configuration
β”‚
└── functions/
β”œβ”€β”€ scan-video-archive.ts # YouTube archive scanning
β”œβ”€β”€ detect-objects.ts # AI object detection
β”œβ”€β”€ match-marketplace.ts # Marketplace matching
β”œβ”€β”€ monitor-link-health.ts # Link health monitoring
β”œβ”€β”€ social-healing.ts # Social metadata repair
└── warm-featured-creators-cache.ts
```
### Core Libraries (`src/lib/`)
Core utilities and configurations.
```
src/lib/
β”œβ”€β”€ auth.ts # Better Auth configuration
β”œβ”€β”€ auth-client.ts # Client-side auth utilities
β”œβ”€β”€ admin.ts # Admin utilities
β”œβ”€β”€ redis.ts # Upstash Redis client
β”‚
└── db/
β”œβ”€β”€ index.ts # Drizzle client
└── schema.ts # Database schema (590 lines)
```
### Configuration (`src/config/`)
Application configuration files.
```
src/config/
└── vision.config.ts # AI vision provider config
```
---
## Configuration Files
### Root Configuration
| File | Purpose |
|------|---------|
| `package.json` | Dependencies, scripts, npm configuration |
| `tsconfig.json` | TypeScript compiler options |
| `next.config.ts` | Next.js configuration (images, externals, Sentry) |
| `drizzle.config.ts` | Drizzle ORM configuration |
| `tailwind.config.ts` | Tailwind CSS configuration |
| `vitest.config.ts` | Vitest test runner configuration |
| `eslint.config.mjs` | ESLint rules and plugins |
| `vercel.json` | Vercel deployment settings |
| `Dockerfile` | Docker image for Hugging Face Spaces |
### Environment Variables
Required environment variables (see `.env.example`):
```
# Database
DATABASE_URL=
DIRECT_URL=
# Authentication
BETTER_AUTH_SECRET=
BETTER_AUTH_URL=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# Inngest
INNGEST_EVENT_KEY=
INNGEST_SIGNING_KEY=
# Supabase
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
# Redis
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
# AI/Vision
GEMINI_API_KEY=
HUGGINGFACE_API_KEY=
VISION_PROVIDER=gemini|huggingface
# Marketplaces
AMAZON_ACCESS_KEY=
AMAZON_SECRET_KEY=
AMAZON_AFFILIATE_TAG=
EBAY_APP_ID=
EBAY_CERT_ID=
EBAY_CAMPAIGN_ID=
ETSY_API_KEY=
# Monitoring
SENTRY_ORG=
SENTRY_PROJECT=
# Admin
ADMIN_EMAILS=
```
---
## Key Entry Points
| Entry Point | Description |
|-------------|-------------|
| `src/app/layout.tsx` | Root layout, theme provider |
| `src/app/page.tsx` | Homepage |
| `src/app/api/inngest/route.ts` | Inngest webhook handler |
| `src/inngest/client.ts` | Background job client |
| `src/lib/db/index.ts` | Database connection |
| `src/lib/auth.ts` | Authentication setup |
---
## Related Documentation
- [Project Overview](./project-overview.md) - Architecture and features
- [Data Models](./data-models.md) - Database schema
- [API Contracts](./api-contracts.md) - Endpoints and actions
- [Development Guide](./development-guide.md) - Setup instructions