Wolly is a book publishing & reading platform. This monorepo contains all of its surfaces plus the shared contracts that keep them in sync.
wolly/
├── apps/
│ ├── reader/ # Flutter mobile app — readers browse & read books (BLoC)
│ ├── creator-hub/ # Next.js web app — authors create, publish & track books
│ └── backoffice/ # Next.js web app — staff moderation / publishing workflow (Phase 5)
├── packages/
│ ├── schema/ # Canonical Firestore types — SINGLE SOURCE OF TRUTH (TS)
│ └── firebase-config/# Shared firestore.rules, storage.rules, firestore.indexes.json
├── firebase.json # Unified multi-site Firebase Hosting + Firestore/Storage rules
└── SCHEMA.md # Human-readable schema contract (mirrored into the Dart reader)
All apps share one Firebase project (wolly-1133d): Auth, Firestore, Storage.
- JS apps & packages (
apps/creator-hub,apps/backoffice,packages/*) are managed with npm workspaces + Turborepo. The Flutterreaderapp is not part of the npm workspace — it uses its ownpub/fluttertoolchain.
npm install # install all JS workspace deps
npm run dev # turbo: run dev for all JS apps
npm run build # turbo: build all JS apps
npm run lint # turbo: lint all JS appsFor the reader:
cd apps/reader
flutter pub get
flutter runThe reader and creator-hub both read/write the same Firestore collections. To stop
the two apps from drifting (a real bug we hit: the hub wrote a books collection
the reader never read), the document shapes live in one place:
- TypeScript apps import them from
@wolly/schema. - The Dart reader mirrors them;
SCHEMA.mdis the canonical human-readable reference.
Books published in the Creator Hub are written to the epubs collection in the
shape the reader expects, so they appear in the reader immediately.
CI (.github/workflows/deploy.yml) deploys on push: develop → mock, main → prod.
- Web (
creator-hub,backoffice) deploy to Firebase Hosting multi-site targets (wolly-creator-hub,wolly-backofficein.firebaserc). - Reader is a mobile app only — it ships as an Android APK via Firebase
App Distribution (
qa/productiontester groups). It has no web Hosting site.