Build with AI

How to build a rental property management app with Replit

Build a rental manager in one Replit workspace, from the first message to the day your tenants sign in. Properties, leases, a rent ledger that reconciles, maintenance, and a tenant portal - on the Postgres database Replit provisions, published from the same tab.

August 2026 · 47 min read · Updated August 2026

Replit

$ Build me a rental management app with a database behind it: properties broken into units, a lease per unit carrying its rent and due date, a running balance per tenant worked out from what has been charged and paid, repair requests, and a tenant portal limited to one lease.

  • Database provisioned in the workspace
  • Ledger and portal built
  • Ready for you to publish
You describe it, Replit builds it
Start here

What a rental property management app actually is

It is two applications sharing one database: the side where you run properties, leases, rent, and repairs, and the side where each tenant signs in to see their own lease, their own balance, and the requests they have raised.

Most portfolios are run without one. The leases live in a folder, the rent lives in a bank statement, a spreadsheet holds who has paid, and the repairs live in text messages nobody can find in November. It works until a tenant disputes a balance, or a boiler fails while you are away, or you buy four more units and the spreadsheet stops being something one person can hold in their head.

The part that makes this genuinely hard is the money. Rent is not a payment, it is a charge that comes due on a date, sometimes paid late, sometimes paid short, sometimes paid twice, and every one of those cases has to leave a balance you can defend in front of the person who owes it. Get that right and the rest of the app is properties, screens, and a portal on top of it.

The ledger is the product

Charges on one side, payments on the other, and a balance derived from both rather than typed in anywhere. Once that holds, arrears, late fees, receipts, and the tenant’s own statement all fall out of the same records instead of being tracked separately.

Your tenant is a user of your software

That single decision is what makes this harder than an internal tool. Someone outside your organisation signs in, and they must see their own lease and nothing near anybody else’s - which is a database rule, not a screen that filters.

Rent arrives on a date, not on a click

Charges have to appear on the first, or the fifth, or whichever day each lease says, whether or not anybody opens the app. That means something running on a schedule, and it means being certain that running it twice cannot bill anyone twice.

Who actually owns the rentals

59.6%

of one-unit rental properties are owned by individual investors, against 1.8% held by REITs and real-estate corporations combined - Chandan Economics’ 2026 analysis of the Census Bureau’s 2024 Rental Housing Finance Survey.

Chandan Economics, 2026 (Census RHFS 2024 data) · checked published February 2026

What a rental manager needs

The parts every rental property manager is built from

Two of these six are where the difficulty lives. Knowing which two before you start is most of the planning this build needs.

01

A ledger you would be happy to show a tenant

Every charge raised, every payment received, and a balance worked out from those two lists rather than stored as a number someone can edit. Decide early which open charge a part payment pays down - oldest first is the convention, and it is worth being deliberate about, because it decides which line goes overdue and which late fee gets raised.

02

Properties and units, with a status that means something

A property holds units, a unit holds one lease at a time, and a unit is occupied, vacant, or out for works. That status is what turns a list of addresses into an answer to “what can I let next month”.

03

Leases that carry the money terms

A lease is where the rent amount, the deposit, the start and end dates, the day rent falls due, the grace period, and the late fee live. Put them on the lease rather than in your settings, because two tenants in the same building routinely sit on different terms.

04

A rent run that goes off on its own

Something that wakes up, finds every lease due today, raises this month’s rent charge, and adds a late fee where one is owed - without anybody opening the app. Build it to check whether it has already billed a period before it bills it, so a retry, a double trigger, or a manual run cannot charge anyone twice.

05

Maintenance requests with a trail

A tenant reports a problem, it gets a priority, somebody takes it, and it closes. Keep the history of who changed what and when: half the value of tracking repairs at all is being able to show that a request from six weeks ago was answered.

06

A portal worth signing into

Their lease, their statement, their receipts, their open requests. Get this right and most of the messages you currently answer by text stop arriving, because the answer was already on a screen the tenant can reach themselves.

Build vs buy

Own the ledger or rent it by the transaction

The subscription is rarely the interesting number here. Look at two other lines instead: what each product charges to move a single rent payment, and how many doors it expects before it will quote you at all. Those are what decide the cost in year three.

Build your own

An app you own is a one-time build. No fee rides on a rent payment, no minimum door count applies, and with an AI coding tool writing the ledger and the permission rules, the build runs in weeks rather than quarters.

  • No per-transaction fee on rent, because you choose the payment rail and negotiate its rate yourself
  • No unit minimum and no cap on an entry tier, so four doors and four hundred cost the same to run
  • Late fees, grace periods, proration, and which charge a part payment clears all follow your rules rather than a vendor’s defaults
  • Your tenants’ names, phone numbers, and payment histories sit in a database you control
  • The portal carries your name rather than a vendor’s, which matters when you are asking tenants to trust it
  • The records are ordinary rows, exportable the day you want them somewhere else

Rent the rails

Buildium · TenantCloud · DoorLoop · AppFolio

What renting genuinely buys you is the money infrastructure and the compliance around it. Bank verification, returned payments, chargebacks, tenant screening through the credit bureaus and 1099 filing are all real work, and none of it is the ledger you would enjoy building.

  • Rent collection works on day one, with the bank connections and failed-payment handling already solved
  • Tenant screening runs through bureau relationships you cannot easily arrange on your own account
  • Accounting depth arrives built rather than described: owner statements, bank reconciliation, 1099 e-filing
  • Somebody else keeps up with the filing rules and the forms when they change
  • Every one of them attaches a fee to moving rent, charged either to you per transaction or to your tenant per payment
  • Two of the four put a floor under your portfolio, either a unit cap on the cheapest tier or a 50-unit minimum before there is a price at all
