Skip to content

Property management for space aggregators

Your building is not one thing you let.

You take the whole property on a head lease, cut it into rooms, partitions and beds, and sell those beds to contractors and to individuals. The unit is not what you sell. The bed is — so the bed is what this system counts, prices, invoices, inspects and frees up again.

AvailableOccupiedReservedTurnover cleanOut of serviceMoney

Those six colours mean the same thing on every screen of the product and every section of this site. Below is a building drawn at the level it is actually sold — one rectangle per bed. Pick a building, point at a bed, and note the second percentage: what a system that counts units rather than beds would report about the very same night.

Al Quoz Camp 1

Point at any bed.

384 beds across six blocks. Two corporate contracts hold 240 of them.

Counted by bed78.4%
Counted by room, the ordinary way100%

The gap is AED 61,500 a month of inventory the second number cannot see.

Available
52
Occupied
297
Reserved
19
Turnover clean
11
Out of service
5
Tonight’s revenue
AED 7,425
1database query draws a whole property's bed map, whatever its size
400 bedsrendered in under 500 ms — a budget asserted in a real browser on every build
150 daysof the map you can scrub through: 30 back, 120 forward
480beds built from one pattern in a single press, undoable for an hour

Why generic property software breaks here

Four things every other system gets wrong

Not features it lacks — assumptions it makes. Each of these is a modelling decision taken long before you arrive, and each one costs you a workaround for the life of the system.

01A bed is the billable item

Ordinary property software assumes: the thing you let is a unit with an address, and one lease points at it.

Inventory nests four ways — unit, room, partition, bedspace — and no deeper than three levels below the unit. Occupancy, price and vacancy are computed at bed level, and the database refuses a shape that makes no sense: a bed inside a bed, a partition that belongs to a different flat, a bedspace claiming to hold two people. A four-bed room is four sellable things, not five; counting the room as well puts stock in your denominator that nobody could ever fill.

8 space statuses29 legal moves9 space types4 legal nesting shapes
02Two leases sit on one asset

Ordinary property software assumes: one building, one landlord, one rent roll.

You hold the head lease, which is a cost, and you issue many subleases against the same concrete, which are the revenue. The number that decides whether taking the building was a good idea is the difference between them — per property, per month. A rent roll adds up revenue. It has no column for what the building costs you, so it cannot produce that number at all.

Head-lease instalmentsCheques outGross spreadCost per bed
03The customer is not the occupant

Ordinary property software assumes: the person sleeping in the bed is the person on the contract.

A contractor signs for twenty beds; his men rotate through them for three years and the contract never changes. Billing follows the agreement, compliance follows the person, and the join between them is a time-bounded allocation. Move a man from one bed to another and the contract's quantity, value, term and variation count do not move — nothing on the agreement changes at all.

Pooled contract linesAllocations500 placements at onceDrag to re-bed
04Compliance is a workflow, not a folder

Ordinary property software assumes: a documents tab with an expiry date on each row.

Four hundred men, each with a passport, a visa, an Emirates ID and a labour card, each with its own date. Mini PMS treats an expiry as something to act on: a ladder that starts sixty days out and escalates on its own, a nightly re-read at 06:10 in your own day, and — on the morning the date passes — a gate pass created as REFUSED with the document named on it, rather than quietly approved.

9 document types60 / 30 / 7 / 0 days4 escalation rungsRefused at the gate

The two-sided lease

The one number a rent roll cannot produce

Cost is one figure on one contract: what you pay the landlord for the whole building, usually in four cheques a year. Revenue is forty figures on twelve contracts, some of them corporate deals at a negotiated rate and some of them walk-ins at the headline one. The spread between the two sides is your business.

Drag the occupancy slider below and watch the gold bar shrink to nothing at the break-even line, then grow the other way in red. The axis is pinned to what the building could earn full, so the break-even line stays where it is while you drag — which is the only way to see something cross it.

Corporate beds fill first, because a pooled line is a committed quantity at a negotiated rate: it is allocated before anything is sold to an individual, and it is cheaper per bed. That is why the curve steepens at the right-hand end instead of being a straight line. The kink is real.

