Skip to content

juliosuas/airbnb-manager

Repository files navigation

Airbnb Manager

Open-source multi-property management platform for short-term rental hosts.

Built for Latin America. Free for your first property. Self-hostable.


What Is This?

Airbnb Manager is a self-hosted (or cloud) platform that helps hosts manage multiple properties from a single dashboard. It syncs reservations via Airbnb-supported iCal feeds, provides template-based guest response suggestions, pricing recommendations, cleaning management, and operational alerts.

Why this exists: Many property management tools are priced and designed around US/EU operators. This project keeps a LatAm-first, self-hostable path for hosts who want control of their calendar, pricing, cleaning, and guest operations.

Features

  • Authentication — JWT-based auth, bcrypt passwords, multi-user support
  • Multi-Property — Manage unlimited properties per account, each fully isolated
  • iCal Sync — Import reservations via Airbnb-supported iCal feeds. Export your calendar as .ics
  • Host Ops Dashboard — Reservation Ops, Inbox Priority, Listing Readiness, Pricing Insights, Checkout Checklist, Quick Replies, Calendar Health, Guest Trip Assist, and monitor delivery gates informed by official Airbnb host docs
  • Template Suggestions — Property-aware message suggestions for common guest questions (check-in, WiFi, restaurants, etc.)
  • Pricing Assist — Weekend multipliers, Mexican holiday premiums, seasonal adjustments, long-stay discounts, demand-based pricing recommendations
  • Analytics — Occupancy rate, revenue tracking, rating monitoring
  • Cleaning Management — Auto-scheduled tasks tied to checkouts with status tracking
  • Review Tracking — Monitor and respond to guest reviews
  • Responsive UI — Dark/light themes, mobile-friendly, skeleton loading states
  • Security — Helmet.js headers, rate limiting on auth, input validation/sanitization
  • Logging — Structured logging with Pino

Scope Notes

  • This is not an approved Airbnb API integration. Airbnb calendar data is synced through iCal feeds.
  • Guest messages, reviews, listing edits, cancellation policy, and pricing changes are not pushed to Airbnb unless a future approved API/partner integration is added.
  • Current response suggestions are template-based. Real OpenAI/Claude integration remains roadmap work.
  • Pricing automation is assistive/manual by default. ML/bandit experiments require persisted reward data and guardrails before production use.

Official Airbnb Docs Applied

The current host-ops workflow maps local Casa Diamante operations to public Airbnb documentation only:

  • Airbnb 2026 Summer Release: services, experiences, boutique hotels, app planning, and support rollout signals
  • All-new listing insights: price, availability, minimum-stay, discount, and review-improvement prompts
  • Reservations, redesigned: booking request review, countdown, notes, messaging, cancellation cutoff, and earnings breakdown cues
  • Respond faster in Messages: auto-replies, priority messages, and suggested action framing
  • Scheduled quick replies: reusable guest templates and reservation-timed reminders
  • Clear checkout and calendar sync docs: checkout tasks plus iCal import/export and refresh expectations

These modules are assistive and iCal-based. They do not write changes back to Airbnb.

Quick Start

# Clone
git clone https://github.com/your-username/airbnb-manager.git
cd airbnb-manager

# Install dependencies
cd backend && npm install

# Configure environment
cp .env.example .env
# Edit .env — at minimum, set JWT_SECRET to a random string

# Seed demo data (creates demo user: demo@airbnbmanager.com / demo1234)
npm run seed

# Start
npm start
# → http://localhost:3001

Or use Make from the project root:

make start    # install + seed + start
make dev      # install + seed + start with --watch

Then visit:

Demo credentials: demo@airbnbmanager.com / demo1234

Docker

# Build and run
docker compose up --build

# Or with Make
make docker

The Docker setup uses a multi-stage build with node:20-alpine. Database is persisted via volume mount at ./backend/db.

Set JWT_SECRET in your environment or .env file before running in production.

Architecture

backend/              Node.js + Express API (port 3001)
  ├── db/             SQLite database, schema, seed data
  │   └── schema.sql  Multi-tenant schema (users, properties, reservations...)
  ├── middleware/      Auth (JWT), error handling, input validation
  ├── services/       Template responder, pricing engine, iCal, notifications
  └── server.js       Main server with all routes
