Houseshare
A landlord platform for shared households
Room-by-room letting, a rent ledger, and a portal for the people who live there.
A house let room by room to people who did not choose each other. One API serves two apps: a dense back office where the landlord does the bookkeeping, and a phone-first portal where a resident checks what they owe and whether anybody has looked at the boiler yet. Money that lands on the house is split before anyone is asked to pay it, and every refusal is a test.


Gebaut für Menschen mit Namen, nicht für Jobtitel.
Bevor irgendetwas gebaut wurde, hat jemand die späteren Nutzer namentlich aufgeschrieben. Jeder bekommt ein echtes Konto, und vor dem Livegang wird jeder Screen aus der Sicht jedes Einzelnen durchgeklickt.
Amina
Landlord
Checks arrears before anything else. Two houses, and she knows which room is empty.
Bilal
Landlord
A second landlord on the same instance, so every ownership rule has someone to refuse.
Chidi
Tenant
Reports the boiler and wants to know a human saw it. Disputes the arithmetic when he pays late.
Dara
Tenant
Moved in halfway through a billing period, which is why her share of every bill is the interesting one.
Ein Meilenstein nach dem anderen.
Nach diesem Plan wurde die App gebaut. Jeder Meilenstein steht in einfachen Worten da, zusammen mit der Prüfung, die beweist, dass er funktioniert.
13 Meilensteine, 13 gebaut
- 1
The portfolio
gebaut
A landlord adds a house and the rooms in it, and sees only their own.
So prüfen wir es
- Given 'amina' has no properties
- When 'amina' adds a house with three rooms
- Then the house appears on her portfolio with three vacant rooms
- When 'amina' adds a fourth room to it later
- Then the house is let by four rooms
- And 'bilal' cannot see it on his portfolio
- And 'bilal' is refused when he reaches for it directly
- 2
A room is let
gebaut
The landlord creates a tenancy for a room, and the room stops being empty.
So prüfen wir es
- Given 'amina' has a house with a vacant room
- When 'amina' agrees a tenancy with 'chidi' for that room and activates it
- Then the room shows as occupied by 'chidi'
- And the tenancy carries the agreed rent, deposit and notice period
- And a second tenancy for the same room cannot be activated while one is active
- 3
The rent ledger
gebaut
Charges accrue, payments settle them oldest-first, and arrears fall out of the arithmetic.
So prüfen wir es
- Given 'chidi' has an active tenancy with two unpaid monthly charges
- When 'amina' records a payment covering one month
- Then the older charge is settled and the newer one is still outstanding
- And 'chidi' shows as one month in arrears rather than two half-months
- When 'amina' records a payment larger than what is left owed
- Then the extra money is held as credit against the tenancy
- 4
The tenant portal
gebaut
A second frontend where a tenant sees their room, their tenancy and what they owe — and nothing else.
So prüfen wir es
- Given 'chidi' and 'dara' hold tenancies on rooms in the same house
- When 'chidi' opens the portal
- Then he sees his own room, rent and balance
- And he can read the month behind what he is told he owes
- And he cannot see what 'dara' pays for her room
- And he is refused when he reaches for the landlord's arrears view directly
- 5
The monthly rent run
gebaut
Charges raise themselves on the due day, reminders go out by queue, and nobody chases by hand.
So prüfen wir es
- Given 'chidi' has an active tenancy whose rent is due today
- When the monthly rent run executes
- Then a charge for this month exists against his tenancy
- And running it a second time does not create a second charge
- And the arrears sweep enqueues a reminder once the charge is overdue
- And 'chidi' receives that reminder by email
- 6
Something is broken
gebaut
A tenant reports a fault and watches the landlord's triage land on their screen without reloading.
So prüfen wir es
- Given 'chidi' has an active tenancy in a house owned by 'amina'
- When 'chidi' reports a broken boiler as urgent
- Then it appears on the triage queue of 'amina'
- And it is invisible to 'bilal'
- And when 'amina' marks it seen, the open screen of 'chidi' updates without a reload
- 7
Splitting the bills
gebaut
One energy bill becomes a fair share on each resident's statement, with the arithmetic shown.
So prüfen wir es
- Given a house owned by 'amina' has two occupied rooms and one empty room
- And 'dara' moved in halfway through the billing period
- When 'amina' enters a quarterly energy bill split per head
- Then 'chidi' is charged a full share and 'dara' a part share for her days
- And the empty room's share is carried by 'amina' rather than the residents
- And 'chidi' can see how the split was calculated without seeing what 'dara' pays in rent
- 8
The deposit and the move-in check
gebaut
Take the money, record the condition, and get both signatures while everybody is still friendly.
So prüfen wir es
- Given 'amina' has activated a tenancy for 'chidi' and recorded his deposit
- When 'amina' completes a move-in inventory check for the room
- Then the tenancy shows the check as awaiting the signature of 'chidi'
- And once 'chidi' signs it from the portal, neither of them can edit it
- And the deposit is never applied to an outstanding rent charge
- 9
The move-out
gebaut
Notice, check, deductions, response, settlement — a durable process that survives the weeks it takes.
So prüfen wir es
- Given 'chidi' has an active tenancy with a signed move-in check
- When 'chidi' gives notice and 'amina' completes the move-out check
- And 'amina' proposes a deduction naming the item it relates to
- Then 'chidi' sees the proposed deduction and the deadline to respond
- And when he accepts, the deposit is settled and the tenancy ends
- And the room returns to vacant while its ledger history stays readable
- 10
Nothing expires quietly
gebaut
Certificates and contracts with expiry dates, and something watching them so the landlord does not have to.
So prüfen wir es
- Given 'amina' has uploaded a gas certificate expiring in thirty days
- When the nightly expiry sweep runs
- Then 'amina' receives a reminder naming the property and the date
- And 'chidi' can read that certificate for the house he lives in
- And 'chidi' cannot read the licence documents of 'amina'
- And uploading a newer certificate supersedes it without deleting the old one
- 11
The house assistant
gebaut
A landlord asks a question in words and gets an answer from their own data, under their own permissions.
So prüfen wir es
- Given 'amina' has two houses with one room in arrears
- When 'amina' asks the assistant who is behind on rent
- Then the answer names that tenancy and the amount from the ledger
- And it cites the charges the figure came from
- And the same question asked by 'bilal' returns nothing about the houses of 'amina'
- 12
Three languages, one right-to-left
gebaut
English, German and Arabic across both apps — and the RTL pass that finds the real layout bugs.
So prüfen wir es
- Given 'chidi' has set his language to Arabic
- When 'chidi' opens his statement in the portal
- Then the layout is mirrored and the money column stays aligned
- And the arrears reminder he receives by email is in Arabic
- And no screen in either app renders an untranslated string
- 13
Tools and versions
gebaut
The portfolio as MCP tools an outside agent can drive, and a function contract that changes safely.
So prüfen wir es
- Given an outside client is connected over MCP as 'amina'
- When it asks for the vacant rooms in the portfolio of 'amina'
- Then it receives them from the same function the app calls
- And it is refused the portfolio of 'bilal'
- And changing a versioned contract is reported as breaking before it ships
Dein Unternehmen, mit eigener App.
Pikku Studio ist kostenlos und läuft auf deinem Computer. Fang mit den Tabellen, Ordnern und Chats an, die du schon hast.