Skip to content

Repository files navigation

Stable Manager

A comprehensive equine care management platform for stables. Track horses, health events, vaccinations, worm tests, treatments, and receive automated notifications.

Features

  • Horse Management - Complete profiles with health history, documents, and care schedules
  • Vaccination Tracking - Plan and monitor vaccinations with automated reminders
  • Worm Testing - Schedule tests and track results with reminder notifications
  • Treatment Schedules - Recurring treatments with automatic task generation
  • Health Events - Log vet visits, feeding, therapy, farrier appointments, and more
  • Document Storage - Attach files and images to horses (stored in S3)
  • Multi-Tenant - Data isolation per stable with role-based access control
  • Notifications - Email, SMS (GatewayAPI), and in-app notifications
  • Dashboard - Overview of upcoming tasks, due vaccinations, and alerts
  • Localization - English and Danish language support

Tech Stack

ComponentTechnology
BackendJava 21, Spring Boot, Jmix 2.7
FrontendVaadin 24.9 Flow UI
DatabasePostgreSQL with EclipseLink ORM
BuildGradle 8.x
SchedulingQuartz
File StorageAWS S3 / DigitalOcean Spaces
DeploymentDocker, Kamal 2

Getting Started

Prerequisites

  • Java 21+
  • PostgreSQL 15+
  • Node.js 18+ (for frontend build)
  • Gradle 8.x

Local Development

  1. Clone the repository

    git clone https://github.com/TorbenMerrald/StableManager.git
    cd StableManager
  2. Set up the database

    createdb stablemanager
  3. Configure local settings

    Copy the example configuration:

    cp src/main/resources/application-dev.properties.example \
    src/main/resources/application-dev.properties

    Edit application-dev.properties with your local settings (database, S3, etc.)

  4. Run the application

    ./gradlew bootRun

    The application will be available at http://localhost:7070

  5. Default login

    • Username: admin
    • Password: admin

Running Tests

./gradlew test# Run all tests
./gradlew test --tests "ClassName"# Run single test class
./gradlew test --tests "*.methodName"# Run single test method

Configuration

Environment Variables (Production)

VariableDescription
SQL_URLPostgreSQL JDBC URL
SQL_USERNAMEDatabase username
SQL_PASSWORDDatabase password
S3_BUCKETS3 bucket name
S3_ACCESSKEYS3 access key
S3_SECRET_ACCESSKEYS3 secret key
S3_ENDPOINTS3 endpoint URL
S3_REGIONS3 region
SMTP_USERNAMESMTP username
SMTP_PASSWORDSMTP password
SMS_GATEWAYAPI_KEYGatewayAPI key (optional)
SMS_GATEWAYAPI_SECRETGatewayAPI secret (optional)
OPENAI_API_KEYOpenAI API key for document summarization (optional)

Deployment

Building the Docker Image

./gradlew bootBuildImage --imageName=torbenmerrald/stablemanager:<version>
docker push torbenmerrald/stablemanager:<version>

Deploying with Kamal

kamal deploy --skip-push --version=<version>

See config/deploy.yml for Kamal configuration.

Project Structure

src/main/java/dk/merrald/sm/
├── entity/ # JPA entities (Horse, Event, VaccinePlan, etc.)
├── view/ # Vaadin Flow UI views
├── service/ # Business logic
├── app/ # Scheduled jobs (reminders, task generation)
├── listener/ # Entity event listeners
└── security/ # Roles and authentication

License

Proprietary - All rights reserved.

Author

Torben Merrald - merrald.dk

About

Equine care management platform for stables - track horses, vaccinations, worm tests, treatments, and automated notifications

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages