crkayes
← Blog

Ariyes

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.

The Ariyes launcher for a demo workspace called Northwind Studio, with tiles for Campaigns, Sequences, Broadcasts, Contacts, Inbox, Help Desk, To-Do, CRM, Drive and Settings

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.

The Ariyes launcher for a demo workspace called Northwind Studio, with tiles for Campaigns, Sequences, Broadcasts, Contacts, Inbox, Help Desk, To-Do, CRM, Drive and Settings
The app launcher, in a demo workspace

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.

Diagram of Ariyes, with every module on its own subdomain, one Next.js app with background workers in the middle, and the email, SMS, inbox, billing and storage providers below
How Ariyes fits together

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.
The CRM sales pipeline as a board, with deals in Lead, Qualified, Proposal and Negotiation columns, using invented demo data
CRM pipeline, with invented demo data
A help desk ticket queue with ticket numbers, requesters, status, priority, source, assignee and SLA timers, using invented demo data
Help desk tickets with SLA timers, with invented demo data

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