Skip to content
ATLASBIP Business Intelligence Partners
ATLASBIP Business Intelligence Partners

Building materials · Trade ERP · Partner portal

Techizat Wholesale trade ERP with a partner portal for building materials

From six spreadsheets to one ledger on a phone

We built Techizat for a Baku building-materials supplier that sells to construction companies. Purchases, sales, payments, FIFO margin, quotes, invoices and delivery notes live in one phone-first system, and every partner gets a portal with their own balance and documents.

Project facts

Project type
Client project
Platforms
Mobile-first PWA · Desktop · Partner portal
Languages
Azerbaijani

01 The challenge

Six spreadsheets, and nobody knows the margin

The supplier buys building materials and resells them to construction companies. The trade ran on six supplier-statement spreadsheets, WhatsApp and phone calls. Purchases were written down. Sales were not.

  1. Sales were never recorded

    Every purchase had a line in a supplier statement. The other half of the trade lived in chats, so the profit of a sale was a guess.

  2. Six files, six ways to count

    Each spreadsheet computed its balance with its own formula. An error in one file quietly cancelled an error in another.

  3. Advances fell between the rows

    Money paid ahead to suppliers and deposits sat outside every balance, so nobody could say where the working capital was.

  4. One product, many names

    The same bag of cement appeared under different free-text names, so stock and prices could not be compared.

  5. Every answer took a call

    “How much do they owe us?” meant opening files, adding up columns and calling back.

Our design rule

If an entry takes longer than a WhatsApp message, nobody will make it. So every screen is designed around a phone and a stopwatch.

02 Sales on a phone

An entry in under 20 seconds

Partner, product, quantity, price, save. A sale is recorded between two calls, and a typical entry takes under 20 seconds on a phone. An automated end-to-end test times a phone entry on an emulated device on every release, against a hard time limit.

  • Recent partners first

    The companies you sold to last sit at the top of the picker, so most sales start with a single tap.

  • One catalogue, no free text

    Products come from a searchable catalogue. A supplier’s own product name is mapped to it once and remembered on every purchase.

  • Numbers are never guessed

    “1.465,20” and “1,465.20” mean different things. When the separators are ambiguous, the form asks you to retype instead of guessing.

  • Drafts and duplicates

    An interrupted entry waits as a draft. A supplier invoice entered twice within a week is flagged before it is saved.

03 FIFO cost and margin

Every sale knows which purchase it came from

Each purchase line opens a cost layer. Sales consume the oldest layers first and every consumption is stored, so the margin of each sale is a recorded fact, not a month-end estimate.

  1. The first sale drains the oldest layer

    180 bags for Demo Build LLC take all 120 bags of the first layer and 60 of the second. Cost, revenue and margin are stored with the sale.

  2. The second sale meets a new price

    200 bags for Sample Homes LLC finish the second layer and open the third. The newer purchase price shows up in the margin straight away.

  3. The third sale refuses to invent a cost

    150 bags are sold, but only 90 are left in layers. Techizat costs those 90 and marks the sale “cost incomplete” until the purchase invoice arrives. It never fills the gap with the last price or with zero.

  • Not a penny lost to rounding

    The consumption that closes a layer takes its exact remainder, so purchases always equal cost of sales plus stock at cost.

  • Cost stays with the owner

    An assistant can enter purchases, but cost and margin are hidden from that role.

  • Corrections with approval

    A late price change on a purchase becomes a cost-correction request, and the owner approves it.

  • A light warehouse

    Stock, counts, customer returns, returns to suppliers, write-offs and dead stock with no movement for 90 days.

04 Payments and balances

A balance nobody types

Techizat has no balance field. Every balance is recalculated from movements: goods, payments, advances, deposits and returns. It cannot drift out of sync, because there is nothing to keep in sync.

  • Computed, never typed

    Open the balance screen and every figure is rebuilt from movements. There is no stored total to fall out of date.

  • Advances and deposits count

    Money paid ahead is part of the balance, so the owner sees how much working capital sits with suppliers.

  • One company, one balance

    When you both buy from and sell to the same company, it has one card and one net position.

  • Payments find their documents

    A payment covers open invoices oldest first, or exactly the ones you pick. Offsets, three-party settlements and debt transfers are recorded as what they are.

  • Nothing is deleted

    A wrong line is reversed by a new line, so the history stays and the balance stays right. A debt write-off needs a reason.

  • Cash desks and bank accounts

    Every money movement lands in a named cash desk or bank account, so cash on hand is a figure, not a feeling.

05 Quotes, invoices, delivery notes

From quote to delivery note, one thread

A request that arrives on WhatsApp becomes a quote. The accepted quote becomes a sale, and the sale gets an invoice and a delivery note. Each document knows where it came from and what state it is in.

  • A quote has a life

    Request, sent, accepted, partly fulfilled, closed. A lost quote records why: price, lead time, stock or terms.

  • Sent means locked

    Once a quote is sent its lines stop changing. A new offer is a copy, so what the customer saw is never rewritten.

  • Status from payments

    An invoice is unpaid, partly paid, paid or overdue because of the payments allocated to it, never because someone ticked a box.

  • Delivery with a name

    A delivery note needs the recipient’s name. Once delivered it never goes back; a mistake is fixed with a new document.

  • Numbering by series

    Quotes, invoices and delivery notes each run their own automatic series, like QT-2026-0007.

  • Print and WhatsApp

    Every document has a print view, and a WhatsApp message to the partner opens from the phone in one tap.

06 Receivables and credit limits

The sale that stops at the limit

