NGT
Back to the case study

Full walkthrough · NGT · Servicios Informáticos · 2026

Trayectoria

The module I use to run the studio. What follows are its ten screens, loaded with an invented portfolio of twenty projects — there isn't a single real client's data in any screenshot — so you can see how it behaves under volume. At the end, what has to be true of a business for this same skeleton to fit it.

  • Next.js
  • App Router
  • PostgreSQL
  • Roles y auditoría
Trayectoria dashboard: five monthly figures on a dark background, each with its change against the previous month
The first screen doesn't show revenue: it shows what's left to split, which is the number people actually ask about.

Dashboard

Five figures, and none of them needs interpreting

The current month, read top to bottom in the order the money leaves: collected, net income after fees and taxes, profit after project costs and its share of fixed overhead, what the company keeps in reserve, and only then what's left to split. Each figure carries its change against the previous month as an arrow and a number, never as colour alone. A dashboard you can only read by telling colours apart is a dashboard some people can't read.

The figures are set in plain ink, not colour. Five numbers in five colours is a Christmas tree: the eye has nothing to land on and none of them stands out, which is the exact opposite of what a row of figures is for. Colour is kept for two things — what there is to split, the thing you came to find out, and whatever is wrong — so that when it shows up, it means something.

Projects

Loaded once, everything else is derived

The list puts the whole portfolio in one table: type, status, start date, agreed price, collected so far, progress, profit and margin. Margin is the column that drives decisions, because it's the only one that compares jobs of different sizes.

Inside a project you enter the agreed price, how many instalments and how often, what it costs and who takes part. On save, the instalment calendar is generated and the team is added to the split; from there you edit everything: add a cost, mark an instalment as collected, reverse one entered by mistake, or regenerate the calendar if the deal changed. A reversed payment doesn't vanish — the reversal itself is recorded.

Every collected instalment can carry its own document: the client's invoice or the transfer receipt, attached from the same screen where the payment is recorded, instead of living in a folder someone has to remember to open. The file never sits at a public address: it's stored authenticated and served from the server side, so a link pasted into a chat opens nothing.

A list of twenty projects with status, agreed price, collected, progress and margin
The margin in the last column is what compares jobs of different sizes: in red, the ones being done at a loss.
A project page with its instalment calendar, entered costs and the per-person split
Everything on this screen was entered once. The instalments were generated on saving the price and the frequency.

Cash flow

Six months back and six months forward

A forecast on its own says nothing: a weak month ahead reads differently if the six before it were the same. So the window opens half a year back, which is what gives scale to the half year ahead.

The chart isn't twelve pairs of bars: it's a single line of the running balance. What brings someone to this screen isn't "how much came in during May?" — that's in the table below, to the exact peso — but "how much money will I have, and when do I run short?", and that question is a line through time. It runs solid up to the last closed month and dashed from there on: what already happened and what is still a forecast can't be drawn the same way. Below zero the fill turns red, which is the only moment this chart has any business shouting. What came in, what is still due and what goes out each month show up on hover.

Five figures on top, in plain ink. Colour is kept for two: what the period leaves — the thing you came to find out — and what's overdue and uncollected, if anything is. How many months it looks ahead is a setting, not a constant in the code. And the window you are looking at exports to a spreadsheet in one click: semicolon-separated with comma decimals, which is what Spanish Excel needs to keep a row from landing in a single cell.

Cash flow: a running-balance line, solid across the six closed months and dashed across the six projected ones
The solid stretch already happened and is what gives scale to the dashed one. Without it the forecast starts in mid-air.

Settlements

On what was collected, never on what was invoiced

It's the rule that avoids the most expensive argument partners can have: an issued invoice creates no right to be paid, because the client can still fail to pay. Here earnings accrue against money that actually arrived. For each person you see four things — what they earned, what they've been paid, what's still owed and which projects it comes from — and payments are recorded against that balance. Months are picked one at a time; a person's balance is the sum of all of them.

Each payment also has a printable receipt — date, amount, description and, when a debt in one currency was settled in another, the rate the balance came down at — and both the month's split and the full payment history export to a spreadsheet. The receipt states in its footer that it's internal and not an invoice: looking like a tax document without being one would be the mistake, not the oversight.

Monthly settlements per person, with accrued, already paid, balance and the payment history
Below the balance, each payment with its date, its amount and a link to its receipt. When a dollar debt was paid in pesos, the line says what rate the dollar was taken at that day. Up top, the two buttons that export the month and the full history to a spreadsheet.

Fixed costs

What gets paid whether or not there's a project

Rent, licences, the accountant: costs that belong to no single job, which is exactly why they get left out of the maths — and exactly what eats the margin. Here they're entered once and split across the month's active projects by a rule you choose in Settings. A project can be excluded from the split when it should be — a favour, a trial job — and then it stops muddying everyone else's numbers.

The month's fixed costs and how they're split across active projects
The same costs split across fewer projects weigh more on each. That's why a slow month makes everyone's margin worse.

Alerts

Five things worth seeing before they hurt

It isn't a notifications inbox: it's five questions the module asks itself every time somebody signs in. Overdue instalments. Projects with a negative margin — the ones worked at a loss without anyone noticing until closing. Months where income doesn't cover fixed costs. Splits entered wrong, which don't add up to what they should. And projects with nobody assigned, the quiet way somebody's share never accrues at all. Red ones are counted separately.

Alerts screen grouped by type, with red ones separated from amber
Each alert gives the figure and the date, not just that something's wrong: an overdue instalment brings how much and since when.

People

A person and an account are not the same thing

You can split money with somebody who never signs in, and that has to be possible: a contributor who invoices and leaves doesn't need a password, they need their share calculated right. So a person in the split and a login account are two different things that meet on this screen, and the list shows every account pointing at the same person instead of keeping just one. Hiding an access that exists is precisely what must not happen here.

List of people in the split, their login accounts and the latest recorded payments
A person may have no account, and an account may belong to nobody in the split. Both are visible at a glance.

My account · Roles

An employee sees their own, and the rest never reaches them

There are three roles. Full control runs the whole portfolio. A reader sees all of it but can't change anything — useful for an accountant or a reviewing partner. And an employee sees only the projects they worked on, their settlement and their account: the monthly dashboard, cash flow, fixed costs and alerts don't even appear in their menu.

That isn't solved by hiding buttons. Other people's data is discarded on the server before the page is drawn, so it never leaves it; and asking for somebody else's project by its URL returns a 404, not a "you don't have permission", because a permission message confirms that project exists and lets you probe one id at a time. One detail that costs more than it looks: fixed costs are prorated across the entire portfolio and only then is the view filtered. Filtering at the query would change every number.

The module seen by an employee: a three-item menu and only her own settlement
The same screen, signed in as an employee. Three menu items instead of ten, her settlement and nothing of anyone else's: not hidden — never sent.
The My account screen with one's own balance and the password change
The only thing a reader can write anywhere in the module is their own password.

Audit log

The past can't be edited, not even by accident

Everything anybody does is recorded with their name and the time, including attempts the module refused. There's no delete button, and it isn't hidden: the table has a rule in the database that rejects updates, deletes and truncation. Not even the application can. A wrong row isn't corrected, it's explained by another row. That's the difference between a record and a file somebody might have tidied up.

Audit log with the name, time and detail of every action
Every line says who, when and what, in plain language rather than database jargon. None has a delete button, and it isn't hidden: the database refuses deletion.

Settings

Everything an accountant would argue about is a field

The percentage the company keeps in reserve, the exchange rate, fees and taxes for local and overseas payments kept apart, how many months the forecast looks ahead, and the rule for splitting fixed costs. Change one number here and the whole module recalculates: there is no second copy of the maths written into the code. Accounts are created from the same screen, each tied to the person in the split it belongs to.

And what the thing being administered is called. The module says "project" because it was born inside a software studio, but a repair shop calls it a work order, a builder calls it a site and an accounting firm calls it a file. Two fields — singular and plural, both typed by hand because Spanish pluralises "orden de trabajo" in the middle and no rule gets it right — and with that the noun changes across all ten screens, in the browser tab titles and in the files you download.

Settings screen with reserve, exchange rate, fees, taxes and the proration rule
None of this is written into the code. Change one number — or the noun, bottom left — and all ten screens recalculate.

Other industries

What has to be true of a business for this to fit

None of this is particular to a software company. Three things need to be true, and with all three the module fits without touching its logic.

That work is counted job by job rather than by the counter hour: something that starts, has an agreed price and ends. That it's collected in parts — a deposit and the balance, three instalments, a payment on progress — because that's where overdue money and the gap between invoiced and collected appear. And that the result is split between more than one person: partners, a team on percentages, a contributor per job, a salesperson on commission.

Without the third it still works, because margin and cash flow are still the problem. Without the second — paid in full, up front — half the module is surplus. And if the business bills a fixed monthly fee instead of by the job, this isn't what it needs.

Industry by industry

What changes between industries is the vocabulary

A repair shop has work orders with an approved quote, parts as the cost, a deposit and the balance on delivery, and mechanics paid per finished job. It's the same object under another name: margin per order answers which kind of repair is worth taking, and the fixed-cost split is what explains why a small job sometimes leaves less than nothing.

A builder or an architecture practice works by project with progress certificates, subcontractors taking their share and materials entered as cost: there the six-month cash forecast is the most-watched screen, because the work is paid for before it's paid out.

An accounting or law firm keeps files per client with agreed fees, monthly instalments and partners splitting by who brought the matter and who worked it. The "on collected, not on invoiced" rule is literally the argument every firm has.

A production company or an agency bills per project with an advance, uses freelancers per piece, and has overhead to split across the month's productions. A real-estate agency splits commission between whoever listed and whoever sold. A trades outfit — electricians, plumbers, refrigeration — subcontracts per job and needs to know what's left after paying whoever went.

In every case three things change: what the object is called — order, project, file, production, deal — the commission and tax percentages, and which costs count as fixed. All three are fields in Settings, with no exception: the name of the object is typed once in singular and plural, and the whole module starts saying it. The arithmetic underneath is the same.

Want something like this for yours?

None of these sites was built from a template. Tell me what you sell and what you're fighting with today, and we'll see what can be done.