The all-in-one platform built for transparency, efficiency, and tenant satisfaction. Finally, a real alternative to AppFolio.
PropertyFlows is a comprehensive SaaS platform for property management that distinguishes itself with a tenant-first user experience and AI-powered operations. The platform offers transparent pricing, multi-property support, online rent payments (ACH/card), maintenance tracking, lease management, dedicated tenant and owner portals, and robust audit/e-signature logging.
- Multi-Tier SaaS Plans: Starter ($49/mo), Professional ($149/mo), Enterprise (custom pricing)
- Automated Business Verification: Mesh Verify API integration with risk-based approval workflow
- Fraud Prevention: Email validation, IP/VPN detection, disposable email blocking
- 14-Day Free Trial: Automated trial-to-paid conversion via Stripe webhooks
- Smart Dunning: Configurable grace periods with automated payment retries
- Self-Service Portal: Plan upgrades/downgrades, payment method updates, invoice access
- Five User Roles: Admin, Property Manager, Landlord, Tenant, Vendor
- Strict Access Control: Only property managers can self-register; all others must be invited
- OIDC-Level Enforcement: RBAC logic in authentication callback prevents unauthorized access
- Invitation System: Token-based email invitations with role assignment
- Stripe Integration: ACH, debit, and credit card payments
- Automated Billing: Subscription management with webhooks
- Dunning Workflow: Grace periods, automated retries, suspension management
- Maintenance Triage: Intelligent request categorization and routing
- Fair Housing Compliance: Automated compliance checking
- Lease Renewal Predictions: AI-driven renewal likelihood analysis
- Move-In/Out Analysis: Photo-based condition assessment
- Document Copilot: AI-assisted document generation
- Multi-Property Support: Manage unlimited properties and units
- Lease Management: Digital lease creation, e-signatures, renewal tracking
- Maintenance Tracking: Field operations turnboard with vendor management
- Tenant Portal: Self-service rent payments, maintenance requests, documents
- Owner Portal: Financial reports, property performance, document access
- Vendor Portal: Job assignment, bidding, work documentation
- Double-Entry Accounting: Full chart of accounts, journal entries, financial statements
- QuickBooks Integration: OAuth2-based sync via JournalEntry API
- Bulk Import System: CSV/Excel upload with auto-field mapping and validation
- Audit Trail: Comprehensive logging and e-signature tracking
- GDPR Compliance: Data export, account deletion, consent tracking
- Multi-Currency Support: User-selectable currency, timezone, language
- Frontend: React, TypeScript, Vite, Tailwind CSS, shadcn/ui
- Backend: Express.js, TypeScript
- Database: PostgreSQL (Neon-backed)
- ORM: Drizzle ORM
- Authentication: Replit Auth (OIDC)
- Payments: Stripe (Connect for payouts)
- Email: Resend
- SMS: Twilio
- File Storage: Replit Object Storage (GCS-backed)
- AI: OpenAI GPT-4o-mini
- Node.js 18+
- PostgreSQL database
- Replit account (for Auth and Object Storage)
- Stripe account
- Resend API key
- Twilio account (for SMS)
- OpenAI API key (for AI features)
Create a .env file with the following variables:
# Database
DATABASE_URL=postgresql://user:password@host:port/database
# Authentication (Replit OIDC)
SESSION_SECRET=your-session-secret
# Stripe
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
VITE_STRIPE_PUBLIC_KEY=pk_test_...
# Resend (Email)
RESEND_API_KEY=re_...
# Twilio (SMS)
TWILIO_ACCOUNT_SID=AC...
TWILIO_AUTH_TOKEN=...
TWILIO_PHONE_NUMBER=+1...
# OpenAI
OPENAI_API_KEY=sk-...
# Object Storage (Replit)
PUBLIC_OBJECT_SEARCH_PATHS=...
PRIVATE_OBJECT_DIR=...
# Optional Integrations
PLAID_CLIENT_ID=...
PLAID_SECRET=...
PLAID_ENV=sandbox
DOCUSIGN_INTEGRATION_KEY=...
DOCUSIGN_USER_ID=...
DOCUSIGN_ACCOUNT_ID=...
ZILLOW_API_KEY=...-
Clone the repository
git clone https://github.com/yourusername/propertyflows.git cd propertyflows -
Install dependencies
npm install
-
Set up the database
npm run db:push
-
Start the development server
npm run dev
-
Access the application Open your browser to
http://localhost:5000
This project uses Drizzle ORM with push-based migrations:
# Push schema changes to database
npm run db:push
# Force push (use if you get data-loss warnings in development)
npm run db:push --force
# Open Drizzle Studio for database inspection
npm run db:studioImportant: Never manually write SQL migrations. Always use npm run db:push to sync schema changes.
propertyflows/
βββ client/ # React frontend
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Page components
β β βββ lib/ # Utilities and helpers
β β βββ App.tsx # Root component with routing
βββ server/ # Express backend
β βββ routes.ts # API routes
β βββ storage.ts # Database interface
β βββ replitAuth.ts # OIDC authentication
β βββ services/ # Business logic services
β βββ index.ts # Server entry point
βββ shared/ # Shared code between client/server
β βββ schema.ts # Database schema and types
βββ drizzle.config.ts # Drizzle ORM configuration
βββ package.json # Dependencies and scripts
- RBAC Enforcement: Authentication-level access control
- OIDC Authentication: Secure OAuth2/OpenID Connect
- CSRF Protection: Express session with secure cookies
- Rate Limiting: API endpoint protection
- Content Security Policy: XSS prevention
- HSTS: Force HTTPS in production
- Input Validation: Zod schema validation
- SQL Injection Prevention: Parameterized queries via Drizzle ORM
# Run unit tests
npm test
# Run with coverage
npm run test:coverage
# Run Playwright e2e tests
npm run test:e2eGET /auth/login- Initiate OIDC login flowGET /auth/callback- OIDC callback handlerGET /auth/logout- Logout userGET /api/auth/user- Get current user info
POST /api/organizations- Create organization (self-registration)GET /api/organizations- List organizations (admin)PATCH /api/organizations/:id/verify- Approve/reject organization (admin)POST /api/organizations/:id/activate-trial- Activate trial subscriptionGET /api/subscriptions/portal- Get subscription portal infoPOST /api/subscriptions/upgrade- Upgrade subscription planPOST /api/subscriptions/cancel- Cancel subscriptionPOST /api/webhooks/stripe- Stripe webhook handler
GET /api/properties- List propertiesPOST /api/properties- Create propertyGET /api/units- List unitsPOST /api/leases- Create leasePOST /api/maintenance- Create maintenance request- And many more...
| Feature | Starter | Professional | Enterprise |
|---|---|---|---|
| Price | $49/mo | $149/mo | Custom |
| Properties | Up to 10 | Up to 50 | Unlimited |
| Units | Up to 50 | Up to 250 | Unlimited |
| Users | 3 | 10 | Unlimited |
| AI Features | Basic | Advanced | Premium |
| Support | Priority | Dedicated | |
| Trial Period | 14 days | 14 days | Custom |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Replit for hosting and infrastructure
- UI components from shadcn/ui
- Payment processing by Stripe
- Email delivery by Resend
- AI powered by OpenAI
For support, email support@propertyflows.com or visit our documentation.
- Mobile apps (iOS/Android)
- Advanced analytics dashboard
- Tenant screening integration
- Insurance marketplace
- Multi-language support (beyond English)
- White-label capabilities
Built with β€οΈ for property managers who care about their tenants