In the product this arrives as figures rather than as a picture: gross spread, opex, capex amortisation, net margin, margin percentage and cost per bed all sit among the thirty-three KPIs, computed per property as well as across the portfolio.

What you pay a landlord is one of ten readings granted individually rather than swept up by a read-only role. A supervisor who can run the camp cannot see what the camp costs you, and a dashboard that used to send that figure to their browser now withholds it before it leaves the server.

Alongside it: head-lease instalment schedules, the cheques you write to the landlord with bank, date, amount and whether each cleared, and a Cash Ribbon covering ninety days back and a hundred and eighty forward, with a danger band wherever the projection dips under a floor you set.

Al Quoz Industrial 3, DubaiLabour accommodation · 6 blocks

86%330 of 384 beds
AED 600per bed, per month
Head lease what the building costs youAED 149,000/mo

Head lease AED 115,000Security, cleaning, mess and unrecharged utilities AED 34,000

Subleases what your contracts earnAED 190,272/mo
Spread the number a rent roll cannot produce+AED 41,272/mo

AED 41,272 a month of spread at 86% occupancy. Break-even is 70.1%.

70.1%Occupancy needed to break even at this rate
+AED 107Spread per bed, per month — the unit that matters
21.7%Margin on the building, not on the rent roll
AED 672The next bed let, on the Individual residents line
Spread across the occupancy rangeEach kink is a contract line filling up. Past the last one you are selling at the headline rate, so the curve steepens.
Sublease lines on Al Quoz Camp 1, with the beds each holds at 86% occupancy
LineHeldCommittedRatePer month
Al Nakheel Contracting160160AED 540AED 86,400
Emirates Facilities Co9696AED 564AED 54,144
Individual residents74128 availableAED 672AED 49,728

Two corporate lines hold 256 of the 384 beds. The rest is sold one bed at a time, at a higher rate and with a month’s notice.

A corporate line is a pooled quantity, not a list of beds: the contract says “160 beds” and allocation decides which ones, later. When occupancy falls below the commitment the line is short — the marked figures above — and that is a conversation with the client, not a billing change.

Contracts and allocations

Twenty beds in Camp A, signed without naming which twenty

A contract line is either a specific bed or a pooled promise — a quantity scoped to a property, a block or a unit. The beds are chosen later, one arrival at a time, and the line shows how many of the twenty are placed and how many are still to come.

CL-1042Pooled

20 beds

ASGC Group · SUB-2026-0117

Rate
AED 750/bed/mo
Term
1 Jan 2026 — 31 Dec 2026
Billed monthly
AED 15,000

That figure is the same at nought beds allocated and at twenty. A pooled line is billed on its quantity, so the invoice never waits for the site office to decide who sleeps where.

Allocated against this line0/20

20 still to place. Click a mint bed.

line_mode
POOLED
allocations moved
0
contract_lines rows changed
0
variations raised
0

Camp A · blocks A and B · 48 beds

FreeOn this lineHeld elsewhereOut of service
A-01
A-02
A-03
A-04
B-01
B-02
B-03
B-04

Point at any bed. Click a mint one to place a man against the line.

200GET /contract-lines/CL-1042/allocations → 0 rows
  1. Nothing has happened yet. Every allocation, refusal and swap below is written to the audit trail with the actor, the reason and the row it touched.
The rule everything rests on

Two tenancies can never overlap on the same bed. The check is made by the database index at the instant of writing, not by reading first and deciding after — so of fifty agents racing for the last bed, exactly one succeeds and the other forty-nine are told who has it and from when.

A man moving out on the 31st and another moving in on the 31st is allowed. Moving in on the 30th is refused. And the rule walks the tree: a future booking on a bed blocks a future booking on the room above it, even though neither is occupied yet.

Twenty means twenty

A pooled line counts its own placements. The twenty-first allocation against a line for twenty is refused, and the message says how many the line is for, how many are already placed, and that raising it needs a variation.

Over-allocating puts a man in a bed nothing is paying for. It looks like occupancy on the board and like a gap in the revenue at month end.

A busload, or none of them

Up to 500 placements in a single request. If assignment 27 of 40 fails, nothing is written and the answer names the row and the reason, so you fix that one and resend.

