Our Sistahood LMS
Courses, enrolments, and a real checkout

Our Sistahood (oursistahood.com.au) teaches Indigenous women through video modules — Job Ready, How to Start a Business, and eight life-area categories. The build is a production LMS: PHP / Laravel, not a page of YouTube links and a Facebook group.

Was ausgeliefert wurde: student campus and instructor studio on the web, a Laravel admin panel, email + password auth with reset mail, ecommerce checkout for paid courses (free lifetime courses stay free), video learning from cloud storage, and transactional email. Data: MySQL for the live campus, PostgreSQL for completion reports.

Laravel Instructor · Student Ecommerce
Learner working through an Our Sistahood video course on a laptop
Email login
Lesson 1 · S3
Enrolled
Maya W. · Job Ready · OS-ENR-10482
Paid $0 (community course) · enrolment still a commerce order
Laravel · MySQL · Postgres
Laravel PHP backend + admin
MySQL Users, courses, orders
PostgreSQL Completion reports
3 seats Admin · Instructor · Student

Instructor, student, enrolment — and an admin who is not the instructor

Julie Okely builds Job Ready. Maya watches it. Admin sees every payment and every stalled enrolment. Those are three Laravel guards, not one shared password.

Admin panel

Users, refunds, categories (Career, Family, Finance, DIY, Intellect, Pets, Community, Spiritual, Travel), featured courses, failed mail, S3 usage. Admin does not edit Julie’s lesson script unless asked.

Laravel admin

Course instructor

Create course, modules, lessons, quizzes. Upload mp4 to cloud storage. Publish. See who enrolled, who stalled on lesson 2, who passed the quiz. Cannot see another instructor’s payout except their own.

Studio

Student

Register with email + password. Browse catalog. Checkout (or free enrol). Watch video, resume, sit quiz. My learning list is enrolments, not bookmarks.

Campus

A Zoom recording is not enrolment management.

Before Laravel, Job Ready (0.32 hours, updated October 2023) lived as a Zoom file and a Word outline. Maya registered interest in a Google Form. Nobody could say whether she finished module two. Paid workshops were bank transfer and a spreadsheet. Password reset was “email Julie.”

  • No student recordEmail was a mailing list, not an account with bcrypt and a reset token.
  • No enrolment object“She’s in Job Ready” was a Messenger thread. Lifetime access could not be proven.
  • No instructor seatJulie could not add a lesson without a developer dropping an mp4 on a host.
  • No commerceHow to Start a Business could not be $0 for community and $49 for a later workshop without two broken processes.

Maya W. · Moree, NSW · OS-ENR-10482

  1. Mon 19:04 — Creates account: maya.w@example.net + password. Laravel hashes it. Verification mail via SES. She clicks the link on her phone.
  2. Mon 19:11 — Opens Job Ready (Career & Business, instructor Julie Okely, 0.32 hrs). Price $0. Checkout still creates an orders row so free and paid share one pipeline. Enrolment status: active. Lifetime access flag: true.
  3. Tue 12:40 — Lesson 1 from S3, signed URL, player saves lesson_progress.seconds = 184. Resume on the kitchen laptop that night at 184s, not 0.
  4. Wed 20:02 — Quiz 8/10. Attempt stored. Instructor dashboard shows Maya stalled after lesson 1 until Wednesday — a row, not a guess.
  5. Thu 09:15 — Forgot password. Reset mail, 60-minute token, new hash. Admin did not email her a temporary password in clear text.

Admin sees money and mail. Instructor sees the course. Student sees her list.

Operations

Admin — campus, payments, mail

This is the control tower. Disable a student who shared a password. Refund a $49 workshop. See SES bounces. Feature Job Ready on the home grid. Admin does not rewrite Julie’s quiz.

  • Users, roles, password-reset audit
  • Orders: free enrol vs Stripe/PayPal paid
  • Categories, coupons, failed jobs, S3 health
Sistahood · Admin Live
1,284Students
42Instructors
18Paid orders / 7d
2Mail bounces
TimeEventWhoStatus
19:11Enrol Job Ready (free)Maya W.Active
18:40Stripe workshop $49Tia N.Paid
17:02Password reset mailedMaya W.SES
16:11Bounce · bad domainold@mailHeld

