saascode
Coursio

Coursio

Coursio is a multi-school recorded-course platform you can run as your own SaaS for isolated, branded creator schools.

inside the product
01· Landing
02· For Creators
03· For Academies
04· Pricing
05· Security And Ownership
06· Dashboard
the complete operation

Coursio is a platform for running many isolated, branded creator schools on one recorded-course engine. You — the operator — own the instance. Each school owns its brand, its domain, its courses and its learner relationships. It is deliberately not a public cross-creator marketplace: every school is its own storefront and cannot see another school's data.

Coursio in depth

Every school stays distinct while the platform stays operable.

When several creator businesses share one installation, trust can fail in two directions at once. A school sees branding or learner activity that belongs elsewhere, while the platform team loses a reliable view of what is happening across the whole estate. The first failure turns a shared platform into a privacy and ownership concern. The second turns every intervention into a support investigation. Growth then creates more ambiguity instead of leverage: operators hesitate to onboard another school, creators question who can see their work, and routine questions about ownership take longer than the work they were meant to resolve.

  • Branded creator schools
  • Learner access
  • Buyer control plane

Creators move from curriculum to measurable learner completion.

A course business stalls when authoring, release, assessment, and progress live as separate chores. Lessons go out in the wrong order, learners cannot tell what comes next, and a creator has no dependable way to distinguish confusion from disengagement. The damage accumulates quietly: support fills with questions, incomplete courses remain indistinguishable from abandoned ones, and each new program adds another manual checklist. A coherent learning operation matters because the creator needs to improve the course while it is running, and the learner needs a clear sense that every session advances toward a finish.

  • Course builder
  • Drip content
  • Basic assessments
  • Advanced analytics

Commercial intent stays explicit before payment rails go live.

Course revenue becomes hard to operate when a price is only a number on a page. The business cannot explain which market it was for, what access it promised, or why an old order differs from today's offer. That ambiguity becomes expensive before the first dispute: creators improvise regional pricing, support cannot reconstruct what the learner accepted, and finance treats every exception as a manual case. A product that is honest about unfinished payment setup gives the operator room to choose the right provider and transaction model without pretending that recording an order is the same thing as collecting money.

  • Course commerce
  • Multi-currency offers
  • Regional offers

Course completion becomes proof learners can carry forward.

Finishing a course is valuable only while another person can understand what was completed and whether the record still stands. Without durable proof, the learner leaves with a screenshot, the school answers verification emails by hand, and any later change to a course blurs what the original achievement meant. The cost is not just administrative. Weak verification makes a certificate feel promotional instead of earned, while unclear revocation leaves schools choosing between deleting history and endorsing a record they no longer stand behind. A trustworthy completion record should remain legible after the learning session ends.

  • Certificate issuance and verification
