npm package: @monteway/app
Description: CLI to easily create and extend projects templates
Author: Monterail
Latest version: 0.4.2

# @monteway/app

Core package of Monteway.js that is responsible for creating a project from scratch with a single command. It has also a feature of extending new or already existing projects with some predefined functionalities (called _extensions_).

## Install

```bash
npm i -D @monteway/app
```

## Usage of `create` command

- Create new Next.js app

  ```bash
  npx @monteway/app create --template next --directory montewayjs-next-app
  ```

  This will setup a very, very basic Next.js application with TypeScript. The project is minimal, it has no styling solution pre-configured. You can add it using _extensions_ (continue below to see it).

- Create new Remix app

  ```bash
  npx @monteway/app create --template remix --directory montewayjs-remix-app
  ```

  An experimental template for Remix v1 app. We do not use Remix in the company right now for any production projects, so this is just a reference for the future to make sure that `@monteway/app` can support different frameworks.

- Create new Express server

  ```bash
  npx @monteway/app create --template express --directory montewayjs-express-app
  ```

  Just an Express server with healtcheck route, CORS, cookies and body parsing enabled.

## Usage of `extend` command

There are two ways to use the `extend` command to add extra functionalities or setup to the project:

1. Interactive mode that displays a multiselect list with extensions compatible with the template we use:

   ```bash
   npx @monteway/app extend --template next --directory montewayjs-next-app
   ```

1. Command line arguments to specify what features we want to add:

   ```bash
   npx @monteway/app extend --template next --directory montewayjs-next-app --with axios --with button
   ```

   This example adds a file with axios instance basic configuration and also a very generic button component.

## Extensions

Here you can find a full reference of extensions we support along with information what templates are compatible with it.

| Extension (`--with`) | Compatible `--template` | Description                            |
| -------------------- | ----------------------- | -------------------------------------- |
| `button`             | next, remix             | React button component                 |
| `dependabot`         | _all_                   | Auto merge updates for npm libraries   |
| `eslint`             | express                 | ESLint config                          |
| `eslint-next`        | next                    | ESLint config for Next.js              |
| `eslint-remix`       | remix                   | ESLint config for Remix                |
| `input`              | next, remix             | React input component                  |
| `lefthook`           | _all_                   | Pre-commit hooks                       |
| `password-auth`      | next                    | Login, logout, forgot + reset password |
| `postinstall-script` | _all_                   | Run some setup after npm install       |
| `prettier`           | _all_                   | Prettier config                        |
| `react-query`        | next                    | Wraps Next app with React Query        |
| `render`             | _all_                   | Deploy to Render.com                   |
| `tailwind`           | next                    | Adds Tailwind to app                   |