Nine pieces of the campus. Each one shipped.

Login, enrolment, studio, checkout, video, admin, S3, mail, and reports — not a feature list. Below is how each one looked before, and what Maya actually uses now.

01 · Auth

Email + password

Google Form. Julie emailed a Zoom link. No hash, no reset.

Laravel register, verify, login. 60-minute reset token by mail. Same credentials on phone and laptop.

02 · Enrolment

Student to course

“She’s in Job Ready” lived in Messenger.

Enrolment OS-ENR-10482: student, course, order, status, lifetime. That row is what opens the player.

03 · Instructor

Course studio

A developer dropped an mp4 on the server.

Julie publishes modules, lessons, and quizzes herself. How to Start a Business updates without a ticket.

04 · Ecommerce

Checkout

Bank transfer. Spreadsheet. No receipt.

Stripe or PayPal. Free Job Ready still creates a $0 order so access and mail share one path. Refunds from admin.

05 · Video

Video learning

YouTube unlisted. Lost place. Ads in the lesson.

Signed S3 URL, HLS when needed, resume at 184s on any device after login.

06 · Admin

Admin panel

cPanel and a hope.

Laravel admin: users, orders, categories, coupons, mail log, disable account. Not phpMyAdmin.

07 · Storage

Cloud storage

mp4 on a 20GB VPS. Disk full on publish day.

AWS S3 (or R2) for video and PDFs. Laravel disk s3. The app server stays thin.

08 · Mail

Email service

Julie typed “here’s the Zoom” from Gmail.

SES queue: verify, reset, enrolment receipt, “your course is live.” Bounces show in admin.

09 · Reports

MySQL + PostgreSQL

90% completion was a slide.

MySQL runs the campus. Nightly rollup into PostgreSQL for “who finished Job Ready this month” without locking checkout.

From email to signed video URL

01

Register

Email + password. Verify via SES. User row in MySQL. No social login required for this product.

02

Checkout

$0 community course or Stripe/PayPal. Order + enrolment written in one Laravel transaction.

03

Mail

Queued receipt: course name, enrolment id, “lifetime access” if that flag is set — matching the live site.

04

Play

Player asks Laravel for a short-lived S3 URL. Progress ticks into MySQL. Postgres report picks it up overnight.

PHP / Laravel. MySQL for the campus. Postgres for reports.

The public catalog on oursistahood.com.au (Job Ready, How to Start a Business, eight categories, lifetime access on mobile and desktop) is served from Laravel. Auth is email and password — Fortify-style verify and reset. Instructors, students, and enrolments are first-class models. Ecommerce is Stripe + PayPal with a $0 path for community courses. Video files never live on the app disk.

MySQL holds users, courses, lessons, enrolments, orders, attempts. PostgreSQL holds rolled-up completion for staff who must export “who finished Job Ready in October” without touching checkout tables. Mail is SES. Storage is S3. Queues run failed-job retries so a mail outage does not lose an enrolment.

PHP / Laravel MySQL PostgreSQL Email + password Stripe / PayPal S3 cloud storage Amazon SES Admin panel
PHP / Laravel

Campus, instructor studio, admin, queues, signed URLs, checkout webhooks.

MySQL + PostgreSQL

MySQL: operational LMS. PostgreSQL: reporting warehouse for completion exports.

Cloud storage + video

S3/R2 for mp4/HLS and PDFs. Player never gets a permanent public bucket URL.

Email service

SES: verify, reset, receipt, “course published.” Queued. Bounces visible in admin.

Ecommerce

Stripe and PayPal. Free enrolments still mint an order so access is one code path.

Was sich nach dem Go-Live geändert hat

Enrolment is auditable

OS-ENR-10482 proves Maya has lifetime Job Ready. Closing-the-Gap style exports come from PostgreSQL, not a slide.

Julie publishes without us

How to Start a Business updates from the instructor studio. Video lands in S3. Students get the mail.

Money and free both work

$0 community courses and $49 workshops share checkout, enrolment, and SES receipts. Refunds are admin actions.

Need a Laravel LMS with real enrolments?

Instructor, student, admin, email login, ecommerce, S3 video, SES — the same production split as Our Sistahood.