A decentralized application (dApp) for tokenizing real estate assets in Indonesia, built on Mantle Sepolia Testnet. This platform enables fractional ownership of property through ERC-20 compliant security tokens with built-in KYC compliance.
- Property Tokenization: View tokenized property details including location, valuation, and legal documents
- KYC Compliance: Integrated KYC verification system with multiple levels (Basic, Verified, Accredited)
- Token Transfers: Transfer tokens between verified investors with real-time balance updates
- Portfolio Management: Track your token holdings and ownership percentage
- Admin Dashboard: Manage KYC registrations, freeze accounts, and perform force transfers
- Multi-wallet Support: Connect via MetaMask, Rainbow, Coinbase Wallet, and more
- Frontend: React 19, TypeScript, Vite 6
- Styling: Tailwind CSS 4
- Web3: Wagmi 2, Viem 2, RainbowKit 2
- State Management: TanStack React Query 5
- Routing: React Router DOM 7
- Notifications: React Hot Toast
- Icons: Lucide React
Deployed on Mantle Sepolia Testnet (Chain ID: 5003)
| Contract | Address |
|---|---|
| KYCRegistry | 0xF84796da575F3aCB1b563951fF0C22CB039d607B |
| IndonesiaPropertyToken | 0x9D4eA7e7Eb182C628bb202a1521AA053868Cbeb6 |
registerInvestor: Register new investor with KYC levelupdateInvestor: Update investor's KYC levelrevokeInvestor: Revoke investor's verificationisVerified: Check if address is verifiedgetInvestorInfo: Get detailed investor information
transfer: Transfer tokens between verified investorsbalanceOf: Get token balance of an addresscanTransfer: Check if transfer is allowedfreezeAccount: Freeze an account (admin only)unfreezeAccount: Unfreeze an account (admin only)forceTransfer: Force transfer tokens (admin only)
- Node.js 18+
- npm or yarn
- MetaMask or compatible Web3 wallet
# Clone the repository
git clone <repository-url>
cd property-token-ui
# Install dependencies
npm install
# Start development server
npm run devThe app is pre-configured to connect to Mantle Sepolia Testnet. Make sure your wallet is configured with:
- Network Name: Mantle Sepolia Testnet
- RPC URL: https://rpc.sepolia.mantle.xyz
- Chain ID: 5003
- Currency Symbol: MNT
- Block Explorer: https://sepolia.mantlescan.xyz
Visit the Mantle Sepolia Faucet to get test MNT tokens.
src/
├── components/
│ ├── layout/ # Header, Footer, Layout
│ ├── property/ # PropertyCard, PropertyDetails, PropertyStats
│ ├── kyc/ # KYCBadge, KYCStatusCard, InvestorList
│ ├── transfer/ # TransferForm, TransferPreview, TransferHistory
│ ├── stats/ # StatsCard
│ └── ui/ # Button, Input, Card, Badge, Modal, Alert, Spinner
├── config/
│ ├── chains.ts # Chain configuration
│ ├── contracts.ts # Contract addresses and ABIs
│ └── wagmi.ts # Wagmi/RainbowKit configuration
├── hooks/
│ ├── usePropertyToken.ts # Read hooks for PropertyToken
│ ├── usePropertyTokenWrite.ts # Write hooks for PropertyToken
│ ├── useKYCRegistry.ts # Read hooks for KYCRegistry
│ └── useKYCRegistryWrite.ts # Write hooks for KYCRegistry
├── lib/
│ ├── format.ts # Formatting utilities
│ └── utils.ts # General utilities
├── pages/
│ ├── Home.tsx # Landing page
│ ├── Property.tsx # Property details
│ ├── Portfolio.tsx # User portfolio
│ ├── Transfer.tsx # Token transfer
│ ├── KYCStatus.tsx # KYC verification status
│ └── Admin.tsx # Admin dashboard
├── types/
│ └── index.ts # TypeScript type definitions
├── App.tsx # Main app with routing
└── main.tsx # Entry point with providers
# Development
npm run dev # Start dev server at http://localhost:5173
# Build
npm run build # Build for production
# Preview
npm run preview # Preview production build
# Lint
npm run lint # Run ESLint| Page | Path | Description |
|---|---|---|
| Home | / |
Platform overview and key statistics |
| Property | /property |
Detailed property information |
| Portfolio | /portfolio |
User's token holdings |
| Transfer | /transfer |
Send tokens to other investors |
| KYC Status | /kyc |
View KYC verification status |
| Admin | /admin |
Admin functions (owner only) |
| Level | Value | Description |
|---|---|---|
| NONE | 0 | Not verified |
| BASIC | 1 | Basic verification completed |
| VERIFIED | 2 | Full verification completed |
| ACCREDITED | 3 | Accredited investor status |
MIT License
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request