Privacy Policy

Last updated: October 1, 2026

1. Who we are

Electronic Vote is a commercial online voting and meeting tool operated by Patten Labs. Hosts create sessions, share a join code, collect ballots, and view or export results. This policy describes personal information the product actually stores. It is not legal advice and does not claim certification under a specific privacy statute.

Privacy questions: info@patten-labs.com. We do not publish a street address or phone number.

2. Scope

This policy covers electronic-vote.ca: account holders (hosts and other signed-in users), people who join a session with an access code, observers, and people who submit the contact or feedback forms.

3. Account holders

When you create an account we store your email address. Passwords are handled by the Base44 authentication service; this app does not store raw passwords. If you provide them, we store first name and last name. We also store the Terms version you accepted and the server timestamp of that acceptance (terms_version, terms_accepted_at).

The account record also holds plan and billing metadata (plan_type, subscription_status, subscription_current_period_end, subscription_cancel_at_period_end, stripe_customer_id, stripe_subscription_id), a lifetime sessions_created_count, and a role (user or admin). Trial and email flags we store are trial_ends_at (only when an extension is granted), trial_ending_email_sent, paid_welcome_email_sent_for_plan, and welcomed. Corporate-plan fields, when they apply, are corporate_domain, corporate_admin_email, is_corporate_admin, and corporate_access_blocked.

4. Sessions, polls, and votes

Hosts create sessions. We store session content and settings: title, description, schedule, join code and rotation history, quorum, registration questions, co-admin emails, and related flags (anonymous voting, required name or email, live results, named choices, observers, attendance, trash and archive timestamps).

Polls store the question, description, options, matrix rows, type, status, order, and optional timer.

Each vote stores the selected options, a text response, or matrix answers; voter_name and voter_email when those were collected; registration_answers the voter submitted; and a client_request_id generated on the device so a retried submit updates the same ballot instead of creating a second one. Live ballots are also stored in a Supabase votes table used by the product.

5. Voters who join with a code

Voters do not need an account. Depending on how the host configured the session, we may store a name, email, and answers to the host’s registration questions. The same identity (voter_name, voter_email, registration_answers, and vote ids) is kept in that device’s browser storage so a refresh does not lose the voter. We do not put an account sign-in wall in front of ordinary join-code voting.

6. Attendance and presence

If the host turns on attendance tracking, we store attendance rows: name, optional email, how the person was recorded (self, guest, or admin), who recorded them, and a snapshot of registration answers.

Observer presence stores a random device token, a kind (observer or voter), and a last-seen time. It is not tied to a name or email.

When a host or co-admin has a session page open, we store their email, last-seen time, and an optional “currently editing” hint so other admins of that session can see who is on the page.

7. Contacts and saved settings

Hosts may save address-book contacts (email, optional name, optional note) for autofill. Each user can save AppSettings: default poll option sets, default registration questions, and default session flags. Corporate-plan admins can publish company-wide default questions or option sets, which include the publisher’s email and company domain.

8. Payments

Paid plans are billed through Stripe. We store Stripe customer and subscription identifiers and plan status on the account. We do not store full payment card numbers. Stripe webhook event ids are stored so the same event is not processed twice.

9. Feedback, contact form, and errors

The contact form and in-app feedback store type, subject, message, page URL, submitter name, and submitter email, and send a copy to the operator.

When the app hits an error, we may store the message, error code, HTTP status, source, context, page URL (join codes and tokens are redacted), route, signed-in user email if any, browser user agent, viewport size, language, online flag, and a stack or diagnostic detail.

10. Product events

The host session page records two product events through the Base44 analytics helper: voting_session_initiated and voting_session_completed, with session_id, poll_count, and (on complete) vote_count. The app build also enables Base44’s analytics tracker. This codebase does not include Google Analytics, advertising pixels, or similar third-party marketing trackers.

11. Device storage

The browser may keep an authentication token so you stay signed in; voter identity and vote-request ids for a join code; theme preference; UI preferences such as hidden polls; a sidebar open/closed cookie; and pending email-verification details in session storage during signup.

12. Uploads

Spreadsheet and text poll imports are parsed in the browser. Word (.docx) poll import uploads the file to private app storage and sends a short-lived signed URL to an AI extraction function so questions can be read from the document. Registration-question imports are parsed in the browser. The product does not offer general file hosting or profile photos.

13. How we use this information

We use it to operate the product: authenticate hosts, run sessions, record votes, show results to hosts (and to voters when the host enables that), process subscriptions, send transactional email, fix errors, and respond to contact or feedback.

14. Who can see it

You can see your own account and, if you are a host or co-admin, the session data you administer, including votes and registration answers. Other voters see live totals only if the host allows it. They see names attached to choices only if the host turns on named voter choices and the session is below the product’s large-session size gate. Patten Labs operators can access data as needed to run and support the service (for example error logs and feedback). The providers listed below process data to provide their service.

15. Service providers

From this codebase, the product uses Base44 (application hosting, authentication, most records, private file upload, and the analytics helper), Supabase (live vote storage), Stripe (payments), Resend (transactional email, with a Base44 email fallback if Resend is not configured), and Google Fonts (the Inter typeface is loaded from fonts.googleapis.com). We do not list advertising networks. We have not independently mapped every sub-processor of those providers.

For Word poll import, a .docx is uploaded and a short-lived link is sent to an AI extraction function. The provider of that function is not identified in the product, and we do not know whether it keeps the file or uses it for training.

16. Email we send

The authentication service sends email-verification and password-reset messages. The product can send a welcome email, a trial-ending reminder, a paid-plan welcome, and a notice when a host adds a co-admin. Operators receive email for feedback submissions and for error-volume alerts. This codebase does not run a marketing newsletter.

17. Retention

Active and closed session data stays until the host deletes the session or the account is deleted. After a host exports a closed session, the product can move it to trash 14 days later, then permanently delete it 30 days after that. Sessions put in trash are permanently deleted after 30 days, including their polls, votes, and attendance. Observer and admin presence rows are removed when they go stale. Error logs older than 90 days are deleted unless they are still marked new (untriaged). Stripe webhook ids are treated as safe to drop after 30 days; there is no automatic purge job for them yet. Account deletion cancels the Stripe subscription and deletes the user record and sessions that account created, including those sessions’ polls, Base44 vote rows, live Supabase ballots, and attendance rows. It also deletes live Supabase ballots and attendance rows keyed to the account email. Anonymous ballots in sessions the account did not create are not removed, and rows under a different email are not removed unless they sit in a session that account created. Browser storage stays until the user clears it. Feedback, contacts, and saved settings have no automatic expiry in the code.

18. Your choices

Hosts and other signed-in users must accept the current Terms of Service before using the signed-in product. You can read the Terms and this policy without accepting. You can update your profile name, cancel a subscription, or delete your account from the product. Voters who only use a join code can leave the session and clear their browser data. You can email info@patten-labs.com to access or correct your information.

19. Changes

We may update this policy. The date at the top will change. If we also change the Terms version, signed-in users will be asked to accept again before using the signed-in product.

20. Governing context

Patten Labs operates this commercial tool for use in Ontario, Canada. We do not claim that processing stays in Canada. Questions: info@patten-labs.com.