Bloomneo builds developer tools for a world where most code is generated — a backend toolkit, a component library, and the framework that composes them into one application.
An agent can write a working feature in a minute. The slow part is everything after: reading it back, working out whether it runs on the server or the client, checking it did not quietly skip a permission check, and finding out whether it also works on the phone build.
Those four jobs are four ways of shortening that. Each one below is a decision we made once, so that nobody — person or agent — has to make it again on every file.
A database call under src/api/ runs on the server. There is no second reading of that, and no directive to trace up a component tree — a reviewer answers “where does this run?” by looking at the path. The question that used to cost the most is the one the folder already answered.
The frontend calls the backend over HTTP, exactly like any other client. So either side can be rewritten, deployed or scaled without touching the other, and the endpoints you already have are the ones a phone app or a partner integration uses. Frameworks that blur this line spend the boundary to buy terser code.
Electron and Capacitor wrap the same web build against the same API — browser, desktop, iOS and Android out of one source tree, rather than four projects that resemble each other on Monday and have drifted by Friday.
An agent is fast, confident and occasionally wrong, so the aim is to leave it as little to guess as possible. Conventions settle what would otherwise be a choice: a file’s location is its route, one pattern instantiates every module. What it can still get wrong is caught early — a wrong path is a compile error, an ungated route warns at boot.
If the right choice is obvious, it shouldn't require configuration. FBCA auto-discovers features. AppKit auto-scales. Routes auto-mount.
xxxClass.get() is the only way to instantiate any AppKit module. No constructors, no factories, no special cases.
Memory → Redis. Local → S3. Console → Resend. Every module upgrades by setting one env var. No code changes ever.
Docs are read during research; mistakes happen mid-sentence. When a rule keeps being broken we move it out of prose and into the type system. Routes are a generated union, not a list in a guide.
No heavy dependencies. No features that don't earn their weight.
We don't claim agents write perfect code — they do not, and documentation alone has never fixed that. We make the wrong version fail immediately instead.
Semver is a contract. We version, document, and migrate. Always.
If your team is large enough that ecosystem age and hiring pool matter more than the shape of the code, use Laravel or NestJS. They have a decade of answers we do not, and that is worth more to you than anything on this page.
If you are shipping one page that will stay one page, a real client/server boundary costs more than it returns. Server actions will be less code, and they will stay less code. We are built for the app that grows a second client — and we charge you for that boundary on the first day, not the day you need it.
Server-side frameworks have spent a decade dissolving the line between client and server, and they got something real for it — code that reads as one program, and less of it. We went the other way, and everything on this page is downstream of that.
Because the boundary is real, the API is a real API — callable by a phone, a partner, a scheduled job. Because it is real, the web build is a real client, and bundles unchanged into desktop and mobile. Because it is real, a reviewer can tell where a line runs by where it lives.
Reviewability, reach and structural safety are not three features we shipped. They are three consequences of one decision we refused to reverse.
Conventions carry leverage in both directions. When one is right, every app built on Bloom is safer for it. When one is wrong, every app inherits the mistake — so the bar for an API decision here is higher than for an ordinary library, and we hold ourselves to it in public.
Where we fall short of this page, we will say so before you find it. Loud when wrong applies to us too.
One team. Every surface.
Code you can vouch for.