FASOLA
How it worksSkillsInstrumentsSupportOpen web beta

FASOLA PRIVACY

Your practice
stays yours.

Last updated September 4, 2026

Fasola works without a Fasola account and without behavioral advertising or general-purpose usage analytics. Account-enabled versions offer optional sign-in so Pro access can be used on supported mobile and web devices; practice progress still remains local.

Information stored by the app

Fasola stores practice progress and preferences locally on the device or in the current browser profile. This includes exercise identifiers, right and wrong results, mastery and streak calculations, session dates and durations, accessibility choices, response-time settings, and the selected instrument.

The app does not intentionally store recognized words or retain microphone recordings as part of practice history. Deleting the app normally removes its local data, subject to device backup settings. On web, clearing Fasola's site data removes local progress and downloaded pack data.

Microphone and speech recognition

Microphone access is optional and is requested for hands-free answers, voice commands, and pitch-production exercises. Where available, learners can use tap controls instead and can revoke permission in system settings.

Spoken answers are recognized through the service selected by Android or iOS. Depending on the device, settings, installed service, language, and network, audio and results may be processed on-device or by the platform provider. HartmannTek does not operate a speech-processing server.

Pitch exercises analyze microphone samples in memory to estimate pitch. The current implementation does not intentionally retain or upload a recording.

Audio and network use

Authored lesson narration and the minimum musical practice set are included with the app. Complete English, Spanish, Brazilian Portuguese, French, German, Italian, and Korean narration packs are free downloads. Fasola downloads a selected pack from private Microsoft Azure Blob Storage and stores it in local app or browser data. Browser downloads use redownloadable Cache Storage plus an active manifest in IndexedDB. If a pack is absent, supported practice prompts use localized system speech instead.

To authorize a download, the app sends Fasola's Azure access service the requested pack identifier, a random app-user identifier, and a separate random installation identifier stored locally for that installation. Native and signed-in clients use their RevenueCat app-user identifier; a signed-out browser requesting a free language pack uses a separate browser-local random identifier. All language narration packs are allowlisted without an account or paid entitlement. The authenticated paid-download implementation additionally verifies a Fasola access token and derives the customer identity server-side before checking Fasola Pro with RevenueCat. This path requires a compatible account-enabled app version. When allowed, it returns read-only Blob download links that expire after 15 minutes. Azure also receives ordinary connection information, including the source IP address, while handling the request and download.

For abuse and cost controls, Fasola stores small hourly or daily issuance counters in Azure Table Storage. Counter keys are keyed-HMAC pseudonyms of the source IP address, app-user identifier, and installation identifier instead of those plain values, and expired partitions are removed on a rolling schedule. The service also sends a bounded operational trace to Application Insights with the outcome, status, duration, pack kind, and a shortened keyed-HMAC client pseudonym. A controlled deployment check may add a random, short-lived correlation token to its two test traces. Traces are retained for 30 days and do not contain the plain identifiers, request body, practice history, speech transcripts, microphone recordings, learner-created audio, secrets, or download links. Counters and traces support availability, security, abuse, and cost monitoring, not advertising or behavioral analytics.

The current app does not include advertising, general-purpose behavioral analytics, or cloud synchronization of practice progress. Platform services, Microsoft Azure, app stores, operating-system backups, speech providers, RevenueCat, and a user's network may handle information under their own terms.

Optional Fasola accounts

Account-enabled versions use Microsoft Entra External ID for optional sign-up, sign-in, account recovery, and session management. Microsoft may process the email address, display name, authentication events, and recovery information needed to provide that identity service on Fasola's behalf. Native session tokens use encrypted operating-system storage; the web version keeps OAuth tokens only in memory and clears them when the page reloads, without persisting them in browser storage. Access tokens are sent only to Fasola's configured HTTPS account and authenticated download services and are never sent to RevenueCat or added to Fasola diagnostic events.

The account endpoint stores a SHA-256 pseudonym of the Microsoft tenant/user pair, a random Fasola account ID, a separate random RevenueCat App User ID, and the creation time in Azure Table Storage. It does not store the token, display name, or email address in that table. A display name and masked email hint may be returned transiently to the signed-in app. Application logs contain only generic success or failure events, not tokens or account identifiers.

Signing out removes the local session but does not delete provider, RevenueCat, or Fasola account records. Account deletion can be requested through the data-deletion process. Sign-in is optional, but using one Pro entitlement across devices requires it.