Forty men off one bus with thirty-eight placed is worse than none placed, because nobody can tell which two have nowhere to sleep.

Twelve states, and only the legal moves

Draft, awaiting approval, approved, active, expiring, notice given, suspended, renewed, expired, terminated, cancelled, rejected. The server returns which moves are legal from where the contract stands, and each move costs its own permission: a leasing agent writes and submits a contract and cannot approve, activate, cancel or terminate it.

Writing a contract that starts before today is its own permission again, judged against your organisation's local date. Backdating moves revenue into a closed period; it should not need the authority of fixing a typo.

Five conditions before it goes live

At least one line, somebody has signed it, the deposit has been invoiced in full, every named bed is in a lettable state, and the activation stays inside your plan allowance. All five failures are reported together, not one at a time.

A contract that goes live without them bills a customer for a bed they were never given — and chasing a deposit after move-in is chasing a deposit that never arrives.

Signed contracts are varied, not edited

Add a line, change a quantity, rate or discount, or move the end date: each is a variation recording what the terms are now and what they would become, with the rent total before and after, sent for approval. Renewal is a fresh contract pointing at the original, not an edit of it.

Editing a live contract in place makes the invoice history stop matching the agreement that produced it — the argument you cannot win with a customer six months later.

48API operations across contracts, allocations, moves and the pipeline
52named refusals, each written as a sentence an operator can act on
6integrity rules inside PostgreSQL stopping a bed being sold twice
10checklist items gating a move-in and a move-out, five each
90 / 30 / 7days before expiry an annual, monthly or short-term contract enters the renewal radar

Invoicing, tax and collections

Every figure is a whole fils, and every line says why

Money is stored as a whole number of minor units with a currency beside it — never a decimal that drifts. Anything divided is split so the parts add back to exactly what went in, with the odd fils handed out by largest remainder. Adding dirhams to dollars throws rather than guessing a rate.

Step 1 of 8. An empty draft. Running total AED 0.00.

Tax invoice

INV-2026-1043

Gulf Falcon Contracting LLC

1–31 March 2026 · AED

Draft
Invoice lines, added one step at a time
DescriptionBasisAmount
No lines yet. Press Next.
The part month, priced four ways

A resident moving in on the 18th does not owe a full month. The contract chooses how that is priced: by the real days in the real month, by a flat thirty-day month, as a whole period anyway, or free. Periods run on the calendar or on the contract's own anniversary, across seven cycles from daily to annual.

Every disputed invoice in this business is a part month. The line prints "11 of 28 days (2026-02-18 to 2026-02-28)" beside the amount, so the argument ends at the invoice instead of in a meeting.

Tax resolved line by line

One invoice can mix exempt residential rent, standard-rated wifi and an out-of-scope deposit, so tax is decided per line against the date of supply, and each line stores the sentence explaining the answer. Eight UAE rules over four tax codes are seeded — and they are editable rows in your own database, not code.

A single rate applied to a whole invoice is wrong for at least one line on it, and you find out at an audit. Exempt and zero-rated stay separate rows in the summary even though both read 0%, because a tax return distinguishes them absolutely.

Issued means issued

A draft can be edited freely. The moment it is issued, the amounts, the customer, the number and the dates are frozen — the database rejects the change, not just the screen. Corrections are credit notes with a reason code, capped at what is left uncredited, and two raised in the same instant cannot jointly exceed the invoice.

The customer has a copy. A gap in your invoice numbering is the first thing a tax authority asks about. You keep an audit trail instead of an eraser.

Post-dated cheques

A year’s rent arrives as twelve pieces of paper

In this market the cheque is the instrument, not a payment with a date on it. So it is its own record with its own eleven-state lifecycle: received, in hand, deposited, then cleared or bounced — and from bounced to replaced, legal action or recovered. Only the legal next moves are ever offered, and handing one to the bank runner is logged as a move of paper rather than a change of status.

Banking a cheque and marking it bounced are different permissions, because that is exactly the fraud the separation exists to stop. A month calendar shows each day’s cheques due for presentation, inbound against outbound, with the net. A custody view groups every cheque the system believes you physically hold by where it says it is, and names the ones with no recorded location — which is the list somebody stands in front of the safe with before an audit.

