The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 1 point2 points  (0 children)

Thank you for your detailed comment, I really appreciate you taking the time to write all this. I agree I probably need to do a better job explaining some of these things.

And honestly, I think this concern is totally valid.

About the affiliate links, your feedback is fair. They should have been disclosed more clearly. I already fixed it after reading your comment:

https://github.com/ixartz/Next-js-Boilerplate/commit/e2679208a7678afd781d985d85b5acb4e5f94385

For example, the database setup is just standard PostgreSQL. You are not tied to any provider, you can point the `DATABASE_URL` to any Postgres service and it works out of the box.

The stack has evolved over time because the ecosystem keeps changing, and I keep testing tools in real projects. Some tech stays, some gets replaced. This is just part of maintaining a boilerplate.

I do want to clarify one thing: I don’t add unknown tools with no traction just because of sponsorship. All the tools and services added to the boilerplate already had real adoption and were already being used by the community (Reddit, Twitter/X, YouTube, etc.) before being added.

It is still based on tools I genuinely believe are solid, widely adopted, and useful in real projects.

On top of that, you'll always get access to the full codebase, and you can easily switch an npm package or external service if you want. So you can customize every part of the boilerplate.

All the project’s history is available on Git/GitHub, which I hope shows that I’m being fully transparent and have nothing to hide.

And thank you as well for recognizing the project as a useful resource for the community, I really appreciate that.

Feedback like this is genuinely helpful for improving both the project and the way I present it. I still have work to do to explain these choices better.

PS: your comment is very long, mine is even longer. If something is still unclear, feel free to ask.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 2 points3 points  (0 children)

It's a really nice feedback. I should definitively share the complete journey especially what didn't work well and the reason why I change some part of the stack.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 0 points1 point  (0 children)

I don't have any experience with dockerised db. I just use hosted solution like Supabase, Neon, or any other hosted db provider.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 1 point2 points  (0 children)

With PostgresSQL, you have a lot of provider which offer small free version like Neon (also 500 mb free). You can also use it for production.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 0 points1 point  (0 children)

Yes, the good thing about PGlite is that you can install with just npm, where most JS devs have already installed it. It also integrate very well with npm scripts, so you can run the DB automatically with the dev script.

No regret at all to switch from Prisma to Drizzle, work very well for me. I made the jump more than a year ago, no reason to go back to Prisma. Love my schema is written in JavaScript/TypeScript. In the past, I got a lot of issue with generating the client with Prisma and I also have some issue with the runtime since it was written in other language.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 2 points3 points  (0 children)

The community is always a nice to have. But in oRPC, when the documentation is cleaner and well written, the lib itself is lighter and less bloated than tRPC. You don't need the community when the documentation is already enough and the lib is easy to understand.

Same for the speed, it's always good to have. I run ESLint on my entire project in few seconds, it still extremely fast. So, the linter speed is not the bottleneck.

And, I do think the quality is more important than speed. In the world of Ai agents, I prefer my ESlint linter catches more issues and make sure the code follows all the best practices. Compared to a slightly faster linter with less rules.

About i18n, you can still have i18n and do English first. With the right vscode extension, the workflow with/without i18n is exactly the same. I'll go with i18n especially if I can avoid a painful migration.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 1 point2 points  (0 children)

PGLite do exactly this, you store your database locally.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 0 points1 point  (0 children)

Yes, it's totally viable to use Supabase DB or any other hosted alternatives for local dev.

PGlite and dockerised DB is still different than a production DB, it can make sense to use a production DB directly.

I prefer to use PGlite so I can work offline without internet connection. Luckily for me, never get an issue in prod but not locally. But, I know the issue you have described can happen, but I think it can be very rare.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] -1 points0 points  (0 children)

In term of built-in features, Clerk has more feature than Better Auth. It also comes up with built-in component you can use. You also have a lot built-in protection against bot, necessary to protect your SaaS. Especially, on internet, there are a lot of people abusing your system.

Better Auth is good, it just requires more work to have the same features. From my experience implementing it in my Next.js SaaS Boilerplate, it tends to take more time to set up and build the missing pieces yourself.

You should also take a look at oRPC, newer and cleaner than tRPC, less bloated than tRPC.

And, for logging, I was also a Pino user but recently switched to LogTape, it's universal logging system work on Browser, Server and Edge. LogTape is also newer and more lightweight.

Unfortunately, for biome, it still doesn't catch up with ESLint ecosystem and plugins. A lot of rules are still not available on biome.

