nkbmusic/admin/lib/main.dart
metatroncubeswdev cf645071aa Add NK Admin dashboard (Flutter web) for admin.nkbmusic.com
Email-code sign-in for admins only; Overview with a needs-attention list;
Songs with search, playback, editing, approve/hide and bulk edit; Albums
and Singers with merge; creator applications queue. Adds the admin views,
functions and creator_applications table, a deploy-admin script and a
how-to guide. The admin nginx config no longer caches unhashed JS and
sends its security headers again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 11:35:44 -04:00

45 lines
1.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_web_plugins/url_strategy.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'env.dart';
import 'router.dart';
import 'session.dart';
import 'theme.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
usePathUrlStrategy(); // admin.nkbmusic.com/songs, not /#/songs (nginx serves index.html for any path)
if (!Env.isConfigured) {
runApp(const _MissingConfig());
return;
}
await Supabase.initialize(url: Env.supabaseUrl, publishableKey: Env.supabasePublishableKey);
AdminSession.instance.start();
runApp(const NkAdminApp());
}
class NkAdminApp extends StatelessWidget {
const NkAdminApp({super.key});
@override
Widget build(BuildContext context) => MaterialApp.router(
title: 'NK Admin',
debugShowCheckedModeBanner: false,
theme: buildNkTheme(),
routerConfig: adminRouter,
);
}
class _MissingConfig extends StatelessWidget {
const _MissingConfig();
@override
Widget build(BuildContext context) => MaterialApp(
theme: buildNkTheme(),
home: const Scaffold(
body: Center(child: Text('Built without env.json: run deploy-admin.sh (see admin/README.md).')),
),
);
}