BuildiumFrom $62/mo (Essential) to $400/mo (Premium), plus $2.35 on every incoming rent payment on the entry plan

The clearest published statement of what it costs to let somebody else move your rent. The plans run “starting at $62/month”, “starting at $192/month”, and “starting at $400/month”, and each carries its own transaction rate: incoming EFT is “$2.35 per transaction” on Essential, “$1.35 per transaction” on Growth, and “First 12 months free, then $0.60” on Premium. Outgoing EFT is “$0.99 per transaction” and cards “2.99% per transaction” throughout, with “$99 per business bank account” to set up on the entry plan. Multiply the incoming rate by your doors and by twelve before you compare tiers, because on a small portfolio that line can outgrow the subscription. Above 5,000 units the page gives a phone number instead of a price.

buildium.com · checked August 2026

TenantCloud$18/mo monthly or $15/mo billed annually (Starter) up to $60/$50 (Pro) - with the rent payment fee charged to the tenant

The cheap end, and the one that prices units differently: “Properties & Units” reads “Unlimited” on every tier, so nothing here scales with your door count. What scales is the payment, and the page is explicit about who pays it: “$ 1.95*paid by a tenant” on Starter, falling to “$1.75” on Growth and “$1.50” on Pro. Worth deciding deliberately rather than by default, because passing a per-payment charge to the person paying rent is a choice your tenants will notice. Plans run “$18.00/m” monthly against “$15.00/m” annually, “$35.00/m” against “$29.17/m”, and “$60.00/m” against “$50.00/m”, with Business “Starting at $100.00/mo”.

tenantcloud.com · checked August 2026

DoorLoopFrom $69/mo on the entry tier, billed yearly - capped at “Max 10 units”

Included for the cap rather than the price. The entry tier shows $69 against a struck-through $99, on a basis the page states as “Per month. Billed yearly.”, and it is limited to “Max 10 units”, which is fewer doors than plenty of the individual owners in the statistic above. The higher tiers show $149 and $209 against $189 and $239, Premium carries an “Onboarding fee based on portfolio size”, and past 300 units the page routes you to a demo booking. Every tier also displays “Only $3/unit” alongside its flat monthly figure without reconciling the two, so confirm which one you would actually be billed on before you budget from either.

doorloop.com · checked August 2026

AppFolioNo public price - and a “50 unit minimum” before there is one

The enterprise end, and the sharpest illustration of who this class of software is sold to. Three plans are named (Core, Plus, and Max) with no dollar figure anywhere on the page; every route is “Get a Quote” or “Chat with an Expert”. The single hard number published is the floor: “Minimum spend and 50 unit minimum apply”. We quote no estimate of the cost, because the vendor publishes none. If your portfolio is smaller than fifty doors, the useful thing to take from this row is not the price but the minimum.

appfolio.com · checked August 2026

Rule of thumb: if what you want is rent collected for you, screening run for you, and 1099s filed for you, buy it, because those are the parts that are genuinely tedious to arrange alone and the per-transaction fee is what they cost. If what you want is a ledger that matches how your leases actually work, a portal with your name on it, and no floor under your door count, build it. The middle case is a small portfolio that will grow, and there the number to look at is the fee on an incoming payment multiplied by your doors and by twelve, because that is the line that grows with you whether or not the subscription does.

No dev needed

Why build with Replit

A real app needs somewhere durable to keep what people enter, rules about who’s allowed to see it, and a place to actually run once it’s built. Those are three separate problems, and most solo builds solve them badly, or not at all.

Replit’s Agent handles all three from one chat, in the same workspace the app ends up living in:

The build loop
1

Describe

Tell the Agent what to build, in plain language.

2

Watch

It writes the code, sets up the database, and shows the app running live.

3

Try it

Use the real app in the preview rather than a mockup.

Publish

Take it live on Replit’s own hosting, or ask for the next change.

Loop back to Describe

The build and the place it ends up running are the same workspace throughout, so there’s no separate hosting account to set up later.

One workspacebuilds, runs, and hosts it

Replit is the one tool here that also deploys what it builds. Publishing takes the same project live on Replit’s own infrastructure, with a working domain, uptime monitoring, and security scanning included.

Managed Postgres with 20GB included free

Ask the Agent to add a database and it creates the schema and wires your app to it. What you get is a real, fully-managed SQL database rather than a mocked one.

Up to 10 Agent sessions in parallel (Pro)

Core allows up to 2 parallel Agent sessions and Pro allows up to 10, so more than one part of the app can be worked on at the same time.

What it costs

Pay a developer, or do it with AI

Two ways to get the same app built: pay a developer for their hours, or spend your own describing it to an AI coding tool. Here is what each one costs to build, and what it costs to keep running once it is live.

Hire a developer

Custom build, from scratch
Developer
~$12k-$46k
Supabase (backend)
Free tier · $25/mo (Pro plan)*
Hosting
$0 free tier
Build time
~230 hrs of their work

~$12k-$46k to build, then from $25/mo after launch

