Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
e24f3bb
feat: add vite plus and move over oxlint and oxfmt prs
joshdonnell Mar 15, 2026
571e2ba
fix: linting
joshdonnell Mar 15, 2026
99c52fc
fix: remove defined package manager from package.json
joshdonnell Mar 15, 2026
cc73faf
fix: lint and fix bun issue with vite
joshdonnell Mar 15, 2026
9b7d76a
fix: incude correct version of node for oxlint
joshdonnell Mar 15, 2026
a35678d
ci: update to use the vite+ installer
joshdonnell Mar 15, 2026
ff9dc03
Merge branch 'main' into feat/move-to-vite+
joshdonnell Mar 19, 2026
6304444
chore: deps update
joshdonnell Mar 19, 2026
316fcc7
fix: remove overrides on the methods
joshdonnell Mar 19, 2026
03f4a0b
fix: tests issue with frozen lockfiles
joshdonnell Mar 19, 2026
1388a9b
feat: update files from main for vite + update
joshdonnell Mar 21, 2026
1f2378c
Merge branch 'main' into feat/move-to-vite+
joshdonnell Mar 21, 2026
d82160c
fix: update for composer and updates for linting
joshdonnell Mar 21, 2026
01a7f2b
fix: add missing dep
joshdonnell Mar 21, 2026
c7b5cb7
chore: fix for CI with babel and react
joshdonnell Mar 21, 2026
9436fee
Merge branch 'main' into feat/move-to-vite+
joshdonnell Mar 21, 2026
e083785
fix: issue with babel as no longer required
joshdonnell Mar 21, 2026
2af0d05
fix: ordering for imports
joshdonnell Mar 21, 2026
8929810
fix: revert change
joshdonnell Mar 21, 2026
a6d8f78
Merge branch 'main' into feat/move-to-vite+
joshdonnell Mar 21, 2026
615cc45
fix: vite config post merge
joshdonnell Mar 21, 2026
12c25ff
fix: add ignore list
joshdonnell Mar 21, 2026
ed30375
fix: remove babel as no longer include in v6 vite plugin
joshdonnell Mar 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2

- name: Setup Node
uses: actions/setup-node@v4
- name: Setup Vite+
uses: voidzero-dev/setup-vp@v1
with:
node-version: 24

Expand Down Expand Up @@ -60,7 +60,7 @@ jobs:
run: php artisan key:generate

- name: Install Bun Dependencies
run: bun install --frozen-lockfile
run: bun install

- name: Build Assets
run: bun run build
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Modern PHP has evolved into a mature, type-safe language, yet many Laravel proje
- **Fully Actions-Oriented Architecture**: Every operation is encapsulated in a single-action class
- **Cruddy by Design**: Standardized CRUD operations for all controllers, actions, and Inertia & React pages
- **100% Type Coverage**: Every method, property, and parameter is explicitly typed
- **Zero Tolerance for Code Smells**: Rector, PHPStan, OxLint, and Prettier at maximum strictness catch issues before they become bugs
- **Zero Tolerance for Code Smells**: Rector, PHPStan, OxLint, and Oxfmt at maximum strictness catch issues before they become bugs
- **Immutable-First Architecture**: Data structures favor immutability to prevent unexpected mutations
- **Fail-Fast Philosophy**: Errors are caught at compile-time, not runtime
- **Automated Code Quality**: Pre-configured tools ensure consistent, pristine code across your entire team
Expand Down Expand Up @@ -80,10 +80,10 @@ You should see 100% test coverage and all quality checks passing.
## Available Tooling

### Development
- `composer dev` - Starts Laravel server, queue worker, log monitoring, and Vite dev server concurrently
- `composer dev` - Starts Laravel server, queue worker, log monitoring, and Vite+ dev server concurrently

### Code Quality
- `composer lint` - Runs Rector (refactoring), Pint (PHP formatting), and Prettier (JS/TS formatting)
- `composer lint` - Runs Rector (refactoring), Pint (PHP formatting), and Oxfmt (JS/TS formatting)
- `composer test:lint` - Dry-run mode for CI/CD pipelines

### Testing
Expand Down
2 changes: 1 addition & 1 deletion resources/js/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import '../css/app.css';

const appName = import.meta.env.VITE_APP_NAME || 'Laravel';

createInertiaApp({
void createInertiaApp({
title: (title) => (title ? `${title} - ${appName}` : appName),
resolve: (name) =>
resolvePageComponent<ComponentType>(
Expand Down
2 changes: 1 addition & 1 deletion resources/js/components/two-factor-recovery-codes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export default function TwoFactorRecoveryCodes({

useEffect(() => {
if (!recoveryCodesList.length) {
fetchRecoveryCodes();
void fetchRecoveryCodes();
}
}, [recoveryCodesList.length, fetchRecoveryCodes]);

Expand Down
2 changes: 1 addition & 1 deletion resources/js/components/two-factor-setup-modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ export default function TwoFactorSetupModal({

useEffect(() => {
if (isOpen && !qrCodeSvg) {
fetchSetupData();
void fetchSetupData();
}
}, [isOpen, qrCodeSvg, fetchSetupData]);

Expand Down
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */,
"baseUrl": ".",
// "baseUrl": ".",
"paths": {
"@/*": ["./resources/js/*"]
},
Expand Down
39 changes: 28 additions & 11 deletions vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
import { wayfinder } from '@laravel/vite-plugin-wayfinder';
import {wayfinder} from '@laravel/vite-plugin-wayfinder';
import tailwindcss from '@tailwindcss/vite';
import react from '@vitejs/plugin-react';
import laravel from 'laravel-vite-plugin';
import { defineConfig } from 'vite-plus';
import {defineConfig} from 'vite-plus';

export default defineConfig({
lint: {
options: {
typeAware: true,
typeCheck: true,
},
plugins: ['eslint', 'typescript', 'unicorn', 'oxc', 'react'],
},
fmt: {
printWidth: 80,
tabWidth: 4,
Expand All @@ -13,32 +20,42 @@ export default defineConfig({
singleQuote: true,
overrides: [
{
files: ["**/*.yml"],
files: ['**/*.yml'],
options: {
tabWidth: 2,
},
},
],
sortTailwindcss: {
functions: ["clsx", "cn"],
stylesheet: "resources/css/app.css",
functions: ['clsx', 'cn'],
stylesheet: 'resources/css/app.css',
},
sortImports: {
groups: ["builtin", "external", "internal", "parent", "sibling", "index"],
groups: [
'builtin',
'external',
'internal',
'parent',
'sibling',
'index',
],
newlinesBetween: false,
},
ignorePatterns: [
'resources/js/components/ui/*',
'resources/views/mail/*',
'resources/js/actions/*',
'resources/js/routes/*',
'resources/js/wayfinder/*',
],
},
plugins: [
laravel({
input: ['resources/css/app.css', 'resources/js/app.tsx'],
ssr: 'resources/js/ssr.tsx',
refresh: true,
}),
react({
babel: {
plugins: ['babel-plugin-react-compiler'],
},
}),
react(),
tailwindcss(),
wayfinder({
formVariants: true,
Expand Down
Loading