myspoti
Jetpack Compose로 만든 Spotify 전용 안드로이드 클라이언트
Captih는 튀니지아어 다리자를 실제로 전사하는 최초의 음성‑텍스트 도구다
Captih is the first speech-to-text tool that actually transcribes Tunisian darija. Drop a video or audio file, get a timestamped SRT, plain transcript, and JSON in minutes. Trained on 93 hours of real
미디어TypeScript · PLpgSQLGitHub @FARUKxKUN온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Subtitles and transcripts for Tunisian Arabic (Darija), powered by a fine-tuned Whisper model. Next.js, Supabase, Clerk, Modal.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Tunisian Darija is a spoken dialect that mixes Arabic with French and some English, often in the same sentence. General speech-to-text tools (YouTube auto-captions, Otter, Descript) are trained on Modern Standard Arabic or other dialects, and they produce unusable output for Tunisian speech. Tunisian creators, podcasters and journalists end up subtitling by hand.
Billing is pay-as-you-go: users buy minute packs in Tunisian dinars through a local payment provider, and minutes are refunded automatically if a transcription fails.
src/lib/gemini-cleanup.ts)src/app/api/transcribe/route.ts)src/app/api/webhooks/dhmad/route.ts)src/proxy.ts, next.config.ts)| Layer | Technology |
|---|---|
| App | Next.js 16 (App Router), React 19, TypeScript |
| Styling and motion | Tailwind CSS v4, GSAP, Lenis, React Three Fiber |
| Auth | Clerk (synced to the database through a signed webhook) |
| Database | Supabase Postgres with Row Level Security |
| Speech-to-text | FARUKxAUTO (fine-tuned Whisper large-v3) on Modal serverless GPUs |
| Post-processing | Gemini 2.5 Flash, constrained proofreading |
| Payments | Dhmad.tn (Tunisian escrow and checkout) |
| Analytics | PostHog (EU region) |
| Hosting | Vercel |
Browser ──upload──▶ /api/transcribe (Next.js on Vercel)
│ same-origin + rate limit + Clerk auth
│ size / MIME / magic-byte checks
│ reserve minutes (Supabase)
▼
Modal GPU endpoint ──▶ FARUKxAUTO ──▶ word-level timestamps
│
▼
reconcile billing ──▶ Gemini proofreading (1:1 guard)
│
▼
store job (Supabase) ──▶ result page: preview, re-chunk, edit, export SRT/TXT
The full request flow, data model, API reference and security model are in docs/ARCHITECTURE.md.
src/
app/ Pages and API routes (App Router)
api/ transcribe, jobs, credits, payments, webhooks
components/ Landing sections, dashboard widgets, auth, motion primitives
lib/ Domain logic: credits, jobs, captions, payments, rate limiting
proxy.ts Auth gating + nonce CSP (Next 16 "proxy", formerly middleware)
supabase/
migrations/ Database schema, RLS policies and SQL functions
docs/ Architecture notes and screenshots
The model and the data behind it are kept private:
The app calls the inference service over an authenticated HTTP endpoint configured through environment variables.
This is a production app wired to several hosted services, so a full local run needs your own accounts for Clerk, Supabase and (for transcription) a compatible inference endpoint.
npm install
cp .env.example .env.local # fill in your own keys
npm run dev # http://localhost:3000
Apply the SQL files in supabase/migrations/ to a fresh Supabase project (see supabase/README.md). Without the inference endpoint, the landing page, examples, auth and dashboard still run.
captih is live and in early use. Current limits and the next steps:
captih was built by two engineering students at ISI Mahdia, Tunisia.
| Role | Main contributions | |
|---|---|---|
| Farouk Battikh (@FARUKxKUN) | Product, front end, ML | Product and brand design, the full front end (landing, 3D logo, motion, dashboard, editor, result page), the FARUKxAUTO fine-tune and its inference service, billing reconciliation, payment checkout fixes, security hardening |
| Yassine Bouteraa (@yassinebouteraa) | Back end | Backend architecture: Clerk authentication and user sync, the Supabase schema, RLS and SQL functions, the credit and job systems, the Modal transcription integration, the Dhmad payment flow and webhook, PostHog analytics, Gemini cleanup and caption formatting |
Copyright (c) 2026 Farouk Battikh and Yassine Bouteraa. All rights reserved.
This source code is published for viewing and evaluation only. It is not open source: you may not copy, modify, distribute, or deploy it, in whole or in part, without written permission from the authors. See LICENSE.