diff --git a/.ai/core.blade.php b/.ai/core.blade.php index dbfb390..321ba6c 100644 --- a/.ai/core.blade.php +++ b/.ai/core.blade.php @@ -16,6 +16,7 @@ ## Conventions - You must follow all existing code conventions used in this project. When creating or editing a file, check sibling files for the correct structure, approach, naming. - Use descriptive names. For example, `isRegisteredForDiscounts` not `discount()`. +- Check for existing components to reuse before writing one anew. ## Verification Scripts - Do not create verification scripts or tinker when tests cover that functionality and prove it works. Unit and feature tests are more important. diff --git a/.ai/tailwindcss/3/core.blade.php b/.ai/tailwindcss/3/core.blade.php new file mode 100644 index 0000000..fd61e7a --- /dev/null +++ b/.ai/tailwindcss/3/core.blade.php @@ -0,0 +1,2 @@ +- Always use Tailwind CSS v3, verify you're using only supported classes. +- Use the `search-docs` tool to find exactly what's supported in this project's Tailwind setup. diff --git a/.ai/tailwindcss/4/core.blade.php b/.ai/tailwindcss/4/core.blade.php new file mode 100644 index 0000000..5187aae --- /dev/null +++ b/.ai/tailwindcss/4/core.blade.php @@ -0,0 +1,31 @@ +- Always use Tailwind CSS v4, do not use the deprecated utilities. +- Use the `search-docs` tool to find exactly what's supported in this project's Tailwind setup. +- In Tailwind v4 you import Tailwind using a regular CSS `@import` statement, not using the `@tailwind` directives used in v3: +@verbatim + +@endverbatim +- `corePlugins` is not supported in v4. + +## Replaced utilities +- Tailwind v4 removed deprecated utilities. Do not use the deprecated option, use the replacement. +- Opacity values are still numeric. + +| Deprecated | Replacement | +|------------+--------------| +| bg-opacity-* | bg-black/* | +| text-opacity-* | text-black/* | +| border-opacity-* | border-black/* | +| divide-opacity-* | divide-black/* | +| ring-opacity-* | ring-black/* | +| placeholder-opacity-* | placeholder-black/* | +| flex-shrink-* | shrink-* | +| flex-grow-* | grow-* | +| overflow-ellipsis | text-ellipsis | +| decoration-slice | box-decoration-slice | +| decoration-clone | box-decoration-clone | + diff --git a/.ai/tailwindcss/core.blade.php b/.ai/tailwindcss/core.blade.php index ee729df..77c41c3 100644 --- a/.ai/tailwindcss/core.blade.php +++ b/.ai/tailwindcss/core.blade.php @@ -1 +1,18 @@ -- If existing pages and components support dark mode, new pages and components must support dark mode in a similar way. +- Use Tailwind CSS classes to style HTML, check and use existing tailwind conventions within the project before writing your own. +- Offer to extract repeated patterns into components that match the project's conventions (i.e. Blade, JSX, Vue, etc..) +- Think through class placement, order, priority, and defaults - remove redundant classes, add classes to parent or child carefully to limit repetition, group elements logically + +## Spacing +- Use gap utilities for spacing, don't use margins +@verbatim + +
+
Superior
+
Michigan
+
Erie
+
+
+@endverbatim + +## Tailwind Dark Mode +- If existing pages and components support dark mode, new pages and components must support dark mode in a similar way, typically using `dark:`. diff --git a/art/boost.svg b/art/boost.svg index 557c963..d1c22c0 100644 --- a/art/boost.svg +++ b/art/boost.svg @@ -1,58 +1,87 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + Icon + + + + + + + + + + + + + + + + + + + + + Laravel + + + + + + + + + + Boost + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Console/InstallCommand.php b/src/Console/InstallCommand.php index f791b7c..5d19609 100644 --- a/src/Console/InstallCommand.php +++ b/src/Console/InstallCommand.php @@ -513,7 +513,7 @@ private function enactMcpServers(): void try { $result = $ide->installMcp( key: 'herd', - command: PHP_BINARY, + command: 'php', args: [$this->herd->mcpPath()], env: ['SITE_PATH' => base_path()] ); diff --git a/src/Install/Herd.php b/src/Install/Herd.php index 3501fa9..9a1db2c 100644 --- a/src/Install/Herd.php +++ b/src/Install/Herd.php @@ -41,7 +41,7 @@ public function mcpPath(): string return $this->getHomePath().'/.config/herd/bin/herd-mcp.phar'; } - return $this->getHomePath().'/Library/Application Support/Herd/bin/herd-mcp.phar'; + return '/Applications/Herd.app/Contents/Resources/herd-mcp.phar'; } public function isWindowsPlatform(): bool diff --git a/tests/Unit/Install/HerdTest.php b/tests/Unit/Install/HerdTest.php index 8cb4b04..1bbaead 100644 --- a/tests/Unit/Install/HerdTest.php +++ b/tests/Unit/Install/HerdTest.php @@ -67,22 +67,11 @@ function getHerdTestTempDir(): string return $herdTestCleanupData['tempDir']; } -test('mcpPath builds correct path from HOME on non-Windows', function () { - $testHome = getHerdTestTempDir().'/home'; - mkdir($testHome, 0755, true); - $_SERVER['HOME'] = $testHome; - - $herd = new Herd(); - $expected = $testHome.'/Library/Application Support/Herd/bin/herd-mcp.phar'; - - expect($herd->mcpPath())->toBe($expected); -})->skipOnWindows(); - test('mcpPath builds correct Windows path from USERPROFILE when HOME missing', function () { unset($_SERVER['HOME']); $_SERVER['USERPROFILE'] = 'C:\\Users\\TestUser'; - $herd = new Herd(); + $herd = new Herd; $expected = 'C:/Users/TestUser/.config/herd/bin/herd-mcp.phar'; expect($herd->mcpPath())->toBe($expected); @@ -93,7 +82,7 @@ function getHerdTestTempDir(): string mkdir($testHome, 0755, true); $_SERVER['HOME'] = $testHome; - $herd = new Herd(); + $herd = new Herd; expect($herd->isMcpAvailable())->toBeFalse(); }); @@ -103,7 +92,7 @@ function getHerdTestTempDir(): string mkdir($testHome, 0755, true); $_SERVER['HOME'] = $testHome; - $herd = new Herd(); + $herd = new Herd; $mcpPath = $herd->mcpPath(); $mcpDir = dirname($mcpPath); @@ -112,14 +101,14 @@ function getHerdTestTempDir(): string file_put_contents($mcpPath, 'test phar content'); expect($herd->isMcpAvailable())->toBeTrue(); -}); +})->onlyOnWindows(); test('isMcpAvailable returns false after MCP file is removed', function () { $testHome = getHerdTestTempDir().'/home'; mkdir($testHome, 0755, true); $_SERVER['HOME'] = $testHome; - $herd = new Herd(); + $herd = new Herd; $mcpPath = $herd->mcpPath(); $mcpDir = dirname($mcpPath); @@ -132,14 +121,14 @@ function getHerdTestTempDir(): string unlink($mcpPath); expect($herd->isMcpAvailable())->toBeFalse(); -}); +})->onlyOnWindows(); test('getHomePath returns HOME on non-Windows', function () { $testHome = getHerdTestTempDir().'/home'; mkdir($testHome, 0755, true); $_SERVER['HOME'] = $testHome; - $herd = new Herd(); + $herd = new Herd; expect($herd->getHomePath())->toBe($testHome); })->skipOnWindows(); @@ -148,7 +137,7 @@ function getHerdTestTempDir(): string unset($_SERVER['HOME']); $_SERVER['USERPROFILE'] = 'C:\\Users\\TestUser'; - $herd = new Herd(); + $herd = new Herd; expect($herd->getHomePath())->toBe('C:/Users/TestUser'); })->onlyOnWindows(); @@ -161,7 +150,7 @@ function getHerdTestTempDir(): string $configDir = $testHome.'/.config/herd'; mkdir($configDir, 0755, true); - $herd = new Herd(); + $herd = new Herd; expect($herd->isInstalled())->toBeTrue(); })->onlyOnWindows(); @@ -171,19 +160,19 @@ function getHerdTestTempDir(): string mkdir($testHome, 0755, true); $_SERVER['HOME'] = $testHome; - $herd = new Herd(); + $herd = new Herd; expect($herd->isInstalled())->toBeFalse(); })->onlyOnWindows(); test('isWindowsPlatform returns true on Windows', function () { - $herd = new Herd(); + $herd = new Herd; expect($herd->isWindowsPlatform())->toBeTrue(); })->onlyOnWindows(); test('isWindowsPlatform returns false on non-Windows platforms', function () { - $herd = new Herd(); + $herd = new Herd; expect($herd->isWindowsPlatform())->toBeFalse(); })->skipOnWindows();