Facilo — Product Documentation
Last updated: September 2026
What is Facilo?
Facilo is a multi-partner facility management SaaS built for maintenance companies, property managers, and their customers (landlords, tenants, businesses). It replaces the Excel spreadsheets and WhatsApp chains that field-service teams use to coordinate cleaning, repairs, and maintenance work.
Live at: https://facilo.xyz
Who Uses Facilo?
| Role |
Who |
What they do |
| Partner / Manager |
Maintenance company (e.g. Atyourservice) |
Creates jobs, assigns workers, invoices customers, reviews completed work |
| Worker |
Field technician |
Receives job assignments, executes work, uploads evidence (photos, notes), completes jobs |
| Customer |
Property owner or tenant |
Views job status, accepts completed work, receives invoices |
| Platform Admin |
Facilo operator (Saher) |
Manages all partners, plans, billing |
Core Workflow
Job Created → Assigned to Worker → Scheduled → Worker Executes →
Evidence Uploaded → Completion → Customer Review & Sign-off →
Invoice Generated → Payment Recorded
1. Job Creation
- Manager creates jobs at
/jobs/new
- Fields: Customer, Property, Title, Job Type, Worker, Scheduled Date, Price, Checklist requirements
- Optional: before/after photo requirements, recurring job (daily/weekly/monthly/yearly)
- Jobs can be submitted by tenants via a public link (landlord approval flow)
2. Job Assignment & Scheduling
- Manager assigns a worker at creation or edits the job
- Worker gets notified (email)
- If Google Calendar is connected: event auto-created on worker's calendar
- Scheduled date visible in
/calendar (FullCalendar view)
3. Worker Execution
- Worker accesses job via
/jobs/<id> or through a magic link token (works without login)
- Can log: notes, photos (before/after), time (clock-in/clock-out), checklist items
- Evidence required based on job settings before completion is allowed
- Submits completion → job moves to
pending_approval
4. Completion & Customer Sign-off
- Manager reviews at
/jobs/<id> — can approve or reject
- Customer receives notification → can view evidence and accept work at their portal
- Customer sign-off generates a completion record (Leistungsverzeichnis)
- Job moves to
completed
5. Invoicing
- Manager creates invoice at
/invoices/new — can link to a specific job
- Batch invoicing at
/invoices/batch — groups all completed jobs for a customer by month/type into one invoice
- Merge: multiple jobs into a single invoice
- Invoice line items, tax (19% VAT default), payment terms configurable
- Send via email:
/api/invoices/<id>/send
- Payment recording:
/api/invoices/<id>/payment (cash, bank transfer, card, crypto)
- Print/PDF:
/invoices/<id>/print
Key Features
Calendar (/calendar)
- FullCalendar view showing all scheduled jobs
- Color-coded by job status
- Drag-to-reschedule (managers)
- Google Calendar sync for workers (OAuth connection at
/settings/calendar)
Customer Portal
- Separate login for customers at
/customer/login
- View active jobs, job history, invoices
- Accept completed work
- Submit requests
Import / Export
- Customers:
/customers/import (CSV/Excel)
- Properties:
/properties/import (CSV/Excel)
- Jobs:
/jobs/import (CSV/Excel)
- Download templates for each
Recurring Jobs
- Set
is_recurring=True with pattern: daily/weekly/monthly/yearly
- Auto-generates next job on completion
Preventive Maintenance
- Preventive plans with occurrence schedules
- Automatically generates jobs from occurrences
- Links to assets and locations
Assets & Locations
- Asset registry per property (equipment tracking)
- Location/space hierarchy within properties
Checklist Templates
- Reusable checklist templates for job types
- Attach to jobs, workers tick off items during execution
Multi-partner
- Each partner has isolated data (tenant scoping)
- Platform admin can manage all partners at
/admin/*
- Billing plans via Stripe
Status Reference
| Status |
Meaning |
pending |
Created, not yet assigned/started |
in_progress |
Worker has started work |
pending_approval |
Worker submitted, awaiting manager review |
completed |
Approved, work confirmed done |
cancelled |
Cancelled |
| Invoice Status |
Meaning |
draft |
Not yet sent |
sent |
Emailed to customer |
paid |
Payment recorded |
overdue |
Past due date, unpaid |
cancelled |
Voided |
Settings & Configuration
| Setting |
Location |
| Partner profile (name, address, bank, logo) |
/settings/profile |
| Google Calendar OAuth |
/settings/calendar |
| API keys |
/settings/api-keys |
| Checklist templates |
/checklist-templates |
| Billing plan |
/settings/billing |
| Language |
EN / DE (i18n throughout) |
Technical Stack
| Layer |
Technology |
| Backend |
Python / Flask |
| Database |
PostgreSQL 16 |
| ORM |
SQLAlchemy + Alembic migrations |
| Background jobs |
Celery + Redis |
| Frontend |
Tailwind CSS, Jinja2 templates, HTMX |
| Calendar UI |
FullCalendar |
| Payments |
Stripe (subscription billing) |
| Email |
SMTP |
| Auth |
Flask-Login, Flask-WTF (CSRF) |
Deployment
- Server: Linux VPS
- Process: Gunicorn → Nginx (SSL)
- URL: https://facilo.xyz
- Service:
systemctl status facilo.service
- Logs:
journalctl -u facilo.service -f
- Backup:
/root/facilo/scripts/backup.sh (runs nightly)
Roadmap & Open Items
High Priority
- ✅ Merge jobs into one invoice
- ✅ Monthly batch invoice per customer/job type
- ✅ Customer sign-off / completion record
- ⬜ Google Calendar OAuth (credentials needed)
- ⬜ Receipts & job cost tracking
- ⬜ Tenitt 2026 customer data import
Planned
- ⬜ 3rd party syncing (Zendesk, Guesty)
- ⬜ Customer job-booking link (self-service scheduling)
- ⬜ AI chat integration
- ⬜ Gebäudereinigung processes
- ⬜ SLA tracking & alerting
- ⬜ Employee location tracking (arrival/duration)
- ⬜ Leistungsverzeichnis (formal work certificate)
Common Operations (Manager Cheat Sheet)
Create a job: /jobs/new
View calendar: /calendar
Approve completed: /jobs/<id> → Approve button
Create invoice: /invoices/new
Batch invoice: /invoices/batch (select customer + month)
Record payment: /invoices/<id> → Add Payment
Import customers: /customers/import
Import jobs: /jobs/import
Support & Administration
Admin login: saher@facilo.xyz
Platform admin panel: /admin/*