HavaraPrivate by invitation

Havara: Security Overview

Effective October 30, 2026

Last updated October 16, 2026

This is a plain-English summary of how Havara protects community data, written so that boards, management companies, and other buyers can understand our security posture without reading the source code. It describes the product as it is built today, not aspirations. Where a control is optional or not yet in place, we say so plainly.

Havara is a multi-tenant mobile app (iOS and Android, built on Expo / React Native) with a web console, for HOA and residents' communities. One person can belong to several communities and switch between them. The backend is a hosted Supabase project (Postgres database, authentication, file storage, and serverless Edge Functions). Anyone can create a bare account, but an account alone grants access to nothing: joining a community requires a board-issued invite or an approved join request. The product is invitation-only at the community layer.

Questions about this document: [email protected].


Architecture: multi-tenant with Row-Level Security on every table

Havara runs every community on shared infrastructure (a single Postgres database), and keeps communities separated logically rather than on separate servers. The separation is enforced in the database itself:

Authentication: email + password, Apple and Google sign-in, PKCE reset, session storage

Encryption: in transit and at rest

Data isolation: RLS plus community scoping

Isolation is not a single feature; it is the combination of the controls above:

Backups and recovery

Access control: board capabilities and least privilege

AI safety: documents-only, permission-filtered, guardrails

The AI "Ask" tab answers questions from a single community's own governing documents (CC&Rs, bylaws, rules, minutes, budgets, policies). It is built to be constrained, not open-ended:

Account deletion and data export

Account deletion and the personal data export are available in-app and act only on the requesting user. The community record export is for a community's administrators and is described at the end of this section.

Subprocessor management

Havara uses a small set of third-party services ("subprocessors") to run. The list below reflects what is actually wired into the product. Two entries (PostHog, and TypeSafe) do nothing today: PostHog unless explicitly configured, TypeSafe until its activation is approved. Every other entry in the table below is live and processing today. The table covers the vendors wired into the app itself; the canonical list, read against the app on 2026-09-25, is the Subprocessor List, which also covers Stripe (community billing) and Cloudflare (DNS, TLS, CDN, and hosting for the web console and marketing site).

