Portfolio — sacharya.dev
Personal portfolio built with Astro 5 using the Spectre theme. Refer to the Getting Started post in the repo for theme configuration details.
pnpm install
pnpm dev # Dev server at localhost:4321
pnpm build # Production build (includes Pagefind search indexing)
pnpm preview # Preview production buildThis is where most day-to-day changes happen:
| File / Folder | What it controls |
|---|---|
posts/*.mdx |
Blog posts (frontmatter: title, description, image, createdAt, tags, draft) |
projects/*.mdx |
Project showcases (frontmatter: title, date, description, image, info[]) |
other/about.mdx |
About section on the homepage |
info.json |
Quick facts displayed on homepage sidebar (name, email, location) |
socials.json |
Social links shown on homepage sidebar |
work.json |
Work experience entries |
tags.json |
Valid tag IDs that blog posts can reference |
assets/ |
Images used by posts and projects (referenced via relative paths in frontmatter) |
Dates in frontmatter use MM-DD-YYYY format.
Controls site name, OpenGraph metadata, and Giscus comments (currently disabled). These are passed to the custom Spectre integration and available globally via import { ... } from 'spectre:globals'.
Astro file-based routing. Edit these to change page structure/layout:
index.astro— Homepageblog.astro/blog/[post].astro— Blog listing and individual postsprojects.astro/projects/[project].astro— Projects listing and individual projects404.astro— Not found page
Vanilla CSS with CSS custom properties. Key files:
globals.css— Theme variables (colors, fonts)article.css— Blog post stylingindex.css— Homepage styling
Reusable Astro components — Layout.astro (page wrapper with SEO), Navbar.astro (navigation + search), Card.astro, Icon.astro, ImageGlow.astro, LayoutGrid.astro.
Files served as-is: favicons, OG images, etc.
The deployment workflow lives at .github/workflows/deploy.yml. It triggers on pushes to master and deploys the static build to GitHub Pages via actions/deploy-pages.
Uses Biome — config in biome.jsonc.
pnpm lint # Check
pnpm lint:fix # Auto-fix