Our ~230-hour estimate, costed against the rate survey linked below. Its bands run through $100-$150+/hour for senior US developers, before the 20-40% an agency adds on top, which brackets a realistic range at roughly $50/hr and $200/hr. Where those hours go is the part worth knowing: the ledger and the permission rules are close to half of it, and neither is visible in a screenshot, which is why quotes for this kind of app come back higher than owners expect.

Build it with Replit

From scratch, with Replit
Replit
Free (daily credits) to $25/month (Core) or $100/month (Pro)
Database (built-in Postgres)
Free to start · 20GB included
Hosting (Replit Deployments)
Billed separately, on top of the plan
Your time
~110 hrs

Free to try the idea, ~$25-$100/month on Core or Pro while you build a real one, then whichever plan (plus any deployment cost) you keep using

Replit’s plan price and its credit grant are the same number, not a subscription plus a separate credit purchase: Core is $25/month for $25 of monthly credits (or $20/month billed annually), Pro is $100/month for $100 of monthly credits (or $95/month annually). Once you publish, Replit bills hosting through its own Deployments separately, on top of whichever plan you’re on. Budget for it as a second line, not folded into the $25 or $100.

* One line on the free tier matters more here than on most builds. Supabase Free includes 500 MB of database space, 1 GB of file storage, and 5 GB of egress a month, and it pauses a project after a week of inactivity - which is a real risk for an app whose busiest day is the 1st and whose quietest stretch is everything between. Pro, from $25/mo, removes the pause, raises storage to 100 GB (then $0.0213 per GB) and egress to 250 GB (then $0.09 per GB), and adds a daily backup with 7 days of history. Before you have tenants signing in, Free is fine; the day you send the first invite, the pause is the reason to move.

Neither column takes a cut of rent, because the app records payments rather than moving them, so the running cost is a database and a host and nothing else. That bill does not move when rent does: ten doors and two hundred cost the same to host, and the only thing that grows is the storage under whatever lease documents you keep.

Prices and rates from supabase.com, developex.com and replit.com, checked August 2026.

Plan first

Decide before you build

Six answers to write down first. Every one of them is a product decision about what you are promising your tenants, and each is far cheaper now than after real balances exist in the database.

01

How rent actually moves

Settle this before the schema. Recording payments (you get paid by transfer or card as you do today, and the app keeps the ledger) is simpler, cheaper, and enough for a great many portfolios. Taking payments inside the app adds a provider, a per-transaction fee, failed-payment handling, and a decision about who absorbs the fee. Retrofitting the other later means rebuilding the ledger.

02

Whether tenants sign in at all

A landlord-only tool is a much smaller build: one kind of account, one set of access rules, no invitations, no password resets for somebody else’s family. A portal answers most of the messages you currently answer by hand, at the cost of the entire second audience - roughly a third of the work in the estimator above.

03

What your rent terms actually are

Write your own rules down before anybody builds them: which day rent falls due, whether that differs per lease, how many days of grace, whether a late fee is flat or a percentage or both, how a mid-month move-in is prorated, and which open charge a part payment clears first.

04

Whose properties these are

Managing your own portfolio and managing other people’s are different applications wearing the same clothes. The second needs owners as a third kind of account, a statement per owner, and a management fee on what you collect. Say so before the data model is written, not after.

05

What personal data you keep, and for how long

This app holds tenants’ names, phone numbers, addresses, and payment histories - the most sensitive material any of these builds carries. Decide what you genuinely need, what happens to it when a tenancy ends, and how long a closed lease stays queryable.

06

How a tenant gets their account

Somebody has to be sure the person signing in is the tenant on the lease. A one-time link that expires and cannot be reused is the straightforward answer. Then decide how it reaches them - phone, your own email, move-in day, or a mail service you wire in - because that half is easy to forget until launch.

Approaches

Comparing your build options

The tool decides how much of this build is setup you do twice. Here is one app three ways - by hand, on a UI kit that ends at tables, or inside Replit, where the database, the scheduled rent run, and the eventual publish all sit in one workspace. Starting from the template skips the build itself: those ~110 hours already exist and already run.

~230 hrsBuilding by hand

Programming complex calculations consumes most of your time and money. Charging rent, processing partial payments, applying late fees, and balancing monthly accounts require invisible logic that can’t just be designed - it must be meticulously coded to prevent costly financial errors.

~170 hrsGeneric UI starter kit

Starter kits save time on visuals by offering ready-made dashboards, tables, and settings. However, a kit knows nothing about your business rules. You still need developers to program lease logic and configure security - ensuring one tenant never sees another’s financial details.

~110 hrsAI-powered development with Replit

Instead of writing code, you describe the features you need in plain language and the Agent builds them in a workspace that also hosts the finished app. It creates the database and sets up the permissions, so you can sign in as a tenant and verify exactly what they can see and access.

Interactive calculator

Estimate your exact build timeframe

Plenty of landlords need less than this. If your tenants will never sign in, or you would rather import your portfolio by hand once than build a CSV importer, untick those and watch the estimate drop.

What your property management app needs

Your estimate

110 hrs

start to finish

Based on the 6 of 6 features you’ve selected, plus ~31h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.

A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.

Setting up your workspace

Let’s set up the tools you need

Replit runs entirely in the browser, and it’s the one tool here that also hosts what you build, so no GitHub account is required first. Before step 01: an account and a plan. A database comes later, the moment your app actually needs one, and GitHub whenever you want a copy of the code outside Replit.

1

Replit account

Cost: Free

Sign up and you land in a workspace with an Agent chat, the code, and a live preview side by side, with nothing to install.

Sign up for Replit
2

Replit subscription

