This is a Blitz.js app. But with a complete implementation of Chakra UI
- Components - converted to use
@chakra-ui/react
- Custom theme - with easy customization and well organizated folder structure
- Dark Mode - example of how to use dark mode using the system settings
Run your app in the development mode.
yarn dev
Open http://localhost:3000 with your browser to see the result.
There are two options already setup in this project.
- Sqlite (default)
- Postgres (docker-compose)
Sqlite is used by default. Just run yarn dev
to get started. If you make changes, then run yarn prisma:migrate
to create migration files.
Or if you are running everying in a development mode, just run yarn prisma:push
. This will force push the changes to the database.
To switch the databases to Postgres, go to db/schema.prisma
and change sqlite
to postgres
.
Make sure to setup your db with docker using docker-compose
docker-compose up -d
Ensure the .env.local
file has required environment variables:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres
Ensure the .env.test.local
file has required environment variables:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres_test
Runs your tests using Jest.
blitz test
or
yarn test
Blitz comes with a test setup using Jest and react-testing-library.
Blitz comes with a powerful CLI that is designed to make development easy and fast. You can install it with npm i -g blitz
blitz [COMMAND]
dev Start a development server
build Create a production build
start Start a production server
export Export your Blitz app as a static application
prisma Run prisma commands
generate Generate new files for your Blitz project
console Run the Blitz console REPL
install Install a recipe
help Display help for blitz
test Run project tests
You can read more about it on the CLI Overview documentation.
Here is the starting structure of your app.
blitz-app-with-chakra-ui-template
├── app/
│ ├── api/
│ ├── auth/
│ │ ├── components/
│ │ │ ├── LoginForm.tsx
│ │ │ └── SignupForm.tsx
│ │ ├── mutations/
│ │ │ ├── changePassword.ts
│ │ │ ├── forgotPassword.test.ts
│ │ │ ├── forgotPassword.ts
│ │ │ ├── login.ts
│ │ │ ├── logout.ts
│ │ │ ├── resetPassword.test.ts
│ │ │ ├── resetPassword.ts
│ │ │ └── signup.ts
│ │ ├── pages/
│ │ │ ├── forgot-password.tsx
│ │ │ ├── login.tsx
│ │ │ ├── reset-password.tsx
│ │ │ └── signup.tsx
│ │ └── validations.ts
│ ├── core/
│ │ ├── components/
│ │ │ ├── Form.tsx
│ │ │ └── LabeledTextField.tsx
│ │ ├── hooks/
│ │ │ └── useCurrentUser.ts
│ │ └── layouts/
│ │ └── Layout.tsx
│ ├── pages/
│ │ ├── 404.tsx
│ │ ├── _app.tsx
│ │ ├── _document.tsx
│ │ ├── index.test.tsx
│ │ └── index.tsx
│ └── users/
│ └── queries/
│ └── getCurrentUser.ts
├── db/
│ ├── index.ts
│ ├── schema.prisma
│ └── seeds.ts
├── integrations/
├── mailers/
│ └── forgotPasswordMailer.ts
├── public/
│ ├── favicon.ico*
│ └── logo.png
├── test/
│ ├── setup.ts
│ └── utils.tsx
├── README.md
├── babel.config.js
├── blitz.config.js
├── jest.config.js
├── package.json
├── tsconfig.json
├── types.d.ts
├── types.ts
└── yarn.lock
These files are:
-
The
app/
folder is a container for most of your project. This is where you’ll put any pages or API routes. -
db/
is where your database configuration goes. If you’re writing models or checking migrations, this is where to go. -
public/
is a folder where you will put any static assets. If you have images, files, or videos which you want to use in your app, this is where to put them. -
integrations/
is a folder to put all third-party integrations like with Stripe, Sentry, etc. -
test/
is a folder where you can put test utilities and integration tests. -
package.json
contains information about your dependencies and devDependencies. If you’re using a tool likenpm
oryarn
, you won’t have to worry about this much. -
tsconfig.json
is our recommended setup for TypeScript. -
.babelrc.js
,.env
, etc. ("dotfiles") are configuration files for various bits of JavaScript tooling. -
blitz.config.js
is for advanced custom configuration of Blitz. It extendsnext.config.js
. -
jest.config.js
contains config for Jest tests. You can customize it if needed.
You can read more about it in the File Structure section of the documentation.
Blitz comes with a set of tools that corrects and formats your code, facilitating its future maintenance. You can modify their options and even uninstall them.
- ESLint: It lints your code: searches for bad practices and tell you about it. You can customize it via the
.eslintrc.js
, and you can install (or even write) plugins to have it the way you like it. It already comes with theblitz
config, but you can remove it safely. Learn More. - Husky: It adds githooks, little pieces of code that get executed when certain Git events are triggerd. For example,
pre-commit
is triggered just before a commit is created. You can see the current hooks inside.husky/
. If are having problems commiting and pushing, check out ther troubleshooting guide. Learn More. - Prettier: It formats your code to look the same everywhere. You can configure it via the
.prettierrc
file. The.prettierignore
contains the files that should be ignored by Prettier; useful when you have large files or when you want to keep a custom formatting. Learn More.
Read the Blitz.js Documentation to learn more.
The Blitz community is warm, safe, diverse, inclusive, and fun! Feel free to reach out to us in any of our communication channels.