Drawing set — 5 sheets
PropTracker — real estate investment platform
A private platform built to order for real estate investors in Khujand, Tajikistan. It replaced a shared spreadsheet with one system for properties, expenses, deal evaluations and model estimates.
- Client
- Real estate investors
- Location
- Khujand, Tajikistan
- Type
- Custom platform, built to order
- Status
- In use by the investors it was built for
- Roles
- Admin · Viewer
- Services
- AI Automation · Backend Infrastructure · Enterprise Software
The problem
The investors ran their portfolio in Excel. As properties and deals grew, the workbook became harder to trust and harder to share.
- Fragile formulasCalculations depended on fragile formulas that were easy to break or overwrite.
- Drifting copiesRecords went missing or fell out of date between copies of the file.
- All-or-nothing sharingShowing the numbers to one person meant sending them the entire workbook.
What we built
PropTracker is not a template product. It was designed and built around this group's own process: calculations moved out of spreadsheet formulas into tested code, and access is controlled by role.
- Properties and timelineEach property with purchase, sale and a dated timeline of events.
- ExpensesCosts recorded per property by category.
- Shared calculationsInvested capital, cost per square metre, profit and outstanding balance computed in tested code shared by the server and the forms.
- Deal evaluationsCandidate deals assessed before purchase; the decision and its reason are kept.
- Model estimatesA separate model service returns price estimates, deal score, saleability, estimated days to sell and projected ROI.
- Role-based accessAdmins edit records; viewers read and can request estimates. Shared access reduces the need to circulate workbook copies.
A typed web application on PostgreSQL, with a separate model service in Python.
The browser talks only to the Next.js application. Its server routes check the session, read and write through Prisma, and call the model service from the server. Both branches start at the application, and estimates return through it.
Layers
- InterfaceRecords, evaluations and charts in the browser.
- AccessBusiness routes check the session; record changes require the Admin role.
- DataA relational model of properties, evaluations, predictions, events and expenses.
- EstimatesA FastAPI service called from the server. The application records prediction history, with storage failures logged.
- Title
- PropTracker — system architecture
- Application
- Next.js 14 · TypeScript · Prisma
- Database
- PostgreSQL
- Model service
- FastAPI · scikit-learn
- Sheet
- 02 / 05
A simplified subset of the actual data model.
Properties carry purchase and sale facts. Evaluations can exist before a purchase; predictions can belong to a property or an evaluation. Events and expenses are added as dated records. Other tables are omitted.
Rules the model enforces
- Predictions are recordedEach prediction is written with its model version and input snapshot; the design treats it as a record of what the model knew at the time.
- Events form a timelineEvents are added to a per-property timeline that is designed to be append-only.
- A sale date sets soldWhen a sale date is present the server sets the status to sold; otherwise the supplied status is kept.
- One calculation moduleServer routes and form previews use the same tested calculation module.
- Title
- PropTracker — data model
- ORM
- Prisma
- Store
- PostgreSQL
- Entities shown
- 6 of 12
- Sheet
- 03 / 05
Signed-in access, two roles.
Business routes require a signed-in session; sign-in itself is the exception. Viewers read and can request estimates, which the application records as prediction history. Admins create and change records, save deal decisions and export reports. Shared access reduces the need to circulate workbook copies.
| Capability | Admin | Viewer |
|---|---|---|
| View properties, evaluations and estimates | ||
| Request a model estimate (the application records the request as history) | ||
| Add and edit properties, events and expenses | ||
| Save a deal decision | ||
| Export reports (CSV, XLSX) |
Access
- Sign-inNextAuth.js sessions; repeated failed sign-ins lock the account temporarily.
- AdminMaintains properties, events, expenses and evaluations; exports reports.
- ViewerReads records and can request estimates; cannot edit records.
- Title
- PropTracker — roles and access
- Sign-in
- NextAuth.js
- Roles
- Admin · Viewer
- Record edits
- Admin only
- Sheet
- 04 / 05
In use, data kept private.
PropTracker is used by the investors it was built for. Their portfolio data is confidential, so this page shows no figures or screenshots.
Back to reference workServices behind this project