Files
elysiacv/README.md

87 lines
2.3 KiB
Markdown

# Modern SSR CV Website with ElysiaJS
A fast, server-side rendered (SSR) CV/Portfolio website built with [ElysiaJS](https://elysiajs.com/), SQLite, and TailwindCSS. Features a custom CMS with Keycloak authentication for managing multi-language content.
## Features
* **Fast SSR:** Built on the Bun runtime and ElysiaJS for high performance.
* **Multi-language Support:** Built-in i18n (English/German) with clean URL routing (`/en`, `/de`).
* **CMS Dashboard:** Admin panel to manage Profile, Experience, Education, and Skills without touching code.
* **Secure Auth:** OpenID Connect (OIDC) authentication via **Keycloak** (using Arctic).
* **Dark Mode:** Automatic and manual theme switching.
* **Portable DB:** SQLite database for easy deployment and zero setup.
* **Minimalist Design:** Clean UI with TailwindCSS and subtle animations.
## Prerequisites
* [Bun](https://bun.sh/) (Runtime)
* [Docker](https://www.docker.com/) (For Keycloak)
## Getting Started
### 1. Install Dependencies
```bash
bun install
```
### 2. Setup Database
Initialize and seed the SQLite database with default data:
```bash
bun run src/db/seed.ts
```
### 3. Setup Keycloak (Auth)
Start Keycloak and Postgres using Docker:
```bash
docker compose up -d
```
* **Admin Console:** `http://localhost:8080`
* **User:** `admin`
* **Password:** `admin`
**Configuration Steps:**
1. Log in to Keycloak.
2. Create a **Realm** (e.g., `myrealm`).
3. Create a **Client** (e.g., `cv-app`):
* **Client authentication:** On
* **Valid Redirect URIs:** `http://localhost:3000/admin/callback`
4. Copy the **Client Secret** from the *Credentials* tab.
5. Update your `.env` file:
```env
KEYCLOAK_REALM_URL="http://localhost:8080/realms/myrealm"
KEYCLOAK_CLIENT_ID="cv-app"
KEYCLOAK_CLIENT_SECRET="your-secret-here"
KEYCLOAK_REDIRECT_URI="http://localhost:3000/admin/callback"
```
### 4. Run the Server
```bash
bun run src/index.tsx
```
* **Public Site:** `http://localhost:3000`
* **Admin Dashboard:** `http://localhost:3000/admin/login`
## Testing
Run the unit tests for the database layer:
```bash
bun test
```
## Project Structure
* `src/components`: Reusable UI components (Layout, Sections).
* `src/db`: Database schema, seed script, and query/mutation logic.
* `src/routes`: Route handlers (`admin.tsx`, `public.tsx`).
* `src/index.tsx`: Application entry point.