Skip to main content
Sign & Talkbecause sign can talk
01How it worksThe practice loop, start to finish02FeaturesCues, feedback, progress, accessibilityकPhoneme practiceOne sound at a timeशब्दWord practiceSounds inside real words…Sentence practiceRhythm, stress and flow%Pronunciation analysisWhat a score really measures
PricingGet the appFAQ
♥Sponsors & foundationsFund seats, follow every learner you sponsor+Clinics & therapistsGuide learners who approve your access§Partner termsWhat partners can and cannot see
Open the app

Menu

Product

How it worksFeaturesPricingGet the appFAQ

Partners

Sponsors Foundations · CSRClinics Doctors · Therapists

More

BlogAboutContact
Open the appCOMING TOGoogle PlayThe Android app is not on Google Play yet. Use the web app in your browser today.

Security

Security

Sign & Talk holds recordings of people’s voices. This page explains the protections in plain language. Optional technical detail sits collapsed below for auditors — not as a blueprint to rebuild the product.

  • Last updated 7 September 2026
  • Published by Vinxign Media Private Limited

Pre-launch review notice

This document describes how Sign & Talk is built and operated today. It is written for learners and guardians in plain language. It is not legal advice. If you need advice about your rights, consult a qualified lawyer. Questions about this product: devesh@vinxign.com.

On this page

  1. Everything in transit is encrypted
  2. Who is allowed to call the API (detail)
  3. Proving who you are (detail)
  4. The database and the audio bucket (detail)
  5. Secrets (detail)
  6. Rate limits and request limits (detail)
  7. Audio validation (detail)
  8. Payments
  9. Browser hardening (detail)
  10. Logging and monitoring (detail)
  11. Where it runs (detail)
  12. Backups and recovery (detail)
  13. Responsible disclosure
  14. If something goes wrong

01

Everything in transit is encrypted

  • The API accepts HTTPS only. Plain HTTP requests are redirected before they reach the application.
  • The API sends HSTS with a one-year lifetime including subdomains, so a browser will not be tricked into downgrading a later request.
  • Calls to our database, our storage bucket, our AI inference service and both payment providers are all made over HTTPS.
02Who is allowed to call the APIOptional detail — expand
  • Browser access is restricted by an explicit list of allowed origins. There is no wildcard: the code refuses to accept "*" even if someone sets it in configuration, because an API that accepts credentialed requests from any origin has no origin policy at all.
  • The first-party origins are hard-coded in the source rather than read from configuration, so a mistyped environment variable cannot silently widen access.
  • Outside production a localhost pattern is allowed for development. In production that pattern is switched off.
03Proving who you areOptional detail — expand
  • Sign-in is Google, through Supabase. The app sends the resulting access token to our API.
  • Our server verifies the token signature itself. It does not accept a token because it looks well-formed: it checks the signature against the shared secret, or against Supabase's published signing keys, and rejects anything that fails.
  • Where a Google identity token is verified directly, our server checks the signature with Google and also checks that the token was issued for our application and by Google — without that audience check, a token minted for a different app would be accepted.
  • We also issue our own opaque session tokens, stored server-side. Because they are stored, they can be revoked instantly — which is what makes "delete my data" able to end every session on every device at once.
  • Local, password-free sign-in exists for development and offline clinic use, and the code disables it automatically as soon as real authentication is configured, so a production deployment cannot be entered through that door.
04The database and the audio bucketOptional detail — expand
  • Row-level security is enabled on every application table — learners, staff, sessions, attempts, reviews, consent events, plans, subscriptions, payments, entitlements, analytics and devices.
  • No policy grants access to the public anonymous or authenticated keys. The practical effect is that the keys shipped inside the app cannot read a single row of application data.
  • Our API server reaches the database with a service-role credential that exists only as a server secret.
  • Voice recordings live in a private storage bucket. It is not publicly readable. The app never writes to it and never reads from it directly; only the server, holding the service-role key, can.
  • Responses that carry a recording, an account detail, a billing record or an admin view are marked no-store, so no proxy or CDN keeps a copy.
05SecretsOptional detail — expand
  • Every secret is set on the server platform as a secret. None is committed to the repository and none appears in the deployment configuration file.
  • The service-role database key, the Razorpay secret, the Razorpay webhook secret and the Google Play service account are held only on the server. None of them is present in the Flutter app, on Android or on the web.
  • The Flutter app carries only the public identifiers it must — the Supabase URL and the public anonymous key, and the Razorpay public key id. None of those can read data or move money on their own.
  • Payment amounts are always taken from our own plan catalogue on the server. A price sent by a client is ignored, because a price the client chooses is a price the client sets.
06Rate limits and request limitsOptional detail — expand
  • The analysis endpoint is rate limited with a sliding window: 30 requests per minute and 600 per hour for a signed-in learner, and a third of that for requests with no account, keyed by IP address.
  • A sliding window rather than fixed buckets, so a burst cannot be smuggled across a minute boundary.
  • Refused requests are not counted against you. A client that ignores a rate-limit response cannot lock itself out permanently.
  • An upload larger than 8 MB is refused — first on the declared length, then again while the body is read, so a lying length header changes nothing.
  • Every consequential action taken by a staff member or an administrator is written to an audit log with who, what, when, and the before and after values.
07Audio validationOptional detail — expand
  • An upload must decode as valid audio. Anything that does not is rejected with a clear error rather than passed further in.
  • A clip shorter than 50 milliseconds after silence trimming is rejected as empty.
  • Audio beyond 30 seconds is not analysed, which bounds both the cost and the memory of a single request.
  • The kind of practice being performed — and therefore what it costs — is decided on the server from the target text, never from a field the client sends.
  • Every stored recording is hashed on write, so a file can be checked against the record of what was stored.

08

Payments

  • We never see or store your card number. Card details go to our payment processor, or to Google Play, directly.
  • Web payment notifications are verified cryptographically before we unlock a plan.
  • A Google Play purchase is never trusted because the app says it happened — we verify with Google.
  • Every provider event is recorded so a retried notification cannot grant the same subscription twice.
09Browser hardeningOptional detail — expand

Every API response carries: strict transport security; a no-sniff content type so a JSON error body can never be executed as HTML; frame denial; a referrer policy that does not leak full paths to third parties; a permissions policy that switches off camera, geolocation, payment and USB; and a cross-origin resource policy limiting who may embed a response.

10Logging and monitoringOptional detail — expand
  • One structured line per request: a request id, method, path, status, how long it took, and the numeric user id when there is one.
  • Request bodies, audio and email addresses are deliberately never logged.
  • The request id is returned to the client, so a learner reporting a problem can quote a number that finds the exact line.
  • A health endpoint reports whether the machine can actually see the model registry, so a server that started but cannot serve fails its check instead of quietly accepting traffic.
  • Fly health checks and deploy logs; operators (founders/admins) watch for failed health and billing alerts. We do not currently publish a public status page.
11Where it runsOptional detail — expand
  • The main API and storage sit in Asia. Voice scoring may process prepared audio outside India.
  • This website and the web app are hosted on a global edge network.
  • Lesson media may be delivered via a content network when published.
  • Exact vendor names are listed under Privacy → Vendor names (optional detail).
12Backups and recoveryOptional detail — expand

Database and storage backups follow our hosting plan. Deleted personal data can remain in encrypted provider backups until those backups are overwritten (typically up to about 30 days).

13

Responsible disclosure

Found a security problem? We want to hear from you.

Write to devesh@vinxign.com with the subject "Security". If you report a genuine vulnerability in good faith and follow the rules below, we will not pursue any legal action against you for the research.

Please do:

  • Give us enough detail to reproduce the issue.
  • Test only against your own account and your own data.
  • Stop as soon as you have confirmed a problem exists. Do not pull data you do not need.
  • Give us reasonable time to fix it before you tell anyone else.

Please do not:

  • Access, change or delete data belonging to another learner.
  • Run denial-of-service tests, spam or social engineering against our people or our providers.
  • Use an automated scanner that degrades the service for learners.

Our commitment: we acknowledge a report within 2 working days, give you an initial assessment within 7 working days, and keep you updated until it is closed. We do not currently run a paid bug bounty.

14

If something goes wrong

If personal data is breached, we will notify the Data Protection Board of India and every affected learner as required by the Digital Personal Data Protection Act, 2023. We will tell you what happened, what data was involved, and what to do about it. Operational response is led by Vinxign Media Private Limited (founders/admins on call for production incidents).

Ask us about anything on this page

If a sentence here is unclear, or you think it does not match what the app actually does, write to us. We would rather explain a clause, or fix it, than have you guess at it.

devesh@vinxign.com

More:PrivacyTermsRefundsCookiesDelete your dataAccessibilitySecurity

Sign & Talkbecause sign can talk

Visual pronunciation practice for deaf and hard-of-hearing learners. Feel the sound, see the feedback, keep going.

COMING TOGoogle PlayThe Android app is not on Google Play yet. Use the web app in your browser today.

Product

How it worksFeaturesPricingGet the appPronunciation analysis

Practice

Phoneme practiceWord practiceSentence practiceBlogFAQ

Partners

Sponsor learnersSponsor portalClinics & therapistsClinic portalPartner terms

Company

AboutFounderContactAccessibilitySecurityPrivacyTermsRefundsCookiesDelete your data

because sign can talk

© 2026 Vinxign Media Private Limited · founded by Devesh Gurjarvinxign.com Made in India for confident communication.