Because every great bottle deserves a great home (and so does your data). π‘
Alcove is a full-stack wine cellar management application that helps you track your precious bottles without needing a sommelier degree. Whether you're storing a 1982 Bordeaux or last week's supermarket Merlot, we've got you covered. πΎ
- Java β - Fresh vintage, aged to perfection
- Spring Boot π± - The oak barrel of frameworks
- PostgreSQL π - Where your wines sleep soundly
- Liquibase π - Database migrations smoother than a Burgundy
- MapStruct πΊοΈ - DTO mapping without the headache
- JWT Authentication π - Because wine thieves are real
- React βοΈ - The latest harvest
- TypeScript π - Type safety for when you've had too much
- Vite β‘ - Lightning-fast builds (faster than uncorking)
- TanStack Router & Query π£οΈ - Navigation and state management that doesn't leave a bad aftertaste
- Tailwind CSS π¨ - Styling as smooth as a Pinot Noir
- Storybook π - Component showcase and design system (the wine catalog)
- Playwright π - E2E tests that never get tipsy
- Vitest β - Unit tests with a crisp finish
- Flutter π¦ - Cross-platform like a wine that pairs with everything
- Dart π― - Fast, reliable, never oxidizes
- Docker π³ - Containerized like fine wine in bottles
- Redis π - The speed-aging chamber
- Prometheus & Grafana π - Monitoring your cellar temperature (and metrics)
You'll need these tools in your cellar:
- π§ asdf - Version management sommelier
- π³ Docker & Docker Compose - Your containerization corkscrew
- π¦ pnpm - Package manager that doesn't spill
# First time? Let's set up your cellar
make setupThis installs dependencies, configures git hooks, and prepares your environment. Think of it as aerating your development setup. π¬οΈ
make infra-upBoots up PostgreSQL, Redis, Prometheus, and Grafana. Your digital wine cellar is now climate-controlled. π‘οΈ
make backend-runThe API server starts serving at http://localhost:8080. Like a good bartender, it's always ready. πΈ
make web-devYour web interface pours in at http://localhost:5173. Hot reload included - no decanting required. π
make mobile-devFlutter hot reload fires up. Your pocket sommelier awakens. β¨
make web-storybookComponent library and design system at http://localhost:6006. Browse your UI collection like a wine catalog. π·
We take testing seriously. Every bottle gets inspected. π
# The full tasting menu
make test
# Backend tests
make backend-ut # Unit tests (the quick sip)
make backend-it # Integration tests (the proper tasting)
make backend-cucumber # BDD tests (the sommelier's notes)
# Web tests
make web-test # Unit tests with Vitest
make web-e2e # Playwright E2E (the full experience)
# Mobile tests
make mobile-test # Flutter unit tests
make mobile-e2e # Playwright mobile E2Emake formatBecause messy code is like wine on the tablecloth. π§Ή We use:
- β Google Java Format for backend (crisp and clean)
- π¨ ESLint for web (consistent and smooth)
- π¦ Flutter Analyze for mobile (pure and refined)
Liquibase handles the aging process automatically in dev mode. π·
# Run migrations locally
make backend-liquibase
# Production (via Docker init container)
docker run -e LOADER_MAIN=com.alcove.liquibase.AlcoveLiquibaseApplication \
-e SPRING_PROFILES_ACTIVE=liquibase \
alcove-backend:latest# Build all images with docker bake
make docker-build
# Run E2E tests in pristine containers
make e2eKeep an eye on your cellar: π
- Prometheus: http://localhost:9090 (The sensors) π
- Grafana: http://localhost:3000 (The dashboard) π
alcove/
βββ backend/ # Spring Boot API (the vault)
βββ web/ # React web app (the tasting room)
βββ mobile/ # Flutter app (the pocket guide)
βββ infra/ # Monitoring configs (the sensors)
βββ docker-compose.yml # Container orchestra
βββ Makefile # Your command sommelier
Every push triggers: β‘
- βοΈ Parallel unit/integration/lint jobs
- π Coverage analysis with JaCoCo and Vitest
- π SonarCloud quality gates
- π E2E testing in isolated environments
- π³ Automated Docker image builds
- π·οΈ Version bumping with Cocogitto (conventional commits)
Push to main β auto-release. It's like an automated wine rating system. π
Lefthook keeps things tidy: π§Ή
- pre-commit: Format and lint (no bad bottles allowed) βπ·
- commit-msg: Conventional commits only (proper labeling) π·οΈ
- pre-push: Type checks (one last quality check) β
- π¬ Use conventional commits:
feat:,fix:,chore: - π Run
make helpfor all available commands - π€ Dependencies auto-update via Renovate
- π Check SonarCloud for code quality metrics
Private vintage. Not for distribution. π
Built with Spring Boot, React, and Flutter. Tested thoroughly. Served responsibly. π·β¨