C-2026-0184 · Gulf Contracting LLC

Al Quoz Camp 1 · 240 of 384 beds · 01 Jan – 31 Dec 2026 · AED 2,160,000 for the year, handed over as twelve cheques on the day of signing.

Register as atDay one — 28 Dec 2025

Day one — 28 Dec 2025 12 in the safe, 0 at the bank, 0 cleared.

Click any cheque, or use the arrow keys.
Emirates NBD · Al Quoz004417PayGulf Space Management LLCThe sum ofOne hundred and eighty thousand dirhams onlyAED180,000Gulf Contracting LLC01 Jan 2026
ReceivedINV-2026-0301
  1. Received and logged against the contract28 Dec 2025
Where it physically is
Safe A · Box 3 · Al Quoz office
Drawn on
Emirates NBD · A/C Gulf Contracting LLC · 0198765432
Against
C-2026-0184 line 1 — 240 pooled beds, Al Quoz Camp 1
Scan
Both faces on file

What is physically in the safe

SAFE-A · BOX 3 · AL QUOZ
In the safe, presentable
12chequesAED 2,160,000
Lodged at the bank
0chequesAED 0
Cleared to date
0chequesAED 0
Returned or superseded, held on file
0instrumentsAED 0

12 instruments issued against this contract, 12 accounted for, counted as at 28 Dec 2025. A returned cheque is still a piece of paper in a drawer — it is worth nothing and it is still yours to hold, which is why it is counted and not deleted. A schedule of due dates cannot answer this question at all.

Against these sit four outbound cheques to the landlord — AED 1,440,000 for the whole property, all 384 beds, written the same week. This one contract of 240 beds covers every dirham of it and AED 720,000 besides. That is the two-sided lease: one asset, two chequebooks, and a spread rather than a rent roll.

Arrears: aged, chased once, capped

Open invoices fall into current, 1–30, 31–60, 61–90 and 90+ days, per customer and in total. The ladder then climbs: a reminder at day 1, a formal reminder plus late fee at day 5, escalation to the corporate contact at day 10, a final notice at day 20, a collection case at day 30. Each rung is recorded against the invoice once, however many times the job runs, and only ever moves forward — recorded being the operative word, because until you configure a relay the step is written as pending and nothing leaves the building.

Late fees can be fixed, a percentage or per-day — each with a grace period and a hard ceiling, and each raised as its own invoice so it can be chased and credited separately. You can rehearse the whole run before anybody is chased, and rehearsing costs less authority than running it. The five rungs themselves are a fixed default: their days and their channels are constants, and there is no screen yet that edits them or varies them by customer.

Deposits are a liability, and close at zero

Deposits sit in their own append-only ledger, entirely separate from revenue — held, deducted, refunded, forfeited, transferred in, transferred out, each with a reason. The balance can never fall below what is actually held, and the system tells you how much you may refund rather than just refusing.

At move-out, the deposit covers what it can, the remainder is refunded, and the ledger closes at exactly zero — anything still owed becomes an ordinary debt rather than a negative deposit. Taking money in, deducting, refunding and forfeiting are four different acts needing four different authorities.

45finance endpoints across invoicing, payments, cheques, deposits and collections
48rules the database itself enforces on money
43separate permission keys governing money
18account codes in the starting chart, and the journal will not export unless it balances
351unit tests on the money and billing engines alone

Occupant compliance

An expired visa refuses the gate pass, not a report

Drag today across the calendar below and watch one man’s documents walk the ladder: amber at sixty days, red at thirty, and at zero a pass that is created REFUSED with the document named on it. The passport goes red first and does not refuse the gate — only three of the four types do — because flattening that would have made a tidier demonstration and a dishonest one.

Today1 Sep 2026

