A public blog/forum application built with Flutter, Provider, go_router, and Supabase.
- Email and password registration, login, and logout
- Public paginated post listing
- Multiple-image previews on post cards
- Post create, read, update, and delete
- Multiple post image upload, addition, and deletion
- Comment create, read, update, and delete
- Multiple comment image upload, addition, and deletion
- Owner-only edit and delete actions
- Responsive Flutter Web and mobile layout
- Flutter and Dart
- Provider for state management
- go_router for navigation
- Supabase Authentication
- Supabase Postgres Database with Row Level Security
- Supabase Storage
- Create a Supabase project.
- Open the Supabase SQL Editor.
- Run
supabase/schema.sql. - In Authentication settings, disable email confirmation for faster testing.
- Copy
.env.exampleto.env. - Add the project URL and publishable key:
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_PUBLISHABLE_KEY=your-publishable-keyThe publishable key is intended for client applications. Security is enforced
by the Row Level Security and Storage policies in supabase/schema.sql.
Comments store the author's email directly. The application does not require a separate profiles table.
flutter pub get
flutter run --dart-define-from-file=.envFor Flutter Web:
flutter run -d chrome --dart-define-from-file=.envTest these flows before submission:
- Logged-out visitors can list and view posts, post images, comments, and comment images.
- Logged-out visitors cannot create or edit content.
- User A can create, update, and delete their own posts and comments.
- User B cannot update or delete content owned by User A.
- Pagination loads another page without duplicating posts.
- Deleting a post or comment removes its images from Supabase Storage.
- Mobile and desktop layouts allow every button to be pressed.
Run checks:
flutter analyze
flutter test
flutter build web --releaseBuild for a root domain such as Vercel or Cloudflare Pages:
flutter build web --release --dart-define-from-file=.envDeploy the generated build/web directory.
For GitHub Pages under a repository path:
flutter build web --release --base-href /bulletin-flutter/ --dart-define-from-file=.envDeploy build/web to the gh-pages branch. Configure the host so unknown
routes return index.html; this allows go_router URLs to load after a browser
refresh.
- Live URL: https://bulletin-flutter.pages.dev
- GitHub repository: https://github.com/abdlmnn/bulletin-flutter