Skip to main content

Legal

Privacy Policy

This describes what Our Elected Portfolios actually does today, not what a policy of this kind usually says. Public research pages remain free of account and analytics cookies. Privacy-minimized first-party aggregate measurement is prepared but stays off unless its rollout control is deliberately enabled. Optional accounts are available. A confirmed-opt-in newsletter form appears only when its launch controls are configured; advertising is prepared in code but is not enabled. Where something is planned rather than operating, this page says so.

Effective · Applies to ourelectedportfolios.com

What this site is right now

Our Elected Portfolios publishes the stock trades that members of Congress disclose under the STOCK Act of 2012, read from the filings the US House Clerk publishes. The Senate’s Electronic Financial Disclosure system is not read, so nothing here covers the Senate. These are public documents about public officials.

The public record covers House filing years from 2013 onward only. Every year must exactly match its official source index before data pages render it. Image-only periodic transaction reports remain in the denominator rather than being dropped; figures on the trade and sector pages are counts drawn from readable filings.

None of that is data about you, which is what bounds the privacy question here. The filings describe public officials. Optional account data is separate from the public record, and anonymous reading does not create a reader profile.

What we collect from you

Anonymous reading does not send us a form value or create an application account record. As of the effective date above, the public research surface does not:

  • set an application account or analytics cookie merely because you read a public page; a displayed newsletter form loads the separately disclosed hCaptcha abuse check;
  • use a third-party analytics or product-measurement service — there is no Google Analytics, Plausible, PostHog, Segment or Vercel Analytics;
  • embed a social widget, video player, comment system or map;
  • load fonts from another company’s servers — the typefaces are compiled into this site and served from this domain. The configuration-gated newsletter form is the hCaptcha script exception, and future advertising is described separately below;
  • require registration or login to read the public record, or offer a general contact form;
  • require payment to read a public filing or database page.

A configuration-gated first-party measurement path is different from those services. When enabled, it reduces each public path and referrer in the browser to fixed categories before sending them to this site. It counts page views, named research actions, attempted ad requests and only the good/needs-improvement/poor rating for LCP, INP and CLS. It cannot accept a raw path, referrer, timing, search term, ad click or reader/entity identifier. The server selects the UTC day and increments an existing aggregate bucket; it does not create an event or visitor ledger. Totals are retained for 400 days by default and are visible in the application only to a Super Admin. The feature remains off unless its deployment flag is deliberately enabled.

A disclosure-detail page is the source-document exception. Its lazy viewer asks the US House Clerk’s own server to deliver the original PDF inside the page. The Clerk can therefore receive the ordinary request metadata your browser sends, including an IP address and user-agent. We send no referring-page header, do not add account information, and do not copy or proxy the document. The separate House.gov link remains available if you prefer to open the official source directly.

Account routes are different. If you register, sign in, recover a password or sign out, we process the values needed for that request. A Supporter workspace also stores watch targets, saved query filters, collections and notes, alert settings, team membership metadata and API-key metadata. API key secrets are shown once; only their hash is retained. We do not sell account or research data.

The newsletter request is also different when its form is shown. It collects the email address you enter, placement/source, the consent and privacy wording versions, lifecycle timestamps and delivery-provider identifiers. It stores only a keyed hash of the confirmation capability, not the raw link token. A pending request is not an active subscription: you must confirm from the email.

Cookies and local storage

The application sets no account or analytics cookie when you read a public page. Public data uses an anonymous, cookie-free server client, and the browser auth client is loaded only on account routes. If the newsletter form is available, that page loads hCaptcha, whose abuse check may use browser storage under the hCaptcha policies linked on the form.

Registering or signing in uses Supabase authentication and sets strictly necessary session cookies so that the site can recognize your session. Signing out removes that session. Those cookies are not analytics or advertising cookies.

Outside services and what they see

The following services can be involved in serving public research, and each observes only the request needed for its role:

  • Vercel hosts and serves the site. Every request you make passes through Vercel’s network, which records the ordinary contents of a web server log: your IP address, the time, the URL requested, the response status, and the user-agent string your browser sends.
  • Supabase hosts our database. It sees the queries our server makes on your behalf. Those queries carry no information about you — the public pages are identical for every visitor except when you submit the newsletter form or the optional aggregate collector is enabled. That collector sends only the fixed categories described above. On account routes, your browser connects to Supabase to register, authenticate, recover an account or end a session. Newsletter email and consent evidence are written by our server to private, deny-all tables.
  • The US House Clerk serves the official PDF inside a disclosure-detail page. Its server receives the document request from your browser, including ordinary network metadata such as IP address and user-agent. The viewer sends no referrer, account identifier or research note. The Clerk is the government source of the filing, not our analytics or advertising provider.

