Event discovery and group-based social app built with Flutter.
MeetEm is a mobile application designed to help people discover nearby events and make it easier to participate in them with other people.
The application combines event discovery, location-based browsing, authentication, interest tracking, group formation, and group chat.
- 📍 Event Discovery — Browse events with location information
- 🗺️ Map Integration — View event locations using Google Maps
- ❤️ Interest Tracking — Express interest in events
- 👥 Group Formation — Join an existing group or create a new one
- 🎯 Dense-Fill Groups — Prioritize groups with more available members before creating additional groups
- 👤 20-Person Capacity — Groups have a maximum capacity of 20 members
- 💬 Group Chat — Send messages within event groups
- 🚪 Leave & Don't Rejoin — Users can leave a group and prevent themselves from automatically rejoining it
- 🔐 Firebase Authentication — Email/password account creation and login
- 🧭 Onboarding Flow — Guided account creation and profile setup
MeetEm uses a dense-fill strategy when users join groups.
Rather than distributing users across many small groups, available groups for an event are sorted by their current membership count, with fuller groups considered first.
Groups have a maximum capacity of 20 members.
When all existing groups are full, the application can create a new group for the event.
For user-generated events, group creation requires at least 3 interested users. Sourced events bypass this threshold.
Each group has an associated chat.
Messages currently use an in-memory repository within the application. The repository is structured so that the data layer can be replaced with persistent storage when the backend is implemented.
Chat messages contain:
- Message ID
- Group ID
- Sender ID
- Sender name
- Message text
- Timestamp
MeetEm uses Firebase Authentication for account creation and login.
The authentication flow includes:
- Email/password registration
- Email/password login
- Firebase authentication error handling
- Password validation
- Display-name setup
- Logout
Firebase authentication is also injected into the login and signup screens during testing so authentication behavior can be tested without relying on the production Firebase service.
The project includes Flutter widget tests covering:
- Login form validation
- Invalid email validation
- Successful Firebase authentication
- Onboarding navigation
Firebase Authentication is mocked during login tests, allowing the UI authentication flow to be tested independently of a live Firebase backend.
The application separates UI, models, and application services Repository classes use ChangeNotifier to notify screens when group or chat state changes.
Flutter Dart
Firebase Authentication Google Maps
ChangeNotifier Repository pattern In-memory application state
Flutter Widget Tests firebase_auth_mocks
Git / GitHub 📱 Current Implementation
MeetEm is currently a functional Flutter prototype.
Firebase Authentication is integrated, while event, group, and chat data currently use local/mock application state.
This separation allows the UI and application logic to be developed before connecting the remaining data flows to persistent backend storage.
Persist groups and chat messages using Firestore Persist event interest and membership data Replace mock event data with external event APIs Add real-time chat synchronization Add stronger user/group moderation Expand automated test coverage Complete production deployment
Built with Flutter, Dart, Firebase Authentication, and Google Maps.
Designs are subject to change during the phases of design and implementation. Preview: https://www.figma.com/design/xKYdlKL3pxpe3ZyksckuR8/Color-wheel-palette-generator--Community-?node-id=0-1&t=at2iEqBdTpU1bBR6-1
Wireframes and UI mockups were designed in Figma, using Figma Make to rapidly prototype the onboarding flow before implementation in Flutter.
The app's visual identity is built around two primary accent tones, each with a full tonal ramp for backgrounds, surfaces, and text states:
| Role | Hex | Swatch |
|---|---|---|
| Primary accent (teal) | #4894B1 |
Interactive elements, dark mode buttons |
| Primary accent (indigo) | #0E31AA |
Interactive elements, light mode buttons |
Teal ramp: #B0DFF6 · #5DBCE0 · #4894B1 · #346E84 · #214A5A · #0F2932 · #051319
Indigo ramp: #EFF0FE · #CCD0FD · #9CA5FC · #697AFA · #1E4DF7 · #0E31AA · #041862
Neutral ramp: #D6D8DA · #ADB1B3 · #888B8D · #656768 · #434546 · #242526 · #101111
Both a dark mode and light mode theme are supported, drawing from the same palette (teal-forward accents in dark mode, indigo-forward accents in light mode).
The onboarding flow was wireframed as 10 screens (5 dark mode, 5 light mode), designed for iPhone 17:
- Welcome — Map-themed hero image, app tagline ("Meet people near you"), social proof (2.4M+ users)
- Sign Up — Create account via Google OAuth or email/password (full name, email, password, confirm password)
- Log In — Returning user login via Google OAuth or email/password, with forgot password link
- Profile Setup — Username selection step (step 2 of 3), with explanation of visibility to other users
- Success — Welcome confirmation screen with account stats (members, topics, rating) and CTA to start exploring