PillowDesk is a lightweight booking and stay management system built on the Strolch framework. It is designed to manage hotel-like stays, rooms, and rates, providing essential reporting on revenue and occupancy.
- Stay Management: Complete lifecycle management of guest stays (Add, Edit, Remove).
- Rate Overrides: Define date-specific rates that override the default base price for any given day. Supports managing overrides across multiple rate types.
- Guest Search: Filter stays by guest name, check-in, and check-out dates.
- Room & Rate Relations: Associate stays with specific rooms and pricing rates.
- Reporting & Analytics:
- Daily & Monthly Summary: Detailed breakdown of pro-rated daily revenue and tourist taxes.
- Yearly Performance: Monthly overview of revenue, taxes, and occupancy rates.
- Booking Distribution: Tracks Airbnb vs. Direct bookings.
- Dynamic Pricing: Stay cost calculation automatically incorporates rate overrides for specific dates, allowing for seasonal or event-based pricing adjustments.
- Authentication: Secure access powered by Strolch's privilege system.
- Backend: Java 25, Strolch Framework, Jakarta REST (Jersey).
- Frontend: Vanilla HTML5, CSS3, and JavaScript (SPA architecture).
- Build Tool: Maven.
pillow-desk-core: Contains the domain model, business logic, services, and policies.pillow-desk-rest: Provides the Jakarta REST API endpoints for the web interface.pillow-desk-web: The web application frontend (packaged as WAR).runtime: Contains Strolch configuration and initial data model (Rooms, Rates, etc.).
- Java 25 or higher.
- Maven 3.9+.
To build the project, run:
mvn clean installPillowDesk is a Strolch-based web application. It is packaged as a WAR file and can be deployed to any Jakarta EE compatible servlet container (e.g., Tomcat, Jetty).
For development, the project is configured with a local development profile that uses the runtime configuration in the runtime directory.
- Website: https://pillow-desk.eitchnet.ch
To run PillowDesk using Docker, follow these steps:
- Build the project from the root:
mvn clean package -DskipTests
- Start the application using Docker Compose:
docker compose -f docker-compose-dev.yml up --build
- The application will be available at
http://localhost:8080.
The Docker configuration uses the runtime directory for configuration and data. Any changes made to the runtime directory on your host will be reflected in the container.
Basic commands would be:
DOCKER_TAG="pillow-desk:latest"
TAG_PATH="${REGISTRY}/docker/${DOCKER_TAG}"
docker image build --load --pull -f Dockerfile --tag "${DOCKER_TAG}" .
docker tag "${DOCKER_TAG}" "${TAG_PATH}"
docker push "${TAG_PATH}"But the following script will build and push the image to the specified repository and clean up the local images afterwards:
./build-docker-image.sh -p -c -r repo.strolch.liCreate the following directories on your host:
mkdir pillow-desk
cd pillow-desk
mkdir tomcat-logs
mkdir runtime
mkdir runtime/{config,data,temp}Copy the docker-compose.yml to your host.
Copy the following files from the runtime directory to the runtime directory:
configdatatemp
Generate random values for secretKey and secretSalt in the following file:
- runtime/config/PrivilegeConfig.xml
Then, start the application using Docker Compose:
docker compose up -d
docker compose logs -fPillowDesk is licensed under the GNU Affero General Public License v3.0.
Copyright © 2026 eitch - Robert von Burg