Weft Privacy Notice
The short version
- We collect what you give us to run your account: your email address, password (stored only as a hash), optional name and investor answers, and the research, watchlists, portfolios and alerts you create.
- We use it to provide Weft. We do not sell it, we show no advertising, and Weft has no analytics or tracking tools.
- Weft's server code runs in Vercel's Frankfurt region and Supabase hosts Weft's database in Frankfurt; Vercel's network may route requests through other countries. Emails are sent through Resend. The two optional AI features use OpenAI, in the USA, and only after you switch them on.
- As soon as you open Live TV, your browser connects directly to the broadcaster of the selected channel.
- You can see and change most of your data in Weft. Email us to get a copy of your data, close your account or use any other right in section 11.
This summary helps you read the notice. It does not replace it: the full Privacy Notice below applies.
1. Who we are
Weft (weft.trade) is run by Geo Nicolaidis, an individual, not a company ("we", "us"). We are the controller of the personal data described in this notice: we decide why and how it is used.
Contact for anything about your data: geo@geonicolaidis.com
We have not appointed a data protection officer; we are not required to. This notice applies the EU General Data Protection Regulation (GDPR) and Cyprus Law 125(I)/2018, which supplements it.
2. What we collect, why, and on what legal basis
The GDPR requires a legal basis for each use of personal data. We rely on these:
- Contract (Article 6(1)(b)): we need the data to provide Weft as described in our Terms of Use.
- Legitimate interests (Article 6(1)(f)): the interest is named each time.
- Consent (Article 6(1)(a)): only for the optional AI context in the daily brief, with a second, separate consent for including your own research. You can withdraw consent at any time in Weft.
- Legal obligation (Article 6(1)(c)): where the law requires us to keep or use data, for example to answer a request under the GDPR.
Your right to object. Where we rely on legitimate interests, you can object at any time, on grounds relating to your particular situation, by emailing geo@geonicolaidis.com. We will then stop, unless we have compelling legitimate grounds that override your interests, rights and freedoms, or we need the data to establish, exercise or defend legal claims.
| What | Where it comes from | Why we use it | Legal basis |
|---|---|---|---|
| Account: email address, password hash, optional display name, account role, date the account was created, time of your last sign-in, and an internal session counter | You, at signup and in account settings; sign-in time recorded by Weft | To create your account, sign you in, keep it secure and contact you about it | Contract. Last sign-in time: legitimate interests (account security and administration) |
| Terms acceptance: which Terms of Use version you most recently accepted and when. Accepting a new version replaces the earlier record | Recorded when you tick the box at signup or accept an update | To know which terms apply to you and show that you accepted them | Contract; legitimate interests (being able to show what was agreed) |
| Investor profile (optional): trading style, risk appetite, experience, reporting currency | You, on your profile page | To set display defaults, convert portfolio figures into your reporting currency, and order the Research priorities list (section 10) | Contract. You can leave any answer blank |
| Brokers: which brokers from Weft's list you use, and your default | You | To label watchlist names and portfolios by broker. Weft does not connect to your broker | Contract |
| Watchlists: names you follow, with broker, horizon and notes | You | To show and monitor the names you follow | Contract |
| Portfolios and positions: portfolio names and notes; for each position the symbol, name, long or short, quantity, average cost, currency, opening date and notes | You, typed in or imported from a file you choose | To show your recorded positions, their value, exposure and scenarios | Contract |
| Portfolio imports | A CSV, pasted table or .xlsx file you choose | Your browser reads the file; it is not uploaded or kept. Only the holdings you review and confirm are saved. To match instruments, Weft sends identifiers such as a ticker, name or ISIN to its listing search, never quantities or costs | Contract |
| Daily portfolio value checkpoints: total value, profit or loss, currency, completeness and the holdings used | Calculated by Weft once a day for accounts with positions | To show how your recorded portfolio value changed over time | Contract |
| Scenarios and saved screens: names, descriptions, shocks, filters and sort orders | You | To keep tools you set up | Contract |
| Alerts: price levels, percentage moves, headline keywords, notes, and when and at what price an alert fired | You; firing details recorded by Weft | To check your alerts and tell you when one fires, in the app and by email | Contract |
| Daily brief: that day's selection of updates for the names and ecosystems you follow; whether you want the brief by email; when it was last sent | Composed by Weft from your watchlist, portfolios and alerts | To show the brief and email it to you. The daily email is off until you turn it on; otherwise Weft emails a brief only when you ask it to email you today's brief | Contract (you asked for the email) |
| AI context in the daily brief (optional): your AI settings and the AI-generated context for each day | Your settings; generated by OpenAI from evidence Weft selects | See section 3 | Consent. Including your own research needs a second, separate consent |
| Live monitor: whether it is on, the ecosystems in scope, the latest analysis, the history of each finding, findings you marked as reviewed, and whether AI explanations are on | Your settings; analysis by Weft from public sources and the names you hold or follow | To find public developments that may relate to your holdings, watchlist and ecosystems | Contract. AI explanations are a setting you switch on; they send OpenAI no data about you (section 3) |
| Research: cases, theses, claims, evidence, decisions, catalysts, risks, targets, comments, citations, version history and an activity log | You and the collaborators you invite | To provide the research workspace and show who changed what | Contract |
| Collaborators: the people on a research case, their role, and who invited them | The case owner, by entering a registered user's email address. If someone adds you to their case, your email address comes from them | To let collaborators view or edit the case. Collaborators see each other's and the owner's name and email address. Only the owner can remove a collaborator: if you were added to a case you do not want to be on, ask the owner or email us | Contract |
| Documents: text you paste, or that Weft fetches from an address you give, with its title, source, address, publication date and summary | You; for an address, Weft's servers fetch the document | To keep a stable copy for your research and citations. A document can contain other people's personal data, such as names in a company report | Contract |
| Ecosystems you create: names, descriptions, companies and links | You | To provide your ecosystems. If you publish one, every Weft user can see its content. Weft does not show your name with it | Contract |
| Emails you send us and our replies | You | To answer you, handle reports and requests, and keep a record of how we handled them | Legitimate interests (answering you and handling requests properly); legal obligation for GDPR requests |
| Security records: request counters for rate limits, stored as one-way hashes (see below) | Created by Weft from your account ID or, before you sign in, your IP address | To stop password guessing, mass signups and other abuse | Legitimate interests (keeping Weft and its users secure) |
| Hosting logs: IP address, time, address requested, response and browser details | Created by Vercel when you use Weft, or when your email app loads Weft's logo from one of our emails (section 4) | To run, secure and fix Weft | Legitimate interests (operating and securing Weft) |
Rate limits and IP addresses. To limit signups, sign-in attempts and unsubscribe requests, Weft counts requests from your IP address; for sign-in, it counts your IP address together with the email address entered. For everything else it counts by account. Weft stores only a one-way hash (SHA-256) of the scope, the identifier and the time window, never the raw IP or email address. The hash is not salted, so someone with access to the database could test guesses against it: it is pseudonymised, not anonymous, and we treat it as personal data. Counters cover windows of one minute to one hour, and Weft deletes expired counters during normal use.
What Weft does not collect. We do not ask for your bank, card or broker login details, government ID or date of birth. Weft does not connect to broker accounts. Weft's own application logs record errors and job results. They are written to leave out your email address, holdings and the text you write, although an error can name the market symbol that failed.
If you do not provide your email address and a password, we cannot create an account. Everything else is optional or depends on the features you use.
3. AI features
Both AI features are off until you switch them on, and we can also switch them off for everyone. AI output is labelled in Weft. It never changes the facts, dates or prices Weft shows. It is not investment advice.
AI context in the daily brief. If you opt in, Weft sends OpenAI a selection of evidence for that day's brief: headlines, short source text, dates and publishers, and observations about companies you follow, hold or have alerts on, such as a price change over a stated period. It also sends background records about those ecosystems. This shows OpenAI which companies and ecosystems are in your brief. Weft does not send your name, email address, account ID, quantities, costs or portfolio values.
If you also give the separate private-research consent, Weft adds excerpts from research you own: the title and up to about 1,400 characters of each of up to three documents you added (pasted or fetched), and the title, thesis and counter-thesis (shortened to about 700 and 500 characters) of up to two open research cases you own. Anything you wrote there, including any personal data, goes to OpenAI. Research other people have shared with you is never sent. If you edit the thesis of a case someone else owns, your text is part of their case and can be sent if the owner gives this consent.
The generated context is stored with that day's brief for 30 days (section 7).
AI explanations in Live. If you switch this on in your Live settings, Weft sends OpenAI the title, summary, publisher and date of a public headline and asks for a general explanation. Weft sends nothing about you: no holdings, research, scope or account details. The explanation is stored without any link to you and can be shown to other users who see the same headline.
How OpenAI handles it. Weft calls OpenAI's standard API (api.openai.com), not its European data-residency option, so AI requests are processed in the USA (section 6). Response storage is turned off (store: false) and no tools are used. OpenAI states that it does not use API data to train its models unless the customer opts in. OpenAI states that, by default, it keeps API inputs and outputs for up to 30 days to detect abuse, unless the law requires it to keep them longer or it needs them to protect its services or others from harm (see OpenAI's data controls (opens in a new tab)). Weft records the cost and size of each AI call against a fixed monthly budget. Those records contain no prompts and no account details.
Switching off. You can switch either feature off at any time: AI context in the brief settings, AI explanations in the Live settings. Withdrawing consent does not make processing before then unlawful. When you switch AI context off or change its settings, Weft deletes the AI text and evidence it already stored under your earlier settings. While your account has not accepted an updated version of the Terms of Use, Weft generates no AI context for you.
4. Emails
Weft sends emails through Resend:
- Account emails: six-digit codes when you change your email address, sent to your old and new addresses.
- Alert emails: when one of your alerts fires. Each email lists the alerts that fired.
- Daily brief emails: only if you turned them on, or when you ask Weft to email you today's brief. A brief email names companies you follow or hold and their price changes, headlines, upcoming events, alerts that fired and, if enabled, AI context. It does not include your quantities or portfolio values. Every brief email has an unsubscribe link that works without signing in, and you can turn the email off in Weft.
Every HTML email shows Weft's logo, loaded from weft.trade. If your email app loads images, it fetches the logo from our host, which records the request like any visit (section 2, hosting logs). The logo address is the same for everyone, so it does not tell us who opened which email.
We do not send marketing emails. If we ever want to, we will ask first.
5. Who receives your data
Service providers (processors). These companies process data for us under contract and only on our instructions:
| Provider | What it does for Weft | Data involved |
|---|---|---|
| Vercel Inc. (USA) | Hosts the Weft website and server code. Weft's server functions run in Vercel's Frankfurt region (fra1) | Everything Weft processes passes through Vercel's servers, plus hosting logs |
| Supabase Pte. Ltd (Singapore) | Runs Weft's Postgres database, hosted in Frankfurt, Germany (AWS region eu-central-1) | Everything Weft stores (section 2) |
| Resend (Plus Five Five, Inc., USA) | Sends Weft's emails | Your email address and the content of each email (section 4) |
| OpenAI (OpenAI Ireland Ltd for data covered by EEA or Swiss data protection law, OpenAI OpCo, LLC for data covered by UK data protection law; see section 6) | Generates AI context and explanations, only if you switch them on | The data described in section 3 |
Vercel also uses some request data, such as IP addresses, for its own purposes, for example to protect its network against attacks and fraud, as described in Vercel's privacy notice (opens in a new tab).
Other Weft users. Collaborators on a research case see that case and the names and email addresses of the people on it. Ecosystems you publish are visible to every Weft user, without your name.
Data providers. To show market data, news and other information, Weft's servers request data from third parties such as Yahoo Finance, Google News, FRED, EODHD, Financial Modeling Prep and public agencies. These requests come from Weft's servers, not your browser. They contain only what is needed to fetch the data, for example a ticker or a company name, and never your name, email address or account ID. Some requests do follow from your activity:
- The symbols of your positions, watchlist names and price alerts are sent to our market-data providers (Yahoo Finance, and EODHD or Financial Modeling Prep where configured) to fetch their prices and price history, never quantities or costs.
- The text you type into instrument search, and identifiers from a portfolio import, are sent to Yahoo Finance's listing search.
- The symbols of positions held by users with the Live monitor switched on are used to fetch Yahoo Finance's public headline feeds. Weft fetches each symbol once for everyone who holds it.
- When you ask Weft to fetch a document, Weft's servers fetch the address you entered. The website receives the request from Weft (by default identified as "Weft research importer"), not from you.
Live TV broadcasters. As soon as you open Live TV, or switch channel, your browser starts loading that channel's stream, muted, directly from the broadcaster or its delivery network: DW (through Akamai), Bloomberg, Al Jazeera or Sky News. Weft opens the channel you last chose (Bloomberg at first), or the one it suggests for a finding you opened it from. The broadcaster receives your IP address, browser details and the fact that the request came from Weft. Its own privacy notice applies. Depending on your browser, it may also be able to set or read its own cookies. Nothing is loaded from broadcasters until you open Live TV.
Links. If you follow a link to another website, that site's privacy notice applies.
Others. We may disclose data if the law requires it, for example to a court or public authority, or to protect the rights and safety of Weft, its users or others. If Weft is taken over by someone else, your data would move to them; we would tell you first.
We do not sell your personal data or share it for advertising.
6. Where your data is processed
Weft's server code runs in Vercel's Frankfurt region, Germany, and its database is hosted in Frankfurt, Germany (AWS region eu-central-1). Some providers are based outside the European Economic Area (EEA) or may access data from outside it:
- Vercel (Vercel Inc.) is a US company. Vercel's global network handles incoming requests and may do so at locations near you, including outside the EEA. Safeguard: the Vercel Data Processing Addendum (opens in a new tab), which forms part of Vercel's terms, applies the Standard Contractual Clauses. Vercel also states that it is certified under the EU-US Data Privacy Framework (opens in a new tab).
- Supabase contracts through Supabase Pte. Ltd, a Singapore company. Supabase and its sub-processors may process data outside the EEA, for example when its staff operate and support the service. Safeguard: the Supabase Data Processing Addendum (opens in a new tab), which forms part of Supabase's terms, applies the Standard Contractual Clauses.
- Resend (Plus Five Five, Inc.) is based in the USA and stores email data there. Safeguard: the Resend Data Processing Addendum (opens in a new tab), which forms part of Resend's terms, applies the Standard Contractual Clauses, and Resend states that it participates in the EU-US Data Privacy Framework (see Resend's GDPR page (opens in a new tab)).
- OpenAI (only if you switch AI on): Weft uses OpenAI's standard API, so AI requests are processed in the USA. Safeguard: under the OpenAI Data Processing Addendum (opens in a new tab), which forms part of OpenAI's terms, OpenAI Ireland Ltd processes data covered by EEA data protection law and transfers it outside the EEA only under agreements containing the Standard Contractual Clauses or under an adequacy decision of the European Commission. Data covered by UK data protection law is processed by OpenAI OpCo, LLC under the Standard Contractual Clauses as amended by the UK Addendum.
The EU-US Data Privacy Framework is covered by an adequacy decision of the European Commission (GDPR Article 45). Standard Contractual Clauses are an appropriate safeguard under GDPR Article 46. You can ask us for more detail or a copy of the safeguards that apply.
7. How long we keep data
| Data | How long |
|---|---|
| Account, terms acceptance (the most recent only), investor profile, brokers, settings | Until you close your account |
| Watchlists, portfolios, positions, scenarios, saved screens, alerts, research, documents, ecosystems | Until you delete them or close your account. A published ecosystem cannot be deleted in Weft: ask us to remove it, or it is deleted when you close your account |
| Daily portfolio value checkpoints | Until you close your account. There is no automatic deletion today |
| Daily brief for each day | 30 days, then deleted by Weft's daily clean-up |
| AI context for each day | 30 days, then deleted by the same clean-up. The text is deleted sooner if you change your AI settings |
| Records of which days a brief email was sent | Until you close your account |
| Live monitor: latest analysis | Replaced at each analysis and cleared when you change the monitor's scope |
| Live monitor: finding history and review marks | Until you close your account. There is no automatic deletion today |
| Rate-limit counters (hashed) | Each counter expires after its window (one minute to one hour) and is then deleted during normal use |
| Session cookie | 14 days, or until you sign out |
| Email-change cookie and codes | 10 minutes |
| Cached headline feeds for held symbols (not linked to any account) | Deleted 30 days after the last refresh |
| Hosting logs at Vercel | Set by Weft's Vercel plan (Pro or above). Vercel states that on these plans it keeps the logs of Weft's server functions for between one day and 30 days, depending on the plan and add-ons (see Vercel's runtime log limits (opens in a new tab)). Request data Vercel uses for its own purposes (section 5) is kept for the period described in Vercel's privacy notice (opens in a new tab) |
| Emails at Resend | Resend states that it keeps email content, delivery events and logs for 30 days on its Free, Pro and Scale plans (see Resend's GDPR page (opens in a new tab)) |
| Database backups at Supabase | Set by Weft's Supabase plan. Supabase states that daily backups can be restored for 7 days on its Pro plan, 14 days on Team and up to 30 days on Enterprise (see Supabase's backup documentation (opens in a new tab)). Deleted data stays in a backup until that backup expires |
| AI inputs and outputs at OpenAI | Up to 30 days for abuse monitoring, unless the law requires OpenAI to keep them longer or it needs them to protect its services or others from harm, as OpenAI states (see OpenAI's data controls (opens in a new tab)). Weft turns off OpenAI's response storage (store: false) |
| Emails you send us | As long as needed to deal with your message and any follow-up |
Closing your account. Weft has no self-service account deletion; we close accounts on request (section 11). When we close yours, Weft deletes your account and the data linked to it: profile, settings, brokers, watchlists, portfolios and positions, checkpoints, scenarios, saved screens, alerts, briefs and their delivery records, AI settings and context, Live monitor data, the research cases you own with everything in them, your documents, and the ecosystems you created. Some things stay, or affect other people:
- Content you added to a research case someone else owns (claims, evidence, catalysts, risks, targets, decisions, and edits to its thesis and other text) stays in that case without your name. Your comments there, the thesis versions and claim revisions you saved, and your entries in its activity log are deleted. Ask us if you want the content removed too.
- Documents you added to a case someone else owns are deleted, together with the citations to them in that case.
- If someone else shared a research case with you, that case's activity log keeps a line with your email address recording when it was shared. Ask us and we will remove it.
- Ecosystems you published stop being available to other users, and the watchlist names and alerts other users had on their companies are deleted too.
- Deleted data remains in our database provider's backups until they expire (see the table above).
If we must keep anything longer, for example to deal with a legal claim, we keep only what is needed for as long as it is needed.
8. Cookies and browser storage
Weft sets two cookies. Both are strictly necessary, so the law does not require your consent for them:
| Name | Purpose | Duration |
|---|---|---|
tp_session | Keeps you signed in. It is signed so it cannot be forged, and it contains your account ID, email address, display name, role and an expiry time. It is HttpOnly, so page scripts cannot read it | 14 days, or until you sign out |
weft_email_change | Holds an encrypted, short-lived record of an email-address change you started, so the codes can be checked. Sent only to Weft's account settings | 10 minutes |
If we turn on our host's protection against automated attacks, Vercel may also set its own short-lived security cookie to check that a visitor is not a bot.
Weft also keeps some preferences in your browser's local storage. You set some yourself, such as the theme; Weft remembers others as you use it, such as the last company tab, chart period or Live TV channel. They stay on your device and are never sent to us:
| Key | What it remembers |
|---|---|
weft:theme, weft:density | Light or dark theme, and compact or comfortable layout |
weft:chart-range | The chart period you last chose |
weft:entity-tab | The company page tab you last opened |
weft:watchlist-sort, weft:watchlist-hidden | Watchlist sorting and hidden columns |
weft:cal-kind, weft:cal-eco | Calendar filters |
weft:live-channel | The Live TV channel you last chose |
weft:live-layers | Which Live map layers are shown |
Weft also uses session storage (weft:scroll:…) to put you back at the same scroll position when you return to a page. It is cleared when you close the tab.
You can clear all of this in your browser settings. Clearing the session cookie signs you out. Weft uses no advertising, analytics or tracking cookies, and its fonts and map data are served from Weft itself, not from third parties.
9. How we protect your data
Measures built into Weft include:
- Passwords are stored only as bcrypt hashes. Passwords must be at least 12 characters.
- Sign-in sessions use signed,
HttpOnlycookies, sent only over HTTPS in production. Changing your password or email address signs out your other sessions, and you can sign out other sessions yourself. - Changing your email address needs your current password and a code sent to both your old and new addresses. Codes expire after 10 minutes and are stored only in hashed form.
- Sign-in gives the same answer and takes about the same time whether or not an account exists. Signing up, and adding a collaborator to a research case, do show whether an email address is registered; both are rate-limited.
- Rate limits slow down password guessing and abuse, using hashed (pseudonymised) identifiers.
- Weft checks on every request that you may access the record concerned. Sensitive account actions also check that the request came from Weft itself.
- Scheduled jobs require a secret key. Unsubscribe links are signed and stop working after a password or email change.
- AI requests use a fixed allowlist of fields, as described in section 3.
- Weft is served over HTTPS.
We also rely on the security measures of our hosting and database providers. No system is completely secure. If a personal data breach is likely to result in a high risk to you, we will tell you as the law requires.
10. Automated decisions and profiling
Weft makes no decisions about you that have legal or similarly significant effects (GDPR Article 22). Nothing in Weft decides whether you can use a service, on what terms, or at what price.
Some features process your data automatically:
- Research priorities orders companies for further research. If you answered the investor questions, the order is adjusted slightly by your risk appetite and trading style, and labels such as "fits conservative profile" explain why. It only changes the order of a list. You can change or clear your answers at any time, or object (section 11).
- The daily brief, alerts and Live monitor select information from the names, holdings and ecosystems you follow.
- AI context (if you opt in) explains public information. It does not assess you.
11. Your rights
Under the GDPR you have the right to:
- access your personal data and get a copy of it;
- rectify inaccurate data;
- erase your data ("right to be forgotten");
- restrict how we use your data, for example while we check a complaint;
- data portability: receive data you gave us in a structured, machine-readable format, or have it sent to another provider where that is technically possible;
- withdraw consent at any time, without affecting processing before you withdrew it.
Your right to object. You can object at any time to processing based on legitimate interests (section 2), on grounds relating to your particular situation.
In Weft you can: edit your name, investor answers and preferences; change your email address and password; sign out other sessions; delete watchlist names, positions, portfolios, alerts, research and documents; turn the daily brief email off (also through the link in any brief email); switch the AI features off; and pause or reconfigure the Live monitor.
By email: for anything else, including a copy of your data and closing your account, email geo@geonicolaidis.com, preferably from your account's email address. Weft does not yet offer self-service account deletion or data export, so we do these by hand. We may ask you to confirm your identity. We reply within one month. If a request is complex, or you send many, we may take up to two more months and will tell you why. Requests are free, unless they are clearly unfounded or excessive.
12. Complaints
Please contact us first so we can try to resolve the problem. You also have the right to complain to a data protection authority, in particular in the EU country where you live or work, or where you think the problem happened. In Cyprus this is:
Office of the Commissioner for Personal Data Protection
- Address: 15 Kypranoros Street, 1061 Nicosia, Cyprus
- Postal address: P.O. Box 23378, 1682 Nicosia, Cyprus
- Telephone: +357 22 818 456
- Email: commissioner@dataprotection.gov.cy
- Website: www.gov.cy/dataprotection (opens in a new tab)
13. Children
Weft is only for people aged 18 or over. We do not knowingly collect data from anyone younger. If you believe a child has created an account, tell us and we will close it and delete its data.
14. Changes to this notice
We will update this notice when Weft or the law changes. Each version has an identifier and date at the top. If a change materially affects how we use your data, we will tell you by email or in Weft before it takes effect. Where a change needs your consent, we will ask for it.
15. Contact
Geo Nicolaidis, operator of Weft: geo@geonicolaidis.com
End of the Privacy Notice, version privacy-2026-10-05, last updated 5 October 2026.
