1. Plain-language summary
PromptBeat is a relay between your AI coding agent and your phone. For the relay to work, our server receives and stores the data it relays. This document is an inventory of what we collect, how long we keep it, which third parties handle it, and how to delete it.
The short version:
- The data the product needs to function (permission requests, chat messages, account, devices, API keys, audit log) is stored on a single VPS in Germany.
- Several third parties handle parts of the data flow as part of delivering the service: Hetzner (hosting), Firebase Cloud Messaging (push notifications), formsubmit.co (feedback form). The full list is in section 6.
- We may add third-party usage analytics (such as Google Analytics, or an equivalent) to understand how the product is used, what AI agents are popular, and what features get traction. We may publish aggregated, de-identified developer trends derived from that data.
- We may serve third-party advertising on the marketing site and/or inside the mobile apps to support ongoing development. Your individual account data, prompts, commands, and chat history are not passed to advertisers as part of that. If you choose to interact with an ad and submit information to the advertiser, that is your transaction with that advertiser.
- You can delete your data by deleting your account from the app or via the account deletion page.
- Optional end-to-end encryption keeps command contents as ciphertext on the server.
2. Who we are and where data lives
PromptBeat is operated by an individual developer based in India. The hosted service runs on a single Hetzner Cloud VPS located in Germany. Caddy serves as the reverse proxy, the application server is a Node.js / Express process, and SQLite (in WAL mode) holds the application data. There is no separate analytics database, log warehouse, or third-party telemetry pipeline.
3. Information we collect
3.1 Account information
- Email address — for sign-in, password recovery, and email verification (when you sign up with email).
- Display name — shown in the app to identify your account.
- Password — bcrypt-hashed (12 rounds). Plaintext passwords are not stored, logged, or transmitted. (Not applicable when you sign in via Google or Apple.)
- Google or Apple subject identifier — when you sign in with Google or Apple, we store the provider’s stable user identifier (the OpenID
sub) so we can recognise you on future sign-ins. We do not receive your Google/Apple password, contacts, calendar, drive, or any data outside the basic profile (sub, email, name) returned by the OpenID Connect flow.
3.2 Permission request data
When your AI agent makes a tool call, the hook on your laptop POSTs a permission request to our server. We store:
- Tool name (e.g.
Bash, Write, Edit).
- Tool input — the command, file path, or arguments the agent wants to execute. Stored in plaintext by default; ciphertext only if you enable end-to-end encryption.
- Session ID and chat session ID — group requests by AI session.
- Context — optional reasoning text the hook sends (last 5 lines from the agent).
- Status and decision — pending / approved / denied / expired, plus timestamps and the user who decided.
- Edits — if you used edit-before-approve, the modified command is stored alongside the original.
3.3 AI Chat data
If you start a Remote AI Chat session, we store:
- Chat messages — your prompts and the AI’s streaming responses, persisted in the
ai_chat_messages table while the session is alive.
- Session metadata — tool type (Claude Code / Codex / Gemini / Copilot CLI), working directory path, session name, status, timestamps.
- Tool calls fired during the chat — recorded as permission requests with the chat session ID attached, so the inline approval card can render in the right thread.
Chat messages remain in the database until you delete the session from the app or delete your account.
3.4 Devices and tokens
- Paired devices — device name, platform (iOS / Android), JWT secret per device, last-seen timestamp.
- FCM tokens — Firebase Cloud Messaging registration tokens used to deliver push notifications.
- API keys —
pb_-prefixed keys created by the laptop installer; only the SHA-256 hash is stored, plus a hostname tag and creation timestamp.
- Refresh tokens — rotated JWT refresh tokens, scoped per device, invalidated on password reset.
3.5 Audit log
An audit_log table records event-level summaries: which user took which action (approve, deny, edit, rule create, device pair, key revoke), when, and from which IP. The audit log is exposed in-app and exportable as CSV or JSON.
3.6 Network metadata (server access logs)
Caddy writes standard reverse-proxy access logs containing IP address, user-agent, method, path, status code, response time, and timestamp. These logs rotate and are not exported to any third-party log aggregator. We use them only for debugging and abuse mitigation.
3.7 Feedback form submissions
The feedback form on the home page submits to formsubmit.co, a third-party email-relay service that forwards the message to support@promptbeat.online. Form fields (name, email, message, rating) and your IP at submission time pass through formsubmit.co’s servers. The form is optional and only submits when you click Send.
3.8 Biometric data
Face ID, Touch ID, and device biometrics are processed entirely by the operating system on your phone. We never receive, transmit, or store biometric data.
3.9 Aggregate stats shown in-app
The Stats screen in the app shows you per-user aggregates — approval rate, average response time, tool breakdown, hourly chart. These numbers are computed server-side from your own permission records, scoped to your user ID, and shown only to you. They are not exported, shared, or used to profile users in aggregate.
4. Analytics and aggregated insights
The Stats screen in the app shows you per-user aggregates from your own permission records (approval rate, response time, tool breakdown, hourly chart). These are computed server-side, scoped to your user ID, and visible only to you.
Beyond that, we may add third-party usage analytics — for example Google Analytics on the marketing site, or an equivalent SDK inside the mobile apps — to understand which pages and features get used, where people drop off, what AI agents are most common, and similar product-development questions. If we do, this section will be updated with:
- The specific analytics provider(s) integrated.
- The categories of data they receive.
- Any consent or opt-out mechanisms required by applicable law (e.g. GDPR consent for EU/UK visitors, CPRA opt-out for California residents).
We may also derive aggregated, de-identified developer-trend insights from the data the product collects — for example, the share of users running each supported AI agent, the most common tool-call categories, average approval response time across the user base — and we may publish or share those aggregates externally (e.g. as blog content or trend reports). Aggregated trend data is built from counts and statistics, not from your individual prompts, commands, or chat content.
4a. Advertising and marketing partnerships
To support ongoing development, we may serve third-party advertising on the marketing site and/or inside the mobile apps, and we may run sponsored content or marketing partnerships with third parties. If we do:
- This section will be updated with the specific ad networks or partners involved (e.g. Google AdSense, Google AdMob, or equivalents) and what data each receives.
- Required consent and opt-out mechanisms will be implemented as applicable law requires (GDPR consent banner for EU/UK visitors, CPRA opt-out for California residents, AdMob limit-ad-tracking, etc.).
- Your individual account data, prompts, commands, and chat history are not passed to advertisers as part of serving ads. If you choose to click on an ad and submit information directly to the advertiser, that submission is a transaction between you and the advertiser, governed by their privacy policy.
- Optional end-to-end encryption (section 7) continues to keep command contents as ciphertext on the server, regardless of advertising configuration.
5. Retention
- Pending permission requests — auto-expire after 120 seconds.
- Completed permission requests — deleted 24 hours after the decision by default.
- Chat sessions and messages — retained until you delete the session or your account. Inactive sessions get a 30-minute timeout server-side that closes the PTY but keeps the message history.
- Audit log — retained for 90 days.
- API keys — retained until you revoke them or delete your account.
- Caddy access logs — rotated weekly; older rotations purged.
- Account data — retained until you delete your account; deletion is immediate and irrevocable.
- Database backups — daily encrypted snapshots, retained for 14 days.
6. Third-party processors
The full list of third parties that touch your data:
- Hetzner Online GmbH — provides the VPS the application runs on (Germany). Subject to Hetzner’s privacy policy.
- Google Firebase Cloud Messaging — delivers push notifications. Receives your FCM token and the notification body. Subject to Google’s privacy policy.
- Google Sign-In — if you choose to sign in with Google. The Google authentication flow happens on your device; we receive a signed ID token containing your Google subject identifier, email, and name (basic profile only). Subject to Google’s privacy policy.
- Sign in with Apple — if you choose to sign in with Apple. The Apple authentication flow happens on your device; we receive a signed ID token containing your Apple subject identifier, and (on first sign-in only) your email and name. You may opt to use Apple’s “Hide My Email” relay address. Subject to Apple’s privacy policy.
- formsubmit.co — relays feedback-form submissions to our support email. Receives the form fields and your IP at submission. Used only when you submit the feedback form.
- Apple App Store / Google Play — distribute the mobile app. Their store-side analytics on app installs and listing views are aggregated and not joinable to your account on our side.
That is the entire list. We do not use any other third-party SDKs, beacons, or backends.
7. Optional end-to-end encryption
PromptBeat supports optional end-to-end encryption of tool inputs using HMAC-CTR stream cipher with PBKDF2 key derivation (100,000 iterations, SHA-256). When enabled:
- Tool input is encrypted on your laptop before transmission.
- The server stores ciphertext only.
- Only your phone (sharing the same key) can decrypt.
- The audit log records the existence of the request and your decision but not the plaintext command.
This is opt-in via a shared key set in your shell environment and the app’s Security settings. It does not affect chat messages (which are still stored server-side for streaming relay).
8. Security measures
- HTTPS enforced via Caddy with Let’s Encrypt; HSTS headers in production.
- iOS and Android clients pin TLS to ISRG Roots X1 + X2 for promptbeat.online.
- Bcrypt password hashing (12 rounds); never logged or transmitted in plaintext.
- JWT tokens with refresh-token rotation, force-invalidated on password reset.
- API keys hashed at rest (SHA-256); plaintext shown once at creation.
- HMAC-SHA256-signed hook polling responses to prevent MITM forgery.
- Rate limiting on auth endpoints (10 logins / 15 min, 5 refreshes / minute).
- Account lockout after repeated failed logins.
- Constant-time bearer-token comparison.
- CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy headers.
9. Your rights
You can, from inside the app at any time:
- Access all your permission requests, chat sessions, audit log, devices, and API keys.
- Export the audit log as CSV or JSON.
- Delete individual chat sessions, individual API keys, individual paired devices.
- Delete your entire account — from Settings → Account, or via the public account deletion page. This removes account, devices, API keys, refresh tokens, permissions, chat sessions, audit-log entries, and webhook configurations. The action is permanent.
10. Children’s privacy
PromptBeat is a developer tool not intended for individuals under 13 (or the applicable age of consent in your jurisdiction). We do not knowingly collect personal information from children.
11. International data transfers
The application server is located in Germany, the European Union. Push notifications route through Google Firebase Cloud Messaging (multi-region, including the United States). Feedback-form submissions route through formsubmit.co (United States). If you use the service from outside the EU, your data is transferred to the EU.
12. Changes to this policy
We may update this policy. Material changes will be announced via an in-app notice or an email to your registered address before they take effect. The “Last updated” date at the top reflects the most recent revision.
13. Contact
Privacy questions, data-rights requests, or concerns: support@promptbeat.online. Replies typically come within a few days.