# Lector Roadmap — Updated 2026-04-05

**Strategic focus:** Transform from personal reading app → institutionalized learning platform with instructor + academic tiers.

**Revenue model:** Free solo tier → Pro ($4.99/mo) → Instructor ($49.99/mo) → Academic ($199–349/mo)

**Timeline to MVP:** 8–12 weeks. Revenue-positive instructor tier by Q3 2026.

---

## EXECUTIVE SUMMARY

### What Changed

**Before (Phase 1–5 original roadmap):**
- Solo reader app (you read, you SRS)
- Daily passage delivery + parsing + SRS
- No instructor tools, no custom content, no differentiation

**After (this updated roadmap):**
- **Instructor tier:** Classes, assignments, custom text uploads, completion tracking
- **Academic tier:** Multi-instructor accounts, department analytics, API access
- **AI-assisted learning:** Smart glosses + passage context (low-hallucination, reusable)
- **Custom content platform:** Teachers upload their own texts, auto-parsed + auto-glossed
- **Legal framework:** DMCA safe harbor, copyright mitigation, public-domain-first approach

### Why This Matters

✅ **Unlocks teacher adoption** → recurring revenue (teacher pays, directs students)  
✅ **Defensible moat** → no competitor has integrated parsing + SRS + instructor tools  
✅ **ROI-focused** → every feature drives monetization or retention  
✅ **Scalable content** → teachers bring their own texts (you don't hand-curate everything)  
✅ **Real learning outcomes** → instructor visibility forces quality (analytics matter)  

### Key Metrics to Track

| Metric | Current | Target (Q3 2026) |
|--------|---------|------------------|
| Free users | ~50 | 500+ |
| Pro subscribers | 5–10 | 50+ |
| Instructor accounts | 0 | 20–50 |
| MRR (Monthly Recurring Revenue) | ~$25–50 | $1K–2K |
| Custom texts uploaded | 0 | 100+ |

---

## PHASES (REVISED)

## Phase 1: Core MVP ✅ (Already Complete)

**Status:** Live at lector.nerdbox.com

- ✅ Daily passage delivery (9.7K passages curated)
- ✅ Morphological parser (3-tier strategy: SQLite → Morpheus → fallback)
- ✅ Spaced-repetition SRS (SM-2 algorithm)
- ✅ Word-by-word glosses (frequency-based)
- ✅ Settings (language mix, difficulty, dark mode)
- ✅ Google OAuth auth (no password required)
- ✅ Docker deployment
- ✅ Landing page (in progress)

---

## Phase 2: User Management & Multi-Tenancy ✅ (Mostly Complete)

**Status:** Live, minor gaps

- ✅ Google OAuth + email/password auth
- ✅ Per-user settings, progress, SRS isolation
- ✅ Stripe billing (free/pro/academic tiers)
- ✅ Promo code system
- ✅ Anki TSV export
- ⏳ User profile page (low priority)
- ⏳ Account deletion & data export (low priority)

---

## Phase 3: Extended Parser & Lexicon ✅ (Mostly Complete)

**Status:** Live, some gaps

- ✅ Paradigm display (full conjugation/declension tables)
- ✅ Compound verb analysis (prefix + root)
- ✅ Fallback to external links (Logeion, Perseus)
- ✅ 100% word clickability
- ✅ POS color coding
- ⏳ Expand morphology.db coverage (rare forms, some Latin i-stems)
- ⏳ User-submitted forms (future enhancement)

---

## Phase 4: Advanced Reading Features ✅ (Mostly Complete)

**Status:** Live

- ✅ 100% word clickability with live parse fallback
- ✅ POS-based frequency gloss suppression
- ✅ Post-session summary
- ⏳ Dialectal form mapping (Ionic ↔ Attic; future nice-to-have)
- ⏳ Custom reading uploads (see Phase 5B below)

---

## Phase 5A: QA, Polish & Analytics 🔄 (In Progress)

**Status:** Partial (API tests done, browser tests pending)

- ✅ API test suite (31 tests, all passing)
- ✅ Coverage: auth, billing, access control, quota enforcement
- ⏳ Playwright browser UI tests (critical flows; issue #15)
  - Auth: Google OAuth, email/password, logout
  - Reading: daily passage, word parsing, gloss popup
  - SRS: add card, answer, grade, summary
  - Billing: tier upgrade, promo code
  
**Timeline:** 1–2 weeks (Playwright tests)

---

## Phase 5B: AI-Assisted Learning 🆕 (New, High Priority)

**Status:** Not started. High ROI, low complexity.

### Smart Glosses (Week 1–2)

**What:** AI-generated contextual gloss for every lemma (2–3 sentences on usage + cultural context).

**Why:**
- Students understand *when/why* to expect a word, not just what it means
- Grounded in morphology (etymology, POS, principal parts), not hallucinated
- Reusable: one gloss per lemma, benefits all students/texts

**Schema:**
```sql
CREATE TABLE lemma_glosses (
  lemma_id TEXT PRIMARY KEY,
  language TEXT,
  gloss TEXT,                    -- AI-generated, 2–3 sentences
  generated_at TIMESTAMP,
  source TEXT                    -- 'gpt4-mini', 'manual'
);
```

**Implementation:**
1. Batch-generate glosses for 5K+ lemmas (GPT-4 mini, temperature 0.7)
2. Cache in lemma_glosses table (one-time cost ~$2–3)
3. Show in word popup (italicized, below definition)
4. Optional: allow users to mark glosses as helpful/confusing (feedback loop)

**Cost:** ~$2–3 (one-time generation)  
**Time:** 2 days (generation) + 2 days (UI integration)  
**Impact:** Medium (engagement booster, differentiator)

**Example glosses:**

| Lemma | Language | Gloss |
|-------|----------|-------|
| *legere* | Latin | "To read or gather. Romans distinguished legere (silent reading of text, intellectual gathering) from *recitare* (public performance). Common in Cicero's letters—signals intimacy, private reflection." |
| *femina* | Latin | "Woman/female. Distinct from *mulier* (matron, married woman). When Livy uses *femina*, he emphasizes the social category rather than an individual—often marking commentary on women's roles." |
| δίδωμι | Greek | "To give. One of the -μι verbs; heavily suppletive (δίδω-, δώ-, ἔδω-). Common in Attic law/ethics texts; the singular *δίδωμι* carries weight (personal obligation), while τίθημι suggests structural imposition." |

---

### Passage Context Cards (Week 3)

**What:** Optional metadata card below passage: historical context, author bio, difficulty, thematic tags, suggested reading time.

**Why:**
- Intermediate readers want to understand *why* they're reading this (not just parse it)
- Prepares mind for thematic focus (ethics, politics, war, etc.)
- Enables search by theme later (e.g., "all passages about fate")

**Schema:**
```sql
CREATE TABLE passage_context (
  passage_id TEXT PRIMARY KEY,
  historical_context TEXT,       -- 50 words: when/where/why written
  author_notes TEXT,             -- Bio snippet + this work's significance
  difficulty_rating INT,         -- 1–5 (community-generated or AI-estimated)
  thematic_tags TEXT[],          -- ['death', 'fate', 'stoicism', 'rhetoric']
  reading_time_minutes INT,      -- Estimated time to read + parse
  generated_at TIMESTAMP
);
```

**Implementation:**
1. Batch-generate for 9.7K passages (GPT-4 mini, temperature 0.7, system prompt: "Be concise, academic, historically accurate")
2. Cache in passage_context table (one-time cost ~$1–2)
3. Show optional card below translation (collapsible)
4. Use thematic tags for future: "Find all passages about X"

**Cost:** ~$1–2 (one-time generation)  
**Time:** 1 day (generation) + 1 day (UI integration)  
**Impact:** High (context matters for retention, enables search)

**Example:**

```
Passage: Livy 1.3 (founding of Rome)
─────────────────────────
Historical Context:
  Livy wrote in the Augustan age (c. 27 BCE), 400+ years after the events 
  he describes. His account draws on earlier annalists and emphasizes Rome's 
  moral virtue and providential destiny.

Difficulty: Medium (classical prose, some archaism)
Themes: #founding, #virtue, #destiny, #divine-will
Estimated reading time: 8 minutes
```

---

### Exercise Generation (Week 4–5, Optional)

**What:** AI generates 3–5 grammar-focused practice exercises from passage text.

**Why:**
- Reinforces structures just learned (conditional, dative, subjunctive, etc.)
- Tied to SRS (scheduled like vocab review)
- Low hallucination risk (exercises are about actual passage content, not invented facts)

**Examples:**
- "Identify all dative singular nouns in this passage"
- "Find 2 subjunctive verbs; explain why subjunctive is used in each"
- "Parse the genitive absolute construction"

**Implementation:** Later phase (after instructor tools MVP). Defer if time-constrained.

**Cost:** ~$1–2 (one-time generation for all passages)  
**Time:** 2 weeks (generation + SRS integration)  
**Impact:** Medium (engagement, but not essential)

---

## Phase 5C: Instructor Tools MVP 🆕 (New, Very High Priority)

**Status:** Not started. This is your monetization engine.

### Core Features

**1. Class Management**
- Instructor creates class ("AP Latin 2026", "Aristotle Seminar")
- Invites students by email (bulk import or one-by-one)
- Students click invite link, join class
- Teacher sees roster (who joined, join date)

**2. Passage Assignment**
- Teacher picks passage from Lector corpus (9.7K available)
- Sets assignment date + due date
- Optional: instructions or discussion prompts
- Students see in "Assigned" tab

**3. Completion Tracking**
- Teacher dashboard shows:
  - Which passages assigned
  - Who completed by due date (% completion)
  - Who hasn't started (red flag)
  - When each student completed (timestamp)

**4. SRS Progress Visibility**
- Teacher sees per-student vocabulary mastery:
  - Total words studied
  - Words mastered (85%+ retention)
  - Words struggling (< 50% retention)
  - Specific weak areas (contract verbs, datives, etc.)

**5. Basic Grading** (Optional in MVP, full feature in Phase 6)
- Teacher assigns credit for completion
- Future: rubrics, manual grading

**Schema:**

```sql
CREATE TABLE instructor_classes (
  id UUID PRIMARY KEY,
  instructor_id TEXT NOT NULL,
  class_name TEXT,
  created_at TIMESTAMP,
  FOREIGN KEY (instructor_id) REFERENCES users(id)
);

CREATE TABLE class_students (
  id UUID PRIMARY KEY,
  class_id UUID NOT NULL,
  student_email TEXT,
  student_id TEXT,                -- NULL until student joins
  invited_at TIMESTAMP,
  joined_at TIMESTAMP,
  FOREIGN KEY (class_id) REFERENCES instructor_classes(id)
);

CREATE TABLE assigned_passages (
  id UUID PRIMARY KEY,
  class_id UUID NOT NULL,
  passage_id TEXT NOT NULL,
  assigned_date DATE,
  due_date DATE,
  instructions TEXT,
  created_at TIMESTAMP,
  FOREIGN KEY (class_id) REFERENCES instructor_classes(id)
);

CREATE TABLE assignment_completions (
  id UUID PRIMARY KEY,
  student_id TEXT NOT NULL,
  assigned_passage_id UUID NOT NULL,
  completed_at TIMESTAMP,         -- NULL = not started
  UNIQUE(student_id, assigned_passage_id)
);
```

**Routes:**

```ts
POST   /api/instructor/classes                    -- create class
GET    /api/instructor/classes                    -- list instructor's classes
POST   /api/instructor/classes/:classId/invite    -- bulk invite students
GET    /api/instructor/classes/:classId/roster    -- see who joined
POST   /api/instructor/classes/:classId/assign    -- assign passage
GET    /api/instructor/classes/:classId/dashboard -- completion dashboard
GET    /api/instructor/classes/:classId/analytics -- per-student SRS stats
```

**UI:**

```
Instructor Dashboard
├─ Classes sidebar
│  ├─ AP Latin 2026 (5 students)
│  ├─ Aristotle Seminar (12 students)
│  └─ + Create Class
├─ Current class: AP Latin 2026
│  ├─ Roster (with join status)
│  │  ├─ Alice (joined 2026-04-03)
│  │  ├─ Bob (joined 2026-04-02)
│  │  ├─ Carol (invited, not yet joined)
│  │  └─ [+ Invite more]
│  │
│  ├─ Assigned Passages
│  │  ├─ Livy 1.3 (due 2026-04-12) — 4/5 students completed ✓
│  │  ├─ Caesar BG 1.1 (due 2026-04-19) — 1/5 started
│  │  └─ [+ Assign passage]
│  │
│  └─ Analytics
│     ├─ Alice: 45 words studied, 38 mastered (84%)
│     ├─ Bob: 67 words studied, 52 mastered (78%) ← struggling with contract verbs
│     └─ [Show per-skill heatmap]
```

**Implementation:**
- Week 1: Class CRUD + roster (backend + UI)
- Week 2: Passage assignment + completion tracking
- Week 3: Analytics view (SRS progress visualization)
- Week 4: Testing + polish

**Cost:** $0 (your time)  
**Time:** 3–4 weeks  
**Impact:** Very High (opens teacher market, $50K/month potential)

---

## Phase 5D: Custom Text Uploads 🆕 (New, High Priority)

**Status:** Not started. This is the content differentiation.

### What Teachers Get

Teachers upload their own texts (unpublished translations, custom selections, modern Latin, etc.). Lector auto-parses + auto-glosses them using existing smart glosses. Students read with same UX as curated passages.

**Use cases:**
1. Unpublished translation of obscure text (teacher wrote it)
2. Selected lines (e.g., Aeneid 2.250–300, not the whole book)
3. Modern Latin (news articles, contemporary poetry)
4. Texts with teacher's own commentary/notes

### Schema

```sql
CREATE TABLE custom_texts (
  id UUID PRIMARY KEY,
  account_id TEXT NOT NULL,      -- instructor or academic account
  title TEXT,
  language TEXT,                 -- 'latin' or 'greek'
  original_text TEXT,            -- raw user input
  english_translation TEXT,
  difficulty TEXT,               -- 'Easy', 'Medium', 'Hard'
  thematic_tags TEXT[],
  visibility TEXT,               -- 'private' (instructor only), 'class' (specific class)
  copyright_status TEXT,         -- 'public-domain', 'licensed', 'own-work'
  license_url TEXT,              -- URL to CC license if applicable
  source_notes TEXT,             -- "Mandelbaum translation, Book 2.250–300"
  parsed_at TIMESTAMP,           -- When auto-parsing completed
  created_at TIMESTAMP,
  FOREIGN KEY (account_id) REFERENCES users(id)
);

CREATE TABLE custom_text_parsed (
  id UUID PRIMARY KEY,
  custom_text_id UUID,
  original_word TEXT,
  lemma_id TEXT,
  language TEXT,
  occurrence_position INT,
  morphology TEXT
);
```

### Upload Flow

**Step 1: Teacher initiates upload**

```
Instructor clicks "Upload Custom Text"
→ Form: title, language, original text, translation, difficulty, tags
→ Optional: source notes ("Mandelbaum Aeneid 2.250–300")
```

**Step 2: Copyright verification**

```
⚠️ Copyright Notice

Before uploading, ensure:
✓ Text is public domain (pre-1929)
✓ Text is licensed (CC-BY-SA, CC-BY)
✓ You wrote it yourself
✓ You have explicit copyright holder permission

Do NOT upload:
✗ Modern translations without permission
✗ Recent scholarly editions
✗ Copyrighted PDFs you found online

[ ] I certify I have the right to upload this text
[ ] I understand Lector is not liable for infringement
[ ] I assume all legal responsibility
```

**Step 3: Auto-parsing**

```ts
// Background job
async function parseCustomText(customTextId, text, language) {
  const words = text.split(/\s+/);
  for (let i = 0; i < words.length; i++) {
    const word = words[i].replace(/[.,;:!?—]/g, '');
    const morphResult = await morphologyDb.lookup(word, language);
    
    if (morphResult) {
      await db.insert("custom_text_parsed", {
        custom_text_id: customTextId,
        original_word: word,
        lemma_id: morphResult.lemma_id,
        occurrence_position: i,
        morphology: JSON.stringify(morphResult)
      });
    }
  }
  
  await db.query("UPDATE custom_texts SET parsed_at = now() WHERE id = $1", [customTextId]);
}
```

**Step 4: Teacher assigns to class**

```
Teacher clicks "Assign Custom Text"
→ Picks text from their uploads
→ Sets due date
→ Students see it in "Assigned" tab
→ Same reading UX as curated passages
```

**Step 5: Student reads**

```
Student opens custom text
→ Same UI as daily passages:
   - Word-by-word gloss (frequency-based)
   - Click word → popup with definition + morphology + SMART GLOSS
   - Add to SRS
   - Mark complete
→ Teacher sees completion in dashboard
```

### Implementation

- Week 1: File upload endpoint + storage (S3 or local disk)
- Week 2: Tokenization + Morpheus parsing (reuse existing parse logic)
- Week 3: Custom text reader UI (clone daily passage reader)
- Week 4: Assignment UI + teacher visibility
- Week 5: Testing + copyright notice UI

**Cost:** ~$50–100/month (if using S3; free if local storage)  
**Time:** 3–4 weeks  
**Impact:** High (teachers bring their own content, you don't curate everything)

---

## Phase 5E: Advanced Analytics 🆕 (New, Medium Priority)

**Status:** Not started.

### What Teachers See

**Learning curves:** Line chart showing words mastered over time (0%–100%)  
**Grammar heatmap:** Which concepts are hard (contract verbs, datives, subjunctives)  
**Reading streaks:** Days with passages completed  
**Cohort insights:** "Students who review 3+ days/week pass final exam 40% more often" (future)

### Implementation

- Line chart: `recharts` or D3.js on frontend
- Heatmap: aggregated per-skill retention (map words to grammar concepts)
- Simple queries: count completed passages, count SRS mastered per student

**Cost:** $0 (charting library is free)  
**Time:** 1–2 weeks  
**Impact:** High (needed to optimize learning + pitch to departments)

---

## Phase 6: Multi-Instructor & Department Features 🆕 (New, Phase-gated)

**Status:** Not started. Phase-gate behind Phase 5C adoption.

**Only invest in Phase 6 if Phase 5C (Instructor MVP) has 20+ paying customers.**

### Academic Tier Features

- ✅ 5–10 instructor accounts per department account
- ✅ Department-level analytics (cohort insights)
- ✅ Unified student roster (across instructors)
- ✅ Advanced grading + rubrics
- ✅ API access (Canvas, Blackboard integration)
- ✅ Dedicated support (Slack channel)

**Timeline:** 4–6 weeks (if demand justifies)

---

## Phase 7: iOS & Android App 🔄 (Deferred to H2 2026)

**Status:** Not started. Defer pending Phase 5–6 adoption.

**Only invest if:**
- ✅ 100+ Pro subscribers
- ✅ 10+ Instructor customers
- ✅ User retention >40% (30-day)

**Otherwise:** Web + mobile browser sufficient.

---

## TIER DIFFERENTIATION TABLE

| Feature | Free | Pro | Instructor | Academic |
|---------|------|-----|-----------|----------|
| **Core Reading** | | | | |
| Daily passages | ✅ | ✅ | ✅ | ✅ |
| Smart glosses | ✅ | ✅ | ✅ | ✅ |
| Passage context | ✅ | ✅ | ✅ | ✅ |
| SRS review | ✅ | ✅ | ✅ | ✅ |
| **Solo Features** | | | | |
| Parses/day | 10 | Unlimited | Unlimited | Unlimited |
| Anki export | ✅ | ✅ | ✅ | ✅ |
| **Instructor Features** | | | | |
| Create classes | ❌ | ❌ | ✅ | ✅ |
| Invite students | ❌ | ❌ | 10 per class | Unlimited |
| Assign passages | ❌ | ❌ | ✅ | ✅ |
| Completion dashboard | ❌ | ❌ | ✅ | ✅ |
| SRS progress view | ❌ | ❌ | ✅ | ✅ |
| **Custom Content** | | | | |
| Upload custom texts | ❌ | ❌ | 3/semester | Unlimited |
| Auto-parse custom | ❌ | ❌ | ✅ | ✅ |
| Share w/ class | ❌ | ❌ | ✅ | ✅ |
| **Analytics** | | | | |
| Learning charts | ❌ | ❌ | ✅ | ✅ |
| Grammar heatmap | ❌ | ❌ | ✅ | ✅ |
| Cohort analytics | ❌ | ❌ | ❌ | ✅ |
| **Advanced** | | | | |
| Multi-instructor | ❌ | ❌ | ❌ | ✅ |
| Grading/rubrics | ❌ | ❌ | Basic | Advanced |
| API access | ❌ | ❌ | ❌ | ✅ |
| **Pricing** | Free | $4.99/mo | $49.99/mo | $199–349/mo |

---

## LEGAL & COPYRIGHT FRAMEWORK

### Risk Assessment

**Custom uploads expose Lector to copyright infringement liability:**
- Teacher uploads copyrighted text
- Lector stores + distributes it to students
- Copyright holder sues

**Severity:** Medium (if responsive) to High (if negligent)  
**Cost of lawsuit:** $50K+ in legal fees (even if you win)  
**Mitigation:** Proper TOS + DMCA notice-and-takedown + E&O insurance

---

### Mitigation Strategy

#### **1. Terms of Service (Upload Warning)**

Add to TOS for Instructor tier:

```markdown
## Custom Text Uploads — Your Responsibility

By uploading text, you certify:
- You own the copyright to the text, OR
- You have a license to use and distribute it, OR
- The text is in the public domain

You are fully responsible for any copyright infringement claims. 
Lector is not liable for unauthorized uploads.

Lector reserves the right to:
- Remove text upon receipt of DMCA takedown notice
- Disable your account for repeated infringement
- Cooperate with copyright holders

By uploading, you indemnify Lector from all copyright claims.
```

**Legal effect:** Shifts primary liability to teacher (defensible in court).

---

#### **2. DMCA Safe Harbor Implementation**

Create endpoint for copyright holders to file takedown notices:

```ts
app.post("/api/copyright/dmca-notice", async (req, res) => {
  const { claimantName, claimantEmail, workDescription, infringingUrl } = req.body;
  
  // Log notice with timestamp
  const noticeId = await db.query(
    `INSERT INTO dmca_notices (claimant_name, work, infringing_url, status, received_at)
     VALUES ($1, $2, $3, 'received', now())
     RETURNING id`,
    [claimantName, workDescription, infringingUrl]
  );
  
  // Extract textId from URL
  const textId = infringingUrl.match(/custom-text\/([a-f0-9-]+)/)?.[1];
  
  if (textId) {
    // Immediately de-list the text (hidden, not deleted)
    await db.query(
      `UPDATE custom_texts SET visibility = 'hidden', hidden_reason = 'DMCA' WHERE id = $1`,
      [textId]
    );
    
    // Notify uploader with counter-notice option
    const uploader = await db.query(
      "SELECT email FROM users WHERE id = (SELECT account_id FROM custom_texts WHERE id = $1)",
      [textId]
    );
    
    await sendEmail({
      to: uploader.email,
      subject: "DMCA Takedown Notice",
      body: `Your uploaded text has been removed from public access due to a copyright claim. 
             You may file a counter-notice within 10 business days if you believe this is in error.`
    });
  }
  
  res.json({ noticeId: noticeId.id, status: "Text removed pending investigation" });
});
```

**Legal protection:** Complies with 17 U.S.C. § 512 (DMCA Safe Harbor), which protects platforms if they:
- ✅ Have notice-and-takedown procedure
- ✅ Respond promptly to notices
- ✅ Remove infringing content
- ✅ Don't have knowledge of specific infringement (pre-notice)

---

#### **3. Upload Warnings & Public-Domain-First Approach**

**Phase 1 (MVP, Conservative):** Only allow public-domain uploads

```
When teacher clicks "Upload Custom Text":

⚠️ PUBLIC-DOMAIN REQUIREMENT

Lector only accepts public-domain texts to protect you and your students.

Public domain = any work published before 1929 in the US/EU.

✓ ALLOWED:
  - Classical texts (Livy, Caesar, Aristotle, Homer, etc.)
  - Pre-1929 translations (Oxford, Loeb)
  - Gutenberg texts
  - CC-BY-SA licensed texts (with license file)

✗ NOT ALLOWED:
  - Modern Penguin/Oxford Classics
  - Recent scholarly editions
  - Copyrighted PDFs from the web

Before uploading, check:
→ Project Gutenberg (www.gutenberg.org)
→ Internet Archive (archive.org) — shows copyright dates
→ Your university library (may have licenses)

[ ] I have verified this text is in the public domain or licensed
[ ] I understand Lector cannot accept copyrighted commercial translations
```

**Phase 2 (6+ months in, if adoption is strong):** Allow licensed uploads

```
Teachers can upload:
- CC-BY-SA, CC-BY, CC0 licensed texts
- With license file (screenshot or PDF)

Still no modern copyrighted works.
```

**Phase 3 (1+ year in, with legal review):** Full flexibility

```
Teachers assume all risk.
You have robust DMCA system in place.
You have E&O insurance.
```

---

#### **4. Content Pre-screening (Best Effort)**

Detect obvious copyrighted works via checksum matching:

```ts
const sha256 = require('crypto').createHash;

const BLOCKED_TEXTS = [
  { title: "Mandelbaum Aeneid", sha256: "abc123...", copyright: true },
  { title: "Penguin Cicero", sha256: "def456...", copyright: true }
  // Build this from known copyrighted books
];

app.post("/api/instructor/upload-text", async (req, res) => {
  const checksum = sha256('sha256').update(req.body.text).digest('hex');
  
  const blocked = BLOCKED_TEXTS.find(t => t.sha256 === checksum);
  if (blocked) {
    return res.status(403).json({
      error: `This appears to be the copyrighted "${blocked.title}". 
              Please use a public-domain translation or get permission from the copyright holder.`
    });
  }
  
  // Continue with upload...
});
```

**Limitation:** Only catches exact matches. Edited text bypasses this.  
**Upside:** Catches obvious copyrighted books (strong deterrent).

---

#### **5. Insurance & Legal Setup**

**Before launching custom uploads:**

- 🛡️ Get E&O (errors & omissions) insurance: $2–5K/year
- 🛡️ Have lawyer review TOS ($1–2K, one-time)
- 🛡️ Document DMCA procedure (internal policy)
- 🛡️ Set up legal notice email (dmca@lector.nerdbox.com)

---

### Safe Texts (100% Legal)

| Text | Author | Language | Copyright Status |
|------|--------|----------|-------------------|
| Livy *Ab Urbe Condita* | Livy | Latin | Public domain (author: 59 BCE) |
| Caesar *Gallic Wars* | Caesar | Latin | Public domain (author: 100–44 BCE) |
| Cicero *Orations* | Cicero | Latin | Public domain (author: 106–43 BCE) |
| Pliny the Younger *Epistles* | Pliny | Latin | Public domain (author: ~61–113 CE) |
| Homer *Iliad/Odyssey* | Homer | Greek | Public domain (author: ~8th century BCE) |
| Plato *Dialogues* | Plato | Greek | Public domain (author: 428–348 BCE) |
| Aristotle *Ethics/Politics* | Aristotle | Greek | Public domain (author: 384–322 BCE) |
| NT Greek texts | Various | Greek | Public domain (author: 1st century) |
| Marcus Aurelius *Meditations* | Marcus Aurelius | Greek | Public domain (author: 121–180 CE) |
| Project Gutenberg texts | Various | Both | Public domain (all indexed) |

---

### Risky Texts (Avoid Without License)

| Translation | Publisher | Year | Copyright Expires |
|-------------|-----------|------|-------------------|
| Mandelbaum *Aeneid* | Bantam | 2008 | ~2083 |
| Penguin Classics series | Penguin | 1990–2020s | ~2045–2095 |
| Loeb Classical Library | Harvard UP | 1990–2020s | ~2045–2095 |
| Oxford World Classics | Oxford | 1990–2020s | ~2045–2095 |

**Don't allow without explicit license file.**

---

## TIMELINE & ROADMAP

### Q2 2026 (April–June) — High Priority (Revenue-Ready)

#### Week 1–2: Landing Page + Polish
- Finalize hero section, value props, pricing table
- Add testimonials from Oliver, Petros, classmates
- Deploy to lector.nerdbox.com

**Owner:** Brent  
**Effort:** 1–2 weeks  
**Result:** Users can sign up

---

#### Week 3–4: Smart Glosses (AI Phase 1)
- Batch-generate 5K+ lemma glosses (GPT-4 mini)
- Cache in `lemma_glosses` table
- Show in word popup (italicized, optional)
- Test on 5–10 sample passages

**Owner:** Conductor (AI generation) + Brent (integration)  
**Effort:** 2 days (generation) + 2 days (UI)  
**Cost:** ~$2–3  
**Result:** Differentiator feature, users love it

---

#### Week 5–6: Instructor Tools MVP (Part 1)
- Class CRUD (create, list, delete)
- Student roster management (invite, track joins)
- Passage assignment (pick from corpus, set due date)
- Completion tracking (dashboard: % complete per passage)

**Owner:** Brent  
**Effort:** 2 weeks (schema + routes + UI)  
**Result:** Teachers can assign passages, see completion

---

#### Week 7–8: Instructor Tools MVP (Part 2)
- SRS progress view (per-student mastery, weak areas)
- Basic analytics (count mastered words, days active)
- Testing + polish

**Owner:** Brent  
**Effort:** 1–2 weeks  
**Result:** Instructor tier is feature-complete MVP

---

#### Week 9–10: Billing & Tier Gating
- Add `instructor_tier` to billing system
- Gate instructor endpoints behind tier check
- Stripe pricing for Instructor ($49.99/mo)
- Set up free trial (1 class, 30 days)

**Owner:** Brent  
**Effort:** 1 week (reuse existing billing logic)  
**Result:** Can charge for instructor tier

---

#### Week 11–12: Launch Instructor Tier
- Email existing users (free + Pro) announcing instructor tier
- Target first 10 teachers (friends, Twitter, teacher communities)
- Collect feedback

**Owner:** Brent (marketing)  
**Effort:** 1 week (email, docs, feedback collection)  
**Result:** First paying instructor customers

---

### Q3 2026 (July–September) — Growth (If Phase Q2 Succeeds)

**Phase-gate:** Only proceed if instructor MVP has 5+ paying customers by July.

#### Week 1–4: Custom Text Uploads (Part 1)
- File upload endpoint (S3 or local storage)
- Text tokenization + Morpheus parsing
- Auto-gloss lemmas from `lemma_glosses` table
- Custom text reader UI (clone daily passage reader)

**Owner:** Brent  
**Effort:** 2–3 weeks  
**Result:** Teachers can upload texts

---

#### Week 5–8: Custom Text Uploads (Part 2)
- Assignment UI (teacher picks custom text for date)
- Completion tracking in teacher dashboard
- Copyright notice + public-domain-first workflow
- DMCA notice-and-takedown endpoint

**Owner:** Brent  
**Effort:** 2–3 weeks  
**Result:** Full custom content pipeline

---

#### Week 9–12: Advanced Analytics + Polish
- Learning charts (words mastered over time)
- Grammar heatmap (concept mastery per student)
- Cohort insights (if 20+ instructors)
- Bug fixes + stability

**Owner:** Brent  
**Effort:** 2–3 weeks  
**Result:** Instructor dashboard is polished, professional

---

### Q4 2026 (October–December) — Scale (If Phase Q3 Succeeds)

**Phase-gate:** Only proceed if instructor tier has 20+ customers + strong retention.

#### Academic Tier Features
- Multi-instructor accounts (5–10 per department)
- Department-wide text library
- Unified student roster
- API access (Canvas, Blackboard integration)
- Dedicated support

**Owner:** Brent  
**Effort:** 3–4 weeks  
**Result:** Can sell to university departments

---

#### Mobile Web Optimization
- Responsive design for iOS/Android browsers
- Fast page load, offline-first morphology lookups
- Install as PWA (add to home screen)

**Owner:** Brent  
**Effort:** 1–2 weeks  
**Result:** Users can study on their phones

---

#### iOS/Android App (React Native)
- Only if: 100+ Pro subscribers + 30+ Instructor customers + high retention

**Owner:** Contractor or Brent + contractor  
**Effort:** 6–8 weeks  
**Cost:** $5K–10K (if outsourced) or your time  
**Result:** Native app for App Store + Google Play

---

## REVENUE PROJECTIONS

### Conservative (Q3 2026)

| Tier | Users | Price | MRR | Notes |
|------|-------|-------|-----|-------|
| Free | 200 | $0 | $0 | Solo learners, students in instructor classes |
| Pro | 15 | $4.99 | $75 | Serious self-learners |
| Instructor | 5 | $49.99 | $250 | Early adopters |
| **Total** | **220** | — | **$325** | Break-even on server costs |

---

### Optimistic (Q4 2026)

| Tier | Users | Price | MRR | Notes |
|------|-------|-------|-----|-------|
| Free | 500 | $0 | $0 | Growing user base |
| Pro | 50 | $4.99 | $250 | Word-of-mouth adoption |
| Instructor | 20 | $49.99 | $1,000 | Early teacher adopters |
| Academic | 2 | $249/mo avg | $500 | Summer programs, small departments |
| **Total** | **572** | — | **$1,750** | Meaningful side income |

---

### Target (Q2 2027)

| Tier | Users | Price | MRR | Notes |
|------|-------|-------|-----|-------|
| Free | 2,000 | $0 | $0 | Viral growth in teacher communities |
| Pro | 150 | $4.99 | $750 | Sustained adoption |
| Instructor | 50 | $49.99 | $2,500 | Established reputation |
| Academic | 10 | $249/mo avg | $2,490 | Departments, summer programs |
| **Total** | **2,210** | — | **$5,740/mo** | $69K/year (meaningful revenue) |

---

## SUCCESS METRICS

| Metric | Current | Q2 Goal | Q3 Goal | Q4 Goal |
|--------|---------|---------|---------|---------|
| **Acquisition** |
| Free users | 50 | 200 | 500 | 1K+ |
| Pro subscribers | 5–10 | 20 | 50 | 150+ |
| Instructor accounts | 0 | 5 | 20 | 50 |
| **Engagement** |
| 30-day retention (free) | ~30% | 40% | 50% | 60% |
| Pro churn | ~10%/mo | 5% | 3% | 2% |
| Instructor churn | N/A | 0% | 5% | 5% |
| **Learning** |
| Passages completed/user/week | 1.5 | 2 | 2.5 | 3 |
| SRS cards added/user/week | 3 | 4 | 5 | 6 |
| Words mastered (% in SRS) | 40% | 45% | 50% | 55% |
| **Revenue** |
| MRR | $25–50 | $350 | $1,750 | $5K+ |
| CAC (cost to acquire) | N/A | $20 | $15 | $10 |
| LTV (lifetime value) | $30 (Pro) | $50 | $80 | $150 |
| LTV/CAC ratio | 1.5x | 2.5x | 5x | 15x |

---

## RISKS & MITIGATIONS

| Risk | Impact | Mitigation |
|------|--------|-----------|
| Teachers don't adopt instructor tier | Very High | Free trial (1 class, 30 days), email existing users, target teacher Twitter/communities, offer bulk discounts |
| Copyright takedowns for custom uploads | High | Public-domain-first (Phase 1), DMCA safe harbor, E&O insurance, legal review |
| Mobile web users abandon | Medium | Responsive design, PWA, offline-first morphology, fast load times |
| Morpheus parser is slow on custom texts | Medium | Cache results, parallel parsing jobs, fallback to SQLite |
| Teacher churn (cancel after free trial) | Medium | Email nurture (success stories), in-app tips, responsive support, free community tier |
| Scaling issues (DB gets slow) | Medium | Add read replicas, Redis caching, optimize queries, monitor performance |

---

## DECISION CHECKPOINTS

### Go/No-Go Decision: Instructor MVP Launch (End of Q2)

**Proceed if:**
- ✅ Landing page is live + converts 2%+ (2 signups per 100 visitors)
- ✅ Smart glosses are generated + integrated + tested
- ✅ Instructor MVP (class CRUD + assignment + completion) is coded + tested
- ✅ Instructor tier is gated in billing system
- ✅ TOS has copyright warning

**Hold if:**
- ❌ Landing page doesn't convert
- ❌ Smart glosses cost more than $5
- ❌ Instructor MVP has critical bugs

---

### Go/No-Go Decision: Custom Uploads Launch (End of Q3)

**Proceed if:**
- ✅ Instructor tier has 5+ paying customers
- ✅ 30-day retention > 40%
- ✅ Teacher satisfaction > 4/5
- ✅ Copyright lawyer has reviewed TOS + DMCA process
- ✅ E&O insurance is in place

**Hold if:**
- ❌ Fewer than 5 instructor customers by end of Q3
- ❌ Teacher churn is >20%/month
- ❌ Legal review uncovers issues

---

### Go/No-Go Decision: Academic Tier Launch (End of Q4)

**Proceed if:**
- ✅ Instructor tier has 20+ paying customers
- ✅ Custom uploads are stable (no major bugs or copyright issues)
- ✅ 30-day retention > 50%
- ✅ At least 1 department has expressed interest

**Hold if:**
- ❌ Fewer than 20 instructor customers
- ❌ Custom upload feature is buggy
- ❌ Teacher satisfaction drops below 3.5/5

---

## EFFORT SUMMARY

| Phase | Effort | Timeline | Owner | Notes |
|-------|--------|----------|-------|-------|
| Landing page | 1–2 weeks | Q2 | Brent | Copy + design + deploy |
| Smart glosses | 4 days | Q2 W3–4 | Brent + AI | $2–3 cost |
| Instructor MVP | 3–4 weeks | Q2 W5–12 | Brent | Schema + routes + UI |
| Custom uploads | 3–4 weeks | Q3 W1–8 | Brent | File upload + parsing + UI |
| Analytics | 2–3 weeks | Q3 W9–12 | Brent | Charts + aggregation |
| Academic tier | 3–4 weeks | Q4 | Brent | API + multi-instructor + support |
| **Total** | **~6 months** | **Q2–Q4 2026** | **Brent** | Part-time feasible |

---

## QUESTIONS FOR PRODUCT DECISIONS

**Before launching Instructor tier, decide:**

1. **Free trial model?** (1 class / 30 days, or 1 week unlimited?)
2. **Student cap per class?** (Instructor tier: 10, 25, or unlimited?)
3. **Custom text limit?** (3/semester, 10/semester, or unlimited?)
4. **Grading in MVP?** (Completion only, or add manual grading rubrics?)
5. **API for instructors?** (Defer to Academic tier, or included in Instructor tier?)
6. **Support model?** (Email only, or add office hours / Slack?)

---

## NEXT IMMEDIATE STEPS

1. ✅ **Review this roadmap** with advisors (Oliver, Petros, Kelly if interested)
2. ✅ **Finalize landing page** + deploy to lector.nerdbox.com
3. ✅ **Start smart glosses generation** (GPT-4 mini batch job)
4. ✅ **Plan Instructor MVP** (design schema + wireframes)
5. ✅ **Get legal review of TOS** ($1–2K, find IP lawyer)
6. ✅ **Schedule: Set 2-week goal** (landing page live, glosses generated)

---

## APPENDIX: File Locations & References

| Document | Path | Notes |
|----------|------|-------|
| App review (detailed) | `/home/node/.openclaw/workspace/LECTOR_APP_REVIEW.md` | Full codebase audit, feature gaps, architecture recommendations |
| Landing page brief | `/home/node/.openclaw/workspace/LECTOR_LANDING_BRIEF.md` | Copy, UX, visual style, testimonial placeholders |
| Deep research (open-source ecosystem) | `/home/node/.openclaw/workspace/research/2026-03-30_latin-greek-opensource.md` | CLTK, Whitaker's, Morpheus, Heidelberg NLP, Perseus, OGL research |
| This roadmap | `/home/node/.openclaw/workspace/LECTOR_ROADMAP_UPDATED.md` | Strategic direction, phases, timeline, legal framework |
| GitHub repo | `https://github.com/rutgersguy/lector` | Source code (Phase 1–4 complete) |
| Live app | `https://lector.nerdbox.com` | MVP live, auth disabled |

---

**Last Updated:** 2026-04-05 — Comprehensive review + instructor tier planning  
**Next Review:** 2026-07-01 (end of Q2) — Evaluate landing page + glosses + Instructor MVP progress  
**Maintained by:** Conductor AI Agent + Brent J. Broadnax