Cost: Free (daily credits), then $25/month (Core) or $100/month (Pro)

Starter’s free daily credits are enough to try an idea, not to finish one. Core is $25/month billed monthly, or $20/month billed annually, for $25 of monthly credits and up to 2 parallel Agent sessions. Pro is $100/month monthly, or $95/month annually, for $100 of monthly credits, more collaborators, and access to the strongest available models. The price you pay and the credits you get are the same number on both plans, so you have no separate subscription-plus-credits split to work out.

Compare Replit plans
3

Replit database (Postgres)

Cost: Free to start · 20GB included

Every Replit app includes its own managed Postgres database with 20GB of free storage. Ask the Agent to add one and it creates the schema and connects your app to it, with no separate account to create anywhere else.

Replit’s built-in database, Replit docs
Optional
4

GitHub connection

Cost: Free

Not needed to start, and not needed as an undo either, because Replit checkpoints the whole workspace as the Agent works. Connect a repository from the Git pane, free on every plan, and a copy of the real code lives outside Replit under your own account. Worth doing once the project is one you would hate to lose.

Using the Git pane, Replit docs

The first two are all you need to start. Everything here stays inside the one browser tab, the app included once you publish it, and the GitHub copy is the one deliberate exception.

Step by step

Build your rental manager, one Agent message at a time

Nothing installs and nothing gets connected from outside - the Agent writes the files, runs the commands, and provisions the database as it goes. One thing that shapes this whole build: the Postgres here has no hosted login attached to it, so your server is what tells the database who is asking.

  1. 01

    Start the app, ask for the database, and set the rules

    The database comes free with the workspace, so it goes in the opening message - along with the two rules the rest of the build depends on.

    PromptSet up the project and the database
    Set up a React 18 + Vite + TypeScript app with Tailwind and a server, and add a Postgres database to this Repl - the one Replit provisions, not anything outside. Write a short notes file at the project root recording three things: that this is a rental property manager; that the words throughout are property, unit, lease, tenant, charge, payment, and ledger entry; and two standing rules - a lease balance is derived from its charges and payments and never stored, and a tenant account reaches nothing outside its own lease. Keep the database connection details in Replit's Secrets rather than in the code.

    Write both rules into the notes file rather than only into this message. A stored balance is the shortcut any assistant will reach for when a dashboard feels slow, and it is the one that makes a statement and a ledger disagree.

  2. 02

    Build the ledger, and check it at a checkpoint

    The money model, against three invented leases. Take the awkward payments seriously here - this is the part that is expensive to fix once real rent has been recorded.

    PromptModel the portfolio and the ledger
    Design the schema and the server routes over it. Start with properties and the units they contain, where a unit reads as vacant, occupied, or under maintenance. Then leases: one tenant, one unit, and the money terms - rent, deposit, term dates, the day rent falls due, the grace period, and a late fee expressed both as a flat amount and as a percentage. Then tenants, then charges carrying a type, an amount, a due date, and the period they cover, then payments. Then the arithmetic: a payment clears that lease’s oldest open charges first and marks each fully covered charge paid, and a lease balance is always derived from its charges and payments. Seed three leases, then show me in the preview what the balance is after an exact payment, a short payment, and an overpayment.

    This is the step where checkpoints earn their keep. A rollback here also offers to take the database with it, which is exactly what you want while the only rows are seeds - and exactly what to think twice about later.

  3. 03

    Add the rent run as a scheduled job

    Rent has to be raised on the 1st whether or not anybody has the app open. Replit has a deployment type for precisely this shape of work.

    PromptBuild the monthly rent run
    Write a task that raises this month’s rent on every active lease whose rent day is today. Before it writes a charge, have it look for one already covering that lease and that period and skip if it finds one, so a repeat run is harmless. In the same pass, add late fees to anything sitting past its lease’s grace period, taking the flat amount, the percentage, or both from the lease itself. Have it log what it created. Then tell me how to run it as a Scheduled deployment once a day, and how to trigger it by hand so I can run it twice and confirm the second run adds nothing.

    Ask which deployment type this belongs on, and expect the answer to be a separate one from the app itself. A daily task and a web app want different shapes, and Replit publishes both from the same workspace.

  4. 04

    Add sign-in, then scope every row to the account asking

    Replit’s Postgres is a plain database with no login wired into it, so the Agent writes both halves: sessions on the server, and policies the server’s identity feeds.

    PromptAdd sign-in, roles, and access rules
    Add email-and-password sign-up, login, logout, and a server-side session, with a profile row per account. Add a roles table giving each account either landlord or tenant - in its own table, never on the account record, since anything there is editable by that user - and link each tenant record to an account. Then turn on row-level security across properties, units, leases, tenants, charges, and payments: have the server declare the current account and its role as a session-local setting at the start of every request, and write two policies per table that read it - a landlord reaches their own portfolio, a tenant reaches only rows tied to their own lease. Then show me how to prove, as a second tenant, that the first tenant’s statement comes back empty.

    There is no ready-made login handing the database an account id here, so the server is what knows who is asking. Build that first and the policies have something to read.

  5. 05

    Build the tenant portal and maintenance

    The side your tenants use, and the repair requests that give them a reason to come back to it.

    PromptBuild the portal and maintenance
    Build the tenant side. Behind a tenant session, four things: their lease and what it commits them to, a statement running charges against payments, a way to log a payment they have already sent, and the repairs they have reported. Then repairs for the landlord - the portfolio in one queue, with status changes, notes, and a history row on every change - where a tenant reports a description, a priority, and optionally a photo. Then a message thread per tenant, and a notice for a whole building. Every route here has to set the session-local account and role before it queries anything, or the step 04 policies pass everything and the portal is wide open.
  6. 06
    Destination

    Import your portfolio, then publish twice

    Your real units and balances, the dashboard over them, then Publishing - the app on one deployment and the daily rent run on another, with a careful look at who the app is visible to before the first invitation goes out.

    PromptImport the portfolio and publish
    Two things left. An importer taking a spreadsheet of units, tenants, leases, and opening balances - each row validated, the passing ones brought in, and every rejection kept with its reason so only those need fixing. Then the landlord dashboard: rent roll, arrears with their age, occupancy, and collections this month. Then help me test it end to end - a small file imported, a tenant invited on a single-use expiring link and accepted as that tenant, the statement read, a repair reported, a payment logged against the oldest charge, and the landlord side showing both the new balance and the new ticket. When it holds up, walk me through Publishing: which deployment type fits the app, which fits the daily rent run, and who the app should be visible to.
