EverJoy Security Policy
Effective Date: July 1, 2026
Last Updated: July 2026
Version: 2026-07
Entity: EverJoy Memory LLC d/b/a EverJoy
This Security Policy describes EverJoy's information security program for protecting personal information processed through The AI-Powered Student Growth Cloud. It applies to:
This Policy supports representations in the Privacy Policy, District DPA, and Data Retention Policy.
| Role | Responsibility |
|---|---|
| Executive Leadership | Security program oversight, resource allocation |
| Security Lead | Policy maintenance, incident response coordination |
| Engineering | Secure development, infrastructure security |
| Operations | Monitoring, access management, vendor oversight |
Security contact: security@myeverjoy.com
This Policy is reviewed at least annually and updated following:
EverJoy conducts periodic risk assessments covering:
| Classification | Description | Examples | Handling |
|---|---|---|---|
| Critical | Highly sensitive personal data | Child photos, roster DOB, capture artifacts | Encrypted, RLS, audit logged, signed URLs |
| Confidential | Personal information | Parent email, child names, billing | Encrypted, access controlled |
| Internal | Business operations | Analytics aggregates, system logs | Access restricted to personnel |
| Public | Marketing content | Landing pages, public school directory | No restrictions |
yearbox/src/lib/supabase/middleware.ts)EverJoy implements role-based access control with row-level security (RLS):
| Role | Access Scope |
|---|---|
| Parent | Own family data via family_id, owns_student() |
| Family member | Shared content via is_family_member() |
| Capture Partner | Assigned schools via partner_serves_school() |
| School admin | School-scoped data (future admin portal) |
| Platform admin | Full access via is_platform_admin() with audit logging |
RLS is enabled on all major tables per migration 00008_rls_policies.sql and feature-specific migrations:
student_rosterfamily_idMemory files and child photos stored in private buckets (migration 00037_private_storage_buckets.sql):
| Bucket | Contents | Access |
|---|---|---|
memories | Uploaded photos, PDFs | Signed URL after auth |
student-photos | Child profile photos | Signed URL after auth |
capture-artifacts | Partner-scanned work | Signed URL after auth |
Files are never publicly accessible. Access requires:
| Context | TTL |
|---|---|
| UI display | 1 hour |
| AI processing | 15 minutes |
Implementation: yearbox/src/lib/storage/signed-urls.ts
Storage access is logged via application audit logs when files are accessed through authorized endpoints.
| Endpoint | Limit |
|---|---|
| Roster activation | 5 failures per 24 hours per account |
| API routes | Per-route limits (implementation-specific) |
| Auth attempts | Supabase Auth defaults |
Production beta gating via EVERJOY_BETA_MODE limits signup to controlled rollout (yearbox/src/lib/beta/config.ts).
Append-only audit_logs table (migration 00006_audit_logs.sql):
| Event | Action |
|---|---|
| Consent acceptance | consent_records INSERT |
| Student creation | students INSERT |
| Roster activation | Activation attempt |
| Memory deletion | memories DELETE |
| School interest | school_interest INSERT |
| Admin actions | Platform admin operations |
Implementation: yearbox/src/lib/audit/log.ts
Audit logs retained for 3 years (1,095 days) per Data Retention Policy.
| Environment | Purpose | Data |
|---|---|---|
| Development | Local development | Test/synthetic data |
| Staging | Pre-production testing | Anonymized data |
| Production | Live service | Real user data |
Production credentials never used in development.
Subprocessors must:
See District DPA Exhibit A for current subprocessors:
Subprocessors reviewed:
Capture Partners must complete:
Training content: yearbox/src/lib/partner-capture/academy/content.ts
/partner/*) requires capture_partner roleCapture requires:
capture_authorized = trueImplementation: yearbox/src/lib/partner-capture/capture-authorization.ts
See AI Usage Policy for details. Summary:
AI_WORKER_SECRET| Severity | Description | Response Time |
|---|---|---|
| Critical | Data breach, system compromise | Immediate |
| High | Unauthorized access attempt, service outage | 1 hour |
| Medium | Vulnerability discovered, suspicious activity | 4 hours |
| Low | Policy violation, minor misconfiguration | 24 hours |
EverJoy will notify:
Notification includes: nature of incident, data affected, steps taken, recommended user actions.
Report security incidents to: security@myeverjoy.com
Target uptime: 99.5% (excluding scheduled maintenance).
Background checks for personnel with access to production systems or child data, where permitted by law.
All personnel and contractors sign confidentiality agreements covering personal information.
Upon termination:
Security controls support compliance with:
Security controls do not impede accessibility. EverJoy commits to WCAG 2.1 AA alignment for user-facing interfaces (see production readiness checklist).
Users contribute to security by:
Material changes to this Policy will be communicated via:
| Purpose | Contact |
|---|---|
| Security incidents | security@myeverjoy.com |
| Privacy inquiries | privacy@myeverjoy.com |
| General support | support@myeverjoy.com |
| Control ID | Domain | Control | Implementation | Status |
|---|---|---|---|---|
| AC-1 | Access Control | Role-based access | RLS + user_role enum | ✅ |
| AC-2 | Access Control | Least privilege | Scoped policies | ✅ |
| AC-3 | Access Control | Session management | Supabase Auth | ✅ |
| AC-4 | Access Control | Admin access review | Quarterly | 🔄 |
| SC-1 | System & Communications | TLS 1.2+ | HTTPS enforced | ✅ |
| SC-2 | System & Communications | Encryption at rest | Cloud provider AES-256 | ✅ |
| SC-3 | System & Communications | Signed URLs | 1h UI / 15min AI | ✅ |
| SC-4 | System & Communications | Key management | Environment variables | ✅ |
| AU-1 | Audit | Append-only logs | DB triggers | ✅ |
| AU-2 | Audit | Event coverage | Partial (see checklist) | 🔄 |
| AU-3 | Audit | Log retention | 3 years | ✅ |
| IR-1 | Incident Response | 72-hour notification | DPA commitment | ✅ |
| IR-2 | Incident Response | Incident playbooks | Documented | ✅ |
| CP-1 | Contingency Planning | Daily backups | Supabase | ✅ |
| CP-2 | Contingency Planning | RTO 4 hours | Target | ✅ |
| IA-1 | Identification & Authentication | Email verification | Required | ✅ |
| IA-2 | Identification & Authentication | Rate limiting | Roster activation | ✅ |
| CM-1 | Configuration Management | Environment separation | Dev/staging/prod | ✅ |
| CM-2 | Configuration Management | Secret rotation | On compromise | ✅ |
EverJoy conducts security assessments:
| Assessment Type | Frequency | Scope |
|---|---|---|
| Dependency scanning | Continuous | npm packages |
| Code review | Per PR | Changed code |
| Penetration test | Annual | Production environment |
| RLS policy audit | Quarterly | Database policies |
Results shared with District upon request under NDA.
| Audience | Training | Frequency |
|---|---|---|
| All personnel | Security awareness | Onboarding + annual |
| Engineering | Secure development | Onboarding + annual |
| Capture Partners | FERPA/COPPA + capture security | Certification |
| Platform admins | Admin access responsibilities | On role assignment |
Security Policy version 2026-07. Aligned with EverJoy infrastructure in yearbox/supabase/migrations/ and security implementations.