A rental household management app for landlords and tenants — built with Flutter and Firebase.
Rently gives landlords and tenants a single place to manage everything about a tenancy. Landlords get a dashboard view across all their properties. Tenants get a clear view of their unit, lease, and payment history. Both sides get notified automatically when rent is due, overdue, or a lease is expiring.
Landlord features
- Dashboard with all properties and tenancy statuses at a glance
- Add properties, units, and tenants (manually by email or via invite code)
- Confirm payments and view full payment history per tenant
- Send and receive messages per tenancy thread
- Automatic notifications sent on behalf of landlord when rent is due or overdue
Tenant features
- View unit details, lease dates, and rent amount
- Log payments and upload receipts
- Message landlord directly within the app
- Receive reminders before rent is due and alerts if overdue
Shared
- Role-based auth — landlord and tenant see different views from the same login
- In-app notification feed
- Push notifications via Firebase Cloud Messaging
- SMS alerts via Twilio
| Layer | Technology |
|---|---|
| Mobile app | Flutter |
| Auth | Firebase Authentication (Email + Google Sign-In) |
| Database | Cloud Firestore |
| File storage | Firebase Storage (payment receipts) |
| Push notifications | Firebase Cloud Messaging |
| Scheduled alerts | Firebase Cloud Functions |
| SMS | Twilio |
| State management | Riverpod |
| Navigation | GoRouter |
lib/
main.dart
firebase_options.dart
app.dart ← MaterialApp + GoRouter setup
core/
auth/
auth_service.dart ← sign in, sign up, sign out, Google auth
auth_gate.dart ← redirects user by role on login
models/
user_model.dart
tenancy_model.dart
payment_model.dart
message_model.dart
services/
firestore_service.dart
notification_service.dart
invite_service.dart
features/
auth/
login_screen.dart
register_screen.dart
landlord/
dashboard_screen.dart
tenant_detail_screen.dart
add_tenancy_screen.dart
payments_screen.dart
tenant/
my_unit_screen.dart
payment_history_screen.dart
messages_screen.dart
shared/
notifications_screen.dart
message_thread_screen.dart
users/{uid}
role: "landlord" | "tenant"
name, email, fcmToken
properties/{propertyId}
landlordId, name, address
units/{unitId}
propertyId, landlordId, unitNumber
tenancies/{tenancyId}
unitId, landlordId, tenantId
rentAmount, rentDueDay
leaseStart, leaseEnd
status: "active" | "overdue" | "expiring" | "ended"
payments/{paymentId}
tenancyId, tenantId
amount, paidAt
confirmedByLandlord, receiptUrl
messages/{threadId}
tenancyId, participants: [landlordId, tenantId]
msgs/{msgId}
senderId, text, sentAt
notifications/{notifId}
userId, type, message, read, createdAt
inviteCodes/{code}
unitId, landlordId, used, expiresAt
- Flutter SDK installed
- Firebase project created at console.firebase.google.com
- FlutterFire CLI installed
dart pub global activate flutterfire_cli# Clone the repo
git clone https://github.com/YOUR_USERNAME/rently.git
cd rently
# Install dependencies
flutter pub get
# Connect to Firebase
flutterfire configure
# Run the app
flutter runfirebase_options.dart, google-services.json, and GoogleService-Info.plist are excluded from version control. Run flutterfire configure to generate them locally.
- Project setup
- Firebase Auth — email + Google, role assignment
- GoRouter role gate
- Landlord dashboard
- Add property / unit / tenancy flow
- Invite code generation
- Tenant unit view
- Payment logging + receipt upload
- In-app messaging
- In-app notifications
- FCM push notifications
- Cloud Functions — scheduled rent alerts
- Twilio SMS integration
MIT