π Live Site: alexsantos.dev
A modern, full-stack personal portfolio and blog built with SvelteKit. This project showcases my web development skills and serves as a platform for sharing insights and experiences in software development.
- Modern SvelteKit Frontend - Fast, reactive UI with server-side rendering
- Dynamic Configuration - Centralized site settings managed through CMS
- Content Management - Blog posts with markdown support and frontmatter
- Dark/Light Theme - Automatic system preference detection with manual toggle
- Admin Interface - Sveltia CMS integration for content and settings management
- OAuth Authentication - GitHub OAuth for secure admin access
- Social Media Integration - Dynamic social links with brand icons
- Image Processing - Dynamic image optimization with Sharp
- Responsive Design - Mobile-first approach with Tailwind CSS
- Type Safety - Full TypeScript implementation
- Testing Suite - Unit and E2E testing with Vitest and Playwright
- CI/CD Pipeline - Automated deployment with GitHub Actions
- SvelteKit - Meta-framework for building web applications
- Svelte 5 - Component-based UI framework
- TypeScript - Type-safe JavaScript
- Tailwind CSS - Utility-first CSS framework
- Lucide Svelte - Beautiful SVG icons
- @icons-pack/svelte-simple-icons - Brand icons for social media
- Node.js - Server runtime
- Sveltia CMS - Git-based headless CMS
- Gray Matter - Frontmatter parser
- Marked - Markdown parser and compiler
- Sharp - High-performance image processing
- Simple OAuth2 - OAuth 2.0 client
- GitHub OAuth - Secure authentication for admin access
- Vite - Build tool and dev server
- Vitest - Unit testing framework
- Playwright - End-to-end testing
- ESLint - JavaScript/TypeScript linting
- Prettier - Code formatting
- GitHub Actions - CI/CD pipeline
- Coolify - Self-hosted deployment platform
- Docker - Containerization
- Node.js 18.18.0 or higher
- npm or your preferred package manager
-
Clone the repository:
git clone https://github.com/asantoss/web-dev-portfolio.git cd web-dev-portfolio
-
Install dependencies:
npm install
-
Set up environment variables:
cp .env.example .env
Configure the following variables:
GITHUB_CLIENT_ID=your_github_oauth_client_id GITHUB_CLIENT_SECRET=your_github_oauth_client_secret
-
Configure your site settings:
The site configuration is stored in
src/config/site.json
. You can either:- Edit this file directly with your personal information
- Use the admin interface at
/admin
after setting up OAuth
-
Run the development server:
npm run dev
-
Open http://localhost:5173 in your browser.
All personal information, social links, skills, and site metadata are managed through a centralized configuration system:
- Personal Information: Name, title, email, profile image
- Bio Content: Rich markdown content with automatic rendering
- Social Links: GitHub, LinkedIn, Twitter/X, Bluesky, website, email
- Skills & Technologies: Dynamic skill showcase with custom icons
- Site Metadata: SEO-friendly titles, descriptions, and copyright info
Configuration is stored in src/config/site.json
and can be edited through the Sveltia CMS admin interface.
Posts are stored as Markdown files in src/posts/
with frontmatter:
---
title: Your Post Title
description: A brief description
image: /images/your-image.png
draft: false
tags: ["web-development", "svelte"]
date: 2025-05-28T09:21:00
---
Your markdown content here...
Access the admin panel at /admin
to manage content and site settings through the Sveltia CMS interface. Authentication is handled via GitHub OAuth.
Available Admin Sections:
- Posts: Create, edit, and manage blog posts
- Site Settings: Update personal information, bio, social links, skills, and metadata
# Development
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
# Code Quality
npm run lint # Run ESLint
npm run format # Format code with Prettier
npm run check # Type checking with svelte-check
# Testing
npm run test # Run all tests
npm run test:unit # Run unit tests
npm run test:e2e # Run end-to-end tests
src/
βββ app.html # HTML template
βββ app.css # Global styles
βββ components/ # Reusable components
βββ config/ # Site configuration
β βββ site.json # Centralized site settings
βββ lib/
β βββ icons/ # SVG icon components
β βββ server/ # Server-side utilities
β β βββ config.ts # Configuration loader
β β βββ queries.ts # Data fetching utilities
β βββ stores/ # Svelte stores
βββ posts/ # Markdown blog posts
βββ routes/ # SvelteKit routes
βββ types/ # TypeScript type definitions
βββ config.d.ts # Configuration type definitions
- Update Site Configuration: Edit
src/config/site.json
or use the admin interface at/admin
- Add Your Profile Image: Place your profile image in the
static/
directory - Configure Social Links: Add your social media profiles in the site settings
- Customize Skills: Update the skills section with your technologies and tools
- Write Your Bio: Craft your personal bio using Markdown for rich formatting
Skills are dynamically rendered based on your configuration. To add a new skill:
- Add the skill to your
site.json
configuration - Create an icon component in
src/lib/icons/
if needed - Update the icon mapping in the Skills component
The site supports both light and dark themes with automatic system preference detection. Customize colors in src/app.css
using Tailwind's theme configuration.
The project is configured for deployment with:
- GitHub Actions - Automated CI/CD pipeline
- Coolify - Self-hosted deployment platform
- Docker - Containerized deployment
The deployment process:
- Push to main branch triggers GitHub Action
- Action builds and pushes Docker image
- Coolify deploys the updated container
Site configuration changes made through the CMS are automatically committed to your repository, triggering a new deployment. This ensures your changes are version-controlled and deployed consistently.
This is a personal portfolio project, but I welcome suggestions and feedback! Feel free to:
- Open an issue for bug reports or feature requests
- Submit a pull request for improvements
- Share feedback on the live site
This project is open source and available under the MIT License.
Built with β€οΈ by Alexander Santos - a passionate software consultant specializing in modern web development, Salesforce solutions, and creative problem-solving.
Connect with me:
- π alexsantos.dev
- π§ [email protected]
- πΌ LinkedIn
- π GitHub