Skip to content

Platforms and Apps

BalanceAI CRM

A multi-tenant CRM for IT consultants and web agencies: clients, quotes, Italian e-invoices, domains, servers and an encrypted vault.

TypePlatforms and Apps

The problem

Freelancers, web agencies and IT consultants run on scattered tools: one for clients, one for quotes, a spreadsheet for domain renewals, a notebook for server logins. In Italy there is one more hurdle. Every invoice must be issued as FatturaPA XML and sent through the national exchange system (SDI), and most CRMs do not do that. BalanceAI started as the CRM for my own consultancy. I then rebuilt it so that other businesses could run it too.

What I built

I built a multi-tenant management platform that puts clients, quotes, invoices and the technical side of the work in one place.

  • Multi-tenant core — every company works on isolated data, because every query is filtered by tenant. A superadmin panel manages tenants, so the same install can serve one business or be offered as SaaS.
  • Italian e-invoicing — the app generates FatturaPA 1.2.1 XML and sends it through Aruba’s e-invoicing API, with the login token cached per tenant. Payments and due dates are tracked on each invoice.
  • Quotes to invoices — quotes with multiple lines and discounts turn into an invoice in one step, so nothing is typed twice.
  • Domains and servers — renewal dates, automatic WHOIS lookups and a connection to the cPanel/WHM API, so expiring domains and hosting accounts are visible before they become a client problem.
  • Encrypted vault — server credentials, client passwords and private notes are stored with AES-256-CBC and a fresh random IV for each value.
  • AI client lookup — type a company name or VAT number and an OpenAI model (GPT-4o mini by default) returns address, certified email and SDI code as strict JSON to prefill the client card. Unknown fields come back empty instead of guessed.
  • Bulk import — existing data comes in from Excel, CSV, Word and PDF files.

Built with

Node.js and Express, with server-rendered EJS pages and Bootstrap 5 on the front end. Data lives in MySQL or MariaDB. The code is split into 26 routers, one per module, and 16 data models. Logins use sessions with bcrypt-hashed passwords. Integrations: Aruba e-invoicing, WHOIS, cPanel/WHM and the OpenAI API, whose key is stored encrypted for each tenant. It installs on a VPS behind Nginx or on cPanel hosting.

Why it was done this way

BalanceAI was a single-company CRM first. Version 2.0.0 made it multi-tenant with a migration script. The script adds a tenant column to every table and moves all existing records to tenant 1. Real data from years of use was kept intact, and the same codebase became a product other agencies can use. The rule that came with it is simple: no query runs without the tenant filter.

Got an idea?
Let's talk.

Whether it is a website, an app, a video, a song or something bigger, I am ready to help you make it.

Get in touch
  • Naples
  • Ideas
  • Projects
  • People
  • Always forward