# TemseeEdu — V1 Product Requirements Document
**Version:** 2.0 (Updated — Dual Deployment Model)
**Author:** Linxford / Temsee
**Status:** Active Development Target

---

## 1. What We're Building (And What We're Not)

The vision document covers 30+ modules. This PRD covers **only what ships as V1.**

The goal of V1 is simple:

> Win 3–5 paying schools. Deliver a working product. Generate recurring revenue. Learn from real deployments.

Everything else waits.

---

## 2. Product Summary

**TemseeEdu** is a modern school digital platform for Ghanaian and African educational institutions.

**Tagline:** Modern Digital Infrastructure for African Schools.

**V1 Delivers:**
- A premium school website (CMS-powered, no code needed)
- Online admissions system
- Student & parent portal
- Announcements & communication
- School admin dashboard

That's it. Five things done properly.

---

## 3. Deployment Models

Research into the Ghanaian school software market confirms the market is split.
Competitors like Smart School Manager and Edutrack Ghana market "pay-once lifetime license"
as their primary selling point. Academic research on Ghanaian tertiary institutions confirms
that loss of data control and distrust of third-party cloud providers are real, documented
barriers to cloud adoption in Ghana.

TemseeEdu ships in **two commercial editions** from day one, built from the same codebase.

---

### Edition A — TemseeEdu Cloud (SaaS)

**Who it's for:** Private schools, well-funded institutions, schools with no IT staff.

**How it works:**
- School gets a branded subdomain: `schoolname.temseeedu.com`
- Temsee hosts and manages everything
- School pays monthly or annually
- Updates, security, backups handled by Temsee
- Code never leaves Temsee's server — no licensing tool needed

**Billing model:**

| Plan | Monthly | Annual (save 15%) | Included |
|------|---------|-------------------|---------|
| Starter | GHS 500 | GHS 5,100 | CMS + Admissions + 50 students |
| Growth | GHS 800 | GHS 8,160 | Everything + Portals + Comms + 300 students |
| Institution | GHS 1,500 | GHS 15,300 | Everything + Unlimited + SMS + Priority support |

**One-time setup fee:**
- Starter: GHS 1,500
- Growth: GHS 2,500
- Institution: GHS 4,000

---

### Edition B — TemseeEdu School Edition (Self-Hosted Licensed)

**Who it's for:** Government/public SHS, budget-conscious private schools, schools with
their own servers or hosting, institutions that require full data control.

**How it works:**
- School purchases a license key (one-time)
- Temsee installs the software on the school's server (or school's own hosting)
- Encoded with SourceGuardian before delivery
- License key validates on boot — phones home to Temsee license server
- Annual support & updates contract (optional but recommended)

**Why SourceGuardian over IonCube:**

| | IonCube | SourceGuardian |
|--|---------|----------------|
| PHP 8.3 support | Partial (catching up) | Native, full support |
| Laravel 11 compatibility | Works with issues | Works cleanly |
| Obfuscation strength | Moderate | Stronger |
| Price | ~$499 one-time | ~$299/year |
| Modern PHP handling | Weaker | Better |

SourceGuardian is the correct choice for a Laravel 11 / PHP 8.3 project.

**Billing model:**

| License Type | Price | Included |
|-------------|-------|---------|
| Single School | GHS 8,000 | Full V1 modules, 1 domain |
| Institution (500+ students) | GHS 12,000 | Full V1 modules, 1 domain, priority setup |
| Multi-Branch | GHS 18,000 | Up to 3 campuses, 1 license |

**Annual support & updates contract:**
- Basic: GHS 1,500/year (updates + email support)
- Priority: GHS 2,500/year (updates + phone/WhatsApp support + 2 free training sessions)

**Installation & setup fee:** GHS 1,500–2,000 (one-time, covers server setup + data migration
+ staff training)

---

## 4. License Key System (Self-Hosted Edition)

This is built in Phase 0. It controls and protects all self-hosted deployments.

### Architecture