9Compliant
7Expiring, on the ladder
0Expired
0 of 4Gate passes refused
Anika FernandesHousekeeping supervisor · C04-1
Rajesh KumarElectrician · A03-2
Bilal HaqueDriver · B01-4
Mohammed AshrafSteel fixer · A02-3
VSMohammed AshrafResidence visa · 201/2024/118392028 Dec 2026 — 118 days leftIn date
Following Mohammed Ashraf’s residence visa — pick any marker above to follow a different one.In date
  1. T−90The resident and the file owner3 here now

    A renewal notice goes out and the document acquires a date. Nothing else changes: the man works, the bed bills, the file is simply no longer quiet.

  2. T−60The camp coordinator2 here now

    A task is raised and the document joins the renewals board. It stops being a date in a folder and becomes somebody’s job, with a name against it.

  3. T−30The site supervisor, every morning2 here now

    Escalation. The supervisor is named in the daily digest until the document is replaced or the occupant is stood down. Silence is no longer an option anyone has.

  4. T−0The gate0 here now

    Not a message. The gate pass is refused, the allocation cannot be renewed and no exit permit will print. The ladder ends at a locked turnstile, which is the only rung anybody ever remembers.

GATE PASSGP-26-0311

Anika Fernandes

Housekeeping supervisor · Meraas Facilities

Jebel Ali Staff Village · C04-1 · AED 1,150/mo

Valid — every working document in date.

GATE PASSGP-26-0418

Rajesh Kumar

Electrician · Gulf Steel Contracting

Al Quoz Camp 1 · A03-2 · AED 750/mo

Valid — every working document in date.

GATE PASSGP-26-0502

Bilal Haque

Driver · Emirates Logistics

Al Quoz Camp 1 · B01-4 · AED 900/mo

Valid — every working document in date.

GATE PASSGP-26-0644

Mohammed Ashraf

Steel fixer · Gulf Steel Contracting

Al Quoz Camp 1 · A02-3 · AED 750/mo

Valid — every working document in date.

Four beds, AED 3,550 a month, contracted to three employers. Not one of those invoices pauses because a document did — the bed is still let, the head lease is still owed, and the only thing that stopped is the man. Which is why the ladder starts ninety days out and not on the morning it matters.

Grey is not green

The matrix draws a cell for every expected document whether or not it is on file. A missing labour card shows grey, with the words “nothing on file — nothing will alert you about it either”.

The worst document decides the person

One expired or rejected document makes an occupant not compliant; one critical document puts them at risk; one expiring or unchecked one needs attention. Nothing on file at all is its own state, not a pass.

Numbers encrypted, reads recorded

Passport, visa and ID numbers are encrypted where they are stored, and screens show the last four digits. Seeing a whole number takes a separate permission, a typed reason, and it is written into the audit log against your name.

The hand that walked the room cannot sign it off

There is no “mark as passed” button — the verdict is computed from the answers. Approving an inspection is a separate permission and a separate person, refused by the service in words and by the database in a constraint.

9kinds of occupant document recognised; four expected of everyone
06:10when the nightly sweep re-reads every document, in each operator's own day
28rules the database enforces on these records
30checklist lines across two ready-made inspections, camp safety and room condition
141tests over this area — 77 end-to-end against a real database, 64 on the rules themselves

Roles, permissions and isolation

Withheld, not deleted

Switch role below and watch the money leave the board. A blanked tile keeps its label, its unit and its definition, and names the permission that would open it — because an empty cell reads as “there is no revenue” rather than “you may not read this”. That is a distinction this product has already shipped a screen that got wrong, and then fixed.

Everything in the organisation, including billing and the danger zone.

Al Quoz Camp 1384 beds · 6 blocks · head lease to 202812 of 12 shown

OwnerThe owner sees the whole board. Nothing here is withheld from them — which is the only reason the other six views are worth looking at.

Pick any figure to see the permission key that governs it, and which of the seven roles hold it.

Withheld, not deleted — the tile keeps its label, its unit and its definition, so nobody mistakes you may not read this for this is empty. And the redaction happens before the JSON is written, not in the markup: a screen can hide a field, it cannot un-send one.

Two locks, not one

Your rows are walled off inside the database itself, in addition to the application filtering every query. Each request opens a transaction naming your organisation, and the database refuses to hand over anyone else’s row — even to a query that forgot to ask.

The protection is not a hand-written list of tables: it walks the database catalogue, finds every table carrying an organisation column, and covers it. A table added tomorrow is protected by tomorrow’s migration run.

The camp boss sees no money