Authentication & security

Two audiences, one database

This build has the strictest access requirement in the set: a person outside your organisation signs in to it, and must reach exactly one lease. Here is what enforces that on a Replit build, and what else needs your attention.

Logins your server owns

Sign-in is built into the app rather than delegated to a hosted identity service, so sessions live on your own server - which is also what tells the database whether the account asking for a statement is the tenant it belongs to.

Two roles, not three

Landlord and tenant, and the tenant role carries unusual weight: the rows it reaches are somebody’s own financial record - what they were charged, what they have paid, what they still owe. A landlord reaches their whole portfolio; a tenant reaches one lease, one statement, and their own requests.

Where the checking actually happens

Replit provisions ordinary Postgres, so the policies behave as Postgres policies always do - the difference is where identity comes from. With no hosted login handing the database an account id, the Agent has your server declare who is asking at the start of each request and writes the policies against that setting. Get that wrong and every policy silently passes.

Pre-configured privacy for every table

The template ships 139 row-level security policies, and the count has a structural cause rather than an anxious one: nearly every table needs one rule for the landlord who owns the record and a second for the tenant it is about. Charges, payments, tickets, and messages each carry both.

Roles belong in their own table

Whether somebody is a landlord or a tenant is kept in a separate roles table rather than on the account record, because anything stored on the account is editable by the person it belongs to. A tenant who could rewrite their own role would inherit the portfolio.

Lease documents need their own check

A signed lease or a condition report is a file rather than a row. Serve those through your own server, applying the same ownership rule the tables use, rather than handing out a storage URL that works for anyone who has it.

The invitation is a credential

A tenant’s first sign-in comes from a link, which makes that link as good as their account until it is used. Store only a hash of it, allow it once, and give it an expiry - so a forwarded message or an old screenshot stops working. Put the secret it is signed with in Replit’s Secrets tool, not in the code.

Backups, and how far back you can go

The Agent checkpoints as it works - files, configuration, and optionally the database - so a bad change is a click back rather than an afternoon. Pro adds a 28-day database rollback on top. Worth having in place before there are rent ledgers you would be in trouble without.

PromptCheck who can see what
Review the access rules (row-level security policies) on every table. For each one, tell me in simple terms who can view, add, edit, and delete records, confirm that people can only reach their own data while the right roles can reach more, and flag anything left open that shouldn’t be.

Paste this into the chat before launch so the Agent checks nobody can see data they shouldn’t.

The one rule that matters: the database connection, the invitation signing secret, and any AI provider key you add later never go into the app or a public repo. If one gets out, treat it as compromised and rotate it the same day.

Workflow rules

What speeds the build, and what slows it

Speeds the build

  • One small, specific request per message, checked in the live preview before the next one
  • Letting the Agent provision the database from the chat instead of wiring one up by hand
  • Running two Agent sessions in parallel on unrelated parts of the app, once your plan allows it
  • Rolling back to a checkpoint the moment a change goes wrong, instead of unpicking it by hand
  • Reviewing what Publishing changed, meaning the domain, who can reach the app, and the machine it runs on, before the first release

Slows the build

  • Asking for the whole app in one message instead of one piece at a time
  • Building screens for data that isn’t in the database yet
  • Running unrelated Agent sessions against the same files at the same time
  • Letting several risky changes stack up before checking whether any of them actually broke something
  • Publishing without checking who the app is visible to first
Keeping a safe copy

Connecting GitHub (Optional)

Every change in Replit is saved automatically without any technical setup. Checkpoints are the day-to-day undo. You only need to link GitHub if you want a private copy under your own control or plan to hand the codebase over to external developers.

Every milestone is already saved

Replit’s Agent creates a checkpoint automatically at key points as it works: a full snapshot of the files, the configuration, and even the AI conversation itself, not just the code.

Checkpoints and rollbacks, Replit docs

Rolling back restores the whole workspace

One click returns your project to an earlier checkpoint (files and configuration together, and optionally the database), which is broader than a typical code-only undo, so a rollback after real data has changed is worth a second look before you confirm it.

GitHub keeps a copy outside Replit

Connect a repository from the Git pane, free on every plan, and stage, commit, and push changes back to GitHub with a click, or pull in anything changed outside Replit.

Using the Git pane, Replit docs

It’s also how an existing project gets in

