
Multi-role rent management platform where tenants report monthly payments by uploading receipt proof and tracking approval status, while admins manage tenants, properties, balances, and announcements in a centralized dashboard.
Workflow Automation
Report → verify → approve/reject with consistent status transitions
Data Integrity
Balance updates handled via database transactions to prevent inconsistencies
Security
Supabase Postgres RLS for tenant isolation + role-based access controls
Operations
Notifications center (broadcast + targeted) for tenant communication
Use Cases
Property Managers / Administrators
Manage tenants, properties, rent rules, balances, and announcements through a centralized admin interface.
Tenants
Submit rent payments by uploading receipts, track approval status (pending / paid / rejected), and view historical payment records.
Operational Communication
Broadcast notifications to all tenants or send targeted messages per tenant for billing and operational updates.
Key Metrics & Impact
Workflow Automation
Automated the full report → verify → approve/reject payment lifecycle, with balance updates handled via database transactions.
Operational Efficiency
Reduced administrative overhead by consolidating rent tracking, receipts, payment history, and notifications into one system.
Financial Consistency
Ensured accurate tenant balances through atomic SQL operations, eliminating partial updates and inconsistent states.
Security & Isolation
Improved data separation and access control using PostgreSQL Row Level Security (RLS) combined with role-based permissions.
Technical Challenges Solved
Secure Access Control
Protected admin routes using Next.js middleware and enforced tenant/admin isolation with RLS across core tables (profiles, tenants, payments, notifications).
Receipt-Based Payment Flows
Implemented receipt uploads to Supabase Storage (payment-receipts) with a clear payment status lifecycle (pending, paid, notpaid).
Financial Transactions & Integrity
Developed atomic PL/pgSQL functions (approve_payment_transaction, reject_payment_transaction) to safely update payment status and tenant balances.
Recurring Rent Charging
Used pg_cron and apply_all_due_rents() to automatically apply rent charges based on each tenant’s rent_day, including notification generation.
User Profile Management
Enabled profile updates and avatar uploads using per-user storage folders (avatars) enforced via folder-based storage policies.
Technical Architecture
Technical Stack
Frontend
Next.js 16 (App Router), React 19, Tailwind CSS, Client & Server Components (SSR via @supabase/ssr)
Backend
Supabase (PostgreSQL, Auth, Storage), PostgreSQL RLS policies, PL/pgSQL functions, pg_cron for recurring rent operations
Infrastructure & Modules
Tenant module: Dashboard, Rent Status, Payments, Profile. Admin module: Tenants, Payments, Notifications.
Code & Data Model
DB Schema
PostgreSQL schema covering tenants, properties, rent rules, payments, balances, notifications, and user profiles.
Codebase
Production-ready codebase with transactional SQL logic, secure API boundaries, and clearly separated tenant/admin domains.
Ownership
Designed, implemented, and operated end-to-end as a production rent management system, covering data modeling, financial workflows, security, deployment, and long-term maintenance.