What we do, and what we haven't done yet
Specifics, including the uncomfortable ones. If something here matters to your decision and isn't answered, write to us and we'll answer it.
Running code an AI just wrote
The build checks execute code that a language model produced seconds earlier. We treat that as untrusted, because it is.
So the checks run in a locked box of their own. Your app cannot read anyone else's files, cannot reach the machinery that runs the platform, and cannot see anything on the computer it was not explicitly handed.
The part that builds your app has no keys of its own either. Even if someone tried to trick it into leaking a secret, there is no secret in there to leak.
How we do this
Checks run via systemd-run as the project's own unprivileged operating-system user — never in-process, never as root.
The agent holds no network credentials. It reaches the model through a gateway we control, so a prompt injection cannot exfiltrate a key that was never in the sandbox.
Your app is separate from everyone else's
Every app you build runs in its own space, with its own storage. Nothing another customer builds can read your information, and nothing you build can read theirs.
You also get two copies of every app: one to work in, and one the public sees. That is the difference most builders skip — when there is only one, editing is editing the live thing, and the first bad change takes your site down in front of real people.
The keys to your information are never written into your app's files, so taking a copy of your code does not hand anyone your data.
How we do this
Each project runs as its own operating-system user, on its own port, with its own systemd service. Each environment within a project — development and production — gets its own Postgres database and its own database role, and neither can read the other.
Database connection strings are stored as encrypted references and injected at run time rather than committed to the project's repository.
Your app is yours, and you can leave
What we build for you is ordinary code in an ordinary format. There is nothing proprietary about it, and nothing that needs us to be running for it to make sense.
Take it and go whenever you like. We would rather be worth staying with than hard to leave.
One thing worth stating plainly: going back to an earlier version adds a step rather than erasing one. Nothing is deleted. What you moved away from is still there, and you can jump forward to it again.
How we do this
Projects are plain git repositories on a real filesystem; saved versions are commits. Clone one and it works anywhere.
Restore appends a commit returning the tree to that state rather than resetting, so history is never destroyed.
Reporting something
If you find a security problem, write to security@startnicely.com. We will not threaten you for telling us. There is a security.txt if you prefer the standard route.
If something built here is being used to hurt people, report abuse. Someone reads it.
Not finished yet
Everything below is true today. We would rather you find it here than find it later.
Going back to an earlier version brings back your app, not the information stored in it.
Both are captured at every version, and the interface tells you which ones hold your information. Putting that information back isn't wired up yet, so we say so rather than letting you assume it.
You can build a web app and an API. Mobile apps and AI agents are not available yet.
They're in the design, and the project model already has slots for them. They are not built, so you cannot pick them.
This is early software with no uptime guarantee. Keep your own backup of anything you cannot lose.
Your app runs on a startnicely.com address. Custom domains aren't available yet.
The verification flow is specified — we check that you control a domain before routing any traffic to it, never the other way round — but it is not built.
Signing up requires an invite. We're admitting people in batches.
We have not had a third-party security audit. When we do, this is where it will be linked.