complete feature inventory
Platform foundationOperate the shared platform from one foundation for identity, tenancy, platform billing, email, monitoring, translation, API access, and outbound webhooks. These baseline services remain available across plans while product-specific authorization continues to separate the platform, school, instructor, and learner planes.
Branded creator schoolsCoursio is a platform for running many isolated, branded creator schools on one recorded-course engine. You — the operator — own the instance. Each school owns its brand, its domain, its courses and its learner relationships. It is deliberately not a public cross-creator marketplace: every school is its own storefront and cannot see another school's data.
Buyer control planeUse the platform control plane to operate school-specific entities across organizations. Platform roles can work across courses, learning, media, certificates, orders, affiliates, community, lifecycle communication, and course analytics while each school's own work remains scoped to its creator console.
Additional languagesAdd admin-configured locales for the interface and localized content while keeping the seeded deployment English-only. The capability stays plan-gated and requires the translation integration plus locales chosen by the platform operator; it does not claim automatic translation for every course asset.
Two-factor authenticationOffer two-factor authentication as an optional account-security control through Supabase Auth configuration. It ships behind the product's feature system rather than as a universal requirement, so the buyer can enable it for the deployment without presenting it as a product-wide compliance guarantee.
Custom domainsAttach a branded domain to a school and expand the permitted domain count by plan. A domain becomes published only after the configured provider reports the required domain and certificate state, so a saved hostname is not presented as a working custom domain.
Public API course operationsExpose scoped course operations through the public API on the highest school plan. Access uses API keys and declared scopes, while internal application routes remain outside the public contract; enabling this capability does not grant service-role access or bypass school authorization.
Course builderA course belongs to one school and contains ordered modules, each containing ordered lessons. A lesson is built from typed blocks: video, text, audio, file and quiz. Courses and lessons are drafted and then published; drafts stay reachable to staff and invisible to learners.
Managed videoManaged video is at the decision stage: the provider, whether it is fixed at deployment or selectable at runtime, and the per-plan storage/delivery allowances are unresolved. Until one is selected, upload and playback calls return a 503 with the code MEDIA_PROVIDER_UNAVAILABLE. The internal video asset record is still created, so curricula authored today are complete and simply gain playback when a provider is wired. Everything else about a lesson — text, files, quizzes, progress, community, certificates — works now.
Basic assessmentsAssessments are auto-graded. A quiz defines its questions, a passing threshold and a retry policy; attempts and answers are recorded per learner so a score can be re-checked later.
Drip contentLessons can unlock by date or by progress instead of all at once. Releases are produced by scheduled work that runs repeatedly and is safe to re-run — a lesson is never released twice and a missed run catches up on the next pass.
AI image generationEnable an optional AI image helper for media authoring on the higher school plans. The helper is separate from managed course video and requires its own image-generation integration, so enabling it does not imply that course uploads, playback, or video generation are configured.
Advanced assessmentsAdd question-bank and attempt-review workflows beyond the always-on auto-graded quiz. The feature stays plan-gated while basic assessments remain available to every school, preserving a usable course flow without presenting advanced review tools as part of the entry plan.
Advanced analyticsEach lesson has an idempotent completion state, and the course-level percentage is maintained from it — marking the same lesson complete twice does not inflate anything. The learner's "continue where you left off" reads the same records. Creator analytics reads progress in aggregate: average completion and lesson-by-lesson drop-off.
Learner accessA learner reaches a course because an enrollment row links their global identity to that course in that school. Removing it removes access. No organization membership, plan, role or navigation path grants course access on its own.
Data exportA school can export its learners and content, plus a certificate continuity bundle, so the school's data and its issued credentials remain usable independently of this instance.
CSV exportExport authorized school data in CSV form without bypassing the same access checks used by the rest of the product. The feature is available across the plan ladder, while each export remains subject to the caller's school, role, and record-level authorization.
Lifecycle emailConfigure lifecycle messages around welcome, inactivity, completion, and delivery health. The capability is part of the always-on course operation, giving each school a defined communication layer without turning a message into proof that an enrollment, payment, or certificate action succeeded.
Team invitationsInvite school staff into defined roles and course assignments, with availability shaped by the school plan. The invitation flow depends on transactional email and still checks staff allowances and assignment boundaries before giving a new account access to school work.
Course commerceCreate explicit offers and durable orders for a school's courses while keeping provider setup honest. Offers carry amount, currency, market eligibility, and billing mode; orders preserve the commercial record even while course-payment provider selection and platform-fee collection remain unfinished.
Multi-currency offersA course is not sold by "having a price"; it is sold through explicit offers. An offer names the amount, currency, country eligibility and billing mode — one-time, installments or an access subscription — so a school can price differently per market without any client-side currency conversion. Coupons and regional offer matrices sit on the same records.
Affiliate programSchools on the higher plans can run an affiliate program: partner links, attribution on a visit, commission records that mature over a holding window and can be reversed on a refund, and a settlement view. The commission ledger is a liability record, not a payout mechanism — settlement happens through your own approved payout process.
Regional offersSelect stored offers by an approved country, currency, and provider matrix instead of changing prices with client-side live exchange rates. The feature is plan-gated and depends on a launch matrix chosen for the deployment; it does not claim that every market or payment provider is ready.
Certificate issuance and verificationEach course can carry a policy: whether certificates are enabled, the minimum progress required, whether a quiz must be passed, and whether the credential expires. Issuance checks the policy against the learner's completion at that moment.
Course communityLearners can comment on lessons and open questions in a course thread. Threads and comments are scoped to the school and course, so a discussion never leaks across schools. School owners moderate, and every moderation action is recorded. Instructors can answer on the courses they are assigned. Higher plans add an advanced moderation queue on top of the basic owner controls.
Advanced community moderationLearners can comment on lessons and open questions in a course thread. Threads and comments are scoped to the school and course, so a discussion never leaks across schools. School owners moderate, and every moderation action is recorded. Instructors can answer on the courses they are assigned. Higher plans add an advanced moderation queue on top of the basic owner controls.
what's included

