- Clone the repository and install dependencies:
git clone https://github.com/furystack/stack-craft.git
cd stack-craft
yarn- Start PostgreSQL:
docker compose up -d- Create your environment file:
cp .env.example .env- Start the backend and frontend in separate terminals:
yarn start:service # Terminal 1
yarn start:frontend # Terminal 2stack-craft/
├── common/ # Shared API type definitions, models, and generated schemas
├── frontend/ # Shades-based SPA (Vite dev server on :8080)
├── service/ # FuryStack REST backend (Node.js on :9090)
├── e2e/ # Playwright end-to-end tests
└── docs/ # Documentation
The project uses ESLint and Prettier for code quality and formatting. Both run automatically on staged files via Husky pre-commit hooks.
yarn lint # Run ESLint
yarn format # Format all files with Prettier
yarn format:check # Check formatting without modifying filesKey conventions:
- File names: kebab-case (e.g.
service-pipeline.ts) - Components: PascalCase exports in kebab-case files
- Types: Prefer
typeoverinterface - No
any: Useunknown, generics, or union types instead
See .cursor/rules/ for detailed coding guidelines.
yarn test # Run Vitest unit tests with coverage
yarn test:e2e # Run Playwright E2E tests (requires running DB)- Unit tests are co-located with source files (
*.spec.ts) - Coverage thresholds are enforced in
vitest.config.mts - Add tests for new functionality before submitting a PR
When you modify API types in common/src/apis/ or models in common/src/models/, regenerate the JSON schemas:
yarn build # Must build common first
yarn create-schemas # Regenerate schemasThis project uses Yarn's release workflow for version management and changelogs. Both are required before opening a PR.
Decide which packages need a version bump and at what level (patch/minor/major):
yarn bumpVersions # Interactive prompt to select packages and bump typeThis creates version manifest files that Yarn tracks. You can verify the state with:
yarn version check # Validates that version bumps are configuredGenerate changelog draft files for each bumped package:
yarn changelog create # Creates .yarn/changelogs/{package}.{id}.md files
yarn changelog create -f # Force-recreate (useful if drafts are stale)Edit the generated .yarn/changelogs/*.md files. Each file has section placeholders -- fill in the relevant ones describing what changed and why. Write for end users, not as a git log.
yarn changelog check # Validates entries are filled and match the version typeWhen merging to a release branch, the release pipeline runs:
yarn applyReleaseChanges # Applies version bumps, merges changelogs, and formats- Create a feature branch from the latest
develop - Make your changes with tests
- Ensure
yarn build,yarn lint, andyarn testall pass - Bump versions (
yarn bumpVersions) and fill changelog entries (yarn changelog create, then edit the drafts) - Verify with
yarn changelog check - Open a PR against
develop - PRs must pass CI checks (build, lint, test, E2E, changelog check, version check)