LexiBites turns subtitles into bite-sized language moments. Save words with context, replay the exact moment, and build your language one bite at a time.
- Bites: Each saved item is a bite — a focus word, the subtitle line around it, translations (word + full line when available), and a timestamp tied to the video.
- YouTube & Netflix: Click words in subtitles to translate inline and save a bite without choosing “word vs sentence.”
- Library: Open the extension popup to browse bites, replay moments, fine-tune timestamps, or export CSV.
npm install
npm run buildLoad the dist folder as an unpacked extension in Chrome (chrome://extensions → Developer mode → Load unpacked).
Publishing: Translation is wired up when you build with .env — see .env.example (keep .env out of git). End users only adjust languages and Netflix options in the popup; they never configure the translation backend.
The marketing site and dashboard live in web/ (Next.js). On Vercel you must set Project → Settings → General → Root Directory to web (not the repo root).
Vercel detects Next.js from web/package.json. If Root Directory is . / ./, the root package.json has no next dependency and the build fails with “No Next.js version detected.”
Use default Install / Build (npm install, npm run build) inside web/, and do not set a custom build command to the root npm run build (that runs the Chrome extension with Vite).
Env vars on the Vercel project must match web/.env.local: NEXT_PUBLIC_SUPABASE_URL plus NEXT_PUBLIC_SUPABASE_ANON_KEY or NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY (Vercel’s Supabase integration often supplies the latter). See web/README.md.
React + TypeScript (popup UI), vanilla JS content script on video pages, Manifest V3. Next.js app in web/ for accounts and saved words.