We collect the minimum information required to operate Blue Beacon Research (account identifiers, preferences, and usage metrics). We do not sell your personal information.
Paid plans cannot be purchased through this site yet. Before any payment details are collected, payments will be handled by a third-party payment processor and this policy will be updated.
Analytics may be used to improve product reliability and user experience. Questions about analytics can be sent to support@bluebeaconresearch.com.
Contact support if you want to request export or deletion of your data.
What we collect
Blue Beacon Research publishes geopolitical and economic research for commodity markets. Assessments are produced with automated language-model classification. Anthropic is the processor for those model requests, as described below. These are the user-linked records the application actually writes. Each name is a table in our database.
- Account. Email-and-password sign-up, or Google sign-in, is handled by Supabase Auth. Creating an account inserts a profiles row with your name (the name you type, the name Google sends, or the part of your email before @), your plan tier, and flags for onboarding and the product tour. If a device registers for mobile alerts, that push token is appended on the same row. Signing in can also store a row in user_sessions: a session id and a short device label taken from the browser user agent (browser and operating system). The access token is not stored in that table.
- Preferences. user_preferences stores regions, commodities, forex pairs, watchlist symbols, whether those symbols were suggested, minimum severity, time zone, quiet hours, theme, email frequency, whether the email digest is on, an optional use case, and when onboarding finished.
- Alerts. alert_rules stores the rule name, regions, commodities, forex pairs, minimum severity, channels, and frequency. alerts_sent records each attempt: channel, status, delivery time, and the reason the rule matched. A Telegram reply of useful, not useful, or mute topic is stored in alert_feedback.
- Channels you connect. user_channels stores a Telegram chat id, a Slack webhook URL, and a Discord webhook URL, with the time each was connected. Alert text is sent to a webhook URL only after you save it.
- API keys and webhooks. api_keys stores a name, a hash of the key, and a short prefix. The full key is shown once and is not written to the database. webhook_endpoints stores the URL, name, and filters you register. webhook_deliveries stores the payload, status code, and response body of each attempt, linked through that endpoint.
- Chat, feedback, and usage. signal_chat_messages stores the text of your questions and the replies, for your account and one signal. feedback_submissions stores the message you send from Help, an optional email, and the page you were on. events stores a product event type and metadata such as a signal id, region, or commodity, tied to your account.
- Waitlist. waitlist stores the name and email submitted when you join the waitlist, and your account id when you already have one.
Who processes data
These services are referenced in this repository's dependencies or environment variables.
- Supabase stores the database and authentication (@supabase/supabase-js, SUPABASE_URL).
- Vercel hosts the website (apps/web/vercel.json). Named product events are sent with @vercel/analytics. The automatic pageview component is not mounted.
- Railway hosts the API and background workers (the worker process reads RAILWAY_SERVICE_NAME).
- Upstash provides Redis for rate limits and job queues when UPSTASH_REDIS_REST_URL or REDIS_URL is set (@upstash/ratelimit, @upstash/redis).
- Resend sends email when RESEND_API_KEY is set (resend).
- Sentry receives error reports and a sample of traces when SENTRY_DSN or NEXT_PUBLIC_SENTRY_DSN is set. That initialization does not attach your account id or email.
- Anthropic receives the model requests described below when ANTHROPIC_API_KEY is set (@anthropic-ai/sdk).
- PostHog, hosted in the EU region, counts page visits and sign-up steps after you accept, and only when NEXT_PUBLIC_POSTHOG_KEY is set (posthog-js). It is off until then. Cookie settings in the footer changes the choice. The application does not call PostHog's identify method.
- Voyage AI receives the text of a search query at api.voyageai.com when VOYAGE_API_KEY is set. The request body is the query text and the model name, not an account id. If that key is unset, the query is embedded on our servers and is not sent.
- Google handles Google sign-in. The site also loads font files from fonts.googleapis.com and fonts.gstatic.com.
- Telegram receives an alert only after you connect a chat and only when a bot token is configured. We store the chat id on user_channels.
Retention
A weekly job (Sunday 03:00 UTC) deletes commodity price rows whose fetch time is older than 90 days. It deletes raw news rows older than 180 days only when a signal already references them. Raw news that has not been turned into a signal is left in place. That job does not delete signals.
Session rows last seen more than 30 days earlier are deleted the next time that account signs in. Account, preference, alert, chat, and feedback rows are not covered by these jobs.
Cookies and analytics
The cookies this application writes are the Supabase auth session cookies. The server stores the cookies the Supabase client asks it to set. Those names match sb-<project-ref>-auth-token, including a numbered suffix when the value is split into chunks.
PostHog, hosted in the EU region, counts page visits and sign-up steps. It is off until you accept. Cookie settings in the footer changes the choice. It runs in the browser only when the analytics key is set. Viewing a signal and creating an alert rule are sent to PostHog only after you accept. Those named events can also go to Vercel Analytics through its track call and, once you are signed in, to the eventstable. This application does not call PostHog's identify method, and it does not set an analytics cookie by name.
Campaign tags on a link (utm parameters) and the referring site's host name are stored in the browser for that visit only after you accept analytics, and are saved with your account if you sign up. A lead or sign-up form still sends campaign tags that are on the page address when you submit, even if you have not accepted. No cookie is set for this.
Data sent to Anthropic
Model requests do not include your account id, email, or name. If you type those details into a question or a search, that text is sent as you wrote it.
- Classifying a news event sends the event title, country, event type, and event date. When the feed stored a summary, it also sends a cleaned excerpt of that summary (markup removed, cut under 400 characters). Items with no usable summary, including GDELT items, are sent without an excerpt. The request also includes either the title and age of a recent signal that may be the same story, or a yes/no note that a similar story was logged in the last 48 hours, plus a list of public names used to judge whether the story is about someone with a documented market reaction.
- Writing a signal briefing sends the signal title, summary, region, country, severity, and the commodity and currency-pair impact fields.
- Checking whether a chat question is about that signal sends the signal title and the text of your message.
- Answering a chat question sends the signal title, summary, briefing, region, country, severity, confidence, commodity and currency-pair impacts, source count, event date, and source URLs, plus up to 10 earlier turns (role and text only) and your new message. The account id used to load those turns is not included in the request.
- Search assist sends your query text and one retrieved page's title, URL, and text.
Weekly email and enquiries
If you sign up for the weekly email, we store your email address, the consent wording you agreed to, the date of that consent, and the page you signed up from. We use that record to send the weekly research email. You can unsubscribe at any time.
If you send an enquiry, we store the enquiry details you submit, the consent wording, and the date. We use that record to reply to the enquiry.
You can ask for deletion of either record by emailing support@bluebeaconresearch.com.
Your rights
To request an export or deletion of your data, email support@bluebeaconresearch.com.