```
[School's Server]                    [Temsee License Server]
      |                                        |
      | Boot → CheckLicense middleware          |
      | → POST /api/license/verify             |
      |   { key, domain, fingerprint }  ──────>|
      |                                        | Validate key
      |                                        | Check domain matches
      |                                        | Check expiry
      |<── { valid: true, plan, expires_at } ──|
      |                                        |
      | Cache result for 24 hours              |
      | If server unreachable → 7-day grace    |
```

### License Server (hosted on Temsee infrastructure)

```sql
-- License server database (separate from main app)
licenses (
  id,
  license_key,         -- UUID v4, unique
  school_name,
  authorized_domain,   -- e.g. ameziongirls.edu.gh
  plan,                -- starter / growth / institution
  edition,             -- school_edition
  status,              -- active / suspended / expired / revoked
  issued_at,
  support_expires_at,  -- annual support contract expiry
  max_students,
  fingerprint_hash,    -- server fingerprint on first activation
  last_verified_at,
  created_at
)

license_verifications (
  id,
  license_id,
  domain,
  ip_address,
  fingerprint,
  response,            -- granted / denied / grace
  verified_at
)
```

### License Middleware (in the app)

```php
// app/Http/Middleware/VerifyLicense.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;

class VerifyLicense
{
    public function handle($request, Closure $next)
    {
        // SaaS edition skips this entirely
        if (config('temseeedu.edition') === 'cloud') {
            return $next($request);
        }

        $status = Cache::remember('license_status', now()->addHours(24), function () {
            return $this->checkLicense();
        });

        if ($status === 'valid') {
            return $next($request);
        }

        if ($status === 'grace') {
            // Show warning banner but allow access
            session()->flash('license_warning', 'License verification failed. Grace period active.');
            return $next($request);
        }

        // Lock to read-only / show license expired page
        return response()->view('license.expired', [], 402);
    }

    private function checkLicense(): string
    {
        try {
            $response = Http::timeout(10)->post('https://license.temseeedu.com/api/verify', [
                'key'         => config('temseeedu.license_key'),
                'domain'      => request()->getHost(),
                'fingerprint' => $this->getServerFingerprint(),
            ]);

            if ($response->successful() && $response->json('valid')) {
                Cache::put('license_grace_counter', 0);
                return 'valid';
            }

            return $this->handleFailure();

        } catch (\Exception $e) {
            return $this->handleFailure();
        }
    }

    private function handleFailure(): string
    {
        $graceDays = Cache::get('license_grace_counter', 0);

        if ($graceDays < 7) {
            Cache::increment('license_grace_counter');
            return 'grace';
        }

        return 'invalid';
    }

    private function getServerFingerprint(): string
    {
        // Combines server hostname + DB name for a stable fingerprint
        return hash('sha256', gethostname() . config('database.connections.mysql.database'));
    }
}
```

### License Config File (self-hosted)

```php
// config/temseeedu.php
return [
    'edition'     => env('TEMSEEEDU_EDITION', 'cloud'),  // 'cloud' or 'school_edition'
    'license_key' => env('TEMSEEEDU_LICENSE_KEY', null),
    'school_id'   => env('TEMSEEEDU_SCHOOL_ID', null),   // only for school_edition
];
```

### What Happens on License Events

| Event | System Behavior |
|-------|----------------|
| License valid | Full access, cache result 24 hours |
| License server unreachable | Grace period (7 days), warning banner shown |
| Grace period expired | Read-only mode, lock admin actions |
| License suspended (non-payment) | Redirect to payment/contact page |
| License revoked | Hard lock, contact Temsee message |
| Domain mismatch detected | Flag on license server, grace period |
| Support contract expired | App works, update notifications disabled |

### Super Admin License Dashboard (Temsee only)

Temsee manages all licenses from a central dashboard at `license.temseeedu.com/admin`:

- Issue new license key
- Assign to school + domain
- View verification history (which IP, when, how often)
- Suspend / revoke / reactivate
- Track support contract expiry
- Renew support contracts
- View all active deployments

---

## 5. Target Users for V1