Before a sale is saved, Techizat asks one question: what will this partner owe after this line? Close to the limit it warns. Past the limit the sale stops and asks for a reason.

  • The question comes before the line

    The check uses the balance after this sale, not the balance before it, so the warning arrives while it can still change the decision.

  • A reason, not a dead end

    Past the limit the owner confirms with a reason. An assistant’s sale goes through with a reason and lands in the owner’s review queue.

  • “Not set” is not “unlimited”

    A partner without a limit is shown as having no limit set, so a forgotten limit never passes for a generous one.

  • Age, not buckets

    Debt age is the age of the oldest unpaid line. Alerts at 30, 60, 90 and 120 days fire once per debt, and the balance screen opens with the three oldest.

07 Partner portal

Each partner sees only their own

Partners find the answer in the portal instead of phoning for it. There a company sees its own balance, its lines in both directions, its reconciliation statements and the quotes addressed to it. Nothing about any other partner leaves the server.

  • One company, nothing else

    A partner sees its own balance, lines, statements and quotes. The server decides what is sent; the screen does not hide anything.

  • Reconciliation without calls

    The monthly reconciliation statement is confirmed in the portal instead of over the phone.

  • Quotes accepted online

    Accepting a quote is a deliberate, confirmed action, recorded with its time.

  • Access by approval

    A partner applies for access, and the portal opens only after the owner approves the request.

  • Leak tests on every change

    Automated tests sign in as one partner and try to read another partner’s data. Any leak fails the check.

08 Offline-tolerant PWA

No signal on site, no lost entries

Warehouses and building sites have weak coverage. Techizat keeps taking entries: they wait in a queue on the phone and go out when the connection returns, without booking anything twice.

  • Queued on the phone

    Without a signal, entries are kept in a queue on the device, with the time they were actually made.

  • Honest numbers

    A queued line is shown as not sent yet and does not change any balance until the server accepts it.

  • Never booked twice

    Each entry carries its own one-time key from the moment it is written, so a resend is recognised and skipped.

  • Checks still apply

    Credit limit, duplicate invoice and stock questions come back when the queue syncs and wait for the owner’s answer.

09 How it is built

Engineered like accounting software

The rules that protect money live in a framework-free domain core with unit tests. End-to-end tests run on desktop and mobile browsers, and custom checks stop anything that bends the money rules.

Ledger first
Balances, debt age and invoice status are derived from movements. None of them is a field someone can edit.
Exact money
All money maths runs on decimals, and an automated guard rejects floating-point arithmetic on amounts.
Domain core
Ledger, FIFO, credit, debt age, quotes and documents live in one tested core that the web app and the portal share.
Security
Role-based permissions, a separate sign-in for partners, owner approval for portal access and tenant data isolation enforced in the database.
Audit trail
Reversals instead of deletions, reasons for write-offs and limit overrides, and an end-of-day review of the assistant’s entries.
Data health
A health screen separates broken data (red) from unfinished work (yellow), such as a sale still waiting for its purchase cost.

Three roles, three views

  • Owner

    Sees cost, margin and every balance. Only the owner reverses lines, writes off debt and approves portal access.

  • Assistant

    Enters purchases and payments. Cost and margin stay hidden, and the owner reviews the day’s entries.

  • Partner

    Signs in to the portal and sees one company: its own balance, lines, statements and quotes.

Around the core

  • Installable PWA
  • Android · iPhone · desktop
  • Keyboard shortcuts
  • Command palette
  • WhatsApp share links
  • Print views
  • CSV export
  • Debt-age notifications
  • Multi-company architecture

Our role

What Atlas BIP did

  1. Discovery from the spreadsheets

    We audited the supplier statements line by line and rebuilt the business as data: partners, a normalised product catalogue, purchases, payments and the sales that had never been recorded.

  2. Phone-first product design

    We designed every screen around one rule, faster than a WhatsApp message, and kept the interface calm: one card style, colour only where it means something.

  3. Domain engineering

    We wrote the ledger, FIFO costing, credit limits, debt age, quotes and documents as a tested core with exact decimal money maths.

  4. Partner portal

    We built the portal with its own sign-in, owner approval and per-partner data isolation, verified by automated leak tests.

  5. Offline PWA and quality

    We added the offline queue, end-to-end tests on desktop and mobile browsers, and a timed phone-entry test that runs on every release.

Stack

Built on a modern stack

Application
  • TypeScript
  • React
  • Next.js
  • Tailwind CSS
Offline
  • PWA
  • Service worker
  • IndexedDB
Data
  • PostgreSQL
  • Prisma
  • Zod
Quality
  • Vitest
  • Playwright

Questions and answers

What trading companies ask us

How fast is data entry on a phone?

A typical entry takes under 20 seconds on a phone. Recent partners come first, products are picked from a searchable catalogue and the total is always on screen. An automated end-to-end test times a phone entry on an emulated device on every release.

How does FIFO costing handle goods sold before the purchase invoice is entered?

Each purchase line opens a cost layer and sales consume the oldest layers first. If a sale needs more than the layers hold, Techizat costs what it can and marks the sale “cost incomplete” until the purchase arrives. It never invents a cost from the last price or zero.

What exactly can a partner see in the portal?

Only its own company: the balance, lines in both directions, reconciliation statements and quotes addressed to it. Access opens after the owner approves the request, and the separation is enforced on the server and in the database, not by hiding things on screen.

Does it work without a stable internet connection?

Yes. Techizat is an offline-tolerant PWA: entries made without a signal wait in a queue on the phone and sync when the connection returns. Each entry carries a one-time key, so a resend is never booked twice.

Can you build a system like this for our distribution company?

Yes. We start from your real spreadsheets, statements and chats, agree the money rules with you in writing, and build a phone-first ERP around them: ledger, cost and margin, credit control, documents and a partner portal.

Your project

Your system is next

Tell us how orders, money and documents move through your company today. We reply within 24 hours with questions and a concrete plan.

Names and figures on screens are sample data.

Back to the start