CSI Teachable Replacement App
BlogContactFAQFeaturesHow it worksIntegrationsSecurityUse cases
Join the waitlist
CSI Teachable Replacement AppJoin the waitlist
CSI Teachable Replacement App
HomeBlogContactFAQFeaturesHow it worksIntegrationsSecurityUse cases
Join the waitlist
CSI Teachable Replacement App
BlogContactFAQFeaturesHow it worksIntegrationsSecurityUse cases
TermsPrivacyData Processing

© 2026 CSI Teachable Replacement App

SECURITY & PRIVACY

Built for organizations that can't afford a breach

Multi-tenant isolation, SSO-gated access, encrypted credentials, and signed asset delivery — documented honestly, without the compliance-theater.

[ AUDIT & ACCOUNTABILITY ]

Every sensitive action leaves a record

An immutable audit log captures admin actions — SSO config changes, enrollment modifications, course publishing decisions, and import job initiations — with timestamps and the acting user's identity.

SSO-CONFIGSAML provider updated by admin@acme.orgjust now
ENROLLMENTBulk enroll: 24 learners added to Q4 Onboarding2m ago
COURSE-PUBLISHCourse Security Awareness 2024 set to published11m ago
IMPORT-JOBTeachable import initiated for school acme.teachable.com34m ago
ORG-SETTINGSBrand color updated by admin@globalcorp.io1h ago
PURGE-QUEUESoft-deleted course queued for PII purge after retention window3h ago
SSO-CONFIGSAML provider updated by admin@acme.orgjust now
ENROLLMENTBulk enroll: 24 learners added to Q4 Onboarding2m ago
COURSE-PUBLISHCourse Security Awareness 2024 set to published11m ago
IMPORT-JOBTeachable import initiated for school acme.teachable.com34m ago
ORG-SETTINGSBrand color updated by admin@globalcorp.io1h ago
PURGE-QUEUESoft-deleted course queued for PII purge after retention window3h ago
SSO-CONFIGSAML provider updated by admin@acme.orgjust now
ENROLLMENTBulk enroll: 24 learners added to Q4 Onboarding2m ago
COURSE-PUBLISHCourse Security Awareness 2024 set to published11m ago
IMPORT-JOBTeachable import initiated for school acme.teachable.com34m ago
ORG-SETTINGSBrand color updated by admin@globalcorp.io1h ago
PURGE-QUEUESoft-deleted course queued for PII purge after retention window3h ago
SSO-CONFIGSAML provider updated by admin@acme.orgjust now
ENROLLMENTBulk enroll: 24 learners added to Q4 Onboarding2m ago
COURSE-PUBLISHCourse Security Awareness 2024 set to published11m ago
IMPORT-JOBTeachable import initiated for school acme.teachable.com34m ago
ORG-SETTINGSBrand color updated by admin@globalcorp.io1h ago
PURGE-QUEUESoft-deleted course queued for PII purge after retention window3h ago

[ IMPORT PIPELINE — CREDENTIAL HANDLING ]

Teachable credentials never leave the worker context in plaintext

When you authorize a Teachable import, your admin credentials are encrypted with AES-256 before being stored. They are decrypted transiently inside the Inngest background worker — never logged, never returned in an API response, and never held in plaintext outside the execution context.

Import job progress monitor showing live pipeline status

Questions about how we handle your data?

We'll answer plainly. Reach us at sf-core-org-support-csi-teachable-replacement-app@saas-factory.ai

Join the Waitlist

[ IDENTITY — SSO ENFORCEMENT ]

Your identity provider is the only door in

Learners authenticate exclusively through your organization's existing identity provider — OIDC or SAML 2.0. There are no separate platform passwords to manage, reset, or compromise. Sessions are scoped to the SSO token lifetime and force re-authentication when they expire.

  • OIDC and SAML 2.0 support (Okta, Azure AD, ADFS)

  • Session expiry aligned to your IdP's token lifetime

  • Stale sessions rejected — no indefinite access

  • Per-org provider config with encrypted credential storage

[ MULTI-TENANCY — DATA ISOLATION ]

Every organization is a sealed compartment

Organization IDs partition every table in the database. Queries and mutations at the API layer are scoped to the authenticated tenant before execution — there is no code path that returns another organization's courses, learners, or import data.

Row-level tenant partitioning

Every table carries an org_id foreign key. The tRPC context injects the resolved org on every request — no query runs without it.

Subdomain & path routing

Middleware resolves an org from either acme.platform.com or /org/acme before a single line of business logic runs. Cross-org URL spoofing returns nothing.

Team and member directory showing org-scoped access

[ ASSET SECURITY — SIGNED DELIVERY ]

No file is publicly accessible by default

PDFs, images, and attachments are stored under per-tenant path prefixes in Vercel Blob. Every download URL is a short-lived signed URL generated server-side at render time — not a permanent public link anyone can share, scrape, or hotlink.

[ CONTENT SECURITY ]

Embedded content runs in a controlled perimeter

