iSpeaker Live iSpeaker Live / Docs
Capabilities

⭐ Features & Modules

Every module of iSpeaker Live in depth — what works, who can do what, and how it connects.

User Roles & Permissions

Two primary user roles via spatie/laravel-permission, plus an administrative role for the Filament panel.

🎓 Student

Default role on registration. Consumes content, books, and live sessions.

Can do

  • Browse marketplace; purchase courses & books.
  • Watch lessons, take notes, earn certificates.
  • Register for live rooms; book 1:1 consultations.
  • Post on the feed, comment, react, share, gift.
  • Manage wallet, view invoices, withdraw (after limits).

Cannot do

  • Publish courses, books, or live rooms.
  • Set consultation availability or accept bookings.
  • Access the admin panel.

🎤 Speaker

Granted after onboarding/approval. Can do everything a student can, plus authoring & monetisation.

Additional powers

  • Publish courses, books, live rooms.
  • Define consultation availability & price.
  • Manage own learners, see statistics & earnings.
  • Approve / reject paid room registrations.
  • Mark consultations complete; receive ratings.

🛡️ Admin

Operates via the Filament panel. Cannot be a student or speaker simultaneously.

Capabilities

  • Manage users, roles, categories, gifts, settings.
  • Moderate posts & review reports.
  • Approve withdrawals; reconcile payouts.
  • Configure platform-wide settings (VAT, currencies, etc.).

Authentication & Account

Sign-up

  • Email + password (required), name, username (unique), optional phone.
  • Password complexity: ≥ 8 chars; recommend mixed-case & digits.
  • Default role: Student. Becoming a Speaker is a separate flow.
  • Email verification flag (is_verified) supported; configurable.

Sign-in & Sessions

  • Sanctum personal access tokens — long-lived for mobile, scoped for web.
  • "My sessions" — list active tokens with last-used info, revoke individually.
  • "Log out everywhere" — revoke all tokens.

Password & Recovery

  • Forgot password → token sent to email (password_reset_tokens).
  • Change password from settings.

Account deletion

  • Soft-delete (deleted_at) on user request.
  • Cascades through related data per FK rules; financial records preserved per regulation.

Profile & Identity

What a profile contains

Avatar & Cover

Image upload with media URL helper, served via signed URLs.

Bio & Headline

Short bio plus a one-line headline for cards/listings.

Interests

Many-to-many with categories — drives feed and marketplace suggestions.

Social Links

JSON list (twitter, ig, linkedin, web) — togglable visibility.

Privacy

Private profile (follow-request gate), email/phone visibility, notifications on/off.

Certificates

Title, issuer, dates, credential URL — ordered list.

Experiences

Title, company, employment type, dates, location, description — ordered.

Speaker expertise

Tags shown on speaker cards & used in filtering.

Privacy modes

ModeBehaviour
PublicAnyone can view profile & follow without approval.
PrivateProfile shows limited info; follows require follow request acceptance.

Social Feed

Post types

  • Text — body up to N characters; supports hashtags & mentions.
  • Image — one or more images (JSON array of media URLs).
  • Video — uploaded video preview + playback.
  • Audio — voice notes & podcasts.

Engagement

6 Reactions

like · love · haha · wow · sad · angry. One reaction per user per post.

Threaded comments

Parent-child via parent_id, with image attachments and pinning.

Sharing

Internal repost with optional comment; shareable link for external.

Pinning

Authors can pin their own post; admins/speakers can pin comments on their posts.

Reporting

Spam, harassment, hate speech, violence, misinformation, other. Triaged by admin.

View count

Tracked per post for trending logic.

