Skip to content

Repository files navigation

# 🎤 Comic Companion > **Geolocation-based matching for open-mic performers and comedy audiences.** > > Find your comedy match. Swipe on local talent. Attend live events near you. --- ## What Is This? Comic Companion is a multi-platform app (think Tinder for comedy) that connects open-mic performers with their ideal audience using geolocation-based video matching. Artists upload short comedy clips; audiences swipe to discover local talent and attend live events. Built as a **Turborepo monorepo** — one codebase, three platforms. --- ## 🗺 Architecture ``` comic-companion/ ├── apps/ │ ├── web/ Next.js 14 — Marketing site + PWA (port 3000) │ ├── mobile/ Expo 51 — iOS & Android native app │ └── api/ Express — REST API backend (port 4000) └── packages/ ├── shared-types/ @comic-companion/types — All TypeScript interfaces ├── video-engine/ @comic-companion/video-engine — Sliding window video queue └── ui/ @comic-companion/ui — Shared React components ``` --- ## 🚀 Quick Start ### Prerequisites - Node.js 18+ - npm 9+ ### Install ```bash git clone comic-companion cd comic-companion npm install ``` ### Run (all apps) ```bash npm run dev ``` ### Run individually ```bash # Web app (marketing + PWA) npm run dev --workspace=apps/web # → http://localhost:3000 # API server npm run dev --workspace=apps/api # → http://localhost:4000/health # Mobile (requires Expo Go on your phone) cd apps/mobile && npx expo start ``` --- ## 📦 Package Reference ### `@comic-companion/types` All shared TypeScript interfaces. Import in any app: ```ts import type { User, VideoContent, Match, GeoPoint } from '@comic-companion/types'; ``` **Core types:** `User`, `VideoContent`, `Match`, `GeoPoint`, `SwipeAction`, `Event`, `WaitlistEntry`, `ApiResponse`, `PaginatedResponse` --- ### `@comic-companion/video-engine` Platform-agnostic sliding window video memory manager. ```ts import { VideoQueueManager, MockVideoAdapter } from '@comic-companion/video-engine'; const manager = new VideoQueueManager({ maxBufferSize: 5, // Never more than 5 adapters in memory prefetchAhead: 4, // Buffer 4 videos ahead of current adapterFactory: (videoId, src) => new YourPlatformAdapter(videoId, src), onEvict: (videoId) => console.log(`${videoId} freed from memory`), onFetchMore: (fromIndex) => fetchNextPage(fromIndex), }); manager.initialize(videoFeed); manager.scrollToIndex(2); // → automatically evicts index 0 manager.dispose(); // → destroys ALL adapters on unmount ``` **Sliding window logic:** | User at index | Buffer | Evicted | |---|---|---| | 0 | [0▶, 1, 2, 3, 4] | — | | 1 | [0, 1▶, 2, 3, 4] | — | | 2 | [1, 2▶, 3, 4, 5] | 0 ← | | 3 | [2, 3▶, 4, 5, 6] | 1 ← | **Platform adapters:** - `Html5VideoAdapter` — Web (`

About

Geolocation-based matching app connecting open-mic comedians with local audiences — swipe to discover comedy talent and live events near you. Turborepo monorepo with Next.js web app, Expo mobile app, and Express REST API.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages