🚀 Battle-tested Next.js TypeScript Prisma template with an opinionated architecture. 🔋 Included ™️

Overview

🚀 The Ultimate Next.js Starter Pack

Next.js ^12 + TypeScript + Prisma + Chakra UI starter packed with useful development features.

I've adopted industries best practices into this template from my professional experience working in big tech, startups and YC companies.

Made by Nam Dao

👉 Quick start

  1. Please set up the Google OAuth 2.0 API & Credentials by following this tutorial

  2. Make sure you have the following .env file present.

    DATABASE_URL= Your PostgreSQL url
    GOOGLE_ID= Your Google Credentials API ID for NextAuth
    GOOGLE_SECRET= Your Google Credentials API secret for NextAuth
    SECRET= A secret string used to sign the JWT token for NextAuth
    
  3. Spin up docker and start the postgreSQL via docker compose.

  4. Run npx prisma db push. Make sure it is pointed at the local db.

  5. Run npm run dev.

  6. Deploy to Vercel for free 😎

    Deploy with Vercel

🔋 Features

💡 Main

  • Authentication using NextAuth with Google Login.
  • PostgreSQL and Prisma ORM.
  • Protected vs public API routes.
  • API schema validation using JOI validator.
  • Data fetching using SWR.
  • Testing using jest and jest-mock-extended

🔎 Observation

  • Logging using Pino (recommended by Next.js official docs)
  • Error handling.

🧑‍💻 Developer experience

  • Typescript
  • Automatic build & testing with GitHub Actions
  • Using Uncle Bob's Clean Architecture for backend codebase.
  • Create React components faster with component library using Chakra UI.
  • Docker compose for running the app locally.
  • Eslint and Prettier for code formatting.
  • lint-staged and pretty-quick for running linting on staged files.
  • Using nvm (node version manager) so everyone in the team is using the same version of node.
  • Depful for keeping the dependencies up to date.

📚 Best practices

Below are some of the best practices used when creating this project. I've included this section to explain the reasoning behind my decisions.

🗂 Architecture

The structure of the backend code has been inspired by Uncle Bob's Clean architecture. But what is Clean Architecture?

Clean Architecture Diagram

The overriding rule that makes this architecture work is The Dependency Rule. This rule says that source code dependencies can only point inwards. Nothing in an inner circle can know anything at all about something in an outer circle.

Following this patter, the code base is organised into the following layers:

1. API layer (src/pages/api/*)

This layer is responsible for receiving requests from the client and sending responses back to the client. Some of its responsibilities are:

  • Error handling
  • Authentication
  • Authorization
  • API schema validation

It should not need to know any business logic or data access logic.

2. Service layer (src/lib/services/*)

This layer is responsible for business logic. You will do most of the heavy lifting here.

3. Repository layer (src/lib/repositories/*)

This layer is responsible for data access logic.

The dependency between the layers is as follows:

API Layer -> Service Layer -> Repository Layer

 Folder structure TODO

Manual Dependency Injection with buildServices.ts

Service layer and Repository layer is written in classes, so that we can mock and test them later on.

As a result, we need to manually instantiate them in the buildServices.ts file and use them as Services.[service name] in the API layer.

Note: Yes, I do agree that this is a little bit manual and messy. There are libraries out there to help us do DI in TS/Nodejs but its not nice.

The decision to adopt the DI pattern was not an easy one, but I believe that writing testable code is crucial to building a reliable application, so here we are.

🔐 Authentication

This is hands down one of the harder features to implement, and it could take up to a week of dev time to get it done.

Luckily, Next.js has provided us with NextAuth library, which allows us to do all of the authentication out of the box.

Login with google

Please get the Google OAuth 2.0 Credentials by following this https://next-auth.js.org/providers/google

Where are the user data stored?

All the user data is stored in the database (see schema.prisma file). Passwords are salted and hashed automatically.

Protected API routes

Use the getToken method from NextAuth to verify the validity of the user's JWT token in the backend.

  const token = await getToken({
    req,
    secret: process.env.SECRET, // The secret used to sign the JWT token.
  });

If the token is outdated or is tampered with, it will return null.

Permission / Authorization

If a user tries to do a privileged action, make sure that they have enough permission to do it.

In my example here, a user can only update a product if it BELONGS to them. So I do a check with prisma to make sure that its the case.

  async updateOneProduct(
  ...
  ) {
    prisma.product.updateMany({
      where: {
        id: where.id,
        userId: where.userId, // <-- Check to make sure that the user is authorized to make such action.
      },
      ...
    });
  }

Signin / Signout

NextAuth provides us with 2 useful functions for the frontend.

Signin

signIn('google', {callbackUrl: `/`})

Signout

signOut({ callbackUrl: '/' });

Checking if a user is logged in or not in the frontend

NextAuth provides a function called useSession.

const Header = () => {
  const { data: session, status } = useSession();

  return (
    <div>
      ...
    </div>
  );
};
  • If status is 'unauthenticated', they're not logged in.
  • You can also access user email, id, name etc from the data object.

⚙️ API schema validation

It is important to sanitize/validate the incoming requests to the API before running ANY business logic. There are numbers of libraries out there that can do JSON validation, but I've found JOI to be the easiest to use.

For example, if you're expecting a request to the API that has name, price and description fields, simply define a schema:

import { Joi } from '@hapi/joi';

const schema = Joi.object({
  name: Joi.string().required(),
  price: Joi.number().required(),
  description: Joi.string().required(),
});

Then you can use the schema to validate the incoming request:

const data = {
  name: 'Product 1',
  price: 100,
  description: 'This is a product',
};

await schema.validateAsync(data);

It is recommended to wrap the validateAsync call in a try catch block to catch any errors and return an appropriate response to the client.

📃 Logging

For observability, it is important to have consistent logging across the application. In this template here, I've used Pino for logging, as recommended by Next.js official docs.

  • For general logging, use the logger.info() level.
  • For any user errors, use the logger.warn() level.
  • For any server errors, use the error() level.

When you're logging something, you can also pass in extra data to the logger:

logger.info({ name: "Dyson hair dryer", price: 100 }, 'Purchased a product');

🐞 Error handling

When you're writing anything, it is important to wrap your code in try catch blocks. Especially for APIs, as if you don't do this, you'll run into runtime errors that are hard to debug. See my example handleError function, which returns an appropriate message to the client when an error arises.

i.e api/products.ts

export default async function handle(
  req: NextApiRequest,
  res: NextApiResponse
) {
  try {
    // Your code goes here
    throw new Error('Something went wrong');
    
  } catch (error) {
    // This will capture the error above, log it and send a response to the client.
    handleError(error, res); 
  }
}

When throwing a Http Error, you can use my helper HttpError class which works in conjunction with the handleError function.

if (!product) {
  throw new HttpError(404, 'Product not found', { id: productId });
}

🗄 Database access using Prisma ORM

There are many ways to interact with the Database. You can write straight SQLs, use ORMs or even both. All the methods are valid if you understand the tradeoffs.

My three key reasons for choosing Prisma are:

  1. Ease of use. God damn it feels good.
  2. Amazing auto type generation that can be used throughout the codebase.
  3. Backed by actual investors.

Getting started with Prisma

The source of truth for the database schema lives inside the prisma/schema.prisma file.

How to use Prisma

See the Prisma documentation for more details. To use prisma types:

import { Prisma } from '@prisma/client';

async function deleteOneProduct(where: Prisma.ProductWhereInput) // <- Use the prisma types like this
{
  // data access code...
}

How to do database changes/migration for production

  1. Edit the prisma/schema.prisma file.
  2. Run npx prisma format to format the schema.
  3. Run npx prisma generate to generate the typescript types. This will modify the files inside node_modules.
  4. TODO: Run npx prisma migrate to migrate the schema.

Note: The downside of using the Prisma ORM is that later on, when you need to make a complex nested query, Prisma may generate a really inefficient query that can hung the database. I've seen this before in production which caused our whole database to become unresponsive. We ended up writing raw SQL for this query instead. However, even though edge cases like this exist, I would still recommend using the Prisma because the other 98% with the added productivity justifies it.

Testing

Testing is always a controversial topic, especially in the startup world. My experience has taught me that when you're hacking together a project for an MVP or building a PoC, don't even think about it. Why spend all the effort writing test cases (which btw takes a long time) when the code could be torn down at any time. However, if your intension is to write code that won't be torn down, please write tests!

Why are repository layer and service layer all classes!?

I've adopoted dependnecy injection for our backend code. Its basiclaly a design pattern where an object receives other objects that it depends on, usually through the constructor. This will allow us to mock dependencies easier later on.

How to write unit testing using Jest & Jest Mock Extended

For example, if you have a file called productService.ts, a test file should be called productService.test.ts.

Let's say you want to test that the ProductService.deleteOneProduct() method actually called the ProductRepository.deleteOneProduct() in ProductService class.

productService.ts

export class ProductService {
  constructor(private productRepository: ProductRepository) {}

  async getManyProducts(): Promise<Product[]> {
    ...
  }

  async deleteOneProduct(where: Prisma.ProductWhereInput): Promise<void> {
    ...
  }
}

Your test file will look like this productService.test.ts:

describe('ProductService', () => {
  const mockProductRepository = mock<ProductRepository>();
  let productService: ProductService;

  beforeEach(() => {
    productService = new ProductService(mockProductRepository);
  });

  describe('deleteOneProduct', () => {
    test('should call ProductRepository.deleteOneProduct', async () => {
      const where = { id: '1', userId: 'nam' };
      await productService.deleteOneProduct(where);
      expect(mockProductRepository.deleteOneProduct).toHaveBeenCalledWith(
        where
      );
    });
  });
});

Where:

  • The first describe() specifies the class name.
  • we define all the dependnecies we need to mock using mock from jest-mock-extended.
  • Do any pre testing logic in beforeEach().
  • The second describe() specifies the method name.
  • Test name should follow the format 'should (logic)'

⚙️ CI/CD with GitHub Actions and Vercel

We're using GitHub Actions to run npm run build and npm test on commits and PRs to the main branch.

Once a new commit is pushed to the main branch, vercel detects that and rebuilds the application for us.

🏎 CRUD requests

Sending request to the server from the client is quite simple.

GET requests

SWR is a React Hooks library for data fetching, that we're using in this project (recommended by the official Next.js docs) This is because SWR library allows us to re-validate the data / do automatic polling.

Example of calling api/products endpoint in index.tsx with 1s refresh interval.

const Home: NextPage = () => {
  const { data } = useSWR('/api/products', fetcher, {
    refreshInterval: 1000, // default is no polling.
  });

  ...

  return (
    <div>
      ...
    </div>
  );
};

POST, PUT, PATCH, DELETE requests

We use the axios library for these requests. Make use of my requests wrapper function I wrote inside lib/utils/requests.ts, as you can decide what to do when an error arises, on a global level. I recommend displaying an error toast there.

🧹 Codebase hygiene

As your team scale, it is important to have a code style consistency.

  • Prettier & Eslint is used for keeping the code format consistent.
  • Husky is used for running eslint & prettier tasks at pre-commit.
  • Make sure that files and variables are camelCased.

⭐️ Contribution

Always looking for feedbacks and contributors! Please open an issue or a PR if you have any suggestions 😁

Comments
  • Upgrade Node.js to 16.18.0

    Upgrade Node.js to 16.18.0

    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    Release Notes

    16.18.0

    More info than we can show here. View the full release notes

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Pauses all engine updates and closes this PR
    depfu 
    opened by depfu[bot] 3
  • Upgrade Node.js to 16.18.1

    Upgrade Node.js to 16.18.1

    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    Release Notes

    16.18.1

    More info than we can show here. View the full release notes

    16.18.0

    More info than we can show here. View the full release notes

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Pauses all engine updates and closes this PR
    depfu 
    opened by depfu[bot] 2
  • Upgrade Node.js to 16.17.1

    Upgrade Node.js to 16.17.1


    🚀 New Feature: Engine Updates

    Welcome to your first update for the engine or runtime! It tries to change all the places where the version of the engine is configured. We're most likely missing a few of those or handling them incorrectly, so please help us and let us know and we'll quickly add it to the workflow.

    If you want to know more about this feature, we just blogged about it.

    If you're not interested in engine updates at all, you can reply to this PR with @depfu pause.


    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    Release Notes

    16.17.1

    More info than we can show here. View the full release notes

    16.17.0

    More info than we can show here. View the full release notes

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Pauses all engine updates and closes this PR
    depfu 
    opened by depfu[bot] 1
  • Update all npm dependencies (2022-09-22)

    Update all npm dependencies (2022-09-22)

    This is your weekly update of all npm dependencies. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ framer-motion (7.2.0 → 7.3.6, minor)

    ✳️ pino (8.4.2 → 8.5.0, minor) · Repo · Release · Diff

    ✳️ jest-mock-extended (2.0.7 → 2.0.9, patch)


    Depfu Status

    Depfu will only send you the next scheduled PR once you merge or close this one.

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    depfu 
    opened by depfu[bot] 1
  • Update all npm dependencies (2022-09-15)

    Update all npm dependencies (2022-09-15)

    This is your weekly update of all npm dependencies. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ @prisma/client (4.2.1 → 4.3.1, minor)

    ✳️ prisma (4.2.1 → 4.3.1, minor) · Repo · Release · Diff


    Depfu Status

    Depfu will only send you the next scheduled PR once you merge or close this one.

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    depfu 
    opened by depfu[bot] 1
  • Update all npm dependencies (2022-09-08)

    Update all npm dependencies (2022-09-08)

    This is your weekly update of all npm dependencies. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ typescript (4.7.4 → 4.8.2, minor) · Repo · Release · Diff

    ✳️ @emotion/react (11.10.0 → 11.10.4, patch) · Repo · Changelog

    ✳️ @emotion/styled (11.10.0 → 11.10.4, patch) · Repo · Changelog


    Depfu Status

    Depfu will only send you the next scheduled PR once you merge or close this one.

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    depfu 
    opened by depfu[bot] 1
  • Update all npm dependencies (2022-09-01)

    Update all npm dependencies (2022-09-01)

    This is your weekly update of all npm dependencies. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ @chakra-ui/react (2.2.9 → 2.3.1, minor) · Repo · Changelog


    👉 No CI detected

    You don't seem to have any Continuous Integration service set up!

    Without a service that will test the Depfu branches and pull requests, we can't inform you if incoming updates actually work with your app. We think that this degrades the service we're trying to provide down to a point where it is more or less meaningless.

    This is fine if you just want to give Depfu a quick try. If you want to really let Depfu help you keep your app up-to-date, we recommend setting up a CI system:

    • Circle CI, Semaphore and Travis-CI are all excellent options.
    • If you use something like Jenkins, make sure that you're using the Github integration correctly so that it reports status data back to Github.
    • If you have already set up a CI for this repository, you might need to check your configuration. Make sure it will run on all new branches. If you don’t want it to run on every branch, you can whitelist branches starting with depfu/.

    Depfu Status

    Depfu will only send you the next scheduled PR once you merge or close this one.

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    depfu 
    opened by depfu[bot] 1
  • Update @prisma/client: 4.1.1 → 4.2.1 (minor)

    Update @prisma/client: 4.1.1 → 4.2.1 (minor)

    Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ @​prisma/client (4.1.1 → 4.2.1)

    Sorry, we couldn't find anything useful about this release.


    👉 No CI detected

    You don't seem to have any Continuous Integration service set up!

    Without a service that will test the Depfu branches and pull requests, we can't inform you if incoming updates actually work with your app. We think that this degrades the service we're trying to provide down to a point where it is more or less meaningless.

    This is fine if you just want to give Depfu a quick try. If you want to really let Depfu help you keep your app up-to-date, we recommend setting up a CI system:

    • Circle CI, Semaphore and Travis-CI are all excellent options.
    • If you use something like Jenkins, make sure that you're using the Github integration correctly so that it reports status data back to Github.
    • If you have already set up a CI for this repository, you might need to check your configuration. Make sure it will run on all new branches. If you don’t want it to run on every branch, you can whitelist branches starting with depfu/.

    Depfu Status

    Depfu will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with @depfu rebase.

    All Depfu comment commands
    @​depfu rebase
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Ignores all future updates for this dependency and closes this PR
    @​depfu pause [minor|major]
    Ignores all future minor/major updates for this dependency and closes this PR
    @​depfu resume
    Future versions of this dependency will create PRs again (leaves this PR as is)
    depfu 
    opened by depfu[bot] 1
  • Update all npm dependencies (2022-08-25)

    Update all npm dependencies (2022-08-25)

    This is your weekly update of all npm dependencies. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ @prisma/client (4.1.1 → 4.2.1, minor)

    ✳️ @chakra-ui/react (2.2.8 → 2.2.9, patch) · Repo · Changelog


    👉 No CI detected

    You don't seem to have any Continuous Integration service set up!

    Without a service that will test the Depfu branches and pull requests, we can't inform you if incoming updates actually work with your app. We think that this degrades the service we're trying to provide down to a point where it is more or less meaningless.

    This is fine if you just want to give Depfu a quick try. If you want to really let Depfu help you keep your app up-to-date, we recommend setting up a CI system:

    • Circle CI, Semaphore and Travis-CI are all excellent options.
    • If you use something like Jenkins, make sure that you're using the Github integration correctly so that it reports status data back to Github.
    • If you have already set up a CI for this repository, you might need to check your configuration. Make sure it will run on all new branches. If you don’t want it to run on every branch, you can whitelist branches starting with depfu/.

    Depfu Status

    Depfu will only send you the next scheduled PR once you merge or close this one.

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    depfu 
    opened by depfu[bot] 0
  • Upgrade framer-motion: 6.5.1 → 7.2.0 (major)

    Upgrade framer-motion: 6.5.1 → 7.2.0 (major)

    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ framer-motion (6.5.1 → 7.2.0)

    Sorry, we couldn't find anything useful about this release.


    👉 No CI detected

    You don't seem to have any Continuous Integration service set up!

    Without a service that will test the Depfu branches and pull requests, we can't inform you if incoming updates actually work with your app. We think that this degrades the service we're trying to provide down to a point where it is more or less meaningless.

    This is fine if you just want to give Depfu a quick try. If you want to really let Depfu help you keep your app up-to-date, we recommend setting up a CI system:

    • Circle CI, Semaphore and Travis-CI are all excellent options.
    • If you use something like Jenkins, make sure that you're using the Github integration correctly so that it reports status data back to Github.
    • If you have already set up a CI for this repository, you might need to check your configuration. Make sure it will run on all new branches. If you don’t want it to run on every branch, you can whitelist branches starting with depfu/.

    Depfu Status

    Depfu will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with @depfu rebase.

    All Depfu comment commands
    @​depfu rebase
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Ignores all future updates for this dependency and closes this PR
    @​depfu pause [minor|major]
    Ignores all future minor/major updates for this dependency and closes this PR
    @​depfu resume
    Future versions of this dependency will create PRs again (leaves this PR as is)
    depfu 
    opened by depfu[bot] 0
  • Upgrade @types/react: 18.0.15 → 18.0.17 (patch)

    Upgrade @types/react: 18.0.15 → 18.0.17 (patch)

    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ @​types/react (18.0.15 → 18.0.17) · Repo

    Sorry, we couldn't find anything useful about this release.


    👉 No CI detected

    You don't seem to have any Continuous Integration service set up!

    Without a service that will test the Depfu branches and pull requests, we can't inform you if incoming updates actually work with your app. We think that this degrades the service we're trying to provide down to a point where it is more or less meaningless.

    This is fine if you just want to give Depfu a quick try. If you want to really let Depfu help you keep your app up-to-date, we recommend setting up a CI system:

    • Circle CI, Semaphore and Travis-CI are all excellent options.
    • If you use something like Jenkins, make sure that you're using the Github integration correctly so that it reports status data back to Github.
    • If you have already set up a CI for this repository, you might need to check your configuration. Make sure it will run on all new branches. If you don’t want it to run on every branch, you can whitelist branches starting with depfu/.

    Depfu Status

    Depfu will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with @depfu rebase.

    All Depfu comment commands
    @​depfu rebase
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Ignores all future updates for this dependency and closes this PR
    @​depfu pause [minor|major]
    Ignores all future minor/major updates for this dependency and closes this PR
    @​depfu resume
    Future versions of this dependency will create PRs again (leaves this PR as is)
    depfu 
    opened by depfu[bot] 0
  • Upgrade Node.js to 16.19.0

    Upgrade Node.js to 16.19.0

    Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    Release Notes

    16.19.0

    More info than we can show here. View the full release notes

    16.18.1

    More info than we can show here. View the full release notes

    16.18.0

    More info than we can show here. View the full release notes

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    @​depfu pause
    Pauses all engine updates and closes this PR
    depfu 
    opened by depfu[bot] 1
  • Update all npm dependencies (2022-10-14)

    Update all npm dependencies (2022-10-14)

    This is your weekly update of all npm dependencies. Please take a good look at what changed and the test results before merging this pull request.

    What changed?

    ✳️ @prisma/client (4.3.1 → 4.4.0, minor)

    ✳️ next-auth (4.10.3 → 4.12.2, minor) · Repo · Changelog

    ✳️ pino (8.5.0 → 8.6.1, minor) · Repo · Release · Diff

    ✳️ prisma (4.3.1 → 4.4.0, minor) · Repo · Release · Diff

    ✳️ @chakra-ui/react (2.3.1 → 2.3.4, patch) · Repo · Changelog

    ✳️ joi (17.6.0 → 17.6.2, patch) · Repo · Changelog · Diff

    ✳️ typescript (4.8.2 → 4.8.4, patch) · Repo · Release · Diff


    Depfu Status

    Depfu will only send you the next scheduled PR once you merge or close this one.

    All Depfu comment commands
    @​depfu refresh
    Rebases against your default branch and redoes this update
    @​depfu recreate
    Recreates this PR, overwriting any edits that you've made to it
    @​depfu merge
    Merges this PR once your tests are passing and conflicts are resolved
    @​depfu close
    Closes this PR and deletes the branch
    @​depfu reopen
    Restores the branch and reopens this PR (if it's closed)
    depfu 
    opened by depfu[bot] 1
Releases(v1.0.0)
Owner
Nam
Full-Stack Software Engineer
Nam
The SheetJS Community Edition offers battle-tested open-source solution

The SheetJS Community Edition offers battle-tested open-source solutions for extracting useful data from almost any complex spreadsheet and generating new spreadsheets that will work with legacy and modern software alike.

SheetJS 32k Dec 29, 2022
A NestJS module that allows you use Prisma, set up multiple Prisma services, and use multi-tenancy in each Prisma service.

NestJS Prisma Module Installation To use this package, first install it: npm i @sabinthedev/nestjs-prisma Basic Usage In order to use this package, yo

Sabin Adams 39 Dec 2, 2022
A fullstack next.js template with all the fun stuff like next auth, mongodb, prisma, chakra ui

Welcome to FullStack Next.js template ?? A fullstack next.js template with all the fun stuff like next auth, mongodb, prisma, chakra ui ✨ Demo Tech Ne

Avneesh Agarwal 10 Oct 16, 2022
A Tauri + Next.js (SSG) template, with TailwindCSS, opinionated linting, and GitHub Actions preconfigured

Tauri + Next.js Template This is a Tauri project template using Next.js, bootstrapped by combining create-next-app and create tauri-app. This template

Kevin Xiao 58 Dec 30, 2022
Fullstack Dynamic NFT Mini Game built using 💎 Diamond Standard [EIP 2535] 🏃‍♀️Players can use Hero NFT to battle against Thanos ⚔ Heroes can be Healed by staking their NFT 🛡

?? Fullstack Dynamic NFT Mini Game ?? ?? Using Diamond Standard Play On ?? ?? ⏩ http://diamond-dapp.vercel.app/ Project Description ?? Fullstack Dynam

Shiva Shanmuganathan 21 Dec 23, 2022
Rollback netcode for Mega Man Battle Network!

Tango Tango is rollback netplay for Mega Man Battle Network. Design Tango is composed of two parts: the launcher and the core. The launcher performs h

Tango 68 Dec 31, 2022
Pokémon: Duel Battle

Pokémon: Duel Battle Sebuah Web Apps yang dibuat sebagai syarat kelulusan Dicoding Submission Belajar Fundamental Front-End Web Development. Tech Proj

Ryan Aunur Rassyid 3 Sep 16, 2022
Opinionated Next.JS Boilerplate with TypeScript and Material-UI

Next.JS Boilerplate This is an opinionated Next.js boilerplate, with: Fully typed with TypeScript. Style/Theme engine and Icons from Material UI. Code

Rethunk.Tech, LLC. 4 Jun 28, 2022
An opinionated Next.js + Chakra + TypeScript starter

Nextjs + Chakra + Typescript Starter ✨ An opinionated Next.js + Chakra + TypeScript starter packed with: ⚡️ Next.js 12 ⚛️ React 18 ✨ TypeScript ?? Cha

jaclyn 3 Sep 17, 2022
Template Repository for making your own budder Module. CORE is not included, this is just for the module.

A quick copy of the "How to make your own module" section Check out the official budderAPI repository Template Repository for making your own budder M

Logic 2 Apr 3, 2022
A solid create-remix app, that applies best practices into a clean, batteries included template. SQLite version. Deploys to Fly.io

Remix Barebones Stack npx create-remix --template dev-xo/barebones-stack A solid create-remix app, that follows community guidelines and applies best

Dev XO 97 Dec 30, 2022
Prisma +2 generator to emit Yup schemas from your Prisma schema

Prisma Yup Generator Automatically generate Yup schemas from your Prisma Schema, and use them to validate your API endpoints or any other use you have

Omar Dulaimi 31 Dec 24, 2022
Prisma 2+ generator to emit Joi schemas from your Prisma schema

Prisma Joi Generator Automatically generate Joi schemas from your Prisma Schema, and use them to validate your API endpoints or any other use you have

Omar Dulaimi 26 Dec 24, 2022
Prisma +2 generator to emit a tRPC shield from your Prisma schema

Prisma tRPC Shield Generator Automatically generate a tRPC Shield from your Prisma Schema. Updates every time npx prisma generate runs. Table of Conte

Omar Dulaimi 27 Dec 24, 2022
Prisma 2+ generator to emit Zod schemas from your Prisma schema

Prisma Zod Generator Automatically generate Zod schemas from your Prisma Schema, and use them to validate your API endpoints or any other use you have

Omar Dulaimi 212 Dec 27, 2022
This is a library to alternate and self-host the Prisma Data Proxy (cloud.prisma.io)

Alternative Prisma Data Proxy This is a library to alternate and self-host the Prisma Data Proxy (cloud.prisma.io). In order to deploy your project to

AijiUejima 60 Dec 28, 2022
Free Next.js responsive landing page template for SaaS products made using JAMStack architecture.

✨ Free Next.js marketing website template for SaaS startups ✨ Everything you need to build a great landing page / marketing website for your startup.

RainBow 6 Nov 5, 2022
Data structures & algorithms implementations and coding problem solutions. Written in Typescript and tested with Jest. Coding problems are pulled from LeetCode and Daily Coding Problem.

technical-interview-prep Data structures & algorithms implementations and coding problem solutions. Written in Typescript and tested with Jest. Coding

Lesley Chang 7 Aug 5, 2022
Kaol Stack - Prisma, Expo, Next, TRPC, Solito, Tailwind - A monorepo template for a truly universal app

Kaol Stack ?? About A monorepo with Prisma, Next.js, Expo, tRPC, Authentication and Solito setup and configured to work together. With this setup you

Matheus Vicente 187 Dec 21, 2022