-
Notifications
You must be signed in to change notification settings - Fork 10
Overview
The Effective Office system is an office management platform designed to automate various office processes, with a primary focus on meeting room booking and workspace management. This document provides a high-level introduction to the system architecture, core components, and fundamental concepts.
The system follows a client-server architecture where a Spring Boot backend provides REST APIs for office resource management, while tablet clients display room availability and enable quick booking operations. For detailed information about specific subsystems, see System Architecture for architectural patterns, Backend System for server-side implementation details, and Tablet Client Application for client-side specifics.
Effective Office serves as a comprehensive solution for office automation with these primary objectives:
| Goal | Description |
|---|---|
| Process Automation | Automate various office processes including room booking, availability tracking, and resource management |
| Real-time Information | Provide up-to-date status of meeting rooms and office spaces through tablet displays |
| Calendar Integration | Seamlessly integrate with Google Calendar for unified booking management |
| User Experience | Enable instant room reservations with single-tap booking functionality |
The system is built as a multi-module Kotlin application, focusing on modern and relevant solutions within the Kotlin ecosystem while minimizing dependencies on other languages and technologies.
The system consists of three main architectural layers:
The system provides comprehensive room management functionality through its tablet interface:
| Feature | Implementation | Code Reference |
|---|---|---|
| Real-time Availability | Live room status updates via push notifications |
RoomInfoUseCase, UpdateUseCase
|
| Quick Booking | Single-tap room reservation |
FastBooking, CreateBookingUseCase
|
| Time-Specific Reservations | Detailed booking with custom time slots |
BookingEditor, SlotComponent
|
| Booking Management | Cancel and modify existing reservations | DeleteBookingUseCase |
| Google Calendar Sync | Bidirectional calendar integration | GoogleCalendarProvider |
| Early Release | Free up rooms before scheduled end time | BusyRoomInfoComponent |
The system implements several key data flow patterns for different operations:
The system is organized into distinct modules with clear responsibilities:
| Module | Purpose | Highlights |
|---|---|---|
core:domain |
Domain models and business rules | Shared entities, validation logic |
core:data |
Transport and API contracts | REST DTOs, serialization schemas |
core:repository |
Data access and persistence interfaces | JPA repositories, database abstractions |
app |
Spring Boot entry point & configuration | Application bootstrap, global configuration |
| Module | Purpose | Key APIs / Responsibilities |
|---|---|---|
user |
User management | User CRUD, profile data |
authorization |
Auth & security | JWT issuance, Spring Security integration |
booking:core |
Booking workflows | Booking CRUD, availability checks |
workspace |
Workspace inventory | Room/space CRUD, metadata |
calendar-subscription |
Google Calendar sync | Subscription lifecycle, webhook renewals |
notifications |
Push notifications | FCM integration, broadcast APIs |
duolingo |
Duolingo integration | XP leaderboard ingestion |
leader-id |
Leader ID events | Event retrieval, filtering, QR payloads |
photo-saver:core |
Photo ingestion pipeline | Reaction filtering, scheduled sync orchestration |
photo-saver |
Mattermost provider | Mattermost API access, media download |
photos |
Synology photo retrieval | Album browsing APIs, pagination |
sport |
Sport tracking | Activity stats ingestion |
teammates |
Teammate directory | Profile data, scoring, filtering |
| Module | Purpose | Key Components |
|---|---|---|
composeApp |
Main application entry point | RootComponent |
feature.main |
Home dashboard and room display |
MainComponent, BusyRoomInfoComponent
|
feature.bookingEditor |
Booking creation interface | BookingEditorComponent |
feature.fastBooking |
Quick reservation workflow | FastBookingComponent |
feature.slot |
Time slot visualization | SlotComponent |
core.domain |
Business logic and use cases |
CreateBookingUseCase, RoomInfoUseCase
|
| Module | Purpose | Key Components |
|---|---|---|
composeApp |
TV + desktop entry point |
RootComponent, autoplay orchestration |
feature:menu |
Category selection & remote navigation |
MenuComponent, CategoryCard
|
feature:stories |
Employee celebrations & story cards |
StoriesAutoplayFeature, StoriesComponent
|
feature:photos |
Synology photo slideshow |
PhotosAutoplayFeature, PhotosComponent
|
feature:events |
Leader ID / calendar events |
EventsAutoplayFeature, EventsComponent
|
| Module | Purpose | Key Components |
|---|---|---|
app |
Android entry point + DI bootstrap | MainActivity |
data |
Persistence & networking |
SettingsRepository, SmsLogsRepository, SmsApiService
|
domain |
Business logic + use cases |
ForwardSmsUseCase, |
presentation |
Compose UI + ViewModels |
SettingsViewModel, MessagesScreen, SmsReceiver
|
The system is containerized and deployed using Docker Compose with proper reverse proxy configuration:
- Containerization: All services run in Docker containers managed by docker-compose
- Reverse Proxy: Caddy handles SSL termination and load balancing
- Database: PostgreSQL with automated migrations via Flyway
- Environment Management: Configuration through environment variables and .env files
- The deployment supports both development and production environments with appropriate configuration management.