Discovery

  • Feed from people you follow + suggested.
  • Trending: hashtags, posts, topics, speakers.
  • Hashtags are detected on publish, rendered as clickable links, and open a public hashtag page (/hashtag/[tag]) that is readable by signed-out visitors.
  • Trending hashtags refresh the moment a post is published; exact-tag matching (a search for #test no longer matches #testhash).

Follow System

  • Public profile → direct follow (one tap).
  • Private profile → follow request with pending/accepted/rejected states.
  • Bulk actions on requests: accept all / reject all.
  • Counters (followers_count, following_count) stored on profile.
  • Suggestions and search across users.

Courses

Authoring (Speaker)

  • Create course → title, slug, subtitle, description, category (primary + multiple), language (AR/EN), level (beginner/intermediate/advanced), price (with optional discount), thumbnail, promo video.
  • Add structured "why learn" and "requirements" (JSON lists).
  • Build out sections and lessons in any order; drag-to-reorder.
  • Lesson content types: video, audio, document, or external link.
  • Upload video/audio/document/attachments per lesson.
  • Optional is_preview flag — lessons playable without purchase.
  • Lifecycle: draft → published → archived; unpublish allowed.
  • Stats: enrollments, completion, ratings, reviews.

Consuming (Student)

  • Browse marketplace; filter by category, language, level, price.
  • Preview lessons before purchase.
  • Purchase → enrollment created with active status.
  • Course player tracks per-lesson watched duration; mark complete.
  • Take notes per lesson with optional timestamp.
  • Earn certificate on 100% completion — unique number + verification URL.
  • Rate & review the course.

Books

Publishing (Speaker)

  • Upload PDF; set title, slug, author, ISBN, page count, price.
  • Set preview_pages — number of pages anyone can read pre-purchase.
  • Flags: allow_printing, allow_copying (enforced by reader).
  • Status: draft / published / archived.
  • Stats: purchases, average rating.

Reader (Student)

In-app PDF viewer

Page navigation, zoom, search.

Preview mode

First N pages served via separate public endpoint.

Annotations

Highlight, note, underline, bookmark — with color & position JSON.

Progress

Current page, total pages read, total reading time per purchase.

DRM

Time-limited tokens; refresh on demand; copy/print toggles enforced.

Live Rooms

Speaker capabilities

  • Schedule a room: title, description, thumbnail, category, start/end date & time.
  • Duration type: day / week / month / 3month — supports series.
  • Access: free or paid (with price).
  • Max participants & optional recording.
  • Pending registration approvals (for paid/curated rooms).
  • Start / End controls; share link.

Participant capabilities

  • Register (auto for free, with payment for paid).
  • Join via Jitsi room (web + mobile).
  • In-room chat with text/emoji + announcement messages, pinning, reactions count.
  • Leave / cancel registration before session.
  • Report a room.

Lifecycle

  • scheduled → active (on start) → completed / cancelled.
  • Recordings (if enabled) attached to the room as JSON list of URLs.

Consultations

Speaker setup

  • Define availability per weekday: start/end time, session duration, price/session.
  • Toggle is_active per availability slot.
  • View incoming bookings, accept / reject / complete.
  • Earnings credited to wallet upon completion.

Booking (Student)

  • Browse speaker's available dates & slots.
  • Book with payment; status flows pending → scheduled → completed.
  • Receive meeting link (Jitsi). Reminders via notifications.
  • Rate the speaker post-session.
  • Cancel a booking before the session starts.

Marketplace & Cart

  • Unified browse: courses, books, popular topics, filters.
  • Course / book detail pages with reviews list.
  • Add to cart (polymorphic cartable_type + cartable_id).
  • Cart count, list, remove, clear, apply discount, checkout.
  • Checkout creates purchase records and enrollments / book_purchases.
  • "My purchased courses" and "My purchased books" views.

Wallet, Payments & Invoices

Wallet

  • One wallet per user (wallets table) with balance, total_earned, total_withdrawn, pending_balance.
  • Points are the platform currency. All in-app balances, prices and earnings are shown in points; the conversion rate to real money is a single admin setting (currency-points-per-unit).
  • Top up via PayPal. Real money enters and leaves only at two points: top-up and withdrawal.
  • Send points to another user.
  • Withdraw request → admin approval → settlement by bank transfer. The speaker saves an IBAN and account-holder name; the admin desk exports a payment sheet and records the bank reference once the transfer is made.
  • Bank details are encrypted at rest (AES-256). Both copies are covered: the details saved on the speaker's profile, and the snapshot frozen onto the withdrawal request when it is opened — that snapshot is what stops a later profile edit redirecting money an admin has already reviewed. A database dump contains no readable IBAN.
  • Saudi gateways (Mada, STC Pay, Apple Pay, Google Pay, Tabby, Tamara) require a merchant account in the platform owner's name; the integration layer is ready and awaits those credentials.

Tax & commission

  • VAT is charged once, at top-up only — when real money enters the wallet.
  • Platform commission is charged at purchase — when points are spent on a course, book, room or consultation.
  • The split prevents double taxation: a purchase paid from an already-taxed balance is never taxed again.
  • Both the VAT rate and the commission rate are admin settings, applied platform-wide without a code change.

Transactions

  • Every credit / debit recorded with type, category (course, book, gift, consultation, withdrawal, top-up...), related_type + related_id for source.
  • balance_after stored for audit trail.
  • Status: pending, completed, failed, refunded.
  • Unique transaction_reference for reconciliation.

Invoices

  • Auto-generated for completed transactions: subtotal, VAT, total, items JSON.
  • Sequential invoice_number; downloadable PDF in Arabic and English, carrying the platform logo, contact details and currency.
  • Every line is priced in real money with the points value beside it. The exchange rate is stamped on the invoice at issue time, so changing the rate later never re-prices a historical invoice.
  • A VAT line appears only on a top-up invoice; purchase invoices carry the commission instead.
  • The PDF, the web app and the mobile app are all fed by one source of truth, so the three never disagree on a figure.
  • Invoice header fields (tax number, commercial registration) are admin settings and print automatically once entered.
  • Covers every transaction type: top-up, purchase, speaker earnings, gifts, point transfers and withdrawals.

Speaker Verification

An end-to-end identity and credential check that gates a speaker's ability to charge money.

Request (speaker)

  • Submitted from the web app or the mobile app, with supporting documents attached.
  • The requested field list is configuration-driven (config/verification.php), so adding or removing a required document is a one-file change.
  • Status is visible to the speaker throughout: pending → approved / rejected.

Review (admin)

  • Queue in the Filament panel with the submitted documents; approve or reject with a reason.
  • The speaker is notified of the decision (push + in-app).

The pricing gate

  • An unverified speaker may create content but may not set a price on it. The rule is enforced server-side on every price-setting endpoint — courses, books, live rooms and consultation availability — not in the UI alone.

Gifts

  • Admin-managed gift catalogue: icon, price, ordering.
  • Send a gift (with quantity & optional message) to a user or attached to a giftable entity (post, room, etc.).
  • Wallet debited on send; receiver credited.
  • Stats endpoints: received, sent, top gifts, leaderboard, per-user history.

Chat

  • 1:1 conversations (unique pair: user_one_id + user_two_id).
  • Messages of type text / image / video / audio / file.
  • Reply-to threading, media URLs, metadata JSON, read receipts.
  • Soft delete per message; whole conversation deletion preserved server-side.
  • Real-time delivery via Reverb WebSocket + Echo client.
  • Unread count, conversation search, user search, direct media upload.

Notifications

  • In-app polymorphic notifications: actor, type, notifiable entity, data JSON, read state.
  • Push via Firebase Cloud Messaging (FCM).
  • Common types: new follower, follow request, comment, reaction, course/book review, room reminder, booking accepted, payment received, gift received.
  • Endpoints: list, unread count, mark one/all read, delete.

Admin Panel (Filament v3)

Operated at the /admin path by non-student / non-speaker users.

  • User management (roles, suspend, view wallets).
  • Categories, gifts, settings CRUD.
  • Post reports inbox & resolution.
  • Transactions ledger; invoice search.
  • Withdrawal approvals.
  • System-wide settings (VAT %, currency, timezone defaults).

Non-Functional Requirements

⚡ Performance

  • API p95 < 500 ms on common endpoints.
  • Feed pagination, lazy media loading.
  • Cache aggressively for trending & categories.

🛡️ Security

  • Sanctum auth, hashed passwords, signed media URLs.
  • Spatie role/permission enforcement on every speaker route.
  • Rate limiting on auth and high-cost endpoints.

♿ Accessibility

  • WCAG AA targets for color contrast & focus.
  • Keyboard navigation for all interactive elements.
  • Semantic HTML & ARIA where needed.

🌐 Localization

  • Arabic (RTL) and English (LTR) at parity.
  • Locale-aware numbers, dates, currency.
  • Translatable category names & content.

📈 Observability

  • Application logs (Laravel) shipped to a single source.
  • Failed jobs table monitored; alert on threshold.
  • Mobile crash reporting in place.

🔄 Reliability

  • Background queues for emails, FCM, video processing.
  • Idempotent payment callbacks.
  • Daily DB backups & restore drills.