User Journey
End-to-end flows for every actor in the system. Click any node for detailed implementation notes, phase, and related milestones.
Tip: Click any node in the diagram below to see details in the right panel.
Cosplayer (end user)
Moderator
Admin (CON Quest team)
Vendor (Phase 2)
Sponsor (Phase 2)
Scroll to zoom · Drag to pan
graph TB
subgraph COSPLAYER ["COSPLAYER (End User on iOS / Android)"]
C1[Discover App
organic, friend invite, convention promo] C2[Sign Up
email plus age check, Apple, or Google] C3[Create Profile
username, bio, fandoms, cosplay skills] C4[Upload Photo and Banner] C5[Toggle: Visible to Nearby Cosplayers] C6[Cosplayer Radar
find others nearby by zip] C7[Browse Conventions
filter: Anime, Horror, Comic, 18 plus] C8[Search by Zip Radius] C9[Convention Detail
date, city, web link] C10[RSVP to Convention] C11[Arrive Flow
check in at event] C12[Enter Lobby Chat] C13[Join Fandom Room] C14[Join Tea Room
anonymous gossip chat] C15[Create Meetup
title, time, location, category] C16[RSVP to Meetup] C17[Send Direct Message] C18[Send Friend Request] C19[Upload Photo to Chat] C20[Report User or Content] C21[Block or Mute User] C1 --> C2 --> C3 --> C4 --> C5 C5 --> C6 C3 --> C7 --> C8 --> C9 --> C10 --> C11 C11 --> C12 --> C13 C12 --> C14 C12 --> C15 --> C16 C13 --> C17 C17 --> C18 C12 --> C19 C19 --> C20 --> C21 end subgraph MODERATOR ["MODERATOR (Admin Web Panel)"] M1[Login to Admin Panel] M2[Open Moderation Queue] M3[Review Reported Content] M4[Take Action: Warn, Suspend, Ban] M5[Action Logged in History] M1 --> M2 --> M3 --> M4 --> M5 end subgraph ADMIN ["ADMIN / CON QUEST TEAM (Admin Web Panel)"] A1[Login: Admin Role] A2[Manage User Roles] A3[Send Mass Push to All Users] A4[View Internal Analytics] A5[Manage Legal Documents] A6[Upload Convention Map and Schedule
Phase 2] A7[Set Pinned Headers on Chats
Phase 2] A8[Assign Sponsor Tier to Convention
Phase 2] A9[Verify Vendor / Booth Partner
Phase 2] A10[Queue Vendor Flash Sale Push
Phase 2] A11[Schedule Multi Day Push Campaign
Phase 2] A12[Generate Sponsor Analytics Report
Phase 2] A13[Export PDF or CSV Report
Phase 2] A1 --> A2 A1 --> A3 A1 --> A4 A1 --> A5 A1 --> A6 --> A7 A1 --> A8 --> A9 --> A10 A8 --> A11 A8 --> A12 --> A13 end subgraph VENDOR ["VENDOR / BOOTH PARTNER (no direct app access)"] V1[Apply to be Verified Vendor
via convention sponsor] V2[Provide Flash Sale Copy and Asset] V3[Wait for Scheduled Push to Fire] V4[Receive Engagement Report Post Event] V1 --> V2 --> V3 --> V4 end subgraph SPONSOR ["SPONSOR / CONVENTION (no direct app access)"] S1[Sign Sponsorship Agreement
Bronze, Silver, or Gold] S2[Provide Map, Schedule, Branding Assets] S3[Admin Configures Tier and Branding] S4[Tier Features Activate Automatically] S5[Receive Post Event Analytics Report] S1 --> S2 --> S3 --> S4 --> S5 end M3 -.report from.-> C20 A9 -.verifies.-> V1 A10 -.fires for.-> V3 A8 -.applies tier from.-> S3 A12 -.delivers to.-> S5 A6 -.assets from.-> S2 classDef cosplayer fill:#e8f5e8,stroke:#28a745,stroke-width:2px,color:#1b5e20 classDef moderator fill:#fff3e0,stroke:#ff9800,stroke-width:2px,color:#e65100 classDef admin fill:#f3e5f5,stroke:#6b3fa0,stroke-width:2px,color:#4a148c classDef vendor fill:#fce4ec,stroke:#e91e63,stroke-width:2px,color:#880e4f classDef sponsor fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 class C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 cosplayer class M1,M2,M3,M4,M5 moderator class A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13 admin class V1,V2,V3,V4 vendor class S1,S2,S3,S4,S5 sponsor click C2 nodeDetail "Sign Up" click C3 nodeDetail "Create Profile" click C5 nodeDetail "Visibility Toggle" click C6 nodeDetail "Cosplayer Radar" click C7 nodeDetail "Browse Conventions" click C10 nodeDetail "RSVP" click C11 nodeDetail "Arrive Flow" click C12 nodeDetail "Lobby Chat" click C14 nodeDetail "Tea Room" click C15 nodeDetail "Create Meetup" click C17 nodeDetail "Direct Message" click C18 nodeDetail "Friend Request" click C20 nodeDetail "Report" click M1 nodeDetail "Admin Login" click M2 nodeDetail "Moderation Queue" click M4 nodeDetail "Take Action" click A3 nodeDetail "Mass Push" click A5 nodeDetail "Legal Docs" click A6 nodeDetail "Asset Upload" click A7 nodeDetail "Pinned Headers" click A8 nodeDetail "Sponsor Tier" click A9 nodeDetail "Vendor Verify" click A10 nodeDetail "Flash Sale Push" click A11 nodeDetail "Scheduled Campaign" click A12 nodeDetail "Sponsor Analytics" click S1 nodeDetail "Sponsorship" click S5 nodeDetail "Sponsor Report"
organic, friend invite, convention promo] C2[Sign Up
email plus age check, Apple, or Google] C3[Create Profile
username, bio, fandoms, cosplay skills] C4[Upload Photo and Banner] C5[Toggle: Visible to Nearby Cosplayers] C6[Cosplayer Radar
find others nearby by zip] C7[Browse Conventions
filter: Anime, Horror, Comic, 18 plus] C8[Search by Zip Radius] C9[Convention Detail
date, city, web link] C10[RSVP to Convention] C11[Arrive Flow
check in at event] C12[Enter Lobby Chat] C13[Join Fandom Room] C14[Join Tea Room
anonymous gossip chat] C15[Create Meetup
title, time, location, category] C16[RSVP to Meetup] C17[Send Direct Message] C18[Send Friend Request] C19[Upload Photo to Chat] C20[Report User or Content] C21[Block or Mute User] C1 --> C2 --> C3 --> C4 --> C5 C5 --> C6 C3 --> C7 --> C8 --> C9 --> C10 --> C11 C11 --> C12 --> C13 C12 --> C14 C12 --> C15 --> C16 C13 --> C17 C17 --> C18 C12 --> C19 C19 --> C20 --> C21 end subgraph MODERATOR ["MODERATOR (Admin Web Panel)"] M1[Login to Admin Panel] M2[Open Moderation Queue] M3[Review Reported Content] M4[Take Action: Warn, Suspend, Ban] M5[Action Logged in History] M1 --> M2 --> M3 --> M4 --> M5 end subgraph ADMIN ["ADMIN / CON QUEST TEAM (Admin Web Panel)"] A1[Login: Admin Role] A2[Manage User Roles] A3[Send Mass Push to All Users] A4[View Internal Analytics] A5[Manage Legal Documents] A6[Upload Convention Map and Schedule
Phase 2] A7[Set Pinned Headers on Chats
Phase 2] A8[Assign Sponsor Tier to Convention
Phase 2] A9[Verify Vendor / Booth Partner
Phase 2] A10[Queue Vendor Flash Sale Push
Phase 2] A11[Schedule Multi Day Push Campaign
Phase 2] A12[Generate Sponsor Analytics Report
Phase 2] A13[Export PDF or CSV Report
Phase 2] A1 --> A2 A1 --> A3 A1 --> A4 A1 --> A5 A1 --> A6 --> A7 A1 --> A8 --> A9 --> A10 A8 --> A11 A8 --> A12 --> A13 end subgraph VENDOR ["VENDOR / BOOTH PARTNER (no direct app access)"] V1[Apply to be Verified Vendor
via convention sponsor] V2[Provide Flash Sale Copy and Asset] V3[Wait for Scheduled Push to Fire] V4[Receive Engagement Report Post Event] V1 --> V2 --> V3 --> V4 end subgraph SPONSOR ["SPONSOR / CONVENTION (no direct app access)"] S1[Sign Sponsorship Agreement
Bronze, Silver, or Gold] S2[Provide Map, Schedule, Branding Assets] S3[Admin Configures Tier and Branding] S4[Tier Features Activate Automatically] S5[Receive Post Event Analytics Report] S1 --> S2 --> S3 --> S4 --> S5 end M3 -.report from.-> C20 A9 -.verifies.-> V1 A10 -.fires for.-> V3 A8 -.applies tier from.-> S3 A12 -.delivers to.-> S5 A6 -.assets from.-> S2 classDef cosplayer fill:#e8f5e8,stroke:#28a745,stroke-width:2px,color:#1b5e20 classDef moderator fill:#fff3e0,stroke:#ff9800,stroke-width:2px,color:#e65100 classDef admin fill:#f3e5f5,stroke:#6b3fa0,stroke-width:2px,color:#4a148c classDef vendor fill:#fce4ec,stroke:#e91e63,stroke-width:2px,color:#880e4f classDef sponsor fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 class C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 cosplayer class M1,M2,M3,M4,M5 moderator class A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13 admin class V1,V2,V3,V4 vendor class S1,S2,S3,S4,S5 sponsor click C2 nodeDetail "Sign Up" click C3 nodeDetail "Create Profile" click C5 nodeDetail "Visibility Toggle" click C6 nodeDetail "Cosplayer Radar" click C7 nodeDetail "Browse Conventions" click C10 nodeDetail "RSVP" click C11 nodeDetail "Arrive Flow" click C12 nodeDetail "Lobby Chat" click C14 nodeDetail "Tea Room" click C15 nodeDetail "Create Meetup" click C17 nodeDetail "Direct Message" click C18 nodeDetail "Friend Request" click C20 nodeDetail "Report" click M1 nodeDetail "Admin Login" click M2 nodeDetail "Moderation Queue" click M4 nodeDetail "Take Action" click A3 nodeDetail "Mass Push" click A5 nodeDetail "Legal Docs" click A6 nodeDetail "Asset Upload" click A7 nodeDetail "Pinned Headers" click A8 nodeDetail "Sponsor Tier" click A9 nodeDetail "Vendor Verify" click A10 nodeDetail "Flash Sale Push" click A11 nodeDetail "Scheduled Campaign" click A12 nodeDetail "Sponsor Analytics" click S1 nodeDetail "Sponsorship" click S5 nodeDetail "Sponsor Report"
System Overview
How all the layers connect. Three client surfaces (iOS, Android, Admin Web Panel) share one Firebase backend on Google Cloud. Click any node for detailed implementation notes.
Tip: Click any node in the diagram below to see details in the right panel.
Client Surfaces
Firebase / Google Cloud Services
Data Collections
External Integrations
Phase 1
Phase 2
Scroll to zoom · Drag to pan
graph TB
subgraph CLIENTS ["CLIENT SURFACES"]
IOS[iOS App
React Native] AND[Android App
React Native] WEB[Admin Web Panel
React on Firebase Hosting] end subgraph AUTH ["AUTHENTICATION"] FA[Firebase Auth] AP[Apple Sign In] GO[Google Sign In] EM[Email plus Age Gate] end subgraph SERVICES ["FIREBASE AND GOOGLE CLOUD SERVICES"] FS[Cloud Firestore
real time database] ST[Firebase Storage
media files] CF[Cloud Functions
serverless logic] FCM[Firebase Cloud Messaging
push notifications] HOST[Firebase Hosting
admin panel deploy] SCH[Cloud Scheduler
Phase 2 - scheduled pushes] AN[Firebase Analytics] CR[Crashlytics] end subgraph DATA_P1 ["DATA COLLECTIONS - PHASE 1"] D_USR[Users] D_CON[Conventions] D_RSV[RSVPs and Arrivals] D_CHT[Chat Rooms and Messages] D_MTU[Meetups] D_FRD[Friend Graph] D_REP[Reports and Moderation] D_NOT[Notifications] D_LEG[Legal Documents] end subgraph DATA_P2 ["DATA COLLECTIONS - PHASE 2"] D_AST[Convention Assets
maps, schedules, versions] D_PIN[Pinned Content] D_TIR[Sponsorship Tiers] D_BRD[Branding Assets] D_VEN[Vendors and Booth Partners] D_PSH[Scheduled Push Queue] D_EVT[Engagement Events] D_MET[Sponsor Metrics] end subgraph EXTERNAL ["EXTERNAL INTEGRATIONS"] APNS[Apple Push
APNs] GCM[Google Push
GCM] AS[App Store] PS[Play Store] end IOS --> FA AND --> FA WEB --> FA FA --> AP FA --> GO FA --> EM IOS --> FS AND --> FS WEB --> FS IOS --> ST AND --> ST WEB --> ST FS --> CF CF --> FCM CF --> FS SCH --> CF FCM --> APNS --> IOS FCM --> GCM --> AND WEB --> HOST FS --> D_USR FS --> D_CON FS --> D_RSV FS --> D_CHT FS --> D_MTU FS --> D_FRD FS --> D_REP FS --> D_NOT FS --> D_LEG FS --> D_AST FS --> D_PIN FS --> D_TIR FS --> D_BRD FS --> D_VEN FS --> D_PSH FS --> D_EVT FS --> D_MET IOS --> AN AND --> AN IOS --> CR AND --> CR AS -.distribution.-> IOS PS -.distribution.-> AND classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 classDef datap2 fill:#ede7f6,stroke:#6b3fa0,stroke-width:2px,color:#4a148c classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 classDef auth fill:#f3e5f5,stroke:#8e24aa,stroke-width:2px,color:#4a148c class IOS,AND,WEB client class FA,AP,GO,EM auth class FS,ST,CF,FCM,HOST,SCH,AN,CR service class D_USR,D_CON,D_RSV,D_CHT,D_MTU,D_FRD,D_REP,D_NOT,D_LEG data class D_AST,D_PIN,D_TIR,D_BRD,D_VEN,D_PSH,D_EVT,D_MET datap2 class APNS,GCM,AS,PS ext click IOS nodeDetail "iOS App" click AND nodeDetail "Android App" click WEB nodeDetail "Admin Panel" click FA nodeDetail "Firebase Auth" click FS nodeDetail "Firestore" click ST nodeDetail "Storage" click CF nodeDetail "Cloud Functions" click FCM nodeDetail "FCM" click SCH nodeDetail "Cloud Scheduler" click AN nodeDetail "Analytics" click CR nodeDetail "Crashlytics" click D_USR nodeDetail "Users Collection" click D_CON nodeDetail "Conventions Collection" click D_CHT nodeDetail "Chats Collection" click D_MTU nodeDetail "Meetups Collection" click D_REP nodeDetail "Reports Collection" click D_AST nodeDetail "Assets Collection" click D_TIR nodeDetail "Tiers Collection" click D_VEN nodeDetail "Vendors Collection" click D_PSH nodeDetail "Push Queue" click D_EVT nodeDetail "Events Collection" click D_MET nodeDetail "Metrics Collection" click APNS nodeDetail "APNs" click GCM nodeDetail "GCM"
React Native] AND[Android App
React Native] WEB[Admin Web Panel
React on Firebase Hosting] end subgraph AUTH ["AUTHENTICATION"] FA[Firebase Auth] AP[Apple Sign In] GO[Google Sign In] EM[Email plus Age Gate] end subgraph SERVICES ["FIREBASE AND GOOGLE CLOUD SERVICES"] FS[Cloud Firestore
real time database] ST[Firebase Storage
media files] CF[Cloud Functions
serverless logic] FCM[Firebase Cloud Messaging
push notifications] HOST[Firebase Hosting
admin panel deploy] SCH[Cloud Scheduler
Phase 2 - scheduled pushes] AN[Firebase Analytics] CR[Crashlytics] end subgraph DATA_P1 ["DATA COLLECTIONS - PHASE 1"] D_USR[Users] D_CON[Conventions] D_RSV[RSVPs and Arrivals] D_CHT[Chat Rooms and Messages] D_MTU[Meetups] D_FRD[Friend Graph] D_REP[Reports and Moderation] D_NOT[Notifications] D_LEG[Legal Documents] end subgraph DATA_P2 ["DATA COLLECTIONS - PHASE 2"] D_AST[Convention Assets
maps, schedules, versions] D_PIN[Pinned Content] D_TIR[Sponsorship Tiers] D_BRD[Branding Assets] D_VEN[Vendors and Booth Partners] D_PSH[Scheduled Push Queue] D_EVT[Engagement Events] D_MET[Sponsor Metrics] end subgraph EXTERNAL ["EXTERNAL INTEGRATIONS"] APNS[Apple Push
APNs] GCM[Google Push
GCM] AS[App Store] PS[Play Store] end IOS --> FA AND --> FA WEB --> FA FA --> AP FA --> GO FA --> EM IOS --> FS AND --> FS WEB --> FS IOS --> ST AND --> ST WEB --> ST FS --> CF CF --> FCM CF --> FS SCH --> CF FCM --> APNS --> IOS FCM --> GCM --> AND WEB --> HOST FS --> D_USR FS --> D_CON FS --> D_RSV FS --> D_CHT FS --> D_MTU FS --> D_FRD FS --> D_REP FS --> D_NOT FS --> D_LEG FS --> D_AST FS --> D_PIN FS --> D_TIR FS --> D_BRD FS --> D_VEN FS --> D_PSH FS --> D_EVT FS --> D_MET IOS --> AN AND --> AN IOS --> CR AND --> CR AS -.distribution.-> IOS PS -.distribution.-> AND classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 classDef datap2 fill:#ede7f6,stroke:#6b3fa0,stroke-width:2px,color:#4a148c classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 classDef auth fill:#f3e5f5,stroke:#8e24aa,stroke-width:2px,color:#4a148c class IOS,AND,WEB client class FA,AP,GO,EM auth class FS,ST,CF,FCM,HOST,SCH,AN,CR service class D_USR,D_CON,D_RSV,D_CHT,D_MTU,D_FRD,D_REP,D_NOT,D_LEG data class D_AST,D_PIN,D_TIR,D_BRD,D_VEN,D_PSH,D_EVT,D_MET datap2 class APNS,GCM,AS,PS ext click IOS nodeDetail "iOS App" click AND nodeDetail "Android App" click WEB nodeDetail "Admin Panel" click FA nodeDetail "Firebase Auth" click FS nodeDetail "Firestore" click ST nodeDetail "Storage" click CF nodeDetail "Cloud Functions" click FCM nodeDetail "FCM" click SCH nodeDetail "Cloud Scheduler" click AN nodeDetail "Analytics" click CR nodeDetail "Crashlytics" click D_USR nodeDetail "Users Collection" click D_CON nodeDetail "Conventions Collection" click D_CHT nodeDetail "Chats Collection" click D_MTU nodeDetail "Meetups Collection" click D_REP nodeDetail "Reports Collection" click D_AST nodeDetail "Assets Collection" click D_TIR nodeDetail "Tiers Collection" click D_VEN nodeDetail "Vendors Collection" click D_PSH nodeDetail "Push Queue" click D_EVT nodeDetail "Events Collection" click D_MET nodeDetail "Metrics Collection" click APNS nodeDetail "APNs" click GCM nodeDetail "GCM"
Data Flow
How data actually moves through the system for the most important interactions. Each flow below is a complete end-to-end trace. Click any node for details.
Tip: Click any node in the diagrams below to see details in the right panel.
Client
Backend Service
Data Store
External
Flow 1: Chat Message (Phase 1)
Scroll to zoom · Drag to pan
graph LR
F1A[User types message
iOS / Android client] --> F1B[Firestore write
messages subcollection] F1B --> F1C[Real time listener
broadcasts to room members] F1C --> F1D[Other clients update UI
instantly] F1B --> F1E[Cloud Function trigger
onCreate message] F1E --> F1F{Check mentions
and DMs} F1F --> F1G[FCM push
to mentioned users] F1G --> F1H[APNs / GCM
delivers to device] F1H --> F1I[Recipient device
shows notification] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 class F1A,F1D,F1I client class F1C,F1E,F1F,F1G service class F1B data class F1H ext click F1A nodeDetail "Client Send" click F1B nodeDetail "Firestore Write" click F1E nodeDetail "Message Trigger" click F1G nodeDetail "FCM Push"
iOS / Android client] --> F1B[Firestore write
messages subcollection] F1B --> F1C[Real time listener
broadcasts to room members] F1C --> F1D[Other clients update UI
instantly] F1B --> F1E[Cloud Function trigger
onCreate message] F1E --> F1F{Check mentions
and DMs} F1F --> F1G[FCM push
to mentioned users] F1G --> F1H[APNs / GCM
delivers to device] F1H --> F1I[Recipient device
shows notification] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 class F1A,F1D,F1I client class F1C,F1E,F1F,F1G service class F1B data class F1H ext click F1A nodeDetail "Client Send" click F1B nodeDetail "Firestore Write" click F1E nodeDetail "Message Trigger" click F1G nodeDetail "FCM Push"
Flow 2: Cosplayer Radar Query (Phase 1)
Scroll to zoom · Drag to pan
graph LR
F2A[User opens Radar
iOS / Android] --> F2B[Client builds geo query
zip plus radius] F2B --> F2C[Firestore geo query
users with visibility = true] F2C --> F2D[Filter by distance
and active in last 30 days] F2D --> F2E[Return matched users
with basic profile and distance] F2E --> F2F[Client renders list] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F2A,F2F client class F2B,F2D,F2E service class F2C data click F2A nodeDetail "Radar Open" click F2C nodeDetail "Geo Query" click F2D nodeDetail "Privacy Filter"
iOS / Android] --> F2B[Client builds geo query
zip plus radius] F2B --> F2C[Firestore geo query
users with visibility = true] F2C --> F2D[Filter by distance
and active in last 30 days] F2D --> F2E[Return matched users
with basic profile and distance] F2E --> F2F[Client renders list] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F2A,F2F client class F2B,F2D,F2E service class F2C data click F2A nodeDetail "Radar Open" click F2C nodeDetail "Geo Query" click F2D nodeDetail "Privacy Filter"
Flow 3: Convention RSVP and Arrive (Phase 1)
Scroll to zoom · Drag to pan
graph LR
F3A[User taps RSVP] --> F3B[Firestore write
convention attendees] F3B --> F3C[Cloud Function
updates attendance index] F3C --> F3D[Notification preferences
auto subscribe to convention updates] F3A2[User taps Arrive
on event day] --> F3E[Firestore write
attendance: arrived] F3E --> F3F[Cloud Function
notifies friends also attending] F3F --> F3G[FCM push to friends
so and so just arrived] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F3A,F3A2 client class F3C,F3D,F3F,F3G service class F3B,F3E data click F3A nodeDetail "RSVP Tap" click F3C nodeDetail "Attendance Index" click F3F nodeDetail "Arrive Trigger"
convention attendees] F3B --> F3C[Cloud Function
updates attendance index] F3C --> F3D[Notification preferences
auto subscribe to convention updates] F3A2[User taps Arrive
on event day] --> F3E[Firestore write
attendance: arrived] F3E --> F3F[Cloud Function
notifies friends also attending] F3F --> F3G[FCM push to friends
so and so just arrived] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F3A,F3A2 client class F3C,F3D,F3F,F3G service class F3B,F3E data click F3A nodeDetail "RSVP Tap" click F3C nodeDetail "Attendance Index" click F3F nodeDetail "Arrive Trigger"
Flow 4: Mass Push to All Users (Phase 1)
Scroll to zoom · Drag to pan
graph LR
F4A[Admin opens
Mass Push composer] --> F4B[Compose title and body] F4B --> F4C[Hit Send Now] F4C --> F4D[Cloud Function
fetches all user device tokens] F4D --> F4E[Batch send via FCM
chunks of 500] F4E --> F4F[APNs and GCM deliver] F4F --> F4G[All devices receive push] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 class F4A,F4B,F4C,F4G client class F4D,F4E service class F4F ext click F4A nodeDetail "Mass Push Composer" click F4D nodeDetail "Token Fetch" click F4E nodeDetail "Batch Send"
Mass Push composer] --> F4B[Compose title and body] F4B --> F4C[Hit Send Now] F4C --> F4D[Cloud Function
fetches all user device tokens] F4D --> F4E[Batch send via FCM
chunks of 500] F4E --> F4F[APNs and GCM deliver] F4F --> F4G[All devices receive push] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 class F4A,F4B,F4C,F4G client class F4D,F4E service class F4F ext click F4A nodeDetail "Mass Push Composer" click F4D nodeDetail "Token Fetch" click F4E nodeDetail "Batch Send"
Flow 5: Vendor Flash Sale Push (Phase 2)
Scroll to zoom · Drag to pan
graph LR
F5A[Admin opens
Flash Sale composer] --> F5B[Select vendor
from verified list] F5B --> F5C[Compose copy
and pick send time] F5C --> F5D[Save to push queue
Firestore] F5D --> F5E[Cloud Scheduler
fires at send time] F5E --> F5F[Cloud Function reads queue
and convention attendees] F5F --> F5G[Batch FCM send
with vendor attribution] F5G --> F5H[Attendee devices
receive push] F5G --> F5I[Engagement event logged
vendor id plus message id] F5I --> F5J[Vendor allowance
decremented] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F5A,F5B,F5C,F5H client class F5E,F5F,F5G service class F5D,F5I,F5J data click F5A nodeDetail "Flash Sale Composer" click F5D nodeDetail "Push Queue" click F5E nodeDetail "Scheduler Fire" click F5G nodeDetail "Vendor Attribution"
Flash Sale composer] --> F5B[Select vendor
from verified list] F5B --> F5C[Compose copy
and pick send time] F5C --> F5D[Save to push queue
Firestore] F5D --> F5E[Cloud Scheduler
fires at send time] F5E --> F5F[Cloud Function reads queue
and convention attendees] F5F --> F5G[Batch FCM send
with vendor attribution] F5G --> F5H[Attendee devices
receive push] F5G --> F5I[Engagement event logged
vendor id plus message id] F5I --> F5J[Vendor allowance
decremented] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F5A,F5B,F5C,F5H client class F5E,F5F,F5G service class F5D,F5I,F5J data click F5A nodeDetail "Flash Sale Composer" click F5D nodeDetail "Push Queue" click F5E nodeDetail "Scheduler Fire" click F5G nodeDetail "Vendor Attribution"
Flow 6: Sponsor Analytics Aggregation (Phase 2)
Scroll to zoom · Drag to pan
graph LR
F6A[User actions across app
chat opens, RSVPs, asset views] --> F6B[Engagement events logged
per convention] F6B --> F6C[Nightly Cloud Function
aggregates by day and panel] F6C --> F6D[Sponsor metrics collection
updated] F6D --> F6E[Post event trigger
generates summary] F6E --> F6F[Admin opens
Sponsor Analytics dashboard] F6F --> F6G[Dashboard reads metrics
charts and tables] F6G --> F6H[Admin exports PDF
or CSV report] F6H --> F6I[Report delivered
to sponsor via email] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 class F6A,F6F client class F6C,F6E,F6G,F6H service class F6B,F6D data class F6I ext click F6A nodeDetail "Engagement Events" click F6C nodeDetail "Nightly Aggregation" click F6D nodeDetail "Sponsor Metrics" click F6G nodeDetail "Analytics Dashboard" click F6H nodeDetail "Report Export"
chat opens, RSVPs, asset views] --> F6B[Engagement events logged
per convention] F6B --> F6C[Nightly Cloud Function
aggregates by day and panel] F6C --> F6D[Sponsor metrics collection
updated] F6D --> F6E[Post event trigger
generates summary] F6E --> F6F[Admin opens
Sponsor Analytics dashboard] F6F --> F6G[Dashboard reads metrics
charts and tables] F6G --> F6H[Admin exports PDF
or CSV report] F6H --> F6I[Report delivered
to sponsor via email] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 classDef ext fill:#eceff1,stroke:#546e7a,stroke-width:2px,color:#263238 class F6A,F6F client class F6C,F6E,F6G,F6H service class F6B,F6D data class F6I ext click F6A nodeDetail "Engagement Events" click F6C nodeDetail "Nightly Aggregation" click F6D nodeDetail "Sponsor Metrics" click F6G nodeDetail "Analytics Dashboard" click F6H nodeDetail "Report Export"
Flow 7: Convention Asset Upload and Display (Phase 2)
Scroll to zoom · Drag to pan
graph LR
F7A[Admin uploads map
or schedule via Admin Panel] --> F7B[File saved to
Firebase Storage] F7B --> F7C[Asset record written
to Firestore with version] F7C --> F7D{Sponsor tier
Gold?} F7D -- Yes --> F7E[Cloud Function injects asset
into all convention chats] F7D -- No --> F7F[Asset available
in lobby chat only] F7E --> F7G[Pinned header updated
across chats] F7F --> F7G F7G --> F7H[Users see updated
map and schedule] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F7A,F7H client class F7D,F7E,F7G service class F7B,F7C,F7F data click F7A nodeDetail "Asset Upload" click F7B nodeDetail "Storage Save" click F7E nodeDetail "Auto Preload" click F7G nodeDetail "Pin Update"
or schedule via Admin Panel] --> F7B[File saved to
Firebase Storage] F7B --> F7C[Asset record written
to Firestore with version] F7C --> F7D{Sponsor tier
Gold?} F7D -- Yes --> F7E[Cloud Function injects asset
into all convention chats] F7D -- No --> F7F[Asset available
in lobby chat only] F7E --> F7G[Pinned header updated
across chats] F7F --> F7G F7G --> F7H[Users see updated
map and schedule] classDef client fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,color:#0d47a1 classDef service fill:#fff8e1,stroke:#ffa000,stroke-width:2px,color:#e65100 classDef data fill:#e0f7fa,stroke:#00838f,stroke-width:2px,color:#004d40 class F7A,F7H client class F7D,F7E,F7G service class F7B,F7C,F7F data click F7A nodeDetail "Asset Upload" click F7B nodeDetail "Storage Save" click F7E nodeDetail "Auto Preload" click F7G nodeDetail "Pin Update"