|
| 1 | +# Privacy Policy for Classi |
| 2 | + |
| 3 | +**Effective date:** 2026-04-28 |
| 4 | +**Last updated:** 2026-04-28 |
| 5 | + |
| 6 | +This Privacy Policy describes how **OpenPatch** ("we", "us", or "our") handles |
| 7 | +information in connection with the **Classi** mobile and desktop application |
| 8 | +("the App"). Please read this policy carefully. By using the App you confirm |
| 9 | +that you have read and understood it. |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## 1. Who We Are |
| 14 | + |
| 15 | +Classi is developed and maintained by **OpenPatch**. If you have any questions |
| 16 | +or concerns about this Privacy Policy you may contact us at: |
| 17 | + |
| 18 | +- **GitHub:** <https://github.com/openpatch/classi/issues> |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## 2. Summary |
| 23 | + |
| 24 | +> **Classi is a local-first application. It does not collect, transmit, or share |
| 25 | +> any personal data with us or any third party.** All data you enter — including |
| 26 | +> student names, grades, notes, and checklists — is stored exclusively on your |
| 27 | +> own device in an encrypted database file that you control. |
| 28 | +
|
| 29 | +--- |
| 30 | + |
| 31 | +## 3. Information the App Stores on Your Device |
| 32 | + |
| 33 | +To deliver its teaching-management features, Classi stores the following |
| 34 | +categories of data **locally on your device only**: |
| 35 | + |
| 36 | +| Category | Examples | |
| 37 | +|---|---| |
| 38 | +| Group / class data | Group names, academic year labels | |
| 39 | +| Student data | First name, last name, archived status, avatar | |
| 40 | +| Academic records | Grades, grade systems, grade history | |
| 41 | +| Notes | Free-text notes linked to students or groups | |
| 42 | +| Checklists | Checklist titles, items, and student-linked status | |
| 43 | +| Material tracking | Material names and per-student tracking status | |
| 44 | +| App settings | Chosen library path, auto-backup preferences, language | |
| 45 | +| Security credentials | Encrypted passphrase hash, recovery key (stored in the OS secure keystore) | |
| 46 | + |
| 47 | +None of this data is ever sent to our servers, any analytics service, or any |
| 48 | +third party. |
| 49 | + |
| 50 | +--- |
| 51 | + |
| 52 | +## 4. Data We Do Not Collect |
| 53 | + |
| 54 | +We do **not** collect: |
| 55 | + |
| 56 | +- Names, email addresses, or any personally identifiable information about you |
| 57 | + as the teacher or about your students |
| 58 | +- Usage analytics, crash reports, or telemetry |
| 59 | +- Location data |
| 60 | +- Device identifiers or advertising IDs |
| 61 | +- Payment information |
| 62 | + |
| 63 | +The App has **no network features** and makes no outbound connections of any |
| 64 | +kind. |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +## 5. Encryption and Security |
| 69 | + |
| 70 | +All library data is stored in a **SQLCipher-encrypted** `.classi` database file |
| 71 | +protected by a passphrase you choose during first-run setup. A recovery key is |
| 72 | +generated at setup time so you can regain access if you forget your passphrase. |
| 73 | + |
| 74 | +The passphrase is stored in the device's **secure keystore** |
| 75 | +(`flutter_secure_storage`) and never leaves your device. |
| 76 | + |
| 77 | +Optionally, you may enable **biometric unlock** (fingerprint / face). In that |
| 78 | +case the App stores the database passphrase in the OS secure keystore under a |
| 79 | +biometric-protected key, using the platform biometrics API (`local_auth`). No |
| 80 | +biometric data is accessed or stored by the App itself — this is handled |
| 81 | +entirely by the operating system. |
| 82 | + |
| 83 | +--- |
| 84 | + |
| 85 | +## 6. Backups and Exports |
| 86 | + |
| 87 | +If you enable **auto-export backups**, the App writes a `.classi-backup` file to |
| 88 | +a folder you select on your device. This file is a portable, encrypted copy of |
| 89 | +your library. It remains on your device; we have no access to it. |
| 90 | + |
| 91 | +You are responsible for the security of any backup files you store, share, or |
| 92 | +transfer (e.g. via cloud storage, e-mail, or USB). |
| 93 | + |
| 94 | +--- |
| 95 | + |
| 96 | +## 7. Permissions |
| 97 | + |
| 98 | +The App requests only the permissions necessary to function: |
| 99 | + |
| 100 | +| Permission | Purpose | |
| 101 | +|---|---| |
| 102 | +| **Storage / Files (READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE on Android 10 and lower)** | Reading and writing the `.classi` library folder and backup files you choose | |
| 103 | +| **Biometric / Fingerprint (USE_BIOMETRIC, USE_FINGERPRINT)** | Optional biometric unlock; only requested if you enable the feature | |
| 104 | + |
| 105 | +No other device permissions are required or requested. |
| 106 | + |
| 107 | +--- |
| 108 | + |
| 109 | +## 8. Children's Privacy |
| 110 | + |
| 111 | +Classi is a tool **for teachers**, not for use directly by children. Although |
| 112 | +teachers may enter student names and academic records, these records are stored |
| 113 | +locally on the teacher's device and are never transmitted. We do not knowingly |
| 114 | +collect any data from individuals under the age of 13 through the App. |
| 115 | + |
| 116 | +--- |
| 117 | + |
| 118 | +## 9. Data Retention and Deletion |
| 119 | + |
| 120 | +Because all data is stored on your device, you are in full control of retention: |
| 121 | + |
| 122 | +- **Deleting a library:** Remove the `.classi` folder from your device to |
| 123 | + permanently erase all data. |
| 124 | +- **Uninstalling the App:** Uninstalling the App removes app-private data. If |
| 125 | + you stored your library in shared storage (recommended), the `.classi` folder |
| 126 | + will remain until you manually delete it. |
| 127 | +- **Secure storage:** Passphrase entries in the OS secure keystore are removed |
| 128 | + when you uninstall the App on most Android versions. |
| 129 | + |
| 130 | +--- |
| 131 | + |
| 132 | +## 10. Third-Party Libraries |
| 133 | + |
| 134 | +Classi uses open-source Flutter packages to deliver its functionality. The |
| 135 | +libraries listed below run entirely on-device and do not transmit data: |
| 136 | + |
| 137 | +| Package | Purpose | |
| 138 | +|---|---| |
| 139 | +| `drift` / `sqlite3mc` | Encrypted local database | |
| 140 | +| `flutter_secure_storage` | Secure keystore access | |
| 141 | +| `local_auth` | Biometric unlock | |
| 142 | +| `file_picker` | Folder and file selection dialogs | |
| 143 | +| `easy_localization` | UI translations (English and German) | |
| 144 | +| `go_router` | In-app navigation | |
| 145 | +| `fl_chart` | Grade history charts | |
| 146 | +| `avatar_maker` | Student avatar creation | |
| 147 | + |
| 148 | +None of these libraries collect or transmit personal data. |
| 149 | + |
| 150 | +--- |
| 151 | + |
| 152 | +## 11. Changes to This Policy |
| 153 | + |
| 154 | +We may update this Privacy Policy from time to time. When we do, we will update |
| 155 | +the **"Last updated"** date at the top of this document and publish the new |
| 156 | +version in the repository. Continued use of the App after an update constitutes |
| 157 | +acceptance of the revised policy. |
| 158 | + |
| 159 | +--- |
| 160 | + |
| 161 | +## 12. Contact |
| 162 | + |
| 163 | +If you have questions, concerns, or requests related to this Privacy Policy, |
| 164 | +please open an issue on our GitHub repository: |
| 165 | + |
| 166 | +<https://github.com/openpatch/classi/issues> |
| 167 | + |
| 168 | +--- |
| 169 | + |
| 170 | +*Classi is open-source software released under the |
| 171 | +[MIT License](LICENSE).* |
0 commit comments