Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/adbayb/stack

⚙ My opinionated development configuration setup
https://github.com/adbayb/stack

tool

Last synced: about 1 month ago
JSON representation

⚙ My opinionated development configuration setup

Awesome Lists containing this project

README

        


🦦 Stack


My opinionated scaffolding tool to ease project building




## ✨ Features

`Stack` allows creating an NPM project in a **quick**, **easy** and **opinionated** way with:

- A unified monorepo-driven and git-driven approach for all kinds of projects (single-purpose library, multiple libraries, application(s), ...)
- Support for several application templates (for now, only a default template is available, but others can be added later)
- Standardized file structure including optional folder creation such as `examples`, `packages`, ...
- Enable all project lifecycle steps with commands from the setup, check, fix, build, and test to the versioning and release
- Built-in configuration preset setup (including Node/NPM runtime, Git ignore/hooks, TypeScript, ESLint, Prettier, EditorConfig, Renovate, Changesets, and VSCode)
- A welcoming environment for users and contributors with the continuous integration setup, and the creation of `README.md`, `CONTRIBUTING.md`, and GitHub template files (including issue and pull request ones), ...
- An optimized development environment with command caching (no build needed if nothing changes)


## 🚀 Usage

This section introduces the `stack` essentials by walking through its main commands:

1️⃣ Create the NPM project via the `@adbayb/create` initializer:

```bash
# Npm
npm init @adbayb
# Pnpm
pnpm create @adbayb
```

2️⃣ Play with available commands (already set up in the generated root `package.json`):

```bash
# Setup initial requirements (including Git hooks installation)
stack install
# Clean the project
stack clean
# Check code health (static analysis including linters, types, and commit message)
stack check
# Fix auto-fixable issues
stack fix
# Start the project in production mode
stack start
# Build the project in production mode
stack build
# Build and start the project in development mode
stack watch
# Test the code execution
stack test
# Log, version, and publish package(s)
stack release
```

3️⃣ Enjoy!


## 🏗️ Architecture

```mermaid
flowchart TD
N("npm init @adbayb"):::strokeWidth -- Calls --> C("@adbayb/create"):::strokeWidth
C -- Uses --> S("@adbayb/stack"):::strokeWidth
S -- "Installs" --> EC("@adbayb/eslint-config"):::strokeWidth
S -- "Installs" --> PC("@adbayb/prettier-config"):::strokeWidth
S -- "Installs" --> TC("@adbayb/ts-config"):::strokeWidth
S -- "Scaffolds" --> P("Created project"):::strokeWidth
EC -- "Configures" --> P
PC -- "Configures" --> P
TC -- "Configures" --> P
style C fill:#daf2d7,stroke:#90cf8e
style S fill:#daf2d7,stroke:#90cf8e
style EC fill:#daf2d7,stroke:#90cf8e
style PC fill:#daf2d7,stroke:#90cf8e
style TC fill:#daf2d7,stroke:#90cf8e
classDef strokeWidth stroke-width:3px
```


### Used technologies

- **Static code analysis**: ESLint, Prettier
- **Node package manager**: PNPM
- **Task orchestration**: Turborepo
- **Release**: Changesets
- **Testing**: Vitest

### Used conventions

- [Commits](https://www.conventionalcommits.org/)
- [Scripts](https://conventionalscripts.org/)
- [File Structure](https://nx.dev/concepts/more-concepts/folder-structure)
- Monorepo-first structure to:
- Keep a consistent file structure pattern across templates (ease template familiarity and onboarding)
- Ease examples setup
- Not clutter the published package with development-related context, metadata, and artifacts


## 👣 Roadmap

- [ ] `stack check`: Lint packages (caret range for dependencies and strict ones for dev dependencies)


## ✍️ Contribution

We're open to new contributions, you can find more details [here](https://github.com/adbayb/stack/blob/main/CONTRIBUTING.md).


## 📖 License

[MIT](https://github.com/adbayb/stack/blob/main/LICENSE "License MIT")