A modern, full-stack property management application built with .NET 10 and React 19.
Status: Portfolio application. The hosted demo is a frontend with sample data; backend evaluation requires local setup.
full-stack-dev-johncastrosanabria.github.io/PropFlow
An interactive, front-end-only demo (mock data, no backend) β including the Leads sales funnel, the daily dashboard, and the Keller Williams productivity tracker. The login comes pre-filled with the demo credentials:
- Email:
demo@propflow.app - Password:
Demo1234!
The demo redeploys automatically on every push to main via GitHub Actions.
- Quick Start
- Overview
- Features
- Technology Stack
- Prerequisites
- Installation & Setup
- Running the Application
- Project Structure
- API Endpoints
- Design System
- Mobile Features
- Security
- Testing
- Building for Production
- Deployment
- Troubleshooting
- Implementation Details
- Completion Checklist
cd PropFlow.Api
dotnet runβ
Backend: http://localhost:5050
cd propflow-web
npm install # First time only
npm run devβ
Frontend: http://localhost:5174
Email: landlord@example.com
Password: Password123!
That's it! π
PropFlow is a comprehensive property management system designed for landlords to manage their rental properties, tenants, contracts, payments, and maintenance requests. The application features a responsive mobile-first design and is built with modern technologies.
- π 8 Complete Features - Dashboard, Properties, Units, Tenants, Contracts, Payments, Maintenance, Auth
- π± Mobile-First Design - Fully responsive on all devices
- π Secure Authentication - JWT-based with landlord ownership enforcement
- β‘ ready for local evaluation - Optimized, tested, and documented
- π Comprehensive Documentation - 8 documentation files
- Login with email/password
- User registration
- JWT token management
- Protected routes
- Auto-redirect based on auth state
- Property statistics
- Unit occupancy tracking
- Payment monitoring
- Maintenance request summary
- Create/Read/Update/Delete properties
- Address and location management
- View all rental units in a property
- Manage units within properties
- Set monthly rent and currency
- Track unit status (Available, Occupied, Maintenance)
- Filter by property
- Add and manage tenant information
- Store contact details and identification
- Track tenant history
- Create rental agreements
- Set lease terms and dates
- Track deposit amounts
- Monitor contract status (Active, Finished, Cancelled)
- Record rent payments
- Track payment status (Pending, Paid, Late)
- Support multiple currencies (USD, EUR, GBP, CAD)
- Add payment notes
- Date tracking (due date, paid date)
- Log maintenance requests
- Set priority levels (Low, Medium, High)
- Track request status (Open, In Progress, Closed)
- Link to specific properties or units
- Add detailed descriptions
- .NET 10 - Latest .NET framework
- Entity Framework Core - ORM for database access
- MySQL - Relational database
- JWT - Authentication and authorization
- AutoMapper - Object mapping
- React 19 - Latest React version
- TypeScript - Type-safe JavaScript
- Vite - Fast build tool
- React Router - Client-side routing
- TanStack Query - Server state management
- CSS - Mobile-first custom styling
- Node.js 18 or higher
- npm or yarn package manager
- .NET 10 SDK
- MySQL 8.0 or higher
- Git (optional)
# If using git
git clone <repository-url>
cd PropFlow
# Or navigate to the project directory
cd /path/to/PropFlowcd PropFlow.Api
# Restore NuGet packages
dotnet restore
# Build the project
dotnet build
# Apply database migrations
dotnet ef database updatecd propflow-web
# Install dependencies
npm install
# Verify TypeScript compilation
npm run type-checkUpdate PropFlow.Api/appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=propflow;User=root;Password=your_password;"
},
"Jwt": {
"Secret": "your-secret-key-here",
"Issuer": "propflow",
"Audience": "propflow-users"
}
}Terminal 1 - Backend:
cd PropFlow.Api
dotnet runTerminal 2 - Frontend:
cd propflow-web
npm run devchmod +x RUN_APPLICATION.sh
./RUN_APPLICATION.sh- Frontend: http://localhost:5174
- Backend API: http://localhost:5050
Email: landlord@example.com
Password: Password123!
Or create a new account using the Register page.
PropFlow/
βββ PropFlow.Api/ # Backend API
β βββ Controllers/ # API endpoints
β βββ Extensions/ # Service extensions
β βββ Middleware/ # Custom middleware
β βββ Program.cs # Startup configuration
β βββ appsettings.json # Configuration
βββ PropFlow.Application/ # Business logic layer
β βββ Common/
β β βββ DTOs/ # Data transfer objects
β β βββ Exceptions/ # Custom exceptions
β β βββ Interfaces/ # Service interfaces
β βββ Services/ # Business services
βββ PropFlow.Infrastructure/ # Data access layer
β βββ Persistence/ # Database context
β βββ Repositories/ # Data repositories
βββ PropFlow.Domain/ # Domain layer
β βββ Entities/ # Business entities
βββ propflow-web/ # Frontend React app
β βββ src/
β β βββ app/ # App routing & layout
β β βββ features/ # Feature modules
β β β βββ auth/ # Authentication
β β β βββ dashboard/ # Dashboard
β β β βββ properties/ # Properties
β β β βββ units/ # Rental units
β β β βββ tenants/ # Tenants
β β β βββ contracts/ # Contracts
β β β βββ payments/ # Payments (NEW)
β β β βββ maintenance/ # Maintenance (NEW)
β β βββ shared/ # Shared utilities
β β β βββ api/ # API clients
β β β βββ types/ # TypeScript types
β β βββ index.css # Global styles
β βββ package.json
β βββ vite.config.ts
βββ README.md # This file
POST /api/auth/login # Login
POST /api/auth/register # Register
GET /api/properties # List all properties
POST /api/properties # Create property
PUT /api/properties/{id} # Update property
DELETE /api/properties/{id} # Delete property
GET /api/rentalunits # List all units
POST /api/rentalunits # Create unit
PUT /api/rentalunits/{id} # Update unit
DELETE /api/rentalunits/{id} # Delete unit
GET /api/tenants # List all tenants
POST /api/tenants # Create tenant
PUT /api/tenants/{id} # Update tenant
DELETE /api/tenants/{id} # Delete tenant
GET /api/contracts # List all contracts
POST /api/contracts # Create contract
PUT /api/contracts/{id} # Update contract
DELETE /api/contracts/{id} # Delete contract
GET /api/payments # List all payments
GET /api/payments/contract/{id} # Get payments by contract
POST /api/payments # Create payment
PUT /api/payments/{id} # Update payment
DELETE /api/payments/{id} # Delete payment
GET /api/maintenancerequests # List all requests
POST /api/maintenancerequests # Create request
PUT /api/maintenancerequests/{id}# Update request
DELETE /api/maintenancerequests/{id}# Delete request
GET /api/dashboard # Get statistics
The Field Planner β PropFlow's UI is styled as an agent's working stationery planner: warm paper surfaces, carbon ink text, and four ballpoint inks doing real state jobs (red = urgent/action, green = settled/won, blue = selection/links, amber = pending). Every number with a target renders as a goal-vs-actual inked meter; loud states are rubber-stamped; figures sit in a tabular mono. Built with Tailwind CSS v4 and Magic UI components (Number Ticker, Shimmer Button, Blur Fade, Dot Pattern, Animated Circular Progress Bar, Animated List). The full system is documented in DESIGN.md.
| Ink | Hex | Usage |
|---|---|---|
| Paper | #f3eee2 | Ground, sheets, wells |
| Carbon | #201d18 | Text, display |
| Vermilion Ink | #b13a25 | Actions, urgent states |
| Ledger Green | #2c6a4e | Success, won, paid |
| Ultramarine | #2c4a86 | Links, selection, focus |
| Amber Ink | #8a6516 | Pending, expiring |
- Mobile: < 768px
- Desktop: β₯ 768px
- Headings: System fonts, responsive sizing
- Body: 16px base size
- Mobile: Optimized for readability
- Navigation (desktop + mobile)
- Forms (full-width on mobile)
- Tables (cards on mobile)
- Cards (responsive grid)
- Buttons (touch-friendly)
- Modals (overlay forms)
- Badges (status indicators)
The application is fully responsive and optimized for mobile devices:
- Touch-friendly buttons (44px minimum height)
- Readable font sizes (16px minimum)
- Bottom navigation for easy thumb access
- Hamburger menu for navigation
- Full-width forms and cards
- Optimized images and icons
- Mobile-first CSS approach
- Responsive tables (cards on mobile)
- Hamburger menu at top
- Bottom navigation bar for quick access
- Touch-friendly buttons
- Full-width forms and cards
- JWT Authentication - Secure token-based authentication
- Password Hashing - Secure password storage
- Landlord Ownership - Data isolation per landlord
- Authorization - Role-based access control
- CORS - Cross-origin resource sharing configured
- HTTPS Ready - SSL/TLS support for production
- Protected Routes - All routes except login/register require authentication
- Token Management - Automatic token inclusion in API headers
- Login with valid credentials
- Register new account
- Create property
- Create rental unit
- Create tenant
- Create contract
- Create payment
- Create maintenance request
- Edit each entity
- Delete each entity
- Test mobile layout
- Test desktop layout
- Test navigation
- Test logout
# Frontend (if tests are configured)
cd propflow-web
npm run test
# Backend (if tests are configured)
cd PropFlow.Api
dotnet testcd propflow-web
npm run build
# Output: dist/ directorycd PropFlow.Api
dotnet publish -c Release
# Output: bin/Release/net10.0/publish/- Frontend: 120 modules, 567ms build time
- Bundle Size: 342.85 KB (98.01 KB gzipped)
- Backend: All projects compiled successfully
Create .env file in propflow-web/:
VITE_API_BASE_URL=https://api.example.com
Backend configuration in appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=prod-server;Database=propflow;User=user;Password=password;"
},
"Jwt": {
"Secret": "production-secret-key",
"Issuer": "propflow",
"Audience": "propflow-users"
}
}cd PropFlow.Api
# Apply migrations
dotnet ef database update
# Or create database manually
# CREATE DATABASE propflow;- Backend builds without errors
- Frontend builds without errors
- All routes configured
- Navigation includes all features
- API clients created for all endpoints
- Components follow consistent pattern
- Mobile-first CSS implemented
- Form validation working
- Error handling implemented
- Loading states implemented
- Empty states implemented
- Environment variables configured
- Database migrations applied
- SSL/TLS configured
- CORS configured
Port already in use
# Kill process on port 5174
lsof -ti:5174 | xargs kill -9Dependencies not installing
rm -rf node_modules package-lock.json
npm installBuild errors
npm run build
# Check for TypeScript errorsDev server not starting
npm run dev
# Check console for errorsPort already in use
# Kill process on port 5050
lsof -ti:5050 | xargs kill -9Database connection error
- Verify MySQL is running
- Check connection string in
appsettings.json - Ensure database exists
- Run migrations:
dotnet ef database update
Build errors
dotnet clean
dotnet restore
dotnet buildAPI connection issues
- Verify backend is running on port 5050
- Check
VITE_API_BASE_URLenvironment variable - Ensure CORS is enabled in backend
- Check browser console for errors
Database issues
- Verify MySQL is running
- Check connection string
- Ensure database exists
- Run migrations
- PropFlow.Domain - Domain entities
- PropFlow.Application - Business logic and services
- PropFlow.Infrastructure - Data access and repositories
- PropFlow.Api - API controllers and middleware
- AuthController
- PropertiesController
- RentalUnitsController
- TenantsController
- ContractsController
- PaymentsController
- MaintenanceRequestsController
- DashboardController
- AuthService
- PropertyService
- RentalUnitService
- TenantService
- ContractService
- PaymentService
- MaintenanceRequestService
- DashboardService
- Landlords
- Properties
- RentalUnits
- Tenants
- Contracts
- Payments
- MaintenanceRequests
- AspNetUsers (Identity)
- LoginPage
- RegisterPage
- DashboardPage
- PropertiesPage
- UnitsPage
- TenantsPage
- ContractsPage
- PaymentsPage
- MaintenancePage
- Layout
- Navigation
- Forms (Property, Unit, Tenant, Contract, Payment, Maintenance)
- Lists (Property, Unit, Tenant, Contract, Payment, Maintenance)
- Auth components
- auth.ts
- properties.ts
- units.ts
- tenants.ts
- contracts.ts
- payments.ts
- maintenance.ts
- dashboard.ts
- client.ts (base client)
- Mobile-first CSS framework
- 200+ utility classes
- Responsive design
- Accessibility considerations
- Builds successfully with .NET 10
- EF Core migrations work with MySQL
- All endpoints enforce landlord ownership via JWT
- Refresh local verification before deployment
- 8 complete features with CRUD operations
- Mobile-first responsive design
- Secure JWT authentication
- Comprehensive error handling
- All routes configured
- Navigation updated
- API clients created
- TypeScript strict mode
- TypeScript strict mode enabled
- All TypeScript errors fixed
- Production build successful
- Optimized bundle size
- No console errors
- Proper error handling
- Form validation working
- Loading states implemented
- Authentication (Login/Register)
- Dashboard with statistics
- Properties CRUD
- Rental Units CRUD
- Tenants CRUD
- Contracts CRUD
- Payments CRUD (NEW)
- Maintenance Requests CRUD (NEW)
- README.md (this file)
- Quick start guide
- API documentation
- Troubleshooting guide
- Deployment guide
- Design system documentation
- Backend builds without errors
- Frontend builds without errors
- All routes configured
- Navigation includes all features
- Mobile responsiveness verified
- Form validation working
- Error handling implemented
- Loading states implemented
- Production build created
- Bundle size optimized
- Environment variables configured
- Error handling in place
- Security measures in place
- Database migrations ready
- CORS configured
- Ready for deployment
- Projects: 4
- Controllers: 8
- Services: 8
- API Endpoints: 40+
- Database Tables: 8
- Lines of Code: 5,000+
- Pages: 8
- Components: 20+
- API Clients: 9
- TypeScript Files: 50+
- CSS Utility Classes: 200+
- Lines of Code: 3,000+
- Features: 8
- CRUD Operations: 7
- Files Created: 15
- Files Modified: 5
- Documentation Files: 1 (unified)
- Total Lines of Code: 8,000+
PropFlow is now a fully functional, ready for local evaluation property management application with:
β
Complete backend with all CRUD operations
β
Complete frontend with all features
β
Mobile-first responsive design
β
Secure JWT authentication
β
Comprehensive error handling
β
Full documentation
β
Optimized performance
β
Ready for deployment
- β Development testing
- β User acceptance testing
- β Production deployment
- β Performance optimization
- β Security audit
- Check the Troubleshooting section above
- Review the API Endpoints section
- Check browser console for frontend errors
- Check terminal for backend errors
- Port already in use: Kill the process using the port
- Database connection error: Verify MySQL is running and connection string is correct
- Build errors: Run
npm installordotnet restore - API not responding: Verify backend is running on port 5050
- Start Date: April 23, 2026
- Completion Date: April 23, 2026
- Status: β Complete and ready for local evaluation
- Get it running - Follow the Quick Start section
- Explore features - Try creating properties, units, tenants, etc.
- Test on mobile - Open on a mobile device to see responsive design
- Review code - Check the project structure and implementation
- Deploy - Follow the Deployment section for production setup
PropFlow - Modern Property Management Made Simple
For more information or questions, refer to the relevant section in this README.