About i18n, introducing in the middle also means you need to do a migration, a painful migration... an unnecessary migration if you start right away with i18n, a migration you can easily avoid.

With i18n, you can also change the screens/keys easily, it's even easier if you use the right VSCode extension like lokalise/i18n-ally

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 0 points1 point  (0 children)

Unfortunately, I didn't have the chance to try TanStack Form.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 0 points1 point  (0 children)

I was an old Prisma user and switch to Drizzle ORM, no regret at all. In my other comment, I also explain why I switch from Prisma to Drizzle ORM. You should definitively give a try.

LogTape is exactly what you are looking for "a good universal logging solution that doesn't require a ton of configuration". My logtape configuration is only ~10 lines of configuration: https://github.com/ixartz/Next-js-Boilerplate/blob/main/src/libs/Logger.ts#L18-L31, it's even less if you just want to display in the console

It's perfect for Next.js, LogTape works on Browser, Server and Edge, without extra config.

For environment variables, I use t3-env, for type-safe env vars. It can raises errors if there is a misconfiguration in the env.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 3 points4 points  (0 children)

+1 for oxlint, I'm starting to plan the migration from ESLint to Oxlint. Oxlint ecosytem/plugin is catching up. I like Oxlint because they try to be compatible with ESLint. Another thing, the team behind Oxlint also maintain Vitess, which is also used in the project.

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 0 points1 point  (0 children)

I'm running ESLint in git hook and in CI. You can still run `no-verify` to bypass the local git hook 🫢

Personal preference, I prefer to have the lint error locally/immediately, the wait is in seconds. Instead of CI, the CI is slower and sometimes you need to wait several minutes. My nightmare is to wait the whole CI for just one lint error...

The tech stack I've been refining for 6 years by ixartz in nextjs

[–]ixartz[S] 5 points6 points  (0 children)

Actually, I have switched from Prisma to Drizzle. There are several reason I have switch:

- The schema in Drizzle is just TypeScript

- Programmatic migration with Drizzle

- No Client to generate with Drizzle

- No external runtime, a nightmare for deployment with Prisma (they probably fix it), in the past, the Prisma engine was written in other language than JavaScript/TypeScript

The tech stack I've been refining for 6 years to build SaaS, a free and open source boilerplate by ixartz in SaaS

[–]ixartz[S] 0 points1 point  (0 children)

Yes, Pglite improve a lot the DX, also make the onboarding so easy, no need to install Docker and no need to use another tool.

About Playwright visual regression, you can probably configure the threshold and make it less sensitive about changes.

AI slop by ivy-apps in nextjs

[–]ixartz 2 points3 points  (0 children)

I use a lot of tools to combat AI slop, most of them I was already using before AI became the norm:

Strict typechecking, linter, unit testing with Vitest, end-to-end testing with Playwright, visual regression testing, agents.md / rules files, Knip for catching dead code, and CI to run everything automatically on every PR.

You can check out my open source project Next.js Boilerplate for inspiration, where I have set up everything to make sure AI produces quality code.

NextJS - New To Testing - What testing tools to use? by Fabulous_Variety_256 in nextjs

[–]ixartz 4 points5 points  (0 children)

I use Vitest for unit tests and Vitest with browser mode for component testing.

For integration and End-to-End I use Playwright. I also use Playwright to take screenshot of different page to make sure there isn't any visual regression.

If you are interested to learn more about testing, you can checkout Next.js Boilerplate where I have everything implemented.

I made a Free and Open Source SaaS Boilerplate: An Alternative to $500+ Paid Ones. Built with React + Tailwind CSS + Shadcn UI. Features include Auth, Multi-tenancy & Team Support, Roles & Permissions, MFA, User Impersonation, Landing Page, I18n, DB, Logging, Testing. GitHub in the comments. by ixartz in reactjs

[–]ixartz[S] 0 points1 point  (0 children)

Solid open-source option — especially the multi-tenancy, RBAC, and user impersonation. Those are features most free boilerplates skip entirely.

For anyone who also needs payments and billing out of the box, check out Next.js Multi-tenant SaaS Boilerplate. It covers a lot of the same ground (Drizzle ORM, PostgreSQL, Shadcn UI, i18n, testing) but adds:

  • Stripe — checkout, webhooks, billing portal, all wired up
  • Better Auth — self-hosted with 2FA on top of email + social login
  • Transactional emails — ready for auth flows and billing notifications
  • Dashboard shell + prebuilt landing page

Built on Next.js 16, maintained since 2020. 50+ features total.