Lessonpier is the software for running your own tutoring marketplace. Tutors apply and are verified by hand, students and parents find them in a directory and book in their own time zone, lessons run in an embedded Jitsi room, and the operator holds each payment until the lesson has happened, then releases it to the tutor and pays out weekly. It is built by DEV3 Technologies on Laravel 12 and Filament 4, with one Flutter app (student and tutor modes) whose source is included.
What it does
- Tutor directory and profiles. Filters for subject, level, language, lesson length, price and rating, with times shown in the student's own time zone. Verified tutors, reviews, a trial lesson and package prices on every profile.
- Time-zone-correct booking. Tutors set weekly hours in their own zone; slots are built in 15-minute steps and shown in the viewer's clock, with a notice when a clock change falls before a lesson. A slot is held for ten minutes while the student pays, so two students never take the same time.
- Trial lessons, single lessons, packages and group classes. Package credits are counted in half-credit steps, expire on a date you set, and are refunded pro rata. Group classes have seats, a per-seat price and a minimum that decides go or no-go before the start.
- Cancellation and no-show rules. A student cancelling early gets the credit or the money back; late cancellations follow your policy, and the screen shows the exact refund before the student confirms. A tutor no-show refunds in full and counts a strike.
- Live lesson room. An embedded Jitsi room opened with a one-time signed link, with a join window, presence tracking, masked chat, shared notes with versions, a shelf of files and a timer. Your own Jitsi server does the video; the demo uses a simulated room.
- Homework and progress. Tutors assign work, students submit text or a photo, and feedback lands in one list.
- Guardians and safety. Under-age students need a guardian account with consent. Guardians see lessons, notes and messages; tutors cannot start a thread with a minor. Phone numbers, emails and handles in chat are masked and sent to a review queue.
- Held payments, releases and payouts. The operator is merchant of record. Each lesson's money is held, auto-released after a delay, split by commission tiers, and paid out in a weekly batch with a holding period. Disputes carry evidence and the operator rules refund, release or split.
- Operator panel. Dashboard, tutor applications and documents, lessons, orders, held funds, earnings, payouts, disputes, flagged messages, reviews, FX rates, reports, a lesson calendar and settings.
- API and app. A key-based REST API with an OpenAPI document, plus the app API used by the Flutter app.
The Flutter app
The learn app (apps/learn) is one login with a student mode and a tutor mode. Students find tutors, book a time, see lessons with a countdown and a Join button, use credits, hand in homework and message tutors; a guardian uses student mode with a children switcher. Tutors see their schedule in their own zone, edit weekly availability, check earnings and students. It starts in demo mode and has a store-publishing guide in docs/STORE-PUBLISHING.md.
Gemini AI admin tools
Optional, bring your own key: add your own Gemini key after purchase (Google bills your account); with no key the AI buttons say "Add your Gemini key in Settings". Every result is a draft you preview and edit; nothing is saved, released, refunded or sent automatically.
- Tutor desk: rewrite a bio (applied only after you confirm), flag risks, suggest a decision on a document from its metadata, and next-best-action hints.
- Lessons and students: summarise lesson notes, next-best-action hints, and "Ask in plain words" filters on the lessons and payouts lists.
- Money: flag risks on orders, held funds, payout batches and blocks, explain an earning, a payout batch or a commission tier, and flag an implausible FX rate.
- Disputes and safety: summarise a dispute, suggest an outcome for a human to decide, draft a note to the parties, triage flagged messages and user reports, and draft replies.
- Reviews and catalogue: check a review for toxicity, draft a tutor reply, and write subject and level descriptions.
- Reports: explain the dashboard numbers, a report or the week.
- A Google Translate language switcher (20 languages) in the public header, the member header and the admin bar.
Names, emails, phone numbers and birth dates are replaced before any call, text that involves a minor is withheld entirely, and no card or bank detail ever leaves your server. You remain responsible for your own privacy notices and your agreement with Google.
Quality checks
The release passed seven gates on the final code: Larastan level 6 with 0 errors, a Pest suite of 506 tests, a build with a 6 KB page budget and no 3D, migrations and the full demo seed on MySQL 8 and SQLite, a headless smoke test over 85 pages plus 43 MySQL race checks (same slot, last group seat, one trial per student, one credit, dispute against the release job, parallel cancellations, payout batches, presence), the web installer driven from the zip, and a secret scan. A consistency command (lessonpier:check) proves credit balances, held funds, releases, earnings, payouts and presence totals agree on the demo data. The Flutter app passed analysis, 36 tests and simulator builds, and ran once against the live API.
What you should know before buying
- You operate the marketplace and are merchant of record. Lesson payments are held and released to tutors after the lesson, then paid out. Payments, escrow and payouts are simulated until you connect a marketplace-capable gateway. This is not a licensed escrow service.
- No video is hosted by the script. Live lessons use Jitsi Meet embedded in the lesson room: your own Jitsi server, or meet.jit.si for testing under its terms. Recording is off by default.
- Contact masking is a heuristic filter, not a guarantee. Background checks are a manual document field; there is no background-check service.
- No AI tutor and no AI matching. Search is filters and plain ranking rules; the AI tools above are for the operator desk only.
- Currencies. A tutor's price in USD, EUR or GBP is converted for display and charge from an FX table you maintain.
- One Flutter app (student and tutor modes) with source and a store-publishing guide. Building, publishing and store approval are your step; the app was verified in simulator builds, automated tests and against the live API, not on a physical device.
- Use MySQL or MariaDB for a live site; the concurrency checks were run on MySQL 8. One cron entry every minute is required.
Included
Source code, the web installer, the Flutter app source with a store-publishing guide, a buyer guide, demo data for a fictional marketplace (260 tutors, 3,400 students, about 24,000 lessons, about 23,000 orders and about 10,800 reviews) and six months of support.