chore(master): release 1.0.2
LK API Template
A modern, production-ready API template built with Go and Nuxt 3, featuring comprehensive authentication, mailing capabilities, and automatic API documentation.
🚀 Features
-
Backend (Go)
- Chi router for efficient HTTP routing
- Swagger/OpenAPI documentation
- SendGrid integration for email notifications
- Rate limiting support
- Redis caching
- PostgreSQL database integration
- JWT-based authentication
- Environment-based configuration
- Structured logging with Zap
- Hot reload support with Air
-
Frontend (Nuxt 3 + TypeScript)
- Vue 3 with Composition API
- TypeScript support
- Nuxt modules ecosystem
- Hot Module Replacement (HMR)
- Auto-imports for components and composables
- Server-side rendering capabilities
- File-based routing
📋 Prerequisites
- Go 1.23.4 or higher
- Bun 1.0 or higher (for frontend development)
- Docker and Docker Compose
- SendGrid API key (for email functionality)
- Platform-specific requirements:
- Mac/Linux:
- direnv (for environment management)
- make
- Windows:
- Git Bash, WSL2, or PowerShell
- make (optional, commands can be run manually)
- Mac/Linux:
🛠️ Installation
- Clone the repository:
git clone https://github.com/FernandoJVideira/LK_API_Temp.git
cd LK_API_Temp
- Install Bun (if not already installed):
Mac/Linux:
curl -fsSL https://bun.sh/install | bash
Windows:
# Install WSL2 first if not already installed
# Then run the same command as Mac/Linux inside WSL2
- Set up environment variables:
Mac/Linux with direnv:
cp .envrc.example .envrc
# Edit .envrc with your configuration
direnv allow
Windows or alternative setup:
cp .env.example .env
# Edit .env with your configuration
- Install backend dependencies:
go mod download
- Install frontend dependencies:
cd web
bun install
🚀 Development
Infrastructure
Mac/Linux:
# Start services
make start
# Stop services
make stop
Windows (without make):
# Start services
docker-compose up -d
# Stop services
docker-compose down
Database Management
Mac/Linux:
# Create new migration
make migration name=your_migration_name
# Run migrations
make migrate-up
# Rollback migrations
make migrate-down
# Seed database
make seed
Windows (without make):
# Create new migration
go run ./cmd/migrate create your_migration_name
# Run migrations
go run ./cmd/migrate up
# Rollback migrations
go run ./cmd/migrate down
# Seed database
go run ./cmd/migrate seed
Backend
Mac/Linux:
# Install Air (if not already installed)
go install github.com/cosmtrek/air@latest
# Run with hot reload
air
Windows:
# Install Air (if not already installed)
go install github.com/cosmtrek/air@latest
# Run with hot reload (Git Bash or WSL)
air
# Alternative without Air
go run ./cmd/api
The API will be available at http://localhost:8080 with the base path /v1.
Frontend
All platforms:
cd web
bun run dev
The frontend will be available at http://localhost:3000.
For other frontend commands:
# Build for production
bun run build
# Preview production build
bun run preview
# Lint
bun run lint
# Type check
bun run typecheck
Note: Bun provides significantly faster installation and execution times compared to npm or yarn. It also includes built-in TypeScript support and other optimizations for modern web development.
🔧 Environment Configuration
Using direnv (Mac/Linux recommended)
The .envrc file is used with direnv to automatically load environment variables when entering the project directory. Example configuration:
# Server
export ADDR=:8080
export EXTERNAL_URL=localhost:8080
export FRONTEND_URL=http://localhost:3000
export ENV=development
# Database
export DB_ADDR=postgres://postgres:postgres@localhost:5432/lk_tmpl?sslmode=disable
export DB_MAX_OPEN_CONNS=30
export DB_MAX_IDLE_CONNS=30
export DB_MAX_IDLE_TIME=15m
# Additional variables...
Using .env file (Windows or alternative)
The same variables should be set in your .env file without the export keyword:
ADDR=:8080
EXTERNAL_URL=localhost:8080
FRONTEND_URL=http://localhost:3000
ENV=development
# Additional variables...
🔍 Monitoring
- Redis Commander UI:
http://localhost:8081- Mac/Linux: Access directly
- Windows: If using WSL2, use the WSL2 IP address instead of localhost
- Metrics and debugging endpoints available through expvar
📚 API Documentation
The API documentation is automatically generated using Swagger. Once the server is running, you can access the Swagger UI at: http://localhost:8080/v1/swagger/index.html#/