Skip to content

ValentinBouffard/alcove

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

48 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🍷 Alcove - Your Digital Wine Cellar

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. 🍾

πŸ‡ What's Inside the Bottle

🎩 Backend (The Sommelier)

  • 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

🎨 Web (The Tasting Room)

  • 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

πŸ“± Mobile (The Pocket Sommelier)

  • Flutter πŸ¦‹ - Cross-platform like a wine that pairs with everything
  • Dart 🎯 - Fast, reliable, never oxidizes

πŸ—οΈ Infrastructure (The Wine Cellar)

  • Docker 🐳 - Containerized like fine wine in bottles
  • Redis πŸš€ - The speed-aging chamber
  • Prometheus & Grafana πŸ“Š - Monitoring your cellar temperature (and metrics)

πŸ“‹ Prerequisites

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

πŸš€ Quick Start

# First time? Let's set up your cellar
make setup

This installs dependencies, configures git hooks, and prepares your environment. Think of it as aerating your development setup. 🌬️

🎯 Running the Show

πŸ”₯ Fire Up the Infrastructure

make infra-up

Boots up PostgreSQL, Redis, Prometheus, and Grafana. Your digital wine cellar is now climate-controlled. 🌑️

β˜• Backend (Port 8080)

make backend-run

The API server starts serving at http://localhost:8080. Like a good bartender, it's always ready. 🍸

🌐 Web (Port 5173)

make web-dev

Your web interface pours in at http://localhost:5173. Hot reload included - no decanting required. πŸ”„

πŸ“± Mobile

make mobile-dev

Flutter hot reload fires up. Your pocket sommelier awakens. ✨

πŸ“š Storybook (Port 6006)

make web-storybook

Component library and design system at http://localhost:6006. Browse your UI collection like a wine catalog. 🍷

πŸ§ͺ Testing (Quality Control)

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 E2E

✨ Code Formatting (Presentation Matters)

make format

Because 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)

πŸ•°οΈ Database Migrations (Aging Process)

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

🐳 Docker (Bottling for Production)

# Build all images with docker bake
make docker-build

# Run E2E tests in pristine containers
make e2e

πŸ“Š Monitoring (Temperature Control)

Keep an eye on your cellar: πŸ‘€

πŸ—‚οΈ Cellar Layout

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

πŸš€ CI/CD Pipeline

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. πŸ†

πŸͺ Git Hooks (The Cellar Rules)

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) βœ…

πŸ“ Developer Notes

  • πŸ’¬ Use conventional commits: feat:, fix:, chore:
  • πŸ†˜ Run make help for all available commands
  • πŸ€– Dependencies auto-update via Renovate
  • πŸ“ˆ Check SonarCloud for code quality metrics

πŸ“œ License

Private vintage. Not for distribution. πŸ”’


Built with Spring Boot, React, and Flutter. Tested thoroughly. Served responsibly. 🍷✨

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •