Privacy Policy
APOS — Point of sale for hospitality Last updated: 19 August 2026
IMPORTANT — TESTING AND EVALUATION RELEASE: APOS is currently in a testing and evaluation phase, during which no plan is available for purchase and no fees are charged. The Service is provided "as is", without warranties of any kind, and may be modified, suspended, or discontinued at any time without notice.
In brief (non-binding summary). APOS is a point-of-sale service run by Stylianos Masmanidis in Greece. We collect the account details of the people who operate APOS, the business data they enter (menus, orders, shifts, schedules, and so on), optional staff-chat messages, and a small amount of information a guest may add to a public order. We do not use advertising, tracking, or third-party analytics cookies, and we never store card numbers — Stripe handles payments when they are enabled. Optional AI helpers send the menu text or images you provide to OpenAI to draft content you then review. We keep data only as long as we need it or the law requires. You can exercise your GDPR rights by emailing steli0s151151@gmail.com. This summary is for orientation only; the full policy below is what legally applies.
This Privacy Policy explains how Stylianos Masmanidis ("we", "us", "our") collects, uses, stores, and protects personal data when you use the APOS application and related services ("Service"). It is written in accordance with the General Data Protection Regulation (EU Regulation 2016/679 — "GDPR"), the ePrivacy framework, and Greek data protection law (Law 4624/2019).
If anything below conflicts with mandatory law, the law prevails.
This policy is written in English and Greek. In case of any discrepancy, the Greek version prevails for users resident in Greece, and the English version prevails for all other users.
This policy describes the cloud Service we operate at apos.gr and app.apos.gr. If you run a self-hosted copy of APOS, you (or the organisation that operates that instance) are the controller for data processed on that instance.
1. Data Controller and Roles
Stylianos Masmanidis (sole proprietor) Country: Greece Website: apos.gr Email: steli0s151151@gmail.com
We act in two capacities:
- Controller — for personal data of the people who register and operate APOS accounts (business owners, managers, staff users who log in), for our website visitors, for people who contact us, and for optional demo-session users.
- Processor — for personal data that an APOS-using business ("Merchant") enters into the Service about its own staff or its own customers (for example, an optional
customerNameon a public order, staff-schedule names, or staff-chat content). The Merchant is the controller of that data; we process it on the Merchant's documented instructions, configured through the Service.
When acting as a processor, the Merchant's own privacy notice and the data-processing terms in the Terms of Service govern. This policy primarily covers our role as controller.
We have not appointed a Data Protection Officer; appointment is not mandatory under GDPR Article 37 for our scale of processing. You can reach us about any privacy matter at the email above.
2. What Data We Collect
2.1. Account Information
Collected when a business owner registers (and, where provided, for staff accounts):
| Data | Purpose |
|---|---|
| Username | Account identification and login |
| Email address | Account communication and recovery (required for owner registration; optional for staff accounts created by a Merchant) |
| Password | Authentication (stored only as a bcrypt hash) |
| First name (and optional last name) | Display name in the application |
| Profile photo (optional) | Display in the application; stored as an image file we host |
| Manager PIN (managers and admins only) | Approval of restricted actions like voids; stored only as a bcrypt hash |
| Business name and type | Configuring the application |
2.2. Staff Accounts Created by Merchants
When a Merchant creates accounts for its employees, we store the same fields listed in 2.1 about each staff user (without business name, and with email only if the Merchant supplies one). For these records the Merchant is the controller and we are the processor.
2.3. Operational Business Data
Created and stored as part of normal use:
- Menu items — names, descriptions, prices, categories, options, allergen labels, ingredients, preparation notes, translations, and uploaded or camera-captured images
- Tables — numbers, locations, capacity, floor-plan layout
- Orders — items, quantities, prices, payment method, timestamps, table assignments, the staff user who created or completed the order, audit history of edits
- Shifts — start/end times, staff user, shift summaries and cash counts
- Staff schedule — names, roles, planned shifts, and worked-hours records the Merchant enters (these may identify people who do not have a login)
- Promotions and discounts — the rules a Merchant configures
- Public venue profile — tagline, logo, social links, Wi-Fi name/password the Merchant chooses to show on the guest menu, upcoming events, and similar fields
- Audit log entries — actions taken in the application (who, what, when) for accountability and troubleshooting
2.4. Customer (End-Consumer) Data Entered into Orders
If the Merchant enables the customer-facing public ordering feature, guests may submit:
- An optional customer name (free-text, supplied voluntarily)
- A table number / table location (for dine-in)
- A free-text note attached to the order or specific items
- A short opaque
clientId(a random identifier the guest's browser generates so the same person can track their order; not linked to any external identity)
We do not solicit or store guest email addresses, phone numbers, postal addresses, payment-card details, or government identifiers in orders. The Merchant is the controller of any guest data entered through this flow; we process it on their behalf.
2.5. Staff Chat
If the Merchant uses in-app staff chat, we store:
- Message text
- Optional images uploaded from the device
- Optional voice notes recorded with the microphone (audio files we host)
Chat content is visible to users in that business. We automatically delete chat messages and their media after 10 days. The Merchant is the controller of this content.
2.6. Subscription and Payment Data
- Plan selected, duration, amount, date of purchase
- Stripe Checkout Session ID (a reference to your transaction at Stripe)
- Whether the business has completed its one-time application purchase
During the testing and evaluation phase no payments are taken. When paid plans are enabled, we do not store credit or debit card numbers, CVV codes, or banking details. All payment processing occurs on Stripe's systems. Stripe acts as an independent controller for fraud prevention and as our processor for completing the checkout. See Stripe's Privacy Notice.
2.7. Printer and Local-Network Configuration
If a Merchant connects a thermal printer, we store:
- Printer or device IP address (local LAN address)
- Port number
- Paper width, character encoding, and other printer preferences
- Receipt header information the Merchant enters (business address, phone, AFM/VAT number, footer message)
Local IP addresses are not personal data on their own under GDPR; we list them for transparency.
2.8. Security, Notifications, and Operational Telemetry
- Audit logs — who performed which action, when, with the affected resource ID
- Login attempts — username/email and timestamp of failed attempts, kept briefly to enforce brute-force lockout (see retention table)
- Refresh tokens — stored only as SHA-256 hashes, scoped to a user and an expiry
- SSE / streaming session tickets — short-lived random opaque values used to authorise real-time event streams; expire within 60 seconds
- Device identifiers — a random device ID generated on the device (used for printer ownership and live-session checks); native push tokens (Firebase Cloud Messaging) and, for installed web apps, Web Push subscription endpoints and encryption keys
- In-app notification history — event type and related metadata for the dashboard bell
- IP addresses — observed at the edge for rate-limiting, abuse prevention, request tracing, and webhook signature validation; we do not maintain a long-term log of IP addresses in our database
- Request IDs — random per-request identifiers attached to logs for diagnostics
2.9. Device-Side Storage
The following are stored locally on your device (not on our servers), and are strictly necessary to run the Service you requested:
- Language and theme preferences
- Authentication tokens (so you stay signed in)
- A random device ID
- Queued print jobs and offline orders (IndexedDB), so tickets and orders are not lost if the network drops
- Recent shift activity timestamps
- Per-device customer-menu preferences (e.g. slideshow on/off)
- Local report-filter preferences
- On the Android app only: a hint that biometric sign-in is available. The password or biometric template stays in the device's OS keystore; we never receive biometric data.
2.10. Camera and Microphone
- Camera / photo library — only if you take or upload a photo for a menu item, venue image, or staff-chat image. The image is stored as described in 2.3 and 2.5.
- Microphone — only if you record a staff-chat voice note. Audio is stored as described in 2.5.
We do not access camera or microphone in the background, and we do not use them for advertising or profiling.
2.11. Optional AI Helpers
When a Merchant enables an AI feature and a user asks the Service to draft content, we send to OpenAI only the fields needed for that draft — typically item name, category, description, ingredients, preparation notes, and (for image generation) those same fields. A staff-chat horoscope helper sends only the selected zodiac sign, not a name or account.
AI output is a draft. Nothing is published until a user reviews and saves it. We do not use your content to train a public model of our own.
2.12. Error and Crash Reports (Optional)
If Sentry is enabled for a deployment, we receive JavaScript and Node.js error messages, stack traces, request method and path, and the application environment. Before any event leaves the server, we strip the Authorization and Cookie headers. Sentry does not receive passwords, PINs, refresh tokens, or order contents.
2.13. Contact Form
When you submit a message via the website or in-app contact form:
- Name as you provide it
- Email address for our reply
- Message content
This is used solely to handle and respond to your enquiry.
2.14. Public Marketing Listings
The public website, the in-app About page, and the public business listing return the name, type, slug, and (where set) website URL of active Merchant businesses. The demo business and our internal APOS business are excluded. Deactivating an account removes it from the listing. To request removal while remaining a customer, email us.
2.15. Demo Sessions
When demo mode is enabled, a visitor can open a read-only demo session without registering. That session uses a dedicated demo account and sample data in an isolated demo business. Demo users cannot see other Merchants' data. Demo login is not available through the normal username/password form.
2.16. Cookies and Local Storage
We do not use cookies for tracking, analytics, advertising, or profiling, and we do not display a cookie-consent banner for that reason. The Service stores only strictly necessary information on your device, as listed in Section 2.9 (and, where a session cookie is set by infrastructure in front of the Service, only as needed to deliver the site). Because this storage is strictly necessary to deliver a service you have requested, it is exempt from the prior-consent requirement under Article 4(5) of Greek Law 3471/2006 (transposing the ePrivacy Directive 2002/58/EC). We will update this section and seek consent if we ever introduce non-essential cookies or similar technologies.
3. What We Do NOT Collect
- Card or banking data — handled entirely by Stripe (when payments are enabled) and, where the Merchant uses one, the Merchant's separate card-reader and acquirer
- Guest email, phone, or postal address in orders
- GPS or precise device location
- Advertising or marketing trackers (no Google Analytics, Meta Pixel, or similar)
- Contacts from your address book
- Biometric templates — optional fingerprint/face sign-in is processed only on the device
- Special-category data or government IDs from guests (allergen labels on menu items are product information, not a guest's health record)
4. Legal Basis for Processing (GDPR Article 6)
| Data | Legal Basis |
|---|---|
| Account information; staff accounts; operational business data; staff chat; schedules | Contract (Art. 6(1)(b)) — necessary to provide the Service |
| Payment / subscription records | Contract (Art. 6(1)(b)) and legal obligation (Art. 6(1)(c)) — Greek tax and bookkeeping rules |
| Audit logs; failed-login tracking; refresh-token tracking; rate-limiting on IPs; push tokens when you enable notifications | Legitimate interests (Art. 6(1)(f)) — protecting accounts and the Service from abuse, delivering notifications you requested, and ensuring accountability |
| Optional AI drafts | Contract (Art. 6(1)(b)) — performing the drafting feature you asked the Service to run |
| Sentry error reports | Legitimate interests (Art. 6(1)(f)) — keeping the Service reliable |
| Contact form messages | Legitimate interests (Art. 6(1)(f)) — responding to enquiries; or pre-contractual steps under Art. 6(1)(b) where applicable |
| Public business listing | Legitimate interests (Art. 6(1)(f)) — showing active venues that use the Service; you may object (see Section 9.6) |
| Demo session | Legitimate interests (Art. 6(1)(f)) — letting prospective customers evaluate the Service |
For our legitimate-interests processing, we have assessed that the activity is limited to what is needed, that users would reasonably expect it for a POS Service, and that it is balanced against your rights. You can object at any time (see Section 9.6).
5. How We Use Your Data
We use the data only to:
- Provide and operate the Service (orders, menus, tables, staff, shifts, schedules, promotions, chat, real-time sync, printing, guest menus).
- Authenticate and authorise users, including role and per-business isolation.
- Process subscription payments through Stripe when paid plans are enabled.
- Send push and in-app notifications you have enabled.
- Run optional AI drafting tools you invoke.
- Detect and prevent unauthorised access, brute-force attempts, abusive automation, and other security risks.
- Diagnose and fix bugs and reliability issues.
- Respond to support enquiries and legal requests.
- Publish the public listing of active Merchants described in Section 2.14.
We do not sell personal data, share it with advertising networks, profile users for marketing, or perform automated decision-making with legal or similarly significant effects (GDPR Article 22).
6. Recipients and Sub-Processors
We do not sell personal data. We share data only with the categories of recipient listed below. The list below is current as of the "Last updated" date and we will update it when sub-processors change.
6.1. Stripe — Payment processor
What: checkout session data, transaction amounts, your email associated with the payment. Why: to receive subscription and one-time purchase payments (when paid plans are enabled). Where: USA, with EU data-processing capability. Privacy: stripe.com/privacy
6.2. OpenAI — Optional AI drafting
What: menu text and related fields you submit to an AI helper (see Section 2.11); not passwords, payment data, or full order histories. Why: to generate draft descriptions, translations, images, preparation notes, and similar content you then review. Where: USA. Privacy: openai.com/policies/privacy-policy
6.3. Google (Firebase Cloud Messaging) — Native push
What: device push tokens and the notification payload. Why: to deliver push notifications on the Android app when you have enabled them. Where: USA / global. Privacy: firebase.google.com/support/privacy
6.4. Sentry — Error monitoring (optional)
What: error messages, stack traces, request method and path, environment. Why: identify and fix faults. Where: EU and USA. Privacy: sentry.io/privacy
6.5. Railway — Hosting / infrastructure
What: the backend (and, where deployed there, the web app) runs on Railway. Why: to host the Service. Where: USA (primary region). Privacy: railway.com/legal/privacy
6.6. MongoDB Atlas — Database
What: operational application data is stored in MongoDB Atlas. Why: managed database hosting. Where: Region selected at deployment time (configurable; EU regions available). Privacy: mongodb.com/legal/privacy-policy
6.7. Cloudflare — DNS / CDN / DDoS (where used)
What: request edge metadata (IP, headers) for serving public pages. Why: content delivery and DDoS mitigation. Where: Global edge network. Privacy: cloudflare.com/privacypolicy
6.8. Legal and protective disclosure
We may disclose data when required by law, valid legal process, or where necessary to investigate or address suspected fraud, security issues, or violations of our Terms.
Push notifications on an installed web app (PWA) are delivered by the browser vendor's Web Push service (for example Apple, Google, or Mozilla) using the subscription you created in that browser. Those vendors process the endpoint according to their own policies.
7. Data Retention
We keep personal data only as long as needed for the purpose for which it was collected, plus any period required by law.
| Data | Retention |
|---|---|
| Account and operational business data | Active for the life of the account; deleted on account-deletion request, subject to legal retention exceptions below |
| Orders (live collection) | Default 30 days, then moved to the archived collection. Each Merchant's archive delay is configurable (from a very short interval up to 365 days) |
| Archived orders | Kept while the Merchant's account is active, for at least the period required by Greek bookkeeping rules (currently five years from the end of the relevant fiscal year), and technically for up to about six years. A platform administrator may configure shorter automatic deletion of archived orders for a given Merchant. Deleted on request after the legal period expires |
| Audit logs | 15 days from the event, then automatically deleted, unless required for an open investigation or legal obligation |
| Staff chat (text, images, voice notes) | 10 days, then automatically deleted |
| In-app notification history | 7 days |
| Failed-login records | Up to about 30 minutes after the last failed attempt, then automatically deleted (used only for lockout; lockout itself lasts 15 minutes) |
| Refresh-token hashes | Until the token expires (default 30 days) or is revoked, whichever is sooner |
| SSE session tickets | 60 seconds, single-use |
| Push tokens / Web Push subscriptions | Until you disable notifications, uninstall the app, or the token is replaced |
| Subscription and invoice records | Retained for the period required by Greek tax law (currently five years from the end of the relevant fiscal year) |
| Contact-form messages | Up to 24 months after the last interaction, then deleted; earlier on request |
| Sentry error reports | According to Sentry's own policies (typically 90 days) |
| Public tracking of a guest order | Available for 7 days from order creation; the underlying order is retained per the rules above |
When retention ends, we delete or irreversibly anonymise the data.
8. Data Security
Technical and organisational measures we maintain include:
- Passwords and manager PINs hashed with bcrypt
- Refresh tokens stored only as SHA-256 hashes; rotated on use
- TLS for all data in transit
- Strict Transport Security (HSTS) with preload
- Strict Content-Security-Policy on JSON endpoints; tighter
Permissions-Policy - HTTP rate limiting on authentication, order, contact, public, SSE, and webhook endpoints
- Per-account login lockout after repeated failed attempts
- NoSQL operator stripping on all incoming requests
- JWT with HS256 pinned (preventing algorithm-confusion attacks)
- Role-based access control and strict per-business isolation
- Stripe webhook signature verification with idempotency
- Structured request logging with request IDs; sensitive headers stripped before any third-party telemetry
- Principle of least privilege and dependency review
No system is invulnerable. If you believe your account has been compromised, contact us immediately.
9. Your Rights (GDPR)
If you are in the EEA, UK, or covered by similar law, you have the rights listed below. To exercise any of them, email steli0s151151@gmail.com from the address associated with your account (or the address you used to contact us). We will respond within one calendar month and may extend up to a further two months for complex requests, telling you why.
9.1. Access — receive a copy of your personal data. 9.2. Rectification — correct inaccurate or incomplete data. 9.3. Erasure — request deletion ("right to be forgotten"), subject to records we are legally required to keep (for example, tax records). 9.4. Restriction — limit how we process your data while a dispute is resolved. 9.5. Portability — receive data you provided to us in a structured, commonly used, machine-readable format (JSON, where technically feasible). 9.6. Objection — object to processing based on legitimate interests (including the public business listing); we will stop unless we can show compelling grounds that override your rights. 9.7. Withdraw consent — where we rely on consent, withdraw it at any time without affecting the lawfulness of prior processing. 9.8. Automated decisions — we do not make decisions about you based solely on automated processing that produce legal or similarly significant effects (Article 22). 9.9. Complaint to a supervisory authority — you can complain to the Hellenic Data Protection Authority:
- Website: dpa.gr
- Email: contact@dpa.gr
- Address: 1–3 Kifisias Avenue, 115 23 Athens, Greece
You may also complain to the supervisory authority of your habitual residence in the EEA.
We may need to verify your identity before acting on a request. We will not charge for routine requests; we may charge a reasonable fee or refuse manifestly unfounded or excessive requests, explaining why.
If you are a guest or staff member of a Merchant, some requests are more appropriately made to that Merchant (the controller). We will tell you if that is the case and, where we act as processor, assist the Merchant as described in the Terms of Service.
10. International Data Transfers
Some sub-processors process data outside the European Economic Area:
| Provider | Role | Country | Safeguard |
|---|---|---|---|
| Stripe | Payments | USA | EU Standard Contractual Clauses; EU data-processing region available |
| OpenAI | Optional AI drafting | USA | EU Standard Contractual Clauses |
| Google (FCM) | Native push | USA / global | EU Standard Contractual Clauses |
| Sentry | Error monitoring | USA | EU Standard Contractual Clauses |
| Railway | Hosting | USA | EU Standard Contractual Clauses; Data Processing Addendum |
| MongoDB Atlas | Database | Configurable | EU Standard Contractual Clauses; EU regions available |
| Cloudflare | Edge / CDN | Global | EU Standard Contractual Clauses |
Where a U.S.-based provider is certified under the EU–U.S. Data Privacy Framework, we may also rely on the European Commission's adequacy decision of 10 July 2023, with the Standard Contractual Clauses retained as an additional safeguard. The Standard Contractual Clauses follow Commission Implementing Decision (EU) 2021/914. You can request a copy of the SCCs in force for any sub-processor by emailing us.
11. Children's Privacy
The Service is a business tool and is not directed at the general public or at children. The person who registers and holds an account must be at least 18 (see the Terms of Service). In our role as controller, we do not knowingly collect personal data directly from children. A Merchant may, acting as controller, create staff accounts or schedule entries for its own employees — including employees under 18 where permitted by labour law — and is responsible for the lawful basis and any parental-consent requirements applicable to those staff. If you believe a child has registered an account-holder profile with us directly, contact us and we will delete it.
12. Changes to This Policy
We may update this policy. The "Last updated" date reflects the most recent revision. For material changes (new categories of data, new sub-processors that significantly change processing, or new purposes) we will give at least 14 days' advance notice through the application or by email before the changes take effect, where reasonably practicable.
13. Personal Data Breaches
If we become aware of a personal data breach likely to result in a risk to your rights and freedoms, we will:
- Notify the Hellenic Data Protection Authority within 72 hours where feasible, in line with GDPR Article 33.
- Notify affected individuals without undue delay where the breach is likely to result in a high risk to their rights and freedoms (Article 34).
Notifications will describe the nature of the breach, the categories and approximate number of records affected, the likely consequences, and the measures we have taken or propose to take.
If you suspect a breach involving your account or data, email steli0s151151@gmail.com with the subject line SECURITY and as much detail as you can share.
14. Contact
Stylianos Masmanidis (sole proprietor) Country: Greece Website: apos.gr Email: steli0s151151@gmail.com