87 lines
2.3 KiB
Markdown
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.
|