diff --git a/android/store-assets/feature-graphic.png b/android/store-assets/feature-graphic.png new file mode 100644 index 0000000..2e7de5d Binary files /dev/null and b/android/store-assets/feature-graphic.png differ diff --git a/android/store-assets/icon-512.png b/android/store-assets/icon-512.png new file mode 100644 index 0000000..6483e8a Binary files /dev/null and b/android/store-assets/icon-512.png differ diff --git a/android/store-assets/screenshot-1.png b/android/store-assets/screenshot-1.png new file mode 100644 index 0000000..9d05417 Binary files /dev/null and b/android/store-assets/screenshot-1.png differ diff --git a/api/src/routes/auth.js b/api/src/routes/auth.js index 93ebafb..4846339 100644 --- a/api/src/routes/auth.js +++ b/api/src/routes/auth.js @@ -101,6 +101,18 @@ async function authRoutes(app) { return { status: 'not_implemented', message: 'WebAuthn biometric auth coming soon.' }; }); + // Delete account + app.delete('/auth/account', { preHandler: [async (req) => { await req.jwtVerify(); }] }, async (req, reply) => { + const uid = req.user.id; + await app.db.query('DELETE FROM task_assignments WHERE user_id=$1 OR assigned_by=$1', [uid]); + await app.db.query('DELETE FROM tasks WHERE user_id=$1', [uid]); + await app.db.query('DELETE FROM task_groups WHERE user_id=$1', [uid]); + await app.db.query('DELETE FROM goals WHERE user_id=$1', [uid]); + await app.db.query('DELETE FROM sessions WHERE user_id=$1', [uid]); + await app.db.query('DELETE FROM users WHERE id=$1', [uid]); + return reply.send({ data: { deleted: true } }); + }); + // OAuth initiate routes moved to ./oauth.js // Search users by name or email (for collaboration) @@ -117,3 +129,22 @@ async function authRoutes(app) { } module.exports = authRoutes; + +// Delete account (GDPR + Google Play requirement) +app.delete("/auth/delete-account", { preHandler: [async (req) => { await req.jwtVerify(); }] }, async (req) => { + const userId = req.user.id; + + // Delete all user data in order (foreign keys) + await app.db.query("DELETE FROM task_comments WHERE user_id = $1", [userId]); + await app.db.query("DELETE FROM subtasks WHERE assigned_to = $1", [userId]); + await app.db.query("DELETE FROM task_collaboration WHERE from_user_id = $1 OR to_user_id = $1", [userId]); + await app.db.query("DELETE FROM task_assignments WHERE user_id = $1", [userId]); + await app.db.query("DELETE FROM push_subscriptions WHERE user_id = $1", [userId]); + await app.db.query("DELETE FROM goals WHERE user_id = $1", [userId]); + await app.db.query("DELETE FROM connectors WHERE user_id = $1", [userId]); + await app.db.query("DELETE FROM tasks WHERE user_id = $1", [userId]); + await app.db.query("DELETE FROM task_groups WHERE user_id = $1", [userId]); + await app.db.query("DELETE FROM users WHERE id = $1", [userId]); + + return { status: "deleted", message: "Account and all data permanently deleted" }; +}); diff --git a/apps/tasks/app/privacy/page.tsx b/apps/tasks/app/privacy/page.tsx index a498d18..d441e1f 100644 --- a/apps/tasks/app/privacy/page.tsx +++ b/apps/tasks/app/privacy/page.tsx @@ -1,54 +1,34 @@ export default function PrivacyPage() { return ( -
Last updated: March 29, 2026
- -Task Team collects the following information when you create an account:
-We also collect task data, goals, and settings you create within the app.
+Last updated: March 30, 2026
-Your data is used exclusively to provide the Task Team service:
-Account info (name, email), task data, GPS location (optional), audio for voice-to-text (optional).
-Your data is stored on secure servers in the European Union (Hetzner, Germany). We use PostgreSQL databases with encrypted connections and regular backups.
+Task management, sync across devices, reminders, GPS auto-verify task completion.
-Your data is stored on secure servers in the European Union (Hetzner Cloud, Germany). We use PostgreSQL databases with encrypted connections and regular backups.
-We do not sell, trade, or share your personal data with third parties. Data is only shared with team members you explicitly invite to collaborate.
+We do NOT sell data. Services used: Hetzner Cloud Germany, Anthropic Claude AI.
-You have the right to:
-You have the right to access, correct, and delete your data. Contact: privacy@it-enterprise.cz
-IT Enterprise Solution s.r.o.
Email: apps@it-enterprise.cz
Web: https://it-enterprise.cz
© 2026 IT Enterprise Solution s.r.o. All rights reserved.
+Location and microphone are optional, revocable anytime in your device settings.
+ +Not directed to children under 13.
+ +IT Enterprise s.r.o. | privacy@it-enterprise.cz | tasks.hasdo.info
+ +© 2026 IT Enterprise s.r.o. All rights reserved.
{t("common.appName")} {t("common.appVersion")}
Trvale smazat ucet a vsechna data. Tuto akci nelze vratit.
+ +