diff --git a/.env.example b/.env.example index 7b49625a..6fb3de65 100644 --- a/.env.example +++ b/.env.example @@ -10,7 +10,9 @@ APP_FALLBACK_LOCALE=en APP_FAKER_LOCALE=en_US APP_MAINTENANCE_DRIVER=file -APP_MAINTENANCE_STORE=database +# APP_MAINTENANCE_STORE=database + +PHP_CLI_SERVER_WORKERS=4 BCRYPT_ROUNDS=12 @@ -47,11 +49,11 @@ REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=log +MAIL_SCHEME=null MAIL_HOST=127.0.0.1 MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index 9634a0ed..230257c2 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -1,4 +1,4 @@ -name: issues +name: Issues on: issues: diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml index 18b32b32..6f9f97ea 100644 --- a/.github/workflows/pull-requests.yml +++ b/.github/workflows/pull-requests.yml @@ -1,4 +1,4 @@ -name: pull requests +name: Pull Requests on: pull_request_target: diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index ebda6206..70352331 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -1,4 +1,4 @@ -name: update changelog +name: Update Changelog on: release: diff --git a/.gitignore b/.gitignore index 7fe978f8..bec2973a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,10 +4,12 @@ /public/hot /public/storage /storage/*.key +/storage/pail /vendor .env .env.backup .env.production +.phpactor.json .phpunit.result.cache Homestead.json Homestead.yaml @@ -16,4 +18,6 @@ npm-debug.log yarn-error.log /.fleet /.idea +/.nova /.vscode +/.zed diff --git a/app/Models/User.php b/app/Models/User.php index def621f4..749c7b77 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -9,12 +9,13 @@ use Illuminate\Notifications\Notifiable; class User extends Authenticatable { + /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable; /** * The attributes that are mass assignable. * - * @var array + * @var list */ protected $fillable = [ 'name', @@ -25,7 +26,7 @@ class User extends Authenticatable /** * The attributes that should be hidden for serialization. * - * @var array + * @var list */ protected $hidden = [ 'password', diff --git a/composer.json b/composer.json index ff1b16b1..06973a2f 100644 --- a/composer.json +++ b/composer.json @@ -1,4 +1,5 @@ { + "$schema": "https://getcomposer.org/schema.json", "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", @@ -11,10 +12,16 @@ }, "require-dev": { "fakerphp/faker": "^1.23", + "laravel/pail": "^1.1", "laravel/pint": "^1.13", "laravel/sail": "dev-develop", "mockery/mockery": "^1.6", +<<<<<<< HEAD "phpunit/phpunit": "^10.5" +======= + "nunomaduro/collision": "^8.1", + "phpunit/phpunit": "^11.0.1" +>>>>>>> 11.x }, "autoload": { "psr-4": { @@ -43,6 +50,10 @@ "@php artisan key:generate --ansi", "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", "@php artisan migrate --graceful --ansi" + ], + "dev": [ + "Composer\\Config::disableProcessTimeout", + "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite" ] }, "extra": { diff --git a/config/cache.php b/config/cache.php index 3eb95d10..925f7d2e 100644 --- a/config/cache.php +++ b/config/cache.php @@ -26,7 +26,7 @@ return [ | well as their drivers. You may even define multiple stores for the | same cache driver to group types of items stored in your caches. | - | Supported drivers: "apc", "array", "database", "file", "memcached", + | Supported drivers: "array", "database", "file", "memcached", | "redis", "dynamodb", "octane", "null" | */ @@ -40,9 +40,10 @@ return [ 'database' => [ 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), 'table' => env('DB_CACHE_TABLE', 'cache'), - 'connection' => env('DB_CACHE_CONNECTION', null), - 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION', null), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), ], 'file' => [ diff --git a/config/database.php b/config/database.php index f8e8dcb8..125949ed 100644 --- a/config/database.php +++ b/config/database.php @@ -37,6 +37,9 @@ return [ 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, ], 'mysql' => [ diff --git a/config/filesystems.php b/config/filesystems.php index 44fe9c82..b564035a 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -24,7 +24,7 @@ return [ | may even configure multiple disks for the same driver. Examples for | most supported storage drivers are configured here for reference. | - | Supported Drivers: "local", "ftp", "sftp", "s3" + | Supported drivers: "local", "ftp", "sftp", "s3" | */ @@ -32,7 +32,8 @@ return [ 'local' => [ 'driver' => 'local', - 'root' => storage_path('app'), + 'root' => storage_path('app/private'), + 'serve' => true, 'throw' => false, ], diff --git a/config/logging.php b/config/logging.php index d526b64d..8d94292b 100644 --- a/config/logging.php +++ b/config/logging.php @@ -45,7 +45,7 @@ return [ | utilizes the Monolog PHP logging library, which includes a variety | of powerful log handlers and formatters that you're free to use. | - | Available Drivers: "single", "daily", "slack", "syslog", + | Available drivers: "single", "daily", "slack", "syslog", | "errorlog", "monolog", "custom", "stack" | */ diff --git a/config/mail.php b/config/mail.php index a4a02fe4..756305b3 100644 --- a/config/mail.php +++ b/config/mail.php @@ -30,7 +30,8 @@ return [ | your mailers below. You may also add additional mailers if needed. | | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", - | "postmark", "log", "array", "failover", "roundrobin" + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" | */ @@ -38,14 +39,14 @@ return [ 'smtp' => [ 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), 'url' => env('MAIL_URL'), 'host' => env('MAIL_HOST', '127.0.0.1'), 'port' => env('MAIL_PORT', 2525), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'local_domain' => env('MAIL_EHLO_DOMAIN'), + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)), ], 'ses' => [ @@ -60,6 +61,10 @@ return [ // ], ], + 'resend' => [ + 'transport' => 'resend', + ], + 'sendmail' => [ 'transport' => 'sendmail', 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), @@ -82,6 +87,14 @@ return [ ], ], + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + ], + ], /* diff --git a/config/queue.php b/config/queue.php index 4f689e9c..116bd8d0 100644 --- a/config/queue.php +++ b/config/queue.php @@ -36,10 +36,10 @@ return [ 'database' => [ 'driver' => 'database', - 'connection' => env('DB_QUEUE_CONNECTION', null), + 'connection' => env('DB_QUEUE_CONNECTION'), 'table' => env('DB_QUEUE_TABLE', 'jobs'), 'queue' => env('DB_QUEUE', 'default'), - 'retry_after' => env('DB_QUEUE_RETRY_AFTER', 90), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 'after_commit' => false, ], @@ -47,7 +47,7 @@ return [ 'driver' => 'beanstalkd', 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), 'queue' => env('BEANSTALKD_QUEUE', 'default'), - 'retry_after' => env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 'block_for' => 0, 'after_commit' => false, ], @@ -67,7 +67,7 @@ return [ 'driver' => 'redis', 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => env('REDIS_QUEUE_RETRY_AFTER', 90), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 'block_for' => null, 'after_commit' => false, ], diff --git a/config/services.php b/config/services.php index 6bb68f6a..27a36175 100644 --- a/config/services.php +++ b/config/services.php @@ -24,6 +24,10 @@ return [ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], + 'resend' => [ + 'key' => env('RESEND_KEY'), + ], + 'slack' => [ 'notifications' => [ 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), diff --git a/config/session.php b/config/session.php index 0e22ee41..f0b6541e 100644 --- a/config/session.php +++ b/config/session.php @@ -125,7 +125,6 @@ return [ | the framework. Typically, you should not need to change this value | since doing so does not grant a meaningful security improvement. | - | */ 'cookie' => env( diff --git a/package.json b/package.json index 4e934caa..0d104724 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,16 @@ "private": true, "type": "module", "scripts": { - "dev": "vite", - "build": "vite build" + "build": "vite build", + "dev": "vite" }, "devDependencies": { - "axios": "^1.6.4", + "autoprefixer": "^10.4.20", + "axios": "^1.7.4", + "concurrently": "^9.0.1", "laravel-vite-plugin": "^1.0", - "vite": "^5.0" + "postcss": "^8.4.47", + "tailwindcss": "^3.4.13", + "vite": "^6.0" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..49c0612d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/resources/css/app.css b/resources/css/app.css index e69de29b..b5c61c95 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index abe98dc3..979e82a6 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -8,16 +8,20 @@ - + - - + + @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) + @vite(['resources/css/app.css', 'resources/js/app.js']) + @else + + @endif
- + Laravel background
@@ -140,7 +144,7 @@ -
+
diff --git a/storage/app/.gitignore b/storage/app/.gitignore index 8f4803c0..fedb287f 100644 --- a/storage/app/.gitignore +++ b/storage/app/.gitignore @@ -1,3 +1,4 @@ * +!private/ !public/ !.gitignore diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/app/private/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000..ce0c57fc --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,20 @@ +import defaultTheme from 'tailwindcss/defaultTheme'; + +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/**/*.blade.php', + './resources/**/*.js', + './resources/**/*.vue', + ], + theme: { + extend: { + fontFamily: { + sans: ['Figtree', ...defaultTheme.fontFamily.sans], + }, + }, + }, + plugins: [], +};