Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/cremalab/app-next

Crema's starting point for Web Apps using Next.js
https://github.com/cremalab/app-next

cypress jest nextjs react storybook typescript

Last synced: about 4 hours ago
JSON representation

Crema's starting point for Web Apps using Next.js

Awesome Lists containing this project

README

        

# Crema App - Next 🌐

[![Build Status](https://github.com/cremalab/app-next/workflows/CI/badge.svg)](https://github.com/cremalab/app-next/actions)
[![codecov](https://codecov.io/gh/cremalab/app-next/branch/develop/graph/badge.svg?token=8epVUIKnmy)](https://codecov.io/gh/cremalab/app-next)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

This project includes configuration and tooling that conforms to Crema's baseline best-practices for a Web Application using Next.js.

**🧰 Tools Used**

- [Next.js](https://nextjs.org) a React App Framework
- [Cypress](https://www.cypress.io) for end-to-end testing
- [ESLint](https://eslint.org) for code linting
- [Husky](https://github.com/typicode/husky/tree/master) for running tasks via git hooks
- [Hygen](http://www.hygen.io) for component and util generators
- [Jest](https://jestjs.io) for unit tests
- [Prettier](https://prettier.io) for code formatting (🚨 DO NOT enable the VS Code Prettier pluginβ€”ESLint runs it for you under the hood. πŸŽ‰)
- [Storybook](https://storybook.js.org) for component playground
- [TypeScript](http://www.typescriptlang.org) for Static Typing in JavaScript ([Learn](http://www.typescriptlang.org/docs/handbook/basic-types.html))

## πŸ— Setup

> Run these commands from project root.

1. [Install NVM](https://github.com/creationix/nvm#installation-and-update) (Node Version Manager)
2. `nvm install` (in new sessions run `nvm use` to load version specified in `.nvmrc` unless aliased to default)
3. `npm i -g npm@latest` (npm@v7+ required)
4. `npm i` (install project dependencies)
5. [Install the ESLint plugin for ~~your editor~~ VS Code](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and enable "Fix on Save" in `settings.json`:
```json
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
```
> Go to settings (`⌘ + ,`), search `codeActionsOnSave` and click "Edit in settings.json", then add `"editor.codeActionsOnSave": {...}` within the existing JSON object.
>
> "But I don't use VS Code." That's fine but you're on your own. πŸ˜…
>
> 🚨 DO NOT enable the VS Code Prettier plugin for this projectβ€”ESLint runs it for you under the hood. πŸŽ‰

## πŸ‘Ÿ Run

Run the following scripts with `npm run `:

- `dev` - start app for development
- `build` - build app
- `start` - start app
- `new:component` - generate a new component
- `new:page` - generate a new page
- `new:util` - generate a new util(ity)
- `new:type` - generate a new type
- `test:deps` - run dependency validation tests
- `test:e2e` - run end-to-end tests
- `test:lint:fix` - run linter and fix if possible
- `test:lint` - run linter
- `test:playground` - run component playground (storybook)
- `test:unit:coverage` - run unit tests with coverage
- `test:unit` - run unit tests

> These scripts are located in `package.json` and do not represent the entirety of available scripts, but are the most commonly used.

## πŸ› Structure

Below is the project's file-tree with notes added as inline comments.

> Uninteresting info is denoted by `...`

```bash
.
β”œβ”€β”€ .github # πŸ‘ˆ PR/Issue Templates, workflows, and Renovate config
β”œβ”€β”€ .next # πŸ‘ˆ Next build and cache
β”œβ”€β”€ .storybook # πŸ‘ˆ Storybook config
β”œβ”€β”€ cypress # πŸ‘ˆ Cypress integration testing
β”‚ β”œβ”€β”€ fixtures # πŸ‘ˆ Test data
β”‚ β”‚ └── example.json
β”‚ β”œβ”€β”€ integration # πŸ‘ˆ Tests go here
β”‚ β”‚ └── sample_spec.ts
β”‚ └── ...
β”œβ”€β”€ public # πŸ‘ˆ Static files
β”œβ”€β”€ src
β”‚ β”œβ”€β”€ components # πŸ‘ˆ Use `npm run new:component` to generate
β”‚ β”‚ β”œβ”€β”€ Welcome
β”‚ β”‚ β”‚ β”œβ”€β”€ README.md # πŸ‘ˆ Every component has a README
β”‚ β”‚ β”‚ β”œβ”€β”€ index.tsx # πŸ‘ˆ Contains main implementation
β”‚ β”‚ β”‚ β”œβ”€β”€ stories.tsx # πŸ‘ˆ Component stories; use `npm run test:playground` to run
β”‚ β”‚ β”‚ β”œβ”€β”€ styles.css # πŸ‘ˆ Component styles (not included in generated code)
β”‚ β”‚ β”‚ └── test.tsx # πŸ‘ˆ Component tests; use `npm run test:unit` to run
β”‚ β”‚ └── README.md # πŸ‘ˆ Every top-level directory in `src` has a README.md
β”‚ β”œβ”€β”€ types # πŸ‘ˆ Type definitions go here; use `npm run new:type` to generate
β”‚ β”‚ └── README.md
β”‚ β”œβ”€β”€ utils # πŸ‘ˆ Utilities go here; use `npm run new:util` to generate
β”‚ β”‚ └── README.md
β”‚ └── pages # πŸ‘ˆ Pages go here; use `npm run new:page` to generate
β”‚ β”‚ └── README.md
β”œβ”€β”€ .dependency-cruiser.js # πŸ‘ˆ Dependency Cruiser config
β”œβ”€β”€ .eslintrc.json # πŸ‘ˆ ESLint - Run Commands
β”œβ”€β”€ .gitattributes # πŸ‘ˆ Git meta information
β”œβ”€β”€ .gitignore # πŸ‘ˆ Git ignore patterns
β”œβ”€β”€ .nvmrc # πŸ‘ˆ Node Version Manager - Run Commands
β”œβ”€β”€ .prettierrc.js # πŸ‘ˆ Prettier - Run Commands
β”œβ”€β”€ jest.config.js # πŸ‘ˆ Jest config
β”œβ”€β”€ LICENSE # πŸ‘ˆ LICENSE 😜
β”œβ”€β”€ README.md # πŸ‘ˆ πŸ‘ˆ πŸ‘ˆ YOU ARE HERE
β”œβ”€β”€ cypress.json # πŸ‘ˆ Cypress config
β”œβ”€β”€ next.config.js # πŸ‘ˆ Next.js config
β”œβ”€β”€ package-lock.json
β”œβ”€β”€ package.json
└── tsconfig.json # πŸ‘ˆ TypeScript config and extends
```

## πŸ₯‡ Best Practices

- Use the code generators:
- `npm run new:component`
- `npm run new:type`
- `npm run new:util`
- `npm run new:page`
- Fill out the `README.md` to describe what your code does
- Run your unit tests `npm run test:unit` while working to see immediate feedback
- If you get stuck at any point, just log an issue and we'll figure it out together πŸ‘­.