Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

581 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Typing SVG

CI Coverage Quality Gate Reviewed by CodeRabbit Storybook

Welcome to my digital home. πŸ‘‹

This is where I share what I've learned, showcase what I've built, give back to the open-source community with tools worth using, and write about performance, design systems, and the craft of engineering β€” everything worth sharing as I grow and learn.

Not a static rΓ©sumΓ© β€” a living one. Every commit is CI-gated, every touched file hits 100% coverage, and the whole thing ships to production on green. What you see is how I work.

It is organized as a pnpm workspace monorepo: the website is one app among its own shared tooling packages and backend workers.

https://soroush.tech


Lighthouse Performance Lighthouse Accessibility Lighthouse Best Practices Lighthouse SEO

SEO is handled in-house:

  • @soroush.tech/vite-plugin-sitemap emits sitemap.xml from the prerendered HTML (skipping noindex pages).
  • a static robots.txt ships from apps/web/public/ at build time.
  • meta-tags are injected for each page.

πŸš€ Getting started

Prerequisites

  • Node 25 β€” pinned in .nvmrc (nvm use).
  • pnpm 10.13.1 β€” pinned via the packageManager field.

Install & run

pnpm install   # installs every workspace (also runs the setup below)
pnpm prepare   # set up all you need β€” git hooks + per-workspace local env
pnpm dev       # starts the web app dev server

pnpm prepare runs husky and then each workspace's setup (pnpm -r run setup): it bootstraps .env.local from their default.env It runs automatically on pnpm install; re-run it any time with pnpm prepare (or pnpm run setup).


πŸ“š Documentation


🚦 Status

Area Coverage NPM Downloads Unpacked size
web web β€” β€” β€”
web:unit unit β€” β€” β€”
web:unit:browser browser β€” β€” β€”
web:storybook storybook β€” β€” β€”
web:e2e e2e β€” β€” β€”
worker:api api β€” β€” β€”
package:bench bench npm downloads unpacked size
package:vite-plugin-msw-server vite-plugin-msw-server npm downloads unpacked size
package:vite-plugin-sitemap vite-plugin-sitemap β€” β€” β€”
package:vite-plugin-watch vite-plugin-watch β€” β€” β€”
package:wrangler-tools wrangler-tools β€” β€” β€”
package:styled-system styled-system npm downloads unpacked size
package:playwright-coverage playwright-coverage npm downloads unpacked size
package:design-system design-system npm downloads unpacked size
package:markdown markdown npm downloads unpacked size

βœ… Quality & CI/CD

  • Pre-commit β€” a husky hook runs lint, format, and tests before each commit.
  • Lint β€” pnpm lint uses --max-warnings 0; any warning fails.
  • Coverage β€” touched files reach 100%, and every packages/* package is held at 100% as a hard threshold.
  • Matrices β€” unit/component tests run on Linux Β· Windows Β· macOS, and e2e runs against Chromium Β· Firefox Β· WebKit (3 Γ— 3).
  • Visual regression β€” Storybook publishes to Chromatic on every PR (live demo).
  • Deploy β€” CI success on main triggers the CD workflow, which builds with production env and deploys to GitHub Pages.

Full pipeline detail β€” with Mermaid diagrams of every workflow β€” lives in .github/workflows/README.md and the app README.


πŸ—‚οΈ Repository layout

soroush.tech/
β”œβ”€β”€ apps/
β”‚   └── web/        # The website itself β€” React 19 + Vike (SSG/SSR)
β”œβ”€β”€ packages/       # Shared, framework-agnostic tooling (@soroush.tech/*)
β”‚   β”œβ”€β”€ eslint-config
β”‚   β”œβ”€β”€ vite-plugin-watch
β”‚   β”œβ”€β”€ vite-plugin-sitemap
β”‚   └── vite-plugin-msw-server
└── workers/        # Backend deployables (Cloudflare Workers) β€” WIP
Workspace What it is Details
apps/web The production website β€” pages, design system, sections, hooks, tests. apps/web/README.md
packages/* Internal @soroush.tech/* tooling extracted from the app β€” Vite plugins and the shared ESLint base. Nice-to-have, consumed as TypeScript source via workspace:*. packages/README.md
workers/* Backend deployables (APIs, edge functions). Empty for now. workers/README.md

Globs live in pnpm-workspace.yaml (apps/*, packages/*, workers/*).


🧰 Tech stack β€” and why

Area Choice Why
Quality SonarQube + CodeRabbit Static analysis for bugs, smells, and security, plus AI-assisted code review on every PR.
Framework React 19 (Isomorphic, SSG, SSR) Pre-render every route to static HTML for speed and SEO, while keeping React's component model.
Build Vite 8 Fast dev server and an extensible plugin pipeline β€” the same pipeline our own plugins plug into.
UI docs Storybook + Chromatic Component catalogue with visual-regression review on every PR.
Monorepo pnpm workspaces Cheap internal packages with workspace:* links and no publish step for internal use.
Packaging tsdown Builds publishable packages (ESM/CJS + types) without the deprecated config that breaks under TS 6.
Lint & format ESLint 10 + Prettier + husky --max-warnings 0 and a pre-commit gate keep the tree always-green.
Styling @emotion/styled Token-driven, prop-based styling with a typed design system rather than ad-hoc CSS.
Data TanStack Query Declarative server-state with caching.
Forms TanStack Form + zod Headless, type-safe form state and schema-validated (used by the contact form).
Backend Hono on Cloudflare Workers Type-safe edge API with OpenAPI docs (@hono/swagger-ui), backed by D1 and deployed via Wrangler.
Testing Vitest + Playwright + MSW Unit/component in Vitest, cross-browser e2e in Playwright, network mocked deterministically with MSW.

πŸ“¬ Contact

Masoud Soroush
Email: masoud@soroush.tech
Website: soroush.tech


This project is a personal space to experiment, write, and share ideas. Contributions and feedback are welcome if you find something useful or inspiring.

About

This is where I share what I've learned, showcase what I've built, give back to the open-source community with tools worth using, and write about performance, design systems, and the craft of engineering

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages