Scribo is a cross-platform learning companion that turns lectures into structured study material, with AI-assisted revision and a community layer. This monorepo contains the NestJS API plus the Android and iOS clients.
apps/
api/ # NestJS backend (MongoDB, Google OAuth, Stripe subscriptions)
android/ # Jetpack Compose app (offline transcription via Vosk)
ios/ # SwiftUI app
assets/ # Shared design tokens and branding
infra/ # Local MongoDB + mongo-express via Docker
- Lecture capture with offline transcription (Vosk) and structured notes
- Smart revision tools (summaries, quizzes, flashcards)
- Community features (threads, posts, reactions, moderation)
- Tiered subscriptions powered by Stripe
- Shared design tokens in
assets/theme.json
- Backend: NestJS 11, MongoDB (Mongoose), Passport, Stripe SDK
- Android: Kotlin, Jetpack Compose, Coroutines, Retrofit/Moshi
- iOS: SwiftUI, Combine, GoogleSignIn, StripePaymentSheet
- Tooling: pnpm 10, Docker Compose, Gradle, Xcode
- Node.js 18+ and pnpm (see
package.json) - Docker (for local MongoDB)
- Android Studio (Koala or newer) and Java 11
- Xcode 15+ with iOS 17 SDK
pnpm installpnpm dev:infraThis starts MongoDB on localhost:27017 and mongo-express on http://localhost:8081.
-
Copy environment variables and fill in real values:
cp .env.example apps/api/.env
-
Start the API in watch mode:
pnpm api:dev
-
Test and lint:
pnpm api:test pnpm --filter ./apps/api test:e2e pnpm api:lint
For full configuration details, see apps/api/ENVIRONMENT_SETUP.md.
Open apps/android in Android Studio, sync Gradle, then run:
./gradlew :app:assembleDebug
./gradlew :app:installDebugGoogle Sign-In uses the backend GOOGLE_ANDROID_CLIENT_ID and the SHA-1 fingerprint configured in Google Cloud.
Open apps/ios/scribo.xcodeproj in Xcode and run the scribo scheme. Set the Google client IDs in your Xcode config and ensure the backend .env includes GOOGLE_IOS_CLIENT_ID.
- Backend setup and auth/subscriptions:
apps/api/docs/oauth-and-subscriptions-setup.md - Roles, permissions, and tier guards:
apps/api/docs/authorization-and-roles.md - Transcription pipelines:
apps/api/docs/transcription.md - E2E testing notes:
apps/api/test/README.md
- Never commit real secrets. Use
.env.exampleas the template. - Stripe webhooks can be tested locally with
stripe listen --forward-to localhost:3000/webhooks/stripe.
If you add backend features that impact auth, roles, or tiers, mirror the behavior in E2E tests under apps/api/test.