Tuan-Dat Tran 8deb3dcd9f
Some checks are pending
Stale Issues / stale (push) Successful in 1m10s
Release / Release (push) Successful in 3m32s
Release / Build & Push Docker Image (push) Has been skipped
Nightly Build / Build Nightly Image (push) Has started running
feat: Add Helm chart for Kubernetes deployment (#1)
## Description

Add complete Helm chart for deploying the CV application to Kubernetes. The chart includes all necessary resources for a production-ready deployment with persistent storage and configurable authentication modes.

## Type of Change

- [x] `feat` - New feature (minor version bump)

## Breaking Changes

- [ ] This is a breaking change (major version bump)

**If breaking, describe the migration path:**

## Checklist

- [x] Commit messages follow [Conventional Commits](CONTRIBUTING.md#commit-guidelines)
- [x] Lint passes (`npm run lint`) - N/A for Helm charts
- [x] Build succeeds (`npm run build`) - N/A for Helm charts
- [x] Tests pass (`npm run test:run`) - N/A for Helm charts
- [ ] API documentation updated (if applicable)

## Testing

- `helm lint` passes on the chart
- `helm template test-release helm/cv-app/` renders 214 lines of valid Kubernetes manifests
- Verified all template helpers function correctly
- Tested conditional rendering (persistence enabled/disabled, simple/keycloak auth modes)

## Screenshots (if applicable)

N/A

## Related Issues

Implements the Helm chart design from `docs/plans/2026-02-23-helm-chart-design.md`

Co-authored-by: Tuan-Dat Tran <tuan-dat.tran@tudattr.dev>
Reviewed-on: #1
2026-02-24 22:27:45 +01:00
2026-02-23 22:04:22 +00:00
2026-02-23 22:04:22 +00:00

CV - Tuan-Dat Tran

License React Tailwind CSS Vite

A modern, minimalist CV/Resume single-page application with admin panel and persistent storage.

Architecture

┌─────────────────────────────────────────────────────┐
│                 Docker Compose                       │
│  ┌──────────────┐    ┌──────────────────────────┐   │
│  │   Frontend   │    │      Backend API         │   │
│  │   (React)    │───▶│   (Express.js)           │   │
│  │   Port 5173  │    │   Port 3001              │   │
│  └──────────────┘    └───────────┬──────────────┘   │
│                                  │                   │
│                      ┌───────────▼──────────────┐   │
│                      │      SQLite DB           │   │
│                      │   (Volume: ./data)       │   │
│                      └──────────────────────────┘   │
└─────────────────────────────────────────────────────┘

Features

  • Modern, responsive design
  • Smooth scroll animations with Framer Motion
  • Admin panel for CV editing (password protected)
  • Persistent storage with SQLite
  • Docker Compose deployment
  • RESTful API with OpenAPI documentation
  • Optional Keycloak integration for SSO
  • Automated releases with semantic-release

Tech Stack

Frontend

  • React 19 - UI Library
  • Vite 7 - Build Tool
  • Tailwind CSS 4 - Styling
  • Framer Motion 12 - Animations
  • Lucide React - Icons

Backend

  • Express.js 4 - API Server
  • Knex.js - SQL Query Builder
  • SQLite with better-sqlite3 - Database

Getting Started

Prerequisites

  • Node.js 20+
  • npm 10+
  • Docker & Docker Compose (optional)
# Start all services
docker-compose up -d

# Frontend: http://localhost:5173
# Backend API: http://localhost:3001
# Admin Panel: http://localhost:5173/admin
# API Docs: http://localhost:3001/api/docs

Option 2: Local Development

# Install frontend dependencies
npm install

# Install backend dependencies
cd backend && npm install && cd ..

# Start backend (terminal 1)
cd backend && npm run dev

# Start frontend (terminal 2)
npm run dev

Environment Variables

Backend (backend/.env):

PORT=3001
DB_PATH=./data/cv.db
AUTH_MODE=simple
# Keycloak settings (required if AUTH_MODE=keycloak)
KEYCLOAK_URL=https://keycloak.example.com
KEYCLOAK_REALM=your-realm
KEYCLOAK_CLIENT_ID=cv-app

Development Setup

Pre-commit Setup

This project uses:

  • ESLint for code linting
  • commitlint for commit message validation
  • Husky for git hooks
  • Gitleaks for secret scanning

Install Gitleaks before committing:

# macOS
brew install gitleaks

# Linux
curl -sSfL https://github.com/gitleaks/gitleaks/releases/latest/download/gitleaks_linux_x64.tar.gz | tar -xz
sudo mv gitleaks /usr/local/bin/

# Windows
scoop install gitleaks

Commit Guidelines

This project uses Conventional Commits:

<type>(<scope>): <description>

# Examples:
feat(ui): add export button
fix(api): resolve authentication issue
docs(readme): update installation steps

API Documentation

Interactive Swagger UI available at: http://localhost:3001/api/docs

Admin Authentication

Simple Mode (Default)

  • Random password generated on server startup
  • Password displayed in console logs
  • JWT token-based authentication

Keycloak Mode

  • SSO integration via Keycloak
  • Configure via AUTH_MODE=keycloak and related environment variables

Documentation

Document Description
Architecture System architecture and design patterns
Release Engineering Release and deployment documentation

License

MIT License - see LICENSE for details.

Description
No description provided
Readme MIT 448 KiB
v1.1.0 Latest
2026-02-25 06:04:33 +01:00
Languages
JavaScript 96.9%
Smarty 1.1%
HCL 0.5%
Dockerfile 0.5%
CSS 0.5%
Other 0.5%