The Site Supervisor role holds zero permissions matching invoice, payment, cheque, deposit, expense, head-lease cost, financial reports or rates — asserted by a test rather than written in a manual. The site dashboard does not hide money; it never asks for it, so there is no money field in the response for anything to leak.

A screen can hide a field. It cannot un-send it — and your supervisor’s phone is holding a token.

Nobody hands out authority they lack

You may only grant a role whose permissions you already hold, and you may only edit, reset the password of, or deactivate somebody whose roles you could grant yourself. Somebody confined to two properties cannot grant anybody access to the whole organisation.

Without the second half the first is decoration: an administrator who cannot grant Owner but can reset the Owner’s password simply resets it and signs in as them.

Thirteen things you cannot do casually

Voiding an invoice, approving a write-off, backdating a contract, barring an occupant, forfeiting a deposit, deleting a space, deactivating a user, assigning roles, exporting all data, closing the organisation and three more. Holding any of them makes a second factor mandatory on that account.

Each act is recorded with a written reason, in an audit trail the application’s own database login has no permission to edit or delete.

A role that reaches one property, and can expire

Every grant carries a scope — the whole organisation, one portfolio, or one property — and can carry an end date after which it simply stops counting. A supervisor scoped to DIP Camp 2 cannot list, open or read the occupants of Jebel Ali.

Lists are filtered and a named record is refused in words. A three-month secondment ends by itself instead of by somebody remembering.

Sessions that end when they are stolen

Access lasts fifteen minutes and renews silently for up to seven days; each renewal invalidates the one before it. Present a spent renewal and the whole line is revoked and everybody signs in fresh. Every device is listed and any one can be ended — checked on every request, so it takes effect now.

Five wrong passwords lock an account for fifteen minutes, doubling to a ceiling of twenty-four hours. Unknown address, wrong password, deactivated and locked all return the same answer after the same amount of work, so the sign-in form is not a staff directory.

254named permissions across 15 groups, each written in plain English
16roles shipped already configured — 12 staff, 4 for outsiders
254 / 227 / 94 / 67 / 57permissions held by Owner, Property Manager, Finance, Leasing Agent, Site Supervisor
138of 142 database tables carry an organisation column — every one of them protected
5separate database logins, each with the narrowest access it needs
425tests on isolation, access, approvals and the permission engine

Everything else, in one place

The rest of the product, counted

There are no customer logos on this site and no testimonials, because there is no honest way to have them yet. What is offered instead is the product’s own arithmetic: what it contains, what the database refuses, and how many tests hold each claim up.

46reports across six categories, ready on the first day
33KPIs, each carrying the sentence that defines it
5dashboards, one for each job in the building, plus an 8-tile executive ribbon
80operations endpoints — jobs, PPM, assets, meters, housekeeping, mess, stock, HSE
75notification events catalogued with 518 messages written — six of them raised by code so far
16portal sections across resident, corporate client and landlord
14screens in the platform console behind it all
5packages with 11 metered allowances, counted inside the creating transaction
66database rules refusing bad operations data, plus 7 triggers no code can skip
30reporting views in the database, every one running as the caller rather than as an owner
27field names a portal answer may never contain, with 44 tests proving it
12.634 ms → 0.042 msone screen's query, after the platform-access rule was told which logins it applies to
50,000row cap on an export, stated in red on its own cover sheet when it is hit
13months of history behind every sparkline, recorded nightly rather than recomputed
90 / 180days back and forward in the Cash Ribbon, with a danger band under your floor
14checks the database audit runs on every single build
The state machines, in the product's own words

Every one of these is a table shared by the screen and the server, so a button is never offered that then fails. Ask for an illegal move and you are told why in plain words rather than given an error code.

Contract12

DRAFT · PENDING_APPROVAL · APPROVED · ACTIVE · EXPIRING · NOTICE_GIVEN · SUSPENDED · RENEWED · EXPIRED · TERMINATED · CANCELLED · REJECTED

Cheque11

RECEIVED · IN_HAND · DEPOSITED · CLEARED · BOUNCED · REPLACED · LEGAL_ACTION · RECOVERED · RETURNED_TO_CUSTOMER · POSTPONED · CANCELLED

