Preloader
Drag
Il gestionale sul computer e la stessa applicazione sul telefono
Web App

Management system for digital agencies: three applications, one single source of truth

Three applications and one single back end, for a group of agencies: quotes and contracts, workload planning, reconciled invoices, electronic signatures, encrypted credentials and an assistant that queries the real data.

  • applications, one single back end

  • tables in the database

  • endpoint modules

  • commits in four months

In summary

In brief

The problem was not the tools

The group worked the way almost every agency of that size works: quotes in a home-made configurator, tasks on Trello, deadlines in people’s heads, invoicing on Fatture in Cloud, expenses on spreadsheets retyped at the end of the month, client site credentials scattered between personal password managers and messages.

None of that was broken. The problem was that no tool knew what the others were doing: the time actually spent on a job never reached the next quote, an invoice issued did not close the contract line, a site going down did not create a job. The aim was not to digitise, it was to have one single source of truth and build everything else around it.

Schermata di scelta dell azienda: il sistema serve piu societa dello stesso gruppo

Three applications, one rule of three words

The FastAPI back end holds the data and all the rules. The desktop management system, in React, is for the people who sit in front of it all day. The phone application is not a rethink of the product: it is the same features, installable and with notifications.

The rule that carried the whole project is three words long: the back end decides. The two programs you see have no database, hold no copy of the rules and interpret nothing. When a permission changes, it changes in one place only. That showed when the third application arrived, and was able to follow the second feature by feature without rewriting anything.

Workload planning that proposes rather than decides

It is the largest module in the back end and the most complex page in the interface: a calendar by day, week and month, one column per person, tasks that drag, work swapped between people and overload detection.

The interesting part is not the calendar, it is the weighting. Not all hours are equal and each company in the group weights the types of job differently, so the weights are configured per company and the capacity per person. The first version distributed the tasks on its own: it worked, and it was removed. No algorithm knew that on that Tuesday that person was at a client’s. Since then the system calculates, flags the overruns and hands the decision to a person.

Calendario del carico di lavoro, con una colonna per operatore e il rilevamento del sovraccarico
Pipeline commerciale: richiesta, preventivo, contratto e piano di fatturazione

From the quote to the invoice paid

The commercial cycle is closed: catalogue, modular configurator, quote, contract, instalment billing plan. No more spreadsheets in the middle.

The integration with Fatture in Cloud is not a synchronisation, it is a reconciliation: it compares the bank statement with the invoices issued, finds the duplicates, accounts for credit notes and ties every document to the contract instalment that generated it. A separate service turns a subscription payment into an electronic invoice to the Italian tax authority’s exchange system.

The credentials vault

Here the security model matters more than the interface. Credentials are encrypted with Cloud KMS and the code takes three rules for granted: unlocking is not entering, because every reveal asks for a second short-lived permission, separate from the session and obtainable with a fingerprint or a face; somebody without access gets «it does not exist» rather than «you cannot», because the second would confirm that the credential is there; and there is no plaintext fallback, so if the key does not answer the vault does not open and does not write.

On top of that are the things an agency genuinely needs: asking a client for a credential with a single-use link, sharing several with a colleague in one go, rotation reminders and a readable access log.

Cassaforte delle credenziali, cifrate e tracciate
Assistente che risponde interrogando il database con i permessi di chi lo usa

An assistant that looks at the real data

It is not a program that answers from the documentation and it does not search inside documents: it queries the real database, with the same permissions as the user running it. It answers as you type, shows the application’s own cards rather than describing the data in words, and when the question implies an action, sending a message or booking a room, it does not carry it out: it proposes it and waits for a person to confirm.

The least visible work was on the honesty of the answers: do not invent people, do not report what was not searched for, explain why a list is empty instead of answering zero, and use the application’s words with the meaning they have inside it. Citations get verified, and there is a set of tests whose expected answers are calculated from the database, so different models can be compared on real questions.

Client websites, and a new law

From 27 September 2026 Italian legislative decree 30/2026 forbids generic, unsubstantiated environmental claims on commercial sites. The system keeps the register of client websites, with uptime, SEO analysis, speed scores, domain expiry dates and scheduled maintenance, and on top of that it has a compliance scan.

The result is not a list of alarms but a ranking in three levels: forbidden in itself, so it gets removed; dependent on the client’s certifications, so it gets checked; legitimate, so it gets left alone. The third level is the reason the feature exists in this form: «organic» on a certified product is protected by a European regulation, and flagging it as a problem would push somebody to delete a word the client has every right to use. A compliance tool that cries wolf does not just waste time: it does damage.

Registro dei siti web dei clienti, con stato, punteggi di velocita e manutenzioni
Il responsabile di progetto vede la squadra e puo riprogrammare, ma non vede i prezzi

The same application, three different jobs

Whoever administers sees the month’s indicators, the workload, on-time delivery and a desk of panels that move, saved per user. The project manager sees the team and can reschedule, but does not see the prices. Whoever works on the jobs sees their own work and nothing else: fewer menu entries and no decisions that are not theirs to take.

Permissions in the interface are a mirror, not a control: they hide what cannot be done, but the real authorisation sits in the back end on three levels, role, company and area of work. Once the work was finished, a check across 65 routes compared one against the other.

The same features, in your pocket

The phone application follows the desktop one rather than reinterpreting it: same behaviour, phone interface. It installs as a web application, is also distributed as an Android package and can handle notifications.

The desk is customisable, jobs drag from one column to another and the vault unlocks with a fingerprint or a face. Even the bottom bar is configured per user and per company, and the configuration lives on the back end: change phone and you find your own again.

Scrivania, lavorazioni e cassaforte nell applicazione da telefono

How it is built underneath, and what stays with me

Everything on Google Cloud in the Italian region: the back end on Cloud Run with a second service for the bridge to electronic invoicing, managed MySQL, two separate stores for images and for signed documents, Cloud KMS for the credentials, and the scheduled nightly jobs, from the indicators snapshot at 2am to the site scan every hour. The scan runs in groups of three to stay under the maximum time for a request: half the work with a cloud is adapting to its limits instead of fighting them.

Three things stay with me. Removing a feature is a product decision and not a defeat, because the automatic planner worked and was removed anyway. The value sits in the third level, that is, in distinguishing «forbidden» from «to be checked» from «legitimate, leave it alone». And security is designed at the start or it is not designed at all: the split by company put in on day one is the reason adding a credentials vault four months later cost two weeks instead of a rewrite.

The package

What was delivered

In detail

Technical details

The client is not named, by their choice. The screens come from the production system, but every piece of data traceable to a person or a company is replaced with fictitious data and the brands are blurred: what stays true is the interface.

Let's talk

Do you need software like this?

If you have a process you handle by hand today and would like to automate, tell me about it: we work out together whether it makes sense to build a tool on top of it.

Need something similar? This project is an example of custom web app and business system development. The first meeting and the quote are free: write to me and we will talk it through.