frontend/             Vanilla HTML/CSS/JS (served by Express)
  ├── index.html      Dashboard SPA
  ├── login.html      Sign-in page
  ├── landing.html    Marketing / landing page
  ├── onboarding.html 4-step setup wizard
  ├── app.js          Dashboard logic
  └── style.css       Design system

API Documentation

Auth

Method Endpoint Auth Description
POST /api/auth/register No Create account (rate limited)
POST /api/auth/login No Login, get JWT (rate limited)
GET /api/auth/me Yes Current user info

Properties

Method Endpoint Auth Description
GET /api/properties Yes List user's properties
POST /api/properties Yes Add a property
GET /api/properties/:id Yes Get property details
PUT /api/properties/:id Yes Update property
DELETE /api/properties/:id Yes Delete property

Property-Scoped Resources

All data is scoped per property:

Method Endpoint Description
GET /api/properties/:id/reservations Reservations for property
GET /api/properties/:id/calendar Calendar data
GET /api/properties/:id/messages Guest messages
GET /api/properties/:id/analytics Stats and metrics
GET /api/properties/:id/reviews Reviews
GET /api/properties/:id/cleaning Cleaning tasks

iCal Integration

Method Endpoint Description
POST /api/properties/:id/ical/sync Import from iCal URL
GET /api/properties/:id/ical/export Export as .ics file
GET /api/ical/:id.ics Public .ics URL (no auth, for sharing)

Legacy Routes

Method Endpoint Description
GET /api/health Health check
GET /api/property First property (legacy)
GET /api/reservations All reservations
GET /api/calendar Calendar data
GET /api/messages Messages
POST /api/messages/send Send message
POST /api/messages/suggest Template suggestions
GET /api/analytics Dashboard stats
POST /api/pricing Update pricing
GET /api/pricing/calculate Calculate stay price
GET /api/reviews Reviews
GET /api/cleaning Cleaning tasks
PATCH /api/cleaning/:id Update cleaning status

Environment Variables

Copy backend/.env.example to backend/.env:

PORT=3001
DB_PATH=./db/airbnb.db

# REQUIRED — change in production
JWT_SECRET=change-me-to-a-random-secret-in-production
JWT_EXPIRES_IN=7d

# OpenAI (optional — for AI responses)
OPENAI_API_KEY=

# Pricing defaults
BASE_PRICE=1500
WEEKEND_MULTIPLIER=1.3
CURRENCY=MXN

# Notification webhook (optional)
NOTIFICATION_WEBHOOK_URL=

# Airbnb-supported iCal feed. Keep real tokens in .env only.
AIRBNB_ICAL_URL=

# WhatsApp alert recipients (optional, comma-separated E.164)
WHATSAPP_ALERT_RECIPIENTS=
AIRBNB_DECISION_RECIPIENTS=

Tech Stack

Component Technology
Backend Node.js + Express
Database SQLite (WAL mode, better-sqlite3)
Auth JWT + bcrypt
Security helmet.js, express-rate-limit, input validation
Logging Pino (structured JSON)
Frontend Vanilla HTML/CSS/JS
Icons Lucide (CDN)
Fonts Inter (Google Fonts)
iCal Custom parser (no external deps)

Roadmap

  • Multi-tenant auth + multi-property
  • iCal import/export
  • Landing page + onboarding
  • Security hardening (helmet, rate limiting, validation)
  • Structured logging
  • Docker support
  • Host Ops dashboard based on official Airbnb 2026 host workflows
  • Alert-only WhatsApp notification scaffolding
  • Initial Node test suite for pricing and response suggestions
  • Real AI responses (OpenAI/Claude)
  • Persisted pricing recommendations and reward tracking
  • Multi-platform sync (Booking.com, VRBO)
  • Mobile app (PWA)
  • Payment tracking
  • Cleaning team management with photo verification

Contributing

See CONTRIBUTING.md for guidelines. We welcome PRs!

License

MIT — see LICENSE