A charging session was turned down to 7 kW
A fact, in the past tense and in your words. Nothing is ever overwritten: the full history stays, and every later question can be answered from it.
Architecture
Reventless helps you build business software faster, keep it maintainable for years, make every decision traceable — and run it at low cost. Here is how.
Software that runs real business processes — money, contracts, goods, approvals — tends to grow rigid over time. Changes take longer and become risky. Nobody can prove beyond doubt who changed what, and when — a real problem for audits and compliance. Most of the engineering time goes into technical plumbing instead of the product. And the bill for development and operations keeps climbing.
The usual answer is more process, more infrastructure, more specialists. Reventless takes the opposite route: less technology in your way.
With Reventless, your team describes what the software must do for the business — the commands people issue, the events that happen, the views they need. That description is written in ReScript, a language whose type system is a natural fit for domain modeling, and it is checked by a compiler, not by a wiki page.
Everything else is derived from it: database schemas, GraphQL APIs, MCP server schemas, AWS infrastructure. One source of truth, no glue code, no drift between layers. Change the spec, regenerate the system.
Define commands, events and views in one type-safe spec. Reventless derives everything else — database schemas, GraphQL APIs, MCP servers, cloud infrastructure. Change the spec, regenerate the system.
// Customer.res — the spec
@@reventless.spec
@schema
type command =
| Register({email: string, address: string})
| UpdateEmail({email: string})
| Deactivate
@schema
type event =
| Registered({email: string, address: string})
| EmailUpdated({email: string})
| Deactivated
@schema
type state = {
email: string,
address: string,
active: bool,
}
# Generated GraphQL API — one of four surfaces
type Mutation {
register(email: String!, address: String!): CommandResult!
updateEmail(id: ID!, email: String!): CommandResult!
deactivate(id: ID!): CommandResult!
}
type Customer {
email: String!
address: String!
active: Boolean!
}
type Query {
customer(id: ID!): Customer
customers: [Customer!]!
}
Reventless doesn't just store the current state of your data — it records every single change as an immutable event. Nothing is overwritten, only appended, like a ledger. From that you get a complete, always-verifiable history of your business for free: for audits, disputes, compliance — and for debugging, because you can replay exactly what happened.
This pattern is called event sourcing. It has long been the right architecture for serious business software — and just as long been a specialist's luxury. Reventless exists to make it the default: accessible, production-ready and relentlessly opinionated, so your team doesn't need a distributed-systems expert on staff.
Systems are composed of slices — self-contained vertical features that own their commands, events and views, following an event modeling approach. Slices communicate through events, not direct dependencies: teams can build, test and deploy them independently, add new ones without touching existing ones, and change one without ripple effects across the codebase.
Reventless applications run serverless by construction — AWS Lambda, DynamoDB, AppSync today, with more targets planned. There are no clusters to size, no servers idling at night, no patch Tuesdays. You pay for what you use, like electricity on a meter. And infrastructure is not an afterthought you script by hand: deployments are generated with the code.
Every Reventless application ships an MCP server automatically: your business processes become tools an AI assistant can safely operate. The strict type contracts also make the platform an excellent target for AI-assisted development — generated code is validated by the compiler immediately. And an event-sourced system produces exactly the complete, ordered, structured data that AI and analytics workloads want.
A good fit if you are:
Less of a fit for plain marketing websites, off-the-shelf webshops, or apps with little business logic.
For the technical depth — concepts, tutorials, API reference — head to reventless.dev. To find out what Reventless would mean for your system, work with us, or start with the overview of the open-source framework.
Every description, however large the business, is made of three kinds of line. Written in your own words, each one becomes a part of the software.
A fact, in the past tense and in your words. Nothing is ever overwritten: the full history stays, and every later question can be answered from it.
A rule that says, from what has happened so far, whether something may be done and what happens then. Your examples pin it down and run as tests.
What a person needs on a screen, kept up to date by itself as things happen, and shown only to those who may see it.
The same three kinds of line, grouped as the business grows. Each block stays small enough to understand and to check on its own.
Each line of the description becomes one part: a decision with what it records, or a view. Amperia’s “turn a session down” is one part.
Parts that belong together: everything about grid calls, from asking to answering to settling.
Several chapters with one purpose, which one team can own and which runs on its own. Amperia has two: Charging and Flexibility.
Systems talk only through a contract. Charging reports sessions starting and ending; Flexibility asks it to turn a session down. Charging never hears of a grid call.
Amperia is two systems and the contract between them, from one description. A new job of the business becomes a new system beside the others.
Because every block is small and checked on its own, a change stays where it belongs, teams can work side by side, and ready-made blocks of every size can be taken from the marketplace or offered on it.
A short conversation is enough to see whether your business process and Reventless are a match — no obligation.
Free 30-minute intro call — no obligation.