Skip to content
codexa

Web apps · React

Maintenance requests

Log tenant maintenance requests by unit and priority, then track them through to done.

Maintenance requests starter, as built from its own files
Starter screenshot captured from this template's own build at 1440×900. It shows the template as it ships, not output generated from a prompt.

What you get

A maintenance desk for a small landlord or property manager: requests by unit and tenant with priority, scheduled date and cost, worked from reported to done on a board. The properties, priorities and sample requests live in src/app.ts.

Files

Exactly what is copied into a new project: 12 files, nothing generated.

Raw data: GET /api/v1/templates/app-maintenance-requests

src/app.ts
src/app.ts
import type { AppSpec } from "./types"; /** Everything this app shows. Edit freely. */export const app: AppSpec = {  "brand": "Keyline",  "icon": "wrench",  "storageKey": "keyline-requests-v1",  "entity": {    "singular": "Request",    "plural": "Requests"  },  "title": "Maintenance requests",  "subtitle": "Elm Court and Bayview Terrace, 24 units",  "currency": "$",  "titleKey": "issue",  "statusKey": "status",  "tones": {    "Reported": "bad",    "Scheduled": "accent",    "In progress": "warn",    "Done": "good"  },  "views": [    "table",    "board"  ],  "fields": [    {      "key": "issue",      "label": "Issue",      "type": "text",      "required": true    },    {      "key": "unit",      "label": "Unit",      "type": "text"    },    {      "key": "tenant",      "label": "Tenant",      "type": "text"    },    {      "key": "priority",      "label": "Priority",      "type": "select",      "options": [        "Urgent",        "High",        "Normal",        "Low"      ]    },    {      "key": "scheduled",      "label": "Scheduled",      "type": "date"    },    {      "key": "cost",      "label": "Cost",      "type": "money"    },    {      "key": "status",      "label": "Status",      "type": "select",      "options": [        "Reported",        "Scheduled",        "In progress",        "Done"      ]    },    {      "key": "notes",      "label": "Notes",      "type": "longtext",      "hideInTable": true    }  ],  "summary": [    {      "label": "Requests",      "kind": "count"    },    {      "label": "Not yet scheduled",      "kind": "count",      "status": "Reported"    },    {      "label": "In progress",      "kind": "count",      "status": "In progress"    },    {      "label": "Spent on completed",      "kind": "sum",      "field": "cost",      "status": "Done"    }  ],  "seed": [    {      "issue": "No hot water",      "unit": "Elm Court 3B",      "tenant": "Karen Doyle",      "priority": "Urgent",      "scheduled": "2026-10-28",      "cost": 0,      "status": "Reported",      "notes": "Water heater pilot light keeps going out."    },    {      "issue": "Leaking kitchen tap",      "unit": "Bayview 12",      "tenant": "Marco Bianchi",      "priority": "Normal",      "scheduled": "2026-10-30",      "cost": 85,      "status": "Scheduled",      "notes": ""    },    {      "issue": "Broken window latch",      "unit": "Elm Court 1A",      "tenant": "Steph Nguyen",      "priority": "High",      "scheduled": "2026-10-29",      "cost": 60,      "status": "In progress",      "notes": "Ground floor, security concern."    },    {      "issue": "Smoke alarm chirping",      "unit": "Bayview 4",      "tenant": "Ade Bello",      "priority": "High",      "scheduled": "2026-10-24",      "cost": 25,      "status": "Done",      "notes": "Battery replaced, alarm tested."    },    {      "issue": "Mould in bathroom ceiling",      "unit": "Bayview 9",      "tenant": "Ruth Jacobs",      "priority": "Normal",      "scheduled": "2026-11-03",      "cost": 420,      "status": "Scheduled",      "notes": "Needs extractor fan check too."    },    {      "issue": "Dishwasher not draining",      "unit": "Elm Court 2C",      "tenant": "Tariq Saleem",      "priority": "Normal",      "scheduled": "2026-10-21",      "cost": 140,      "status": "Done",      "notes": "Filter cleared, drain hose replaced."    },    {      "issue": "Hallway light out, 2nd floor",      "unit": "Elm Court common",      "tenant": "",      "priority": "Low",      "scheduled": "2026-11-05",      "cost": 0,      "status": "Reported",      "notes": ""    },    {      "issue": "Front door lock sticking",      "unit": "Bayview 7",      "tenant": "Ellie Grant",      "priority": "High",      "scheduled": "2026-10-27",      "cost": 110,      "status": "In progress",      "notes": "Locksmith booked."    }  ]};

Remix

Remix this template

Describe what to change and the agent starts from Maintenance requests's files. The box is already started for you: finish “Start from Maintenance requests and …”

Agent ready

Creates a free account first; your idea is carried over.

Dependencies

Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.

  • react^19.1.0
  • react-dom^19.1.0
  • vite^6.3.0
  • @vitejs/plugin-react^4.4.0
  • tailwindcss^4.1.0
  • @tailwindcss/vite^4.1.0
  • typescript^5.8.0

How it runs

Framework
Vite + React + TypeScript
Dev command
npm run dev
Build command
npm run build
Output directory
dist
Port
5173
Entry route
/

Projects run in an isolated sandbox with a live preview. Read the projects documentation for settings, snapshots and deployment.

All templates

Build on Maintenance requests

Create a free account, start from this template, and ask the AI agent to turn it into your app.