native-update 1.4.9 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/Readme.md +35 -9
  2. package/android/manifest-additions.xml +28 -0
  3. package/android/src/main/AndroidManifest.xml +3 -7
  4. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundNotificationManager.kt +21 -13
  5. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdatePlugin.kt +15 -0
  6. package/android/src/main/java/com/aoneahsan/nativeupdate/BackgroundUpdateWorker.kt +23 -7
  7. package/android/src/main/java/com/aoneahsan/nativeupdate/LiveUpdatePlugin.kt +346 -31
  8. package/android/src/main/java/com/aoneahsan/nativeupdate/NativeUpdatePlugin.kt +32 -34
  9. package/android/src/main/java/com/aoneahsan/nativeupdate/NotificationActionReceiver.kt +10 -1
  10. package/android/src/main/java/com/aoneahsan/nativeupdate/SecurityManager.kt +18 -18
  11. package/cli/AGENTS.md +43 -0
  12. package/cli/CLAUDE.md +65 -0
  13. package/cli/commands/backend-create.js +56 -15
  14. package/cli/commands/bundle-create.js +39 -7
  15. package/cli/commands/monitor.js +72 -51
  16. package/cli/index.js +10 -24
  17. package/cli/package.json +11 -3
  18. package/dist/esm/app-review/app-review-manager.js +0 -1
  19. package/dist/esm/app-review/index.js +0 -1
  20. package/dist/esm/app-review/platform-review-handler.js +0 -1
  21. package/dist/esm/app-review/review-conditions-checker.js +0 -1
  22. package/dist/esm/app-review/review-rate-limiter.js +0 -1
  23. package/dist/esm/app-review/types.js +0 -1
  24. package/dist/esm/app-update/app-update-checker.js +0 -1
  25. package/dist/esm/app-update/app-update-installer.d.ts +1 -0
  26. package/dist/esm/app-update/app-update-installer.js +19 -8
  27. package/dist/esm/app-update/app-update-manager.js +0 -1
  28. package/dist/esm/app-update/app-update-notifier.js +0 -1
  29. package/dist/esm/app-update/index.js +0 -1
  30. package/dist/esm/app-update/platform-app-update.js +12 -3
  31. package/dist/esm/app-update/types.js +0 -1
  32. package/dist/esm/background-update/background-scheduler.js +0 -1
  33. package/dist/esm/background-update/index.js +0 -1
  34. package/dist/esm/background-update/notification-manager.js +0 -1
  35. package/dist/esm/config/support.js +0 -1
  36. package/dist/esm/core/analytics.d.ts +13 -0
  37. package/dist/esm/core/analytics.js +15 -1
  38. package/dist/esm/core/cache-manager.js +0 -1
  39. package/dist/esm/core/config.d.ts +6 -30
  40. package/dist/esm/core/config.js +1 -8
  41. package/dist/esm/core/errors.d.ts +1 -0
  42. package/dist/esm/core/errors.js +1 -1
  43. package/dist/esm/core/event-emitter.d.ts +0 -3
  44. package/dist/esm/core/event-emitter.js +8 -3
  45. package/dist/esm/core/logger.js +0 -1
  46. package/dist/esm/core/performance.js +0 -1
  47. package/dist/esm/core/plugin-manager.js +3 -1
  48. package/dist/esm/core/security.d.ts +22 -3
  49. package/dist/esm/core/security.js +46 -7
  50. package/dist/esm/definitions.d.ts +13 -40
  51. package/dist/esm/definitions.js +0 -1
  52. package/dist/esm/index.d.ts +3 -4
  53. package/dist/esm/index.js +3 -3
  54. package/dist/esm/live-update/bundle-manager.d.ts +8 -0
  55. package/dist/esm/live-update/bundle-manager.js +20 -1
  56. package/dist/esm/live-update/certificate-pinning.js +0 -1
  57. package/dist/esm/live-update/delta-processor.d.ts +1 -1
  58. package/dist/esm/live-update/delta-processor.js +3 -1
  59. package/dist/esm/live-update/download-manager.d.ts +36 -5
  60. package/dist/esm/live-update/download-manager.js +70 -24
  61. package/dist/esm/live-update/rollout-checker.d.ts +1 -1
  62. package/dist/esm/live-update/rollout-checker.js +5 -6
  63. package/dist/esm/live-update/update-manager.d.ts +12 -1
  64. package/dist/esm/live-update/update-manager.js +38 -11
  65. package/dist/esm/live-update/version-manager.d.ts +9 -12
  66. package/dist/esm/live-update/version-manager.js +40 -68
  67. package/dist/esm/plugin.js +82 -89
  68. package/dist/esm/security/crypto.js +11 -7
  69. package/dist/esm/security/validator.js +0 -1
  70. package/dist/esm/types/rollout.d.ts +85 -0
  71. package/dist/esm/types/rollout.js +25 -0
  72. package/dist/esm/web.d.ts +26 -1
  73. package/dist/esm/web.js +214 -75
  74. package/dist/plugin.cjs.js +1 -2
  75. package/dist/plugin.esm.js +1 -2
  76. package/dist/plugin.js +2 -3
  77. package/docs/AGENTS.md +38 -0
  78. package/docs/CHANGELOG.md +275 -0
  79. package/docs/CLAUDE.md +101 -0
  80. package/docs/MANUAL-TASKS.md +17 -0
  81. package/docs/MARKETING_WEBSITE_TRACKER.md +18 -2
  82. package/docs/MIGRATION.md +170 -0
  83. package/docs/PACKAGES.md +167 -0
  84. package/docs/PERFORMANCE.md +110 -0
  85. package/docs/PROJECT_COMPLETION_TRACKER.md +4 -35
  86. package/docs/README.md +12 -2
  87. package/docs/REMAINING_FEATURES.md +123 -76
  88. package/docs/ROADMAP.md +200 -120
  89. package/docs/SECURITY-IF-REPO-PUBLIC.md +232 -0
  90. package/docs/TESTING_REQUIREMENTS.md +1 -112
  91. package/docs/ai-knowledge-base/00-project-profile.md +38 -0
  92. package/docs/ai-knowledge-base/01-features.md +46 -0
  93. package/docs/ai-knowledge-base/02-routes.md +72 -0
  94. package/docs/ai-knowledge-base/03-tech-stack.md +57 -0
  95. package/docs/ai-knowledge-base/README.md +23 -0
  96. package/docs/analytics-tracking.md +37 -0
  97. package/docs/capacitor-official-plugins.md +46 -0
  98. package/docs/capawesome-plugins.md +29 -0
  99. package/docs/deployment/HOSTINGER_DEPLOY.md +370 -0
  100. package/docs/deployment/PRODUCTION-DEPLOY-CHECKLIST.md +184 -0
  101. package/docs/docs-site/plan.md +201 -0
  102. package/docs/docs-site/scope.md +127 -0
  103. package/docs/docs-site/tracker.json +235 -0
  104. package/docs/error-handling-tracking.md +37 -0
  105. package/docs/features/laravel-nova-backend/ASSESSMENT-SUMMARY.md +96 -0
  106. package/docs/features/laravel-nova-backend/IMPLEMENTATION-PLAN.md +504 -0
  107. package/docs/features/laravel-nova-backend/progress-tracker.json +184 -0
  108. package/docs/guides/testing-guide.md +15 -41
  109. package/docs/package-audit.md +41 -0
  110. package/docs/play-store/ASO-METADATA.md +5 -0
  111. package/docs/play-store/DATA-SAFETY.md +5 -0
  112. package/docs/play-store/DECLARATIONS.md +5 -0
  113. package/docs/play-store/README.md +27 -0
  114. package/docs/play-store/RELEASE-NOTES.md +99 -0
  115. package/docs/play-store/RELEASE-STEPS.md +6 -0
  116. package/docs/play-store/STORE-LISTING.md +7 -0
  117. package/docs/play-store/SUBMISSION-CHECKLIST.md +5 -0
  118. package/docs/production-readiness.md +1 -1
  119. package/docs/project-audit/2026-05-16/00-FINALIZATION-PLAN.md +123 -0
  120. package/docs/project-audit/2026-05-16/01-BATCH-PLAN.md +227 -0
  121. package/docs/project-audit/2026-05-16/02-AUDIT-FINDINGS.md +144 -0
  122. package/docs/project-audit/2026-05-16/sessions/batch-01.md +42 -0
  123. package/docs/project-audit/2026-05-16/sessions/batch-02.md +74 -0
  124. package/docs/project-audit/2026-05-16/sessions/batch-03.md +71 -0
  125. package/docs/project-audit/2026-05-16/sessions/batch-04.md +88 -0
  126. package/docs/project-audit/2026-05-16/sessions/batch-05.md +63 -0
  127. package/docs/project-audit/2026-05-16/sessions/batch-06.md +103 -0
  128. package/docs/project-audit/2026-05-16/sessions/batch-07.md +61 -0
  129. package/docs/project-audit/2026-05-16/sessions/batch-08.md +101 -0
  130. package/docs/project-audit/2026-05-16/sessions/batch-09.md +105 -0
  131. package/docs/project-audit/2026-05-16/sessions/batch-10.md +102 -0
  132. package/docs/project-audit/AUDIT-HISTORY.md +74 -0
  133. package/docs/project-audit/BATCH-PLAN.md +168 -0
  134. package/docs/project-audit/MARKETING-WEBSITE-FINDINGS-2026-05-11.md +73 -0
  135. package/docs/project-audit/PRODUCTION-READINESS-AUDIT-2026-05-08.md +275 -0
  136. package/docs/project-finalization/00-tracker.json +60 -0
  137. package/docs/project-knowledge-base/01-system-overview.md +227 -0
  138. package/docs/project-knowledge-base/02-routes-pages-forms-users.md +352 -0
  139. package/docs/project-knowledge-base/03-tech-stack-modules-services.md +379 -0
  140. package/docs/project-knowledge-base/04-data-models-integrations.md +244 -0
  141. package/docs/project-knowledge-base/05-docs-corpus-inventory.md +256 -0
  142. package/docs/project-knowledge-base/06-operations-testing-legal-content.md +208 -0
  143. package/docs/project-knowledge-base/README.md +103 -0
  144. package/docs/project-profiles/native-update-capacitor-update-platform-project-profile-last-updated-2026-05-19.md +81 -0
  145. package/docs/rules-tracker.md +102 -0
  146. package/docs/security/PRE-LAUNCH-PENTEST-CHECKLIST.md +116 -0
  147. package/docs/seo-aeo-rules.json +3043 -0
  148. package/docs/social-media-marketing/README.md +81 -0
  149. package/docs/social-media-marketing/posts-batch-01.md +613 -0
  150. package/docs/social-media-marketing/posts-batch-02.md +528 -0
  151. package/docs/social-media-marketing/whatsapp-messages-batch-01.md +458 -0
  152. package/docs/social-media-marketing/whatsapp-status-batch-01.md +355 -0
  153. package/docs/tracking/finalization-2026-05-16-tracker.json +346 -0
  154. package/docs/tracking/full-audit-tracker.json +121 -0
  155. package/docs/tracking/production-readiness-audit-tracker.json +429 -0
  156. package/docs/tracking/seo-checklist-tracker.json +333 -0
  157. package/ios/Plugin/BackgroundUpdate/BackgroundUpdatePlugin.swift +66 -9
  158. package/ios/Plugin/LiveUpdate/LiveUpdatePlugin.swift +306 -52
  159. package/ios/Plugin/NativeUpdatePlugin.swift +22 -9
  160. package/ios/Plugin/Security/SecurityManager.swift +13 -14
  161. package/package.json +37 -38
  162. package/cli/node_modules/.yarn-integrity +0 -16
  163. package/cli/node_modules/commander/LICENSE +0 -22
  164. package/cli/node_modules/commander/Readme.md +0 -1148
  165. package/cli/node_modules/commander/esm.mjs +0 -16
  166. package/cli/node_modules/commander/index.js +0 -26
  167. package/cli/node_modules/commander/lib/argument.js +0 -145
  168. package/cli/node_modules/commander/lib/command.js +0 -2179
  169. package/cli/node_modules/commander/lib/error.js +0 -43
  170. package/cli/node_modules/commander/lib/help.js +0 -462
  171. package/cli/node_modules/commander/lib/option.js +0 -329
  172. package/cli/node_modules/commander/lib/suggestSimilar.js +0 -100
  173. package/cli/node_modules/commander/package-support.json +0 -16
  174. package/cli/node_modules/commander/package.json +0 -80
  175. package/cli/node_modules/commander/typings/esm.d.mts +0 -3
  176. package/cli/node_modules/commander/typings/index.d.ts +0 -884
  177. package/cli/yarn.lock +0 -8
  178. package/dist/esm/__tests__/bundle-manager.test.d.ts +0 -1
  179. package/dist/esm/__tests__/bundle-manager.test.js +0 -151
  180. package/dist/esm/__tests__/bundle-manager.test.js.map +0 -1
  181. package/dist/esm/__tests__/config.test.d.ts +0 -1
  182. package/dist/esm/__tests__/config.test.js +0 -70
  183. package/dist/esm/__tests__/config.test.js.map +0 -1
  184. package/dist/esm/__tests__/delta-processor.test.d.ts +0 -1
  185. package/dist/esm/__tests__/delta-processor.test.js +0 -77
  186. package/dist/esm/__tests__/delta-processor.test.js.map +0 -1
  187. package/dist/esm/__tests__/firestore-schema.test.d.ts +0 -1
  188. package/dist/esm/__tests__/firestore-schema.test.js +0 -74
  189. package/dist/esm/__tests__/firestore-schema.test.js.map +0 -1
  190. package/dist/esm/__tests__/integration.test.d.ts +0 -1
  191. package/dist/esm/__tests__/integration.test.js +0 -78
  192. package/dist/esm/__tests__/integration.test.js.map +0 -1
  193. package/dist/esm/__tests__/manifest-reader.test.d.ts +0 -1
  194. package/dist/esm/__tests__/manifest-reader.test.js +0 -271
  195. package/dist/esm/__tests__/manifest-reader.test.js.map +0 -1
  196. package/dist/esm/__tests__/rollout-checker.test.d.ts +0 -1
  197. package/dist/esm/__tests__/rollout-checker.test.js +0 -210
  198. package/dist/esm/__tests__/rollout-checker.test.js.map +0 -1
  199. package/dist/esm/__tests__/security.test.d.ts +0 -1
  200. package/dist/esm/__tests__/security.test.js +0 -54
  201. package/dist/esm/__tests__/security.test.js.map +0 -1
  202. package/dist/esm/__tests__/version-manager.test.d.ts +0 -1
  203. package/dist/esm/__tests__/version-manager.test.js +0 -45
  204. package/dist/esm/__tests__/version-manager.test.js.map +0 -1
  205. package/dist/esm/app-review/app-review-manager.js.map +0 -1
  206. package/dist/esm/app-review/index.js.map +0 -1
  207. package/dist/esm/app-review/platform-review-handler.js.map +0 -1
  208. package/dist/esm/app-review/review-conditions-checker.js.map +0 -1
  209. package/dist/esm/app-review/review-rate-limiter.js.map +0 -1
  210. package/dist/esm/app-review/types.js.map +0 -1
  211. package/dist/esm/app-update/app-update-checker.js.map +0 -1
  212. package/dist/esm/app-update/app-update-installer.js.map +0 -1
  213. package/dist/esm/app-update/app-update-manager.js.map +0 -1
  214. package/dist/esm/app-update/app-update-notifier.js.map +0 -1
  215. package/dist/esm/app-update/index.js.map +0 -1
  216. package/dist/esm/app-update/platform-app-update.js.map +0 -1
  217. package/dist/esm/app-update/types.js.map +0 -1
  218. package/dist/esm/background-update/background-scheduler.js.map +0 -1
  219. package/dist/esm/background-update/index.js.map +0 -1
  220. package/dist/esm/background-update/notification-manager.js.map +0 -1
  221. package/dist/esm/config/support.js.map +0 -1
  222. package/dist/esm/core/analytics.js.map +0 -1
  223. package/dist/esm/core/cache-manager.js.map +0 -1
  224. package/dist/esm/core/config.js.map +0 -1
  225. package/dist/esm/core/errors.js.map +0 -1
  226. package/dist/esm/core/event-emitter.js.map +0 -1
  227. package/dist/esm/core/logger.js.map +0 -1
  228. package/dist/esm/core/performance.js.map +0 -1
  229. package/dist/esm/core/plugin-manager.js.map +0 -1
  230. package/dist/esm/core/security.js.map +0 -1
  231. package/dist/esm/definitions.js.map +0 -1
  232. package/dist/esm/firestore/firestore-client.d.ts +0 -109
  233. package/dist/esm/firestore/firestore-client.js +0 -264
  234. package/dist/esm/firestore/firestore-client.js.map +0 -1
  235. package/dist/esm/firestore/index.d.ts +0 -11
  236. package/dist/esm/firestore/index.js +0 -11
  237. package/dist/esm/firestore/index.js.map +0 -1
  238. package/dist/esm/firestore/manifest-reader.d.ts +0 -87
  239. package/dist/esm/firestore/manifest-reader.js +0 -294
  240. package/dist/esm/firestore/manifest-reader.js.map +0 -1
  241. package/dist/esm/firestore/schema.d.ts +0 -507
  242. package/dist/esm/firestore/schema.js +0 -73
  243. package/dist/esm/firestore/schema.js.map +0 -1
  244. package/dist/esm/index.js.map +0 -1
  245. package/dist/esm/live-update/bundle-manager.js.map +0 -1
  246. package/dist/esm/live-update/certificate-pinning.js.map +0 -1
  247. package/dist/esm/live-update/delta-processor.js.map +0 -1
  248. package/dist/esm/live-update/download-manager.js.map +0 -1
  249. package/dist/esm/live-update/rollout-checker.js.map +0 -1
  250. package/dist/esm/live-update/update-manager.js.map +0 -1
  251. package/dist/esm/live-update/version-manager.js.map +0 -1
  252. package/dist/esm/plugin.js.map +0 -1
  253. package/dist/esm/security/crypto.js.map +0 -1
  254. package/dist/esm/security/validator.js.map +0 -1
  255. package/dist/esm/web.js.map +0 -1
  256. package/dist/plugin.cjs.js.map +0 -1
  257. package/dist/plugin.esm.js.map +0 -1
  258. package/dist/plugin.js.map +0 -1
  259. package/docs/FIREBASE_INTEGRATION_TRACKER.md +0 -321
  260. package/docs/FIREBASE_QUERIES_AND_INDEXES_AUDIT.md +0 -221
  261. package/docs/examples/firebase-backend-example.md +0 -27
  262. package/docs/guides/no-cost-backend-implementation-plan.md +0 -77
  263. package/docs/guides/no-cost-firestore-google-drive-backend.md +0 -60
  264. package/docs/play-console-rejection-rules.json +0 -428
  265. /package/docs/{MARKETING_WEBSITE_PLAN.md → archive/MARKETING_WEBSITE_PLAN.md} +0 -0
