Tuan-Dat Tran 3de8f6a971 feat(db): Implement schema migrations and add Projects section
Introduces a custom migration system for SQLite, allowing incremental and safe schema evolution.
Adds a new 'Projects' section to the CV, including database tables, public UI, and full management
in the admin dashboard with live editing, drag-and-drop reordering, and collapsible forms.

Updates:
-  and  for schema management.
-  with  script.
-  to use migrations.
-  to rely on migrations.
-  and  for new project data operations.
-  and  for Projects UI.
-  and  to integrate the Projects section.

Also updates:
-  to automatically import Keycloak realm on startup.
-  for the Elysia app build.
-  with refined print styles (omitting socials and about).
2025-11-22 11:20:03 +01:00

Modern SSR CV Website with ElysiaJS

A fast, server-side rendered (SSR) CV/Portfolio website built with ElysiaJS, 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

Getting Started

1. Install Dependencies

bun install

2. Setup Database

Initialize and seed the SQLite database with default data:

bun run src/db/seed.ts

3. Setup Keycloak (Auth)

Start Keycloak and Postgres using Docker:

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:
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

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:

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.
Description
No description provided
Readme 147 KiB
Languages
TypeScript 97.6%
Dockerfile 1.7%
JavaScript 0.7%