Point Replit at a public repository’s URL for a fast import, or use the guided import for a private one. Either way, Replit detects the stack and installs everything on its own.

Import from a provider, Replit docs

You rarely type git commands

The Git pane’s buttons cover staging, committing, and pushing. If you’d rather type them yourself, the workspace Shell stays in sync with whatever the pane just did.

Going live

Going live: Replit publishes what you built

Both halves are already here: nothing to host elsewhere, and no database waiting on another account. Replit gives you four built-in deployment types, and the choice between them is about the shape of the work rather than about a supplier. This build wants two of them, because the daily rent run is a different shape of work from the app your tenants open. If you would rather run it somewhere else, the code is yours and the usual hosts are listed underneath.

HostBest forNotesFree tier
AutoscaleThe app itselfGrows with traffic and shrinks back when nobody is signed in, which suits this app’s rhythm well: a rush around the 1st of the month and long quiet stretches between. This is the one to publish the landlord side and the tenant portal on.Metered, billed with your plan
ScheduledThe monthly rent runRuns on a timer instead of answering requests, which is exactly the shape of the job that raises rent charges and late fees each day whether or not anybody has the app open. Publish it separately from the app, and keep the guard that stops it billing a period twice.Metered, billed with your plan
Reserved VMAlways-warm responseDedicated compute that never sleeps, so nobody waits on a cold start. Worth considering once tenants use the portal daily rather than monthly, though for most portfolios the traffic does not justify it.By machine size, billed with your plan
StaticNot this appFiles only, with no server behind them. Listed to rule out: sign-in, sessions, the ledger, and the access rules all need a server, so nothing in this build fits here.Metered, billed with your plan

For this build that means Autoscale for the app and Scheduled for the daily rent run. Review who the app is visible to before that first release, since Publishing is what sets it, and remember that the moment you send a tenant an invitation, the app is something somebody outside your organisation depends on.

Optional

Hosting it somewhere else

None of this is needed to go live, and the four deployment types above are the shorter route. Connect GitHub, though, and the project is an ordinary Vite build that any of these will serve, which is worth knowing if you already pay for one of them or if you want the app to outlive your Replit plan. The database stays where it is either way.

HostBest forNotesFree tier
VercelOne-click deploysPoint it at the repository once and every push publishes itself, with a Vite project needing no configuration at all. Read the plan terms before you start, though: Hobby is personal, non-commercial use only, and letting property is a business by any reading, so a live portfolio belongs on Pro at $20/user/mo.Pro from $20/user/mo (Hobby is non-commercial)
NetlifyDrag-and-drop or GitEither link the repository or drop the built folder onto the page. A deep link to a tenant’s statement needs one redirect rule, which it writes for a Vite project without being asked.Free tier
Cloudflare PagesCheapest at scaleServes from wherever is nearest the visitor, which is worth something when your tenants are spread across a city and half of them open the portal on a phone.Generous free tier
GitHub PagesFree Git-based hostingServes the site straight from your GitHub project once one routing setting is changed. The catch is specific to this build: free publishing needs a public repository, and the repository for an app holding tenants’ personal data should not be public - so this is free only in a way you would not use.Free from a public repo only
Firebase HostingTeams already on GoogleOne setup, then a single command per release. Worth it mostly if Google is already where your other accounts live.Free Spark tier
AWS Amplify HostingTeams already on AWSDeploy from the AWS console; one rewrite rule keeps a deep link to a tenant’s statement working. Worth it mainly when AWS already handles your other bills.Free tier (build + hosting)
SurgePublish from the terminalPublishes the built folder straight from a terminal command, with no repository involved anywhere. Useful for putting a ledger in front of a landlord for ten minutes, not for the app tenants sign into.Free - unlimited publishing
DigitalOcean App PlatformDigitalOcean usersBuilds and serves the project from the same account as whatever else you run there, which is the main reason to pick it.Free - 3 static sites, 1 GB/mo transfer

Two things to check rather than one: whether the plan permits commercial use, since Vercel’s Hobby tier does not and letting property is commercial by any reading, and whether it can publish from a private repository, because the code sits next to an app holding tenants’ personal data. Moving the app out does not move the Postgres database behind it, so plan that separately.

Database & backend

Your database is already part of the workspace

Nothing to connect. What lands in it is rows rather than files - leases, charges, payments, and tickets - so the included allowance goes a long way here.

ServiceBest forNotesFree tier
Replit PostgresData, built inManaged Postgres with 20GB included free, provisioned from the same chat that builds the app. A portfolio of leases and ledger rows is small data by any measure; the only thing that grows is whatever lease documents and repair photos you attach, and those belong in object storage rather than in a table.Free to start · 20GB included
How the money actually moves

Choosing your banking system

The application tracks balances, but an external service processes the actual payments. Today that service is whatever you already use, whether that is a transfer, a standing order or a card machine, and it costs you nothing, because nothing here takes a cut. Collecting rent inside the app means picking one of the three below, and rent is the payment shape where that choice matters most.

Stripe ACH Direct DebitUS rent, pulled from a bank account0.8% per payment, capped at $5

The cap is the whole reason to choose this: an $800 charge and a $3,000 charge both cost $5, so the fee stops growing with your rents. It pulls on a schedule you set, which is what a monthly charge needs. It also confirms slower than a card does, and a failed payment reaches you days later rather than immediately.

stripe.com · checked August 2026

GoCardlessUK and European direct debit1% + 20p per payment, capped at £4 (Standard plan, excluding VAT)

