Open, production-ready architecture for tokenized real estate on Stellar
onile tokenizes real-world assets on the Stellar blockchain, enabling fractional ownership and peer-to-peer trading of real estate. Property owners can issue tokens representing their assets, investors can buy fractional shares, and rental income is distributed automatically via smart contracts. Transparent, compliant, and accessible to all.
onile is a modular monorepo that implements a production-ready architecture for tokenized real-estate on Stellar. The repository is organized for clarity, separation of concerns, scalable deployments, and secure blockchain integration.
- Stellar-first blockchain layer — classic assets & Soroban-ready contracts
- Dual-database strategy — PostgreSQL for core relational data, MongoDB for flexible content
- Monorepo workflows — shared types and UI packages for consistency
- Cross-platform clients — Next.js web app and an Expo React Native mobile app
- Production DevOps — Docker, Kubernetes manifests, Terraform examples
- System Architecture
- Repository Structure
- Quick Start
- Development Workflow
- Testing
- Deployment
- Security & Compliance
- Contributing
┌─────────────────────────────────────────────────────────────────────┐
│ onile │
├─────────────────────────────────────────────────────────────────────┤
│ Clients: onile-web (Next.js) │ onile-mobile (Expo React Native) │
├─────────────────────────────────────────────────────────────────────┤
│ API Gateway / Backend │
│ (onile-api - Express) │
├─────────────────────────────────────────────────────────────────────┤
│ Datastores: PostgreSQL (ACID) │ MongoDB (flexible content) │
├─────────────────────────────────────────────────────────────────────┤
│ Blockchain Layer (Stellar) │
│ Classic assets + Soroban contracts (onile-contracts) │
└─────────────────────────────────────────────────────────────────────┘
See our package READMEs for per-service details. Top-level layout:
onile/
├── onile-web/ # Next.js frontend (App Router)
├── onile-mobile/ # Expo React Native app
├── onile-api/ # Express backend (controllers/services/repositories)
├── onile-contracts/ # Stellar contract sources and deployment scripts
├── packages/ # Shared packages (types, ui-kit)
├── infrastructure/ # K8s, terraform, monitoring
└── README.md # This file
- Node.js 18+
- npm or yarn
- Docker (for local databases)
- PostgreSQL, MongoDB, Redis (or run via Docker)
# 1) Start infra
docker-compose up -d
# 2) Install root deps
npm install
# 3) Start backend and web app (workspace-aware)
npm run dev --workspace=onile-api
npm run dev --workspace=onile-web- Adopt a feature branch per change
- Keep package boundaries: update
packages/shared-typesfor cross-package types - Add tests in
tests/folders and ensure CI runs them
- Unit tests: Jest
- API integration: Supertest
- E2E: Cypress (web) / Detox (mobile)
- Containerize each service and deploy with Kubernetes or your preferred orchestrator
- Use
infrastructure/for manifests and Terraform examples
- JWT auth with refresh tokens
- Rate limiting and input validation at API layer
- Multi-sig and locked issuing accounts on Stellar
- KYC/AML integration points prepared in the service layer
- Fork → branch → PR
- Run tests and include changelog entries
- Keep API contracts backward-compatible
For detailed per-app setup and commands, see onile-api/README.md, onile-web/README.md, onile-mobile/README.md, and onile-contracts/README.md.