Gabriel Radureau c41611281b 📝 docs: add comprehensive commit conventions with gitmoji reference
Added detailed commit conventions section including:
- Conventional Commit types (feat, fix, docs, style, refactor, perf, test, chore)
- Practical examples for each commit type
- Comprehensive gitmoji reference table with 16 common emojis
- Emoji codes, types, and descriptions for quick reference
- Benefits of using the convention

This provides a complete indexed reference so we won't need to check
gitmoji.dev repeatedly for common emojis.
2026-04-04 13:43:00 +02:00

DanceLessonsCoach

A Go project demonstrating idiomatic package structure, CLI implementation, and JSON API with Chi router.

Features

  • Greet function with default behavior
  • Command-line interface
  • JSON API with versioned endpoints
  • Chi router integration
  • Zerolog for high-performance logging
  • Viper for configuration management
  • Graceful shutdown with context
  • Unit tests
  • Go 1.26.1 compatible

Installation

# Clone the repository
git clone https://github.com/yourusername/DanceLessonsCoach.git
cd DanceLessonsCoach

# Build and run
go run ./cmd/greet

Optional Configuration

The project supports configuration via YAML file, environment variables, or defaults. Configuration priority: file > environment variables > defaults

Configuration File

By default, the application looks for config.yaml in the current working directory.

Create a config.yaml file:

server:
  host: "0.0.0.0"
  port: 8080
shutdown:
  timeout: 30s
logging:
  json: false  # Set to true for JSON format logging

Then start the server:

go run ./cmd/server

Custom Config File Path

To specify a custom config file path, use the DLC_CONFIG_FILE environment variable:

# Use a specific config file
export DLC_CONFIG_FILE="/path/to/your/config.yaml"
go run ./cmd/server

# Or in one command
DLC_CONFIG_FILE="/path/to/your/config.yaml" go run ./cmd/server

Environment Variables

You can also configure via environment variables with DLC_ prefix:

# Set configuration via environment variables
export DLC_SERVER_HOST="0.0.0.0"
export DLC_SERVER_PORT=8080
export DLC_SHUTDOWN_TIMEOUT=30s
export DLC_LOGGING_JSON=false  # Set to true for JSON format logging

# Start the server
go run ./cmd/server

Configuration Priority

  1. File-based configuration (highest priority)
  2. Environment variables (override defaults)
  3. Default values (lowest priority)

This means if you have both a config file and environment variables, the file takes precedence.

Usage

CLI

# Default greeting
go run ./cmd/greet
# Output: Hello world!

# Custom greeting
go run ./cmd/greet John
# Output: Hello John!

Web Server

Using the server control script (recommended):

# Start the server
./scripts/start-server.sh start

# Test API endpoints
./scripts/start-server.sh test

# Stop the server
./scripts/start-server.sh stop

Manual server management:

# Start the server
go run ./cmd/server

# Test API endpoints
curl http://localhost:8080/api/health
# Output: {"status":"healthy"}

curl http://localhost:8080/api/ready
# Output: {"ready":true}

curl http://localhost:8080/api/v1/greet
# Output: {"message":"Hello world!"}

curl http://localhost:8080/api/v1/greet/John
# Output: {"message":"Hello John!"}

Testing

# Run all tests
go test ./...

# Run specific package tests
go test ./pkg/greet/

Project Structure

DanceLessonsCoach/
├── cmd/
│   ├── greet/              # CLI entry point
│   │   └── main.go
│   └── server/             # Web server entry point
│       └── main.go
├── pkg/
│   ├── config/             # Configuration management
│   │   └── config.go
│   ├── greet/              # Core greet functionality
│   │   ├── api_v1.go       # API v1 handlers
│   │   ├── greet.go        # Core service
│   │   └── greet_test.go    # Unit tests
│   └── server/             # Server implementation
│       └── server.go
├── config.example.yaml     # Configuration template
├── go.mod                   # Go module definition
└── README.md                # Project documentation

License

MIT

Description
No description provided
Readme 57 MiB
Languages
Go 71.2%
Shell 21.7%
Gherkin 3.9%
TypeScript 1.4%
Vue 0.5%
Other 1.2%