Mobile (Android-first) clone of the user-facing parts of the Next.js DeepNorth OTA
app (../OTA). Uses the same Firebase project (ota-db) and the same Flask camera
server — the database and ESP32 firmware are untouched; this app is only an additional
client.
Features: Beranda (hero, live "Kondisi Laut" strip, destinasi + filter), Detail destinasi, Monitoring (kamera AI MJPEG, sensor RTDB, statistik karang), Booking (form + riwayat + bayar/batal mock), Profil/Auth (email-password).
Stack: Flutter · Riverpod (2.6.x) · firebase_core/auth/firestore/database · google_fonts · intl · http · flutter_mjpeg · cached_network_image.
The app cannot connect to Firebase until you generate lib/firebase_options.dart and
register a native Android app under project ota-db:
npm i -g firebase-tools
dart pub global activate flutterfire_cli
firebase login # account with access to project ota-db
cd ota_mobile
flutterfire configure --project=ota-db --platforms=android,iosThen enable Email/Password in Firebase Console → Authentication → Sign-in method.
main.dart currently omits Firebase init so the project stays analyzer-clean before
firebase_options.dart exists. After flutterfire configure, add the two imports and the
init call:
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); // add this
await initializeDateFormatting('id_ID');
runApp(const ProviderScope(child: DeepNorthApp()));
}flutter run # with an Android emulator/device connectedThe "Kamera AI Deteksi Karang" stream + "Statistik" come from the Flask server
(../Proyek_Karang/app_web.py). Default URL is http://10.0.2.2:5001 (host localhost
as seen from the Android emulator). On a physical device, tap the ⚙ icon on the camera
panel and set your laptop's LAN IP (e.g. http://192.168.1.10:5001).
- Google Sign-In (button present but disabled; needs SHA-1 registration +
google_sign_in). - iOS run (config generated by
flutterfire configure; needs Xcode signing). - Restyle the bottom nav's center "Booking" tab to match the web's elevated button.
See ../docs/superpowers/specs/ and ../docs/superpowers/plans/ for the full design and
implementation plan.