Every feature, in detail.
The full feature inventory — from the Canvas-grade spine (catalog, enrollment, gradebook, certificates, proctored exams, live classroom) to the veterinary-specific layer (case library, rubric tooling, per-jurisdiction CE engine, W3C credentials).
A real case library, not textbook hypotheticals
Veterinary education runs on cases — the textbook only goes so far. The case library is a curated stream of real anonymized cases drawn from the broader UrBreed ecosystem (medical events, vet visits, shelter intakes). Students diagnose, propose treatment, and get rubric-scored on actual clinical reasoning — not multiple-choice approximations.
- Real anonymized cases — signalment, history, exam findings, differentials, diagnosis, treatment, outcome, and teaching points all captured as structured data
- Per-case graded questions: multiple_choice (auto-graded), free_text, diagnostic, treatment_plan
- Rubric scoring with per-criterion max_points + clamping
- Student-safe API view strips reference answers, correct options, explanations
- Auto credit_ledger writeback when passing — feeds the W3C VC pipeline
- Case search with FTS + fuzzy match + faceted filters (difficulty, case_type, body_systems)
Four smart tools that cut administrative burden
Four places where language-model assistance saves teaching and grading time. Each one has a manual fallback so nothing blocks the human flow, and each one is disable-able per course or per assessment by the instructor.
- Course-aware Q&A — students ask a question inside a course and get an answer drawn from that course's content (lectures, readings, references). Conversation history persists. Instructor controls whether it's on for graded work.
- Next-step recommender — looks at quiz performance and suggests review, next-in-order, or skip-ahead. Rule-based foundation with pattern-detection for skip-ahead, struggle, and knowledge-gap signals.
- Rubric pre-scoring — for long-form case attempts, suggests per-criterion scores grounded in the rubric and case context. Instructor reviews + edits + finalizes. Cuts grading time on routine cases.
- Case anonymization helper — curators turn raw clinical data into teaching-quality anonymized cases. Strict PII rules baked in (no names, no clinic, no contact info, no internal IDs).
Cryptographically signed credentials. Public verification.
Every CE credit issues as a W3C Verifiable Credential signed with Ed25519. State boards and employers verify with one click — signature check against the issuer's JWKS endpoint, not a phone tag with the registrar. Cross-institution credit transfer becomes a public-key verification, not a transcript request.
- Per-institution Ed25519 signing key. JWKS published at /institutions/{slug}/jwks.json
- did:web identifiers — issuer at did:web:auth.urbreed.com:lms:{institution_slug}; subject at did:web:auth.urbreed.com:lms:user:{uuid}
- JWS sign + verify using industry-standard cryptography libraries. RFC 7638 key thumbprints
- Three credential source types: credit_ledger, transcript, pathway
- Public verifier at /credentials/{credential_id} — anyone can paste in a credential and validate
- Status endpoint re-validates signature + revocation on every request
- Designed VC-friendly from day one — no schema migration when wallets become standard
Per-jurisdiction CE rules + recognition graph
Veterinary CE compliance is a many-to-many recognition graph (state X accepts institution Y at credit_equivalency Z for credit_type T) layered on top of per-state renewal rules with category minimums. urVetEdu turns it into a single SQL query and a 3-color compliance card.
- Many-to-many recognition: accreditation mappings table with exclusive-recognizer + exclusive-source rules
- Per-jurisdiction + per-profession effective-dated renewal rules with category minimums
- Effective-dated rule history — historical compliance lookups are reproducible
- Compliance status walks your profile jurisdiction → finds the in-effect rule → sums your credit-ledger entries → returns gap-or-met per category
- 50 US jurisdictions in scope. RACE + AAVSB body codes
- Reciprocity walks across boards (when both have a recognition mapping)
- Compliance card: color-coded by status, progress bar, per-category breakdown, renewal-period end
Tracks, prereqs, gap analysis
A pathway is an ordered track that spans courses with required + elective + credit-threshold steps. Hard prereqs block. Recommended prereqs warn. Conditional prereqs evaluate a structured rule DSL. Gap analysis tells the student exactly what to do next.
- Pathway types: CE series, certification, specialization, degree plan, license renewal
- Step types: required course, elective choice (1-of-N pool), credit threshold (sum to N hours)
- Prereq types: hard (blocks), recommended (warns), conditional (rule DSL evaluated against your ledger)
- Per-step-type structural validation — never mixed shapes in the data layer
- Self-prerequisite cycles prevented at the data layer
- Gap analysis walks your credits + enrollments → builds completed-set → emits per-step status
- Public marketing pages at /pathways/{slug} (revalidated 60s)
- Animal-tied pathways — courses can be scoped to a real animal in the tag system
Paid 1:1 with verified specialists
Office hours are first-class. Instructors define visibility, duration, and price. Tutors apply, get verified credential check, and become bookable in a public marketplace. urSynergy Scheduler handles scheduling. urSynergy Payments handles money.
- Three visibility tiers per office-hours slot: public / course-only / private
- Free slots schedule instantly. Paid slots route through urSynergy Checkout with split disbursements
- 15% platform fee (overridable via env)
- Tutor application gated by ≥1 verified W3C credential (no random self-claimed experts)
- Public tutor marketplace at /tutors with filter sidebar + bio + duration tiles
- urSynergy Scheduler event-type auto-provisioning on office-hours create (best-effort)
- Race-safe booking counters
Video skill upload + platform-native proctoring
Skill assessments are not multiple choice. Video skill upload + rubric scoring proves competency. Proctored exams use the same Live Studio stack as the live classroom — no third-party proctoring dependency, no per-seat license markup.
- Three assessment types: video_skill, proctored_exam, case_study
- Per-criterion rubric with max_points + passing_score + credit_hours_awarded on pass
- Database-enforced rule: at most one in-flight attempt per student per assessment
- Proctored room creation reuses livekit_service.create_education_room() + JWT generation
- Recording → urSynergy Media Cloud with chapter markers
- Auto credit_ledger writeback on pass with verification_code
- Direct per-submission GET endpoint for instructor cross-student lookup (P9.1)
- behavior analysis on recording is on the roadmap; today the recording is the audit trail
urSynergy Live Studio with whiteboard, breakouts, recording, engagement scoring
urVetEdu sits on top of the same standalone classroom microservice that powers the rest of the platform. Canvas-grade live class features that would be a separate vendor purchase elsewhere are built in.
- CRDT-based collaborative whiteboard with real-time cursors + presence
- Breakout rooms with one-click assignment
- Threaded chat with full-text search + private DMs
- Recording → urSynergy Media Cloud with chapter markers
- Per-participant engagement scoring (visible to instructors only)
- RTMP ingress for guest lecturers (use any RTMP encoder)
- Cohort-level urSynergy Cohort Rooms — persistent, searchable, cross-device
- urSynergy Scheduler → Live Studio room auto-provisioning on education-typed bookings
Unified per-user credit history with VC fields
Every CE credit lands in one ledger with source provenance — course, transcript, pathway, case attempt, proctored exam, or manual award. Constraint-enforced semantic consistency. Every row is W3C VC-issuable from day one. The schema does not need to change for credentialing to ship.
- Educational profile — one per user, lazy-created, holds your decentralized identifier + public key
- Unified credit ledger with VC-ready fields populated lazily on signing
- Transcripts — upload with verification queue + integrity hashing
- encrypted media storage storage with privacy-safe key shape transcripts/{user_id}/{uuid}.{ext}
- Public verification at /credentials/verify/{verification_code}
- Admin queue at /dashboard/admin/lms/transcripts with multi-row Convert-to-Credits modal
- Source structural: every ledger row tied to exactly one source artifact
urSynergy Search (full-text + fuzzy match) + faceted filters
No Elasticsearch. No Meilisearch. urSynergy Search + trigram extension + denormalized search-index tables maintained by triggers. Handles 50k+ courses comfortably .
- the course search index + the case search index — denormalized projections maintained by auto-refresh triggers
- FTS weights: title (A) > summary + presenting_complaint (B) > history + dx + body_systems (C) > teaching_points (D)
- Fuzzy partial-match index on title
- Array indexes on body_systems + conditions
- Faceted aggregation endpoint with skip-own-filter pattern
- "Ask this course" question answering — the assistant reads the entire course as cached context for fast follow-ups
- Cross-course "find similar" via tag overlap + audience match (vector embeddings deferred until catalog scale justifies)
urSynergy Cohort Rooms per cohort. Persistent. Searchable.
Every cohort gets a urSynergy Cohort Room. Persistent across devices. Full message history. Searchable. End-to-end encrypted (when configured). No replacement-vendor risk if Slack pulls a free-plan rug.
- Cohort-level urSynergy Cohort Room provisioned on cohort creation
- Cross-device sync via secure federation
- Threaded conversations with FTS in the standalone classroom service
- Optional E2EE per institution policy
- Push notification fallback for offline users (10s/60s presence-gated dispatch)
- messaging-centric session bridge for cross-domain SSO (login on theirlife.pet → urSynergy Messaging follows you)
Real APIs, real webhooks, proper deprecation headers
urVetEdu is not a closed garden. Full REST API with OpenAPI specs, signed webhook deliveries for integration partners, and standards-compliant deprecation headers on every legacy route so migrations don't leave silent stale callers.
- ~80 LMS endpoints under /api/lms/* (institutions, courses, modules, enrollment, search, profile, credit-ledger, transcripts, accreditation, jurisdiction-rules, compliance, pathways, office-hours, tutors, credentials, adaptive, assessments, cases, case-proposals)
- Strict request validation on every endpoint — silent field drops can't happen
- Per-database migration chains (identity, veterinary registry, species knowledge, tags)
- Webhook deliveries with X-UrBreed-Signature HMAC (smart-forms pattern reused)
- Legacy /api/breeder/education + /api/creator-courses get RFC 8594 Deprecation + Sunset + Link headers — six-month sunset window
The whole stack, working today.
Ready to see urVetEdu against your current LMS? Read the head-to-head comparison or browse the live case library.