| User | Description |
|------|-------------|
| **School Admin** | Manages the entire school setup, settings, users |
| **Admissions Officer** | Reviews applications, manages applicants |
| **Teacher** | Views students in their class, posts announcements |
| **Student** | Views personal academic info, downloads documents |
| **Parent/Guardian** | Monitors child, receives notifications |
| **Super Admin** | Platform owner (Temsee) — manages all schools (Cloud) |
| **License Admin** | Temsee staff — manages self-hosted license keys |

---

## 6. V1 Modules

### Module 1 — School Website CMS

The most important module. This is what sells the product to schools.

**Features:**
- Homepage builder with pre-built sections (hero, about, programs, gallery, contact)
- News & announcements management
- Events calendar
- Gallery (photos + optional video embed)
- Leadership/staff profiles
- School prospectus upload
- Admissions landing page (connected to Module 2)
- Contact form with email notification
- Custom pages (About, Academics, Student Life)
- SEO fields (meta title, description, OG image per page)
- Mobile-first responsive design

**Cloud edition:** `schoolname.temseeedu.com`
**School Edition:** school's own domain e.g. `ameziongirls.edu.gh`

**What the admin controls (no code):**
- Upload hero image/video
- Edit all text content
- Publish/unpublish pages
- Manage navigation menu
- Upload media to gallery

**User Stories:**

| As a... | I want to... | So that... |
|---------|-------------|------------|
| School Admin | Update homepage hero text and image | The website reflects current branding |
| School Admin | Publish a news article | Parents and visitors stay informed |
| Parent (visitor) | Browse school information on mobile | I can make admissions decisions |
| Admissions Officer | Direct parents to the apply page | Applications come through the system |

---

### Module 2 — Admissions

The revenue-critical module. Schools care deeply about this.

**Features:**
- Public online application form (name, DOB, program, guardian info, documents)
- Document upload (birth certificate, BECE results, passport photo)
- Application status tracking (Pending → Under Review → Accepted/Rejected)
- Applicant dashboard (public-facing, login via application number + DOB)
- Admissions officer dashboard (list, filter, review, approve/reject)
- Admission letter generation (PDF, downloadable)
- Email notifications at each status change
- SMS notification (Arkesel — optional at V1)
- Basic entrance exam scheduling (date + venue field)
- Prospectus download (PDF upload in CMS)
- Application reference number generation

**User Stories:**

| As a... | I want to... | So that... |
|---------|-------------|------------|
| Parent | Apply online for my child | I don't have to travel to apply |
| Applicant | Track my application status | I know what's happening |
| Admissions Officer | See all applications in one dashboard | I can manage them efficiently |
| Admissions Officer | Accept or reject with one click | The process is faster |
| Applicant | Download my admission letter | I have official proof of admission |

---

### Module 3 — Student Information System (Basic)

Lightweight for V1. No grade management yet — just core records.

**Features:**
- Student profile (name, ID, class, house, guardian info, photo)
- Student ID number generation (auto on admission approval)
- Class/section assignment
- Academic year tracking
- Student document storage (certificates, letters)
- Student status (active, graduated, withdrawn, suspended)
- Student ID card generation (PDF)
- Basic search and filter

**What's NOT in V1:**
- Grades / results (V1.5)
- Attendance (V1.5)
- Discipline records (V2)

**User Stories:**

| As a... | I want to... | So that... |
|---------|-------------|------------|
| Admin | View all students centrally | I have one source of truth |
| Admin | Generate a student ID card | Students have official identification |
| Teacher | See students in my class | I can manage my class |
| Student | View my profile and documents | I have access to my school records |

---

### Module 4 — Parent & Student Portal

A simple, clean, mobile-first portal. Focused experience, not a feature dump.

**Student sees:**
- Personal profile
- Class and teacher info
- School announcements
- Downloadable documents (admission letter, ID card)
- School events calendar
- Fee payment status (display only in V1)

**Parent sees:**
- Child's profile snapshot
- School announcements
- Fee payment status
- School events
- Contact school (message form to admin)
- Notification history

**User Stories:**