@@ -0,0 +1,352 @@
1
+ # Native Update Routes, Pages, Forms, and Users
2
+
3
+ ## Metadata
4
+
5
+ - **Reference Date:** 2026-05-18
6
+ - **Last Updated:** 2026-05-18
7
+
8
+ ## Route Inventory
9
+
10
+ ### Public Marketing and Info Routes
11
+
12
+ | Route | Page | Access | Purpose |
13
+ |------|------|--------|---------|
14
+ | `/` | HomePage | Public | Main landing page and primary product pitch |
15
+ | `/features` | FeaturesPage | Public | Feature breakdown across OTA, app updates, and reviews |
16
+ | `/pricing` | PricingPage | Public | Pricing/beta/commercial positioning page |
17
+ | `/docs` | DocsPage | Public | Docs hub and guided docs entry |
18
+ | `/docs/*` | DocsMarkdownPage | Public | Render markdown docs pages from public docs set |
19
+ | `/examples` | ExamplesPage | Public | Code snippets + sample-app links |
20
+ | `/about` | AboutPage | Public | Mission, project story, differentiators, creator profile |
21
+ | `/contact` | ContactPage | Public | Contact methods, support info, FAQ |
22
+ | `/privacy` | PrivacyPage | Public | Privacy policy |
23
+ | `/terms` | TermsPage | Public | Terms of service |
24
+ | `/data-deletion` | DataDeletionPage | Public | Data/account deletion policy |
25
+ | `/cookies` | CookiePolicyPage | Public | Cookie policy |
26
+ | `/security` | SecurityPage | Public | Security messaging and practices |
27
+ | `/sitemap` | SitemapPage | Public | Human-friendly route explorer/search |
28
+ | `/feed` | FeedPage | Public | Human-facing public content feed/search |
29
+
30
+ ### Auth Routes
31
+
32
+ | Route | Page | Access | Purpose |
33
+ |------|------|--------|---------|
34
+ | `/login` | LoginPage | Public | Sign in with Google (redirects to Laravel Socialite) |
35
+ | `/signup` | SignupPage | Public | Same OAuth flow as `/login`; account auto-created on first callback |
36
+ | `/auth/callback` | CallbackPage | Public | Receives the Sanctum token from Laravel's OAuth callback and persists it |
37
+ | `/oauth/google-drive/callback` | DriveCallbackPage | Public | Receives Drive OAuth code and posts it to the Laravel backend |
38
+
39
+ ### Protected Dashboard Routes
40
+
41
+ | Route | Page | Access | Purpose |
42
+ |------|------|--------|---------|
43
+ | `/dashboard` | DashboardOverview | Authenticated user | Main dashboard metrics and quick actions |
44
+ | `/dashboard/apps` | AppsPage | Authenticated user | Create, edit, delete, and browse owned apps |
45
+ | `/dashboard/apps/:appId` | AppDetailPage | Authenticated user | Per-app details, builds, channels, and rollout state |
46
+ | `/dashboard/builds` | BuildsPage | Authenticated user | Browse/filter builds |
47
+ | `/dashboard/builds/:buildId` | BuildDetailPage | Authenticated user | Detailed build record view |
48
+ | `/dashboard/upload` | UploadPage | Authenticated user | Publish ZIP bundle, write manifest |
49
+ | `/dashboard/drive` | GoogleDrivePage | Authenticated user | Connect/disconnect Drive and review storage footprint |
50
+ | `/dashboard/config` | ConfigPage | Authenticated user | Show recommended backend/config integration guidance |
51
+ | `/dashboard/settings` | SettingsPage | Authenticated user | Account preferences, account deletion |
52
+ | `/dashboard/rollouts` | RolloutsPage | Authenticated user | Manage rollout percentages and pause/resume rollouts |
53
+ | `/dashboard/analytics` | AnalyticsPage | Authenticated user | View aggregated update analytics |
54
+
55
+ ### Admin Routes (SPA)
56
+
57
+ | Route | Page | Access | Purpose |
58
+ |------|------|--------|---------|
59
+ | `/admin` | AdminOverview | `admin` or `super-admin` role | Admin overview metrics |
60
+ | `/admin/users` | AdminUsersPage | `admin` or `super-admin` role | Search/browse user accounts |
61
+ | `/admin/apps` | AdminAppsPage | `admin` or `super-admin` role | Search/browse all apps |
62
+ | `/admin/builds` | AdminBuildsPage | `admin` or `super-admin` role | Search/filter all builds |
63
+
64
+ ### Admin Routes (Nova)
65
+
66
+ Laravel Nova 5 lives at `/nova` on the backend host. Same MySQL store, separate UI. Resources include User, App, ApiKey, SigningKey, Build, Subscription, AnalyticsEvent. Custom Nova actions exist for rotating signing keys, promoting builds, etc.
67
+
68
+ ## Access and Guard Behavior
69
+
70
+ ### ProtectedRoute (SPA)
71
+
72
+ - Requires a Sanctum token stored in `@capacitor/preferences` (native) or `localStorage` (web)
73
+ - The 401-handling axios interceptor clears the token and event-broadcasts a logout, redirecting to `/login`
74
+ - Token is sent as a `Bearer` header on every `/api/dashboard/*` and `/api/admin/*` request
75
+
76
+ ### AdminRoute (SPA)
77
+
78
+ - Requires a Sanctum token AND the SPA-side cached `me.roles` to include `admin` or `super-admin`
79
+ - Backend enforcement: every Laravel admin route also carries `auth:sanctum` + `can:<permission>` middleware; an unauthorized request returns 403 regardless of SPA state
80
+
81
+ ### Backend gate model
82
+
83
+ - `auth:sanctum` middleware on `/api/dashboard/*` and `/api/admin/*`
84
+ - `can:<permission>` middleware on every dashboard/admin route (per-permission, not per-role)
85
+ - `Gate::before` returns `true` for any user with the `super-admin` role (full bypass)
86
+ - First sign-in assigns the `user` role; emails in `ADMIN_EMAILS` env auto-assign `super-admin`
87
+
88
+ ## User Types and Permissions
89
+
90
+ ### Public Visitor
91
+
92
+ - Can view product, docs, legal, sitemap, feed, and contact pages
93
+ - Cannot access dashboard or admin
94
+
95
+ ### Signed-In Product User
96
+
97
+ - Signs in via Google (Laravel Socialite redirect)
98
+ - has a MySQL `users` row keyed by `google_id`
99
+ - holds a Sanctum personal access token (default 7-day TTL, configurable via `SANCTUM_TOKEN_EXPIRATION`)
100
+ - carries the `user` role by default
101
+ - can manage their own apps/builds/settings
102
+ - can connect Google Drive (server-side OAuth — tokens encrypted at rest on the User row)
103
+
104
+ ### Admin User
105
+
106
+ - Same as signed-in user plus `admin` or `super-admin` role
107
+ - can access SPA admin pages and Nova admin
108
+ - super-admin bypasses every `can:` gate
109
+
110
+ ### App Runtime Consumer
111
+
112
+ - Uses plugin APIs and manifest endpoints
113
+ - authenticates with a per-app API key (separate `ValidateApiKey` middleware on `/api/v1/*`)
114
+ - not a website operator account
115
+
116
+ ## Page-Level Notes
117
+
118
+ ### HomePage
119
+
120
+ - Hero positioning: complete update solution for Capacitor
121
+ - Calls to action: get started, view docs
122
+ - Highlights three core pillars: OTA updates, native app updates, in-app reviews
123
+
124
+ ### FeaturesPage
125
+
126
+ - Feature cards for OTA, native app updates, and reviews
127
+ - Messaging includes delta updates, rollback, channels, encryption, analytics, priority levels, and rate limiting
128
+
129
+ ### AboutPage
130
+
131
+ - Includes project mission
132
+ - explains why project exists
133
+ - highlights open-source positioning
134
+ - includes creator profile and contact links
135
+
136
+ ### ContactPage
137
+
138
+ - No typed form submission flow
139
+ - Uses direct contact methods: email, WhatsApp, LinkedIn, portfolio, docs, NPM link
140
+ - Includes support-hour information and FAQ
141
+
142
+ ### DocsPage / DocsMarkdownPage
143
+
144
+ - DocsPage acts as a rich docs landing surface
145
+ - DocsMarkdownPage renders markdown docs pages from the public docs payload
146
+
147
+ ### ExamplesPage
148
+
149
+ - Hero + quick-start code snippets (OTA basic, React hook, background, app-store, self-hosted backend pattern)
150
+ - Two canonical example-app cards (React + Capacitor, Node.js + Express)
151
+
152
+ ### SitemapPage and FeedPage
153
+
154
+ - Search/filter style discovery experiences
155
+ - use Input fields for route/content lookup
156
+ - intended as human-friendly content navigation surfaces
157
+
158
+ ### DashboardOverview
159
+
160
+ - Shows owned app/build summary state
161
+ - includes CTA to upload first build
162
+
163
+ ### AppsPage
164
+
165
+ - Central app management page
166
+ - create/edit/delete dialog workflows (URL-state driven: `?formMode`, `?editId`, `?deleteId`)
167
+ - stores package id, description, platforms, and generates an API key on creation
168
+
169
+ ### AppDetailPage
170
+
171
+ - per-app management view
172
+ - shows builds and rollout state
173
+ - links to upload and rollout workflows
174
+
175
+ ### BuildsPage / BuildDetailPage
176
+
177
+ - list and inspect build history
178
+ - filter by app/channel/status/platform
179
+ - build detail includes upload time, uploader, duration, and release metadata
180
+
181
+ ### UploadPage
182
+
183
+ - Core publish UI
184
+ - requires Google Drive connection (server-side OAuth must be completed)
185
+ - multipart-POST ZIP to Laravel `/api/dashboard/apps/{app}/builds`
186
+ - Laravel computes SHA-256, signs with the app's signing key, stages in user's Drive, persists Build row in MySQL
187
+
188
+ ### GoogleDrivePage
189
+
190
+ - starts the Drive OAuth flow (`/api/dashboard/google-drive/auth-url` → full-window Google redirect → `/oauth/google-drive/callback` → POST code to backend)
191
+ - shows Drive connection status, connected email, folder list, file count, and total size
192
+
193
+ ### ConfigPage
194
+
195
+ - instructional/configuration surface
196
+ - presents the recommended path: dashboard publishes through the Laravel backend; plugin polls the Laravel manifest endpoint
197
+
198
+ ### SettingsPage
199
+
200
+ - account profile details
201
+ - preferences (`users.preferences` JSON column via `/api/dashboard/preferences`)
202
+ - appearance/theme controls
203
+ - account deletion confirmation flow (Sanctum tokens revoked, MySQL row soft-deleted, encrypted Drive tokens cleared)
204
+
205
+ ### RolloutsPage
206
+
207
+ - percentage controls
208
+ - pause/resume actions
209
+ - edit modal with numeric and range input
210
+ - rollout best practices guidance
211
+
212
+ ### AnalyticsPage
213
+
214
+ - filters by app and channel
215
+ - aggregates analytics data across time range from `analytics_events` table
216
+ - intended for download/install/error/rollback analysis
217
+
218
+ ### Admin Pages
219
+
220
+ - AdminOverview aggregates cross-system metrics
221
+ - AdminUsersPage supports user search/filtering
222
+ - AdminAppsPage supports app search/filtering
223
+ - AdminBuildsPage supports build search/filtering by multiple fields
224
+ - Full admin tooling (resource editors, custom actions) lives in Nova at `/nova`
225
+
226
+ ## Form and Input Inventory
227
+
228
+ ### LoginPage
229
+
230
+ - **Action:** Google sign-in button → SPA navigates to `${VITE_API_URL}/auth/google/redirect`
231
+ - **Inputs:** No text input fields
232
+ - **Errors handled:** popup blocked (unlikely with full-window redirect), generic OAuth failure displayed on `/auth/callback`
233
+
234
+ ### SignupPage
235
+
236
+ - **Action:** Same Google flow as LoginPage; backend auto-provisions the User row + assigns `user` role
237
+ - **Inputs:** No text input fields
238
+ - **Purpose:** fast account creation for beta onboarding
239
+
240
+ ### AppsPage Create/Edit App Dialog
241
+
242
+ - **Fields:**
243
+ - App name
244
+ - Package ID
245
+ - Description
246
+ - Platforms: Android, iOS, Web
247
+ - **Validation:**
248
+ - app name required, minimum length
249
+ - package ID required and regex-validated
250
+ - at least one platform required
251
+ - **Backend side effects on create (Laravel `AppController` + `UpdateBuildRequest`):**
252
+ - inserts row in `apps` table (RBAC-gated by `can:apps.create`)
253
+ - generates an API key, inserts row in `api_keys` table
254
+ - increments user `apps_count`
255
+
256
+ ### AppsPage Delete Dialog
257
+
258
+ - **Purpose:** destructive app deletion
259
+ - **Backend side effects:** soft-deletes app row, revokes related API keys, decrements user `apps_count`, optionally archives builds
260
+
261
+ ### UploadPage Publish Form
262
+
263
+ - **Fields:**
264
+ - file picker / drag-drop ZIP
265
+ - app select
266
+ - channel select
267
+ - platform select
268
+ - version input
269
+ - build number input
270
+ - release notes textarea
271
+ - **Validation (server-side `UpdateBuildRequest` FormRequest):**
272
+ - app_id required + ownership-checked
273
+ - version required + semver-validated
274
+ - build_number required + numeric
275
+ - ZIP file required + max-size enforced
276
+ - Drive connection required (backend rejects otherwise)
277
+ - **Flow:**
278
+ - browser multipart POST → Laravel `/api/dashboard/apps/{app}/builds`
279
+ - Laravel validates, computes SHA-256, signs with RSA-SHA256 using the app's signing key
280
+ - Laravel uploads the ZIP to the user's Drive folder (server-side OAuth tokens)
281
+ - Laravel writes the Build row, updates the App's active manifest pointer
282
+ - SPA navigates to app detail
283
+
284
+ ### SettingsPage Preferences
285
+
286
+ - **Fields:**
287
+ - email notifications toggle
288
+ - update notifications toggle
289
+ - theme select
290
+ - language select
291
+ - **Action:** PATCH `/api/dashboard/preferences` → updates `users.preferences` JSON column
292
+
293
+ ### SettingsPage Delete Account
294
+
295
+ - **Field:** confirmation input requiring exact `DELETE`
296
+ - **Action:** DELETE `/api/dashboard/me` → revokes Sanctum tokens, soft-deletes user row, clears encrypted Drive tokens, cascades to apps/builds
297
+
298
+ ### RolloutsPage Edit Modal
299
+
300
+ - **Fields:**
301
+ - rollout percentage numeric input
302
+ - rollout percentage range slider
303
+ - **Action:** PATCH `/api/dashboard/builds/{build}/rollout` → updates rollout config on the Build row
304
+
305
+ ### BuildsPage Filters
306
+
307
+ - search input
308
+ - app filter
309
+ - channel filter
310
+ - platform filter
311
+ - status filter
312
+ - URL-state driven (`?q=`, `?app=`, `?channel=`, `?platform=`, `?status=`, `?page=`)
313
+
314
+ ### AdminBuildsPage Filters
315
+
316
+ - search input
317
+ - app filter
318
+ - user filter
319
+ - channel/status/platform filters
320
+
321
+ ### AdminUsersPage Filters
322
+
323
+ - search input
324
+
325
+ ### AdminAppsPage Filters
326
+
327
+ - search input
328
+
329
+ ### FeedPage and SitemapPage
330
+
331
+ - search input for route/content discovery
332
+
333
+ ## Contact and Support Surfaces
334
+
335
+ ### ContactPage URLs
336
+
337
+ - `mailto:aoneahsan@gmail.com`
338
+ - `https://www.npmjs.com/package/native-update`
339
+ - `https://wa.me/923046619706`
340
+ - `https://linkedin.com/in/aoneahsan`
341
+ - `https://aoneahsan.com`
342
+ - internal docs link: `/docs`
343
+
344
+ ## Important UX and Product Notes
345
+
346
+ - Dashboard is clearly owner/operator tooling, not consumer UI
347
+ - Google sign-in is the only auth path
348
+ - Google Drive is central to the publishing workflow (server-side OAuth, not browser SDK)
349
+ - App creation is a prerequisite for upload
350
+ - Drive connection is a prerequisite for upload
351
+ - Rollouts are edited on the Build row, not from a separate dedicated rollout service
352
+ - All user-visible state that should survive refresh (modal open, edit/delete dialogs, filters, tabs) is encoded in URL search params via the shared `useUrlState` hooks