Monorepo with shared utility packages used across my projects.
| Package | Description |
|---|---|
@vanya2h/eslint-config |
Shared ESLint configs (base, node, react) |
@vanya2h/prettier-config |
Shared Prettier config |
@vanya2h/typescript-config |
Shared TypeScript configs (base, node, lib, react) |
@vanya2h/utils |
Common TypeScript utilities and type helpers (incl. jsonSerializer) |
@vanya2h/utils-rxjs |
RxJS helpers: batcher, createCache, persistBehaviorSubject, wrapped |
@vanya2h/utils-rxjs-react |
React bindings for RxJS: useObservable, usePending, <Pending> |
@vanya2h/store |
Reactive global store with schema-keyed caching on top of RxJS |
@vanya2h/store-react |
React bindings for @vanya2h/store: useStoreValue, useStoreCache |
@vanya2h/async-actions |
Composable async action pipelines with status tracking and retries |
@vanya2h/utils-wagmi |
Wagmi/viem utilities for accounts, public clients and wallet clients |
@vanya2h/form-factory |
Headless React form factory built on react-hook-form, Zod, and RxJS |
This repo ships an integrate-configs Claude Code skill that installs the ESLint, Prettier, and TypeScript configs into any project automatically.
npx skills add vanya2h/common -a claude-codeThen in any project:
/integrate-configs react
Valid types: base · node · react · lib
Add this repo as a marketplace source once:
/plugin marketplace add vanya2h/common
Then install the skill:
/plugin install integrate-configs@vanya2h-common
Then invoke with /integrate-configs [type].
corepack enable
pnpm installReleases use Changesets in pre-release rc mode. All packages version independently — there is no fixed version group.
feature branch → PR to develop (via /pr)
develop → merged to staging → RC published to npm (auto)
staging → /release-docs → PR to main → stable published to npm (auto)
Make changes on a feature branch off develop. When ready to commit, use the /commit command — it analyzes your changes, generates an appropriate changeset, and commits everything together.
Open a PR to develop using the /pr command from your feature branch, then merge it.
When ready to cut a release candidate, merge develop into staging:
git checkout staging
git merge develop
git pushThe rc-release.yml workflow runs automatically and:
- Enters pre-release mode if not already active (
changeset pre enter rc) - Runs
changeset version— bumps affected packages toX.Y.Z-rc.N - Publishes to npm
- Pushes per-package git tags (e.g.
@vanya2h/eslint-config@0.7.0-rc.0) - Syncs the version bump commit back to
develop
For follow-up fixes, repeat step 1 on a new feature branch and merge to develop, then merge develop to staging again. Each push to staging increments the RC counter (rc.0, rc.1, …).
Once the RC is verified, run from staging:
/release-docs
This creates docs/releases/YYYY-MM-DD.md and opens a PR against main with the release notes as the body.
Merge the release PR into main. The release.yml workflow runs automatically and:
- Exits pre-release mode (
changeset pre exit) - Runs
changeset version— strips the-rc.Nsuffix, producingX.Y.Z - Publishes to npm
- Pushes per-package git tags (e.g.
@vanya2h/eslint-config@0.7.0) - Syncs the version bump commit back to
staginganddevelop
| Command | Purpose |
|---|---|
/commit |
Commit changes with an auto-generated changeset |
/pr |
Open a PR to develop |
/release-docs |
Generate release notes and open a PR to main |
corepack pnpm build |
Build all packages |
corepack pnpm test |
Run all tests |
corepack pnpm lint |
Lint all packages |
corepack pnpm check-types |
Type-check all packages |
Release notes live in docs/releases/.