Privacy Policy
- Who We Are
- Information We Collect (incl. Collaboration Data, Unban Review Data, Abuse Monitoring Data, Marketplace Data)
- How We Use Your Information
- How We Store and Protect Your Data
- Docker Container Isolation
- Payments and Billing
- Cookies and Local Storage
- Data Sharing and Third Parties
- Data Retention
- Your Rights
- Children's Privacy
- Changes to This Policy
- Contact Us
1. Who We Are
Viirless ("Viirless", "we", "us", or "our") operates a Discord bot hosting platform available at viirless.net. The platform allows users to upload, deploy, and manage Discord bots running inside isolated Docker containers on our infrastructure.
This Privacy Policy explains what personal data we collect when you use the Viirless platform, how we use it, and what controls you have over it.
2. Information We Collect
2.1 Account Information
When you register an account, we collect:
- Username — the display name you choose
- Email address — used for login and account notices
- Password — stored as a bcrypt hash; we never store your plain-text password
- Account creation date and IP address — recorded for security and fraud prevention
2.2 Bot and Deployment Data
When you deploy a bot, we store:
- Bot source files — the ZIP archive or GitHub repository you upload, saved under a per-user directory on our server
- Environment variables — any key/value pairs you configure for your bot (e.g. your Discord bot token). These are stored in our database and injected into the container at runtime.
- Bot name and configuration — name, main entry file, runtime type (Node.js / Python / Go), memory and CPU limits
- Container logs — stdout/stderr output produced by your running bot, accessible to you in the dashboard
- Container status history — start/stop events and resource usage metrics
2.3 Subscription and Billing Data
- Plan subscription records — which plan you are on, when it started, when it expires, and whether auto-renew is enabled; or whether it is a permanent Lifetime Plan
- Stripe Customer ID — when you subscribe to a monthly recurring plan, we create a Stripe Customer object and store the resulting customer ID against your account so future subscription charges can be linked to your card on file. This ID is never shown to other users.
- Stripe Subscription ID — the identifier of your active recurring subscription in Stripe, used to process renewals, handle cancellations, and reconcile webhook events from Stripe.
- Token balance and purchase history — credits used to purchase upgrades, bot slots, and other platform features. Tokens are no longer used to pay for monthly plans.
- Extra bot slot records — when you purchase additional bot slots (with tokens or via Stripe), we record the package purchased, number of slots granted, tokens spent or amount paid, and timestamp. This record is retained for reconciliation purposes.
- Permanent resource addon records — when you purchase a permanent CPU, RAM, or storage addon for a bot (via Stripe), we record the bot ID, addon type, amount purchased, Stripe session ID, amount paid, and timestamp. The resulting resource floors are stored on the bot record permanently and persist through plan changes. These records are retained for a minimum of 7 years for financial record-keeping compliance.
- Monthly plan payment records — for real-money recurring plan payments processed by Stripe, we store the Stripe invoice ID, subscription ID, amount charged, and timestamp for reconciliation and audit purposes. These records are retained for a minimum of 7 years.
- Lifetime Plan purchase records — for real-money Lifetime Plan purchases made via Stripe, we store the Stripe session ID, plan purchased, amount paid, and timestamp. Retained for a minimum of 7 years.
- Stripe transaction identifiers — we store Stripe session, invoice, and subscription IDs to reconcile all purchases. Full card details are handled exclusively by Stripe and are never stored on Viirless servers.
2.4 Support Tickets
If you submit a support ticket, we store the ticket content and any follow-up messages you send so that our team can respond and track the issue.
2.5 Collaboration Data
When a bot owner invites another Viirless user as a collaborator, we store:
- Collaboration record — the bot ID, the owner's user ID, and the collaborator's user ID, along with the permission flags that were granted (edit files, view environment variables, start, stop, restart)
- Invitation timestamp — when the collaborator was added
Collaborators who are granted the "View Env" permission will be able to see the bot owner's environment variables (including any Discord bot token or API keys stored in that bot). This access is entirely at the discretion of the bot owner. Viirless is not responsible for what a bot owner chooses to share with their collaborators.
When a collaborator is removed, the collaboration record is deleted. The collaborator loses all access to the bot immediately. Any environment variable values they may have viewed prior to removal are no longer accessible through the platform.
2.6 AI Coding Assistant Data
If you choose to use the optional AI Coding Assistant feature, we collect and process the following additional data:
- Google Gemini API key — if you save a key in Profile → AI Coding Assistant, it is encrypted using AES-256-GCM before storage. The encryption key is held server-side in an environment variable and never stored alongside the encrypted value. Your plain-text API key is never logged, written to disk in plain text, or accessible to Viirless staff. You can reveal it (via password verification), replace it, or delete it at any time.
- AI chat sessions — the messages you send to the AI and the AI's replies are stored in our database, associated with your account and the relevant bot. This history exists so you can resume sessions across page refreshes. Sessions are visible only to you (and the bot owner, if you are a collaborator).
- Tool call results — when the AI reads, writes, or deletes files or environment variables on your behalf, the fact that these actions occurred is reflected in your session history. The content of modified files is not separately stored by Viirless beyond what exists in your bot's file directory.
Your chat messages are transmitted to Google's Generative AI API (generativelanguage.googleapis.com) using your own API key. This transmission is subject to Google's Generative AI Additional Terms of Service and Google's Privacy Policy. Viirless does not control how Google processes data submitted to its APIs.
We do not use your AI chat history for training, advertising, or any purpose other than displaying it back to you within the session interface.
2.7 Ban & Unban Review Data
If your account is banned and you submit an unban review request, we collect and store the following data in connection with that review:
- Ban record — the reason for the ban, the date it was issued, and the administrator user ID that applied it
- Review submission — the message you submit in support of your review request, the date and time of submission, and the current review status (pending, approved, or denied)
- Payment record — the Stripe Checkout Session ID associated with the review fee payment, the amount charged, and the payment timestamp. Full card details are handled exclusively by Stripe and are never stored on Viirless servers.
- Administrator decision — the outcome (approved or denied), any note left by the reviewing administrator, and the date the decision was made
This data is used solely to administer the ban appeal process and to maintain a record of enforcement decisions for audit and dispute resolution purposes. It is not used for advertising or shared with third parties except as required by law.
Our legal basis for processing unban review data is legitimate interests (Art. 6(1)(f) GDPR): maintaining secure, abuse-resistant enforcement processes and a reliable audit trail of disciplinary decisions.
2.8 Technical and Usage Data
We may automatically collect:
- IP addresses — at login and registration for security purposes
- Browser/device information — standard HTTP headers (user agent, referrer) for debugging
- API request logs — timestamps and endpoints accessed, retained briefly for operational monitoring
We do not use analytics trackers, advertising pixels, or fingerprinting scripts.
2.9 Egress IP Assignment & Abuse Monitoring Data
To protect platform integrity and prevent abuse of Discord's APIs, we collect and process the following additional data:
- Egress IP assignment — each bot is permanently assigned a dedicated outbound IP address from our IP pool. The assigned IP is stored in our database alongside your bot record. This assignment persists across container restarts and is only changed by an administrator action.
- Container bridge IP — when a bot container is running, we record the container's internal Docker bridge IP address. This is used to apply and remove outbound routing rules (iptables SNAT) that ensure your bot's traffic exits through its assigned public IP. This value is updated each time the container starts.
- Log position tracking — for each running container, we track the timestamp of the last log line we processed. This data is used solely to avoid re-scanning already-reviewed output and is overwritten each scan cycle.
- Abuse incident records — when our automated monitoring detects a pattern that indicates abusive behaviour (such as excessive Discord API rate-limit responses, WebSocket reconnect loops, or invalid-token loops), we create an abuse incident record. This record includes: the incident type, severity level, occurrence count, 15-minute window count, first detection timestamp, last detection timestamp, the bot ID, the bot's assigned egress IP, and the current status (active, resolved, or suspended). Incident records are retained as part of our enforcement audit trail.
- IP pool health data — aggregated counts of active incidents, rate-limit events, and suspended bots per egress IP are maintained to allow administrators to monitor the health of each outbound IP. This data is derived from incident records and is not separately stored beyond the underlying incident records.
Our legal basis for processing this data is legitimate interests (Art. 6(1)(f) GDPR): protecting the platform's relationship with Discord, preventing platform-wide rate-limiting incidents caused by individual abusive bots, and maintaining a reliable enforcement audit trail. This processing does not override your fundamental rights and freedoms — the data is used only for the operational purpose described and is not shared with third parties or used for profiling.
Log content (the actual text of your bot's output) is scanned in memory and is not separately stored or transmitted. Only pattern match counts and timestamps are recorded in the incident records.
2.10 Marketplace Data
When you use the Bot Template Marketplace, we collect and process the following additional data:
- Template metadata — title, description, category, runtime, price, and creator identity. Your username is displayed publicly on any approved template you publish.
- Template archive — the packaged bot files you submit for review. Environment variable keys and placeholder descriptions are stored; environment variable values are never stored in the template archive or made visible to buyers.
- Automated security scan flags — warnings generated by the platform's pre-submission scan (e.g. detection of suspicious code patterns). These are stored alongside the template record and shown to admins during review; they are not shared publicly.
- Approval records — the template's current status (pending, approved, denied, or disabled), any denial reason provided by an admin, and the admin user ID that reviewed the submission.
- Purchase records — when a user purchases a paid template, we record the template ID, buyer user ID, tokens spent, and timestamp.
- Ownership records — a record of which users own (have purchased or claimed) which templates, used to prevent duplicate charges and allow re-import without repurchasing.
- Import records — when you import a template into a bot or create a new bot from a template, we log the template ID, your user ID, the target bot ID, and the import type (existing bot or new bot).
- Download and purchase counters — aggregate counts displayed publicly on template listings to indicate popularity. These are not linked to individual user identities in the public display.
Your username is visible to other users on any approved marketplace template you publish. If you delete your account, your templates will be disabled or removed from the public marketplace. Template purchase and import records that are linked to other users' accounts may be retained in anonymised form as part of their transaction history.
Our legal basis for processing marketplace data is performance of a contract (Art. 6(1)(b) GDPR) for operating the marketplace features you participate in, and legitimate interests (Art. 6(1)(f) GDPR) for maintaining purchase statistics and audit trails for marketplace transactions.
3. How We Use Your Information
We use the data we collect for the following purposes:
- Providing the service — creating and managing your account, deploying and running your bots, applying the correct resource limits based on your plan
- Billing and subscriptions — processing token purchases, applying plan upgrades/downgrades, enforcing bot limits when a subscription expires, handling auto-renew
- Security & abuse prevention — detecting and preventing abuse, brute-force login attempts, unauthorised access, and Discord API abuse that could result in our infrastructure IPs being rate-limited or blocked by Discord
- Egress IP routing — applying outbound routing rules so each bot's traffic exits through its assigned public IP, ensuring per-bot isolation and accountability
- Support — responding to tickets and resolving technical issues with your bots
- Service communications — sending transactional emails such as account confirmation or billing notices (we do not send marketing email without your explicit consent)
- Platform improvements — using aggregate, anonymized usage data to improve reliability and performance
- Marketplace operations — processing template submissions, running automated security scans, administering the admin approval workflow, facilitating token purchases, tracking template ownership, and enabling template imports and new bot creation from templates
We do not use your data for advertising, profiling, or sale to third parties.
3.1 Legal Bases for Processing (GDPR Article 6)
Viirless is based in Denmark and processes personal data in accordance with the EU General Data Protection Regulation (GDPR) and the Danish Data Protection Act (Databeskyttelsesloven). For each category of data we process, our legal basis is:
- Account information & authentication — Performance of a contract (Art. 6(1)(b)): necessary to create and operate your account.
- Bot files, environment variables & container data — Performance of a contract (Art. 6(1)(b)): necessary to run the hosting service you signed up for.
- Billing & payment records — Performance of a contract (Art. 6(1)(b)) and Legal obligation (Art. 6(1)(c)): required to process payments and comply with Danish bookkeeping law (Bogføringsloven).
- Security logs & IP addresses — Legitimate interests (Art. 6(1)(f)): protecting the platform and its users from fraud and abuse.
- Support ticket content — Performance of a contract (Art. 6(1)(b)): necessary to resolve your support requests.
- Aggregate usage analytics — Legitimate interests (Art. 6(1)(f)): improving service reliability using anonymised data that does not identify you.
- Marketing communications — Consent (Art. 6(1)(a)): only where you have explicitly opted in. You may withdraw consent at any time.
4. How We Store and Protect Your Data
- Passwords are hashed with bcrypt before storage. The plain-text password is never written to disk or logs.
- API authentication uses short-lived JWT tokens (7-day expiry). Tokens are transmitted over HTTPS only.
- Database access is restricted to backend services on a private network. Direct external access is disabled.
- Bot files are stored in a per-user directory on the server filesystem with access restricted to the application process and the user's own container.
- Environment variables are stored encrypted-at-rest in the database and passed securely into containers at startup.
- Transport encryption — all traffic between your browser and our servers is encrypted via TLS/HTTPS.
No system is perfectly secure. While we take reasonable precautions, we cannot guarantee absolute security. We recommend you use a strong, unique password and never store sensitive secrets beyond what your bot needs to function.
5. Docker Container Isolation
Each bot runs in its own Docker container with enforced CPU and memory limits. Containers are configured with the following security constraints:
- No host network access — bots communicate via the internet like any other process, but cannot access the host machine's internal network
- Read-only filesystem for the bot code directory, with a separate writable data volume if needed
- No privilege escalation — containers run as non-root users and cannot gain elevated permissions on the host
- Strict resource caps — memory and CPU quotas prevent one bot from impacting others on the same host
- Container-to-container isolation — bots cannot see or communicate with other users' containers
- Dedicated egress IP — each bot's outbound internet traffic is routed through a dedicated public IP address assigned to that bot. This is enforced via kernel-level network address translation (iptables SNAT) on the host. Your bot's outbound traffic is identifiable by its assigned IP and does not share an outbound IP with other users' bots.
Bot code you upload is executed only within these containers. It cannot read or write files outside its assigned directory, and it cannot access other users' data or environment variables.
The dedicated egress IP means that Discord API rate limits, IP bans, or other restrictions imposed on your bot's IP affect only your bot — not other users on the platform. It also means you are accountable for how your bot uses its assigned IP address.
6. Payments and Billing
All payments are processed by Stripe (stripe.com/privacy). This includes monthly recurring plan subscriptions (billed to your card each billing period), token package purchases, extra bot slot purchases, permanent resource addon purchases (one-time Stripe payments that permanently raise a bot's CPU, RAM, or storage floor), Lifetime Plan purchases, and unban review fees (a non-refundable administrative fee paid by banned users to request account reinstatement review). When you complete a purchase, you are redirected to a Stripe-hosted checkout page. Viirless never handles, sees, or stores your full card number, CVV, or bank details.
We store the following billing data on our side:
- Stripe Customer ID (created when you first subscribe to a recurring plan)
- Stripe Subscription ID for active recurring plans
- Stripe session, invoice, and payment IDs for reconciliation
- Plan, token package, or bot slot purchased, amount, and timestamp
- Your token balance and transaction history within the platform
- Plan activation and renewal records (plan tier, activation date, expiry date, permanent status flag)
For monthly recurring plans, Stripe automatically charges your card each billing period. You can cancel at any time from your Subscription page in the dashboard — cancelling stops future charges and your access continues until the end of the current paid period.
When a paid subscription expires or is cancelled and the current period ends, any bots exceeding the free plan's bot limit will be automatically suspended (stopped and locked). Your bot files and configuration are retained; you can reactivate them by subscribing to a new plan.
7. Cookies and Local Storage
Viirless does not use tracking cookies or third-party advertising cookies.
The dashboard stores your JWT authentication token in the browser's localStorage so you remain
logged in between sessions. This token is scoped to viirless.net and is never shared with
third parties. Clearing your browser's local storage will log you out.
We do not use Google Analytics, Facebook Pixel, or similar tracking services.
8. Data Sharing and Third Parties
We do not sell, rent, or trade your personal data. We share data only in the following limited cases:
8.0 Marketplace Creator Attribution
When you publish an approved template on the Marketplace, your Viirless username is displayed publicly on the template listing as the creator. This is visible to all users browsing the Marketplace. No other personal data (email address, account ID) is shown to other users in this context. If you delete your account or your template is removed, creator attribution is removed from the listing.
8.1 User-to-User Sharing via Collaboration
When a bot owner grants another user collaborator access, that user may see the bot's name, files, container status, and — if the owner enables it — environment variables. This is a voluntary, owner-initiated sharing of data between platform users.
Viirless does not make this sharing decision; it is made by the bot owner. We provide the mechanism and enforce the permission boundaries, but we are not responsible for the data shared between a bot owner and their chosen collaborators.
We store the minimum data necessary to implement and display collaboration relationships: the collaborator's username, email (shown to the owner in the collaborator list), and the permission flags. Collaborators' profile data (username, email) is visible to the bot owner who invited them.
8.2 Service Providers
- Stripe — payment processing. Subject to Stripe's own privacy policy.
- Infrastructure providers — the Linux server(s) on which Viirless runs. Data is processed only on servers we control or have contracted for this purpose.
8.3 Legal Requirements
We may disclose your data if required to do so by law, court order, or a valid request from a government authority, or to protect the rights, property, or safety of Viirless, our users, or the public.
8.4 Business Transfers
If Viirless is acquired or merged with another company, your data may be transferred as part of that transaction. We will notify you via email and/or a prominent notice on our site before such a transfer takes place.
9. Data Retention
- Account data — retained for as long as your account is active. Deleting your account removes your profile, bots, and associated files from our systems within 30 days.
- Bot files and environment variables — deleted when the bot is deleted or when the account is deleted.
- Container logs — rolling retention; older logs are purged automatically.
- Billing records — retained for a minimum of 7 years to comply with financial record-keeping regulations, even after account deletion.
- Collaboration records — deleted immediately when a collaborator is removed or when either party's account is deleted.
- AI Coding Assistant API key — deleted immediately when you remove it via Profile settings, or when your account is deleted.
- AI chat sessions and message history — retained for the life of the account; you may delete individual sessions at any time from the AI panel. All session data is deleted when your account is deleted.
- Support tickets — retained for the life of the account to assist with dispute resolution.
- Ban and unban review records — retained indefinitely as part of the account's enforcement history, even after account deletion, for audit, dispute resolution, and abuse-prevention purposes. This includes the ban reason, user review message, administrator decision and note, and the associated Stripe payment record (retained for 7 years for financial record-keeping compliance).
- Egress IP assignment — retained for the life of the bot. Deleted when the bot is deleted or the account is deleted.
- Abuse incident records — retained for the life of the account and for a reasonable period after account deletion, as part of our enforcement and audit trail. Resolved (non-critical) incidents may be purged after 12 months at our discretion.
- Log position tracking data — overwritten on each scan cycle; effectively no long-term retention. Deleted when the container stops or the bot is deleted.
- Server/API logs — retained for up to 90 days for security monitoring, then deleted.
- Marketplace template metadata and files — retained for the life of the template listing. When a template is denied or disabled, it is removed from public view; the archive and metadata may be retained for up to 90 days for audit purposes, then permanently deleted. If you delete your account, your templates are disabled and removed.
- Marketplace purchase records — records of paid template purchases are retained for a minimum of 7 years for financial record-keeping compliance. Records of free template claims are retained for the life of the associated user accounts.
- Marketplace import records — retained for the life of the user account and deleted when the account is deleted.
10. Your Rights
Depending on your location, you may have the following rights regarding your personal data:
- Access (Art. 15 GDPR) — request a copy of the personal data we hold about you
- Correction (Art. 16 GDPR) — update your username or email address at any time from your Profile settings in the dashboard
- Deletion (Art. 17 GDPR) — delete your account and associated data via the dashboard (Settings → Delete Account), or by contacting us. Note: billing records are retained as required by law (see Section 9).
- Data portability (Art. 20 GDPR) — request an export of your bot files and account data in a machine-readable format
- Restriction of processing (Art. 18 GDPR) — request that we restrict processing of your data in certain circumstances
- Objection (Art. 21 GDPR) — object to processing based on legitimate interests, including profiling
- Withdraw consent — where processing is based on your consent, you may withdraw it at any time without affecting the lawfulness of prior processing
To exercise any of these rights, use the self-service tools in your dashboard or contact us at privacy@viirless.net. We will respond within 30 days (extendable by a further 60 days for complex requests, with notice).
10.1 Right to Complain to a Supervisory Authority
If you believe we have processed your personal data in violation of the GDPR, you have the right to lodge a complaint with the Danish data protection supervisory authority:
Carl Jacobsens Vej 35, 2500 Valby, Denmark
datatilsynet.dk · dt@datatilsynet.dk
If you are located in another EU/EEA member state, you may also lodge a complaint with the supervisory authority in your country of residence.
10.2 California Residents (CCPA)
If you are a California resident, you have rights under the California Consumer Privacy Act (CCPA), including the right to know what personal information we collect, the right to delete it, and the right to opt out of its sale. We do not sell your personal information. To exercise your CCPA rights, contact us at privacy@viirless.net.
11. Children's Privacy
The Viirless platform is not directed at children under the age of 13 (or 16 in the EEA). We do not knowingly collect personal data from children. If you believe a child has created an account on our platform, please contact us and we will delete the account promptly.
12. Changes to This Policy
We may update this Privacy Policy from time to time. When we make material changes, we will update the "Last updated" date at the top of this page and, where appropriate, notify you by email or via an in-app notice.
Continued use of the platform after changes become effective constitutes acceptance of the revised policy. We encourage you to review this page periodically.
13. Contact Us & Data Controller
The data controller for personal data processed by the Viirless platform is Viirless, based in Denmark.
If you have questions about this Privacy Policy, want to exercise your data rights, or need to report a privacy concern, you can reach us through:
- Support tickets — open a ticket from your dashboard (fastest response)
- Email — privacy@viirless.net
We aim to respond to all privacy-related requests within 5 business days, and in any event within the 30-day period required under GDPR.