Skip to content
serpico.

Real estate and construction

Construction Cost Tracking for a Cottage Developer

For a private developer with three cottage projects in the Lviv region, we built a cost tracking system: houses, stages, cost allocation across houses, documents, sales and rentals. Access is protected by mandatory two-factor authentication enforced at the database level.

Client
Private developer with three cottage projects in the Lviv region
Region
Lviv region, Ukraine
Timeframe
September - October 2026
Tech stack
Next.js 16 · React 19 · Tailwind CSS v4 · Supabase · Vercel · PWA · TOTP 2FA · AI-розпізнавання документів · Курси НБУ
screens
16
database tables
12
cottage projects in one system
3
Construction Cost Tracking for a Cottage Developer

Challenge

The developer is building three cottage projects in the Lviv region. Some costs relate to a single house, while others, such as materials or work for several plots at once, are split between houses in different proportions. In spreadsheets, this kind of allocation quickly becomes opaque, and the cost of each house has to be calculated manually.

On top of that, there were other challenges:

  • expenses are recorded in different currencies, and reports require the exchange rate on the transaction date;
  • invoices and documents pile up as photos and files that have to be entered manually;
  • some of the data already exists in Excel or CSV and has to be migrated without losses;
  • besides construction, sales and rentals of completed properties need to be tracked.

Security was a separate issue. This is the owner's financial data, so access had to be limited to invited people only, with mandatory two-factor authentication and a full change history. A regular password is not enough for a system like this.

What we did

We built the system on Next.js 16, React 19, Tailwind CSS v4 and Supabase, deployed on Vercel. It has 16 screens and 12 database tables.

Modules

  • houses and construction stages;
  • expenses allocated across several houses, with shares that add up to 1, so not a single hryvnia is lost or counted twice;
  • documents and invoices with AI recognition into a structured format;
  • Excel and CSV import without AI, so migrating old data is predictable;
  • sales and rentals;
  • reports and user management.

Currency and exchange rate

Each expense stores the currency, the transaction rate and the NBU (National Bank of Ukraine) rate on the date. This way reports can be built in any currency without manual recalculation.

Security

  • mandatory TOTP two-factor authentication required by the database itself: RLS policies only allow sessions with the aal2 level;
  • an audit log through database triggers;
  • the anonymous role has no permissions at all;
  • self-registration is disabled, and new users join only through an invitation link;
  • the application servers run in the same region as the database, in Frankfurt.

The system is built as a PWA, so it can be installed on a phone and expenses can be entered right from the construction site.

Results

The developer got one system for all three projects instead of a collection of spreadsheets. Expenses that relate to several houses are allocated by shares, so the cost of each house is calculated automatically.

What changed:

  • every expense has a currency, a rate and the NBU rate on the date;
  • old data from Excel and CSV is migrated through import;
  • documents can be uploaded for AI recognition, with a person reviewing the result;
  • sales and rentals are tracked in the same system as construction;
  • thanks to the PWA, expenses can be entered from a phone.

To be honest about AI: document recognition is implemented, but we do not claim it has been tested on a large volume of real documents yet. That is exactly why the Excel and CSV import was built separately and without AI.

What makes this project special

Most accounting systems protect data with a password and, perhaps, a two-factor check on the login screen. Here, two-factor authentication is required at the database level: without a verified second factor, a data request simply will not go through, even if the interface is bypassed. Combined with the audit log through triggers, disabled registration and servers running in the same region as the database, this provides a level of protection that off-the-shelf solutions for small businesses usually lack.

The second feature is cost allocation across houses with a check that the shares add up to 1. This is the very detail that usually makes spreadsheets stop adding up.

Published: · Updated:

Questions about this project

What drives the cost of a construction cost tracking system?

The price depends on the number of modules, properties and integrations, as well as the requirements for security and reporting. For example, AI document recognition and sales and rental tracking add to the scope. We prepare an estimate after reviewing your bookkeeping.

How does the system allocate costs across several houses?

An expense can be split across several houses in shares that add up to 1. This way every hryvnia goes into the cost of exactly the houses it relates to and is never counted twice.

How does multi-currency tracking work?

Each expense stores its currency, the transaction rate and the NBU rate on the date. This makes it possible to build reports without manual recalculation.

How well is the financial data protected?

TOTP two-factor authentication is mandatory at the database level: RLS policies require an aal2-level session. There is also an audit log through triggers, an anonymous role with no permissions, disabled self-registration and invitation-only access.

Can data be migrated from Excel?

Yes, there is an Excel and CSV import that works without AI, so the result is predictable. AI recognition is used separately for documents and invoices, and its output should be reviewed.

Who owns the code and where is the data stored?

We set the terms for code ownership and access in the contract before work begins. In this project, the application servers run in the same region as the database, in Frankfurt.

More case studies

A CRM for a Meat Producer's Marketplaces, Orders and Pricing
Web Development

A CRM for a Meat Producer's Marketplaces, Orders and Pricing

For a Lviv meat processing producer, we built a single dashboard that brings together feeds, orders, stock, shipping labels and prices from the client's own WooCommerce store and the MauDau and Rozetka marketplaces. The system now has 18 screens, 74 API routes, 6 roles and 5 scheduled automated jobs.

screens in the dashboard
18
API routes
74
Read case study →
Real Estate Agency in Bali: Best Average Google Position of the Year in the First Month
SEOGEO / AI SEOSEO audit

Real Estate Agency in Bali: Best Average Google Position of the Year in the First Month

The Bali agency rents out, sells, and manages villas. At the start, 9.29K pages were outside the index, and Google had not been able to read the sitemap for more than a year and a half. In the first full month of our work, the average position became the best of the year: 11.7.

Google clicks in September 2026, the best month of the year
3,791
average position, August vs September 2026
15.3 → 11.4
Read case study →
Hurtom: A B2B CRM and Wholesale Customer Portal
Web Development

Hurtom: A B2B CRM and Wholesale Customer Portal

Hurtom brings wholesale orders, order picking with actual weights, documents and account balances together in one CRM with a separate customer portal. Thanks to a ready foundation from a previous project, the first working version with all modules was ready in about 3 hours.

screens in the CRM
19
screens in the customer portal
9
Read case study →

Want results like these?

Tell us about your goals and we'll estimate your project's growth potential.

Free consultation

Tell us about your project and we'll prepare a growth plan