3e040990f543648ecc3b04f572f6c8af2ac39500
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Space Booking System
Web application for booking offices and meeting rooms with multi-tenant support, administrative approval flow, and public booking API.
Tech Stack
Backend:
- FastAPI 0.115+ (Python 3.12+)
- SQLAlchemy 2.0 (ORM)
- SQLite database
- JWT authentication
- Uvicorn (ASGI server)
Frontend:
- Vue.js 3.4+
- Vite 5.x (build tool)
- Pinia (state management)
- Vue Router 4.x
- TypeScript
- FullCalendar (calendar view)
Getting Started
Prerequisites
- Python 3.12+
- Node.js 18+
- npm or yarn
Backend Setup
cd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Seed database with demo users
python seed_db.py
# Run development server
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Backend will be available at: http://localhost:8000
API documentation: http://localhost:8000/docs
Frontend Setup
cd frontend
# Install dependencies
npm install
# Run development server
npm run dev
Frontend will be available at: http://localhost:5173
Demo Accounts
After seeding the database (runs automatically on container start):
| Password | Role | |
|---|---|---|
| admin@example.com | adminpassword | Superadmin |
| manager@example.com | managerpassword | Manager |
| user@example.com | userpassword | User |
Docker Compose (local)
# Create .env from template
cp backend/.env.example backend/.env
# Edit .env with your values
# Start all services
docker compose up --build
Frontend: http://localhost Backend API: http://localhost:8000/docs
Deploy (Dokploy)
Dokploy UI → New Service → Docker Compose → Git: space-booking repo
Environment Variables (Dokploy → Environment tab)
| Variable | Required | Example |
|---|---|---|
SECRET_KEY |
Yes | python -c "import secrets; print(secrets.token_hex(32))" |
FRONTEND_URL |
Yes | https://space.roa.romfast.ro |
SMTP_ENABLED |
No | true |
SMTP_HOST |
No* | smtp.example.com |
SMTP_PORT |
No* | 587 |
SMTP_USER |
No* | user@example.com |
SMTP_PASSWORD |
No* | secret |
SMTP_FROM_ADDRESS |
No* | rezervari@romfast.ro |
*Required only if SMTP_ENABLED=true
Auto-seed
entrypoint.sh runs seed_db.py automatically on every container start.
The script is idempotent — skips if data already exists.
Development Commands
Backend
cd backend
# Type checking
mypy app/
# Linting
ruff check .
# Format code
ruff format .
# Run tests
pytest
# Run with auto-reload
uvicorn app.main:app --reload
Frontend
cd frontend
# Type checking
npm run typecheck
# Linting
npm run lint
# Build for production
npm run build
# Preview production build
npm run preview
Project Structure
space-booking/
├── backend/
│ ├── app/
│ │ ├── api/ # API endpoints
│ │ ├── core/ # Core utilities (config, security)
│ │ ├── db/ # Database session
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ └── main.py # FastAPI application
│ ├── tests/ # Backend tests
│ ├── requirements.txt
│ └── seed_db.py # Database seeding script
├── frontend/
│ ├── src/
│ │ ├── assets/ # CSS and static assets
│ │ ├── components/ # Vue components
│ │ ├── router/ # Vue Router configuration
│ │ ├── services/ # API services
│ │ ├── stores/ # Pinia stores
│ │ ├── types/ # TypeScript types
│ │ ├── views/ # Page components
│ │ ├── App.vue # Root component
│ │ └── main.ts # Application entry
│ └── package.json
└── README.md
Features
- User authentication with JWT
- Role-based access (superadmin / manager / user)
- Space management (CRUD)
- Property management (groupuri de spații, public/privat)
- Property managers (many-to-many)
- Booking calendar view (FullCalendar)
- Booking request system
- Admin approval workflow
- Anonymous booking support (guest name/email)
- Public booking API (fără autentificare)
- Organizations & members
- Notifications
- Audit log
- Reports
- Booking templates
- Google Calendar integration
- Attachments
- User profile & settings
- Email verification
API Endpoints
Authentication
POST /api/auth/login- Login with email and passwordPOST /api/auth/register- Register new user
Resources
/api/spaces- Space management/api/properties- Property management/api/bookings- Booking management/api/organizations- Organization management/api/users- User management/api/notifications- Notifications/api/audit-log- Audit log/api/reports- Reports/api/public/*- Public API (no auth required)
Health
GET /- API infoGET /health- Health check
License
MIT
Description
Languages
Python
51.2%
Vue
43.3%
TypeScript
4.4%
CSS
0.5%
Shell
0.4%
Other
0.1%