Software Engineering Project

MBM — Me Being Me

College Student Community Super-App

A professional-grade Flutter application for the student community of MBM Engineering College, Jodhpur — featuring 9 integrated modules.

Flutter 3.x Supabase Riverpod GoRouter Material 3
9
App Modules
14
Database Tables
30+
Screens

Slide 2 / 10

System Architecture Overview

Layered clean architecture with Supabase backend and external service integrations.

graph TB subgraph CLIENT["Flutter Client App"] direction TB UI["UI Layer — 30+ Screens, Material 3"] ROUTER["GoRouter — Auth-Guarded Navigation"] PROVIDERS["Riverpod Providers — State Management"] SERVICES["Service Layer — Business Logic, Demo Mode"] end subgraph BACKEND["Supabase Backend"] direction TB AUTH["Auth — Email OTP, Google OAuth"] DB["PostgreSQL — 14 Tables, RLS Policies"] RT["Realtime — WebSocket Subscriptions"] STORAGE["Storage — Images, PDFs, Faces"] EDGE["Edge Functions — Email, Push, Backup"] end subgraph EXTERNAL["External Services"] FIREBASE["Firebase — FCM, Crashlytics, Analytics"] GMAIL["Gmail API — Issue Escalation Emails"] MLKIT["ML Kit — Face Detection"] end UI --> ROUTER --> PROVIDERS --> SERVICES SERVICES --> AUTH SERVICES --> DB SERVICES --> RT SERVICES --> STORAGE EDGE --> GMAIL SERVICES --> FIREBASE UI --> MLKIT

Slide 3 / 10

Use Case Diagram

Student vs Admin capabilities — 19 use cases across 9 modules.

graph LR S((Student)) A((Admin)) S --- UC1[Register with Face Capture] S --- UC2[Login via OTP or Google] S --- UC3[Raise Campus Issue] S --- UC4[Vote on Issues] S --- UC5[Sell or Barter Items] S --- UC6[Express Interest in Items] S --- UC7[Realtime Chat] S --- UC8[Register for Fest Events] S --- UC9[Digital Library] S --- UC10[Create or Join Trips] S --- UC11[View Alumni Directory] S --- UC12[Cat Chase Game] A --- UC13[Verify or Reject Students] A --- UC14[Manage Students] A --- UC15[Moderate Issues] A --- UC16[Send Broadcasts] A --- UC17[Analytics Dashboard] A --- UC18[Manage Fest Events] A --- UC19[Activity Feed] UC4 -.->|20 votes| UC20[Auto-Email Authorities]

Slide 4 / 10

Entity Relationship Diagram

14 PostgreSQL tables with Row-Level Security, triggers, and realtime subscriptions.