We do not receive the Clerk’s request logs. We do not export, aggregate, enrich or profile the Vercel or Supabase logs available to us, and we do not combine them with anything else. We also have not configured a retention schedule of our own for those logs: Vercel and Supabase retain them under their own policies and plan defaults, and we would rather tell you that than print a confident number we do not control. Vercel and Supabase act as processors for us and have their own privacy documentation; the Clerk is the independent government source of the filing.

hCaptcha is used on account forms and, when available, the newsletter form to reduce automated abuse. It can receive network, device and interaction signals needed to make that determination. Upstash supports API rate limits, including the optional analytics endpoint. It receives an IP-keyed short-lived rate-limit check; requests that exceed the limit can create the separately retained security/rate-limit record described below. Resend receives the requested email address and message contents to deliver newsletter confirmations, generic editions, and personalized Supporter alerts, and reports bounces, complaints and suppressions back through a signed webhook. Stripe receives the account email, internal user identifier and billing details needed to sell or manage the sole $9.99/month Supporter subscription; card details do not pass through our application. Our database rate-limit table records an IP address in one case only — when a caller to one of our API endpoints is throttled for making too many requests. Ordinary public page views do not write that table; only an over-limit API request can do so.

Browser security reports

The site sends a strict Content Security Policy, and asks your browser to report violations of it back to an address on this same domain. If your browser sends such a report — usually because something tried to inject a script, or because we misconfigured a rule after an update — it contains the page URL, the rule that was broken and the resource that was blocked. We write a truncated copy to our server log, rate-limited, and never to the database. It is a security signal, not a measurement of you, and it is not used to build any profile.

Advertising: prepared, not running

The plan is for this site to be free to read and funded by advertising. The application contains a dormant Google AdSense loader, placements, publisher verification metadata and an ads.txt route. Without a valid publisher configuration they render no ad, load no Google script and set no advertising cookie.

Signed-in Supporters receive no ads. The public layout checks the account entitlement through this site before requesting an ad provider; a Supporter or an unavailable entitlement check makes no Google advertising request.

Configuration is not permission to activate advertising. Before ads are enabled, the site still needs AdSense approval, counsel review, a Google-certified consent platform where required, and controls appropriate to the regions served. Once active, Google and its partners may use cookies or device identifiers to deliver, measure and personalize ads. This section and the effective date must be updated with the final choices before that activation.

Accounts, newsletter and email

Accounts are optional and the public record does not require one. Supabase stores the email address, authentication credential and session information needed to provide an account. We may also store security and lifecycle timestamps. Passwords are handled by the authentication provider rather than exposed to this application.

Newsletter subscription is optional and independent of an account. We do not enroll an account holder automatically. A request remains pending until its one-time email link is confirmed; every later edition must include a visible unsubscribe link and a mailbox-provider one-click unsubscribe mechanism. Unsubscribe, bounce, complaint and suppression states stop further editions.

hCaptcha protects registration, sign-in, recovery and newsletter request forms. Its use is governed by the hCaptcha privacy policy and terms. Password-recovery and newsletter-confirmation email is sent only when requested. Responses are deliberately generic so an attacker cannot test whether an address has an account or subscription.

Information about members of Congress

Worth separating from the above: the filings this site reads contain personal information about members of Congress and, in some cases, their spouses and dependent children, because federal law requires those disclosures to be filed and published. That information comes from the official public record, not from us. The site publishes selected transaction facts and aggregate counts from those filings, with links to the redacted House source documents. It does not republish an unredacted copy of a filing.

It is not reader data, and none of this policy — which is about you — governs it.

Your rights, and what we can honestly do

Privacy law in several jurisdictions gives you the right to see, correct, delete or port the personal data an operator holds about you. We take those rights seriously, and we also want to be straight about the limits here: anonymous readers have no application profile, and the optional aggregate counters cannot be used to retrieve a reader’s history. An account holder can ask about correction, export or deletion of their account data. A newsletter subscriber can unsubscribe from any edition; privacy requests about the email and consent record may be sent to the address below.

The exception is the request logs described above, which sit with our hosting providers. If you want those addressed, tell us and we will pass the request on, though we cannot promise an outcome we do not control. You can also ask us questions about anything on this page and we will answer them.

Children

This public-records reference is not directed at children. We do not knowingly invite a child to create an account. If you believe a child has provided account information, contact us so the request can be reviewed.

Changes to this policy

We will update this page when the site changes, and the effective date at the top will move. Newsletter edition delivery, advertising activation, a new account use, analytics, or a new data recipient requires this policy to be reviewed in the same change set.

Contacting us

We do not have a general enquiries address yet, and we would rather say so than print one that bounces. The one monitored inbox is:

security@ourelectedportfolios.com

It was set up for security reports, and security reports take priority there, but privacy questions about this page are welcome at the same address until a dedicated one exists. Please do not include sensitive personal information in your message — there is no need to identify yourself to ask us a question about this policy.