Seventeen lifecycle steps across contracts, cheques and work orders demand a permission of their own: submitting is not approving, banking is not bouncing, finishing a job is not signing it off.

Invoice7

DRAFT · ISSUED · PART_PAID · PAID · OVERDUE · VOID · CREDITED

Work order10

NEW · TRIAGED · ASSIGNED · IN_PROGRESS · ON_HOLD · AWAITING_PARTS · COMPLETED · VERIFIED · CLOSED · CANCELLED

Two SLA clocks per job — one for first response, one for the fix — both of which stop while it is on hold or awaiting parts, and a warning at 80% of the window.

Subscription7

TRIALING · ACTIVE · PAST_DUE · GRACE · SUSPENDED · CANCELLED · EXPIRED

A missed payment throttles you and never deletes anything. In grace you keep working existing contracts; suspended is read-only and you can still export everything.

A space, and the eight things it can be
Under fit-outAvailableReservedOccupiedNotice periodTurnoverOut of serviceBlocked by parent

Twenty-nine moves between them are legal and the rest are refused in words: “an occupied space cannot be marked available directly; end the allocation, it goes to turnover, and becomes available once cleaned”. Passing that turnover clean is what puts the bed back on the market.

Taking a bed out of service needs a written reason — the database rejects the row otherwise — and its own permission, one a leasing agent does not hold. Out of service is the status that removes a bed from your occupancy denominator, so a property at 70% becomes 100% by mothballing the empty beds.

How deep it goes

Portfolio → Property → Block → Floor → Unit → Room → Partition → Bedspace

Four legal nesting shapes and never more than three levels below the unit. A room holds partitions or beds; a partition holds beds; a cabin holds beds. Nothing else is allowed, and a space cannot cross into another unit.

Six of the nine space types count against your plan — every room, partition, bed, studio and cabin in every state including out of service, but never parking, storage or amenity space. The counting rule is printed on screen beside the number, so a limit is a conversation rather than a dispute.


Nine areas, end to end

Each of these is built, tested and reachable from a screen. Follow one for the detail.

Inventory and the bed map

Portfolios, properties, blocks, floors, units, rooms, partitions and beds — with Gulf paperwork on the property record: plot number, Makani, title deed, DEWA premise, emirate, handover date, timezone and currency. Build a camp from a pattern, or round-trip the whole inventory through a spreadsheet with a dry run that names every bad cell.

28 routes · 8 statuses · 35 permissions · 179 tests

Leasing and tenancy

Head leases in, subleases out. Pooled and specific contract lines, allocations, variations, renewals, the move-in and move-out checklists, the move diary with what is overdue, and the enquiry-to-quotation funnel where a quote can hold real beds and give them back on its own after fourteen days.

48 operations · 12 states · 40 permissions · 52 named refusals

Finance and billing

Automatic rent runs that never bill the same month twice, proration, a tax rulebook you edit, immutable issued invoices, credit notes, payments with three allocation strategies, bank-statement matching, the cheque register, deposits as a liability, dunning, collection cases and a journal that will not export unless it balances.

45 endpoints · 48 database rules · 11 cheque states · 351 unit tests

Operations

Work orders from seven directions with two SLA clocks each, planned maintenance on a recurrence rule with a compliance grid you can hand an inspector, an asset register that logs every move, vendors scored from their own jobs, meters and tariffs, housekeeping rounds that put a bed back on the market, a store whose balance cannot be wrong, and mess headcount against the caterer's invoice.

80 endpoints · 23 tables · 66 database rules · 14 PPM templates

Compliance and the gate

Nine document types, a four-threshold expiry engine, an escalation ladder where each rung fires once, encrypted identity numbers, verification by a named person, roster import from a spreadsheet, inspections graded in the right vocabulary, a disciplinary ladder that cannot skip a rung, and a visitor register that answers who is on site right now.

34 endpoints · 21 permissions · 28 database rules · 141 tests

Reports and dashboards

Forty-six reports over twenty-nine published data views, each one carrying the plain question it answers. Excel with a frozen header, sized columns, a totals row and a cover sheet. A report you may not run is not on your list — it is omitted, not greyed out. Thirty-three KPIs, targets with a green/amber/red verdict, the Cash Ribbon, the expiry radar and a monthly board pack.