| As a... | I want to... | So that... |
|---------|-------------|------------|
| Student | Log in and see my school info | I don't need to ask admin everything |
| Parent | See my child's current status | I feel connected to the school |
| Parent | Receive notifications | I don't miss important updates |
| Parent | Contact the school easily | Communication is smooth |

---

### Module 5 — Announcements & Communication

The glue that keeps schools using the platform daily.

**Features:**
- Admin posts school-wide announcements
- Target by audience: all, parents only, students only, teachers only, specific class
- Announcement types: General, Urgent, Event, Academic
- Push notifications (in-app)
- Email broadcast (SendGrid/Mailgun)
- SMS broadcast (Arkesel — toggleable per school)
- Announcement scheduling (post later)
- Announcement archive
- Mark as read tracking

**User Stories:**

| As a... | I want to... | So that... |
|---------|-------------|------------|
| Admin | Send an urgent school notice | Everyone is informed immediately |
| Admin | Schedule a reminder for events | I don't have to remember to post manually |
| Parent | Receive notifications on my phone | I never miss important news |
| Teacher | Post class-specific notices | My students get targeted updates |

---

### Module 6 — Admin Dashboard

The control center. Clean, data-driven, actionable.

**What's on the dashboard:**
- Total students / active / new this term
- Pending applications count (with quick-access link)
- Recent announcements
- Upcoming events
- Quick actions: New Announcement, Review Applications, Add Student
- School website live preview link
- License status (School Edition only — expiry warning if approaching)

**Settings (per school):**
- School name, logo, colors, tagline
- Academic year setup
- Term/semester setup
- Email configuration (SMTP)
- SMS API key (Arkesel)
- User management (add staff, assign roles)
- Subscription status (Cloud) / License info (School Edition)

---

## 7. Architecture

### Cloud Edition — Multi-Tenant

```
temseeedu.com                  → Marketing/landing page
ameziongirls.temseeedu.com     → AME Zion Girls school instance
wesleygirls.temseeedu.com      → Wesley Girls school instance
```

- Each school's data scoped by `school_id`
- Schools cannot see each other's data
- Super Admin (Temsee) can view all schools
- Wildcard SSL: `*.temseeedu.com`

**Cloud onboarding flow:**
1. Temsee creates school in Super Admin panel
2. School gets subdomain assigned automatically
3. School Admin receives login credentials via email
4. School Admin completes setup wizard (logo, colors, basic info)
5. School is live

### School Edition — Single Tenant

```
ameziongirls.edu.gh            → School's own domain
```

- One school per installation
- No `school_id` scoping needed (everything belongs to this school)
- School manages their own hosting
- Temsee installs, encodes with SourceGuardian, hands over

**Self-hosted onboarding flow:**
1. School signs agreement + pays license fee
2. Temsee encodes the codebase with SourceGuardian
3. Temsee issues license key from license server
4. Temsee installs on school's server (or guides IT team)
5. License key entered in `.env`, system activates
6. Temsee delivers training (onsite or virtual)

---

## 8. Tech Stack

### Backend
| Layer | Choice | Reason |
|-------|--------|--------|
| Framework | Laravel 11 | Mature, fast to build |
| Auth | Laravel Breeze + Spatie Permission | Simple, role-based |
| Admin UI | Filament 3 | Beautiful, rapid admin panel |
| File Storage | Spatie Media Library | Clean file management |
| PDF Generation | DomPDF | Admission letters, ID cards |
| Email | Laravel Mail + Mailgun/SendGrid | Reliable delivery |
| SMS | Arkesel (Ghana) | Local SMS gateway |
| Queue | Laravel Queue + Redis | Notifications, emails |
| Search | Laravel Scout | Student/application search |
| Exports | Laravel Excel (Maatwebsite) | Lists, reports |
| Code Protection | SourceGuardian | School Edition encoding |
| HTTP Client | Laravel HTTP (Guzzle) | License server communication |

