2025-03-31 18:05:01 +00:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 18:05:01 +00:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 19:02:29 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00
2025-03-31 16:17:35 +01:00

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)

🛠️ Installation

  1. Clone the repository:
git clone https://github.com/FernandoJVideira/LK_API_Temp.git
cd LK_API_Temp
  1. 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
  1. 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
  1. Install backend dependencies:
go mod download
  1. 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

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#/

S
Description
No description provided
Readme
29 MiB
Languages
Go 98.5%
Makefile 0.8%
TypeScript 0.4%
JavaScript 0.2%
Vue 0.1%