Content Security Policy on lesson pages

Lesson pages ship with CSP headers that allow iframes only from explicitly trusted video hosts (YouTube, Vimeo, Wistia, Loom). Unauthorized iframe injections are blocked at the header level before the browser renders them.

  • Allowlisted video providers: YouTube, Vimeo, Wistia, Loom

  • All other iframe origins blocked by default

  • XSS protection on rich-text lesson content

[ HONEST SCOPE ]

What we are — and what we are not claiming

We do not claim third-party certifications we have not obtained. Below is a plain account of the controls that are implemented today.

Encryption at rest

Teachable import credentials are AES-256 encrypted before storage. No plaintext secrets are persisted in the database.

Signed asset delivery

Private file assets are served via short-lived signed URLs computed server-side. Permanent public links are not generated.

[ SECURITY FAQ ]

Common security questions

SSO configuration changes recorded in the audit log

Learner dashboard after SSO authentication

Role-based access control

Org admins and learner members are distinct roles. Course builder, enrollment management, reporting, and SSO config are gated — unauthenticated requests are redirected.

AES-256 encryption at rest for Teachable import credentials

  • Signed URLs generated per-request, never cached as public

  • Per-org storage path prefixes prevent cross-tenant asset access

  • MIME type and file size validated server-side on upload

  • Attachment download events recorded in the analytics log

  • Soft delete, PII cleanup & data retention

    Courses, lessons, and user records are soft-deleted first, then permanently purged — including associated Vercel Blob assets — by a scheduled background job after a configurable retention window. Organization offboarding queues a full data purge behind a mandatory admin confirmation step.

    • GDPR right-to-erasure supported via scheduled purge

    • Org deletion requires explicit confirmation before queue

    • Asset blob storage purged alongside database records

    Tenant data separation

    All database queries are org-scoped at the API context layer. There is no unguarded cross-tenant query path.

    Audit trail

    Admin actions — SSO config, enrollment changes, publishing — are written to an append-only audit log accessible within the settings panel.

    Less painful than you might expect. The import pipeline authenticates with your Teachable school, crawls your full course catalog, and lets you select which courses to bring over before a single byte moves. It extracts section and lesson hierarchy, scrapes full lesson content (video embeds, rich text, images, attachments), re-hosts every asset under your organization's private storage, and replaces all Teachable CDN URLs with the new ones automatically. A real-time progress monitor shows you exactly which pipeline stage is running, how many assets have migrated, and flags any partial failures — without aborting the whole job if one file hits an error. Your credentials are encrypted with AES-256 at rest and never appear in logs or API responses.
    Each organization connects its own identity provider independently — configurations for one tenant never touch another. The platform supports both OIDC and SAML 2.0, covering Okta, Azure AD, ADFS, and any standards-compliant IdP. Admins configure their provider through a dedicated UI that accepts a discovery URL or SAML metadata, maps attributes, and runs a connection test before saving. Sessions expire in alignment with your IdP's token lifetime; when a token goes stale, learners are forced to re-authenticate rather than coasting on an indefinite session.
    No on both counts. Every learner-facing page performs an org-membership check and redirects anyone outside the organization to the SSO login flow before a course title is rendered. The multi-tenant data model partitions every table by organization ID, so queries are structurally scoped to the authenticated tenant — there is no query path that reaches across organizations. Asset downloads are served via short-lived signed URLs generated server-side on each page render, so there are no permanent public links to share or guess. Role-based access control keeps the course builder, enrollment management, and reporting pages off-limits to non-admin members.
    Admins get three layers of visibility. First, an organization-wide dashboard widget showing total enrollments, completion rates, and active learner counts across all courses — a quick health check without opening individual reports. Second, a per-course progress table listing every enrolled learner with their completion percentage, lessons completed count, and enrollment date, so you can spot who is stuck or inactive. Third, a full CSV export of that learner progress data for offline analysis or HR reporting. On top of that, an immutable audit log records significant admin actions — SSO config changes, enrollment edits, course publishing, import job starts — giving you an accountability trail for compliance reviews.
    Video embeds from YouTube, Vimeo, Wistia, and Loom are explicitly allowed via Content Security Policy headers on lesson pages; iframe sources outside those providers are blocked. For downloadable files — PDFs, images, any lesson attachment — every download is served through a server-side signed URL with a short expiration window, so there are no permanent public asset links. The platform also records a timestamped event each time a learner downloads an attachment, giving admins visibility into which resources are actually being accessed rather than just uploaded.
    Organization admins can upload a logo and set a primary brand color that applies across all learner-facing pages: the course catalog, lesson player, and dashboard. Routing supports either a subdomain (yourcompany.platform.com) or a path prefix without requiring a separate deployment per tenant. Course URLs are built from auto-generated slugs derived from course titles, with uniqueness enforced per organization and support for custom slug overrides. Deep white-label theming beyond logo and brand color is not currently listed as a shipped feature — contact us for details on roadmap plans.