Security

End to end. Quietly serious.

Your studio holds contracts, BIN numbers, payment details and unreleased creative. We treat all of it like the legally binding records it is. Encryption in transit and at rest. Tenant isolation at the database layer. Zero AI training on your data. Full export anytime.

Tenant isolation at the database layer

Every query is scoped to your studio at the SQL layer, not just in the UI. A bug in a route handler cannot leak another studio’s data because the query never asked for it.

Encrypted in transit and at rest

TLS 1.3 on every public surface with HSTS. Database, file storage and backups are encrypted at rest with provider-managed keys.

Your data stays your data

We never train AI models on it. We never sell it. Export to CSV plus a JSON dump anytime. After cancellation, production data is purged within 30 days.

Identity

Sign in with the accounts you already trust.

Staff sign in with Google. Sessions are short-lived JWTs in HttpOnly cookies. We never see or store passwords. Roles (owner, admin, manager, creative, finance, sales) gate every page server-side.

  • Google OAuth for staff. Microsoft and Apple on the roadmap.
  • Magic-link sign in for client portal users (no password).
  • Per-role permissions enforced before the database read.
  • Super-admin actions audit-logged to a separate table.

Data isolation

One tenant cannot see another. Ever.

A per-studio scope wraps every database call. Files on object storage are namespaced by studio id and served only via short-lived signed URLs. We test this invariant on every commit.

  • Row-level scope enforced inside the query helper, not in route code.
  • File keys prefixed by studio id, never enumerable.
  • Signed URLs expire in 60 seconds for downloads.
  • Cross-tenant test suite blocks merges that would leak.

Tax record integrity

Issued documents are immutable.

Invoices, Mushak forms, money receipts and bills snapshot your BIN, TIN and brand at the moment of issue. Once a Mushak is locked, no path can edit it. Reissues create a new document with its own number.

  • Brand snapshot persisted on every issued document.
  • Mushak 6.3 and 6.6 numbering is gapless per BIN per fiscal year.
  • Locked-row check at the application layer rejects updates.
  • Audit log on every issue, void and re-issue.

Sharing controls

Magic links you can lock down.

Branded share links carry an HMAC-signed token, an optional password gate, an expiry and a max-views counter. Verification rate-limits five attempts per hour per IP. Cookies are scoped to the share path so unlocking one link never unlocks another.

  • Optional password protection per share link.
  • Expiry and max-views per link.
  • Per-link cookie scope so cross-link spillover is impossible.
  • X-Robots-Tag noindex on every share page so links never get indexed.

Email integrity

No surprise sends. No leaks.

Outbound mail uses authenticated SMTP via a verified sending domain (DKIM, SPF, DMARC). Bounces and complaints route to a webhook that suppresses future sends per studio. Every transactional email carries a one-click unsubscribe.

  • DKIM, SPF and DMARC on the sending domain.
  • Per-studio outbound rate limit (default 100 per hour).
  • Per-studio suppression list updated on bounce or complaint.
  • One-click unsubscribe in every email footer.

Edge protections

Hardened by default.

Strict Content-Security-Policy on every response. HSTS for two years with preload. Frame-ancestors set to none so the app cannot be embedded. Rate limits on auth, OTP and share-verify endpoints.

  • Content-Security-Policy with locked connect-src and object-src none.
  • HSTS max-age 63072000 includeSubDomains preload.
  • frame-ancestors none, X-Content-Type-Options nosniff, Permissions-Policy clamped.
  • Per-IP rate limits on /api/auth (30/min) and OTP (3/min/email).

Practices

The boring stuff, on the record.

Hosting region
Singapore (low latency from Bangladesh)
Database
Postgres, encrypted at rest, point-in-time recovery enabled
File storage
Private object storage, signed URLs, never public buckets
Backups
Automatic daily snapshots, 30-day retention
Secrets
Stored in the deploy provider’s secrets manager. Never in source.
Sub-processors
Full list available on request from legal@uplytics.ai
Data export
CSV plus JSON dump on demand, no holdback
Data retention after cancellation
Workspace locked immediately, purged within 30 days
AI training on your data
Never. AI calls are stateless and per-studio.
Logs and metrics
Structured logs with request id; PII redacted before retention
Incident response
Customer notification within 72 hours of confirmed incident

Reporting

Found a vulnerability? Tell us.

Email security@uplytics.ai with a clear reproduction. We acknowledge inside one business day. Please give us 90 days to fix before public disclosure. We will credit researchers in the changelog when invited to. The full machine-readable disclosure policy lives at /.well-known/security.txt.

Last updated 2026-05-10. Operated by FastFlowUp under the Uplytics brand.