MakeReadyOS helps property teams take an apartment from move-out through repairs, cleaning, and an independent final walk. Technicians, supervisors, vendors, and leasing can see what needs doing and who acts next, while the property controls its own installation and data.
Android companion app: MakeReadyOS Android lives in a separate repository, with its own APK releases and build instructions.
- Find your work. My Work shows personal assignments, move-in dates and approaching deadlines. Counts and attention indicators help distinguish waiting work from overdue work and final-walk corrections.
- Open the unit. Work & parts brings together the next action, preparation checks, parts, and unit-specific work notes. A task such as replacing damaged cabinet faces from stock does not need an invented quantity or measurement.
- Record progress. Track collected or outstanding parts, add photos, and keep general discussion separate from repair tasks. Use the turn board, Kanban, or Schedule to coordinate the team.
- Hand off to final walk. Repairs finished is not the same as unit ready. The handoff identifies the next inspector and outstanding blockers; leasing or another authorized inspector completes the final walk or sends corrections back.
- Recognize the whole team. Optional Frog Pond progress and shared completed-turn milestones recognize the property team, while personal outfits and discoveries stay personal. There is no speed leaderboard.
MakeReadyOS is:
- A self-hosted operations board for property maintenance and apartment turns.
- A table-first daily workflow for supervisors, techs, leasing, cleaners, and managers.
- A local-first system for make-ready tracking, comments/photos, checklists, vendors, scheduling, automations, risk visibility, and operational reporting.
- An open-source foundation for integrations through documented JSON/API contracts.
MakeReadyOS is not:
- A property-management accounting system.
- A resident ledger, rent collection, or leasing CRM replacement.
- A vendor compliance platform like NetVendor.
- A public SaaS service or hosted marketplace.
- A plugin runtime for arbitrary untrusted JavaScript.
These images show the current interface with fictional records created in a disposable local test environment. They are not screenshots of an operating property. See the screenshot guide for reproducible captures and public-media guidance.
| My Work | Work & parts |
|---|---|
![]() |
![]() |
| Final-walk handoff |
|---|
![]() |
| Table | Dashboard |
|---|---|
![]() |
![]() |
| Kanban | Frog Pond |
|---|---|
![]() |
![]() |
- Dense make-ready table with inline editing, custom fields, managed labels, floor plans, structured server-side board filters, batch actions, and archive/restore workflows.
- Kanban, Schedule, Dashboard, Activity, My Work, Planning, Vendors, Preventive Maintenance, Refrigerant, Pool Log, Maps, Frog Pond, Automations, Setup, Fields, Admin, and Integrations workspaces.
- Preventive Maintenance includes recurring templates, due-task generation, history, printable reports, attachments, and Property Wiki references.
- Pool Log includes daily readings, safety checks, chemical additions, printable reports, scoped photos/PDFs, and in-app review reminders.
- Authentication, roles, property-scoped permissions, audit logs, API tokens, and in-app notifications.
- Optional SMTP-backed new-user invite emails from Admin when operators want login details delivered to the user's email address.
- English/Spanish user language preferences for the sign-in flow, core app shell, dashboard shell, connection/offline messaging, user management, and turn work/parts/preparation/final-walk controls. See Spanish interface coverage for remaining module and report-language limits.
- Mobile browser install support through a Progressive Web App manifest and app-like home-screen launch.
- Local attachments/photos, item comments, checklist templates, item drawer, unit history, analytics snapshots, and risk scoring.
- Scoped integration API with examples and a lightweight OpenAPI contract at
/api/openapi.json. - Docker Compose, PostgreSQL, Prisma, Fastify, React, Vite, TypeScript, backup scripts, and deployment docs.
For a fuller feature walkthrough, see docs/PRODUCT_OVERVIEW.md and docs/FEATURE_STATUS.md.
apps/api: Node 24 LTS, Fastify 5, Prisma, PostgreSQLapps/web: React, Vite, TypeScriptdocker-compose.yml: web, API, and PostgreSQL services- Root scripts for build, test, E2E, backups, automation runs, analytics snapshots, webhook delivery runs, and diagnostics
Requirements:
- Docker and Docker Compose
- Node.js 24 LTS if running scripts outside containers
git clone https://github.com/nextcode4u/MakeReadyOS.git
cd MakeReadyOS
cp .env.example .envConfigure .env with your own credentials and browser URL before starting. Docker starts the services; it does not replace configuration, access control, or backups.
docker compose up --build -dBefore exposing the app beyond localhost, set APP_URL in .env to the real browser URL operators will use:
APP_URL=http://your-lan-host-or-ip:8080Reverse-proxy / DuckDNS example:
APP_URL=https://your-public-hostname.example.com
TRUST_PROXY=trueOpen:
- Web UI:
http://localhost:8080 - API health:
http://localhost:4000/health
Sign in with the admin username/email and password you set in .env.
Do not expose MakeReadyOS outside a trusted local environment until you have replaced every sample secret in .env, especially ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD, POSTGRES_PASSWORD, SESSION_COOKIE_SECRET, and WEBHOOK_SECRET_ENCRYPTION_KEY. ADMIN_EMAIL is optional for sign-in and invite emails, but ADMIN_USERNAME or ADMIN_EMAIL must be set.
The example environment starts as a blank operational workspace: no sample properties, units, or turns are created, but baseline make-ready labels, table columns, checklist templates, and schedule tracks are ready. Set SEED_DEMO_DATA=true only when you want sample properties and records for evaluation.
For deployment details, including Raspberry Pi/VM notes, updates, migrations, backups, upload volume handling, and restore, see docs/DEPLOYMENT.md, docs/DISASTER_RECOVERY.md, and docs/BACKUP_AND_TRANSFER.md.
For EPA 608-friendly refrigerant tracking, tank lifecycle rules, recovery workflow, and exports, see docs/REFRIGERANT.md.
For daily pool/spa readings, safety checks, chemical additions, and chemistry review, see docs/POOL_LOG.md.
For recurring filter changes, seasonal routines, PM templates, task history, and PM exports, see docs/PREVENTIVE_MAINTENANCE.md.
npm ci
npm --prefix apps/api ci
npm --prefix apps/web ci
npm --prefix apps/api run db:migrate
npm --prefix apps/api run seed
npm run devFor local demo data, set SEED_DEMO_DATA=true before running the API seed.
Local dev endpoints:
- Web UI:
http://localhost:5173 - API:
http://localhost:4000
For disposable local databases, npm --prefix apps/api run db:push can be used as a fast schema-sync fallback. For shared or production-like environments, use versioned Prisma migrations.
For the native Android companion, visit the app repository and its beta releases. The app connects to your own MakeReadyOS installation; review the release notes for compatibility and current limitations. Browser installation remains available below.
On supported mobile browsers, MakeReadyOS can be installed to the home screen as a Progressive Web App. Android/Chrome shows an optional install prompt when available, with a Continue in browser bypass. iOS users can use the browser share menu and choose Add to Home Screen.
The PWA supports app-like launch and static shell caching. Supported changes can be queued in browser storage when connectivity fails and retried after reconnection. This is not a fully offline copy of the application: not every action supports queuing, browser storage must be available, and conflicts or rejected changes may require review. Check the save/sync status before assuming work reached the server.
./doctor.sh
./build.sh
./test.sh
./e2e.sh
./run-automations.sh
./run-analytics-snapshot.sh
npm --prefix apps/api audit --omit=dev
npm --prefix apps/web audit --omit=devBuild, test, E2E, automation, and analytics scripts write timestamped logs under logs/.
More detail: docs/BUILD_AND_TEST.md.
Native JSON export/import is for MakeReadyOS-to-MakeReadyOS operational transfer. PostgreSQL and upload backups are for disaster recovery.
./backup-db.sh
./backup-uploads.sh
./prune-backups.sh --dry-runRestore scripts are intentionally confirmation-gated:
./restore-db.sh backups/makereadyos-db-YYYYMMDD-HHMMSS.dump
./restore-uploads.sh backups/makereadyos-uploads-YYYYMMDD-HHMMSS.tgzSee docs/BACKUP_AND_TRANSFER.md, docs/DISASTER_RECOVERY.md, and docs/SCHEDULED_BACKUPS.md.
For most self-hosted installs:
./update.sh --pull --yesupdate.sh now works on both:
- hosts with local
node/npm - Docker-only hosts where Prisma migration deploy should run inside the
apicontainer
Photo uploads are local-first. MAX_UPLOAD_MB=0 disables MakeReadyOS' per-file API limit so high-resolution phone/HDR photos are not blocked by the app, though browsers, disk space, and external reverse proxies can still impose limits. The inspection gallery supports multi-file upload, in-app preview, markup pins, explicit per-file download, and filtered ZIP export. Use UPLOADS_HOST_PATH when uploads should live on a host directory, external drive, or NAS/Samba mount. The Admin storage screen can inspect the active upload path, validate a proposed NAS path, and route new uploads into property-specific subfolders, but Docker still needs the host path mounted and the stack restarted. Existing root-level upload files can be previewed and moved into property folders with ./route-existing-uploads.sh.
Deployment integrations: Firebase, Resend and Cloudflare Tunnel.
Start here:
- Product Overview
- Architecture
- Architecture Inventory
- Deployment
- Onboarding
- Build And Test
- Release Process
- Security
- Support
- Roles And Permissions
- API
- Extensions
- JSON Schemas
- Operational Library
- Property Templates
- Risk Engine
- Vendors
- Property Maps
- Unit Directory And Occupancy
- Photo Inspections
- Pool Log
- Preventive Maintenance
- Make Ready QA Checklist
- Upload Storage
- Operating Calendars
- Frog Pond
- Analytics And History
- Workload Planning
- Performance And Scale
- Roadmap
- Release Checklist
Contributor-facing docs:
reference/ is local research material and is not a runtime dependency. If an asset is used by the app, it must first be copied into a committed runtime-safe path such as assets/ or apps/web/public/.
Current committed runtime assets include OpenDyslexic fonts, Frog Pond assets, and small Font Awesome placeholder icons.
For application and dependency monitoring, see Uptime Kuma setup.
MakeReadyOS is mostly "vibe coded." I want to be upfront about that: AI has played a major role in writing this software, and I am not presenting it as something I wrote entirely by hand.
But this is also something I actually use. A lot of the work happens after code is generated: finding what breaks, debugging it, testing it in the field, listening when something is confusing, and revisiting workflows that do not work as well in practice as they did on paper. AI assistance does not remove the responsibility to check the result. Daily use has helped shape this project; it does not mean it is finished or free of mistakes.
I originally chose the BSD Zero Clause License (0BSD) because it felt appropriate. As the hands-on debugging and field testing grew, I reconsidered what I wanted for the project's future and changed to AGPL-3.0-only. My intention is to keep improvements open and encourage an honest account of where the work came from. I am not asking for personal recognition. I would just like MakeReadyOS to be acknowledged when it is the foundation of someone else's project, rather than having that foundation presented as entirely their own creation.
Please do fork it, improve it, and make it useful for your own team. Give yourself and your contributors credit for what you add, and leave room in that story for the project and other sources you built on. A simple acknowledgment and link back help people find the original work, understand what changed, and contribute fixes in either direction. Useful feedback, honest bug reports, and clearer workflows matter here too, not just code.
This is a note about the project's values, not an extra license restriction. See license background and attribution for more context.
Copyright (C) 2026 MakeReadyOS contributors.
MakeReadyOS is licensed under the GNU Affero General Public License, version 3 only (AGPL-3.0-only). You may use, modify, and redistribute it under that license, including commercially. It is provided without warranty.
If you modify MakeReadyOS and let users interact with it over a network, you must prominently offer those users the corresponding source for your version under the AGPL. See licensing and hosting guidance.
Versions previously distributed under the BSD Zero Clause License remain available under their original terms. Third-party dependencies and assets retain their own licenses.