Built for recurring bank debit rather than adapted to it, on Bacs in the UK and SEPA in Europe, with the same capped shape. Read the international line before you commit: a payment from abroad costs 2% + 20p and carries no cap at all, so check it against your own tenants if any of them pay from another country.

gocardless.com · checked August 2026

Card paymentsThe tenant who will not do anything else2.9% + $0.30 per domestic card, +1.5% international

No cap, so this one takes a percentage of every rent payment for as long as the lease runs. On $1,500 rent that is about $44 a month, per unit, against $5 on the row above. Keep it as the fallback for a tenant who will not use anything else, rather than as the default.

stripe.com · checked August 2026

Work out one number before you connect anything: the fee on a single incoming payment, times your doors, times twelve. On twenty units at $1,500, capped bank debit costs about $1,200 a year and cards about $10,500, for the same money arriving. Connecting nothing is still a real answer: the ledger is correct either way, and a landlord who is happy to be paid by transfer pays none of this.

AI workflows

Where AI genuinely helps a landlord

Each of these is one more prompt once the ledger works - copy any of them in as they stand. All four reach the model through a single server-side function, which is the only place your key ever sits.

Triage a repair request

Tenants describe problems the way people describe problems. Turning “there’s water coming through the ceiling in the back bedroom” into an urgent plumbing ticket, routed to the right trade, saves the reading and the re-typing.

PromptTriage a repair request
Add a step when a tenant submits a maintenance request that sends the description and any photo caption to a server-side function calling an AI model, and returns a suggested category, a suggested priority, and a one-line summary for the ticket list. Show them as suggestions the landlord can accept or change rather than applying them silently, and never let the suggestion downgrade something the tenant marked as an emergency.

Draft the arrears message nobody wants to write

Chasing rent is the job landlords put off longest, and lateness costs more the later it is raised. A draft that already knows the balance and the days overdue turns it into an edit rather than a task.

PromptDraft the arrears message nobody wants to write
Add a "Draft a reminder" action on a lease with an outstanding balance. Send the amount owed, which charges are unpaid, how many days overdue each is, and the tenant’s payment history for the last few months to your ai function, and return a short, factual message in a tone I choose - a first friendly nudge, a firm follow-up, or a formal notice. Always show it as an editable draft, never send it automatically, and state the figures rather than describing them vaguely.

Read the lease and fill in the fields

Every existing tenancy arrives as a PDF or a scan with the rent, the dates, and the deposit buried in it. Typing those into a form for forty units is the single most tedious hour of moving a portfolio into any new system.

PromptRead the lease and fill in the fields
Add an upload on the lease form that sends an existing lease document to your ai function and returns the fields it can find - rent amount, start and end dates, deposit held, the day rent falls due, and any late-fee terms - as a pre-filled form for me to check before saving. Mark each field with how confident the extraction was, leave anything ambiguous blank rather than guessing, and keep the original document attached to the lease.

Ask the portfolio a question in plain words

The reports you build cover the questions you thought of. The ones you actually ask are things like which units come up for renewal before Christmas, or who has paid late twice in a row.

PromptAsk the portfolio a question in plain words
Add a question box on the dashboard that turns a plain-language question about my portfolio into a read-only query against my own data and shows the answer as a small table I can export. Send the schema rather than the records to the model, run only SELECT statements, apply the same access rules as the rest of the app so it can never read past what the signed-in account is allowed to see, and show me the query it ran alongside the answer.

A cheap model is plenty for most of the prompts above. Save Pro’s stronger models for the one or two spots where the extra reasoning actually pays for itself. Add any provider key through Replit’s own Secrets tool rather than hard-coding it, and keep every AI feature behind one server-side function so a single key covers the whole app.

Ready-made option

Get a head start with our template

The complete rental manager from this guide, already built. Point it at your own database, set your rent terms and fee rules, and start moving your portfolio in today.

Rental Property Manager

The exact property management app this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. A property management workspace where landlords handle properties, units, leases, tenants, rent, and repairs in one place, while tenants get their own portal. It replaces the spreadsheets and scattered messages that running rentals usually turns into.

React 18ViteTypeScriptTailwind CSSSupabase
Out of the box

The key benefits of starting with a template

The ledger already balances and the portal already keeps tenants apart. That is most of what this saves you - and behind it, the monthly rent run, the maintenance history, the messaging, and the CSV import are done too.

Building the core from scratch

~110 hrs

Opening the template, already built

~1 hr

~109 hrs of building you skip

Two different measurements, deliberately: ~110 hrs is what building the app costs you, and ~1 hr is how long the finished one takes to open, point at your own database, and get your own portfolio into. Setting your rent terms and fee rules takes the same time either way, so neither side counts it.

A ledger that already reconciles

Charges, payments, part payments, and a balance derived from the records rather than stored - with payments applied to the oldest open charge first, which is the convention most tenants and most accountants expect.

Landlord and tenant kept apart

Landlords manage the full portfolio while tenants strictly see their own lease and payment history. Privacy rules are enforced automatically by the database on every request.

All background automation, ready out of the box

Automated monthly rent charges with late-fee rules, protection against duplicate billing, repair request tracking, and tenant invitations are fully configured.

Clean structure your AI can safely customize

The template follows clean, predictable rules so you can ask your AI coding tool to add custom features without risking errors in your financial ledger or security rules.

Customer story

From founders who build on our templates

