No description
- Astro 51.6%
- SCSS 25.3%
- Svelte 16.7%
- TypeScript 6.2%
- JavaScript 0.2%
|
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 8m8s
|
||
|---|---|---|
| .forgejo/workflows | ||
| .vscode | ||
| project-images | ||
| public | ||
| src | ||
| .gitignore | ||
| astro.config.mjs | ||
| ATTRIBUTIONS.md | ||
| CLAUDE.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| svelte.config.js | ||
| tsconfig.json | ||
Austin Hagel's Personal Website - 2026
About
This is the frontend for my personal site. It will also be used as a template for other sites I plan on making, too.
Content is stored within this repo as markdown files in src/content/, validated with Zod schemas. Three content collections exist — blog, guides, and frontend projects — each with co-located cover images. Navigation links are driven by JSON configs (internalLinks.json, externalLinks.json). I plan to keep content separate in the future, likely with a CMS such as Payload.
Technology
| Tool | Version | Role |
|---|---|---|
| Astro | 6 | Static site generation, file-based routing, content collections |
| Svelte | 5 | Interactive components using runes ($state, $props) |
| Sass | — | Custom SCSS theming with CSS custom properties |
| Fuse.js | 7 | Client-side fuzzy search across content collections |
Notable design choices:
- OKLCH color space for theme variables with dark/light mode support
- View Transitions API for page and theme-toggle animations (circular reveal from button origin)
- No CSS framework — fully custom styles
- Dark/light favicons that update dynamically with the color scheme
- Code blocks with a custom Shiki theme, per-line copy on click, and a language badge with full-block copy
Prerequisites
- Node.js >=22.12.0
- npm
Project Structure
src/
├── components/
│ ├── cards/ # BlogCard, FrontendProjectCard and their content sub-components
│ ├── drawer-mobile-nav/ # Mobile drawer navigation (DrawerMobileMenu, DrawerMobileNav, DrawerMobileNavLink)
│ ├── home-sections/ # Home page sections (Hero, About, Blog, Projects, Links)
│ ├── state/ # Shared Svelte state modules (appBarState, mobileMenuState)
│ └── ... # AppBar, Navigation, Paginator, Tabs, DirectoryHero, SearchBar,
│ # BreadCrumb, ContactForm, ContactButton, Badge, etc.
├── content/
│ ├── blog/ # Blog posts (Markdown with co-located cover images)
│ ├── guides/ # Guides & tutorials
│ └── projects/
│ └── frontend/ # Frontend project write-ups
├── layouts/
│ ├── Base.astro # Base layout (AppBar, Drawer, Footer, scroll restoration, meta)
│ ├── CommonHead.astro # <head> fragment (meta, favicons, ClientRouter, theme init script)
│ ├── Directory.astro # Reusable paginated listing with sidebar fields
│ └── Taxonomy.astro # Listing for taxonomy terms (categories, tags)
├── pages/ # File-based routes (see Routing below)
├── scripts/
│ ├── search/ # Fuse.js search logic (fuseOptions, search, resultTemplate)
│ ├── customTransitions.ts
│ ├── initCodeCopy.ts # Per-line and full-block clipboard copy for code blocks
│ ├── initScrollAnimations.ts
│ └── ... # drawerUtils, fieldDataUtils, slugify, types
└── styles/
├── code.scss # Code block styles (Shiki output, badges, copy interactions)
├── shiki-theme.json # Custom Shiki syntax-highlight theme
├── theme.scss # OKLCH color tokens, dark/light modes
├── transitions.scss # View transition animations
└── ... # index, reset, variables, fonts, search
public/
└── fonts/
├── plus-jakarta-sans/ # Self-hosted Plus Jakarta Sans (body text)
└── jetbrains-mono/ # Self-hosted JetBrains Mono (code blocks)
Routing
/ Home
/about About page
/blog/ Blog directory (paginated)
/blog/[id] Individual blog post
/blog/categories/ All blog categories
/blog/categories/[category] Posts filtered by category (paginated)
/blog/tags/ All blog tags
/blog/tags/[tag] Posts filtered by tag (paginated)
/projects/ Projects index
/projects/frontend/ Frontend projects directory (paginated)
/projects/frontend/[id] Individual frontend project
/projects/frontend/categories/ All frontend project categories
/projects/frontend/categories/[category] Projects filtered by category (paginated)
/projects/frontend/tags/ All frontend project tags
/projects/frontend/tags/[tag] Projects filtered by tag (paginated)
/search Search page (fuzzy search via Fuse.js, paginated results)
Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
|---|---|
npm install |
Installs dependencies |
npm run dev |
Starts local dev server at localhost:4321 |
npm run build |
Build your production site to ./dist/ |
npm run preview |
Preview your build locally, before deploying |
npm run astro ... |
Run CLI commands like astro add, astro check |
npm run astro -- --help |
Get help using the Astro CLI |
Roadmap
Core
- AppBar with floating style and auto-hiding
- Dark/Light Mode & Toggle
- View Transitions
- Light Mode Toggle transition
- Page transitions
- Scroll-triggered reveal animations
- Mobile Drawer (navigation, light toggle, featured links, contact button)
- Responsive Layout
- Navigation progress bar
- Breadcrumb navigation
- Search
- Search bar UI
- Functional search (Fuse.js, client-side)
- Search results page (paginated)
- Contact
- Contact form UI (modal dialog with honeypot)
- Functional contact form (submission handling)
Pages
- Complete 'Home' page
- Hero section
- Video Background
- Floating Particles Effect Background
- Social Links
- About section
- Featured Posts section
- Featured Projects section
- External Links section
- Hero section
- Complete 'About' page
- Intro section
- Story section
- Expertise section
- Philosophy section
- Connect section
- Routes for collections
- Pagination
- Categories view (directory + filtered listing)
- Tags view (directory + filtered listing)
- Featured items on first page
- Sorting & filtering
- Complete 'Blog' page
- Complete 'Projects' page
- Projects index (list of project collections)
- Frontend projects (personal + Frontend Mentor)
- Graphic Design projects
- Backend projects
- 3D Modeling/Animation projects
- Archive pages
- Blog archive
- Projects archive
Future
- Implement a CMS (Looking at Payload)
- Guides collection pages
- Share button/link for posts
License
MIT — free to use, modify, and distribute, including commercially.
Attributions
Please check the Attributions Document to view the resources used to make this project possible.