TerraGrid
Final-year project: AI and blockchain property platform
XGBoost won a four-model benchmark (mean RMSE 0.609) and the blockchain sits behind its own gateway, so the MVP runs end to end on the Sepolia testnet.
The principle: Wall off the part you cannot reverse, here the ledger, behind a service boundary.
Graded A+.
In brief
- Challenge: Making a React frontend, an ML valuation model and a blockchain ledger behave like one product instead of three integrations side by side.
- Outcome: Shipped a working MVP on the Sepolia testnet: end-to-end token ownership, ML valuations, and a React dashboard over the top.
Context
Investors buying property at a distance have no reliable way to value it or to prove who owns it. The hard part wasn't any single piece; it was making three things that don't naturally fit — a React frontend, an ML valuation model, and a blockchain ledger — behave like one product instead of three integrations stuck side by side.
Constraints
- The property data was patchy and inconsistent, so the model had to cope with missing values instead of falling over on a bad row.
- On-chain transactions can't be undone, so the ownership-transfer flow had to be right before a single token was minted.
- I hadn't shipped blockchain before, so the design had to wall the smart-contract complexity off from everything else.
Decisions
- Benchmarked four model families for the valuation engine — linear regression, random forest, XGBoost, and a neural network — each hyperparameter-tuned and scored on RMSE/MAE, because property pricing is non-linear and benefits from feature interaction. XGBoost won consistently (best mean RMSE 0.609), served as a decoupled Python/Flask microservice so the models can be retrained independently of the core platform.
- Isolated the blockchain layer behind a service boundary so the React frontend and Spring Boot API never called Solidity directly — all chain interactions pass through a dedicated gateway.
- Used Spring Boot for the backend because its dependency injection and security framework handle the authentication, role-based access, and audit logging that a financial-adjacent platform requires.
Trade-offs
- The service boundary around blockchain adds latency to ownership transfers, but guarantees the frontend and API remain testable and deployable independently.
- Comparing four model families added modelling effort over committing to one upfront, but benchmarking them head-to-head on non-linear property data is what surfaced XGBoost (RMSE 0.609) as the strongest valuation model.
Outcome
Shipped a working MVP on the Sepolia testnet: end-to-end token ownership, ML valuations, and a React dashboard over the top.
Evidence
- Full ownership transfer lifecycle demonstrated on Sepolia testnet.
- Compared four ML models on real UK property data; XGBoost delivered the best accuracy (mean RMSE 0.609) and powers the valuation engine.
- JUnit unit tests, Postman integration tests, and a Hardhat smart-contract suite — all passing.
- Graded A+.
Stack
- React
- Spring Boot
- Python
- Flask
- XGBoost
- Solidity
- MySQL
Architecture
- Client: React SPA (React) — Dashboard & reactive UI
- Application: Spring Boot API (Spring Boot) — Auth, business logic, audit logging
- Intelligence: Valuation Engine (Python · XGBoost) — Flask ML microservice — non-linear property valuation; Chain Gateway (Solidity) — Isolated boundary for token ownership on Sepolia
- Data: MySQL (MySQL) — Persistent relational storage