Skip to content

Latest commit

 

History

699 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ramin Rezaei Personal Website

This repository holds the source code for raminrezaei.se

My personal portfolio and blog. It first went live on 11 June (my birthday).

I build and maintain it on my own as a place to publish writing, share projects, and keep learning in public.

Status

Build Tests ESLint TypeScript

Stack

  • Framework: Next.js 16 (App Router, Turbopack for dev, React Compiler enabled)
  • UI: React 19, Tailwind CSS 4, SCSS modules
  • Language: TypeScript 6 (strict)
  • Animation: motion, gsap, animate.css
  • Content: Markdown posts in /posts parsed with gray-matter + markdown-to-jsx
  • Testing: Jest 30, @testing-library/react, Playwright
  • Monitoring: Sentry, Vercel Speed Insights
  • Package manager: pnpm

Quick start

pnpm install
pnpm dev               # http://localhost:3000
pnpm test              # 219 unit tests
pnpm check-all         # format + lint + types
pnpm build             # production build
pnpm test:e2e          # Playwright (run `pnpm test:e2e:install` first)

SEO and content

  • Sitemap: generated dynamically at /sitemap.xml from getPosts().
  • RSS: subscribe at /feed.xml.
  • robots.txt: dynamic, preview deployments return Disallow: / so they don't get indexed.
  • JSON-LD: every blog post exposes BlogPosting structured data.
  • Open Graph images: every post gets a dynamically generated 1200×630 preview at /posts/<id>/opengraph-image.

Project layout

src/
├── app/          Next.js App Router (server-first)
├── domains/      Feature verticals (posts, journey, lens, projects, ...)
├── layout/       Cross-page layout pieces (header, cookies modal, progress bar)
├── shared/       Cross-feature utilities (components, hooks, helpers, services)
└── data/         Static content (about-me, projects, recommendations)

Detailed conventions and Claude Code workspace setup live in CLAUDE.md and .claude/README.md.

CI

Workflow Triggers Purpose
build push + PR Format check, production build, Next.js cache restore
tests push + PR Jest unit (+ coverage) + Playwright E2E
eslint push ESLint with SARIF upload
tsc push tsc --noEmit
dependencies dep-related PRs actions/dependency-review-action
lighthouse PR Lighthouse CI against the built site
bundle-size PR Build with @next/bundle-analyzer and upload the report as an artifact

Dependabot watches npm (weekly, grouped) and github-actions (monthly), targeting the dev branch.

Security

Security policy lives in SECURITY.md. Report vulnerabilities privately at info@raminrezaei.se.

License

MIT for the source code. Written content (blog posts, CV, recommendations, photography) is © Ramin Rezaei, all rights reserved.

Links

Preview

Releases

Used by

Contributors

Languages