Building Ariyes: one workspace instead of five tools
Why I built my own business platform with campaigns, a help desk, a CRM and file storage under one login, and how a solo build reached version 1 in a week.

Running a few online businesses means paying for the same stack over and over: one tool for email campaigns, another for cold outreach, a help desk, a shared inbox, a CRM, somewhere to keep files. None of them share contacts, each has its own login and bill, and moving data between them is a job in itself.
Ariyes is my answer: one workspace with all of it inside, one contact list, one login, and one price per seat with every module included.

One app, many subdomains
Each module has its own address: campaigns.ariyes.net, crm.ariyes.net, drive.ariyes.net and so on. Behind them is a single Next.js app. Middleware reads the hostname and sends each request to the right module, and the sign-in cookie is shared across every subdomain, so you sign in once.
Being multi-tenant from day one mattered most. Every database query is tied to one workspace, and that's enforced twice: in the ORM, which refuses a query without a workspace, and again with row-level security in PostgreSQL. One mistake in the code isn't enough to leak another workspace's data.

Rules that never bend
Sending email for other people's businesses goes wrong in a few predictable ways, so a short list of rules is checked against every change:
- Suppression is sacred. Every send goes through one function that checks the suppression list.
- Sends are idempotent. Each message has a unique key, so a retried job can't send it twice.
- Webhook events are never lost. Each one is verified, stored, queued, and only then acknowledged.
- A reply stops a sequence in the same database transaction that records the reply.
- Compliance by default: unsubscribe links and headers, a postal address on marketing email, and WhatsApp's 24-hour window.
On top of that, sending fails over from Mailgun to AWS SES automatically, and a workspace pauses itself if its bounce or complaint rate climbs.
More than email
Version 1 covered campaigns, sequences, broadcasts, contacts and the inbox. The next two months added the modules that make it a place a team works all day:
- A help desk with tickets, SLA timers, a knowledge base, a customer portal and reports.
- A CRM with companies, deals and pipeline boards, using the same contacts as everything else.
- Drive for files, with sharing, storage per seat and virus scanning.
- To-dos, a platform admin for plans and support, and a public website with a blog, changelog and docs.


Version 1 in a week
The first commit was on 10 May 2026, and version 1 was tagged on 17 May after 20 phases. I built it alone, with two Claude sessions: one as architect and reviewer, writing a precise prompt for each phase and checking the result against it, and one in VS Code writing the code. A master context document holds the decisions and the rules above, so every session starts from the same picture.
By version 5.3 in July, the codebase had grown to 123 data models, 59 API routers, 177 pages and 434 test files.
About the screenshots
The app screenshots come from a local copy of Ariyes with an invented workspace, "Northwind Studio". The people, companies, deals and tickets are all made up.
You can see the real thing at ariyes.net.
- ariyes
- saas
- nextjs
- multi-tenant