### Frontend
| Layer | Choice | Reason |
|-------|--------|--------|
| School Public Website | Blade + TailwindCSS + Alpine.js | Fast, SEO-friendly |
| Admin Dashboard | Filament 3 (Livewire) | Rapid build, beautiful UI |
| Portals (Student/Parent) | Blade + Livewire + TailwindCSS | Real-time feel |
| Animations | GSAP + CSS | Smooth, modern feel |

### Infrastructure — Cloud Edition
| Layer | Choice |
|-------|--------|
| Hosting | VPS (Hetzner / DigitalOcean) |
| Database | MySQL 8 |
| Cache | Redis |
| Storage | VPS local + S3 later |
| DNS | Wildcard `*.temseeedu.com` |
| SSL | Let's Encrypt wildcard |
| CI/CD | GitHub Actions |
| License Server | Separate VPS, Laravel API only |

### Infrastructure — School Edition
| Layer | Notes |
|-------|-------|
| Hosting | School's own cPanel / VPS / server |
| Database | MySQL (school managed) |
| SSL | School manages (or Temsee assists) |
| SourceGuardian Loader | Must be installed on server |
| PHP Version | 8.3+ required |

---

## 9. Database Schema

### Cloud Edition (multi-tenant)

```sql
-- Platform level
schools (
  id, name, slug, domain, logo, colors_json,
  status, subscription_plan, subscription_status,
  subscription_ends_at, grace_period_ends_at,
  created_at
)

subscriptions (
  id, school_id, plan, status,
  starts_at, ends_at, grace_period_ends_at,
  created_at
)

super_admins (id, name, email, password)

-- School level (scoped by school_id)
users (id, school_id, name, email, password, role, status)
students (id, school_id, user_id, student_id_no, class_id, guardian_id, status, photo)
guardians (id, school_id, name, email, phone, relationship)
classes (id, school_id, name, level, academic_year_id)
academic_years (id, school_id, name, start_date, end_date, is_current)
applications (id, school_id, applicant_name, dob, program, status, reference_no,
              guardian_name, guardian_phone, guardian_email, documents_json)
pages (id, school_id, slug, title, content_json, is_published, meta_json)
news (id, school_id, title, body, image, published_at, author_id)
events (id, school_id, title, description, date, location, image)
gallery_items (id, school_id, type, url, caption, category)
announcements (id, school_id, title, body, type, audience, scheduled_at, published_at, author_id)
notifications (id, user_id, type, title, body, read_at, data_json)
```

### School Edition (single-tenant, no school_id scoping)

```sql
-- Same tables minus school_id columns
-- Plus license table:
license (
  id, license_key, authorized_domain,
  plan, status, issued_at,
  support_expires_at, max_students,
  fingerprint_hash, last_verified_at
)
```

### License Server (separate app on Temsee infrastructure)

```sql
licenses (
  id, license_key, school_name, authorized_domain,
  plan, edition, status,
  issued_at, support_expires_at, max_students,
  fingerprint_hash, last_verified_at, created_at
)

license_verifications (
  id, license_id, domain, ip_address,
  fingerprint, response, verified_at
)
```

---

## 10. Key Pages & Routes

### Public School Website
```
/                        → Homepage
/about                   → About school
/academics               → Academic programs
/admissions              → Admissions info + Apply CTA
/admissions/apply        → Application form
/admissions/track        → Application status tracker
/news                    → News listing
/news/{slug}             → Single news article
/events                  → Events
/gallery                 → Gallery
/contact                 → Contact form
```

### Student Portal
```
/portal/login            → Login
/portal/dashboard        → Student home
/portal/profile          → Personal info
/portal/documents        → Downloads (ID card, letter)
/portal/announcements    → School notices
/portal/events           → Calendar
```

### Parent Portal
```
/parent/login            → Login
/parent/dashboard        → Parent home
/parent/child/{id}       → Child's profile
/parent/announcements    → School notices
/parent/fees             → Fee status (read-only V1)
/parent/contact          → Message school
```

### Admin Panel (Filament)
```
/admin                   → Dashboard
/admin/students          → Student management
/admin/admissions        → Applications
/admin/announcements     → Communication
/admin/news              → CMS news
/admin/events            → CMS events
/admin/gallery           → Media
/admin/pages             → Page editor
/admin/users             → Staff/roles
/admin/settings          → School settings
/admin/license           → License info (School Edition only)
```

