⭐ Features & Modules
Every module of iSpeaker Live in depth — what works, who can do what, and how it connects.
On this page
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
| Mode | Behaviour |
|---|---|
| Public | Anyone can view profile & follow without approval. |
| Private | Profile 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.
- Hashtag pages and hashtag search.
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_previewflag — 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
activestatus. - 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_activeper 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 before threshold (refund per policy).
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 (
walletstable) withbalance,total_earned,total_withdrawn,pending_balance. - Top up via PayPal (other gateways planned).
- Send points to another user.
- Withdraw request → admin approval → settlement.
Transactions
- Every credit / debit recorded with
type,category(course, book, gift, consultation, withdrawal, top-up...),related_type+related_idfor source. balance_afterstored for audit trail.- Status:
pending,completed,failed,refunded. - Unique
transaction_referencefor reconciliation.
Invoices
- Auto-generated for completed transactions: subtotal, VAT, total, items JSON.
- Sequential
invoice_number; downloadable PDF.
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.