Personal portfolio - lukejameson.co.uk (migrated from GitHub lukejameson/portfolio)
  • Svelte 56%
  • TypeScript 38.2%
  • JavaScript 2.3%
  • CSS 2%
  • HTML 0.9%
  • Other 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-01-13 15:18:38 +00:00
drizzle Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
src Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
static Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
workflows Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
.dockerignore Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
.env.example Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
.gitignore Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
.npmrc Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
build_spec.md Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
CLAUDE.md Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
docker-compose-example.md Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
docker-compose.yml docker fix 2026-01-13 15:18:38 +00:00
docker-example.md Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
Dockerfile Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
drizzle.config.ts Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
package.json Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
package.json.new Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
package.json.tmp Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
pnpm-lock.yaml Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
postcss.config.js Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
README.md Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
reset-password.ts Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
svelte.config.js Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
tailwind.config.js Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
tsconfig.json Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00
vite.config.ts Initial commit: SvelteKit portfolio with admin panel 2026-01-13 15:11:44 +00:00

Luke Jameson Portfolio

A modern developer portfolio built with SvelteKit 5, featuring project showcases, a hidden admin panel, and dual theme support.

Features

  • Public Portfolio: Hero section, about, skills showcase, project grid, contact & hire forms
  • Project Pages: Full case studies with image galleries
  • Admin Panel: Hidden admin interface for content management
  • Theme Toggle: Dark/light mode with smooth transitions
  • Image Optimization: Automatic WebP conversion and resizing with Sharp
  • Email Notifications: Form submissions via Resend

Tech Stack

  • Frontend: SvelteKit 5, TypeScript, Tailwind CSS
  • Database: PostgreSQL with Drizzle ORM
  • Authentication: Lucia (session-based)
  • UI: Custom shadcn-style components
  • Rich Text: TipTap WYSIWYG editor
  • Email: Resend
  • Deployment: Docker with Node adapter

Quick Start

Prerequisites

  • Node.js 20+
  • pnpm
  • PostgreSQL (or Docker)

Development Setup

  1. Clone the repository and install dependencies:
pnpm install
  1. Create a .env file from the example:
cp .env.example .env
  1. Update the .env file with your settings:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/lukejameson
SESSION_SECRET=your-secret-at-least-32-characters
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=your-secure-password
  1. Start the database (if using Docker):
docker-compose up -d postgres
  1. Push the database schema:
pnpm db:push
  1. Seed the database with sample data:
pnpm db:seed
  1. Start the development server:
pnpm dev

Visit http://localhost:5173 to see the site.

Admin Access

Navigate to /admin/login and sign in with the credentials set in your .env file.

Docker Deployment

  1. Create a .env file with production settings:
SESSION_SECRET=your-production-secret-32-chars
ADMIN_EMAIL=admin@yourdomain.com
ADMIN_PASSWORD=secure-password
POSTGRES_PASSWORD=strong-db-password
RESEND_API_KEY=re_xxxxx
EMAIL_FROM=noreply@yourdomain.com
PUBLIC_SITE_URL=https://yourdomain.com
  1. Build and start the containers:
docker-compose up -d --build

The site will be available on port 3000.

Available Scripts

Command Description
pnpm dev Start development server
pnpm build Build for production
pnpm preview Preview production build
pnpm check Run type checking
pnpm db:push Push schema to database
pnpm db:generate Generate migrations
pnpm db:seed Seed database with sample data
pnpm db:studio Open Drizzle Studio

Project Structure

src/
├── lib/
│   ├── components/     # UI components
│   │   └── ui/        # Base shadcn-style components
│   ├── server/
│   │   ├── db/        # Database schema and client
│   │   ├── auth.ts    # Lucia authentication
│   │   ├── email.ts   # Resend integration
│   │   └── uploads.ts # Image processing
│   ├── stores/        # Svelte stores
│   └── utils/         # Utilities and validation schemas
├── routes/
│   ├── admin/         # Admin panel routes
│   ├── api/           # API endpoints
│   └── projects/      # Project detail pages
└── app.css            # Global styles and theme

Environment Variables

Variable Required Description
DATABASE_URL Yes PostgreSQL connection string
SESSION_SECRET Yes Session encryption key (32+ chars)
ADMIN_EMAIL Yes Admin user email
ADMIN_PASSWORD Yes Admin user password (for seeding)
RESEND_API_KEY No Resend API key for emails
EMAIL_FROM No Sender email address
PUBLIC_SITE_URL No Site URL for meta tags
PHOTO_STORAGE_PATH No Image upload directory

License

MIT