### License Server (Temsee internal)
```
https://license.temseeedu.com/api/verify     → POST (called by school apps)
https://license.temseeedu.com/admin          → Temsee license management dashboard
```

---

## 11. Build Phases

### Phase 0 — Foundation + License System (Week 1–2)

**Core setup:**
- [ ] Laravel 11 project setup
- [ ] `config/temseeedu.php` with edition + license key config
- [ ] Multi-tenant middleware (Cloud: subdomain routing / School Edition: single domain)
- [ ] Database schema migrations for both editions
- [ ] Spatie Permission — define all roles
- [ ] Filament 3 installation and theme customization
- [ ] Auth system (Admin, Student, Parent separate guards)
- [ ] School settings panel (name, logo, colors, tagline)
- [ ] Super Admin panel — create and manage schools (Cloud)

**License system (School Edition):**
- [ ] Build License Server as a separate Laravel app
- [ ] License server database + migrations
- [ ] License verification API endpoint (`POST /api/verify`)
- [ ] `VerifyLicense` middleware in main app
- [ ] 24-hour cache + 7-day grace period logic
- [ ] License expired / suspended view
- [ ] License admin dashboard (Filament, Temsee only)
- [ ] Issue / suspend / revoke license keys
- [ ] Verification history log

**Subscription system (Cloud Edition):**
- [ ] Subscription table + status tracking
- [ ] `CheckSubscription` middleware
- [ ] Email warnings at 14 days, 7 days, 3 days before expiry
- [ ] Grace period (7 days after expiry)
- [ ] Subscription expired view

---

### Phase 1 — Website CMS (Week 3–4)
- [ ] Public school homepage (Blade + Tailwind design)
- [ ] Homepage sections: hero, about, programs, gallery, contact
- [ ] CMS controls in Filament (hero text, images, about text)
- [ ] News management (create, publish, list, single article view)
- [ ] Events management
- [ ] Gallery management (photo upload + video embed)
- [ ] Contact form with email notification to school admin
- [ ] SEO fields (meta title, description, OG image per page)
- [ ] Custom domain support (School Edition — map own domain)
- [ ] Mobile responsiveness full audit

### Phase 2 — Admissions (Week 5–6)
- [ ] Public application form
- [ ] Document upload (birth certificate, BECE results, passport photo)
- [ ] Application reference number generation
- [ ] Applicant status tracker (public, no login required)
- [ ] Admissions officer dashboard (Filament)
- [ ] Status workflow: Pending → Under Review → Accepted / Rejected
- [ ] Email notifications on each status change
- [ ] Admission letter PDF generation (DomPDF)
- [ ] Prospectus PDF upload + download link on admissions page

### Phase 3 — Student SIS (Week 7)
- [ ] Student profile (auto-created on admission approval)
- [ ] Manual student creation
- [ ] Class assignment
- [ ] Student ID number generation
- [ ] Student ID card PDF (DomPDF)
- [ ] Document storage per student
- [ ] Student list with search + filter + export (Excel)
- [ ] Academic year management

### Phase 4 — Portals (Week 8–9)
- [ ] Student portal: login, dashboard, profile, documents
- [ ] Parent portal: login, child profile, announcements, fees display
- [ ] Portal mobile design (priority over desktop)
- [ ] In-app notification bell

### Phase 5 — Communication (Week 9–10)
- [ ] Announcements (create, target audience, schedule)
- [ ] Email broadcast via Mailgun/SendGrid
- [ ] In-app notification system
- [ ] SMS broadcast via Arkesel (toggleable per school)
- [ ] Announcement archive + read tracking

### Phase 6 — Packaging & Launch (Week 11–12)
- [ ] SourceGuardian encoding pipeline (School Edition build script)
- [ ] School Edition installer (guided .env setup)
- [ ] Onboarding wizard (first-run setup for new schools)
- [ ] Demo instance: `demo.temseeedu.com`
- [ ] Performance audit (image optimization, Redis caching, query optimization)
- [ ] Security audit (RBAC, CSRF, upload validation, SQL injection)
- [ ] QA: mobile + desktop, both editions
- [ ] `temseeedu.com` marketing/landing page
- [ ] Pricing page (both editions clearly explained)
- [ ] School admin documentation (PDF + video)

