Integrates Vite, @vitejs/plugin-react and Tailwind CSS v4 (via @tailwindcss/vite)
vite-react-tailwind-lint — Vite Starter Template
By marcop135
A Vite + React + Tailwind CSS starter template preconfigured with ESLint, Stylelint, HTMLHint, Prettier, Vitest, Testing Library, Husky and a GitHub Actions release workflow.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Preconfigured ESLint (with the react, react-hooks and react-refresh plugins), Stylelint, HTMLHint and Prettier (with the Tailwind plugin)
Tests with Vitest (jsdom environment, with UI and coverage modes) and Testing Library
Pre-commit checks set up via Husky + lint-staged
Includes GitHub Actions CI, tag-driven releases, biweekly patch releases and Dependabot auto-merge workflows
Provides a deployment workflow that mirrors dist/ to the FTP root via SFTP or FTPS and purges the Cloudflare cache
Template Details
This template is aimed at developers who want to start a relatively small React application quickly without manually configuring linting, formatting, testing and release pipelines. The README explicitly lists the integrated Vite, @vitejs/plugin-react, Tailwind CSS v4 (via @tailwindcss/vite), and ESLint (with the react, react-hooks and react-refresh plugins), Stylelint, HTMLHint, Prettier (with prettier-plugin-tailwindcss), Vitest (jsdom environment, with UI and coverage modes), Testing Library, and Husky + lint-staged pre-commit hooks. GitHub Actions covers CI, tag-driven releases, biweekly patch releases, and Dependabot auto-merge for patch/minor updates and in-range npm update auto-merge.
The project structure is described in the README: src/ contains components, test setup, the entry point and the Tailwind directive stylesheet; public/ holds static assets copied as-is to dist/ (including .htaccess, a privacy page, a 404 page and matomo.js); scripts/ contains release helper scripts and a version-locking script. Configuration is spread across files such as eslint.config.js, .stylelintrc, .htmlhintrc, prettier.config.mjs, vitest.config.js, .editorconfig, .nvmrc and .lintstagedrc.js.
For deployment, the README states that the site is hosted on Netsons behind Cloudflare, and that deploy.yml runs tests, builds, mirrors dist/ to the FTP root via SFTP or FTPS, then purges the Cloudflare cache when pushing to main or on manual trigger. public/.htaccess sets up SPA fallback, security headers, CSP and caching. Analytics uses self-hosted, cookie-free Matomo, loaded by public/matomo.js; when using the template, that file and the corresponding script tag in index.html should be removed.
Limitations and undocumented items: the README does not provide visual design details, a page feature list or a statement of production readiness for the template; the preview screenshots only show that desktop and mobile screenshots exist, not that the pages function. Node.js v22.22.2+ is required, and the README states that Vite 8 sets this lower bound. The release process depends on the develop and main branch conventions and tags; specific steps must follow the Releases section of the README.
Is it right for your project?
Use Cases
- Quickly starting a small React app with linting, formatting and testing already configured
- Using Tailwind CSS v4 with the related build and formatting plugins already set up
- Projects that need a preset GitHub Actions CI and tag-based release process
- Sites that need to deploy static build output over FTP with Cloudflare cache purging
Suitable For
- React developers who want to reduce initial toolchain setup time
- Small front-end projects that need standardized linting and testing workflows
- Teams using GitHub Actions for CI and release management
- Projects using Tailwind CSS v4 that need Prettier to sort class names automatically
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, run npm install, then npm run dev to start the development server (default http://localhost:5173)
- 2
Requires Node.js v22.22.2+; .nvmrc pins the 22 series, so nvm use can be used
- 3
When using the template, remove public/matomo.js and the corresponding script tag in index.html to remove the self-hosted Matomo analytics
- 4
The deployment workflow depends on FTP/SFTP credentials and Cloudflare cache purge configuration in GitHub Actions; the README does not detail the specific secret setup
- 5
The release process depends on the develop and main branch conventions and version tags; see the Releases section of the README for specific steps
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis listing covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not mean external services or third-party assets are free.
Must comply with when using
- The code of this version may be used, modified, used commercially and distributed free of charge.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as-is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons and other third-party assets must be checked against their respective licenses; the code's MIT license alone cannot be used to judge them.
- External services such as domains, hosting, databases, payments or AI may incur separate charges.
- The deployment workflow depends on Netsons hosting, Cloudflare and SFTP/FTPS credentials; the README does not detail the specific secret setup, so it must be configured separately.
- Site analytics uses self-hosted, cookie-free Matomo, loaded by public/matomo.js; when using the template, that file and the corresponding script tag in index.html should be removed.
- Requires Node.js v22.22.2+ (.nvmrc pins the 22 series); the README states that Vite 8 sets this lower bound.
- Automated workflows (Husky pre-commit, GitHub Actions CI, tag releases, biweekly patch releases, Dependabot auto-merge) depend on the GitHub repository and branch conventions.
- The release process depends on the develop and main branch conventions and vX.Y.Z tags, and must be carried out according to the Releases section of the README.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
The site at [vitereact.marcopontili.com](https://vitereact.marcopontili.com) is hosted on Netsons behind Cloudflare. `.github/workflows/deploy.yml` runs on every push to `main` (or a manual dispatch from `main`): it tests, builds, mirrors `dist/` to the FTP root over SFTP or FTPS, then purges the Cloudflare cache for the host. `public/.htaccess` sets the SPA fallback, security headers, CSP and caching. Analytics is a self-hosted, cookieless Matomo loaded from `public/matomo.js`; delete that file and its `<script>` tag in `index.html` when you use the starter.
Original README
The site at [vitereact.marcopontili.com](https://vitereact.marcopontili.com) is hosted on Netsons behind Cloudflare. `.github/workflows/deploy.yml` runs on every push to `main` (or a manual dispatch from `main`): it tests, builds, mirrors `dist/` to the FTP root over SFTP or FTPS, then purges the Cloudflare cache for the host. `public/.htaccess` sets the SPA fallback, security headers, CSP and caching. Analytics is a self-hosted, cookieless Matomo loaded from `public/matomo.js`; delete that file and its `<script>` tag in `index.html` when you use the starter.
Original README
- [Node.js](https://nodejs.org/en) v22.22.2+ (the 22 line is pinned in `.nvmrc`, run `nvm use`); Vite 8 sets that floor
Original README
- **Automation:** Husky + lint-staged pre-commit, GitHub Actions for CI, tag-driven releases, biweekly patch releases, auto-merge for Dependabot patch/minor and the biweekly in-range `npm update`
Original README
https://github.com/marcop135/vite-react-tailwind-lint/blob/main/LICENSEhttps://github.com/marcop135/vite-react-tailwind-lint/blob/main/README.mdChanges land on `develop`, then a release commit (`chore(release): vX.Y.Z`) merges to `develop`, the merge is tagged `vX.Y.Z`, and `main` is merged up from `develop`. The `release.yml` workflow then runs `release:check` against the tag and publishes a GitHub Release whose body is built from `CHANGELOG.md` by `scripts/release-notes-from-changelog.mjs`.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-18. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 85 / 100
- Technologies
- Vite · React
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-10-17
- Screenshot last checked
- 2026-10-18
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Vite as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: codex-user-requested-batch-review-20261021 · 2026-10-21
Inspect the recorded source material
SHA-256: db06e59283e82c7fa12dd56a6d2e658253599abe2e6422202db0c009465ef86d
2026-10-18T22:47:51.024Z
Source file / repository<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/brand/readme-dark.png" />
<source media="(prefers-color-scheme: light)" srcset=".github/brand/readme.png" />
<img src=".github/brand/readme.png" alt="Vite logo tile, the name Vite + React + Tailwind and the line React, Tailwind and Vite, already linted and tested, beside stacked Tailwind CSS, React and Vite planes" width="900" />
</picture>
</p>
# Vite + React + Tailwind CSS Starter
[](https://github.com/marcop135/vite-react-tailwind-lint/actions/workflows/ci.yml)
[](https://github.com/marcop135/vite-react-tailwind-lint/releases)
[](./LICENSE)
A [Vite](https://vitejs.dev/) starter for React + Tailwind CSS with linting, formatting, tests, and a tagged-release pipeline already wired up. Site: [vitereact.marcopontili.com](https://vitereact.marcopontili.com).
Use this when you want a small React app and you do not want to spend half a day configuring ESLint, Stylelint, HTMLHint, Prettier, Vitest, Testing Library, Husky, and a release workflow yourself.
## Quick start
```bash
git clone https://github.com/marcop135/vite-react-tailwind-lint.git my-app
cd my-app && npm install
npm run dev
```
Dev server runs on `http://localhost:5173`.
## What's included
- **Build:** Vite, [`@vitejs/plugin-react`](https://github.com/vitejs/vite-plugin-react), [Tailwind CSS v4](https://tailwindcss.com/) via [`@tailwindcss/vite`](https://tailwindcss.com/docs/installation/using-vite)
- **Quality:** [ESLint](https://eslint.org/) (with `eslint-plugin-react`, `react-hooks`, `react-refresh`), [Stylelint](https://stylelint.io/) + `stylelint-config-standard`, [HTMLHint](https://htmlhint.com/), [Prettier](https://prettier.io/) + `prettier-plugin-tailwindcss`
- **Tests:** [Vitest](https://vitest.dev/) with UI + coverage modes, `jsdom` environment, [Testing Library](https://testing-library.com/) for React
- **Vite plugins:** [`vite-plugin-eslint2`](https://vite-plugin-eslint2.modyqyw.top/), [`vite-plugin-stylelint`](https://vite-plugin-stylelint.modyqyw.top/), [`rollup-plugin-visualizer`](https://github.com/btd/rollup-plugin-visualizer) (analyze)
- **Automation:** Husky + lint-staged pre-commit, GitHub Actions for CI, tag-driven releases, biweekly patch releases, auto-merge for Dependabot patch/minor and the biweekly in-range `npm update`
## Scripts
| Command | What it does |
| ----------------------- | --------------------------------------------------------- |
| `npm run dev` | Start Vite dev server |
| `npm run build` | Production build to `dist/` |
| `npm run preview` | Serve the production build locally |
| `npm run lint` | ESLint + Stylelint + HTMLHint |
| `npm run lint:fix` | Same, auto-fixing what's fixable |
| `npm run format` | Prettier write across `src/**` |
| `npm run format:check` | Prettier check (no writes) |
| `npm run test` | Vitest watch |
| `npm run test:ci` | Vitest single run |
| `npm run test:ui` | Vitest UI |
| `npm run test:coverage` | Vitest coverage report |
| `npm run analyze` | Build with bundle visualizer, opens `dist/stats.html` |
| `npm run audit` | `npm audit` across the full tree (dev included) |
| `npm run audit:prod` | `npm audit --omit=dev --audit-level=moderate` |
| `npm run audit:fix` | `npm audit fix` |
| `npm run release:check` | Same gates as CI: lint, format, test, build, `audit:prod` |
| `npm run clean` | Remove `dist/` and `coverage/` |
## Project layout
```
src/
components/ React components (App scaffolding, Error Boundary, lazy route)
test/ setup.js (testing-library jest-dom)
App.jsx root component
main.jsx entry, mounts <App />
style.css Tailwind directives
public/ copied as-is to dist/ (favicons, OG image, .htaccess, privacy and 404 pages, matomo.js)
.github/brand/ README, OG and social images (SVG sources, render script, fonts)
scripts/ release helpers and stack-versions.mjs (lockfile versions for the landing page)
index.html Vite entry, references src/main.jsx
vite.config.js build + test config + bundle analyzer toggle
```
## Configuration
| File | Purpose |
| ----------------------------------- | ------------------------------------- |
| `eslint.config.js` | ESLint flat config with React plugins |
| `.stylelintrc` + `.stylelintignore` | Stylelint |
| `.htmlhintrc` | HTMLHint |
| `prettier.config.mjs` | Prettier + Tailwind plugin |
| `vitest.config.js` | Vitest |
| `.editorconfig` + `.nvmrc` | Editor + Node version pinning |
| `.lintstagedrc.js` | lint-staged pre-commit config |
Production builds set `build.sourcemap: 'hidden'`: maps are produced for crash-reporting tooling but never referenced from the built JS. `vite build --mode development` (or `--mode analyze`) emits full referenced sourcemaps for local debugging. `dist/` and `coverage/` are build output, untracked, and not published.
## Deployment
The site at [vitereact.marcopontili.com](https://vitereact.marcopontili.com) is hosted on Netsons behind Cloudflare. `.github/workflows/deploy.yml` runs on every push to `main` (or a manual dispatch from `main`): it tests, builds, mirrors `dist/` to the FTP root over SFTP or FTPS, then purges the Cloudflare cache for the host. `public/.htaccess` sets the SPA fallback, security headers, CSP and caching. Analytics is a self-hosted, cookieless Matomo loaded from `public/matomo.js`; delete that file and its `<script>` tag in `index.html` when you use the starter.
## Releases
Changes land on `develop`, then a release commit (`chore(release): vX.Y.Z`) merges to `develop`, the merge is tagged `vX.Y.Z`, and `main` is merged up from `develop`. The `release.yml` workflow then runs `release:check` against the tag and publishes a GitHub Release whose body is built from `CHANGELOG.md` by `scripts/release-notes-from-changelog.mjs`.
A scheduled workflow (`scheduled-patch-release.yml`) runs the bump, PR, merge, tag, and `main` sync biweekly on the 3rd and 17th UTC. The sync merges rather than fast-forwards, so a commit that lands on `main` alone (Dependabot security PRs target the default branch) cannot wedge the pipeline. See [`CHANGELOG.md`](./CHANGELOG.md) for the full history.
Two days ahead of it, `scheduled-npm-update.yml` opens an in-range `npm update` PR on the 1st and 15th and auto-merges it once CI passes, so the release picks the bumps up unattended. Only major bumps still need a human.
### Audit gate
`release:check` blocks on production dependencies only (`npm run audit:prod`). CI additionally runs a non-blocking full-tree `npm audit` so dev-toolchain advisories stay visible without being able to freeze releases when upstream has not published a fix yet. Run `npm run audit:fix` to clear them.
## Requirements
- [Node.js](https://nodejs.org/en) v22.22.2+ (the 22 line is pinned in `.nvmrc`, run `nvm use`); Vite 8 sets that floor
## Contributing
See [CONTRIBUTING.md](./CONTRIBUTING.md). Bug reports and feature requests go through [issues](https://github.com/marcop135/vite-react-tailwind-lint/issues). Vulnerabilities go through [SECURITY.md](./SECURITY.md) instead, and participation is covered by the [Code of Conduct](./CODE_OF_CONDUCT.md).
## Author
[Marco Pontili](https://marcopontili.com)
## License
[MIT](./LICENSE)
Explore similar templates
Compare previews and descriptions within the same stack and category.

cove
Cove is a minimal TanStack Start starter template maintained by mugnavo, integrating React, TanStack Router/Query, Tailwind CSS, shadcn/ui, Drizzle ORM with PostgreSQL, Better Auth, Vite Plus, and Nitro.
Vite · SaaS

vite-react-boilerplate
A production-ready Vite + React starter template with TypeScript, Tailwind CSS, TanStack Router/Query/Table, Storybook, React Hook Form + Zod, Vitest and Playwright testing, plus Husky/Commitizen/Commitlint commit conventions.
Vite · Starter

vital
Vital is a Vite-based React starter template using TypeScript and Tailwind CSS, with an Atomic Design component directory, path aliases and Hero Icons.
Vite · Starter

react-vite-admin
A backend management starter built on Vite and React, integrating Recoil, React Query, TypeScript, and Axios, with Ant Design-style interface screenshots. Suitable as a starting point for management-side projects, licensed under MIT, with Chinese documentation and common scripts.
Vite · Admin dashboard

typescript-react_best_practices-vite_template
A Vite + React + TypeScript starter template by CodelyTV, preconfigured with Jest and React Testing Library unit tests, Cypress end-to-end tests, ESLint and Prettier using Codely's shared configuration, GitHub Actions workflows, a Makefile, and Sass.
Vite · Starter

cloudflare-starter-kit
A Cloudflare Workers project scaffolding template maintained by kriasoft, using Vite and TypeScript, with three built-in workspaces: api, app, and edge, and preconfigured local testing, multiple environments, and a GitHub Actions deployment workflow.
Vite · Starter