I braced myself for a headache building the financial logic, but the ledger and rent runs worked right out of the box. The data structure is incredibly clean, so I could just focus on tweaking the UI and onboarding my first properties. It saved us weeks of development.
Jeevan ThomasJeevan ThomasFounder & CEO, Hado.ai
Got questions?

Common questions

Not on its own, and that is a deliberate position rather than a gap. The app records what is charged and what has been paid, and keeps the balance right; the money itself arrives however it does today - transfer, standing order, card, cash. If you want rent taken inside the app, that is a payment provider you connect, with its own per-transaction fee to either absorb or pass on. Deciding which way you want it before you build the ledger is the single most useful hour of planning here.

No. Tables, sessions, access rules, the server routes behind them, and the daily job that raises rent all get written from plain-language prompts, and the Postgres they write into is created inside this workspace when you ask. Nothing needs opening anywhere else first.

By invitation rather than by signing themselves up, because you need to know the person logging in is the tenant on the lease. The pattern to build is a one-time link that expires and cannot be reused, with only a hash of it stored in your database. How the link reaches them is your call - read out on the phone, sent from your own email, or handed over at move-in.

The database, not the screen. Your server declares which account is asking at the start of each request, and the policies on every table read that, so a tenant’s session can only ever return rows tied to their own lease. The part to verify is that declaration: if the server never sets it, the policies pass everything, and the app looks perfect while it is wide open.

Nothing, provided you build it to check first - and you should ask for that explicitly. The rule is that the job looks for an existing rent charge for that lease and that month before raising one, so a retry, a duplicate trigger, or a manual run you had forgotten about cannot bill anybody twice. It matters a little more here because the run lives on its own schedule as a published Scheduled deployment, separate from the app.

Yes, and it is worth building the import rather than typing. Units, tenants, leases, and opening balances all come in from a spreadsheet, and the thing to insist on is that rejected rows are kept with the reason they failed, so a bad date in row 40 does not silently leave one unit out of your rent roll.

Your Replit plan, plus what you publish. Core starts at $25/month, or $20/month billed annually, and includes 20GB of Postgres - comfortably more than a portfolio of leases and ledger rows needs. Publishing is billed separately on top, and this build publishes twice: the app itself, and the daily rent run as its own Scheduled deployment. There is no fee on rent in any of that, because the app is not the thing moving it.

Yes, with one addition worth planning for up front. Managing your own units needs two kinds of account; managing other people’s needs a third - the owner - plus a statement per owner and a management fee taken from what you collect. All of that is describable in plain words, but it shapes the data model, so decide before it is written rather than after.

Nothing here is proprietary. Replit provisions ordinary PostgreSQL, so a standard dump gives you the whole portfolio - leases, charges, payments, tickets - in a form any Postgres host accepts. That is worth more in this category than most: the reason portfolios stay on software they have outgrown is usually that the ledger will not come out.

Yes - the replit.app subdomain it starts on can be replaced with your own through Publishing, HTTPS included. Do it before the first invitation goes out: you are asking tenants to sign in somewhere and enter their details, and a name that is recognisably yours does a lot of that work for you.

No. You describe what you want in the chat, and the Agent handles the rest: the code, the database, and a live version of the app right there in the workspace. The setup section above covers the account and plan you need first.

Replit hosts it. Publishing takes the same project live on a Replit domain, or your own if you connect one, with monitoring and access controls included, so you never open a separate hosting account.

Starter’s daily credits and a paid plan’s monthly grant both refill on their own schedule. Hitting either limit mid-build doesn’t touch what you’ve already made. Move up a plan for more headroom right away, or wait it out.

References

Sources checked August 2026
  1. 01Individual investors’ share of one-unit rentals (Census RHFS 2024 data), Chandan Economics. chandan.com (published February 2026)
  2. 022024 Rental Housing Finance Survey release, U.S. Census Bureau. census.gov (published February 2026)
  3. 03Pricing (plan tiers, incoming EFT per transaction), Buildium. buildium.com
  4. 04Pricing (monthly vs annual, tenant-paid ACH fee), TenantCloud. tenantcloud.com
  5. 05Pricing (entry-tier unit cap, billing basis), DoorLoop. doorloop.com
  6. 06Pricing (quote-only plans, 50-unit minimum), AppFolio. appfolio.com
  7. 07Pricing (Pro plan, storage, egress, backups, free-tier pause), Supabase. supabase.com
  8. 08Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
  9. 09Stripe pricing. stripe.com (August 2026)
  10. 10GoCardless pricing. gocardless.com (August 2026)
  11. 11Pricing (Starter, Core, Pro), Replit. replit.com
  12. 12Built-in database, Replit docs. docs.replit.com
  13. 13Publishing overview, Replit docs. docs.replit.com
  14. 14Deployment types, Replit docs. docs.replit.com
  15. 15Checkpoints and rollbacks, Replit docs. docs.replit.com
  16. 16Using the Git pane, Replit docs. docs.replit.com
  17. 17Import from a provider, Replit docs. docs.replit.com
  18. 18Secrets, Replit docs. docs.replit.com

This guide is general information, not legal, tax, or accounting advice - tenancy law, notice periods, deposit handling, and what you may charge as a late fee vary by country and by state, so check your own rules before you automate anything. Third-party prices, plan limits, and market rates are quoted from the sources above and were last checked on the date shown; vendors change them without notice, so confirm before you budget. Build hours and the cost estimates derived from them are our own estimates, not quotes. Replit is a product of Replit, Inc. Verify current capabilities and pricing before relying on them.