---

## 12. SourceGuardian Encoding Pipeline

Before delivering a School Edition copy, run the encode pipeline:

```bash
# 1. Checkout clean production branch
git checkout main
git pull

# 2. Install dependencies (production only)
composer install --no-dev --optimize-autoloader

# 3. Remove cloud-only files not needed in School Edition
rm -rf app/MultiTenant
rm -rf app/Http/Middleware/ResolveTenant.php

# 4. Encode with SourceGuardian CLI
sgenc --php 8.3 \
      --exclude storage/ \
      --exclude public/assets/ \
      --exclude resources/ \
      --exclude tests/ \
      --output ./dist/school-edition/ \
      ./

# 5. Inject license key placeholder in .env.example
echo "TEMSEEEDU_EDITION=school_edition" >> ./dist/school-edition/.env.example
echo "TEMSEEEDU_LICENSE_KEY=" >> ./dist/school-edition/.env.example

# 6. Zip for delivery
zip -r TemseeEdu-SchoolEdition-v1.0.zip ./dist/school-edition/
```

**What gets encoded:** All PHP files in `app/`, `routes/`, `database/`

**What is NOT encoded:** `resources/` (Blade/CSS/JS — not sensitive),
`public/assets/`, `storage/`, `vendor/` (Composer packages are open source anyway)

---

## 13. Choosing the Right Edition (Sales Guide)

Use this when pitching to a school:

| Question | Cloud | School Edition |
|----------|-------|----------------|
| Do you have your own server or hosting? | No | Yes |
| Do you have an IT person on staff? | No | Preferred |
| Are you comfortable with monthly payments? | Yes | No |
| Do you need data stored on your own server? | No | Yes |
| Are you a government / public school? | Unlikely | Likely |
| Do you want us to handle updates automatically? | Yes | Support contract |
| Budget: upfront lump sum or monthly? | Monthly | Lump sum |

**Default recommendation for most private schools:** Cloud Edition.
**Default recommendation for government SHS, universities:** School Edition.

---

## 14. What's NOT in V1

Be disciplined. These come later:

| Feature | Target Version |
|---------|---------------|
| Results / Grading | V1.5 |
| Attendance | V1.5 |
| Fee payments (online — MoMo, card) | V1.5 |
| Timetable | V2 |
| Library | V2 |
| Hostel | V2 |
| Transport | V2 |
| HR / Payroll | V2 |
| CBT / Exams | V2 |
| E-Learning | V3 |
| AI Assistant | V3 |
| Mobile App | V3 |
| White-label SaaS | V3 |

---

## 15. First Client Strategy

Don't wait for the full build. Move in parallel.

**Month 1–2:** Build Phase 0 + Phase 1 (CMS only)
→ Pitch AME Zion Girls SHS. Let them choose Cloud or School Edition.
→ Charge setup fee + first payment upfront before going live.

**Month 2–3:** Ship Phase 2 (Admissions)
→ Upgrade existing client. Pitch 2 more schools using AME Zion as case study.

**Month 3–4:** Ship Phases 3–5
→ Full V1 complete. All future pitches get the complete package.

**This is the strategy:** Revenue while building, not after.

---

## 16. Success Metrics for V1

| Metric | Target |
|--------|--------|
| Schools onboarded | 3–5 |
| Monthly Recurring Revenue (Cloud) | GHS 2,500+ |
| Self-Hosted licenses sold | 2+ |
| Uptime (Cloud) | 99%+ |
| Mobile Lighthouse Score | 85+ |
| Application form completion rate | 70%+ |
| Admin onboarding time | < 30 minutes |
| License verification uptime | 99.9% |

---

*TemseeEdu V1 PRD v2.0 — Internal Build Document*
*Temsee © 2025*