46 reports · 330 columns · 113 filters · 33 KPIs

Three portals

A resident, a corporate client and a landlord sign in at the same address and get three different products, decided by the record the account is attached to rather than by anything the browser asks for. Ask for another company's invoice by its ID and the answer is 'no such invoice', because 'you may not see that' would already have told you it exists.

21 endpoints · 16 sections · 27 fields never sent · 44 isolation tests

Notices and messaging

A catalogue of 75 events with 518 messages already written — six of them raised by the product today, the rest waiting on the code that emits them. Rules address nine kinds of recipient, notices are targeted five ways at once, quiet hours run in your organisation's timezone with sixteen events urgent enough to ignore them, deduplication is enforced by the database rather than by looking first, and the log says what was not sent and exactly why.

32 staff routes · 6 channels · 518 templates

Plans, quotas and the console

Five packages and eleven allowances, counted inside the same transaction as the record being created and locked while it counts, so twenty staff building a camp at once cannot jointly overshoot. A refusal names the cheapest add-on that fixes it. Behind it: a fourteen-screen console where packages are edited without a code change.

5 packages · 11 allowances · 7 add-ons · 69 platform endpoints

Straight answers

What it does not do yet

You would find these in week one anyway. The only variable is whether you find them from us. Nothing on this page describes anything below.

Nothing is delivered, and not every notice is even raised

Delivery needs your own mail relay, Twilio and Meta credentials; until they are configured the log records each attempt and its reason rather than the message going out. Two things sit further back than that, and you should know both. Of the 75 catalogued events, six are actually raised by the product today — invoice overdue, contract expiry, document expiry and cheque bounced do not fire on their own yet, though the templates and the rules for them are written. And there is no send-an-invoice or send-a-statement route at all: those two permissions sit in the catalogue with no endpoint behind them, so an invoice reaches a customer by printing the page or by running the report.

Documents are print-ready pages, not PDF files

Invoices, receipts, quotations, the board pack and the custom-quote proposal open in the browser and print correctly. No PDF file is generated or stored.

Tenants cannot pay online

Card and online are recorded as payments that happened elsewhere. There is no 'pay now' in the resident or corporate portal, and no payment initiation route. The card gateway that does exist is for your own subscription to us.

No screen updates by itself

Bed maps, dashboards, registers and portals refresh when you act or reload. There is no live push, so a colleague filling a bed while you are looking at the map does not change your screen until you move the scrubber.

Photographs are referenced, never uploaded

Work orders, inspections, meter readings and spaces all carry photo references, and some rules require them. No uploader is wired anywhere in this build, so there is currently nowhere to attach an actual image.

No single sign-on, and no custom roles

The sixteen shipped roles are assigned, scoped and time-limited — they are not redesigned. There is no SAML or OIDC, no domain-based provisioning, and no screen for building a role of your own.

No seasonal pricing

A rate rule can vary by space type, gender policy, minimum term and a named space. It carries no date range, so a summer rate and a winter rate on the same bed cannot both exist.

Scheduled reports are stored, not delivered

A schedule is a real, validated record and nothing reads it yet. Saved views and schedules can be created and run but not edited or deleted. Reports themselves run on demand, in full.

Start

Fourteen days. No card.

Registering creates your organisation, your owner account, the trial and six sensible approval rules in a single transaction — so nobody ends up holding an account that half exists. The trial carries the full Pro capability list, held to twice the Base allowances: two properties, six users, four hundred beds. Fourteen days on Base, Starter and Pro; thirty on Premium. Long enough to build a real camp and run a month of it.

AED 199Base — 1 property, 3 users, 200 beds
AED 599Starter — 3 properties, 8 users, 750 beds
AED 1,799Pro — 10 properties, 25 users, 3,000 beds
AED 4,999Premium — 40 properties, 100 users, 15,000 beds

Seeded monthly prices, editable in the platform console — the pricing page reads the same rows the console edits, so the price on this website is the price in the product. Custom packages are negotiated as a numbered proposal with an expiry date. Seven add-ons stack on top of whatever you negotiated, rather than replacing it.