iSpeaker Live iSpeaker Live / Docs
Journeys

🧭 User Flows

Every key journey across the platform — from registration to earnings — as flowcharts and sequences.

Registration & Onboarding

Default landing → register → email/phone capture → password → role assignment (Student by default) → guided interest selection → home feed.

flowchart LR A[Landing page] --> B{Has account?} B -- No --> C[Register form
name, email/phone, password] C --> D[Create user
role=student] D --> E[Select interests] E --> F[Home feed] B -- Yes --> G[Login] G --> H{Valid?} H -- No --> G H -- Yes --> F G -.->|Forgot| I[Email link] I --> J[Reset form] J --> G

Becoming a Speaker

Upgrade flow (admin-mediated for MVP): student requests, admin reviews, admin assigns the speaker role. Speaker dashboard then unlocks.

Student: Discovery → Purchase

Most purchases start in the marketplace or trending sections.

flowchart TD A[Marketplace] --> B[Browse / Filter
category, language, level, price] B --> C[Course or Book detail] C --> D{Preview?} D -- Yes --> E[Watch / read preview] E --> F{Convinced?} D -- No --> F F -- No --> A F -- Yes --> G[Add to cart] G --> H[Cart] H --> I{Discount?} I -- Yes --> J[Apply code] I -- No --> K[Checkout] J --> K K --> L{Wallet has enough?} L -- Yes --> M[Pay from wallet] L -- No --> N[PayPal top-up] N --> M M --> O[Purchase records created
enrollment / book_purchases] O --> P[Invoice generated] P --> Q[Library / My Learning]

Student: Learning a Course

From "My Learning" the student opens the player, watches lessons, takes notes, and earns a certificate at completion.

sequenceDiagram autonumber actor S as Student participant W as Web/Flutter participant A as API participant DB as MySQL S->>W: Open course W->>A: GET /api/learn/courses/{id} A->>DB: Fetch course, sections, lessons, progress DB-->>A: Data A-->>W: Course player payload S->>W: Play lesson W->>A: POST /lessons/{id}/progress
(watched_seconds) A->>DB: Upsert lesson_progress S->>W: Add note (with timestamp) W->>A: POST /lessons/{id}/notes S->>W: Mark complete W->>A: POST /lessons/{id}/complete A->>DB: lesson_progress.is_completed=true A->>DB: Recompute enrollment progress alt 100% complete A->>DB: Create certificate A-->>W: Certificate URL end

Student: Reading a Book

flowchart LR A[Open book] --> B{Purchased?} B -- No --> C[Preview pages
first N pages] C --> D[Purchase prompt] D -.-> P[Purchase flow] B -- Yes --> R[Reader] R --> S[Render PDF page] S --> T{Action} T -- Highlight --> U[Save annotation
color + position] T -- Note --> V[Save note] T -- Bookmark --> W[Save bookmark] T -- Next page --> X[Update progress
current_page] X --> S U --> S V --> S W --> S

Student: Joining a Live Room

flowchart TD A[Browse rooms] --> B[Room detail] B --> C{Access type} C -- Free --> D[Register immediately] C -- Paid --> E[Pay -> Register] E --> F{Speaker requires approval?} F -- Yes --> G[Pending registration] G --> H[Speaker approves] H --> I[Confirmed] F -- No --> I D --> I I --> J[Receive reminders
FCM + in-app] J --> K{Time?} K -- Before --> J K -- At time --> L[Join room] L --> M[Jitsi session] M --> N[Chat / reactions] M --> O[Speaker ends] O --> P[Mark attended] P --> Q[Recording (if any)]

Student: Booking a Consultation

sequenceDiagram autonumber actor St as Student participant W as App participant A as API participant Sp as Speaker St->>W: Open speaker profile W->>A: GET /speakers/{id}/consultations/available-dates A-->>W: Available dates St->>W: Pick date W->>A: GET /consultations/available-slots A-->>W: Slots St->>W: Book slot W->>A: POST /speakers/{id}/consultations/book A-->>W: Booking pending Sp->>A: POST /consultations/bookings/{id}/accept A-->>St: Notify (FCM + in-app) Note over St,Sp: Day of session St->>W: Join meeting W->>A: POST /consultations/bookings/{id}/join A-->>W: Jitsi URL Sp->>A: POST /bookings/{id}/complete A-->>St: Rate prompt St->>A: POST /bookings/{id}/rate

Speaker: Publishing a Course

flowchart TD A[Speaker Dashboard] --> B[My Courses] B --> C[New Course] C --> D[Fill metadata
title, category, level, language, price, thumbnail, promo] D --> E[Save as draft] E --> F[Add section] F --> G[Add lesson] G --> H{Lesson type} H -- Video --> I[Upload video] H -- Audio --> J[Upload audio] H -- Document --> K[Upload doc] H -- Link --> L[Provide URL] I --> M[Set order / preview flag] J --> M K --> M L --> M M --> N{More?} N -- Yes --> F N -- No --> O[Review] O --> P[Publish] P --> Q[Visible in marketplace]

Speaker: Running a Live Room

flowchart LR A[Schedule room] --> B[Set access & price] B --> C[Room status: scheduled] C --> D[Pre-session: review
registrations] D --> E{Paid + approval?} E -- Yes --> F[Approve / reject] E -- No --> G[Auto-confirmed] F --> G G --> H[Start room] H --> I[Status: active
Jitsi ID issued] I --> J[Manage chat / pin / announce] J --> K[End room] K --> L[Status: completed] L --> M[Attach recordings] L --> N[Wallet credit (if paid)]

Speaker: Earnings & Withdrawal

flowchart TD S1[Course/book sold] -->|credit| W[Wallet balance] S2[Live room ticket] -->|credit| W S3[Consultation complete] -->|credit| W S4[Gift received] -->|credit| W W --> R[View transactions & invoices] R --> Q[Withdraw request] Q --> P[Pending balance] P --> A{Admin approval} A -- Approved --> S[Settled
total_withdrawn updated] A -- Rejected --> P2[Funds returned to wallet]

Payment Flow (PayPal example)

sequenceDiagram autonumber actor U as User participant F as Frontend participant A as Laravel API participant PP as PayPal U->>F: Checkout F->>A: POST /paypal/create-order A->>PP: Create order (amount, items) PP-->>A: Order ID A-->>F: Order ID F->>PP: Render PayPal button & approval U->>PP: Approve payment PP-->>F: Order approved F->>A: POST /paypal/capture-order (order_id) A->>PP: Capture PP-->>A: Capture success A->>A: Create transactions + invoice A->>A: Credit wallets (if applicable) A-->>F: Result F-->>U: Success screen