What fline stores
This page has two parts. The first covers the waitlist form on this website. The second covers fline itself once your account is open: your account, your projects and what your apps do. Each part says what is kept, for how long, who else sees it, and how to have it removed.
Reading a page is counted, and the form writes one row
Reading this page stores nothing on this site. The server does tell PostHog that the page was read, as the section on counting below sets out. The waitlist form is the only thing on the site that writes anything down, and it writes one row. These are its columns, by their real names.
| Column | What it holds |
|---|---|
| The address you typed, lowercased. The only answer the form requires | |
| agent | Where you said you built your app, picked from the list the form offers, or empty if you did not say. Older sign-ups may hold an answer from the earlier list, which named coding apps only |
| ships | Your answer to what you would put online first, as you wrote it. Free text, and the form refuses anything over 2000 bytes rather than trimming it |
| heard | Your answer to how you heard about fline, as you wrote it. Free text, with the same 2000-byte limit. Empty for sign-ups from before the form asked |
| referrer | The page your browser said it came from, when it says. It answers whether a post somewhere worked |
| user_agent | The browser string your browser sent with the submission |
| ip_hash | A salted SHA-256 of your address, truncated to 128 bits. Never the address |
| created_at | When the row was written. The list is a queue and this is its order |
The address is hashed before it is stored, not after
Your IP never reaches the table. It is hashed with a salt that lives in the server's environment rather than in the database, and the result is cut to 128 bits. A copy of the table on its own does not let whoever holds it confirm that a given address is in it. An unsalted hash of an IP would: there are four billion of them and that is minutes of work on a laptop.
The hash has one use. It tells one submitter apart from a thousand, which is what makes a rate limit possible. That limit is eight submissions an hour from one address. The limiter holds those hashes in memory and loses them when the process restarts. Nothing else is derived from an address, ever: no location, no network, no lookup.
Pages are counted on our server, and nothing is loaded from anywhere else
No pixel, no tag manager, no cookie and no third-party script. What the site counts, it counts on its own server. Each time a page is read, the server sends PostHog, an analytics service, a note with the page's address, the address of the page you came from if your browser sent one, and any campaign tags in the link (the ones starting utm_). When the form adds someone to the list, it sends a note with the page the form was on, your answer to where you built your app, and whether the address was new to the list.
Nothing else goes. Never your email, your IP address, your browser string or your other answers, and no label that ties one note to another or to you: each note gets a fresh random one, so PostHog can't tell whether two page views came from the same person. Readers that look automated, like search engines and AI crawlers, are counted separately, by name where they give one. PostHog sees our server's address, not yours.
PostHog keeps these notes on servers in Frankfurt, as the processor of them for us. It keeps them for one year on its free plan and for seven years on its paid plans, and we can't shorten that.
Nothing loaded from anywhere else
Nothing on this page is fetched from another host at all. The stylesheet, the script and the fonts are served by the same binary that served the document. That is enforced rather than intended: every response carries a Content-Security-Policy of default-src 'none' with connect-src 'self', so a script that tried to send something to somebody else would be stopped by your browser and not by our good manners.
The form does carry one hidden field that a person never sees. If something fills it in, the submission is answered as a success and no row is written. A bot that is told it was spotted only comes back better.
What the row is for
To email you. Until your account opens, we only email you about getting in: a confirmation when you join, with a note that depends on where you said you built your app, and an email when your account opens. Once your account is open, fline also sends a welcome, up to three short emails to help you get started (each stops once you've done that step), and emails about your launches. Every one of these has an unsubscribe link. Unsubscribing stops the getting-started emails and the emails about your launches. The confirmation, the email saying your account is open and the welcome each come once, and unsubscribing doesn't stop them. If you joined before these emails existed, you get no confirmation, and the first email you get is the one saying your account is open.
And to read your answers, which help decide who to let in next and what to fix first. That is the whole of it. There is no newsletter. The list is not shared with an advertising network or a marketing tool, and it is not rented or sold. It is read by the person doing approvals, oldest first, and the emails go out from fline's own mail server.
One mailbox is one row
Capitalisation is not identity. A unique index on the lowercased address means Pavel@x.com and pavel@x.com are the same row, so submitting twice cannot produce two emails. A repeat submission is accepted, changes nothing, and is told the same thing as a first one.
Having it removed
Write to privacy@fline.sh from the address you signed up with and the row is deleted, along with fline's record of the emails sent to that address. Nothing deletes the row on its own: it stays until you ask. fline copies its records each night and keeps each copy for about two weeks, so a deleted row can stay in those copies for about two weeks more. This site has no login and sets no session, so there is no account to close here.
When you use fline
This part covers fline itself: your fline dashboard, the connection between Claude Code and fline, and the apps fline runs for you. fline runs on one machine that we rent from Contabo and run ourselves, and keeps larger files in storage that Contabo also provides. We don't promise which country either is in.
Your account
You sign up on your fline dashboard with an email address and a password, and fline sends a code to that address to confirm it. The sign-up form also has boxes for your first and last name, which you can leave empty. Your password is kept only in a scrambled form that can't be turned back into the password. We open accounts by hand, and fline keeps a record of who opened yours and when.
Your fline dashboard keeps you signed in with a cookie, and it loads no tracking script. Each time you sign in, fline records your internet address and which browser you used with that sign-in. This website sets no cookie at all.
Your project
When Claude Code sends your project, fline keeps a copy so it can build and run it. The original stays in your folder. Each new version Claude Code sends is kept as a copy of its own, and fline also keeps the version of your app it built from each one. Nothing deletes them yet, not even when you delete the project. To ask for them to be removed, write to privacy@fline.sh.
The AI model that reads parts of your code
To work out how to build and run your app, fline sends parts of your project to an AI model made by OpenAI (GPT-5): the names of its files, the files that list what your app needs, the first part of its main files and of its build settings files, the short lines where your code reads a setting, and what Claude Code tells fline about your app. Passwords and keys you save on fline are never sent to it.
Files named like key files, such as .env files, are held back from the model, and so are files that contain one of a few common kinds of key. They still stay in the copy fline keeps, and they can end up inside your app when fline builds it. A key written into any other file could reach the model. So keep keys out of your project folder and type them on fline's private page instead.
Passwords and keys your app uses
You type them on a private fline page, and they are saved in a store for passwords and keys that we run ourselves on the same machine. Once saved, nothing in fline shows them again, not to Claude Code and not on your dashboard. Claude Code can save a key it already has, and it can't read it back. If your app prints a saved password or key word for word, fline blanks it out of what you and Claude Code see. A changed or partial value isn't caught.
What your apps do
What your app prints is kept for 7 days, so you can search it on your dashboard. What your app uses, its memory, processing, network and disk, is measured and kept for 30 days, and your dashboard shows it. Nothing charges for it. The output of each build is kept with the project, so Claude Code can read what went wrong, and nothing deletes it yet.
Databases fline runs for you
A database fline makes for your app runs on the same machine, and what you put in it stays there until you delete the database. Deleting a project doesn't delete its database: ask Claude Code to delete that too. A deleted database is kept for 7 days and then removed from the machine. The same goes for file storage fline makes for your app. We don't promise backups, so keep your own copy of anything you can't lose.
Claude Code's access
You approve Claude Code in your browser, and fline keeps a record of what you approved. Your dashboard lists the AI coding apps you've connected, and you can disconnect one there at any time. fline also keeps a history of what happened to each project, such as each build and each version put online. Nothing deletes that history yet.
Emails
fline emails you the codes that confirm your address and let you back in if you forget your password. It also sends the emails listed in the first part of this page, and an email when a build starts, when your app goes live and if fline can't get your app built and started. We send those ourselves, from the same machine, not through a mailing company, and fline keeps a record of each one, tied to your address or your account.
Other companies involved
Contabo rents us the machine and the storage. OpenAI's model reads parts of your code, as above. Cloudflare keeps the records that point fline's own web addresses at our machine, and when you add a web address you own, fline checks it through Cloudflare's public lookup service. The apps fline runs look up the web addresses they reach through Cloudflare's and Google's public lookup services. Let's Encrypt, or ZeroSSL when Let's Encrypt can't, issues the padlock for each address fline serves, your app's included. They are told each address, and every address with a padlock is published in public lists that anyone can search.
Deleting
Ask Claude Code to delete a project. That takes your app offline and removes it from the machine it ran on, along with the files it saved there. fline keeps the copies of your project, the versions it built, the passwords and keys you saved for it, the output of its builds and its history, as above. What it printed goes after 7 days and what it used after 30. fline also copies its own records each night and keeps each copy for about two weeks, so anything removed can stay in those copies for about two weeks more.
To close your account and ask for what fline holds about you to be removed, write to privacy@fline.sh from your account's email address. There is no button for it yet.
What this page is
A description of what the code does, checked against it. It cites no regulation, claims no certification and is not a lawyer's work. If the code and this page ever disagree, the code is the fact and this page is the bug. Write to the same address and it gets fixed.
Last changed 17 October 2026 · private beta