Account deletion

Versions offering Settings → Account → Delete account and data let you request deletion after confirmation. Acceptance blocks new account access and resets local data on that device; provider deletion is retried until RevenueCat and Microsoft confirm removal. It is not instant completion. Temporary provider identifiers are then erased, with a pseudonymous safeguard retained for two days to prevent previously issued tokens recreating the account. Other devices' local learning data must be reset separately. See the data-deletion instructions for older versions or lost devices. Deletion cancels RevenueCat Web Billing subscriptions, but does not cancel Apple or Google subscriptions or issue refunds.

Purchases and subscription access

Optional Fasola Pro purchases are processed by the Apple App Store, Google Play, or RevenueCat Web Billing, which uses Stripe as its payment gateway. Fasola does not receive or store a learner's full payment-card details. Fasola uses RevenueCat to retrieve products and localized prices, validate purchases, restore access, provide the web customer portal, and determine whether Fasola Pro is active.

Before sign-in, the RevenueCat SDK creates a random anonymous app-user identifier. After sign-in, Fasola sends RevenueCat only the separate random fasola_… identifier issued by the account endpoint, allowing eligible entitlement state to be associated with the same Fasola account across supported devices. RevenueCat may process device and operating-system information, app activity times, purchase and subscription history, Apple receipt data, Google purchase tokens, and web billing transaction information on HartmannTek's behalf to provide purchase functionality, prevent fraud, and provide purchase analytics. Stripe processes web payment information under its own terms.

Fasola does not send RevenueCat a learner's practice history, microphone recordings, speech transcripts, name, email address, identity-provider token, or advertising identifier. RevenueCat's current privacy information is available at revenuecat.com/privacy, and Stripe's privacy information is available at stripe.com/privacy.

Purchase history is retained by the applicable app store or web billing provider under its terms. Learners can manage or cancel an annual subscription through the applicable store account or web customer portal and refresh or restore eligible purchases from Fasola's Membership screen. Signed-in account access can reflect the same RevenueCat entitlement on supported devices; it does not move or change the underlying transaction.

Diagnostics

Fasola stores a bounded log of up to 100 diagnostic event summaries on the device to help identify audio and speech failures. This local log can survive a crash or app relaunch and remains until the learner clears support diagnostics in Settings or removes the app's local data. Fasola never transmits these on-device events automatically. This local log is separate from the narrow Azure access-service operational traces described above. The log redacts common secrets, contact information, URLs, file paths, and long identifiers, and is not intended to contain transcripts or raw audio.

Website forms

If you use the support form on this website, Fasola receives the name, email address, topic, and message you submit. The message is stored in private Microsoft Azure Table Storage and used to review your request and reply to you. Fasola does not add your IP address to the stored support record, though Azure receives ordinary connection information while handling the request.

To limit automated form abuse, the website temporarily stores a one-way hash of the network address supplied by Azure, grouped into an hourly counter. The address itself is not stored in that counter, and expired counters are deleted on a rolling schedule.

Support messages may be retained for customer service, security, and reasonable business recordkeeping. They are not sold or used for advertising. You may use the support form to request correction or deletion of a previous message.

If you previously requested Fasola product updates, the email address and signup placement you submitted are stored separately in private Microsoft Azure Table Storage. Those records are used only for Fasola and Fasola Pro availability updates. You may use the support form to request removal from that list.

Age suitability and younger learners

Fasola is intended for learners age 13 and older, including teens and adults. It is not designed for or directed to children under 13, and children under 13 should not use the app. A learner who has not reached the age of legal majority where they live should use Fasola with permission from a parent or legal guardian, including the store account holder's authorization for any optional purchase.

Fasola applies the same privacy-protective design to every learner: it has no advertising or advertising identifiers, keeps practice history on the device, and makes microphone use optional. The optional account flow asks for the identity information needed for sign-in and recovery but does not ask for age. Please do not submit personal information about a child through the website support form. A parent or legal guardian who believes information about a child has reached a Fasola-operated service may use the contact or deletion process below.

Material changes to data handling will be reflected here with a new date. Questions may be directed through the Fasola support page. Instructions for removing local data or requesting deletion of identifiable server records are on the Fasola data-deletion page.

FASOLA

Listen · name · learn

How it worksSkillsInstrumentsLaunch updatesSupportPrivacyData deletion

© 2026 HartmannTek, LLC
Jacksonville, Florida