Laundry Manager - Staff Manual
Version: 2.3 Last Updated: August 6, 2026
Table of Contents
- Introduction
- Getting Started
- Login & Authentication
- Roles & Permissions
- Dashboard
- Locations
- Items
- Stock Management
- Central Storage
- Order Planning
- Reservations
- Hostaway Integration
- iCal Integration
- Plan Board & Deliveries
- End-of-day Checklist
- Demand & Planning Work List
- External Task Handoff
- Transactions
- Consumption Settings
- Rejected Items (Quality Returns)
- Common Workflows
- Troubleshooting
Introduction
The Laundry Manager is a web application for planning laundry deliveries to rental properties. It helps you:
- Track stock levels at each location
- Plan deliveries with suggested quantities
- Sync reservations automatically from Hostaway and iCal feeds
- Use reservations to predict consumption
- Record rejected items (damaged, stained, worn)
- Generate delivery lists for drivers
The system automatically calculates what each location needs based on current stock, upcoming reservations, and guest counts. Reservations are synchronized from property management platforms (Hostaway) and iCal feeds (Airbnb, Booking.com, etc.).
Getting Started
Accessing the Application
Open the Laundry Manager in your web browser. The application works on desktop and mobile devices. All current Operations and Driver Field interface labels are in English. A future language switch may be considered separately, but the current product does not show German and English copy at the same time.
Navigation
The main navigation bar at the top includes:
| Menu Item | Purpose |
|---|---|
| Dashboard | Overview of all locations and alerts |
| Plan Board | Plan driver shifts, stops, and demand inbox work |
| Field Today | Mobile route view for drivers |
| Pack Station | Pack the driver's current wave before each Laundry stop |
| End-of-day checklist | Operations-only default and date-specific driver checklist authoring |
| Orders | Plan Tuesday orders for Thursday delivery |
| Reservations | View synced reservations from Hostaway & iCal |
| Locations | Manage property information |
| Items | Manage the item catalog |
| Stock | View and adjust current inventory |
| Consumption | Configure consumption calculation settings |
| Transactions | View delivery and usage history |
| Rejected Items | Track items to return to supplier |
| Hostaway | Hostaway integration settings (Admin only) |
Dark Mode
Click the sun/moon icon in the top-right corner to toggle between light and dark mode.
Login & Authentication
You need to log in before you can use the Laundry Manager. All pages are protected — if you're not logged in, you'll be redirected to the login page automatically.
Login with E-Mail & Password
- Open the Laundry Manager in your browser
- Enter your E-Mail address and password
- Click "Sign in"
If your credentials are correct, you'll be redirected to the Dashboard.
Login with Magic Link
If you don't have a password or prefer a passwordless login:
- Enter your E-Mail address in the login form
- Click "Email me a magic link"
- Check your inbox for an email with a login link
- Click the link in the email — you'll be automatically authenticated and redirected
Tip: The Magic Link is a one-time-use link. If it expires, simply request a new one from the login page.
Confirmation Page
After clicking a Magic Link, you'll briefly see a confirmation page:
- Success: A green checkmark appears and you're redirected to the Dashboard within 2 seconds
- Error: A red icon with an error message appears — click Back to sign in to try again
Session
Once logged in, your session stays active. You don't need to log in again every time you open the app. If your session expires, you'll be redirected to the login page.
Roles & Permissions
Each user account has a role that determines what they can do in the system. Roles follow a hierarchy — higher roles include all permissions of lower roles.
Role Hierarchy
| Role | Level | Description |
|---|---|---|
| Driver | Basic | View deliveries, locations, items; mark stops as complete; record inventory & rejected items |
| Cleaner | Extended | Everything a Driver can do, plus view units, beds, and bathrooms |
| Operations | Management | Full access to all features: deliveries, orders, reservations, stock, locations, consumption settings |
| Admin | Full | Everything, including user management and system configuration |
Detailed Permissions
| Feature | Driver | Cleaner | Operations | Admin |
|---|---|---|---|---|
| Dashboard | ✅ View | ✅ View | ✅ View | ✅ View |
| Deliveries | ✅ View | ✅ View | ✅ Full | ✅ Full |
| Mark stops complete | ✅ | ✅ | ✅ | ✅ |
| Locations & Attachments | ✅ View | ✅ View | ✅ Full | ✅ Full |
| Items | ✅ View | ✅ View | ✅ Full | ✅ Full |
| Current Stock | ✅ View | ✅ View | ✅ Full | ✅ Full |
| Standard Configuration page | ❌ | ❌ | ✅ Full | ✅ Full |
Legacy standard_stock API (read) |
❌ | ✅ View | ✅ View | ✅ View |
| Stock Transactions | ✅ Full | ✅ Full | ✅ Full | ✅ Full |
| Rejected Items | ✅ Full | ✅ Full | ✅ Full | ✅ Full |
| Units / Beds / Bathrooms | ❌ | ✅ View | ✅ Full | ✅ Full |
| Orders | ❌ | ❌ | ✅ Full | ✅ Full |
| Consumption Settings | ❌ | ❌ | ✅ Full | ✅ Full |
| Reservations | ❌ | ❌ | ✅ Full | ✅ Full |
| Hostaway Integration | ❌ | ❌ | ❌ | ✅ Full |
| iCal Integration | ❌ | ❌ | ❌ | ✅ Full |
| Planning Work List | ❌ | ❌ | ✅ Full | ✅ Full |
| End-of-day checklist authoring | ❌ | ❌ | ✅ Full | ✅ Full |
Standard Configuration During a Cutover
Laundry templates, Procurement baselines, and Supply targets are
Standard Configuration and may be changed only by Operations or Admin. When a
cutover is announced, stop all edits in these three areas until Operations
reopens them after the post-migration smoke test. Do not retry a save in an
older tab/app version or use direct SQL as a workaround: legacy Consumable
standard_stock writes are intentionally rejected rather than creating an
unaudited Procurement baseline. The current Procurement screen records the
real signed-in actor for every create, change, and delete.
The Standard Configuration page is Operations-only (with Admin through the
role hierarchy). Cleaner retains read-only access only to the legacy
standard_stock API; that API access does not grant access to this page.
How It Works
- Your role is assigned by an administrator when your account is created
- The system automatically checks your permissions on every page and action
- If you try to access something you don't have permission for, you'll see a "Forbidden" error
- Deactivated accounts are fully blocked — even with valid login credentials
- Roles are hierarchical: each role includes all permissions of the roles below it
Account Status
Accounts can be active or deactivated:
- Active: Normal access based on your role
- Deactivated: No access at all — login is blocked with a "Forbidden" error
Note: If you can't log in but your credentials are correct, your account may have been deactivated. Contact your administrator.
Dashboard
The Dashboard is your daily starting point. It provides a compact overview of all locations and stock status.
Quick Links
Quick access buttons to the most common tasks:
- Locations – Manage property information
- Items – Manage the item catalog
- Standard Stock – Set target quantities per location
- Current Stock – View and adjust inventory
- Transactions – View delivery and usage history
- Plan Board work list – Review demand, dated backlog, overdue work, and attention
Quick Search
Press ⌘K on Mac or Ctrl+K on Windows/Linux anywhere in the dashboard to open the global search palette.
- Search spans Units, Locations, Contacts, Knowledge, and Keys
- Results open the matching page directly and deep-link into structured tabs when possible
- Contacts, keys, and knowledge entries are auto-highlighted briefly after navigation
- Operational aliases such as WiFi/WLAN, Emergency/Notfall, Waste/Müll, Parking/Parkplatz, and Key/Schlüssel are understood even when the underlying records use normalized taxonomy values
- Recent searches are stored locally on the current device for fast repeat lookups
Tip: Use quick search for urgent requests like WiFi, emergency phone numbers, parking instructions, or a key location when you do not want to click through several tabs first.
Quick Stats
- Total Stock: Total items across all locations
- Locations Tracked: Number of active locations
- Items Tracked: Number of different item types
- Transactions (7d): Activity in the last 7 days
Critical Locations
Locations with items below critical threshold are highlighted at the top. These need urgent attention.
Low Stock Warnings
The dashboard lists specific items that are running low, including:
- Item name
- Location name
- Current quantity vs. threshold (e.g., "0 / 12")
- Standard stock level
Location Status Badges
Each location shows a colored status badge:
| Color | Status | Meaning |
|---|---|---|
| 🔴 Red | Critical | Items below critical threshold - urgent delivery needed |
| 🟡 Yellow | Warning | Items below warning threshold - schedule delivery soon |
| 🟢 Green | Healthy | All items at or above standard levels |
Recent Activity
Shows the latest stock movements (deliveries, usage, adjustments) with timestamps.
Locations
Locations represent the properties you deliver to (apartments, houses, etc.).
Location List
The Locations page shows all properties as cards with:
- Location name
- Address
- Current stock status (colored badge)
- Quick action buttons
Location Details
Click on a location to view/edit:
Basic Information
- Name: Display name for the location
- Address: Full street address
- Access Code: Door/gate code for entry
- Key Location: Where to find keys (e.g., "lockbox by door, code 1234")
- Access Instructions: Special notes for drivers (e.g., "use side entrance", "ring bell twice")
Tip: Use the Access Instructions field for detailed directions that help drivers find entrances, parking spots, or key boxes.
Location Tabs
Each location detail page is split into dedicated tabs so operational data is easier to maintain:
- Overview: Core profile data, attachments, access details, delivery-relevant notes
- Contacts: People connected to the location such as owners, caretakers, emergency contacts, and neighbors
- Keys: Physical keys, cards, fobs, and where they are stored
- Knowledge: Reusable operational notes such as waste rules, parking guidance, WiFi information, and emergency instructions
- Storage Areas: Named storage zones used by unit consumable standards
- Units / Groups / iCal: Unit-specific inventory, grouping, and calendar sync settings
Contacts
Use the Contacts tab for structured people data instead of storing phone numbers in free-text notes.
- Role: Choose the best matching role (Owner, Caretaker, Emergency, Maintenance, etc.)
- Phone: Stored in international format after validation
- Email: Must be a valid email address
- Notes: Required when role is Other, and useful for availability or escalation details
If a phone number or email already exists for the same location, the app blocks the duplicate and offers a shortcut to the existing contact.
Keys
Use the Keys tab to document every access item and its storage location.
- Track label, type, quantity, unit scope, and storage location separately
- Sensitive storage details such as a lockbox code can be hidden with the reveal/copy secret field
- Duplicate labels within one location are blocked to keep the inventory clean
Knowledge
Use the Knowledge tab for operational instructions that should stay structured and searchable.
- Pick a category such as Waste, Parking, WiFi, Rules, Emergency, or Appliances
- Guest-visible entries show a warning before saving
- Pinned entries stay at the top of the table for faster access
- Content must be detailed enough to be useful; very short notes are rejected
Storage Areas
Use the Storage Areas tab to define named storage zones like cellar shelves, laundry closets, or key cabinets.
- These areas are then selectable inside unit consumable standards
- Only one active default consumables storage area is allowed per scope: one location-wide default or one default per unit
- Maintenance of storage areas no longer happens inside the unit detail form
Unit Consumables
Consumable standards are maintained inside the relevant unit detail page.
- Each item can exist only once per unit
- Minimum quantity must be less than or equal to standard quantity
- Storage areas are selected from the location-wide list managed in the Storage Areas tab
Planning a Supply Visit
When adding a Supply refill to a stop, choose either the full Supply Profile or the exact physical Storage Area + Item positions to check. The planned visit freezes those positions and their target quantities; later profile edits do not silently change a driver's work.
If the profile is corrected before the visit starts, Operations can refresh the planned Supply targets. Once the task or its route has started, create a new planned visit instead. A legacy Supply marker without an explicit scope is not ready for assignment and must be recreated or cancelled deliberately.
Attachments
Locations can have file attachments — photos, PDFs, or documents that help staff and drivers (e.g., key box photos, access maps, cellar entry instructions).
Adding Attachments:
- Open a location's edit view
- Go to the Attachments section
- Click "Upload" to add a file (images or PDFs)
- Add a title or description for the attachment
- Save
Managing Attachments:
- Reorder: Drag and drop attachments to change their display order
- Edit: Update the title or description of an existing attachment
- Delete: Remove attachments that are no longer needed
Viewing During Deliveries: When a driver opens a delivery stop, any attachments for that location are shown directly in the stop modal. This is useful for:
- Photos of key boxes or lockboxes
- PDF maps showing parking or entry points
- Instructions that are easier to show than describe
Archiving vs. Deleting Records
Locations, units, contacts, keys, knowledge entries, storage areas, beds, bathrooms, and consumable standards now support two different destructive actions:
- Archive: Use this when the record should disappear from day-to-day lists but may still be needed for history, reservations, or later recovery. Archived records can be restored.
- Delete permanently: Use this only when the record is wrong and should be removed forever. Permanent deletion is restricted to Admins and is blocked automatically when there are still linked records such as reservations or stock history.
If the delete dialog tells you that deletion is blocked, choose Archive instead. This is the normal path for properties or units that should no longer be used operationally but still have historical data attached.
Tip: Upload a photo of the key box or entrance for each location — this saves drivers a lot of time on their first visit.
Office vs Storage vs Direct Supplier
The system separates three operational roles that can otherwise look similar:
- Office is the staging hub for urgent laundry and consumables. Use Office Ops to create a Transport / Errand task from the office to a target location (pickup at the office, drop-off at the destination); it then appears on the Plan Board for shift assignment and is completed by the driver in the Field App. (The former special-dispatch flow has been removed.)
- Storage is the central stock source for normal delivery planning. Use Central Storage and the Storage page for stock-on-hand and order-to-storage work. Office transports should not be used as a replacement for normal storage replenishment.
- Direct Supplier locations receive laundry outside the central-storage delivery flow. Their location and Supply Profile pages show a direct-supplier banner so staff know that laundry quantities are order-tracking only, while consumable storage still follows the normal supply-profile process.
Supply vor Ort abschließen
Für jede angezeigte Supply-Position den tatsächlich gezählten Bestand vor dem Top-up eintragen. Die vorgeschlagene Liefermenge füllt nur bis zum eingefrorenen Soll auf; sie darf geändert werden, aber nicht überfüllen. Auch wenn nichts geliefert wird, die Position absenden. Liegt der Bestand danach unter Soll, ist ein kurzer Grund Pflicht. Der Shortfall erscheint für Operations in der Attention-/Replan-Ansicht; er erzeugt keinen automatischen Folgetask. Operations entscheidet dort manuell über eine mögliche Folgearbeit. Reports und Cases werden dabei ausschließlich durch den vorgesehenen Ablauf gebucht; es gibt keine direkte Data-API-Schreiboberfläche.
Bei einer Offline-Meldung den Eintrag nicht durch eine zweite Meldung ersetzen. Nach dem Sync ist eine bereits erfolgreich gebuchte Meldung über ihren Schlüssel dedupliziert. Ein als inkompatibel markierter alter Queue-Eintrag muss nach einem aktuellen Snapshot neu erfasst oder von Operations repariert werden.
On a location's Supply Profile tab, use Log count on a consumable row when Ops has checked, restocked, adjusted, or found missing supplies. These logs are append-only. They update the "Last counted" and "Gap" columns without changing stock quantities directly.
Units
For multi-unit properties (e.g., apartment buildings), each unit can be configured separately:
- Unit Name: Apartment number or identifier
- Bedrooms: Number and configuration of beds
- Bathrooms: Number and configuration of bathrooms
- Active Status: Toggle to temporarily disable units
Quick Facts and legacy Urgent Info
Every Operations unit detail page starts with Quick facts above the tabs. The same panel is also on the Location detail page. When more than one active Unit exists, select one for unit-specific Facts, including WiFi; Waste and Parking keep their Location-owned sources. This is the primary WP-L1 workflow for Key, Backup key, WiFi, Waste and Parking: each card shows its state, scope, source and freshness before its one canonical edit target. Missing, inherited, conflict, stale and redacted states are explicit; conflicting keys never select a winner silently.
On the Location page, the canonical Waste and Parking editor sits in the anchored Quick facts section. Edit its text and linked Waste/Parking images or PDFs there; do not create a separate Unit source for those Location facts.
Quick facts uses the standard read projection first. It does not expose WiFi
passwords or static access codes. Operations and Admin receive a separate
role-gated detail projection only after the page has mounted; it is
private, no-store, is not SSR-hydrated, and must not be copied into Search,
logs, cache or offline payloads. Driver and Cleaner do not use this global
Operations workflow.
The previous Urgent info panel is a collapsed, on-demand legacy fallback during WP-L1 validation, not the default path. It loads only when Show legacy urgent info is selected. Do not use it to work around a missing, redacted or conflicting Quick Fact: follow the Quick Facts card to its canonical source instead.
Bed Configuration
For each bedroom:
- Bed type (Single, Double, Queen, King)
- Sheet size
- Pillows per side
- Room name (optional)
Bathroom Configuration
For each bathroom:
- Has bathtub (yes/no)
- Has shower (yes/no)
- Small towel count
- Bathroom name (optional)
Adding a New Location
- Click "New Location"
- Enter the location name and address
- Add access information (codes, keys, instructions)
- Save the location
- Add units if it's a multi-unit property
- Configure beds and bathrooms for each unit
Items
Items are the products you deliver (sheets, towels, etc.).
Item List
Shows all items with:
- Item name
- Category
- Current total stock across all locations
Item Categories
Items are organized by category for easier management:
- Bed Linen: Sheets, pillowcases, duvet covers
- Towels: Bath towels, hand towels, face cloths
- Kitchen: Tea towels, oven mitts
- Bathroom: Bath mats, shower curtains
- Other: Miscellaneous items
Adding a New Item
- Click "New Item"
- Enter the item name
- Select a category
- Add any notes (e.g., size, color, material)
- Save
Stock Management
Standard Configuration
Open Standard configuration and select a location. The three sections have different responsibilities:
- Laundry delivery template: the complete default delivery proposal.
Search or browse by category, choose Configure, enter quantities with
the displayed unit, and use Save all changes once. An explicit
0is a configured zero; Not configured means that no template row exists. - Supply target on site: edits all explicit Unit targets for the selected location. Search by item, Unit, category, or Storage Area; add an explicit Unit/item row, edit its target, assign its Storage Area, deactivate obsolete rows, then choose Save all Supply changes once. The optional Minimum is under Advanced monitoring threshold because it is an Operations warning, not the on-site target. These targets do not determine purchasing or Laundry deliveries. The counted Supply profile remains available from the adjacent link. Storage choices are limited to shared areas and areas assigned to the selected Unit. Use configured default resolver appears only when the Unit default or the location's shared default currently resolves. An active row cannot be saved without one of those valid targets.
- Procurement baseline: the independent purchasing quantity for Cleaning Supplies. It is not calculated from the Supply target.
For Laundry, the default delivery quantity is the primary field. Warning and Critical are the two active alarm levels and live under Advanced monitoring thresholds; they do not change the default delivery quantity. Laundry positions can optionally name an active Linen or Mixed Storage Area. Whole location remains the default and multiple Storage Areas never split a quantity automatically. When a Storage target is used, its derived Unit and Storage label are shown with the Laundry task, pack manifest and driver work; routing and stock accounting remain Location-wide. There is no separate Minimum field. The Resulting Laundry delivery card shows the positive active lines that a new delivery will propose.
To retire a row without losing its history, choose Deactivate and save. Choose Delete only when the location should return to Not configured. Laundry, Supply and Procurement deletes all ask for confirmation and reject a stale profile snapshot instead of deleting a row that changed after it was shown. Before moving a Unit to another location, remove its existing Supply-target rows from the Unit detail. The move is blocked while any such row remains so that no target can keep pointing to Storage in the old location.
To copy setup between properties:
- Open the source location's Laundry delivery template.
- Choose Copy complete profile and select one target.
- Build the preview and review every create, update, reactivation, and deactivation.
- Confirm the reviewed copy. Changing either source or target discards the preview immediately. If either profile changed in the meantime, reload the preview instead of overwriting the newer data.
The copy includes configured inactive source rows and their saved quantities and thresholds. A later reactivation at the target therefore restores the source configuration, not an older target value.
Every missing-template warning in Laundry planning and Request Promotion links directly to the affected location's Laundry section.
Current Stock
Choose or search the active location at the top of the Stock page. The quantity editor appears first, so Operations can set an exact count and save without first opening an overview card. Location overview cards and recent history remain below the editor for follow-up review.
The Stock page shows inventory levels at each location:
- Location: Property name
- Item: Product type
- Quantity: Current count
- Status: Critical (🔴), Warning (🟡), or Healthy (🟢)
Adjusting Stock
To correct inventory after a manual count:
- Find the location and item
- Click "Adjust"
- Enter the new quantity
- Select a reason:
- Inventory Count: Regular stocktake
- Found Extra: Discovered additional items
- Missing: Items unaccounted for
- Damaged: Items removed due to damage
- Other: Custom reason
- Add notes if needed
- Save
Bulk Stock Update
For larger inventory updates:
- Go to the Stock page
- Click "Bulk Update"
- Select the location
- Enter quantities for multiple items at once
- Save all changes
Central Storage
All laundry arrives at Central Storage first, and then gets delivered to apartment locations.
What is Central Storage?
Central Storage is the “main inventory location” (e.g. office/storage). It is used to:
- Track how much laundry you have available overall
- Plan Tuesday orders for Thursday delivery
- Serve as the source for daily delivery routes
Key Rules
- There can be only one Central Storage location.
- Central Storage is shown first on the Stock page.
- When a delivery stop is marked complete, items are automatically deducted from Central Storage.
- Storage stock can go negative if you deliver more than you have recorded (this helps track shortages accurately).
Setting Central Storage
- Go to Locations
- Create or edit the storage location (e.g. "Office/Storage")
- Mark it as Storage location
Order Planning
Use Orders to plan either a weekly Laundry order or an ad-hoc Supply order. The two order types cannot mix their item domains.
Weekly Workflow
- Laundry only: the create form defaults to a Tuesday order for Thursday delivery in the same week. Both dates remain editable, and direct-supplier Laundry destinations remain available where configured.
- Supplies: create an ad-hoc order with the actual order and expected delivery dates. A Supply order must target Central Storage or an Office location; it cannot use a direct-supplier apartment destination.
- A location used as an explicit order destination must stay active and keep its compatible destination role. Change or remove the order destination before archiving, demoting, or permanently deleting that location.
Creating a New Order
- Go to Orders
- Click New Order
- Select Laundry or Supplies and confirm:
- Order date and expected delivery (Laundry starts with the Tuesday/Thursday default; Supply dates are ad-hoc)
- the destination (Supply requires Central Storage or Office)
- Review the suggested quantities
- Adjust quantities if needed
- Set status to Submitted
Adding Items to an Order
While an order is Draft or Submitted:
- Click on an item button in the "Add Items" section
- The item appears immediately in the list with a "New" badge
- Enter the quantity you want to order
- Click "Save Items" to confirm your changes
- Use the X button to remove an item before saving
Save every item change before clicking Confirm ordered. Once an order is marked Ordered, its item list and ordered quantities are locked so that the final receipt can preserve the original ordered-versus-received difference.
Tip: Click "Apply Suggestions" to automatically add all suggested items with their recommended quantities.
Order Suggestions
Laundry order suggestions are calculated based on:
- Current stock in Central Storage
- Aggregated needs across all locations
- Standard stock targets and thresholds
Marking Delivered
When the supplier delivery arrives:
- Open the order
- Click Record final receipt
- Enter the actual received quantity for every order line, including
0for an item that did not arrive - Review the destination and submit the final receipt once
Submitting the receipt marks the order Delivered and posts every positive received quantity to the selected Supply destination or to Central Storage for Laundry. Do not add the same delivery manually on the Stock page. Partial or repeat receipts are not supported; if the order will not be received, cancel it before recording a receipt.
Reservations
Reservations are guest stays at locations, synchronized automatically from Hostaway and iCal feeds. They drive consumption calculations and demand planning.
Reservations List
The Reservations page shows all synced reservations with:
- Guest name
- Location
- Check-in and check-out dates
- Number of guests
- Source badge (Hostaway, iCal, or Manual)
- Status (confirmed, cancelled, inquiry, etc.)
Source Badges
Each reservation shows where it came from:
| Badge | Source | Description |
|---|---|---|
| Hostaway | Hostaway API | Synced from Hostaway property management |
| iCal | iCal feed | Synced from Airbnb, Booking.com, VRBO, or other iCal feeds |
| Manual | Manual entry | Manually created in the system |
Filtering Reservations
Filter by:
- Date range (from / to)
- Location
- Status (confirmed, cancelled, inquiry, etc.)
- Source (Hostaway, iCal, Manual)
Guest Count for iCal Reservations
iCal feeds do not include guest counts. For iCal reservations:
- A "Guests missing" warning is shown
- Click the guest count field to enter the number manually
- This is important for accurate consumption calculations
Tip: Check iCal reservations regularly and add guest counts as soon as new reservations come in. Without guest counts, the system cannot calculate correct laundry quantities.
Hostaway Integration
Admin only: The Hostaway integration page is only visible and accessible to Admin users.
Hostaway is the property management system that manages listings across platforms (Airbnb, Booking.com, etc.). The integration syncs reservations automatically.
Connection Status
Go to Integrations → Hostaway to see:
- Connection status: Whether the Hostaway API is connected
- Listings count: Number of properties in Hostaway
- Last sync: When reservations were last synchronized
- Sync status: Running, completed, or failed
Location Mapping
Before reservations can sync correctly, Hostaway listings must be mapped to locations in the system. The mapping page shows three categories:
| Category | Badge | Meaning |
|---|---|---|
| Mapped | 🟢 Confirmed | Listing is linked to a location — reservations sync automatically |
| Suggested | 🟡 Pending | System found a likely match based on name/address — review and accept or reject |
| Unmapped | ⚪ Unmapped | No match found — import as new location or manually map |
Importing a Listing
For single-unit properties (one apartment = one Hostaway listing):
- Find the unmapped listing
- Click "Import"
- The system creates a new location with a default unit
- The listing is automatically mapped
For multi-unit properties (multiple apartments at one address):
- First, create the location manually in Locations
- Add the individual units (e.g., "Apartment 1", "Apartment 2")
- Return to the Hostaway mapping page
- Click "Select Location" on each listing
- Choose the location and the specific unit to map to
Import All
Click "Import All" to import all unmapped listings at once. Each listing becomes a new location with a default "Main Unit". Use this for bulk setup when most properties are single-unit.
Unlinking
To remove a mapping:
- Find the mapped listing
- Click "Unlink"
- The listing becomes unmapped again
Note: Unlinking does not delete the location or its reservations — it only breaks the sync connection.
Reservation Sync
Once listings are mapped, reservations sync automatically:
- Hourly sync: All reservations are refreshed every hour
- Webhook sync: New/updated reservations are pushed in real-time by Hostaway
The sync stores essential reservation data:
- Check-in/out dates and times
- Guest name and count
- Door codes and access links
- Channel information (Airbnb, Booking.com, Direct, etc.)
- Booking status and confirmation codes
iCal Integration
Admin only: iCal configuration is only accessible to Admin users.
For properties not managed through Hostaway (e.g., listed only on Airbnb or Booking.com), reservations can be synced via iCal feeds. Each platform provides an iCal export URL.
Setting Up iCal for a Location
- Go to Locations and open the location
- Click the iCal tab
- Enter the iCal feed URL from your booking platform:
- Airbnb: Go to Calendar → Export Calendar → copy the link
- Booking.com: Go to Property → Calendar → Export → copy the iCal link
- VRBO: Go to Calendar → Import/Export → copy the iCal URL
- Toggle "Sync enabled" on
- Click "Save"
- Optionally click "Sync Now" to immediately fetch reservations
How iCal Sync Works
- Automatic polling: All active iCal feeds are fetched every 30 minutes
- Deduplication: Each reservation has a unique ID (UID) — no duplicates are created
- Status mapping:
CONFIRMED→ confirmed,CANCELLED→ cancelled
iCal Limitations
iCal is a simple calendar format. Compared to Hostaway, it has limitations:
| Feature | Hostaway | iCal |
|---|---|---|
| Guest name | ✅ Full name | ⚠️ Often just first name or "Reserved" |
| Guest count | ✅ Included | ❌ Not available — must be entered manually |
| Phone/email | ✅ When available | ❌ Not included |
| Door codes | ✅ Included | ❌ Not included |
| Channel info | ✅ Airbnb/Booking/Direct | ❌ Not included |
| Real-time sync | ✅ Via webhooks | ❌ Polling only (every 30 min) |
Important: Always add guest counts manually for iCal reservations. Without them, consumption calculations will be inaccurate.
Plan Board & Deliveries
Laundry deliveries are planned on the Plan Board — the daily operations cockpit. (The old standalone "Deliveries" route builder has been removed.)
The Plan Board
Go to Plan Board to see a single day:
- Prev / Today / Next / Week to switch days
- Shift cards: one card per driver shift, with its stops in route order
- Work list: Demand Inbox, planned backlog, overdue work and the link to exclusive Replan cases
Shifts: each driver has at most one shift per calendar day. The role (Laundry / Handyman / Both) describes the kind of work — mixed days use Both. Use Add Shift to create one.
Planning a Laundry Delivery (recommended flow)
- On a shift card, click Plan laundry delivery
- Choose the location
- The location's standard template is prefilled with full standard quantities — adjust quantities, add or remove items, or start from an empty list if the location has no template yet
- Optionally set Bags — a handling hint for the driver ("split across N bags"); it never changes item quantities
- Confirm. The system creates the task with its item list and attaches it to the shift: an existing open stop for that location is reused, otherwise a new stop is added
The item list stays editable until packing starts — open the stop's Work Package to adjust it.
Demand Inbox
- Requests first receive a plan day, then use Resolve request to create the explicit Task. Only that Task can be assigned to a shift. Unscheduled Tasks may still use Plan… or drag-and-drop.
- Stock suggestions (locations below their thresholds) always open a confirmation dialog first: it shows the full standard template, you can edit items and bags, and nothing is created until you confirm; dismissed suggestions remain unplanned
- Resolving a request promotes it to a task; the request stays open until that task is actually completed
Stop Composer (Work Package)
Open Work Package on any stop to:
- view and edit the laundry item list (until packed)
- add Maintenance, Other, or Transport / Errand tasks to the stop
- toggle proof photo requirements
- add a Supply refill: choose the full Supply profile or specific physical Storage Area + Item positions. The board freezes the resulting target snapshot; it never accepts a manually entered target quantity.
- refresh an unstarted Supply snapshot from the same Work Package after a profile correction. Once the task or assigned route has started, create a new scoped marker instead.
A Supply marker without an active immutable snapshot blocks route start and must be detached/recreated by Operations. Each active snapshot line is then counted and completed exactly once: record the counted-before quantity, the actual top-up and, below target, a shortfall reason. The server computes the after-count from the immutable line; Operations never enters a target during completion.
Creating Tasks from the Tasks Page
Tasks → Create task shows type-specific fields:
- Laundry delivery requires at least one laundry item — use Apply standard stock to prefill the location's template, then edit freely
- Transport / Errand is available in this dialog: choose a location pickup and either a location or named custom dropoff. The Office view and Stop Composer remain additional entry points.
- Validation problems are shown at the specific field, not as a generic error
Pack Station & Driver Field App
- The Pack Station lists all stops with laundry to pack. Mark packed freezes the exact item manifest and deducts Central Storage; Unpack reverses it. After packing, the item list is locked.
- The driver may start the route before every Laundry load is packed and return to the Pack Station between waves when vehicle capacity is limited. Only the Laundry stop being completed must already be packed with a positive confirmed bag count and its frozen manifest.
- Packing is performed by the driver and confirms possession of the load. There is no separate driver-handover confirmation.
- Drivers work their route in the Field App: stops in order, laundry manifest, frozen Supply targets, proof photos, and stop completion. Completing a stop updates stock at the destination automatically. For Supplies the driver records counted-before and actual delivery per frozen target line; an explicit zero delivery remains a report and needs a shortfall reason below target. The app keeps working with a spotty connection and syncs queued completions when back online; rejected legacy bodies must be repaired against the refreshed snapshot or explicitly discarded.
End-of-day Checklist
Operations and Admin can open End-of-day checklist from Daily Operations to maintain the checklist shown to drivers. Add recurring defaults for every day or select a Berlin calendar date for a one-off item. Each item can be edited with a title, optional driver instructions, and explicit optional- or required-photo settings; use the up/down buttons to set its order on mobile as well as desktop.
Archiving removes an item from future live checklists without deleting historical completion records. The checklist remains informational: an incomplete item or missing photo never blocks route or shift completion.
Demand & Planning Work List
The Plan Board work list is the daily demand lane. It combines Demand Inbox items, dated backlog, overdue work, and open attention for the selected planning day.
Daily Planning
- Open Plan Board and select the planning day.
- Review the work-list lanes. Requests must first be resolved into Tasks; Tasks can then be planned to a shift.
- Confirm laundry demand from the Demand Inbox against the full standard template before it creates work.
Procurement
For weekly purchasing, use the Orders page, backed by
/api/orders/suggest. It aggregates the existing procurement demand for
Central Storage; it is not a driver-route planning surface.
External Task Handoff
Operations and Admin can hand off an eligible Task to a contractor. Use this only for Deep clean, Inspection, Maintenance, or Other Tasks.
Start the handoff from either path:
- In the Task detail drawer, open External handoff under Assignment, enter Contractor name (required) and Contact (optional), then choose Assign externally.
- In Manual Replan, choose Assign externally to open the form, enter Contractor name and Contact (optional), then choose Confirm external handoff.
The handoff clears the internal assignment and detaches active, uncompleted route links; completed route history remains intact. While it is active, the Task shows the contractor snapshot; internal assignment and route controls are unavailable. Contractor contacts remain visible to Operations/Admin only.
To finish the work, use Complete externally. To withdraw it for internal follow-up, use Return to internal pool; this closes the contractor handoff and returns the Task to the unassigned Task pool.
Transactions
Transactions record all stock movements.
Transaction Types
| Type | Description |
|---|---|
| Delivery | Items delivered to a location (increases stock) |
| Usage | Items consumed/removed (decreases stock) |
| Adjustment | Manual inventory correction (increase or decrease) |
Viewing Transactions
The Transactions page shows:
- Date and time
- Location
- Item
- Quantity (+/-)
- Type
- Notes
Filtering Transactions
Filter by:
- Location
- Item
- Transaction type
- Date range
Consumption Settings
Configure how the system calculates item needs.
Consumption Modes
Each location can use one of three modes:
| Mode | How It Works |
|---|---|
| Reservation-Based | Calculates based on actual guest count from reservations |
| Fixed Guests | Uses a fixed guest count (e.g., always prepare for 4 guests) |
| Max Guests | Uses maximum capacity of the unit |
Setting Consumption Mode
- Go to Consumption
- Find the location
- Select the preferred mode
- If using "Fixed Guests", enter the number
- Save
Item Consumption Rules
Configure how many items are needed:
- Per Guest: Items multiplied by guest count (e.g., 1 towel per guest)
- Per Bed: Sheets are linked on each bed (see Bed Sheet Linking) and counted 1× per bed
- Per Bathroom: Items based on bathroom count (e.g., 1 bath mat per bathroom)
- Fixed: Same quantity regardless of guests (e.g., 1 doormat)
Unit Settings (v2)
Each unit has additional settings that affect consumption:
| Setting | Description | Default |
|---|---|---|
| Pillows per Guest | Number of pillows prepared per guest (affects pillowcase count) | 2 |
Bed Sheet Linking (v2)
When creating or editing a bed, you can link it to a specific sheet item:
- Go to the Unit configuration
- Add or edit a bed
- Select the Sheet Item from the dropdown (shows only sheet/linen items)
- Save
This enables accurate per-bed sheet consumption: exactly 1 of the linked sheet per bed.
Estimated Bags
The system now estimates laundry bags needed based on duvet covers:
- Formula:
ceil(duvet_covers ÷ 4) - This is shown as an estimate in consumption previews
Rejected Items (Quality Returns)
Track items received from the laundry supplier that don't meet quality standards. These items should be returned to the supplier.
Important: Rejected items are NOT items we need to buy/replace. They are items the laundry company delivered to us that are unfit for use. Recording them helps:
- Track what to return to the supplier
- Explain why stock levels are lower than expected
- Document quality issues with the laundry service
Recording Rejected Items
When you receive laundry that doesn't meet standards:
- Go to Rejected Items
- Click "Record Rejected Items"
- Select the location (usually the storage/office where delivery arrived)
- For each item:
- Select the item type
- Enter quantity
- Select reason:
- Damaged: Torn, broken, holes
- Stained: Permanent stains that weren't removed
- Worn: Excessive wear and tear
- Optionally add a photo as evidence
- Add notes if needed
- Save
Process Later Flag
For items needing review before final decision:
- Check "Process Later" when recording
- Items appear in a separate list for review
- Come back later to make final decision (accept or return)
Returning Items to Supplier
After recording rejected items:
- Set aside the physical items for return
- Use the Export CSV feature to generate a return list
- Include the list with items when supplier picks up or you drop off
- Mark items as "Processed" once returned
CSV Export
Export rejected items data for reporting:
- Go to Rejected Items
- Click "Export CSV"
- Select filters (date range, location, item type)
- Download the file
Common Workflows
Morning Routine
- Check Dashboard for critical locations (red badges)
- Review the Plan Board work list for delivery priorities
- Plan shifts and laundry deliveries on the Plan Board
- Drivers see their route in the Field App automatically
After Delivery Returns
- Driver marks stops as complete
- Record any rejected items (red bag)
- Verify stock levels if discrepancies
Weekly Inventory Check
- Visit each location (or coordinate with cleaners)
- Count actual stock
- Go to Stock → Adjust for any corrections
- Note reasons for discrepancies
End of Month
- Export Transactions for the month
- Review Rejected Items report
- Export rejected items list for supplier reconciliation
- Verify returns have been credited by supplier
Troubleshooting
Stock Numbers Don't Match Reality
- Go to the location's Stock page
- Click "Adjust" on the incorrect item
- Enter the correct count
- Select reason "Inventory Count"
- Add notes about the discrepancy
Reservation Not Showing
- Verify the reservation dates are correct
- Check if the correct unit is selected
- Make sure the location is active
Demand or Order Suggestions Seem Wrong
- Verify current stock levels are accurate
- Check consumption mode settings for the location
- Review upcoming reservations and guest counts
- Adjust standard stock levels if needed; then review the affected Demand lane or Orders suggestion again
System Running Slow
- Try refreshing the page
- Clear browser cache
- Check internet connection
- Contact IT support if issues persist
Quick Reference
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl/Cmd + K |
Quick search |
Escape |
Close modal/dialog |
↑ / ↓ buttons |
Reorder stops in delivery builder |
Status Colors
| Color | Meaning |
|---|---|
| 🔴 Red | Critical - Immediate action needed |
| 🟡 Yellow | Warning - Plan action soon |
| 🟢 Green | OK - No action needed |
| 🔵 Blue | Information |
| ⚪ Gray | Inactive/Disabled |
Contact
For technical issues or feature requests, contact your system administrator.
DSGVO Audit Anonymization
If a confirmed deletion/anonymization request affects audit content, use the dashboard workspace script in dry-run mode first:
pnpm --filter @ops/dashboard anonymize-audit -- --table=<table> --record-id=<id>- Or match by internal user record:
pnpm --filter @ops/dashboard anonymize-audit -- --user-id=<id> - Re-run with
--applyonly after verifying the reported matches.
The script preserves timestamps, diff keys and actor metadata, but replaces before_json and after_json with an anonymized marker.
Request resolution and transport
- In Requests, choose a Request type and use Resolve and plan. Confirm the editable Laundry item rows before creating a Laundry delivery; a missing standard-stock template leaves the item editor usable for a manual repair. After confirmation the resulting Task type and title are shown and the plan board opens for the request day (or today when no day was set). For Other, enter a concrete description; blank descriptions cannot be promoted.
- A Transport / Errand request (stored as
special_dispatch) becomes a Transport / Errand task only after both pickup and dropoff locations are chosen. In the manual Transport / Errand editor, pickup stays a location and dropoff may instead be a named custom destination. The route preview always shows pickup before dropoff. Supply refill remains unavailable for manual request intake and promotion until its explicit scope is captured. - A Laundry task marked Needs resolution has no item rows and must be repaired in its task drawer before it can be assigned to a driver shift.
- A promoted request shows a direct Task link and every assigned Stop/plan day as links; Transport has separate pickup and dropoff links once planned.
- Use a custom destination only for Other or as the dropoff of a manually created Transport / Errand. Assigning it from Demand Inbox creates or reuses a custom driver stop carrying its name and address. The read-only
docs/runbooks/audit-laundry-ops-slice5.sqlwas executed once as PR evidence for Slice 5; it is not a recurring reporting or operator procedure.
End of Staff Manual