Driver licences, passenger details, payment metadata, and your accounting ledger all live behind real auth, in real backups, with a real audit trail. Here's exactly how we handle it.
Every API route validates the caller's identity, vendor membership, and role before any read or write — checked at runtime, not at deploy time.
Email + password and federated sign-in. Future: LINE, KakaoTalk, and WeChat for global expansion.
authenticateVendorRequest() validates both that the user belongs to the vendor AND that their role permits the action. Driver, Operations, and Admin roles each gate different surfaces.
authenticateRequest() runs on every protected API route. No silent bypasses, no 'we'll add it later' endpoints.
Every audit entry stores {uid, displayName, role} at the moment of write. Account changes don't erase the trail.
Tokenised one-shot links for live ETA tracking — the customer doesn't get an account, and the token can't be replayed for a different job.
Per-route rate limits on every public endpoint. Backed by Upstash Redis for distributed counting.
We're a growing company without a formal certification yet — and we're transparent about it. What we do today is structure our access management, audit, monitoring, and incident-handling against the same control families enterprise procurement teams look for, so the gap between us and an audited posture is documentation, not architecture.
We use the 2022 Annex A control set as the internal benchmark for access management, asset inventory, vendor risk, cryptography, and incident response. International recognition makes it the natural target standard for a global platform.
The AICPA Trust Services Criteria — Security, Availability, Confidentiality, Processing Integrity — structure our internal policy. Under NDA we will walk diligence teams through current controls and where the evidence gaps still are.
Govern, Identify, Protect, Detect, Respond, Recover. The NIST Cybersecurity Framework is how we structure runbooks, alert thresholds, and review cadences — a free, authoritative operating model.
We don't have a SOC 2 logo of our own yet, but the providers we run on do — and we use them in their compliant configurations. This is the trust posture we inherit at the infrastructure layer; your own regulatory obligations as our customer still belong to you.
Application runtime, deployments, Edge functions, and Speed Insights. Vercel publishes SOC 2 Type 2 and ISO 27001 attestations and DPA terms on request.
Firebase Authentication, Firestore, and scheduled backups run on Google Cloud. The Google Cloud platform publishes SOC 1 / SOC 2 / SOC 3, ISO 27001 / 27017 / 27018, PCI DSS, and HIPAA attestations.
Driver licences, supporting documents, and watermarked job photos sit in Cloudflare R2. Cloudflare publishes SOC 2 Type II, ISO 27001, ISO 27018, and PCI DSS Level 1 attestations.
All card data is tokenised and held by Stripe — full PANs never touch our servers. Stripe maintains PCI DSS Level 1 (Service Provider) certification, SOC 1 Type II, and SOC 2 Type II.
Three independent backup layers, immutable journal entries, denormalised actor identity, and a Firestore security-rule layer enforced at the database — not just at the API.
Operational data in Firestore. Media and documents in Cloudflare R2. Caching in Upstash Redis with a 5-minute TTL. Each layer is chosen for the job, not bolted on.
Operational records (jobs, drivers, customers, ledgers). Security rules enforced at the database — your API can't bypass them.
Driver licences, supporting documents, watermarked job photos. Content-hashed paths so files are addressed by content, not by guessable URLs.
Vendor settings cache (5-min TTL, LRU). Invalidated on every vendor doc write so stale reads never reach the dispatcher.
Operating a chauffeur platform means handling personal data on three sides — passengers, drivers, ops staff. Our privacy policy walks through what each party gives us and how it's used.
Licences and supporting documents reviewed by an AI pipeline (DeepSeek primary, Moonshot Kimi vision fallback). Stored in R2 with content-hashed paths. Retention follows the vendor's compliance requirements.
Booking customers give us name, contact, and pickup address — used for dispatch and milestone emails. Never sold, never shared outside the booking chain (vendor + assigned driver).
First-party session cookies for auth. Product analytics via PostHog (EU Cloud) — opt-in on marketing pages via the cookie banner, ToS-covered for signed-in users; sensitive UI masked from session replay. Errors via Sentry; capture policy: skip 403, error on 5xx, warning on 4xx/network.
Small team, fast escalation. Every critical bug or security issue routes to the same engineer who built the surface — no triage purgatory.
Sentry for application errors. The Vercel dashboard for build and deploy status. Firebase console for database health. All checked daily.
API keys (Stripe, Firebase Admin, R2, Resend, Twilio, Upstash, Voyage, DeepSeek, Moonshot, AeroDataBox, FlightRadar24, Google Maps) live in Vercel environment variables. Rotation when exposure is suspected.
If we have to investigate, the audit log + reversing-entry GL + immutable photo evidence give us the same forensic trail you have. We can show our work.
Fusion Link is built to operate worldwide. Each booking carries the currency, tax regime, and privacy-law footprint of the country it's served from — captured at the moment the invoice is issued, not inferred later.
Single deployment, per-country configuration. Currency, language, tax behaviour, and address conventions all switch based on the booking's country — not where the vendor is headquartered.
Tax-rate defaults pulled from country config (SG GST 9%, MY SST 6%, UK VAT 20%, US sales tax, etc.) and snapshotted on every invoice at issue time so historic invoices never drift when rates change.
Lawful basis for every processing purpose is named in the privacy policy, with Art. 28 GDPR data-processing agreements available on request and explicit consent flows for special-category data. Coverage expands per market as we onboard.
When a vendor adds a custom domain, three GCP lists (Firebase authorizedDomains, Firebase Web key, Maps key) auto-sync — no manual GCP-console toggling, no half-configured vendor storefronts.
Independent researchers are part of how a small team stays honest. If you find a vulnerability, a privacy issue, or a way to misuse the platform, here's how to reach us and what to expect back.
Email support@fusionlink.pro with the subject prefix "Security disclosure". Include reproduction steps, affected endpoint or screen, and any proof-of-concept material that demonstrates the issue.
We will not pursue legal action against researchers who follow a good-faith disclosure process: report privately, give us a reasonable window to remediate, don't exfiltrate data beyond what's needed to demonstrate the issue, and respect user privacy.
We aim to confirm receipt within 72 hours and keep you updated on remediation. Once a fix ships we're happy to credit you — or keep things anonymous if that's what you'd rather.
We're happy to share architecture documents, infrastructure topology, and security policies under NDA. Email us and we'll set up a call — or report a security issue directly using the subject "Security disclosure".