SubprocessorWhat it doesData it seesRegion
SupabasePrimary backend: database, auth, file storage, Edge Functions, push orchestrationAll account data, memberships, user-generated content, documents and embeddings, AI Ask history, push tokens, notification preferences, audit/moderation records; Supabase's own request and sign-in logs (each request's IP address, user agent and the approximate location derived from it, with the member's user id when signed in and the email address on sign-in events, kept 7 days)Hosted Supabase project in the United States, region us-east-2 (US East / Ohio)
OpenAIText embeddings for Ask search, and the moderation service every Ask question is sent to before it is answered (a moderation call that times out or errors lets the question through rather than blocking it). Does not perform OCR; scanned PDFs go to AWS Textract (see the AWS row). (OpenAI does not generate answers or thread titles; titles are derived on the device with no AI call.)Document text, in chunks, when a document is indexed; and the member's question text, sent twice: once to the moderation endpoint and once to the embeddings endpoint, prefixed on a follow-up by the previous question in that thread. Not the retrieved excerpts, which go to Anthropic. No account identifiers in the request bodyUS-based API (api.openai.com)
Amazon Web ServicesOptical character recognition of scanned / image-only PDFs, via Amazon Textract's asynchronous plain-text detection (StartDocumentTextDetection). The PDF is copied to a private, encrypted, public-access-blocked S3 bucket for the duration of the scan and Havara deletes that staged copy after the scan, with a 1-day lifecycle rule as backstop. AWS's service terms allow it to store what Textract processes to provide and maintain the service, and would also let it use that content to improve Textract and other Amazon AI services, and keep some of it in another AWS region, unless an AWS AI services opt-out is in place; Havara has had that opt-out in place since September 23, 2026, covering Textract and every other AI service the policy covers. Documents that already contain selectable text are never sent.The bytes of scanned PDFs with no text layer, and the text recognized from them. No account or community identifiers are sent; the staged object's key carries the document's internal id.US-based API (textract.us-east-1.amazonaws.com, s3.us-east-1.amazonaws.com)
AnthropicGenerates the cited, documents-only Ask answer from retrieved excerptsThe question, prior turns in the thread, and the retrieved document excerpts; no account identifiers in the request bodyUS-based API (api.anthropic.com)
Expo (EAS / push)Delivers push notifications; also the build/distribution pipelineDevice push tokens and notification title/body/route (which may include message previews unless the member turns previews off)US-based service (exp.host)
AppleiOS app distribution (App Store / TestFlight), APNs push delivery, and Sign in with Apple (iPhone app from version 2.3 (tester-only; public from version 2.4 on or after October 30, 2026))App distribution metadata and APNs push payloads relayed to iOS devices; the member's Apple sign-in, the code exchanged for a refresh token, and that token sent back at deletionUS-based service
GoogleAndroid push delivery through Firebase Cloud Messaging, Android app distribution through Google Play, and Google sign-in (version 2.3 for testers; public from version 2.4 on or after October 30, 2026). The iPhone library separately declares App Functionality and Analytics.Android push payloads (the same title and body Expo receives, which may include message previews unless the member turns previews off) and app distribution metadata; the member's Google sign-in (identifier, name, email address, profile photo link), with no Google token kept on Havara's servers (Google's sign-in library keeps the sign-in on the member's phone until the member signs out of Havara there; a session that ends another way does not clear it, as Authentication above says). Google's iPhone library also declares Name, Email Address, Phone Number, Coarse Location, User ID, Device ID, Other Usage Data and Other Data Types, with the individual purpose sets in Privacy Policy Section 3. The app invokes it at every native sign-out of a real account with configured client IDs, even for non-Google members. Transmission timing, exact Other Data Types fields and SDK retention are unverified; local token cleanup does not guarantee erasure of Google-held SDK records. Android declaration parity was not assessed by this iPhone check.Google global infrastructure
TypeSafeConditional, currently disabled. If Havara switches it on, after 30 days' notice on the Subprocessor List, it would judge how well retrieved excerpts support an Ask answer; nothing is sent to it todayThe current question, at most the preceding question, and up to six retrieved excerpts; no account, community or document identifiersRegion to be confirmed before activation
Resend (LIVE since 2026-08-05)Sends email: sign-in emails, community invitations, member email about a member's own account, home and community, email copies of notifications a push did not reach, vendor quote-request relays, announcement email mirroring, and operator alerts. The Subprocessor List has the full listRecipient email addresses and what each email says: for example the community name and invite code; vendor contact details and, on a quote relay, the requesting resident's phone number and email address; announcement content mirrored to member emailUS-based services (api.resend.com, and smtp.resend.com for sign-in emails)
PostHog (optional)Product analytics. Double-gated: requires both an analytics key (not set) and the individual member's in-app opt-in (default off, fail-closed)Event names with non-PII properties (ids, enums, counts) and a distinct user id; by enforced rule, no email, phone, push tokens, or message bodiesPostHog US cloud by default; EU/self-hosted host is configurable
Sentry (LIVE since 2026-08-26)Crash and error reporting on every production app build; the native SDK owns uncaught JS errors and native crashes from the first native-crash store build. Performance tracing, profiling, replay, session tracking, console logs and HTTP breadcrumbs are disabled in the appThe error type and message; the stack trace when a real Error was thrown; the event level, environment and release; a caller-supplied call-site scope and context object; the signed-in account's Supabase user id; the approximate location (city, region and country) Sentry derives from the IP address each report arrives from, kept with the report; and, from app versions that do not ask Sentry not to keep it, possibly that IP address, which Sentry keeps only while its project setting against storing IP addresses is off (not yet checked against a stored event). Never message bodies, email, phone or push tokens. From the console update adding browser error reporting, the console uses the Sentry browser SDK for route, global error and unhandled rejection reports, with account id only and navigation paths stripped of queries and fragments. Messages are scrubbed for email-shaped text and strings are bounded; cookies, request headers and bodies, IP and geo are removed before send. IP inference is set to never, but the service still receives the connection address and can derive approximate location. The console collects no replay, performance traces or breadcrumbs beyond navigation paths. From the first store build carrying native crash reporting, reports also include native crash stacks; device details (manufacturer, brand, model, processor and chipset, screen size and density, orientation, and whether it is an emulator); operating-system details, including whether the device appears rooted or jailbroken; memory, storage capacity and free space; battery level, charging state and temperature, and thermal state on iPhone; the device's language setting (locale) and time zone; its network connection type and whether it is online; when the device last started up; an installation identifier; on iPhone, a device-and-app hash derived from Apple's identifier for vendor, device model and app bundle id, sent whether signed in or not; on Android, which permissions the app requests and whether each is granted; whether the app was in the foreground and when it started; app memory and build type; app version and build metadata, including the over-the-air update id, runtime version and launch duration; diagnostic correlation metadata such as trace and span identifiers; and automatic app-lifecycle and device-state breadcrumbs, Android network-change breadcrumbs (network type, signal strength, upload and download bandwidth, and whether a VPN is active), and iPhone system-event breadcrumbs (keyboard shown or hidden, screenshot taken, time zone changes with the previous offset, and significant time changes such as midnight or daylight saving). iPhone native screen-view and touch breadcrumbs are disabled. Android also retains activity-lifecycle breadcrumbs and interaction breadcrumbs containing the view class and id, not its text. Android app-not-responding reports include the stacks of each app thread: on Android 11 and later when the system flags the app as frozen, and on Android 10 and earlier when the app's main thread has been blocked for five seconds. Available fields vary by platform and report. Performance tracing, profiling, replay, session tracking, console logs and HTTP breadcrumbs are disabled. While someone is signed in, the report's user field is the account id; Android reports also carry the installation identifier and iPhone reports the device-and-app hash, signed in or not. A report sent while no one is signed in, or before the app restores sign-in, can carry the installation identifier as its user id instead. The app asks Sentry not to infer or store an IP address for JavaScript and iPhone reports; Android native crash reports carry no IP address supplied by the app. Each connection still carries an address and Sentry can retain approximate geography. That approximate location can include city, region and country.Sentry US ingest endpoint (o4511541325004800.ingest.us.sentry.io)

Version 2.3 was available only to testers. The first public version offering Apple and Google sign-in is 2.4, available on or after October 30, 2026.

How we manage this list:

Certifications and roadmap

We want to be precise here, because security claims are easy to inflate.

We deliberately avoid marketing language like "bank-grade," "military-grade," or "unhackable." No system is perfectly secure. What we offer instead is the specific, verifiable set of controls described above, and an honest account of where we are on the path to formal certification.


Provider: Havara LLC, a Georgia limited liability company, 525 Tribble Gap Rd, P.O. Box 724, Cumming, GA 30040 Security contact: [email protected]