Introduces a new /pdf route to handle PDF generation. Updates src/index.tsx to integrate the new PDF route. Bumps puppeteer, tailwindcss, elysia, typed-html, and sortablejs dependencies in package.json and bun.lock. These updates support the new PDF generation functionality.
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:
- Log in to Keycloak.
- Create a Realm (e.g.,
myrealm). - Create a Client (e.g.,
cv-app):- Client authentication: On
- Valid Redirect URIs:
http://localhost:3000/admin/callback
- Copy the Client Secret from the Credentials tab.
- Update your
.envfile:
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
Languages
TypeScript
97.6%
Dockerfile
1.7%
JavaScript
0.7%