erDiagram students ||--o{ issues : posts students ||--o{ issue_votes : votes issues ||--o{ issue_votes : receives students ||--o{ exchange_posts : creates students ||--o{ exchange_interests : expresses exchange_posts ||--o{ exchange_interests : receives students ||--o{ chat_participants : joins chat_rooms ||--o{ chat_participants : has students ||--o{ messages : sends chat_rooms ||--o{ messages : contains students ||--o{ fest_events : creates fest_events ||--o{ fest_registrations : has students ||--o{ fest_registrations : registers students ||--o{ library_books : uploads students ||--o{ trips : organizes trips ||--o{ trip_members : has students ||--o{ trip_members : joins students ||--o{ broadcasts : sends alumni ||--o{ alumni_contact_log : receives students ||--o{ alumni_contact_log : contacts students { UUID id PK TEXT email UK TEXT name TEXT branch INT semester BOOL is_verified BOOL is_admin } issues { UUID id PK TEXT title UUID posted_by FK INT vote_count BOOL email_sent } exchange_posts { UUID id PK TEXT title DOUBLE price UUID posted_by FK } chat_rooms { UUID id PK BOOL is_dm TEXT last_message } messages { UUID id PK UUID room_id FK UUID sender_id FK TEXT content } fest_events { UUID id PK TEXT name TEXT category INT max_participants } fest_registrations { UUID id PK UUID event_id FK UUID student_id FK } library_books { UUID id PK TEXT title TEXT branch INT semester TEXT file_url } trips { UUID id PK TEXT destination INT max_members UUID organizer_id FK } trip_members { UUID id PK UUID trip_id FK UUID student_id FK } broadcasts { UUID id PK TEXT title UUID sent_by FK } alumni { UUID id PK TEXT name INT pass_year BOOL is_notable } issue_votes { UUID id PK UUID issue_id FK UUID student_id FK } exchange_interests { UUID id PK UUID post_id FK UUID student_id FK } chat_participants { UUID id PK UUID room_id FK UUID student_id FK } alumni_contact_log { UUID id PK UUID alumni_id FK UUID sender_id FK }

Slide 5 / 10

Class Diagram — Models & Services

Core data models and singleton services following clean architecture.

classDiagram class Student { +String id +String email +String name +String rollNo +String branch +int semester +bool isVerified +bool isAdmin +fromJson() +toJson() +copyWith() } class Issue { +String id +String title +int voteCount +String issueType +bool emailSent +fromJson() +toJson() } class ExchangePost { +String id +String title +double price +bool isBarter +int interestCount +fromJson() +toJson() } class ChatRoom { +String id +bool isGroup +String lastMessage +int unreadCount } class Message { +String id +String roomId +String senderId +String content +MessageStatus status } class AuthService { +sendOTP(email) +verifyOTP(email otp) +signInWithGoogle() +register() +logout() +checkSession() } class IssueService { +getAll(sortBy) +getById(id) +create() +toggleVote() } class ChatService { +getRooms() +getMessages() +sendMessage() +subscribeToRealtime() } AuthService --> Student : authenticates IssueService --> Issue : manages ChatService --> ChatRoom : manages ChatService --> Message : manages Student "1" --o "*" Issue : posts Student "1" --o "*" ExchangePost : creates ChatRoom "1" --o "*" Message : contains

Slide 6 / 10

Sequence Diagram — Authentication

Registration: OTP verification, face capture with ML Kit, admin approval.

sequenceDiagram autonumber actor S as Student participant App as Flutter App participant Auth as Supabase Auth participant DB as PostgreSQL participant Store as Storage participant Admin as Admin Panel S->>App: Enter email and details App->>Auth: signInWithOtp(email) Auth-->>S: OTP sent to email S->>App: Enter OTP App->>Auth: verifyOTP(email, otp) Auth-->>App: Session token App->>App: Camera - Face Capture Note over App: ML Kit validates face App->>Store: Upload face image Store-->>App: face_image_url App->>DB: INSERT student (status pending) DB-->>App: Created App->>App: Waiting Verification screen Admin->>DB: SET is_verified true DB-->>App: Verified App->>App: Redirect to Home

Slide 7 / 10

Activity Diagram — Issue (Mudda) Module

Students raise campus issues, community votes, auto-escalation to college authorities.

flowchart TD A([Student Opens Mudda]) --> B{New or Browse?} B -->|Browse| C[View Issue List] B -->|Create| D[Fill Title, Description, Image] D --> E[Submit Issue] E --> F[(Save to DB)] C --> G[Open Issue Detail] G --> H{Already Voted?} H -->|No| I[Cast Vote] H -->|Yes| J[Remove Vote] I --> K[(Update vote_count via trigger)] J --> K K --> L{votes >= 20?} L -->|No| M[Show Updated Count] L -->|Yes| N{email_sent?} N -->|Yes| M N -->|No| O[Edge Function: send-issue-email] O --> P[Gmail sends letter to DSW, Registrar, COE, Proctor, HOD] P --> Q[(Set email_sent true)] K --> R{votes >= 100?} R -->|Yes| S[Send URGENT escalation] R -->|No| M

Slide 8 / 10

State Diagram — Auth & Student Lifecycle

Auth states via Riverpod StateNotifier and student record lifecycle.

stateDiagram-v2 [*] --> Initial Initial --> Loading : checkSession() Loading --> Unauthenticated : No session Loading --> Authenticated : Valid session Loading --> PendingVerification : Not verified Loading --> Rejected : status rejected Unauthenticated --> Loading : login or register PendingVerification --> Authenticated : Admin verifies PendingVerification --> Rejected : Admin rejects Rejected --> Unauthenticated : Re-apply Authenticated --> Unauthenticated : logout() state Authenticated { [*] --> StudentMode StudentMode --> AdminMode : isAdmin true AdminMode --> StudentMode : switch }

Student Record Lifecycle

stateDiagram-v2 [*] --> Registered : OTP plus face uploaded Registered --> Pending : Record created Pending --> Verified : Admin approves Pending --> Rejected : Admin rejects Rejected --> Pending : Re-apply Verified --> Active : Login Active --> Online : Foreground Online --> Offline : Background Offline --> Online : Resumed Active --> [*] : Deleted

Slide 9 / 10

Deployment Diagram

Client targets, Supabase cloud backend, Firebase and Google API integrations.

graph TB subgraph DEVICES["Client Devices"] ANDROID["Android APK"] WEB["Web Cloudflare Pages"] IOS["iOS App Store"] end subgraph SUPA["Supabase Cloud"] PG["PostgreSQL 15 — 14 Tables, RLS, Triggers"] AUTHSV["Auth — OTP, OAuth, JWT"] RTSV["Realtime — WebSocket"] STORE["Storage — faces, issues, exchange, library, fest, chat"] EFNS["Edge Functions — send-issue-email, send-push, send-alumni-email, notify-admin, db-backup"] end subgraph FIRE["Firebase"] FCM["Cloud Messaging"] CRASH["Crashlytics"] ANALY["Analytics"] end subgraph GOOG["Google APIs"] GM["Gmail REST API"] GD["Google Drive API"] ML["ML Kit Face Detection"] end ANDROID --> SUPA WEB --> SUPA IOS --> SUPA ANDROID --> FIRE EFNS --> GM EFNS --> FCM ANDROID --> ML

Slide 10 / 10

Navigation Flow — Screen Map

GoRouter with auth guards, shell routes for bottom nav, admin shell.

flowchart TD START([App Launch]) --> SPLASH[Splash] SPLASH --> CHECK{Auth?} CHECK -->|None| LOGIN[Login] CHECK -->|Pending| WAIT[Waiting Verification] CHECK -->|Admin| ADM[Admin Dashboard] CHECK -->|Student| HOME[Home] LOGIN -->|New| REG[Register] --> FACE[Face Capture] --> OTP[OTP] LOGIN -->|Existing| OTP OTP --> HOME subgraph NAV["Student Shell — 5 Tabs"] HOME CHAT[Chat] LIB[Library] TRIP[Trips] PROF[Profile] end HOME --> MUDDA[Mudda] --> MD1[Create Issue] HOME --> EXCH[Exchange] --> EX1[Create Post] HOME --> FEST[Fest] --> FE1[Event Detail] HOME --> ALUM[Alumni] --> AL1[Alumni Detail] HOME --> GAME[Cat Chase] --> GM1[Lobby] --> GM2[Gameplay] MUDDA --> MD2[Issue Detail] EXCH --> EX2[Post Detail] CHAT --> CH1[Contacts] CHAT --> CH2[Chat Room] TRIP --> TR1[Create Trip] TRIP --> TR2[Trip Detail] subgraph ADMIN["Admin Shell"] ADM --> VER[Verify Students] ADM --> STU[All Students] ADM --> ISS[Manage Issues] ADM --> BRD[Broadcasts] ADM --> ACT[Activity Feed] ADM --> ANA2[Analytics] ADM --> MFE[Manage Fest] end

Thank You

MBM — Me Being Me