Mirror of github.com/ewanc26/website
  • Svelte 45.7%
  • TypeScript 29.5%
  • CSS 24.4%
  • JavaScript 0.3%
Find a file
2026-07-17 12:16:28 +01:00
.vscode chore: add .vscode/extensions.json 2026-06-10 12:44:05 +01:00
src feat(support): add Zcash address 2026-07-17 12:16:28 +01:00
static feat(easter-eggs): weave in blog archive motifs 2026-07-16 16:41:18 +01:00
.env.example feat(projects): show pinned GitHub repositories 2026-07-16 16:01:43 +01:00
.gitignore chore: commit .gitignore 2026-06-06 16:56:00 +01:00
.impeccable.md docs: use British English spellings in .impeccable.md 2026-06-08 16:28:32 +01:00
.npmrc feat: initialize minimal sveltekit project 2026-05-30 21:10:49 +01:00
.pre-commit-config.yaml chore: fix pre-commit to use local prettier 2026-04-14 22:58:09 +01:00
.prettierignore build(tooling): fix Prettier pre-commit hook 2026-07-16 13:57:36 +01:00
AGENTS.md docs: correct agent guidance after source audit 2026-07-16 18:22:46 +01:00
DESIGN.md Refine editorial row details 2026-07-17 06:56:02 +01:00
package-lock.json feat: refactor dynamic theme logic and implement 2026 OpenGraph best practices 2026-06-06 15:04:51 +01:00
package.json Bump site version to 12.10.0 2026-07-17 07:52:34 +01:00
pnpm-lock.yaml build(tooling): fix Prettier pre-commit hook 2026-07-16 13:57:36 +01:00
pnpm-workspace.yaml chore: update packages 2026-06-02 14:28:01 +00:00
README.md feat(projects): show pinned GitHub repositories 2026-07-16 16:01:43 +01:00
svelte.config.js build(vercel): target Node.js 24 runtime 2026-07-16 13:51:55 +01:00
tsconfig.json feat: integrate recommendation service into subscriptions page 2026-06-01 00:37:52 +01:00
vercel.json chore: remove unmatched function pattern from vercel.json 2026-06-06 16:11:17 +01:00
vite.config.ts feat(og): migrate to satori + resvg 2026-06-06 20:42:56 +01:00

Website

A personal website and blog built with SvelteKit, featuring AT Protocol (Bluesky) integration, markdown-based blog posts, and dynamic content rendering.

Features

  • Blog System: Markdown-based blog posts with automatic date-based routing
  • AT Protocol Integration: Fetch and display Bluesky posts and profiles
  • Content Rendering: Custom Leaflet components for flexible content blocks (code, embeds, images, math)
  • Project Showcase: Display pinned repositories from a GitHub profile
  • Social Features: Comment sections, share buttons, and recommendation system
  • API Endpoints: REST API for blog posts, recommendations, and subscriptions
  • Webhooks: GitHub webhook support for CI/CD integration
  • Open Graph: Dynamic OG image generation for social media sharing
  • Responsive Design: Tailwind CSS for mobile-first styling

Tech Stack

  • Framework: SvelteKit
  • Language: TypeScript
  • Styling: Tailwind CSS
  • Package Manager: pnpm
  • Markdown: MDAST-based markdown processing
  • Social: AT Protocol SDK for Bluesky integration

Project Structure

src/
├── lib/
│   ├── components/          # Reusable Svelte components
│   │   ├── leaflet/        # Content block components
│   │   └── icons/          # SVG icon components
│   ├── providers/          # Data processing (facets, markdown, etc.)
│   ├── services/
│   │   └── atproto/        # Bluesky/AT Protocol API integration
│   ├── styles/             # Global CSS and design tokens
│   └── utils/              # Utility functions
└── routes/
    ├── blog/               # Blog listing and post pages
    ├── projects/           # Project showcase
    ├── api/                # API endpoints
    └── webhook/            # Webhook handlers

Getting Started

Prerequisites

  • Node.js (v18+)
  • pnpm

Installation

# Install dependencies
pnpm install

Development

# Start development server
pnpm run dev

# Open in browser
pnpm run dev -- --open

The site will be available at http://localhost:5173.

Building

# Create production build
pnpm run build

# Preview production build
pnpm run preview

Environment Variables

Create a .env.local file in the root directory:

# AT Protocol/Bluesky configuration (if applicable)
ATPROTO_USERNAME=your_username
ATPROTO_PASSWORD=your_password

# Other configuration
PUBLIC_SITE_URL=https://your-domain.com
GITHUB_USERNAME=your_github_username
# Optional; public profile parsing is used when this is unset
GITHUB_TOKEN=github_token_with_public_repository_read_access

Configuration

Deployment

This project is configured for deployment on Vercel (see vercel.json).

To deploy:

# Build for production
pnpm run build

# Deploy using Vercel CLI
vercel

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

See LICENSE file for details.