When I was most recently in the process of interviewing at the start of 2025, it became useful to have an up-to-date and efficient front-end stack for coding interviews. This came in handy both for coding assessment projects as well as “live coding” evaluations.
I have huge affinity for Next.js and use it for most of my website projects (aside from this blog which has been using WordPress since somewhere around WordPress 2.5 in 2008).
However, for a fast and productive prototype stack for a coding interview, Vite ended up working a lot better. That led me to set up a reusable starter for a Vite app which I could quickly clone, fork, and push to a new (private) repo on GitHub.
My Vite Starter
- GitHub: calvinf/my-vite-starter
In building the starter, I had to make choices about which tools would allow me to move most quickly in a coding interview. Here’s what and why.
Runtime: Node.js
While Bun is wonderful, I’ve been using Node.js for much longer (pre-1.0) and trust myself to use it better in the context of a coding interview.
Package Manager: Bun
I regularly use npm
on projects and have previously used Yarn 4 with Node.js as well, but when I have a choice I’ve been opting for Bun due to its speed benefits. You can use Bun just for package management. You can also use it as a runtime and that can be a good choice depending on the project – though you’ll want to understand where it’s not compatible with Node.js (though they’re improving that a lot in the Bun 1.2.x series of releases).
Build tool: Vite
Vite is emerging as one of the most popular front-end build tool solutions. Frameworks like React Router and Remix build on top of Vite. Outside of building with Next.js (which builds on top of other tools like Turbo, SWC, and Webpack), Vite has become the build tool of choice for many.
Language: TypeScript
Whenever possible, I use TypeScript. Most of the projects I work on (aside from personal ones) involve teams of engineers and the type safety can be a huge time saver in those contexts. Particularly for defining shapes used to model data and call API endpoints – it makes it more clear what needs to be sent where.
I use it on personal projects and coding challenges, too, because it helps me make sure I’m not making avoidable mistakes where my editor (VS Code) can tell me that I’m doing something wrong just based on the types (let alone help from tooling like Copilot).
Frameworks: React 19, Tailwind 4
React is still the top choice due to popularity and is an effective way to build front-ends for both client-side and server-side rendering applications. Tailwind 4 has become one of the most popular and broadly used UI and styling frameworks due to its simplicity, ease of reuse, and these days the deep knowledge and number of examples LLMs can reference to give you better advice about the designs you’re trying to implement.
Code Quality: Eslint and Prettier
I go back and forth on Eslint vs. Biome and I use both in various projects. The Eslint 8 to 9 upgrade has been a little more painful than previous Eslint updates and as such I chose to migrate some of my projects to Biome instead. Biome has speed benefits, too. The main reason I used eslint here is because it has a broader plugin ecosystem (e.g., Tailwind).
If you’re using Eslint, you’ll want to grab Prettier as well for the code formatting. If you choose Biome, it includes formatting built-in. One of the best reasons to use Prettier is to avoid debates with other engineers over formatting decisions. Make it easy and make it obvious.
Unit Testing: bun:test
Yes, you can use Bun for tests even if you don’t use it for your runtime. The best feature it has going for it is speed. In a starter interview project it may not matter a whole lot, but if you’re working on a project with hundreds or thousands of tests that may make your life better.
Fortunately, Bun integrates well with React Testing Library and you can use Happy DOM with it.
While you still end up with a lot of dependencies in your lock file due to RTL and Happy DOM, I was happy to avoid using Jest which feels less and less maintained and supported over time despite being one of the kings of unit testing libraries since the initial rise of React in popularity. (I keep wondering when Jest is going to die off – I expect it will happen as soon as a viable alternative rises up, and maybe that’s something bun:test
.)
Not Seen Here
Other tools you should use, but I don’t have set up here currently, include husky and lint-staged. It’s helpful to automate things like running formatting, type checks, and linting before git commit. And I usually (unless it’s abismally slow) run unit tests before git push.
The Future of the Vite Starter
I will continue to evaluate the tools I use in my Vite starter over time. As mentioned in here, I’ve considered using Biome, and I may try out other things over time.
As it is, this is a fresh starter for a front-end app and I most recently updated it as I’m writing this post, on Saturday, May 3, 2025.