Skip to content
Platforms & CRMLive2026

Evolve University Platform

A self-hosted learning, community, and accountability platform for real estate teams built to beat Skool, Circle, and Kajabi on the dimensions that matter to sales-driven orgs…

21 courses / 223 lessons
migrated and live in production (3 free, 18 paid)
446
recording scripts written (a full and summary version per lesson)
~85%
of the platform's own security runbook checklist passed on first pre-launch audit
209
commits
Evolve University Platform interface

Problem

Evolve University's courses lived on Skool, a rented community platform with no CRM awareness, no sales role-play, no certification rigor, and no ownership of the member data or economics. For a real estate training program built around daily accountability and script mastery, a generic community container couldn't tie learning to whether an ISA actually made their calls that day, and every member and dollar of revenue depended on a platform Evolve didn't control. The actual export made the constraint concrete: 1.7 GB across 770 files, entirely Presentation/Lesson-Plan/Homework/Resource-Packet PDFs plus RTF/MD/HTML masters - zero video files, with exactly one document even referencing an external video link. A generic migration plan that assumed a video-hosting decision (Stream vs. Bunny vs. Mux) up front would have blocked the whole project on a provider choice the content didn't need yet. The harder problem underneath the platform swap was economic: Skool doesn't know what "Pro" means to Evolve, doesn't gate an individual PDF behind a subscription, and has no concept of an accountability streak or a role-play score - those are the mechanics the training program is actually built on, and none of them are ones a rented container can be bent into supporting.

What was built

A self-hosted replacement for Skool: members sign up free, take three free courses, and can subscribe to Evolve University Pro for the remaining eighteen. It has a course catalog with a PDF-based lesson viewer served over signed URLs, a community feed with realtime updates, an accountability engine for logging daily commitments and tracking streaks, an AI role-play coach that scores practice sales conversations against a rubric, and a certification system that issues publicly verifiable credentials. The original eighteen-course, twenty-plus-module Skool export - PDFs, presentations, homework packets, no video - was migrated through an idempotent five-stage pipeline (inventory, normalize, upload, load, verify) that never touches the original iCloud export and can be re-run without duplicating content. All 223 lessons now have full and summary recording scripts written; the platform itself is live and the money path proven, with the sole remaining gate before public launch being recording the actual instructional video.

Technical approach

Runs entirely on Cloudflare Workers via OpenNext rather than a conventional server: D1 (SQLite) with Drizzle replaces the originally-planned Postgres, R2 replaces MinIO/S3, Durable Objects replace a self-hosted WebSocket server, and Cloudflare Queues + Cron Triggers replace BullMQ/Redis - a full re-mapping documented and locked in an ADR before build started, chosen specifically to avoid adding load to the home Mac Mini and to keep monthly infra cost near $5. Auth is hand-rolled rather than Auth.js: PBKDF2-SHA256 at 100k iterations (the ceiling Workers' SubtleCrypto allows) plus a server-side HMAC pepper so a leaked D1 dump alone isn't offline-crackable, with jose-signed JWTs in an httpOnly cookie and a tokenVersion column for stateless revocation - ported directly from a sibling project's proven pattern rather than reinvented. The realtime community feed hit a real infrastructure wall: a standalone /rt/* worker needed a Workers Routes zone-token scope that repeatedly failed to attach, so the team pivoted to intercepting the WebSocket upgrade inside the platform's own raw fetch handler, ahead of Next's router - esbuild-bundling a small handler that wraps OpenNext's worker.js export, since a Next route handler drops the raw webSocket handle that a Durable Object upgrade needs. Course-content access control runs through an access_rule_json field (free vs tier:pro) with Stripe webhooks as the single source of truth for entitlement, mirrored into a subscriptions table; content streaming is entitlement-gated at the R2 signed-URL layer so paid PDFs are never publicly reachable. A pre-launch security audit (report-only, not a formality) found the platform met roughly 85% of its own runbook's security checklist out of the gate; the two flagged gaps - missing CSP and non-timing-safe cron secret comparison - were fixed immediately, while a signup email-enumeration finding was deliberately left as an accepted, documented risk rather than silently patched, since fixing it would require an email-verification signup flow that would hurt first-touch conversion for a low-sensitivity threat model (real estate agents already publicize their emails).

Creative approach

Craft

The platform ships the locked 'University LIGHT editorial + gold' brand palette shared across the Evolve site family, applied to a course-catalog-and-lesson-viewer information architecture rather than a from-scratch visual system - the design investment went into content structure (weekly modules, sequential lessons, PDF viewer, progress tracking) over novel UI. The surfaces that carry it: a /learn catalog and per-course pages with a ProgressBar component tracking lesson completion, a lesson viewer route that renders the signed-URL PDF directly rather than routing through a third-party embed, a /community space with its own feed, comment threads, reaction bar, and a leaderboard page, and a CertBadge component for the publicly verifiable certification pages. The community surfaces (post composer, comment form, reaction bar, feed auto-refresh) are built as the same weight of component as the learning surfaces rather than bolted on as an afterthought widget, which matters for a platform whose reframe is that community and accountability are the product, not a side feature next to the video player.

Reframe

The product bet is that the differentiator against Skool/Circle/Kajabi isn't better community mechanics, it's tying learning directly to measurable sales activity: an accountability engine that logs whether a member actually dialed or set the appointment today, and an AI role-play coach that scores objection-handling the way a paid coach would, rather than generic points-and-badges gamification. The explicit design mandate was to win specifically on the dimensions that matter to sales-driven real estate teams, not to be a better generic community container.

Process and what failed

The realtime feed's first design (a dedicated /rt/* Cloudflare Worker) was built and then abandoned within a day when the Workers Routes zone-token scope it needed kept failing to attach - the fix that shipped instead (intercepting the WebSocket upgrade inside the platform's own request handler before Next ever sees it) is a documented reversal, not the original plan. AI Toolkit Foundations was pulled out of the free tier and moved to Pro late in the build (07-27) specifically to hold the free tier at exactly three courses, which meant re-doing the paid-course recording guide the next day because it had listed the wrong course count. A 14-minute-per-lesson runtime estimate for that same course turned out mid-pack once the standing 45-to-60-minute-per-lesson rule was applied uniformly, meaning it needed the most padding of any course in the catalog - the opposite of the 'cheapest paid win' it was assumed to be.

Outcome

Live at learn.evolveuniversity.ai as of 2026-07-29, feature-complete and hardened, with the live Stripe money path proven end-to-end by a signed synthetic webhook test and the business's DBA filed 2026-07-23. All 223 lessons across 21 courses (3 free, 18 paid) are migrated, verified 1:1 against their recording scripts, and reconciled against production. The one remaining launch gate is recording the instructional video itself - an estimated 167 to 223 hours of content - which is explicitly Victor's own work, not a software gap. The last engineering task before that gate was a correction pass that republished nine decks as 61 R2 objects, each verified byte-identical after upload, with a rollback script written before the change rather than after it.