Status: Implementation-aware public document Product: Jogg Mini Operated by: MokingBird Oy ("Mokingbird") Last Updated: July 19, 2026
1. Security Philosophy
Jogg Mini follows a practical layered-security model built around:
- Data minimisation — we collect only what is necessary
- Role separation — parent, teacher, teen, and child flows are strictly separated
- Secure authentication — Supabase Auth with OAuth and JWT
- Limited child profile identity — first name, age, grade only for children under 13
- Protected parent controls — PIN-gated access to all parental settings
- Safe defaults — conservative default settings for a child-focused application
- Honest boundaries — we describe security as implemented, not aspirationally
2. Security Architecture: Four Layers
┌─────────────────────────────────────────────────────┐
│ Layer 4: CLOUD SECURITY │
│ (Supabase RLS and role-scoped access controls) │
├─────────────────────────────────────────────────────┤
│ Layer 3: TRANSMISSION SECURITY │
│ (HTTPS/TLS transport and PKCE OAuth where used) │
├─────────────────────────────────────────────────────┤
│ Layer 2: DATA ENCRYPTION │
│ (Layered local storage and hashed PIN flows) │
├─────────────────────────────────────────────────────┤
│ Layer 1: DEVICE SECURITY │
│ (PINs/locks, biometrics, session timeout) │
└─────────────────────────────────────────────────────┘
3. Layer 1: Device Security
PIN-Based Access Controls
Jogg Mini implements account/device protection with PIN/lock flows:
| PIN Type | Length | Storage | Purpose | |----------|--------|---------|---------| | App PIN (optional) | 4 digits | Device-side secure storage | Lock app access on shared devices | | Parent PIN | 6 digits (where enabled) | Hashed in backend (Supabase) | Protect parental dashboard and sensitive settings | | Teacher PIN (optional) | 4 digits | Device-side secure storage | Protect teacher profile access on shared devices |
PIN hashing: Parent PIN values are hashed before backend storage in PIN-enabled account flows. Local device-side parent lock secrets use Flutter Secure Storage (backed by iOS Keychain and Android Keystore).
Biometric Authentication
Jogg Mini supports optional Touch ID and Face ID (or equivalent device biometrics) as an alternative to the app PIN. Biometric data is handled entirely by the device operating system (iOS Secure Enclave, Android Keystore) — Jogg Mini never accesses or stores biometric data.
Device Integrity
Device integrity hardening (including jailbreak/root detection) may be introduced or enabled per release. This document does not treat it as a guaranteed always-on control across all builds.
Auto-Lock and Session Timeout
The app automatically locks the parent dashboard after a configurable idle period, requiring PIN or biometric re-authentication. This prevents unauthorised access when a device is left unattended.
Secure Key Storage
Authentication tokens and sensitive device-side secrets are stored using:
- iOS Keychain — hardware-backed secure storage
- Android Keystore — hardware-backed secure storage where available
4. Layer 2: Data Encryption
Local Data Protection (Hive and Other Local Storage)
Jogg Mini operates offline-first. Local data is stored using layered local storage mechanisms. Sensitive secrets are protected with secure storage, while other app data uses standard local storage/caching layers appropriate to sensitivity.
Important Distinction: Storage Tiers
Not all local data is treated identically. Jogg Mini uses different local storage layers:
| Data Type | Storage Layer | Sensitivity | |-----------|---------------|------------| | General app preferences, onboarding state | SharedPreferences / local prefs | Low | | Offline progress, question cache | Hive/local cache (protection varies by build) | Medium | | Parent/teacher lock secrets, auth tokens | Flutter Secure Storage (Keychain/Keystore) | High |
We describe Jogg Mini as using layered local-storage practices rather than claiming all local values are stored in the same way. Sensitive secrets use secure storage; general preferences use standard app storage.
File and Report Protection
Export/report handling follows platform and application-level protection controls available in the active build. Protection details can vary by feature and deployment.
5. Layer 3: Transmission Security
HTTPS/TLS Transport
Communication between Jogg Mini clients and backend services uses encrypted HTTPS/TLS transport provided by platform networking stacks and backend endpoints.
Certificate Pinning Position
Certificate pinning is not treated in this document as a universal, guaranteed control across all builds/environments.
JWT Token Management and PKCE
Authentication uses JWT tokens with automatic refresh via PKCE (Proof Key for Code Exchange) OAuth flow:
- Short-lived access tokens with automatic refresh
- Refresh tokens stored in device secure storage
- Tokens invalidated on logout or account credential change
- No tokens stored in logs or plaintext
6. Layer 4: Cloud Security
Supabase PostgreSQL
All user data is stored on Supabase (PostgreSQL 15), hosted in the European Union. Supabase has a Data Processing Agreement (DPA) with MokingBird Oy.
Row-Level Security (RLS)
PostgreSQL Row-Level Security ensures every database query is automatically scoped to the authenticated user's data. No user can access another user's data through the API.
Example RLS policy:
-- Parents can only read their own kids' profiles
CREATE POLICY "parents_see_own_kids"
ON kid_profiles FOR SELECT
USING (parent_id IN (
SELECT id FROM parent_profiles
WHERE user_id = auth.uid()
));
Role Separation at the Backend
Access is separated by role:
- Parent-only routes are guarded separately from teacher-only routes
- Child profile access is scoped to the owning parent
- Teacher quiz access is scoped to quizzes they created
- No cross-role data leakage by design
Backups and Operational Logging
Backup and operational logging controls are provided through backend infrastructure and application operations as configured. Exact backup cadence/retention and log implementation can vary by environment and deployment stage.
7. Authentication Security
Age-Based Authentication Model
| User | Authentication | |------|---------------| | Child <13 | No login — parent selects child profile | | Teen 13–15 | Google or Apple Sign-In (OAuth PKCE) | | Parent | Google or Apple provider identity (Supabase Auth session) | | Teacher | Google or Apple provider identity (Supabase Auth session) | | Guest | No authentication — local session only |
Parent PIN Flow
Parent PIN-enabled account flows use hashed backend PIN storage:
- PINs are hashed (SHA-256) before backend storage in implemented parent-PIN flows
- Device-side parent lock uses Flutter Secure Storage for local PIN material
- PIN recovery/reset mechanisms vary by account method and active implementation
OAuth Security
OAuth sign-ins use the PKCE flow, which:
- Prevents authorization code interception
- Requires code verifier matching
- Uses short-lived authorization codes
8. Children's Data Protections
Given that Jogg Mini primarily serves children, we implement additional protections:
- No third-party tracking SDKs included for child user sessions
- No advertising SDKs — the app contains zero ad infrastructure
- No location services — no location permissions requested
- No contacts or calendar access
- No camera or microphone permissions (beyond optional device capabilities where explicitly consented)
- Parental PIN gate for all child account settings changes
- Data minimisation — only first name, age, grade level stored for child profiles
- Parent one-click deletion of child profile and all associated data
9. Quiz and Classroom Security
Teacher and organiser quiz flows use controlled join mechanisms:
- 6-character join codes — generated per quiz, can be revoked
- Six-digit join codes — tied to active sessions and limited to ten attempts per ten minutes
- Quiz status transitions — open → active → closed, with access gated per status
- Participant records tied to session identifiers, not open public access
10. Analytics and Diagnostics
Jogg Mini may include analytics and diagnostics tooling depending on deployment:
- Analytics tooling (if enabled) for product improvement
- Crash/error diagnostics tooling (if enabled) for reliability
- Analytics are limited to product improvement purposes
- No advertising-targeted analytics or behavioural profiling
- Analytics controls/opt-out depend on active build configuration
11. Data Deletion and Account Control
Security includes authenticated user control and an explicit deletion design. Child-profile deletion controls exist in parent surfaces, while the complete idempotent deletion worker, parent/teacher/hybrid account purge, provider disconnect, export warning and retention evidence can be seen in https://joggmini.mokingbird.xyz/delete. Logout ends the current Supabase session; the product must not claim global session revocation unless the backend confirms it.
12. Implementation Notes and Honest Boundaries
We describe security as it is implemented, not aspirationally. Current implementation notes:
- Sensitive parent lock secrets use Flutter Secure Storage (backed by platform secure enclaves)
- General onboarding and preference values use standard app storage (SharedPreferences) — these are not treated as sensitive secrets
- Account-backed authentication relies on Google/Apple identity through Supabase Auth; the active eligible-account UI disables email-password operations
- Canonical reward writes accept answer facts through validated SECURITY DEFINER functions; app roles cannot directly mutate event/ledger/summary state
- Teacher/learner join codes are numeric six-digit values with ten-attempt/ten-minute rate limiting
- Parent, co-parent, self-managed kid, teacher and outsider RLS boundaries require the Phase 11 matrix before release
- Backend PIN hashing uses SHA-256 in the current implementation
- Some offline and cached app data uses Hive/local cache layers, while non-sensitive preferences use standard local storage
These distinctions are intentional and reflect a risk-proportionate approach to storage security.
13. Security Roadmap
Mokingbird's technical roadmap includes continued hardening:
- Stronger operational analytics and anomaly detection
- Continued row-level security verification and testing
- Production-readiness testing of parent, teacher, and child-role access boundaries
- Review of local preference handling for sensitive flows
- Periodic third-party security assessments as the product scales
- Staying current with evolving COPPA, GDPR, and child safety regulations
14. Third-Party Security Compliance
| Provider Category | Security Reference | |----------|-----------------| | Supabase | Provider-published security/compliance materials (for example SOC and DPA documentation) | | Billing providers (where used) | Provider-published payment/security compliance materials | | Analytics/diagnostics providers (if enabled) | Provider-published security/privacy documentation |
15. Reporting Security Issues
To report a security vulnerability or concern:
Email: [email protected]
We take all security reports seriously and aim to respond within 48 hours. We follow responsible disclosure practices and will not take legal action against researchers acting in good faith.
Mokingbird (MokingBird Oy) — Security Document v1.3 — July 2026