Full setup guide · Verification scope
Use a separate extracted copy with no real Firebase configuration. The included local helpers use only demo-simple-world and localhost. They refuse to overwrite a populated emulator installation or an existing Android configuration.
# Terminal 1: Source/admin-panel cd admin-functions npm ci cd .. firebase emulators:start --config firebase.emulators.json --project demo-simple-world --only auth,firestore,functions,storage # Terminal 2: Source/admin-panel node deployment/demo/seed-demo.cjs
Use Node 22 and JDK 21. Wait for every emulator and the seed to report success. The seed creates 40 fictional profiles and text-only sample content; no real customer accounts are included.
# Source/mobile-app node tools/configure-android-emulator.cjs flutter pub get flutter run --dart-define=SIMPLE_WORLD_EMULATORS=true --dart-define=SIMPLE_WORLD_DEMO=false
Sign in with member01@example.test and SampleMember-2026!. Member emails member02@example.test through member36@example.test use the same local password. These credentials require the seeded local emulators. Never reuse them in a public installation.
The Android emulator connects through 10.0.2.2. Debug builds allow HTTP for local emulators. The emulator build uses fictional Firebase options and refuses an external host or a project ID without the demo- prefix. External ads and push registration are skipped during local tests.
| Mode | Behavior |
|---|---|
| Connected Firebase, default | Registration, sign-in, public discovery/search, profiles, posts, follows/timelines, private chats, activity, groups, reports and server controlled earned credits. Uses your Firebase project, or the local emulators when explicitly selected. |
| Optional on-device demo | Use tools/prepare-offline-demo.py in a separate copy, then build with SIMPLE_WORLD_DEMO=true; see demo-instructions.html. Fictional text fixtures, local gallery photo import, draft restore, local post archive/search and demonstration notices remain on that app installation. No demo IDs or these interactions are sent to Firebase. Generated seed photos, videos and portraits are excluded. |
| Paid products | Unavailable in the running app. The original unverified integration is retained in examples/unverified-iap/ for developers. Paid purchases and restoration are excluded from the supported feature list. |
Gallery images must be PNG or JPEG up to 15 MB and are copied to private local application storage. Deploy the included callable functions before accepting activity, group, reporting, moderation, account-deletion and earned-credit features. Profile search indexes derive from public names, including older records without indexes. The public projection omits malformed or oversized legacy fields and labels them in invalidPublicFields without altering the private record.
# Source/admin-panel, fresh seed node deployment/demo/verify-demo.cjs node deployment/demo/verify-fanout.cjs node deployment/demo/verify-credits.cjs node deployment/demo/verify-mobile-boundary.cjs node deployment/demo/verify-boundary-regressions.cjs
The disposable checks include permission denial, legitimate owner operations, atomic chat payloads, custom UID collision protection, Unicode/oversized public names and unfollow notification cleanup. The REST chat concurrency check is a substitute for the mobile SDK transaction; review the native checks separately. Stop the emulators with Ctrl+C and start a fresh session to reseed. The helpers do not load operator credentials or support production endpoints.
After adding your own native Firebase configuration, Xcode identifiers and required capabilities on a Mac, run:
# Source/mobile-app on macOS sh tools/verify-ios.sh
This runs analysis, tests, CocoaPods and an unsigned release compile. Signing, iPhone acceptance, OAuth, APNs, media permissions and App Store review are separate. No iOS build was performed in the Windows review environment.
Use the coordinated backup, migration and security cutover in the full setup guide. Creating this source ZIP does not deploy to any Firebase project. The author's live demo content was refreshed separately; follow the deployment instructions for your own project. Do not apply strict rules to an old installation before its compatible client and data are ready.