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 ( -
-

Privacy Policy

-

Last updated: March 29, 2026

- -

1. Information We Collect

-

Task Team collects the following information when you create an account:

- -

We also collect task data, goals, and settings you create within the app.

+
+

Privacy Policy - Task Team

+

Last updated: March 30, 2026

-

2. How We Use Your Data

-

Your data is used exclusively to provide the Task Team service:

- +

Data We Collect

+

Account info (name, email), task data, GPS location (optional), audio for voice-to-text (optional).

-

3. Data Storage

-

Your data is stored on secure servers in the European Union (Hetzner, Germany). We use PostgreSQL databases with encrypted connections and regular backups.

+

How We Use It

+

Task management, sync across devices, reminders, GPS auto-verify task completion.

-

4. Third-Party Services

- +

Data Storage

+

Your data is stored on secure servers in the European Union (Hetzner Cloud, Germany). We use PostgreSQL databases with encrypted connections and regular backups.

-

5. Data Sharing

-

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.

+

Data Sharing

+

We do NOT sell data. Services used: Hetzner Cloud Germany, Anthropic Claude AI.

-

6. Your Rights (GDPR)

-

You have the right to:

- +

Your Rights (GDPR)

+

You have the right to access, correct, and delete your data. Contact: privacy@it-enterprise.cz

-

7. Contact

-

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.

+

Permissions

+

Location and microphone are optional, revocable anytime in your device settings.

+ +

Children

+

Not directed to children under 13.

+ +

Contact

+

IT Enterprise s.r.o. | privacy@it-enterprise.cz | tasks.hasdo.info

+ +

© 2026 IT Enterprise s.r.o. All rights reserved.

); } diff --git a/apps/tasks/app/settings/page.tsx b/apps/tasks/app/settings/page.tsx index e784c87..dc0e7f3 100644 --- a/apps/tasks/app/settings/page.tsx +++ b/apps/tasks/app/settings/page.tsx @@ -217,6 +217,21 @@ export default function SettingsPage() {

{t("common.appName")} {t("common.appVersion")}

+ +
+

Smazat ucet

+

Trvale smazat ucet a vsechna data. Tuto akci nelze vratit.

+ +
); }