Construction Project ERP for Anademir
A construction project has an operational side and a commercial side. Quote, material requirements, progress billing and payment plan describe the same project from different angles. For Anademir, this platform brings them together in one system that is structured around the company’s business areas — not around the modules of an off-the-shelf product.
The case in one minute.
- Role
- Starting in 2021, Batunet developed the platform as custom software for the construction company Anademir and supported it over several years.
- System class
- Business system for construction projects: operational and commercial business areas in one application, structured the same way in backend and interface, on a shared data model.
- Shared reference
- The project is the anchor. Quote, project line items, material requests, progress billings, incoming payments, project receipts, documents and notes all reference it.
- Quote and project
- A quote becomes a project, including all line items, in a single transactional operation. The link to the quote is preserved, and carried-over line items remain identifiable as such.
- Progress billing
- A dedicated request type on the project with its own form, attachments, list and total. The status model distinguishes planning approval, accounting approval and the disputed case.
- Payment and currency
- Payment plans made up of installments with due dates, to which incoming payments are assigned. Amounts in Turkish lira and US dollars, with the Turkish central bank’s daily rate captured as a snapshot on the document and separate reporting series per currency.
- Traceability
- Changes to the central business objects are logged with before and after values, user and timestamp, and are searchable in a dedicated view.
- Technical foundation
- Laravel 10 as a JSON API and a standalone Vue 3 interface. Technically rebuilt in 2023; the first version ran on Laravel 9 with a server-rendered interface.
Two truths about the same project.
A construction project exists twice. On site, it is concrete, materials and deadlines. In the office, it is a calculated quote, a list of requested materials, a progress billing and a payment plan. Both sides describe the same undertaking.
The second side is the one that gets scattered. Cost estimation, material requirements, billing, payment plan and project records can live in different tools, each of which works on its own. What’s missing then isn’t order, but a shared point of reference — the place where all of it talks about the same project.
Starting in 2021, Batunet developed a platform for Anademir that brings this second half together in one system: structured around the company’s business areas, with the project as the shared reference.
Structured by business area, not by module.
The first design decides how a system like this ages. Here, it follows the business domain: quote, project, material request, payment plan, invoice, expense, supplier, product master data, user management and reporting are separate areas with their own access rights, their own rules and their own events.
The interface follows the same division. Application and user interface are structured around the same business areas, area by area. Anyone who needs to change a rule finds it in one place — an unspectacular sentence that makes the difference over years.
The division isn’t a technical preference but a reflection of the company’s areas of work. They correspond to the roles it already has — administration, accounting, engineering and staff — and the permission model is structured per business area and action.
- Sales and cost estimation
- Customers, Quotes with line items, Costs and margins, Payment plans
- Construction and materials
- Projects with line items and subprojects, Material requests, Product and material master data, Units of measure, Suppliers
- Commercial
- Progress billing, Incoming payments, Invoices, Expenses and cash
- Administration
- Users and roles, Documents and notes, Change log, Reports and Excel exports
Everything hangs on the project.
Separate business areas need a common denominator; otherwise they are just programs placed side by side. In this platform, that denominator is the project.
A project is created from a quote and keeps that origin. Attached to it are its line items, the site’s material requests, the progress billings, the assigned incoming payments, the recorded project receipts with the material consumption derived from them, the documents and the notes.
These areas aren’t connected by an end-to-end automation, but by the shared data model: they reference the same record. A shared reference is easier to achieve than an integration and lasts longer than any interface between two tools.

- Origin
- The quote the project was created from, Customer, Payment plan
- Scope of work
- Project line items, Line items carried over from the quote remain flagged
- Construction site
- Material requests with line items, Quantities and units of measure, Material sourcing
- Commercial
- Progress billings, Assigned incoming payments, Project receipts and material consumption
- Record
- Documents on the project, Notes
From a calculated quote to a project.
It starts with a cost estimate, not a price. A quote consists of line items, and each line item carries the purchase price and the resulting margin alongside the sales price. The quote totals are therefore a result, not an input.
When the quote turns into an order, the project is created in a single operation: header data and all line items are carried over, the project receives its own system number, and the link to the quote is preserved. The operation is wrapped in a transaction — it either succeeds completely or leaves nothing behind. A half-created project with half of its line items would be worse than none.
Every carried-over line item remains identifiable as carried over. Anything added to the project later can thus be distinguished from what was originally quoted — the prerequisite for being able to compare quote and execution at all.
- 01
Cost estimate
Line items with quantity, sales price, purchase price and margin; the quote total is derived from them.
- 02
Payment plan
The quote includes a plan of installments with due dates.
- 03
Conversion
The quote becomes the project: header data and all line items in a single operation.
- 04
Transaction
The operation is transactional. It either succeeds completely or leaves nothing behind.
- 05
Origin
Project and quote stay linked, and every carried-over line item is flagged as carried over.
- 06
Reference point
The payment plan moves along with it. From here on, the project is the reference point that the other business areas point to.
Material requirements on the project.
Demand comes from the construction site. A material request always belongs to a project — the customer isn’t entered again but derived from the project — and consists of line items with quantity and unit of measure.
Where the material comes from isn’t free text. There are separate master data sets: products with categories on the one hand, inventory material with its own master data on the other. Depending on its type, a request draws on one or the other, and the unit of measure is pulled from the master data instead of being typed in. That is the difference between a list you can analyze and a collection of notes.
Every request carries a status and stays visible on the project. The application covers material requirements and material master data; purchasing and inventory postings are not part of it.
Where the industry gets specific.
Up to this point, the system could be many things. This is where it becomes a construction system.
In construction, a progress billing isn’t a special case of an invoice but a document type of its own: the work billed for a period, performed by a specific company, on a specific project. That is exactly how it is modeled — as a dedicated request type with its own form for company, amount, document number, date and attachments, its own list, its own area on the project and its own total. The status model distinguishes planning approval from accounting approval and provides a separate state for disputed billings. Anyone who has ever negotiated a progress payment knows why this third state in particular isn’t an edge case. It is a status model that the people involved maintain, not an enforced workflow engine.
Alongside it is the payment plan. It is created on the quote, moves into the project and consists of planned installments with due dates. Incoming payments are assigned to these installments, and the degree of fulfillment results from comparing the planned amount with the payment received.
Calculations are done in two currencies, Turkish lira and US dollars. When a quote, payment plan, invoice or project receipt is saved, the Turkish central bank’s daily rate is recorded on the document, so it remains traceable which rate was used. The reports keep lira and dollars as separate series.
Rebuilt technically, continued functionally.
The first version of the platform ran on Laravel 9 with server-rendered tables and forms. In March 2023, the technical foundation was rebuilt: since then, Laravel 10 has provided a JSON API, and the interface is a standalone Vue 3 application whose modules mirror the same business areas as the backend.
Technically, this was a rebuild; functionally, it wasn’t. Quote, project, material request, progress billing and payment plan remained the areas in which the company worked, and the platform continued to be maintained afterward — with exports, corrections to reports and bug fixes.
This includes things you can’t see in an interface: server-side filtering, search and sorting of large tables, separate number ranges per document type, file attachments on projects and requests, and a change log with before and after values alongside a log of business events.
Why something like this doesn’t come off the shelf.
In the end, there is the question of why a construction company would have its own application built. The answer is rarely that nothing exists — plenty does. It’s that off-the-shelf software brings its own model: an idea of what a quote, a project and a billing should look like. As long as your own workflows are the ones it anticipates, that’s an advantage.
Here, the structure was different. Cost estimation, site management, accounting and administration each find their area, and all four see the same project. What emerges isn’t a universal ERP and doesn’t try to be one: no financial accounting, no inventory management, no suite. It is the system in which Anademir ran its projects.
Batunet developed the platform starting in 2021 and supported it over several years — including further development, support and bug fixing. The written framework agreement came later and described modules that already existed. That is the usual course for software that grows out of the work itself: it exists first and gets named afterward.
Where this case connects.
Questions about this case
Does Batunet develop custom ERP software for construction companies?
Yes, as custom software. The platform for Anademir is one example: quoting and cost estimation, projects with line items, material requests, progress billing, payment plans, document management, documents, roles and reporting in one application on a shared data model. It isn’t a universal ERP and doesn’t replace accounting software — it’s the system in which a company runs its own workflows.
When does custom software make more sense than an off-the-shelf ERP?
When your own rules are the reason for your success and not an accident of history. Off-the-shelf software brings its own model; that’s an advantage as long as your workflows are the ones it anticipates. As soon as customizing the standard becomes more expensive than your own application — or as soon as it bends exactly the rules that define the business — the equation tips.
How can operational and commercial construction project data be combined in one application?
Through a shared business reference rather than integrations between tools. In this case, the project is the anchor: quote, line items, material requirements, progress billing, incoming payments and documents all reference the same record in the data model. The business areas can still be developed separately without losing the connection.
Can existing spreadsheet-based and manual processes be moved into a custom application?
Yes, and the first step is usually a data migration: importing product and material master data from existing spreadsheets so the application works with real data from day one. After that, the structure decides. Master data that is pulled from a master record rather than typed in is the difference between a list you can analyze and digitized free text.
Can existing construction project software be extended step by step?
That depends on the structure. If an application is separated by business area, a new area is a local addition and not surgery on the entire system — that is exactly what this division is for. In this case, the platform grew in stages; in 2023, the technical foundation was also renewed while the business areas were preserved.
Continue your engineering journey.
Related concepts, decisions, playbooks and perspectives — as one connected path, not a list of links.
Let’s talk about your project.
No sales team. A direct conversation with the management.
