Feature
Pop the Balloon
Live Video Game Show
Overview
Pop the Balloon is a live, multiplayer game-show-style matching feature. One user acts as the Picker, a group of users form the Lineup (contestants), and optional Audience members watch. The Picker "pops" (eliminates) lineup members round-by-round until only one remains — that person wins and a match is created with an animated celebration finale.
Key Features
- Real-time video via ZegoUIKit — large picker view + 3-column lineup grid
- 5 game rounds with server-configurable durations (15–60s each)
- Picker pops contestants one by one each round
- Lineup members can voluntarily "Pop Self" to leave
- Live gift system via GiftSheet — track total_gifts_worth per room
- Winner selection in Finale round
- Animated finale with 3-layer elastic hearts, stacked avatars, "IT'S A MATCH!" text
- Super Like button + message composer on finale page
- Glassmorphism UI with server-configurable gradient colors
- Camera & mic toggles during gameplay
- 44+ server-configurable settings — lineup size, round timers, credit costs, filters, auto-start rules, visual themes
- Auto-matchmaking via Artisan command (30s interval)
- REST API with 8 endpoints + 5 Pusher broadcasting events
Game Rounds
Visual Round
20 seconds
First impressions — picker observes the lineup
Pitch Round
45 seconds
Lineup members introduce themselves
Q&A Round
60 seconds
Picker asks questions, lineup answers
Social Round
45 seconds
Free conversation between picker and lineup
Finale
30 seconds
Picker chooses the winner
User Flow
- Browse active rooms on Events page → Pop the Balloon section
- Tap a room card → enter the lobby
- Choose your role: Picker, Lineup, or Audience
- Wait for minimum lineup count — auto-start countdown begins
- Game progresses through 5 rounds — picker pops contestants
- Send gifts to any participant during the game
- Finale round — picker chooses the winner
- Finale page shows animated match celebration with Super Like + chat
Monetization
- Credit cost to join as picker (configurable)
- Credit cost to join as lineup (configurable)
- Credit cost to join as audience (configurable)
- Winner bonus credits (configurable)
- Picker bonus credits (configurable)
- Gift purchases — coins → gifts → revenue share
- Super Like on finale page
Flutter + ZegoUIKit + Laravel + Pusher + MySQL
Feature
Blind Date Roulette
Anonymous Voice Speed Dating
Overview
Blind Date Roulette is an anonymous voice speed-dating feature. Users join themed events, get randomly paired with another participant for a timed, anonymous voice call, and can optionally reveal their identity to see their match. Everything is blurred — only your voice matters.
Key Features
- Themed events — different blind date events with varying themes
- One-on-one anonymous voice calls via ZegoUIKit (video disabled)
- Full identity blur — call UI covered with BackdropFilter overlay
- Icebreaker questions shown at call start (configurable)
- Timed rounds with countdown timer (server-configurable)
- "Reveal" button to show your identity
- "Skip" button to leave current match and re-queue
- Automated matchmaking — server pairs, client polls every 3s
- Animated "It's a Match!" reveal with elastic heart animations
- Auto super-like sent on mutual reveal
- In-app message composer after match
- 7 configurable settings — credits per join, max call duration, premium-only, photo-verification, icebreaker toggle, cooldown, master switch
User Flow
- Browse available blind date events on Events page
- Tap an event card → enter the event lobby
- See event info, participant count, round duration
- Tap "Join Roulette" → enter the waiting queue
- Server pairs you with another user → anonymous voice call begins
- Icebreaker question appears first — tap "Got it!" when ready
- Talk freely — your profile is hidden behind a blur effect
- Tap "Reveal" to show yourself, or "Skip" to re-queue
- Timer expires → auto-reveal if not already revealed
- Mutual reveal → "It's a Match!" celebration with animated hearts
- Auto super-like sent to partner
- Send a message or head back to events
Monetization
- Credit cost per join (configurable)
- Daily free spin limits (configurable)
- Extra spins cost credits
- Super Like costs credits
- Priority matching for premium users
Flutter + ZegoUIKit (voice-only) + Laravel + Pusher + MySQL
Feature
Echoes
Missed Connections & Geo-Proximity Discovery
Overview
Echoes is a "missed connections" feature that anonymously detects when two users have been in the same physical location at overlapping times and surfaces these encounters as a Tinder-style card feed. Discover people you crossed paths with but never met — and reveal yourself if you're interested.
Key Features
- Geo-proximity detection — background GPS pings track location overlap
- Anonymous card feed — zone name, date, partner's age, city, interests
- "Reveal Yourself" button to anonymously signal interest
- Mutual reveal unlocks full profiles
- Animated "IT'S A Connection" celebration with 3-layer elastic hearts
- Like, Super Like, and Pass actions on revealed partners
- Nearby zones section — manually check into geofenced locations
- Background location pinging via Workmanager (every 30 min default)
- Foreground + background ping support (Geolocator + Dio)
- Pull-to-refresh feed
- 6 configurable settings — ping interval, min overlap time, max echoes per day, premium-only, photo-verification, master switch
User Flow
- Open Echoes tab on Events page
- Tap "Enable Echoes" on the purple banner
- Grant location permission → background pinging starts
- Server detects location overlap with other users
- Echo cards appear in your feed with anonymous details
- Tap "Reveal Yourself" to signal interest
- If partner also revealed → tap "View Profile"
- "IT'S A Connection" celebration with hearts and avatars
- Choose: Like, Super Like, or Pass
- Matching uses the standard swipe_leftright API
Monetization
- Credit cost per Echo sent (configurable)
- Premium users get unlimited Echoes
- Higher priority delivery for paying users
Flutter + Laravel + Pusher + MySQL + Geolocator + Workmanager
Feature
Hot Takes
Speed-Dating Debate Game
Overview
Hot Takes is a personality-based speed-dating feature where users answer a curated set of questions, get algorithmically matched into pairs, then debate their answers in a timed 3-minute video/voice chat. After the timer expires, both users swipe on each other to decide if they want to match.
Key Features
- Onboarding questionnaire — users answer questions before entering the matchmaking pool (server-configurable)
- Automated matchmaking — server pairs users based on submitted answers; client polls every 3s
- Pair accept/skip screen — view partner profile + debate topic before committing
- 3-minute timed debate chat with animated countdown progress bar
- Timer turns red at 30s remaining with warning text
- Debate topic banner with fire icon at top of chat screen
- Four post-chat swipe actions: Dislike, Like, Super Like, Crush
- Animated "IT'S A MATCH!" celebration with floating hearts on mutual like
- "No Match This Time" screen with try-again option
- Voice/video calls configurable via allowVoiceChat / allowVideoChat settings
- Partner swipe status awareness during countdown
- Pulsing fire icon animation while waiting in queue
- Glassmorphism UI with dark purple gradient backgrounds
- Pusher broadcasting for real-time queue status and partner events
User Flow
- Enter Hot Takes from the Eventbuzz listing page
- Answer a series of personality/preference questions
- Submit answers → enter the matchmaking queue
- Server finds a compatible partner; client polls until paired
- View partner profile + debate topic on accept/skip screen
- Tap "Accept & Start Chat" → 3-minute debate timer starts
- Discuss the topic via text, voice, or video
- Both users can swipe at any time during the chat
- Timer expires → result screen shows match or no-match
- If matched: "Keep Chatting" or "Send Super Like"
- If not matched: "Try Again" returns to the queue
Flutter + Laravel + Pusher + MySQL + ZegoUIKit (calls)
Feature
Double Date
Group-to-Group Matching & Swipe System
Overview
Double Date is a group-based matching feature where users form groups of 2–4 people, join a lobby, swipe on other groups Tinder-style, and when matched, get a shared chat room plus tools to plan and execute a real-life double date — including meetup address, activity planning, call scheduling, attendance tracking, and post-date rating.
Key Features
- Group management — create named groups, invite members, join/leave, designated host
- Meetup address — set group location for proximity-based matching
- Lobby system with waiting queue showing queue position and heartbeat pulse animation
- Tinder-style card swiper showing group name, member avatars, and address
- Like / Pass swiping — mutual likes trigger "It's a Match!"
- Match acceptance flow — partner group info + "Accept Match" before chat
- Shared group chat with system messages and header quick-access buttons
- One-tap ZegoUIKit video conference for all group members
- Plan creation screen — activity name, description, date, time, address, dress code, budget
- Plan confirmation — separate confirm step after creating a plan
- Post-date rating — swipable user cards with 1–10 star rating
- Four post-date actions: Pass, Like, Super, Crush
- Attendance tracking for matched date events
- Individual user ratings with comments after a date
- Pusher broadcasting for real-time chat, plan updates, and call events
- Configurable via plugin settings — enabled toggle, min/max members per group
User Flow
- Enter Double Date from the Eventbuzz listing
- Create a group or join an existing one by ID
- Set your group's meetup address for proximity matching
- Tap your group card → enter the lobby (waiting queue)
- Wait for nearby groups to be found (pulsing heart animation)
- Swipe left (pass) or right (like) on candidate groups
- Mutual like → "It's a Match!" → tap "Accept Match"
- Enter shared group chat with text, call, and planning tools
- Create a date plan (activity, time, location, dress code)
- Confirm the plan when both groups agree
- Use video conference for group discussions
- After the date, mark attendance and rate partner members
- Submit post-date swipes on individual partner users
- View history of past double dates
Flutter + Laravel + Pusher + MySQL + ZegoUIKit (conference)
Feature
Splash & App Initialization
App Startup & Theme Loading
Overview
The app begins with an animated splash screen (background image + GIF logo). It loads theme preferences (dark/light), initializes Hive & SharedPreferences, fetches remote app config, checks auth state, and routes to either login or the main tab interface.
Key Features
- Animated GIF splash with background image
- Dark/light theme preference loading
- Hive & SharedPreferences initialization
- Remote app configuration fetch
- Authentication state check with auto-routing
- First-time login redirects to profile setup wizard
- Native splash wrapper prevents white flashes
Flutter + FlutterNativeSplash + Riverpod + Hive
Feature
Authentication
Multi-Method Login & Signup
Overview
Multi-method authentication supporting Phone (OTP), Email/Password, Google Sign-In, Facebook Login, and Apple Sign-In. Includes country-code phone picker, 6-digit OTP auto-retrieval, email/username validation, and password entry. On first-time login, routes to profile setup wizard.
Key Features
- Phone number login with country code picker + Firebase phone auth
- 6-digit OTP input with auto-retrieval and resend timer
- Email/username input with validation
- Password entry via Firebase email/password sign-in
- Google Sign-In, Facebook Login, Apple Sign-In
- Language selector at login screen
- Terms & privacy policy links
- Force-update detection and banned-user checks
- Web fallback for OTP handling
Flutter + Firebase Auth + flutter_facebook_auth + the_apple_sign_in + geolocator
Feature
Bottom Tab Navigation
5-Tab App Hub
Overview
Custom 5-tab bottom navigation bar (Swipe, Messages, Live, Teels, Profile). Manages deep linking from notifications, app-ban checks, location permission prompts, force-update dialogs, and incoming call overlays. Feature toggling via remote config.
Key Features
- 5 tabs: Swipe (Home), Messages, Live, Teels, Profile
- Deep linking from notification tap
- App ban detection and blocking screen
- Location permission prompts on startup
- Force-update dialog when app is outdated
- Incoming call overlay (PickupLayout) across all tabs
- Feature toggling via server remote config
- Page transitions with PageTransition
- Ad loading integration
Flutter + Riverpod + PageTransition + Admob
Feature
Swipe & Match
Tinder-Style Dating Cards
Overview
The core dating experience. Users see profile cards in a Tinder-style swiper deck. RIGHT = Like, LEFT = Nope, UP = SuperLike. Each action syncs to the server. Mutual likes trigger an animated Match screen. Also provides access to AI Match, Boost, Live Mingle, Events, and Filters. Daily interaction limits are enforced.
Key Features
- Tinder-style card swiper with profile photos, name, age
- Like, Nope, and SuperLike swipe actions
- Server-synced interactions per swipe
- Animated Match screen on mutual like
- AI Match button to launch Gemini chat
- Boost, Live Mingle, Events, and Filter access
- Daily interaction limits (likes, superlikes, dislikes)
- Status stories displayed above card deck
- Tap card to view full OtherProfile
- Animated heart particles on like
Flutter + flutter_card_swiper + Lottie + Riverpod
Feature
Match Celebration
"It’s a Match!" Screen
Overview
Animated celebration screen shown on mutual like. Displays both user avatars with elastic heart animation, "It's a Match!" text slide-in, and a text field to send the first message. "Send" opens the chat; "Keep Swiping" returns to the deck.
- Both user avatars displayed side-by-side
- Elastic heart animation with scale and bounce
- "It's a Match!" text with slide-in animation
- Text field for first message
- "Send" navigates to chat screen
- "Keep Swiping" returns to the card deck
Flutter + AnimationController + elastic/tween animations
Feature
Explore Users
Grid-Based User Discovery
Overview
Grid-based user discovery with a search bar (name/interest filtering). Users tap profile cards to view full OtherProfile. Pull-to-refresh loads more profiles.
- Grid layout of user profile cards
- Search bar by name or interest
- Tap to view full OtherProfile
- Pull-to-refresh pagination
Flutter + Riverpod + search filtering
Feature
Filter Options
Swipe Deck Filters
Overview
Comprehensive filter/settings for the swipe deck. Options include gender/interest, age range (18–100), location radius, language, "Here To" intent, premium-only toggle, global matching, show-people-in-range toggle, and custom interests.
- Gender / interest preference filter
- Age range slider (18–100)
- Location radius selector
- Language preference filter
- "Here To" intent filter
- Premium-only toggle
- Global matching toggle
- Show-people-in-range toggle
- Custom interest chips from configModel
- Map location picker
- Saves preferences to user profile
Flutter + Range sliders + map_location_picker + Riverpod
Feature
Map View
People Near Me
Overview
Interactive Google Map showing nearby user profiles as custom photo marker pins. Tap a marker to see a summary card (name, age, distance) with Like/Chat/View Profile actions. Includes a "People Near You" bottom list panel.
- Google Map with custom photo marker pins
- Profile summary card on marker tap (name, age, distance)
- Like, Chat, View Profile action buttons
- Current user location centered on map
- "People Near You" bottom list panel
- Data sourced from swipe deck's filtered users
Flutter + google_maps_flutter + custom Stack marker rendering + bottom sheet
Feature
Messaging / Chats
Conversation Inbox
Overview
Tabbed messaging inbox with "Chats" and "Voice Rooms" tabs. Conversation tiles show avatar, name, last message, unread badge, timestamp. Supports search, pull-to-refresh, and paginated load-more. Camera FAB for quick photo/video capture.
- Two tabs: Chats and Voice Rooms
- Conversation tiles with avatar, name, last message, badge, timestamp
- Search within conversations
- Pull-to-refresh and paginated load-more
- Camera FAB for quick media capture
- Banner ad placement for non-premium users
Flutter + TabController + Riverpod chat provider + badge counts
Feature
Chat Screen
1-on-1 Full-Featured Chat
Overview
Full-featured 1-on-1 chat supporting text, image/video/audio/file attachments, emoji picker, reply-to-message, message reactions, gift sending, audio/video call initiation, streak badges, intro video viewing, location sharing, message deletion, and block detection. Paginated with date separators. 18 specialized message widget types.
- Text, image, video, audio, and file attachments
- Emoji picker integration
- Reply-to-message with quoted preview
- Message reactions (like, love, haha, etc.)
- Gift sending with coin economy
- Audio/video call initiation from chat
- Streak badges for consecutive daily chatting
- Intro video viewing inline
- Location sharing
- Message deletion
- Block detection and handling
- Paginated message history with date separators
- 18 message widget types: text, media, audio, file, sticker, gift, location, call card, date separator, streak badge, reply preview, reaction overlay, and more
Flutter + emoji_picker_flutter + chat_bubble + Riverpod + CachedNetworkImage
Feature
Call Log
Call History
Overview
Paginated history of past audio/video calls. Shows caller/callee, call type, duration, timestamp, and status (missed/answered/rejected). Tap to call back.
- Caller and callee information
- Audio/video call type indicator
- Call duration display
- Timestamp of each call
- Status: missed, answered, or rejected
- Tap to initiate call back
- Pagination via ScrollController
Flutter + ScrollController pagination + callHistoryProvider
Feature
Intro Video Player
User Introduction Video
Overview
Full-screen video player for a user's intro video (Chewie controls). Overlay buttons to initiate Video Call or Voice Call to the profile owner. Used when opening a matched user's intro video from chat or profile.
- Full-screen Chewie video player
- Play/pause controls
- Overlay Video Call and Voice Call buttons
Flutter + video_player + chewie
Feature
Live Streaming
ZEGO-Based Video Broadcasts
Overview
Full ZEGO-based live streaming feature. Hosts can broadcast; viewers can join, send gifts (coin economy), comment via PK events panel, and see viewer lists. Supports PK Battle mode (1v1 coin war), co-hosting (request/approve), mute/unmute, live goal tracking, audience count, and real-time coin/diamond tracking. Streams end with a results screen showing watch time, peak viewers, and diamonds earned.
Key Features
- Browse/search active live streams in grid/list
- Host broadcast with ZEGO SDK
- Viewer experience with gift sending and comments
- PK Battle mode — 1v1 competition with coin war
- Co-hosting with request/approve workflow
- Mute/unmute controls
- Live goal tracking with target progress
- Audience count display
- Real-time coin/diamond tracking
- Post-stream stats screen (watch time, peak viewers, diamonds)
Flutter + zego_uikit_prebuilt_live_streaming + signaling plugin + gift economy
Feature
Teels
Short-Form Video Feed
Overview
TikTok-style vertical video feed with two modes: "For You" (algorithmic curation) and "Following" (videos from followed users). Uses PageController for seamless vertical swiping. Videos auto-play on visibility with overlay controls for like, comment, share, profile, and sound info. Supports search by hashtag/keyword.
Key Features
- Vertical swipe PageView for seamless video navigation
- "For You" algorithmic feed with infinite scroll
- "Following" feed filtered to followed users
- Auto-play/pause based on visibility
- Like, comment, share, and profile overlay controls
- Sound info with marquee text and disc animation
- Hashtag/keyword search with paginated results
- Smooth page indicator for carousel posts
- Gift sending from within video
- Match-making from video overlay
- Shimmer loading states and error states
Flutter + video_player + PageController + visibility_detector + share_plus + Lottie + Riverpod
Feature
Teels Camera
Short-Form Content Creation
Overview
Full camera screen for recording short-form videos. Front/rear toggle, flash, 15s/30s timer, music overlay, photo capture, pinch-to-zoom, grid overlay. Music library integration for background sound. Preview step to review before posting. Upload screen adds caption, hashtags, mentions, privacy, and sound track.
Key Features
- Front/rear camera toggle
- Flash toggle
- 15s and 30s recording timer
- Music overlay selection from library
- Photo capture mode
- Video recording with progress indicator
- Pinch-to-zoom during recording
- Grid overlay for composition
- Preview screen before posting
- Upload with caption, hashtags, mentions, privacy
- Upload progress percentage tracking
Flutter + camera plugin + audioplayers + upload_assistant + ImagePicker
Feature
Profile
User Profile Management
Overview
User's own profile with tabbed layout: "Profile View" (public-facing), "My Reels" (uploaded Teels), "Feeds" (posts), and "Saved" (bookmarks). Header shows photo, name, age, bio, stats (followers, following, likes, ranking). Action buttons for Edit Profile, Share (QR/link), Boost, Wallet, Settings. Photo carousel with camera integration.
- Tabbed layout: Profile View, My Reels, Feeds, Saved
- Header with photo, name, age, bio, stats
- Followers, following, likes, and ranking stats
- Edit Profile, Share, Boost, Wallet, Settings buttons
- QR code generation and share via link
- Verified badge display
- Camera integration for Teels/status posting
- Photo carousel with scrollable images
Flutter + TabController + AnimationController + qr_flutter
Feature
Edit Profile
Full Profile Editor
Overview
Full profile editor with sections: photo (with AI editing), name, username, email, phone, age, about/bio, interests, social links, photo gallery (add/delete/reorder), intro video upload, privacy toggles, and personal questions. Image cropping and real-time preview.
- Profile photo with AI editing
- Name, username, email, phone, age, bio editing
- Interest selection chips
- Social media links (Instagram, Facebook, YouTube)
- Photo gallery management — add, delete, reorder
- Intro video upload (recorded in-app)
- Privacy toggles (who can see likes, messages, visits)
- Image cropping via image_editor_plus
- Sight Engine photo validation
- Real-time preview changes
Flutter + image_editor_plus + video_player + sight_engine + upload_assistant
Feature
First-Time Profile Setup
Onboarding Wizard
Overview
Guided multi-step onboarding wizard for new users. Steps: upload photos (min 2), select interests, set location (map picker), choose gender, set age/DOB, configure privacy. Page indicator tracks progress. Routes to main app on completion.
- Multi-step PageView wizard
- Photo upload (minimum 2 photos)
- Interest selection
- Location via map picker
- Gender selection
- Age and date of birth input
- Privacy configuration
- Progress page indicator (smooth_page_indicator)
Flutter + PageView + smooth_page_indicator + map_location_picker
Feature
Followers / Following
Follow Management
Overview
List view of followers or following users. Each tile shows avatar, name, and follow/unfollow button. Supports pull-to-refresh and paginated loading. Also reused for live stream invitee selection.
- Avatar, name, and follow/unfollow per tile
- Pull-to-refresh
- Paginated loading
- Reused for live stream invitee selection
Flutter + followersProvider + infinite scroll
Feature
Leaderboard
User Rankings & Podium
Overview
Ranked leaderboard showing top users by engagement (weekly/all-time). Animated sticky header with top-3 podium, responsive scroll UI, rank cards with avatar, name, score, rank number. Tapping navigates to user profile. Contest-aware for contest-specific rankings.
- Weekly and all-time filter tabs
- Animated sticky header with top-3 podium
- Scroll-responsive UI
- Rank cards with avatar, name, score, rank number
- Tap to navigate to user profile
- Contest-specific ranking integration
Flutter + Custom animated sliver header + top_ranked_user podium widget
Feature
QR Scanner
Profile QR Code Scanning
Overview
Camera-based QR code scanner. Scans profile URLs (format: homeUrl/?page=profile&id={userId}) and navigates to that user's profile. Camera pauses after detection.
- Camera-based QR scanning
- Parses profile URL format
- Auto-navigation on detection
- Camera pauses after scan to prevent repeats
Flutter + qr_code_scanner_plus + URI parsing
Feature
Feeds
Social Media Posts
Overview
Facebook/Instagram-style social feed. Scrollable posts (text, image carousel, video) from followed users and the community. Each post shows avatar/name, timestamp, content, like/reaction buttons (animated), comment count, share, 3-dot menu (report, hide, delete). Status stories at top (circular rings). Infinite scroll with native ad insertion.
Key Features
- Scrollable feed of text, image, and video posts
- Animated reaction buttons (flutter_reaction_button)
- Image carousel posts (carousel_slider)
- Video post playback inline
- Comment count and share buttons
- Three-dot menu: report, hide, delete
- Status stories at top as circular rings
- Infinite scroll with pagination
- Native ad insertion between posts
- Post composer with hashtags, images, music
- Hashtag/URL/mention detection during typing
- Privacy toggle (public/private)
Flutter + flutter_reaction_button + carousel_slider + video_player + detectable_text_field + native ads
Feature
Comments
Threaded Post & Video Comments
Overview
Full comment system for feed posts and Teels. Threaded comments with avatars, names, timestamps, text, and media attachments. Supports text, image/GIF (Giphy), reactions (like/love/haha), nested replies, paginated loading, delete, report, @mentions. Real-time updates with optimistic UI.
- Threaded comments with nested replies
- Text, image, and GIF attachments (via Giphy)
- Reaction buttons (like, love, haha, etc.)
- Paginated loading
- Delete own comments
- Report inappropriate comments
- @mention user tagging
- Expandable long text
- Optimistic UI updates
Flutter + flutter_reaction_button + giphy_get + paginated comments + Riverpod
Feature
Voice Chat Rooms
Clubhouse-Style Audio Rooms
Overview
Clubhouse-style audio rooms powered by ZEGO. Browse rooms by category, search, view live/upcoming rooms with avatars. Host can manage speakers, moderate, invite. Users join as listeners or speakers. Raise hand to speak, send gifts, mute/unmute, leave. Create rooms with name, description, category, cover image, scheduled time.
Key Features
- Category-based room browsing (Music, Tech, Dating, etc.)
- Search for rooms by name
- Live and upcoming room schedules
- Room creation form with name, description, category, cover image
- Host/co-host speaker management
- Raise hand to speak workflow
- Send gifts during audio session
- Mute/unmute self
- Grid/list view toggle
- Hive-based search history
Flutter + zego_uikit_prebuilt_live_audio_room + Hive + Riverpod
Feature
Wallet & Economy
Virtual Currency System
Overview
Virtual economy with coins (purchased) and diamonds (earned). Wallet screen shows balance and quick actions: Add Coins (purchase packages), Send Balance (to other users), My Card (withdrawal bank card), Withdraw (cash out earnings), Transactions (full history). Coin plans via in-app purchase/Stripe. Full withdrawal form with bank details.
Key Features
- Coin balance and diamond count display
- Coin package purchases with bonus amounts
- In-app purchase via platform channels and Stripe
- Send coins to other users
- Bank card management for withdrawals
- Withdrawal form: amount, bank, account, routing, address
- Minimum/maximum withdrawal validation
- Full paginated transaction history
- Transaction detail view with related user info
- Referral earning summary
Flutter + Stripe + platform channels for IAP + Riverpod wallet provider
Feature
Boost Profile
Premium Visibility Boost
Overview
Premium visibility boost. Carousel of boost packages (1hr, 3hrs, 6hrs) with pricing and descriptions ("Be seen first", "Be at the top profile in your area"). Purchase via subscription system. Prioritized placement in swipe deck.
- Carousel of boost duration packages
- Pricing per package from server config
- Subscription-based purchase
- Prioritized position in swipe deck
Flutter + carousel_slider + subscription integration
Feature
Peer-to-Peer Calling
Audio/Video Calls & Live Mingle
Overview
ZEGO-based audio/video calls between matched users. Call screen shows caller/callee info, duration, mute, speaker, switch camera, end call. In-call gifts via GiftSheet. Incoming call notification with accept/reject. Live Mingle random video chat feature — join queue, get matched with stranger for timed call (60–90s), gender filter, call extension. Global incoming call overlay.
Key Features
- Active audio/video call with ZEGO SDK
- Caller/callee info display
- Call duration timer
- Mute/unmute, speaker toggle, camera switch
- End call button
- In-call gift sending via GiftSheet
- Incoming call notification with accept/reject
- Live Mingle random video chat matching
- Queue with pulsing animation while searching
- Timed calls (60–90s) with extension option
- Gender-based matching selection
- Premium balance checks
- Global PickupLayout overlay for incoming calls
- Web placeholder for unsupported platforms
Flutter + zego_uikit_prebuilt_call + timer polling + premium coin system
Feature
Plan Date
Real-World Meetup Scheduling
Overview
Schedule real-world dates with matched users. Create meetup with date/time, venue address, city, date type (Coffee, Dinner, Walk), budget (Free–Expensive), description, photos (up to 5), visibility. Costs credits. Matched user accepts or declines. My Meetings list shows all past/future meetups with status.
- Date/time picker for scheduling
- Venue address input
- City selection
- Date type: Coffee, Dinner, Walk, etc.
- Budget range: Free, Cheap, Moderate, Expensive
- Description and photo attachments (up to 5)
- Post visibility setting
- Credit cost to create
- Accept/decline workflow for matched user
- My Meetings list with status indicators
Flutter + Date/time pickers + budget chips + image gallery + meetingProvider
Feature
Notifications
User Activity Inbox
Overview
Centralized notification inbox with all push history. Grouped by type: likes, matches, messages, comments, new followers, system announcements. Each shows icon, text, timestamp, tappable to navigate. Pull-to-refresh, mark all read, delete individual, infinite scroll. Real-time badge count updates via timer polling.
- Grouped by notification type
- Icon, text, and timestamp per notification
- Tap to navigate to relevant screen
- Pull-to-refresh
- Mark all as read
- Delete individual notifications
- Infinite scroll pagination
- Real-time badge count updates
Flutter + Timer-based polling + notificationProvider + popup menu
Feature
Advanced Search
Universal Search Hub
Overview
Universal search with tabbed modes: Users, Teels (hashtags/keywords), Feeds, Music, Live Streams, Voice Rooms. Real-time debounced input. Shows search history (Hive), top-searched users, and paginated results per category.
- Tabbed search across 6 categories
- Real-time debounced text input
- Hive-based search history
- Top-searched users display
- Paginated results per category
Flutter + Tabbed interface + Hive searchHistory + Riverpod
Feature
Security & Privacy
Account Security Center
Overview
Account security and privacy hub. Manage blocked users (view/unblock), request account deletion, get verified (ID verification), change password, two-factor auth (if available), notification privacy, data sharing controls.
- Blocked users list with unblock action
- Account deletion request
- Identity verification link
- Password change
- Two-factor authentication toggle
- Notification privacy settings
- Data sharing controls
Flutter + accountDeleteRequestProvider + blockedUsersFutureProvider
Feature
Account Settings
Full Account Management
Overview
Full account management screen. Sections: profile info update, location (map picker), language selection, referral link, subscription/boost management, account deletion, profile visibility, app version info, rate on store, logout. Stripe payment integration.
- Profile information editing
- Location update via map picker
- Language selection
- Referral program link
- Subscription (Premium/Boost) management
- Account deletion request
- Profile visibility settings
- App version display
- Rate on store link
- Logout
- Stripe payment integration
Flutter + map_location_picker + store_redirect + Riverpod
Feature
Language Selection
Internationalization
Overview
Internationalization screen with scrollable list of supported languages (English, Spanish, French, Arabic, etc.). Selection saved to SharedPreferences, applied app-wide via easy_localization. Changes take effect on app restart or hot reload.
- Scrollable list of supported languages
- Selection persisted to SharedPreferences
- App-wide locale switch via easy_localization
- Changes apply on restart or hot reload
Flutter + easy_localization + Hive/SharedPreferences
Feature
Subscriptions
Premium Plan Purchases
Overview
Premium subscription purchasing. Carousel of packages (weekly, monthly, yearly) with feature highlights (unlimited likes, rewind, see who likes you, incognito). Payment via Stripe. Server-side premium status update on success.
- Carousel of subscription packages
- Feature highlight display
- Stripe payment processing
- Server-side premium status update
Flutter + carousel_slider + Stripe SDK + subscription_builder
Feature
Gemini AI Assistant
AI Matchmaking Chat
Overview
AI matchmaking assistant powered by Google Gemini (gemini-2.5-flash via Firebase AI). Users chat with the AI, which suggests compatible profiles based on conversation context. Features: text/voice input, image attachment, animated pulse border, typewriter text effect, inline profile cards. Initializes model on entry, handles loading and empty states.
- Google Gemini AI model integration (gemini-2.5-flash)
- AI-suggested user profiles as inline image cards
- Text messaging with chat history
- Voice input via audio recording
- Image attachment support
- Animated pulse border effect
- Typewriter text effect for AI responses
- ChatSession management with context
Flutter + firebase_ai (GenerativeModel, ChatSession) + record package + typewritertext
Feature
Identity Verification
KYC & Verified Badge
Overview
KYC verification for verified badge. Multi-step flow: upload photo ID (passport, driver's license), take selfie for face matching, submit for manual review. Shows verification status (pending/approved/rejected), allows resubmission.
- Government ID document upload (photo ID page)
- Live selfie capture for face comparison
- Multi-step submission flow
- Verification status display
- Resubmission on rejection
- Image cropping and compression
Flutter + Image upload + cropping + verification provider
Feature
Interactions History
Likes, Superlikes & Dislikes
Overview
History of all user interactions (likes, superlikes, dislikes) in three filtered tabs. Each tile shows avatar, name, action buttons. Infinite scroll pagination, search within interactions, ability to like back from the list.
- Three tabs: Likes, Superlikes, Dislikes
- Avatar, name, and action buttons per tile
- Infinite scroll pagination
- Search within interactions
- Like back from the list
Flutter + Tabbed lists + interactionProvider + lastTimeLikesState
Feature
Matches List
Mutual Match Grid
Overview
Grid/list of all mutually matched users. Each shows avatar, name, age, mutual interest badges. Search within matches. Tap opens chat. "Matched recently" section with pagination for older matches.
- Grid/list layout of matched users
- Avatar, name, age, interest badges
- Search within matches
- Tap to open chat screen
- "Matched recently" section
- Pagination for older matches
Flutter + FutureBuilder + matches provider + search filter
Feature
Music Library
Sound Browser for Content
Overview
Tabbed sound browser for Teels/Feeds background music. Three tabs: Discover (trending/new), Favorites (saved), Search. Each sound shows title, artist, duration, preview play button. Supports playback, trimming, selection callbacks. Integrates with Teels camera for sound overlay.
- Three tabs: Discover, Favorites, Search
- Trending and new music tracks
- Preview audio playback
- Sound trimming on selection
- Favorites management
- Real-time search by track or artist
- Integrates with Teels camera recording
Flutter + audioplayers + PageController + Riverpod playback state
Feature
Status / Stories
Instagram-Style Stories
Overview
Instagram/WhatsApp-style stories viewer. Full-screen vertical story sequence (image, video, or text). Tap left/right to navigate, auto-advance with configurable duration, pull-down to dismiss. Stories grouped per user, shown as circular rings on feeds page. Text status creator with customizable background colors.
- Image, video, and text story types
- Tap left/right to navigate between stories
- Auto-advance with configurable duration
- Pull-down to dismiss
- Circular ring display on feeds page
- Text status creator with background color picker
Flutter + Custom StoryController + StoryItem (pageImage, pageVideo, text)
Feature
Contests
Time-Limited Ranking Competitions
Overview
Time-limited ranking competitions. Shows active contests (e.g., "Most Likes This Week") with leaderboard of top participants. Users see their rank and reward structure. Integrates with ranking provider and animated leaderboard.
- Active contest listing
- Contest-specific leaderboard
- User rank and reward display
- Integration with animated leaderboard component
Flutter + contestsProvider + AnimatedLeaderboard
Feature
Events Hub
Social Events & Activities
Overview
Social events hub with three tabs: "Events" (organized dating/social events with date, time, location, participant count, cover image, entry fee), "Activities" (mini-games: Pop the Balloon, Blind Date, Echoes, Hot Takes), and "Rooms" (Voice Chat Rooms with scheduled topics). Users can browse, join, or create events.
- Three tabs: Events, Activities, Rooms
- Event cards with date, time, location, cover, fee
- Activities section launches mini-games
- Rooms tab shows scheduled voice chat topics
- Browse, join, or create events
Flutter + Tabbed layout + allEventsProvider + links to mini-games and voice rooms
Feature
Referrals
Invite-Friend Program
Overview
Referral/invite program. Shows banner, unique referral code, share options (system share sheet), referral stats (total referrals, earnings). Top referrers leaderboard to gamify. Users earn credits/coins per successful referral.
- Banner image display
- Unique referral code per user
- System share sheet integration
- Referral stats: total referrals, earnings
- Leaderboard of top referrers
- Credit/coin rewards per successful referral
Flutter + System share + referral code + leaderboard
Feature
Report
Flag Inappropriate Content
Overview
Report inappropriate users, content, or behavior. Select reason (spam, harassment, fake profile, inappropriate content, etc.), add description, attach screenshots, provide contact info. Supports different report types (user, post, comment). Submitted to moderation team.
- Dropdown reason selection
- Text description field
- Screenshot/image attachment
- Contact info (optional)
- Multiple report types: user, post, comment
Flutter + Dropdown + image attachments + reportProvider
Feature
In-App Browser
Embedded Web Views
Overview
Full in-app web browser (flutter_inappwebview) with pull-to-refresh, loading bar, JavaScript, nav controls, external URL handling. Simpler wrapper for Terms of Service, Privacy Policy, FAQs, and support pages via type-indexed URL mapping.
- Full-featured in-app web browser
- Pull-to-refresh
- Loading progress bar
- JavaScript execution support
- Back/forward navigation
- External URL handling
- Simplified wrapper for ToS, Privacy, FAQs
Flutter + flutter_inappwebview + pull_to_refresh + url_launcher
Feature
Ad Monetization
Google AdMob Integration
Overview
Google AdMob integration. Banner ads at bottom of chat lists and other pages. Native medium-template ads inserted between feed posts. Only shown to non-premium users. Respects ad availability from app config.
- Banner ads at bottom of list screens
- Native ads within feed scroll
- Suppressed for premium users
- Configurable via app config
- Platform-specific ad unit IDs
Flutter + google_mobile_ads (BannerAd, NativeAd) + premium user check
Feature
Photo Viewer
Full-Screen Image Gallery
Overview
Full-screen pinch-to-zoom image viewer. Swipe between multiple images in a page view. Download/save, share, close. Interstitial ad (non-premium) on open.
- Pinch-to-zoom with photo_view
- Swipe between multiple images
- Download/save to device
- Share via system sheet
- Interstitial ad on open (non-premium)
Flutter + photo_view + file_saver + interstitial ads via CommonFun
Feature
Payment Gateway System
6-Gateway Multi-Currency Payments
Overview
A unified 6-gateway payment system supporting one-time purchases (coins, boosts) and recurring subscriptions (premium plans) with auto-renewal webhooks, real-time premium expiry deactivation, and monthly benefit allowances (boosts/swipes per plan).
Supported Gateways
- Stripe — one-time + subscriptions via Checkout Sessions; webhook for invoice.payment_succeeded renewals
- PayPal — one-time via Orders API + subscriptions via Billing Subscriptions; webhook for PAYMENT.SALE.COMPLETED renewals
- Paystack — one-time via Transaction Initialize + subscriptions via Plan parameter; webhook for subscription.notification renewals
- Razorpay — one-time via Payment Links API + subscriptions via Subscriptions API; webhook for subscription.charged renewals
- Mercado Pago — one-time via Checkout Preferences + subscriptions via Preapproval API; webhook for subscription.updated renewals
- Mollie — one-time via Payments API + subscriptions via Customer mandate flow (first payment with sequenceType:'first' creates mandate, subscription created on webhook confirmation)
Payment Types
- coins — one-time purchase; user receives coin amount on the balance column via users_credits ledger entry
- boost — one-time purchase; user receives the boost count on boost_balance
- premium — recurring subscription; creates users_subscriptions record with expires_at = now + plan.days; sets users.premium=1 and premium_expiry_date; webhook renewals extend expires_at from max(old_expiry, now) + plan.days (never overwrites existing premium)
Architecture
Backend (Laravel):
- PaymentController (API) — creates payment_links with random reference, type, item_id, amount; responds with reference for checkout redirect
- PaymentCheckoutController (Web) — checkout.show() renders gateway selection UI; six process*() methods each create the gateway-specific checkout session/order/link and return a redirect URL; success() handles post-payment redirect — re-verifies payment via gateway API for all 6 gateways, then grants benefits
- PaymentWebhookController — six handle*() methods for gateway webhooks; completePayment() transitions payment_link to completed and grants benefits; renewSubscription() extends premium for recurring charges; cancelLocalSubscription() marks sub_status=cancelled
- UserProfileService — formatUser and formatFollowerFull return isPremium/premium fields with in-memory virtual check against premium_expiry_date (isPremiumActive helper)
- SubscriptionExpiry middleware — runs on all API routes; checks if premium_expiry_date has passed and deactivates instantly
- subscription:expire Artisan command — batch deactivates expired subscriptions every minute
Flutter:
- item_coin_plan.dart — gateway icon buttons for all 6 gateways
- user_profile_provider.dart — parses isPremium/premiumExpiryDate from API; local check: if premiumExpiryDate is past, overrides isPremium to false
- is_subscribed_provider.dart — RevenueCat-based isPremiumUserProvider
- init_purchase_conf.dart — RevenueCat listener calls updateUser on entitlement changes to keep backend in sync
- subscription_builder.dart — purchase flow that updates backend via updateUser after RevenueCat purchase
Checkout Flow
- User taps purchase button → PaymentController@createLink creates payment_links row with random reference, status=pending
- App opens WebView to /pay/{reference} — shows gateway selection UI
- User selects gateway → POST /pay/{reference}/{gateway} → returns gateway checkout URL
- WebView loads gateway checkout URL → user completes payment
- Gateway redirects to /pay/{reference}/success → success() re-verifies via gateway API → grants benefits
- Gateway also sends webhook → webhook handler processes (idempotent)
Webhook Processing
- All 6 gateways have webhook handlers with signature verification: Stripe (\Stripe\Webhook::constructEvent), PayPal (verify-webhook-signature API), Paystack (HMAC-SHA512), Razorpay (HMAC-SHA256), Mercado Pago (HMAC-SHA256), Mollie (outbound API re-fetch)
- completePayment() is idempotent — skips if payment_link.status is already completed; logs duplicates for audit
Subscription Management
- Initial purchase: completePayment inserts users_subscriptions with expires_at = now + plan.days, gateway_subscription_id if available
- Recurring charge: webhook → renewSubscription() extends expires_at using max(old_expiry, now) + plan.days
- Cancellation: webhook → cancelLocalSubscription() marks sub_status=cancelled
- Expired subscriptions: subscription:expire command sets sub_status=expired and users.premium=0 for past-due records
Auto-Deactivation System (4 layers)
- SubscriptionExpiry middleware — deactivates premium_expiry_date on every API request (instant)
- UserProfileService::isPremiumActive — in-memory virtual check before returning profile data
- subscription:expire cron — batch deactivates every minute
- Flutter local check — compares premiumExpiryDate against DateTime.now() after each profile fetch
Security Features
- FORBIDDEN_COLUMNS in UserUpdateService — prevents self-escalation of admin, verified, balance, premium_expiry_date, superlikes, etc.
- Webhook signature verification on all 6 gateways
- cURL error handling — all 18+ calls use curlGet/curlPost helpers with timeouts, HTTP status checks, and JSON validation
- HMAC signature verification on Razorpay payment link callbacks in success()
- Amount verification defense-in-depth: payment_links created server-side with fixed amounts; gateways process the locked amount
Database Schema
- payment_links — user_id, type (premium/coins/boost), item_id, reference (unique), amount, currency, status (pending/completed/failed), gateway, gateway_transaction_id, timestamps
- users_subscriptions — user_id, plan_id, gateway, gateway_subscription_id, sub_status (active/cancelled/expired), expires_at, current_period_end
- pro_plans — id, days, price, tier_id, gateway plan ID columns for each of the 4 subscription-capable gateways, boosts_per_month, swipes_per_month
- users — premium, premium_expiry_date, boost_balance, balance, monthly_boosts_remaining, monthly_swipes_remaining, monthly_reset_at
- users_credits — ledger for coin purchases/spends
- users_transactions — financial transaction log with type, method, status
- users_activity_logs — user-facing activity feed
- activity — notification-style activity records
- plugins_settings — gateway enable toggles, API keys, webhook secrets, currency config (all stored as key-value pairs)
Setup Requirements
- Fill in gateway plan IDs in pro_plans table (stripe_price_id, paypal_plan_id, paystack_plan_id, razorpay_plan_id) — all currently NULL
- Configure API keys in plugins_settings for each gateway (only Paystack has test keys pre-configured)
- Set stripe_webhook_secret, paypal_webhook_id for signature verification
- Configure webhook endpoints in each gateway dashboard to point to /webhook/{gateway} URLs
- Create boost_packages rows — currently empty; boost purchases will fail
- Add pro_plans for Gold/Platinum tiers — currently all plans use tier_id=1
- Set PAYPAL_SANDBOX=true in .env for development, remove for production
- Run php artisan subscription:expire every minute (add to cron via schedule:run)
Laravel 8+ (backend) + Stripe/PHP SDK + cURL (PayPal, Paystack, Razorpay, Mercado Pago, Mollie) + MySQL + Flutter + RevenueCat (in-app subscriptions)
Feature
Universal Deep Linking
Custom Scheme + HTTPS Domain Links + Web Fallback
Overview
A complete deep linking system that allows external links to open specific content inside the app. Supports three entry points: custom URI scheme (lamat://post/42), HTTPS domain links (https://lamat.local/post/42) via Universal/App Links, and a web fallback page when the app is not installed. Links are queued if they arrive before authentication completes and processed once the user is logged in.
Supported Link Types
- Post / Teel —
lamat://post/42 → opens ItemVideo player with the specific teel
- Profile —
lamat://profile/42 → opens OtherUserDetailsPage (aliases: user)
- Chat —
lamat://chat/42 → opens ChatScreen with peer (auth required; aliases: message)
- Match —
lamat://match/42 → opens Matches screen (auth required)
- Feed —
lamat://feed/42 → opens Feeds screen
- Event —
lamat://event/42 → opens Events screen
- Verification —
lamat://verify → opens Identity Verification screen (auth required)
- Promotion —
lamat://promo/42 → opens Promotion screen (auth required)
Architecture
- Flutter model —
lib/models/deep_link.dart: DeepLinkType enum (11 cases), DeepLink value class with requiresAuth gate and appSchemeUrl reverse-converter, pure parseDeepLink(Uri) function accepting custom scheme or HTTPS URIs with path segment aliases
- Riverpod providers —
lib/providers/deep_link_provider.dart: pendingDeepLinkProvider (queue) and deepLinkInitProvider (boot completion flag)
- DeepLinkService —
lib/services/deep_link_service.dart: singleton listening on app_links URI stream; queues links when app is not initialised or auth is missing; dispatches to per-type navigation methods (_navigateToTeel, _navigateToProfile, _navigateToChat, etc.)
- App boot integration —
myapp.dart instantiates service and calls init(); splash_screen.dart calls markInitialised() then processPendingLink() in all 3 navigation branches
- Shared navigator key —
main.dart's navigatorKey passed to AppRouter constructor, enabling navigation from non-widget services
Laravel Backend
- DeepLinkController —
app/Http/Controllers/DeepLinkController.php: redirect() validates path against 15 accepted prefixes, renders branded redirect Blade view with JS auto-redirect and fallback; appleAppSiteAssociation() serves iOS Universal Links JSON; assetLinks() serves Android App Links JSON
- Redirect view —
resources/views/deep-link.blade.php: gradient UI with spinner, "Open App" button, 2s JS timeout — detects if app launched (page hidden) or not (swaps to download prompt)
- Web routes — regex-constrained catch-all matches only deep link paths; well-known endpoints at
/.well-known/apple-app-site-association and /.well-known/assetlinks.json
Auth Gate
- Public — post, teel, profile, feed, event (no token required)
- Protected — chat, match, verification, promotion (requires valid Sanctum token; queued if absent)
Security
- Whitelist path validation on both client (Flutter) and server (Laravel)
- Custom scheme derived from hostname — prevents scheme confusion
- No user data exposed in URLs (IDs only)
Flutter + app_links + Laravel + Blade + MySQL