A standalone workday/workforce management application for managing people, contracts, assignments, work hours, expenses, and invoicing.
This project is structured as a standalone multi-module Maven project. The modules are:
flock-eco-workday/
├── pom.xml # Parent aggregator POM (no parent inheritance)
├── workday-core/ # Core utilities, base entities (vendored from flock-eco-core)
├── workday-user/ # Authentication, authorization, user management (vendored from flock-eco-feature-user)
└── workday-application/ # Main application code with all business logic
├── src/main/kotlin/ # Application code
├── src/main/react/ # Frontend React application
├── src/main/wirespec/ # API contract definitions
├── src/main/database/ # Liquibase migrations
└── src/develop/kotlin/ # Development fixtures and test data
- workday-core: Provides base utilities, common domain models, security configurations, and shared client utilities. Vendored from flock-eco-core for independence.
- workday-user: Handles authentication, authorization, user management, and security. Vendored from flock-eco-feature-user for independence.
- workday-application: Contains all business logic for workday management including people, contracts, assignments, projects, expenses, invoices, and integrations.
- Java 17 or higher
- Maven 3.6+
- Node.js (version specified in
.nvmrc) - Google Cloud CLI (gcloud) - Required for Google integrations
Download and install the gcloud cli. After installing, create Application Default Credentials (ADC):
gcloud auth application-default loginIf you have nvm installed, use the project's specified Node version:
nvm useBuild all modules from the root directory:
./mvnw clean installThis will build all three modules in order: workday-core → workday-user → workday-application.
To include the frontend build:
./mvnw clean package -Pfrontend- Clone the repository
- Install Maven dependencies:
./mvnw clean install
- Install Node dependencies (from root, where package.json is located):
npm install
Run from the workday-application directory with the develop profile for test data:
cd workday-application
../mvnw spring-boot:run -Pdevelop -Dspring-boot.run.profiles=developOr from your IDE:
- Mark
workday-application/src/develop/kotlinas a source directory - Add
developto the Spring Boot run configuration active profiles - Run the main application class
The backend will start on http://localhost:8080
Run from the root directory (where package.json is located):
npm startThe frontend dev server will start on http://localhost:3000 with hot-reload enabled and will proxy API calls to the backend on port 8080.
All frontend scripts should be run from the root directory:
npm start # Start webpack dev server
npm run build # Production build
npm test # Run Jest tests
npm run lint # Run Biome linter
npm run lint:fix # Fix Biome linting issues
npm run format # Run Biome# Run all tests
./mvnw test
# Run tests for specific module
cd workday-user
../mvnw testnpm test # Run Jest tests
npm run test:watch # Run tests in watch modePlaywright tests are located in the tests/ directory. Check test-results/ for the latest test status.
# Run Playwright tests (if configured)
npx playwright testThe application uses H2 database in development mode with Liquibase for migrations. On production it uses CloudSQL Postgres
When you modify JPA entities, generate a Liquibase diff file:
cd workday-application
../mvnw clean compile liquibase:update liquibase:diffThen:
- Rename
db.changelog-diff.yamltodb.changelog-#.yaml(increment the number) - Add the new changelog to
db.changelog-master.yaml:databaseChangeLog: - include: - file: db.changelog-1.yaml relativeToChangelogFile: true - file: db.changelog-#.yaml relativeToChangelogFile: true
When running with the develop profile, the H2 console is available at http://localhost:8080/h2.
Connection settings (from application-develop.properties):
- JDBC URL:
jdbc:h2:./database/db - Username:
sa - Password: (empty)
The project uses ktlint for Kotlin code style. This is configured through the spotless maven plugin.
By default, spotless will check for code style issues in maven's verify phase. To fix issues automatically, run:
# With the format profile enabled, spotless will automatically format code
./mvnw test-compil1e -Pformat
# Check for code style issues
./mvnw test-compile spotless:apply
Spotless will also format pom files automatically, using the sort-pom plugin.
Workday uses Biome for frontend code linting.
npm run lint # Check for issues
npm run lint:fix # Auto-fix issuesBuild the application with develop profile and optionally frontend:
./mvnw clean package -DskipTests -Pdevelop -PfrontendThen build the Docker image:
./mvnw jib:dockerBuilddocker run --rm -it -p 8080:8080 \
-e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/application_default_credentials.json \
-v $HOME/.config/gcloud/application_default_credentials.json:/tmp/keys/application_default_credentials.json:ro \
-e spring.profiles.active=develop \
eu.gcr.io/flock-community/flock-eco-workday:latestTo disable Google integration, add: -e flock.eco.workday.google.enabled=false
When running with the develop profile, the following test users are available:
| Password | Role | |
|---|---|---|
| tommy@sesam.straat | tommy | user |
| pino@sesam.straat | pino | user |
| ieniemienie@sesam.straat | ieniemienie | user |
| bert@sesam.straat | bert | admin |
| ernie@sesam.straat | ernie | user |
The application uses Wirespec for API contract definitions. Wirespec files are located in
workday-application/src/main/wirespec/.
To regenerate API types:
npm run generate # Generates TypeScript types from WirespecThe Maven build automatically generates Kotlin types during compilation.
The project uses Jib for containerization and can be deployed to Google Cloud Platform (App Engine) or any container runtime.
tar cvf secrets.tar ./service-account.json src/main/resources/application-cloud.properties
travis encrypt-file secrets.tar --addThe application integrates with:
- Google APIs: Drive, Sheets (for reporting and document management)
- ExactOnline: Accounting and invoicing
- Mailjet: Email notifications
Integration configurations are managed in application-cloud.properties and can be disabled with feature flags.
- Kotlin 1.9.22
- Spring Boot 2.6.2
- Spring Security with OAuth2
- JPA/Hibernate
- Liquibase for database migrations
- Wirespec for API contracts
- React 16.14
- TypeScript
- Material-UI v4
- Formik for forms
- Webpack 4
- Jest for testing
This project was recently migrated from being dependent on the flock-eco parent repository to a fully standalone multi-module project. All necessary code from flock-eco-core and flock-eco-feature-user has been vendored into workday-core and workday-user respectively.
For detailed migration information, see the MIGRATION.md guide (if available).
Make sure you've run npm install from the root directory where package.json is located.
Ensure your IDE is configured to use the tsconfig.json at the root level. The project uses TypeScript path aliases (@workday-core, @workday-user) for cleaner imports.
Make sure all modules are built in order. Run ./mvnw clean install from the root to rebuild all modules.
Check that your Liquibase changelog files are properly referenced in db.changelog-master.yaml.
For issues, questions, or contributions, please contact the Flock development team or create an issue in the project repository.