Skip to content

Set up your white-label tenant

Self-service signup for schools, universities and training providers. From form to branded space in under 5 minutes — no sales call required.

In short

Visit studyflow.courses/start, pick a subdomain, choose Starter (€59/month) or Business (€199/month), pay via Stripe, and your branded tenant is live at <your-slug>.app.studyflow.courses in under 5 minutes. No sales call. Cancel anytime.

1

Reserve your subdomain

Go to studyflow.courses/start. Type your preferred slug (the bit before .app.studyflow.courses) and a live availability check tells you within 350 ms whether it's free.

Slug rules (enforced server-side):

  • 3-64 characters, lowercase letters, numbers, and dashes
  • Must start and end with a letter or number (no leading / trailing dash)
  • Reserved words like app, api, admin, support are blocked
  • Slug is reserved for 24 hours from form submission — abandon checkout and someone else can claim it after that
2

Pick a plan and billing interval

Two plans, both with the same per-user content density (8 exam + 5 discussion questions per chapter, all study features). They differ on seats and AI token pool:

Starter — €59/mo

  • 25 member seats
  • 1 000 000 AI tokens / month (shared)
  • Overage: €3/seat/mo · €10/extra 1M tokens

Business — €199/mo

  • 100 member seats
  • 5 000 000 AI tokens / month (shared)
  • Overage: €3/seat/mo · €10/extra 1M tokens

Annual: 10× monthly price — 2 months free.

About seats: every active member of your tenant counts — students, teachers, admins, and the owner. Not just students. The token pool is shared across all members; one heavy user can consume more than their "fair share". Both caps are soft by default — you keep working past the cap and pay the metered overage.
3

Pay via Stripe Checkout

Enter card details on the Stripe-hosted Checkout page. VAT is calculated automatically based on your billing country (Stripe Tax). The form is signed and pre-bound to your slug + plan choice — you can't accidentally pay for the wrong thing.

If you close the tab or hit "back", you'll have ~24 hours to retry the same slug before the hourly sweeper releases your reservation.

4

Wait for provisioning (typically < 30 seconds)

Stripe redirects you to /setting-up?session_id=…. That page polls every 2 seconds while the backend webhook:

  1. Verifies the Stripe session
  2. Creates or finds your auth user (matched on the email you used at Checkout)
  3. Provisions your tenant atomically (slug, plan, billing period, owner role)
  4. Generates a one-tap login link and stamps it on the pending row
  5. Sends a welcome email with a backup link — in case you closed the tab

When provisioning completes, the page auto-redirects you (still in the same tab) into your new tenant — already authenticated.

5

Finish the setup wizard

You land on <your-slug>.app.studyflow.courses/setup with three optional fields and a team-invite box:

  • Primary color — hex (e.g. #4f46e5). Used for buttons, links and accents.
  • Accent color — hex. Used for secondary highlights and badges.
  • Tagline — up to 200 chars. Shown under your brand name.
  • Team invites — paste up to (seat cap − 1) email addresses, one per line or comma-separated. Each gets a branded invite email and joins as a student.
Skip and come back later: nothing is required at this step. The button is "Finish setup", not "Save". You can do everything from the Tenant Settings page later. Logo upload is also handled in Tenant Settings → Branding.
6

Manage your tenant from Tenant Settings

After setup, click your avatar → Tenant Settings (visible only to owners and admins). The page has five tabs:

Branding

Brand name, initials, logo upload (PNG/JPG/SVG, ≤ 2 MB), primary + accent colors, tagline, support email, website URL. Saving here invalidates the tenant cache so changes appear instantly.

Members

List, change role (owner / admin / user / student), or remove. The owner can transfer ownership to another admin. Removing a member doesn't delete their courses — they just lose tenant access.

Invitations

Send single or batch invitations, optionally pre-bound to a class group. Invitations expire after 7 days and can be resent or revoked.

Enrollment

Choose how new members can join: invite-only (default — explicit invitation required), email-domain (anyone with @your-domain.com can self-enroll), or open (anyone with the join link).

Usage

Live counters: members used / cap, AI tokens used / pool this month, current period end date. Shown read-only — also accessible to owners/admins of suspended tenants so you can understand why billing flagged.

Operational details worth knowing

Plan changes
Upgrade or downgrade from the Stripe customer portal (link in Tenant Settings). The webhook re-stamps your seat cap and token pool automatically. Operator-set custom limits (if any) are preserved.
Cancellation
Cancel anytime from the Stripe portal. Your tenant flips to suspended immediately at end-of-period. You have a 90-day grace window to resume the subscription — all data is preserved during grace. After 90 days, all tenant data is hard-deleted (cascading: courses, chapters, members, invites, audit log).
Custom domains
Subdomain branding (<your-slug>.app.studyflow.courses) is included on all plans. Custom apex domains (e.g. learn.your-school.com) are available on request — email info@studyflow.courses.
Data residency & compliance
Hosted on Fly.io in EU regions. Database (Supabase) is EU-hosted. GDPR compliant. Stripe Tax handles VAT automatically. We sign Data Processing Agreements (DPAs) on request.
Free trial?
No formal free trial — but Stripe's standard refund window applies. Cancel within ~14 days for a no-questions refund. Your data is preserved during the 90-day suspended-grace window if you change your mind.

Ready to transform the way you study?

Get AI-powered summaries, exam questions and adaptive quizzes that turn dense PDFs into a complete study system in minutes. Built by students, free to start.

Get Started — It's Free