The platform underneath the product — counted in this product's own source, not claimed from a template. Where a row carries a list, open it to read the names behind the number.

AlipayCoinbasedLocalFlutterwaveKakaoPayKomojuLemon SqueezyMercado PagoMollieNOWPaymentsOpnPaddlePagSeguroPayPalPaystackRazorpayStripeWeChat Pay
AlipayAppleBitbucketDiscordFacebookFigmaGitHubGitLabGoogleKakaoKeycloakLINELinkedInMicrosoft AzureNaverNotionQQSlackSnapchatSpotifyTwitchVKWeChatWeiboWorkOSXYandexZoom
the schema and build
108page modules
531http operations
88tables
112migrations
241,544lines of source
6roles
measured 2026-09-01release v1.0.0 · built 2026-08-13
88 tables · 178 relationships
organizations75 refsusers35 refscourses19 refslessons9 refsactive_boostsadmin_notificationsaffiliate_attributionsaffiliate_commissionsaffiliate_linksaffiliate_partnersanalytics_dailyanalytics_eventsanalytics_funnelsannouncement_dismissalsannouncementsapi_key_logsapi_keysassistant_actionsassistant_conversationsassistant_messagesassistant_usageaudit_logsauthautomation_logautomation_templatescertificate_issuancescertificate_policiescertificate_status_eventscommunity_commentscommunity_moderation_actionscommunity_threadscourse_couponscourse_instructorscourse_modulescourse_offerscourse_orderscourse_payment_eventscoursio_daily_metricscoursio_idempotency_keyscoursio_outboxcredit_balancescredit_transactionscurrenciesdata_exportsdata_importsdrip_releasesdrip_rulesenrollmentsfaq_categoriesfaq_itemsfeature_flagsinbound_webhook_eventsinbound_webhooksjsonblanguageslesson_blockslesson_progressmarketing_audience_membersmarketing_audiencesnotification_lognotification_rulesnotificationsorganization_limit_overridesplansplatform_secretsplatform_settingsproduct_purchasesproductsprovider_pricespush_devicesquiz_answersquiz_attemptsquiz_questionsreport_templatesrolesscheduled_tasksschool_domainsschool_learner_profilesschool_profilesseo_metasubscriptionstheme_page_sectionstheme_section_librarytheme_sectionstranslationsuser_sessionsvideo_assetsvideo_usage_dailywebhook_logswebhooks

Hover a table to isolate what it touches; click one to read its relationships. The big nodes are what everything else hangs off. organizations is referenced by 75 tables because every single record in this product belongs to an organization, and that is what makes tenant isolation a property of the database rather than something the application has to remember on every query.

all 88 tables, as text

active_boosts · admin_notifications · affiliate_attributions · affiliate_commissions · affiliate_links · affiliate_partners · analytics_daily · analytics_events · analytics_funnels · announcement_dismissals · announcements · api_key_logs · api_keys · assistant_actions · assistant_conversations · assistant_messages · assistant_usage · audit_logs · automation_log · automation_templates · certificate_issuances · certificate_policies · certificate_status_events · community_comments · community_moderation_actions · community_threads · course_coupons · course_instructors · course_modules · course_offers · course_orders · course_payment_events · courses · coursio_daily_metrics · coursio_idempotency_keys · coursio_outbox · credit_balances · credit_transactions · currencies · data_exports · data_imports · drip_releases · drip_rules · enrollments · faq_categories · faq_items · feature_flags · inbound_webhook_events · inbound_webhooks · languages · lesson_blocks · lesson_progress · lessons · marketing_audience_members · marketing_audiences · notification_log · notification_rules · notifications · organization_limit_overrides · organizations · plans · platform_secrets · platform_settings · product_purchases · products · provider_prices · push_devices · quiz_answers · quiz_attempts · quiz_questions · report_templates · roles · scheduled_tasks · school_domains · school_learner_profiles · school_profiles · seo_meta · subscriptions · theme_page_sections · theme_section_library · theme_sections · translations · user_sessions · users · video_assets · video_usage_daily · webhook_logs · webhooks

