Education

A cohort-based online course platform

An instructor runs a course in cohorts with a fixed start date. Students unlock lessons week by week, submit assignments, and get feedback. The instructor sees who has fallen behind, and a student who joins late sees a schedule shifted to their own start.

Automatically generated draft

Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.

Section 01 · What has to work

An instructor runs a cohort-based course with time-shifted student schedules where automated lesson unlocks and assignment feedback drive completion.

Section 03 · Screens

Every screen, and what it is for.

  • ›Cohort Dashboard — instructor tracks student progress, and one-click feedback submission must be instant.
  • ›Student Schedule — late-joining student views shifted weekly lessons, and lesson content load must be instant.
  • ›Lesson Detail — student reads content and submits assignment, and draft text auto-save must be instant.
  • ›Assignment Review — instructor grades submission, and status update badge toggle must be instant.
  • ›Student Roster — instructor adds student with custom start date, and invite generation must be instant.

Anything not on this list is not in version one. That is what keeps a fixed price fixed.

Section 04 · The data model

What it stores, and who can read a row.

courses

id uuid, title text, description text, created_at timestamptz

Access · instructor can read own courses, enrolled student can read course

cohort_enrollments

id uuid, course_id uuid, student_id uuid, custom_start_date date, status enum(active, completed, dropped), created_at timestamptz

Access · instructor can read all, student can read own enrollment

lessons

id uuid, course_id uuid, week_offset int, title text, content text, created_at timestamptz

Access · instructor can read all, student can read if unlock date has passed

assignments

id uuid, lesson_id uuid, prompt text, created_at timestamptz

Access · instructor can read all, student can read if lesson is unlocked

submissions

id uuid, assignment_id uuid, student_id uuid, content text, status enum(submitted, needs_revision, approved), submitted_at timestamptz, feedback text

Access · instructor can read all, student can read own submissions

Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.

Section 05 · States

submitted → needs_revision → approved | submitted → approved

Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.

Section 06 · Where this breaks

What bites products like this one.

Time-shifted unlock calculations break when daylight saving time shifts occur across student time zones.

Store all schedule offsets in weeks and evaluate unlock dates in UTC at midnight.

Late-joining students receive malformed unlock dates if course structure changes after enrollment.

Anchor unlock calculations strictly to the student cohort enrollment custom_start_date date field, not course creation date.

Section 08 · Deliberately left out

What version one does not do.

  • ×Automated email notifications for lesson unlocks — can be built later, adds third-party email provider failure handling complexity. Cost: 2 days.
  • ×Rich media video hosting and progress tracking — can be linked via external URLs for v1. Cost: 4 days.

This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.

Still open

What we would ask before quoting.

  • Does a late-joining student skip missed weeks or must they complete every week sequentially from their shifted start?
  • Can an instructor manually override a single student's unlock schedule for an individual lesson without shifting the entire cohort?

Half of this already exists

Renewal Engine

The billing half of this is a solved problem: recurring charges, a retry ladder on failed cards, access cut and restored automatically.

It is one of our pre-built products: the code is handed over to you, adapted to your own wording and rules, and the rest of the specification above is built on top of it rather than from scratch.

Your product, not this one

Get this written for what you are actually building.

Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.

Next step

Find out if your idea fits in 10 working days.

Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.

NDA available on request