what you need to run Coursio

The chassis, and anything particular to this product. 4 required, 2 optional.

Node.js hostrequired

Runs Next 16.2.10 with React 19.2.3; the product does not declare a Node engine version.

Supabaserequired

Supabase is present as the data and authentication backend.

Scheduled job runnerrequired

Five jobs are declared in `vercel.json`; another host must schedule the same work.

Email deliveryrequired

Provider implementations ship for Brevo, Mailgun, Resend, SendGrid and SMTP.

Upstashoptional

Optional service configuration is declared in `.env.example`.

Sentryoptional

Optional monitoring configuration is declared in `.env.example`.

Already built — plug and play

Every provider integration in this list ships wired into the product. You bring your own keys, connect them in the admin, and go live — there is no integration code to write. Nothing is resold through us: the ongoing cost is whatever these providers charge you. Capabilities marked plan-gated elsewhere on this page unlock by plan, not by extra code.

questions worth answering
What exactly do I receive after purchase?

The complete source repository behind the live demo — 241,544 lines across the application and its database, 88 tables defined by 112 migrations that the shipped scripts apply for you, plus the seed data, the demo accounts and the setup documentation. Not a subset and not a scaffold: the same code that runs the demo you just used.

Is the live demo the same product whose source I receive?

Yes. The Coursio demo runs the delivered release (v1.0.0), and the build figures on this page are measured from that same source — not from a showcase build kept separately.

Can I test every account role before buying?

Yes — all 5 of them: Instructor, School owner, Learner, Platform operator, Platform owner. Each one is seeded in the live demo and reachable from the role board above, so you can inspect the product from the customer's side, the agent's side and the administrator's side before you decide.

Is this a complete product or a starter template?

Complete. 108 page modules and 531 HTTP operations, with authentication, roles, billing, an administration panel, background jobs and seeded demo data all wired and running. A template gives you the shape of an application; this is one you can deploy and start operating.

Can I rebrand and modify it?

Yes, without asking. The name, identity, copy, styling and code are yours to change. Rebranding and operating it as your own service is exactly what the licence is for.

What does the licence allow?

A perpetual, worldwide, non-exclusive, non-transferable licence to the product you bought and to every update released for it. The Standard licence covers one business — yours. If you deploy for clients, the Client licence covers up to five. You can modify it, rebrand it, deploy it and charge your own customers.

Can I resell the source code?

No. Reselling, redistributing, sublicensing or giving away the source itself is not permitted under either licence. You build and deliver products with it — the code stays with you.

What services and ongoing costs are required?

You bring your own accounts, so we never mark anything up and there is no ongoing cost to us beyond the purchase. Required: Node.js host, Supabase, Scheduled job runner, Email delivery. Optional: Upstash, Sentry. The table above says exactly what stops working without each one; most have usable free tiers at low volume.

How difficult is deployment?

Two ways, and most buyers use the first. The installer in your saascode dashboard walks it: you create free accounts at Vercel and Supabase, connect them, and it provisions the database, applies 112 migrations, seeds the data, deploys and verifies the result — you watch the steps go green. Or take the source and do it yourself with the shipped scripts and docs, which is the same sequence run by hand.

What updates and support are included?

Updates to that product for as long as we maintain it — no renewal fee and no expiry date on your access. Support covers download problems, defects in the code as shipped, questions about what the product does and how it is structured, and licence questions. It does not cover debugging your own modifications, building features for you, or setting up your hosting and third-party accounts.

Why does a complete codebase cost $249?

Because it was built once and is distributed many times. SaaSCode builds each product and ships the same finished release through the catalog, so the price reflects repeatable distribution — not a reduced codebase, an unfinished template, or what the same work would cost commissioned.

Do I need to be a developer?

No, for the normal path. You create free accounts at Vercel and Supabase, connect them to the installer in your saascode dashboard, and it does the deployment for you — provision, migrate, seed, deploy, verify. What it asks of you is creating two accounts and copying a token, not writing code. If you would rather deploy it yourself, or host it somewhere else, the full source and the scripts are yours to do that with. Running the product day to day needs no technical skill at all: that happens through its own interface, which is what the demo shows.