{ "app_info": { "name": "laravel\/laravel", "description": "The skeleton application for the Laravel framework.", "laravel_version": "^11.31", "php_version": "^8.2", "environment": "production", "debug_mode": true }, "files": { "app": { "app\/Providers\/AppServiceProvider.php": { "size": 361, "last_modified": 1731939524, "type": "provider", "content": "set('HTML.SafeIframe', true);\n $config->set('URI.SafeIframeRegexp', '%^(https?:)?\/\/(www\\.)?youtube\\.com\/embed\/%');\n $config->set('Core.Encoding', 'UTF-8');\n $config->set('Cache.SerializerPath', $cacheDir);\n $config->set('HTML.Doctype', 'XHTML 1.0 Transitional');\n $config->set('CSS.AllowedProperties', 'text-align,float,color,background-color,border,margin,padding,font-size,font-weight,font-style,font-family');\n\n \/\/ Then define custom elements\n $def = $config->getHTMLDefinition(true);\n if ($def) {\n $def->addElement('iframe', 'Block', 'Empty', 'Core', [\n 'src' => 'URI',\n 'width' => 'Length',\n 'height' => 'Length',\n 'frameborder' => 'Text',\n 'allowfullscreen' => 'Text',\n 'allow' => 'Text',\n 'title' => 'Text',\n 'referrerpolicy' => 'Text'\n ]);\n }\n\n $this->purifier = new HTMLPurifier($config);\n }\n\n public function clean(?string $content): ?string\n {\n if ($content === null) {\n return null;\n }\n\n \/\/ Preserve iframes before processing\n $content = preg_replace_callback('\/\/is', function($match) {\n $key = '{{IFRAME_' . count($this->preservedContent) . '}}';\n $this->preservedContent[$key] = $match[0];\n return $key;\n }, $content);\n\n \/\/ Process Markdown while allowing HTML\n $content = Str::markdown($content, [\n 'html_input' => 'allow',\n 'allow_unsafe_links' => false,\n ]);\n\n \/\/ Restore iframes before purification for trusted sources only\n foreach ($this->preservedContent as $key => $iframe) {\n if (strpos($iframe, 'youtube.com\/embed\/') !== false) {\n $content = str_replace($key, $iframe, $content);\n }\n }\n\n \/\/ Clear preserved content for next use\n $this->preservedContent = [];\n\n return $content;\n }\n}", "summary": { "namespace": "App\\Services", "class": "DescriptionPurifier", "method_count": 2, "uses": [ "HTMLPurifier", "HTMLPurifier_Config", "Illuminate\\Support\\Str", "$this->preservedContent = []" ] } }, "app\/Services\/NameEncryption.php": { "size": 1550, "last_modified": 1733346723, "type": "unknown", "content": "key = hash('sha256', config('app.key'), true);\n }\n \n public function encrypt(string $name): string\n {\n $iv = random_bytes(16);\n $encrypted = openssl_encrypt(\n $name,\n $this->cipher,\n $this->key,\n OPENSSL_RAW_DATA,\n $iv\n );\n \n if ($encrypted === false) {\n throw new \\RuntimeException('Encryption failed');\n }\n \n \/\/ Use URL-safe base64 encoding\n return strtr(base64_encode($iv . $encrypted), '+\/', '-_');\n }\n \n public function decrypt(string $encrypted): ?string\n {\n try {\n \/\/ Convert URL-safe base64 back to standard base64\n $encrypted = strtr($encrypted, '-_', '+\/');\n \n $decoded = base64_decode($encrypted, true);\n if ($decoded === false) {\n return null;\n }\n \n $iv = substr($decoded, 0, 16);\n $ciphertext = substr($decoded, 16);\n \n $decrypted = openssl_decrypt(\n $ciphertext,\n $this->cipher,\n $this->key,\n OPENSSL_RAW_DATA,\n $iv\n );\n \n return $decrypted === false ? null : $decrypted;\n } catch (\\Exception $e) {\n return null;\n }\n }\n}", "summary": { "namespace": "App\\Services", "class": "NameEncryption", "method_count": 3 } }, "app\/Models\/User.php": { "size": 1021, "last_modified": 1731939524, "type": "model", "content": " *\/\n use HasFactory, Notifiable;\n\n \/**\n * The attributes that are mass assignable.\n *\n * @var array\n *\/\n protected $fillable = [\n 'name',\n 'email',\n 'password',\n ];\n\n \/**\n * The attributes that should be hidden for serialization.\n *\n * @var array\n *\/\n protected $hidden = [\n 'password',\n 'remember_token',\n ];\n\n \/**\n * Get the attributes that should be cast.\n *\n * @return array\n *\/\n protected function casts(): array\n {\n return [\n 'email_verified_at' => 'datetime',\n 'password' => 'hashed',\n ];\n }\n}\n", "summary": { "namespace": "App\\Models", "class": "User", "method_count": 1, "uses": [ "Illuminate\\Contracts\\Auth\\MustVerifyEmail", "Illuminate\\Database\\Eloquent\\Factories\\HasFactory", "Illuminate\\Foundation\\Auth\\User as Authenticatable", "Illuminate\\Notifications\\Notifiable", "HasFactory<\\Database\\Factories\\UserFactory> *\/\n use HasFactory, Notifiable" ] } }, "app\/Models\/Attendee.php": { "size": 357, "last_modified": 1733262011, "type": "model", "content": "belongsTo(Event::class);\n }\n}", "summary": { "namespace": "App\\Models", "class": "Attendee", "method_count": 1, "uses": [ "Illuminate\\Database\\Eloquent\\Model" ] } }, "app\/Models\/Event.php": { "size": 1036, "last_modified": 1733350279, "type": "model", "content": " 'datetime',\n 'allow_open_registration' => 'boolean',\n 'attendee_limit' => 'integer'\n ];\n\n \/\/ Automatically generate slug from title\n protected static function boot()\n {\n parent::boot();\n \n static::creating(function ($event) {\n $event->slug = Str::slug($event->title);\n });\n }\n\n public function attendees()\n {\n return $this->hasMany(Attendee::class);\n }\n\n public function approvedAttendees()\n {\n return $this->hasMany(Attendee::class)->where('status', 'approved');\n }\n\n public function declinedAttendees()\n {\n return $this->hasMany(Attendee::class)->where('status', 'declined');\n }\n}", "summary": { "namespace": "App\\Models", "class": "Event", "method_count": 4, "uses": [ "Illuminate\\Database\\Eloquent\\Model", "Illuminate\\Support\\Str" ] } }, "app\/Http\/Controllers\/EventController.php": { "size": 348, "last_modified": 1733262764, "type": "controller", "content": "with('approvedAttendees')\n ->firstOrFail();\n return view('events.show', compact('event'));\n }\n}", "summary": { "namespace": "App\\Http\\Controllers", "class": "EventController", "method_count": 1, "uses": [ "App\\Models\\Event", "Illuminate\\Http\\Request" ] } }, "app\/Http\/Controllers\/AttendeeController.php": { "size": 2272, "last_modified": 1733350249, "type": "controller", "content": "validate([\n 'status' => 'required|in:pending,approved,declined',\n 'return_url' => 'required|url'\n ]);\n\n \/\/ If trying to approve and event is full\n if ($validated['status'] === 'approved' \n && $event->attendee_limit \n && $event->approvedAttendees->count() >= $event->attendee_limit\n && $attendee->status !== 'approved') { \/\/ Skip check if already approved\n return redirect($validated['return_url'])\n ->withErrors(['error' => 'This event is now full.']);\n }\n\n $attendee->update([\n 'status' => $validated['status'],\n 'approved_by' => $validated['status'] === 'approved' ? 'self' : null,\n 'approved_at' => $validated['status'] === 'approved' ? now() : null\n ]);\n\n return redirect($validated['return_url'])\n ->with('success', 'Your attendance status has been updated.');\n }\n\n public function store(Request $request, Event $event)\n {\n $request->validate([\n 'name' => 'required|string|max:255'\n ]);\n\n \/\/ Check if event is full\n if ($event->attendee_limit && $event->approvedAttendees->count() >= $event->attendee_limit) {\n return back()->withErrors(['error' => 'This event is now full.']);\n }\n\n \/\/ Create new attendee - always as pending when limit exists\n $attendee = $event->attendees()->create([\n 'name' => $request->name,\n 'status' => $event->attendee_limit ? 'pending' : 'approved' \/\/ Only auto-approve if no limit\n ]);\n\n \/\/ Generate the personal URL\n $encryptedName = (new NameEncryption)->encrypt($request->name);\n $personalUrl = url($event->slug . '?' . $encryptedName);\n\n return back()\n ->with('success', 'Registration successful!')\n ->with('registered', true)\n ->with('personalUrl', $personalUrl);\n }\n}", "summary": { "namespace": "App\\Http\\Controllers", "class": "AttendeeController", "method_count": 2, "uses": [ "App\\Models\\Event", "App\\Models\\Attendee", "Illuminate\\Http\\Request", "App\\Services\\NameEncryption" ] } }, "app\/Http\/Controllers\/AdminEventController.php": { "size": 1706, "last_modified": 1733260486, "type": "controller", "content": "get();\n return view('admin.events.index', compact('events'));\n }\n\n public function create()\n {\n return view('admin.events.create');\n }\n\n public function store(Request $request)\n {\n $validated = $request->validate([\n 'title' => 'required|max:255',\n 'description' => 'nullable',\n 'date' => 'required|date',\n 'allow_open_registration' => 'boolean',\n 'attendee_limit' => 'nullable|integer|min:1'\n ]);\n\n Event::create($validated);\n\n return redirect()->route('admin.events.index')\n ->with('success', 'Event created successfully.');\n }\n\n public function edit(Event $event)\n {\n return view('admin.events.edit', compact('event'));\n }\n\n public function update(Request $request, Event $event)\n {\n $validated = $request->validate([\n 'title' => 'required|max:255',\n 'description' => 'nullable',\n 'date' => 'required|date',\n 'allow_open_registration' => 'boolean',\n 'attendee_limit' => 'nullable|integer|min:1'\n ]);\n\n $event->update($validated);\n\n return redirect()->route('admin.events.index')\n ->with('success', 'Event updated successfully.');\n }\n\n public function destroy(Event $event)\n {\n $event->delete();\n return redirect()->route('admin.events.index')\n ->with('success', 'Event deleted successfully.');\n }\n}", "summary": { "namespace": "App\\Http\\Controllers", "class": "AdminEventController", "method_count": 6, "uses": [ "App\\Models\\Event", "Illuminate\\Http\\Request" ] } }, "app\/Http\/Controllers\/AdminAttendeeController.php": { "size": 2175, "last_modified": 1733262054, "type": "controller", "content": "attendees()->orderBy('created_at', 'desc')->get();\n return view('admin.attendees.index', compact('event', 'attendees'));\n }\n\n public function create(Event $event)\n {\n return view('admin.attendees.create', compact('event'));\n }\n\n public function store(Request $request, Event $event)\n {\n $validated = $request->validate([\n 'name' => 'required|string|max:255',\n 'status' => 'required|in:pending,approved,declined'\n ]);\n\n $attendee = $event->attendees()->create([\n 'name' => $validated['name'],\n 'status' => $validated['status'],\n 'approved_by' => 'admin',\n 'approved_at' => $validated['status'] === 'approved' ? now() : null\n ]);\n\n return redirect()->route('admin.events.attendees.index', $event)\n ->with('success', 'Attendee added successfully.');\n }\n\n public function edit(Event $event, Attendee $attendee)\n {\n return view('admin.attendees.edit', compact('event', 'attendee'));\n }\n\n public function update(Request $request, Event $event, Attendee $attendee)\n {\n $validated = $request->validate([\n 'name' => 'required|string|max:255',\n 'status' => 'required|in:pending,approved,declined'\n ]);\n\n $attendee->update([\n 'name' => $validated['name'],\n 'status' => $validated['status'],\n 'approved_by' => 'admin',\n 'approved_at' => $validated['status'] === 'approved' ? now() : null\n ]);\n\n return redirect()->route('admin.events.attendees.index', $event)\n ->with('success', 'Attendee updated successfully.');\n }\n\n public function destroy(Event $event, Attendee $attendee)\n {\n $attendee->delete();\n return redirect()->route('admin.events.attendees.index', $event)\n ->with('success', 'Attendee removed successfully.');\n }\n}", "summary": { "namespace": "App\\Http\\Controllers", "class": "AdminAttendeeController", "method_count": 6, "uses": [ "App\\Models\\Event", "App\\Models\\Attendee", "Illuminate\\Http\\Request" ] } }, "app\/Http\/Controllers\/Controller.php": { "size": 77, "last_modified": 1731939524, "type": "controller", "content": " env('LOG_CHANNEL', 'stack'),\n\n \/*\n |--------------------------------------------------------------------------\n | Deprecations Log Channel\n |--------------------------------------------------------------------------\n |\n | This option controls the log channel that should be used to log warnings\n | regarding deprecated PHP and library features. This allows you to get\n | your application ready for upcoming major versions of dependencies.\n |\n *\/\n\n 'deprecations' => [\n 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),\n 'trace' => env('LOG_DEPRECATIONS_TRACE', false),\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Log Channels\n |--------------------------------------------------------------------------\n |\n | Here you may configure the log channels for your application. Laravel\n | utilizes the Monolog PHP logging library, which includes a variety\n | of powerful log handlers and formatters that you're free to use.\n |\n | Available drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n | \"errorlog\", \"monolog\", \"custom\", \"stack\"\n |\n *\/\n\n 'channels' => [\n\n 'stack' => [\n 'driver' => 'stack',\n 'channels' => explode(',', env('LOG_STACK', 'single')),\n 'ignore_exceptions' => false,\n ],\n\n 'single' => [\n 'driver' => 'single',\n 'path' => storage_path('logs\/laravel.log'),\n 'level' => env('LOG_LEVEL', 'debug'),\n 'replace_placeholders' => true,\n ],\n\n 'daily' => [\n 'driver' => 'daily',\n 'path' => storage_path('logs\/laravel.log'),\n 'level' => env('LOG_LEVEL', 'debug'),\n 'days' => env('LOG_DAILY_DAYS', 14),\n 'replace_placeholders' => true,\n ],\n\n 'slack' => [\n 'driver' => 'slack',\n 'url' => env('LOG_SLACK_WEBHOOK_URL'),\n 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),\n 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),\n 'level' => env('LOG_LEVEL', 'critical'),\n 'replace_placeholders' => true,\n ],\n\n 'papertrail' => [\n 'driver' => 'monolog',\n 'level' => env('LOG_LEVEL', 'debug'),\n 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),\n 'handler_with' => [\n 'host' => env('PAPERTRAIL_URL'),\n 'port' => env('PAPERTRAIL_PORT'),\n 'connectionString' => 'tls:\/\/'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),\n ],\n 'processors' => [PsrLogMessageProcessor::class],\n ],\n\n 'stderr' => [\n 'driver' => 'monolog',\n 'level' => env('LOG_LEVEL', 'debug'),\n 'handler' => StreamHandler::class,\n 'formatter' => env('LOG_STDERR_FORMATTER'),\n 'with' => [\n 'stream' => 'php:\/\/stderr',\n ],\n 'processors' => [PsrLogMessageProcessor::class],\n ],\n\n 'syslog' => [\n 'driver' => 'syslog',\n 'level' => env('LOG_LEVEL', 'debug'),\n 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),\n 'replace_placeholders' => true,\n ],\n\n 'errorlog' => [\n 'driver' => 'errorlog',\n 'level' => env('LOG_LEVEL', 'debug'),\n 'replace_placeholders' => true,\n ],\n\n 'null' => [\n 'driver' => 'monolog',\n 'handler' => NullHandler::class,\n ],\n\n 'emergency' => [\n 'path' => storage_path('logs\/laravel.log'),\n ],\n\n ],\n\n];\n", "summary": { "method_count": 0, "uses": [ "Monolog\\Handler\\NullHandler", "Monolog\\Handler\\StreamHandler", "Monolog\\Handler\\SyslogUdpHandler", "Monolog\\Processor\\PsrLogMessageProcessor" ] } }, "config\/cache.php": { "size": 3476, "last_modified": 1731939524, "type": "config", "content": " env('CACHE_STORE', 'database'),\n\n \/*\n |--------------------------------------------------------------------------\n | Cache Stores\n |--------------------------------------------------------------------------\n |\n | Here you may define all of the cache \"stores\" for your application as\n | well as their drivers. You may even define multiple stores for the\n | same cache driver to group types of items stored in your caches.\n |\n | Supported drivers: \"array\", \"database\", \"file\", \"memcached\",\n | \"redis\", \"dynamodb\", \"octane\", \"null\"\n |\n *\/\n\n 'stores' => [\n\n 'array' => [\n 'driver' => 'array',\n 'serialize' => false,\n ],\n\n 'database' => [\n 'driver' => 'database',\n 'connection' => env('DB_CACHE_CONNECTION'),\n 'table' => env('DB_CACHE_TABLE', 'cache'),\n 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),\n 'lock_table' => env('DB_CACHE_LOCK_TABLE'),\n ],\n\n 'file' => [\n 'driver' => 'file',\n 'path' => storage_path('framework\/cache\/data'),\n 'lock_path' => storage_path('framework\/cache\/data'),\n ],\n\n 'memcached' => [\n 'driver' => 'memcached',\n 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n 'sasl' => [\n env('MEMCACHED_USERNAME'),\n env('MEMCACHED_PASSWORD'),\n ],\n 'options' => [\n \/\/ Memcached::OPT_CONNECT_TIMEOUT => 2000,\n ],\n 'servers' => [\n [\n 'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n 'port' => env('MEMCACHED_PORT', 11211),\n 'weight' => 100,\n ],\n ],\n ],\n\n 'redis' => [\n 'driver' => 'redis',\n 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),\n 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),\n ],\n\n 'dynamodb' => [\n 'driver' => 'dynamodb',\n 'key' => env('AWS_ACCESS_KEY_ID'),\n 'secret' => env('AWS_SECRET_ACCESS_KEY'),\n 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),\n 'endpoint' => env('DYNAMODB_ENDPOINT'),\n ],\n\n 'octane' => [\n 'driver' => 'octane',\n ],\n\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Cache Key Prefix\n |--------------------------------------------------------------------------\n |\n | When utilizing the APC, database, memcached, Redis, and DynamoDB cache\n | stores, there might be other applications using the same cache. For\n | that reason, you may prefix every cache key to avoid collisions.\n |\n *\/\n\n 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),\n\n];\n", "summary": { "method_count": 0, "uses": [ "Illuminate\\Support\\Str" ] } }, "config\/queue.php": { "size": 3824, "last_modified": 1731939524, "type": "config", "content": " env('QUEUE_CONNECTION', 'database'),\n\n \/*\n |--------------------------------------------------------------------------\n | Queue Connections\n |--------------------------------------------------------------------------\n |\n | Here you may configure the connection options for every queue backend\n | used by your application. An example configuration is provided for\n | each backend supported by Laravel. You're also free to add more.\n |\n | Drivers: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\n |\n *\/\n\n 'connections' => [\n\n 'sync' => [\n 'driver' => 'sync',\n ],\n\n 'database' => [\n 'driver' => 'database',\n 'connection' => env('DB_QUEUE_CONNECTION'),\n 'table' => env('DB_QUEUE_TABLE', 'jobs'),\n 'queue' => env('DB_QUEUE', 'default'),\n 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),\n 'after_commit' => false,\n ],\n\n 'beanstalkd' => [\n 'driver' => 'beanstalkd',\n 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),\n 'queue' => env('BEANSTALKD_QUEUE', 'default'),\n 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),\n 'block_for' => 0,\n 'after_commit' => false,\n ],\n\n 'sqs' => [\n 'driver' => 'sqs',\n 'key' => env('AWS_ACCESS_KEY_ID'),\n 'secret' => env('AWS_SECRET_ACCESS_KEY'),\n 'prefix' => env('SQS_PREFIX', 'https:\/\/sqs.us-east-1.amazonaws.com\/your-account-id'),\n 'queue' => env('SQS_QUEUE', 'default'),\n 'suffix' => env('SQS_SUFFIX'),\n 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n 'after_commit' => false,\n ],\n\n 'redis' => [\n 'driver' => 'redis',\n 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),\n 'queue' => env('REDIS_QUEUE', 'default'),\n 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),\n 'block_for' => null,\n 'after_commit' => false,\n ],\n\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Job Batching\n |--------------------------------------------------------------------------\n |\n | The following options configure the database and table that store job\n | batching information. These options can be updated to any database\n | connection and table which has been defined by your application.\n |\n *\/\n\n 'batching' => [\n 'database' => env('DB_CONNECTION', 'sqlite'),\n 'table' => 'job_batches',\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Failed Queue Jobs\n |--------------------------------------------------------------------------\n |\n | These options configure the behavior of failed queue job logging so you\n | can control how and where failed jobs are stored. Laravel ships with\n | support for storing failed jobs in a simple file or in a database.\n |\n | Supported drivers: \"database-uuids\", \"dynamodb\", \"file\", \"null\"\n |\n *\/\n\n 'failed' => [\n 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),\n 'database' => env('DB_CONNECTION', 'sqlite'),\n 'table' => 'failed_jobs',\n ],\n\n];\n", "summary": { "method_count": 0 } }, "config\/services.php": { "size": 1035, "last_modified": 1731939524, "type": "config", "content": " [\n 'token' => env('POSTMARK_TOKEN'),\n ],\n\n 'ses' => [\n 'key' => env('AWS_ACCESS_KEY_ID'),\n 'secret' => env('AWS_SECRET_ACCESS_KEY'),\n 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n ],\n\n 'resend' => [\n 'key' => env('RESEND_KEY'),\n ],\n\n 'slack' => [\n 'notifications' => [\n 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),\n 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),\n ],\n ],\n\n];\n", "summary": { "method_count": 0 } }, "config\/session.php": { "size": 7852, "last_modified": 1731939524, "type": "config", "content": " env('SESSION_DRIVER', 'database'),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Lifetime\n |--------------------------------------------------------------------------\n |\n | Here you may specify the number of minutes that you wish the session\n | to be allowed to remain idle before it expires. If you want them\n | to expire immediately when the browser is closed then you may\n | indicate that via the expire_on_close configuration option.\n |\n *\/\n\n 'lifetime' => env('SESSION_LIFETIME', 120),\n\n 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Encryption\n |--------------------------------------------------------------------------\n |\n | This option allows you to easily specify that all of your session data\n | should be encrypted before it's stored. All encryption is performed\n | automatically by Laravel and you may use the session like normal.\n |\n *\/\n\n 'encrypt' => env('SESSION_ENCRYPT', false),\n\n \/*\n |--------------------------------------------------------------------------\n | Session File Location\n |--------------------------------------------------------------------------\n |\n | When utilizing the \"file\" session driver, the session files are placed\n | on disk. The default storage location is defined here; however, you\n | are free to provide another location where they should be stored.\n |\n *\/\n\n 'files' => storage_path('framework\/sessions'),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Database Connection\n |--------------------------------------------------------------------------\n |\n | When using the \"database\" or \"redis\" session drivers, you may specify a\n | connection that should be used to manage these sessions. This should\n | correspond to a connection in your database configuration options.\n |\n *\/\n\n 'connection' => env('SESSION_CONNECTION'),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Database Table\n |--------------------------------------------------------------------------\n |\n | When using the \"database\" session driver, you may specify the table to\n | be used to store sessions. Of course, a sensible default is defined\n | for you; however, you're welcome to change this to another table.\n |\n *\/\n\n 'table' => env('SESSION_TABLE', 'sessions'),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Cache Store\n |--------------------------------------------------------------------------\n |\n | When using one of the framework's cache driven session backends, you may\n | define the cache store which should be used to store the session data\n | between requests. This must match one of your defined cache stores.\n |\n | Affects: \"apc\", \"dynamodb\", \"memcached\", \"redis\"\n |\n *\/\n\n 'store' => env('SESSION_STORE'),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Sweeping Lottery\n |--------------------------------------------------------------------------\n |\n | Some session drivers must manually sweep their storage location to get\n | rid of old sessions from storage. Here are the chances that it will\n | happen on a given request. By default, the odds are 2 out of 100.\n |\n *\/\n\n 'lottery' => [2, 100],\n\n \/*\n |--------------------------------------------------------------------------\n | Session Cookie Name\n |--------------------------------------------------------------------------\n |\n | Here you may change the name of the session cookie that is created by\n | the framework. Typically, you should not need to change this value\n | since doing so does not grant a meaningful security improvement.\n |\n *\/\n\n 'cookie' => env(\n 'SESSION_COOKIE',\n Str::slug(env('APP_NAME', 'laravel'), '_').'_session'\n ),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Cookie Path\n |--------------------------------------------------------------------------\n |\n | The session cookie path determines the path for which the cookie will\n | be regarded as available. Typically, this will be the root path of\n | your application, but you're free to change this when necessary.\n |\n *\/\n\n 'path' => env('SESSION_PATH', '\/'),\n\n \/*\n |--------------------------------------------------------------------------\n | Session Cookie Domain\n |--------------------------------------------------------------------------\n |\n | This value determines the domain and subdomains the session cookie is\n | available to. By default, the cookie will be available to the root\n | domain and all subdomains. Typically, this shouldn't be changed.\n |\n *\/\n\n 'domain' => env('SESSION_DOMAIN'),\n\n \/*\n |--------------------------------------------------------------------------\n | HTTPS Only Cookies\n |--------------------------------------------------------------------------\n |\n | By setting this option to true, session cookies will only be sent back\n | to the server if the browser has a HTTPS connection. This will keep\n | the cookie from being sent to you when it can't be done securely.\n |\n *\/\n\n 'secure' => env('SESSION_SECURE_COOKIE'),\n\n \/*\n |--------------------------------------------------------------------------\n | HTTP Access Only\n |--------------------------------------------------------------------------\n |\n | Setting this value to true will prevent JavaScript from accessing the\n | value of the cookie and the cookie will only be accessible through\n | the HTTP protocol. It's unlikely you should disable this option.\n |\n *\/\n\n 'http_only' => env('SESSION_HTTP_ONLY', true),\n\n \/*\n |--------------------------------------------------------------------------\n | Same-Site Cookies\n |--------------------------------------------------------------------------\n |\n | This option determines how your cookies behave when cross-site requests\n | take place, and can be used to mitigate CSRF attacks. By default, we\n | will set this value to \"lax\" to permit secure cross-site requests.\n |\n | See: https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Set-Cookie#samesitesamesite-value\n |\n | Supported: \"lax\", \"strict\", \"none\", null\n |\n *\/\n\n 'same_site' => env('SESSION_SAME_SITE', 'lax'),\n\n \/*\n |--------------------------------------------------------------------------\n | Partitioned Cookies\n |--------------------------------------------------------------------------\n |\n | Setting this value to true will tie the cookie to the top-level site for\n | a cross-site context. Partitioned cookies are accepted by the browser\n | when flagged \"secure\" and the Same-Site attribute is set to \"none\".\n |\n *\/\n\n 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),\n\n];\n", "summary": { "method_count": 0, "uses": [ "Illuminate\\Support\\Str", "the session like normal.\n |\n *\/\n\n 'encrypt' => env('SESSION_ENCRYPT', false),\n\n \/*\n |--------------------------------------------------------------------------\n | Session File Location\n |--------------------------------------------------------------------------\n |\n | When utilizing the \"file\" session driver, the session files are placed\n | on disk. The default storage location is defined here" ] } }, "config\/mail.php": { "size": 3554, "last_modified": 1731939524, "type": "config", "content": " env('MAIL_MAILER', 'log'),\n\n \/*\n |--------------------------------------------------------------------------\n | Mailer Configurations\n |--------------------------------------------------------------------------\n |\n | Here you may configure all of the mailers used by your application plus\n | their respective settings. Several examples have been configured for\n | you and you are free to add your own as your application requires.\n |\n | Laravel supports a variety of mail \"transport\" drivers that can be used\n | when delivering an email. You may specify which one you're using for\n | your mailers below. You may also add additional mailers if needed.\n |\n | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"ses\", \"ses-v2\",\n | \"postmark\", \"resend\", \"log\", \"array\",\n | \"failover\", \"roundrobin\"\n |\n *\/\n\n 'mailers' => [\n\n 'smtp' => [\n 'transport' => 'smtp',\n 'url' => env('MAIL_URL'),\n 'host' => env('MAIL_HOST', '127.0.0.1'),\n 'port' => env('MAIL_PORT', 2525),\n 'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n 'username' => env('MAIL_USERNAME'),\n 'password' => env('MAIL_PASSWORD'),\n 'timeout' => null,\n 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http:\/\/localhost'), PHP_URL_HOST)),\n ],\n\n 'ses' => [\n 'transport' => 'ses',\n ],\n\n 'postmark' => [\n 'transport' => 'postmark',\n \/\/ 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),\n \/\/ 'client' => [\n \/\/ 'timeout' => 5,\n \/\/ ],\n ],\n\n 'resend' => [\n 'transport' => 'resend',\n ],\n\n 'sendmail' => [\n 'transport' => 'sendmail',\n 'path' => env('MAIL_SENDMAIL_PATH', '\/usr\/sbin\/sendmail -bs -i'),\n ],\n\n 'log' => [\n 'transport' => 'log',\n 'channel' => env('MAIL_LOG_CHANNEL'),\n ],\n\n 'array' => [\n 'transport' => 'array',\n ],\n\n 'failover' => [\n 'transport' => 'failover',\n 'mailers' => [\n 'smtp',\n 'log',\n ],\n ],\n\n 'roundrobin' => [\n 'transport' => 'roundrobin',\n 'mailers' => [\n 'ses',\n 'postmark',\n ],\n ],\n\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Global \"From\" Address\n |--------------------------------------------------------------------------\n |\n | You may wish for all emails sent by your application to be sent from\n | the same address. Here you may specify a name and address that is\n | used globally for all emails that are sent by your application.\n |\n *\/\n\n 'from' => [\n 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),\n 'name' => env('MAIL_FROM_NAME', 'Example'),\n ],\n\n];\n", "summary": { "method_count": 0 } }, "config\/database.php": { "size": 6198, "last_modified": 1731939524, "type": "config", "content": " env('DB_CONNECTION', 'sqlite'),\n\n \/*\n |--------------------------------------------------------------------------\n | Database Connections\n |--------------------------------------------------------------------------\n |\n | Below are all of the database connections defined for your application.\n | An example configuration is provided for each database system which\n | is supported by Laravel. You're free to add \/ remove connections.\n |\n *\/\n\n 'connections' => [\n\n 'sqlite' => [\n 'driver' => 'sqlite',\n 'url' => env('DB_URL'),\n 'database' => env('DB_DATABASE', database_path('database.sqlite')),\n 'prefix' => '',\n 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n 'busy_timeout' => null,\n 'journal_mode' => null,\n 'synchronous' => null,\n ],\n\n 'mysql' => [\n 'driver' => 'mysql',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', '127.0.0.1'),\n 'port' => env('DB_PORT', '3306'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'unix_socket' => env('DB_SOCKET', ''),\n 'charset' => env('DB_CHARSET', 'utf8mb4'),\n 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n 'strict' => true,\n 'engine' => null,\n 'options' => extension_loaded('pdo_mysql') ? array_filter([\n PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n ]) : [],\n ],\n\n 'mariadb' => [\n 'driver' => 'mariadb',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', '127.0.0.1'),\n 'port' => env('DB_PORT', '3306'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'unix_socket' => env('DB_SOCKET', ''),\n 'charset' => env('DB_CHARSET', 'utf8mb4'),\n 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n 'strict' => true,\n 'engine' => null,\n 'options' => extension_loaded('pdo_mysql') ? array_filter([\n PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n ]) : [],\n ],\n\n 'pgsql' => [\n 'driver' => 'pgsql',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', '127.0.0.1'),\n 'port' => env('DB_PORT', '5432'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'charset' => env('DB_CHARSET', 'utf8'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n 'search_path' => 'public',\n 'sslmode' => 'prefer',\n ],\n\n 'sqlsrv' => [\n 'driver' => 'sqlsrv',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', 'localhost'),\n 'port' => env('DB_PORT', '1433'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'charset' => env('DB_CHARSET', 'utf8'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n \/\/ 'encrypt' => env('DB_ENCRYPT', 'yes'),\n \/\/ 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),\n ],\n\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Migration Repository Table\n |--------------------------------------------------------------------------\n |\n | This table keeps track of all the migrations that have already run for\n | your application. Using this information, we can determine which of\n | the migrations on disk haven't actually been run on the database.\n |\n *\/\n\n 'migrations' => [\n 'table' => 'migrations',\n 'update_date_on_publish' => true,\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Redis Databases\n |--------------------------------------------------------------------------\n |\n | Redis is an open source, fast, and advanced key-value store that also\n | provides a richer body of commands than a typical key-value system\n | such as Memcached. You may define your connection settings here.\n |\n *\/\n\n 'redis' => [\n\n 'client' => env('REDIS_CLIENT', 'phpredis'),\n\n 'options' => [\n 'cluster' => env('REDIS_CLUSTER', 'redis'),\n 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),\n ],\n\n 'default' => [\n 'url' => env('REDIS_URL'),\n 'host' => env('REDIS_HOST', '127.0.0.1'),\n 'username' => env('REDIS_USERNAME'),\n 'password' => env('REDIS_PASSWORD'),\n 'port' => env('REDIS_PORT', '6379'),\n 'database' => env('REDIS_DB', '0'),\n ],\n\n 'cache' => [\n 'url' => env('REDIS_URL'),\n 'host' => env('REDIS_HOST', '127.0.0.1'),\n 'username' => env('REDIS_USERNAME'),\n 'password' => env('REDIS_PASSWORD'),\n 'port' => env('REDIS_PORT', '6379'),\n 'database' => env('REDIS_CACHE_DB', '1'),\n ],\n\n ],\n\n];\n", "summary": { "method_count": 0, "uses": [ "Illuminate\\Support\\Str", "as your default connection for database operations. This is\n | the connection which will be utilized unless another connection\n | is explicitly specified when you execute a query \/ statement.\n |\n *\/\n\n 'default' => env('DB_CONNECTION', 'sqlite'),\n\n \/*\n |--------------------------------------------------------------------------\n | Database Connections\n |--------------------------------------------------------------------------\n |\n | Below are all of the database connections defined for your application.\n | An example configuration is provided for each database system which\n | is supported by Laravel. You're free to add \/ remove connections.\n |\n *\/\n\n 'connections' => [\n\n 'sqlite' => [\n 'driver' => 'sqlite',\n 'url' => env('DB_URL'),\n 'database' => env('DB_DATABASE', database_path('database.sqlite')),\n 'prefix' => '',\n 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n 'busy_timeout' => null,\n 'journal_mode' => null,\n 'synchronous' => null,\n ],\n\n 'mysql' => [\n 'driver' => 'mysql',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', '127.0.0.1'),\n 'port' => env('DB_PORT', '3306'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'unix_socket' => env('DB_SOCKET', ''),\n 'charset' => env('DB_CHARSET', 'utf8mb4'),\n 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n 'strict' => true,\n 'engine' => null,\n 'options' => extension_loaded('pdo_mysql') ? array_filter([\n PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n ]) : [],\n ],\n\n 'mariadb' => [\n 'driver' => 'mariadb',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', '127.0.0.1'),\n 'port' => env('DB_PORT', '3306'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'unix_socket' => env('DB_SOCKET', ''),\n 'charset' => env('DB_CHARSET', 'utf8mb4'),\n 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n 'strict' => true,\n 'engine' => null,\n 'options' => extension_loaded('pdo_mysql') ? array_filter([\n PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n ]) : [],\n ],\n\n 'pgsql' => [\n 'driver' => 'pgsql',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', '127.0.0.1'),\n 'port' => env('DB_PORT', '5432'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'charset' => env('DB_CHARSET', 'utf8'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n 'search_path' => 'public',\n 'sslmode' => 'prefer',\n ],\n\n 'sqlsrv' => [\n 'driver' => 'sqlsrv',\n 'url' => env('DB_URL'),\n 'host' => env('DB_HOST', 'localhost'),\n 'port' => env('DB_PORT', '1433'),\n 'database' => env('DB_DATABASE', 'laravel'),\n 'username' => env('DB_USERNAME', 'root'),\n 'password' => env('DB_PASSWORD', ''),\n 'charset' => env('DB_CHARSET', 'utf8'),\n 'prefix' => '',\n 'prefix_indexes' => true,\n \/\/ 'encrypt' => env('DB_ENCRYPT', 'yes'),\n \/\/ 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),\n ],\n\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Migration Repository Table\n |--------------------------------------------------------------------------\n |\n | This table keeps track of all the migrations that have already run for\n | your application. Using this information, we can determine which of\n | the migrations on disk haven't actually been run on the database.\n |\n *\/\n\n 'migrations' => [\n 'table' => 'migrations',\n 'update_date_on_publish' => true,\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Redis Databases\n |--------------------------------------------------------------------------\n |\n | Redis is an open source, fast, and advanced key-value store that also\n | provides a richer body of commands than a typical key-value system\n | such as Memcached. You may define your connection settings here.\n |\n *\/\n\n 'redis' => [\n\n 'client' => env('REDIS_CLIENT', 'phpredis'),\n\n 'options' => [\n 'cluster' => env('REDIS_CLUSTER', 'redis'),\n 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),\n ],\n\n 'default' => [\n 'url' => env('REDIS_URL'),\n 'host' => env('REDIS_HOST', '127.0.0.1'),\n 'username' => env('REDIS_USERNAME'),\n 'password' => env('REDIS_PASSWORD'),\n 'port' => env('REDIS_PORT', '6379'),\n 'database' => env('REDIS_DB', '0'),\n ],\n\n 'cache' => [\n 'url' => env('REDIS_URL'),\n 'host' => env('REDIS_HOST', '127.0.0.1'),\n 'username' => env('REDIS_USERNAME'),\n 'password' => env('REDIS_PASSWORD'),\n 'port' => env('REDIS_PORT', '6379'),\n 'database' => env('REDIS_CACHE_DB', '1'),\n ],\n\n ],\n\n]" ] } }, "config\/filesystems.php": { "size": 2407, "last_modified": 1731939524, "type": "config", "content": " env('FILESYSTEM_DISK', 'local'),\n\n \/*\n |--------------------------------------------------------------------------\n | Filesystem Disks\n |--------------------------------------------------------------------------\n |\n | Below you may configure as many filesystem disks as necessary, and you\n | may even configure multiple disks for the same driver. Examples for\n | most supported storage drivers are configured here for reference.\n |\n | Supported drivers: \"local\", \"ftp\", \"sftp\", \"s3\"\n |\n *\/\n\n 'disks' => [\n\n 'local' => [\n 'driver' => 'local',\n 'root' => storage_path('app\/private'),\n 'serve' => true,\n 'throw' => false,\n ],\n\n 'public' => [\n 'driver' => 'local',\n 'root' => storage_path('app\/public'),\n 'url' => env('APP_URL').'\/storage',\n 'visibility' => 'public',\n 'throw' => false,\n ],\n\n 's3' => [\n 'driver' => 's3',\n 'key' => env('AWS_ACCESS_KEY_ID'),\n 'secret' => env('AWS_SECRET_ACCESS_KEY'),\n 'region' => env('AWS_DEFAULT_REGION'),\n 'bucket' => env('AWS_BUCKET'),\n 'url' => env('AWS_URL'),\n 'endpoint' => env('AWS_ENDPOINT'),\n 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),\n 'throw' => false,\n ],\n\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Symbolic Links\n |--------------------------------------------------------------------------\n |\n | Here you may configure the symbolic links that will be created when the\n | `storage:link` Artisan command is executed. The array keys should be\n | the locations of the links and the values should be their targets.\n |\n *\/\n\n 'links' => [\n public_path('storage') => storage_path('app\/public'),\n ],\n\n];\n", "summary": { "method_count": 0 } }, "config\/auth.php": { "size": 4029, "last_modified": 1731939524, "type": "config", "content": " [\n 'guard' => env('AUTH_GUARD', 'web'),\n 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Authentication Guards\n |--------------------------------------------------------------------------\n |\n | Next, you may define every authentication guard for your application.\n | Of course, a great default configuration has been defined for you\n | which utilizes session storage plus the Eloquent user provider.\n |\n | All authentication guards have a user provider, which defines how the\n | users are actually retrieved out of your database or other storage\n | system used by the application. Typically, Eloquent is utilized.\n |\n | Supported: \"session\"\n |\n *\/\n\n 'guards' => [\n 'web' => [\n 'driver' => 'session',\n 'provider' => 'users',\n ],\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | User Providers\n |--------------------------------------------------------------------------\n |\n | All authentication guards have a user provider, which defines how the\n | users are actually retrieved out of your database or other storage\n | system used by the application. Typically, Eloquent is utilized.\n |\n | If you have multiple user tables or models you may configure multiple\n | providers to represent the model \/ table. These providers may then\n | be assigned to any extra authentication guards you have defined.\n |\n | Supported: \"database\", \"eloquent\"\n |\n *\/\n\n 'providers' => [\n 'users' => [\n 'driver' => 'eloquent',\n 'model' => env('AUTH_MODEL', App\\Models\\User::class),\n ],\n\n \/\/ 'users' => [\n \/\/ 'driver' => 'database',\n \/\/ 'table' => 'users',\n \/\/ ],\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Resetting Passwords\n |--------------------------------------------------------------------------\n |\n | These configuration options specify the behavior of Laravel's password\n | reset functionality, including the table utilized for token storage\n | and the user provider that is invoked to actually retrieve users.\n |\n | The expiry time is the number of minutes that each reset token will be\n | considered valid. This security feature keeps tokens short-lived so\n | they have less time to be guessed. You may change this as needed.\n |\n | The throttle setting is the number of seconds a user must wait before\n | generating more password reset tokens. This prevents the user from\n | quickly generating a very large amount of password reset tokens.\n |\n *\/\n\n 'passwords' => [\n 'users' => [\n 'provider' => 'users',\n 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),\n 'expire' => 60,\n 'throttle' => 60,\n ],\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Password Confirmation Timeout\n |--------------------------------------------------------------------------\n |\n | Here you may define the amount of seconds before a password confirmation\n | window expires and users are asked to re-enter their password via the\n | confirmation screen. By default, the timeout lasts for three hours.\n |\n *\/\n\n 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),\n\n];\n", "summary": { "method_count": 0 } }, "config\/app.php": { "size": 4284, "last_modified": 1731939524, "type": "config", "content": " env('APP_NAME', 'Laravel'),\n\n \/*\n |--------------------------------------------------------------------------\n | Application Environment\n |--------------------------------------------------------------------------\n |\n | This value determines the \"environment\" your application is currently\n | running in. This may determine how you prefer to configure various\n | services the application utilizes. Set this in your \".env\" file.\n |\n *\/\n\n 'env' => env('APP_ENV', 'production'),\n\n \/*\n |--------------------------------------------------------------------------\n | Application Debug Mode\n |--------------------------------------------------------------------------\n |\n | When your application is in debug mode, detailed error messages with\n | stack traces will be shown on every error that occurs within your\n | application. If disabled, a simple generic error page is shown.\n |\n *\/\n\n 'debug' => (bool) env('APP_DEBUG', false),\n\n \/*\n |--------------------------------------------------------------------------\n | Application URL\n |--------------------------------------------------------------------------\n |\n | This URL is used by the console to properly generate URLs when using\n | the Artisan command line tool. You should set this to the root of\n | the application so that it's available within Artisan commands.\n |\n *\/\n\n 'url' => env('APP_URL', 'http:\/\/localhost'),\n\n \/*\n |--------------------------------------------------------------------------\n | Application Timezone\n |--------------------------------------------------------------------------\n |\n | Here you may specify the default timezone for your application, which\n | will be used by the PHP date and date-time functions. The timezone\n | is set to \"UTC\" by default as it is suitable for most use cases.\n |\n *\/\n\n 'timezone' => env('APP_TIMEZONE', 'UTC'),\n\n \/*\n |--------------------------------------------------------------------------\n | Application Locale Configuration\n |--------------------------------------------------------------------------\n |\n | The application locale determines the default locale that will be used\n | by Laravel's translation \/ localization methods. This option can be\n | set to any locale for which you plan to have translation strings.\n |\n *\/\n\n 'locale' => env('APP_LOCALE', 'en'),\n\n 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),\n\n 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),\n\n \/*\n |--------------------------------------------------------------------------\n | Encryption Key\n |--------------------------------------------------------------------------\n |\n | This key is utilized by Laravel's encryption services and should be set\n | to a random, 32 character string to ensure that all encrypted values\n | are secure. You should do this prior to deploying the application.\n |\n *\/\n\n 'cipher' => 'AES-256-CBC',\n\n 'key' => env('APP_KEY'),\n\n 'previous_keys' => [\n ...array_filter(\n explode(',', env('APP_PREVIOUS_KEYS', ''))\n ),\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Maintenance Mode Driver\n |--------------------------------------------------------------------------\n |\n | These configuration options determine the driver used to determine and\n | manage Laravel's \"maintenance mode\" status. The \"cache\" driver will\n | allow maintenance mode to be controlled across multiple machines.\n |\n | Supported drivers: \"file\", \"cache\"\n |\n *\/\n\n 'maintenance' => [\n 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),\n 'store' => env('APP_MAINTENANCE_STORE', 'database'),\n ],\n\n];\n", "summary": { "method_count": 0, "uses": [ "cases.\n |\n *\/\n\n 'timezone' => env('APP_TIMEZONE', 'UTC'),\n\n \/*\n |--------------------------------------------------------------------------\n | Application Locale Configuration\n |--------------------------------------------------------------------------\n |\n | The application locale determines the default locale that will be used\n | by Laravel's translation \/ localization methods. This option can be\n | set to any locale for which you plan to have translation strings.\n |\n *\/\n\n 'locale' => env('APP_LOCALE', 'en'),\n\n 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),\n\n 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),\n\n \/*\n |--------------------------------------------------------------------------\n | Encryption Key\n |--------------------------------------------------------------------------\n |\n | This key is utilized by Laravel's encryption services and should be set\n | to a random, 32 character string to ensure that all encrypted values\n | are secure. You should do this prior to deploying the application.\n |\n *\/\n\n 'cipher' => 'AES-256-CBC',\n\n 'key' => env('APP_KEY'),\n\n 'previous_keys' => [\n ...array_filter(\n explode(',', env('APP_PREVIOUS_KEYS', ''))\n ),\n ],\n\n \/*\n |--------------------------------------------------------------------------\n | Maintenance Mode Driver\n |--------------------------------------------------------------------------\n |\n | These configuration options determine the driver used to determine and\n | manage Laravel's \"maintenance mode\" status. The \"cache\" driver will\n | allow maintenance mode to be controlled across multiple machines.\n |\n | Supported drivers: \"file\", \"cache\"\n |\n *\/\n\n 'maintenance' => [\n 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),\n 'store' => env('APP_MAINTENANCE_STORE', 'database'),\n ],\n\n]" ] } } }, "database\/migrations": { "database\/migrations\/0001_01_01_000002_create_jobs_table.php": { "size": 1812, "last_modified": 1731939524, "type": "migration", "content": "id();\n $table->string('queue')->index();\n $table->longText('payload');\n $table->unsignedTinyInteger('attempts');\n $table->unsignedInteger('reserved_at')->nullable();\n $table->unsignedInteger('available_at');\n $table->unsignedInteger('created_at');\n });\n\n Schema::create('job_batches', function (Blueprint $table) {\n $table->string('id')->primary();\n $table->string('name');\n $table->integer('total_jobs');\n $table->integer('pending_jobs');\n $table->integer('failed_jobs');\n $table->longText('failed_job_ids');\n $table->mediumText('options')->nullable();\n $table->integer('cancelled_at')->nullable();\n $table->integer('created_at');\n $table->integer('finished_at')->nullable();\n });\n\n Schema::create('failed_jobs', function (Blueprint $table) {\n $table->id();\n $table->string('uuid')->unique();\n $table->text('connection');\n $table->text('queue');\n $table->longText('payload');\n $table->longText('exception');\n $table->timestamp('failed_at')->useCurrent();\n });\n }\n\n \/**\n * Reverse the migrations.\n *\/\n public function down(): void\n {\n Schema::dropIfExists('jobs');\n Schema::dropIfExists('job_batches');\n Schema::dropIfExists('failed_jobs');\n }\n};\n", "summary": { "class": "extends", "method_count": 2, "uses": [ "Illuminate\\Database\\Migrations\\Migration", "Illuminate\\Database\\Schema\\Blueprint", "Illuminate\\Support\\Facades\\Schema" ] } }, "database\/migrations\/0001_01_01_000001_create_cache_table.php": { "size": 849, "last_modified": 1731939524, "type": "migration", "content": "string('key')->primary();\n $table->mediumText('value');\n $table->integer('expiration');\n });\n\n Schema::create('cache_locks', function (Blueprint $table) {\n $table->string('key')->primary();\n $table->string('owner');\n $table->integer('expiration');\n });\n }\n\n \/**\n * Reverse the migrations.\n *\/\n public function down(): void\n {\n Schema::dropIfExists('cache');\n Schema::dropIfExists('cache_locks');\n }\n};\n", "summary": { "class": "extends", "method_count": 2, "uses": [ "Illuminate\\Database\\Migrations\\Migration", "Illuminate\\Database\\Schema\\Blueprint", "Illuminate\\Support\\Facades\\Schema" ] } }, "database\/migrations\/0001_01_01_000000_create_users_table.php": { "size": 1473, "last_modified": 1731939524, "type": "migration", "content": "id();\n $table->string('name');\n $table->string('email')->unique();\n $table->timestamp('email_verified_at')->nullable();\n $table->string('password');\n $table->rememberToken();\n $table->timestamps();\n });\n\n Schema::create('password_reset_tokens', function (Blueprint $table) {\n $table->string('email')->primary();\n $table->string('token');\n $table->timestamp('created_at')->nullable();\n });\n\n Schema::create('sessions', function (Blueprint $table) {\n $table->string('id')->primary();\n $table->foreignId('user_id')->nullable()->index();\n $table->string('ip_address', 45)->nullable();\n $table->text('user_agent')->nullable();\n $table->longText('payload');\n $table->integer('last_activity')->index();\n });\n }\n\n \/**\n * Reverse the migrations.\n *\/\n public function down(): void\n {\n Schema::dropIfExists('users');\n Schema::dropIfExists('password_reset_tokens');\n Schema::dropIfExists('sessions');\n }\n};\n", "summary": { "class": "extends", "method_count": 2, "uses": [ "Illuminate\\Database\\Migrations\\Migration", "Illuminate\\Database\\Schema\\Blueprint", "Illuminate\\Support\\Facades\\Schema" ] } }, "database\/migrations\/2024_12_03_210847_create_events_table.php": { "size": 819, "last_modified": 1733260142, "type": "migration", "content": "id();\n $table->string('title');\n $table->string('slug');\n $table->text('description')->nullable();\n $table->datetime('date');\n $table->boolean('allow_open_registration')->default(0);\n $table->integer('attendee_limit')->nullable();\n $table->timestamps();\n });\n }\n\n \/**\n * Reverse the migrations.\n *\/\n public function down(): void\n {\n Schema::dropIfExists('events');\n }\n};", "summary": { "class": "extends", "method_count": 2, "uses": [ "Illuminate\\Database\\Migrations\\Migration", "Illuminate\\Database\\Schema\\Blueprint", "Illuminate\\Support\\Facades\\Schema" ] } }, "database\/migrations\/2024_12_03_213414_create_attendees_table.php": { "size": 872, "last_modified": 1733261668, "type": "migration", "content": "id();\n $table->foreignId('event_id')->constrained()->onDelete('cascade');\n $table->string('name');\n $table->enum('status', ['pending', 'approved', 'declined'])->default('pending');\n $table->timestamp('approved_at')->nullable();\n $table->enum('approved_by', ['admin', 'self'])->nullable();\n $table->timestamps();\n });\n }\n\n \/**\n * Reverse the migrations.\n *\/\n public function down(): void\n {\n Schema::dropIfExists('attendees');\n }\n};", "summary": { "class": "extends", "method_count": 2, "uses": [ "Illuminate\\Database\\Migrations\\Migration", "Illuminate\\Database\\Schema\\Blueprint", "Illuminate\\Support\\Facades\\Schema" ] } } }, "database\/seeders": { "database\/seeders\/DatabaseSeeder.php": { "size": 456, "last_modified": 1731939524, "type": "unknown", "content": "create();\n\n User::factory()->create([\n 'name' => 'Test User',\n 'email' => 'test@example.com',\n ]);\n }\n}\n", "summary": { "namespace": "Database\\Seeders", "class": "DatabaseSeeder", "method_count": 1, "uses": [ "App\\Models\\User", "Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents", "Illuminate\\Database\\Seeder" ] } } }, "routes": { "routes\/console.php": { "size": 220, "last_modified": 1731939524, "type": "route", "content": "comment(Inspiring::quote());\n})->purpose('Display an inspiring quote')->hourly();\n", "summary": { "method_count": 0, "uses": [ "Illuminate\\Foundation\\Inspiring", "Illuminate\\Support\\Facades\\Artisan" ] } }, "routes\/web.php": { "size": 820, "last_modified": 1733345359, "type": "route", "content": "name('admin.')->group(function () {\n Route::resource('events', AdminEventController::class);\n Route::resource('events.attendees', AdminAttendeeController::class);\n});\n\nRoute::get('{slug}', [EventController::class, 'show'])->name('event.show');\n\nRoute::put('events\/{event}\/attendees\/{attendee}\/status', [AttendeeController::class, 'updateStatus'])\n ->name('attendees.update-status');\n\nRoute::post('\/events\/{event}\/attendees', [AttendeeController::class, 'store'])\n ->name('attendees.store');\n", "summary": { "method_count": 0, "uses": [ "Illuminate\\Support\\Facades\\Route", "App\\Http\\Controllers\\AdminEventController", "App\\Http\\Controllers\\EventController", "App\\Http\\Controllers\\AdminAttendeeController", "App\\Http\\Controllers\\AttendeeController" ] } } }, "resources\/views": { "resources\/views\/events\/show.blade.php": { "size": 7319, "last_modified": 1733350510, "type": "view", "content": "@if(request()->getQueryString())\n @php\n $encryptedName = request()->getQueryString();\n $name = (new \\App\\Services\\NameEncryption)->decrypt($encryptedName);\n $attendee = $event->attendees()->where('name', $name)->first();\n @endphp\n@endif\n\n\n\n{{ $event->title }}<\/title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<style>\n\/* Base styles and CSS variables *\/\n:root {\n --color-primary: #1a56db;\n --color-primary-dark: #1e429f;\n --color-secondary: #4f46e5;\n --color-accent: #8b5cf6;\n --color-success: #059669;\n --color-danger: #dc2626;\n --color-warning: #d97706;\n --color-text: #1f2937;\n --color-text-light: #6b7280;\n --color-background: #ffffff;\n --color-background-alt: #f3f4f6;\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 \/ 0.05);\n --shadow: 0 1px 3px 0 rgb(0 0 0 \/ 0.1), 0 1px 2px -1px rgb(0 0 0 \/ 0.1);\n --radius: 0.5rem;\n}\n\n\/* Global resets and base styles *\/\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: sans-serif;\n line-height: 1.5;\n color: var(--color-text);\n background: var(--color-background-alt);\n}\n\n\/* Logged out CSS *\/\n.wrapper {\n width: 100%;\n max-width: 90%;\n margin: 1rem auto 1.5rem;\n}\n\nh1 {\n font-size: 1.6rem;\n}\n\nh2 {\n font-size: 1.4rem;\n margin: 2rem 0 1rem;\n\n &.attendees {\n display: inline;\n margin: 0;\n font-size: 1rem;\n color: #000;\n font-weight: 900;\n\n &:before {\n position: relative;\n top: -0.15rem;\n margin: 0 0.3rem;\n content: \"\ud83d\udc65\";\n filter: grayscale(100%);\n }\n\n }\n}\n\niframe {\n position: relative;\n left: 50%;\n right: 50%;\n margin-left: -50vw;\n margin-right: -50vw;\n width: 100vw;\n height: 56.25vw; \/* 16:9 aspect ratio (9\/16 = 0.5625) *\/\n}\n\np {\n margin: 0 0 0.5rem;\n}\n\nul {\n margin: 0 0 1.5rem 1rem;\n}\n\n.date,\n.time {\n color: transparent;\n font-size: 0;\n\n &:after {\n font-size: 1.1rem;\n color: #000;\n margin-right: 0.3rem;\n filter: grayscale(100%);\n }\n}\n\n.date:after {\n content: \"\ud83d\udcc5\";\n}\n\n.time:after {\n content: \"\ud83d\udd50\";\n}\n\nform {\n display: inline-block;\n margin-top: 1rem;\n margin-right: 1rem;\n\n p {\n display: block;\n width: 100%;\n }\n}\n\ninput {\n display: inline;\n width: 400px;\n max-width: 100%;\n padding: 0.75rem;\n border: 1px solid var(--color-text-light);\n border-radius: var(--radius);\n font-size: 1rem;\n font-family: inherit;\n}\n\nbutton {\n display: block;\n min-width: min-content;\n white-space: nowrap;\n padding: 0.75rem 1.5rem;\n border: 1px solid #ccc;\n border-radius: var(--radius);\n font-size: 1rem;\n font-weight: 500;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n color: #fff;\n\n &.decline {\n background-color: #bb1111;\n\n &:hover {\n background-color: #bb4444;\n }\n }\n\n &.approve {\n background-color: #11bb11;\n\n &:hover {\n background-color: #44bb44;\n }\n }\n}\n<\/style>\n<\/head>\n<body>\n\n<div class=\"wrapper\">\n <h1>{{ $event->title }}<\/h1>\n\n @if(request()->getQueryString())\n <p>Invite for <strong>{{ $name }}<\/strong>!<\/p>\n @endif\n\n @if($event->attendee_limit && $event->approvedAttendees->count() >= $event->attendee_limit)\n <p><strong>Sorry, but this event is already full.<\/strong><\/p>\n @endif\n\n <p>\n @if($event->description)\n\n @php\n echo (new \\App\\Services\\DescriptionPurifier)->clean($event->description);\n @endphp\n\n @endif\n <\/p>\n <p>\n <del class=\"date\">Date: <\/del>{{ $event->date->format('F j, Y') }}\n <br>\n <del class=\"time\">Time: <\/del>{{ $event->date->format('g:i A') }}\n <\/p>\n\n <h2 class=\"attendees\">Attendees ({{ $event->approvedAttendees->count() }} \/ {{ $event->attendee_limit }})<\/h2>\n\n @if($event->allow_open_registration)\n @if(session('success'))\n <div class=\"alert alert-success\">\n {{ session('success') }}\n <\/div>\n @endif\n\n @if(session('registered') && session('personalUrl'))\n <div class=\"registration-form\">\n <p>Your personal URL to manage your attendance:<\/p>\n <input type=\"text\" value=\"{{ session('personalUrl') }}\" readonly>\n <\/div>\n @endif\n\n @if($event->attendee_limit && $event->approvedAttendees->count() >= $event->attendee_limit)\n <p>This event is now full.<\/p>\n @else\n <p>\n Registration is open for this event\n @if($event->attendee_limit)\n <br>Limited to {{ $event->attendee_limit }} attendees\n @endif\n <\/p>\n @if(!request()->getQueryString() && !session('registered'))\n <h2>Register for this event<\/h2>\n <form action=\"{{ route('attendees.store', $event->id) }}\" method=\"POST\">\n @csrf\n <p>\n <input type=\"text\" \n name=\"name\" \n placeholder=\"Your name\" \n required \n value=\"{{ old('name') }}\"\n >\n <\/p>\n <button type=\"submit\">Register<\/button>\n <\/form>\n @if($errors->any())\n <ul>\n @foreach($errors->all() as $error)\n <li>{{ $error }}<\/li>\n @endforeach\n <\/ul>\n @endif\n @endif\n @endif\n @endif\n\n @if($event->approvedAttendees->count() > 0)\n <ul>\n @foreach($event->approvedAttendees as $going)\n <li>{{ $going->name }}<\/li>\n @endforeach\n <\/ul>\n @endif\n\n @if(request()->getQueryString())\n @if($name && $attendee)\n\n @if($event->attendee_limit && $event->approvedAttendees->count() < $event->attendee_limit)\n\n <form action=\"{{ route('attendees.update-status', [$event->id, $attendee->id]) }}\" method=\"POST\">\n @csrf\n @method('PUT')\n <input type=\"hidden\" name=\"status\" value=\"declined\">\n <input type=\"hidden\" name=\"return_url\" value=\"{{ url($event->slug . '?' . $encryptedName) }}\">\n <button class=\"decline\" type=\"submit\">Cancel My Attendance<\/button>\n <\/form>\n\n <form action=\"{{ route('attendees.update-status', [$event->id, $attendee->id]) }}\" method=\"POST\">\n @csrf\n @method('PUT')\n <input type=\"hidden\" name=\"status\" value=\"approved\">\n <input type=\"hidden\" name=\"return_url\" value=\"{{ url($event->slug . '?' . $encryptedName) }}\">\n <button class=\"approve\" type=\"submit\">Confirm My Attendance<\/button>\n <\/form>\n\n @endif\n\n @endif\n\n @if(session('success'))\n <div class=\"alert alert-success\">\n {{ session('success') }}\n <\/div>\n @endif\n @endif\n<\/div>\n<\/body>\n<\/html>", "summary": { "method_count": 0 } }, "resources\/views\/admin\/events\/edit.blade.php": { "size": 1878, "last_modified": 1733260731, "type": "view", "content": "<!DOCTYPE html>\n<html>\n<head>\n <title>Edit Event<\/title>\n <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\n<\/head>\n<body>\n <div class=\"container mt-4\">\n <h1>Edit Event<\/h1>\n\n <form action=\"{{ route('admin.events.update', $event) }}\" method=\"POST\">\n @csrf\n @method('PUT')\n \n <div class=\"mb-3\">\n <label class=\"form-label\">Title<\/label>\n <input type=\"text\" name=\"title\" class=\"form-control\" value=\"{{ $event->title }}\" required>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Description<\/label>\n <textarea name=\"description\" class=\"form-control\" rows=\"4\">{{ $event->description }}<\/textarea>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Date<\/label>\n <input type=\"datetime-local\" name=\"date\" class=\"form-control\" value=\"{{ $event->date->format('Y-m-d\\TH:i') }}\" required>\n <\/div>\n\n <div class=\"mb-3\">\n <div class=\"form-check\">\n <input type=\"checkbox\" name=\"allow_open_registration\" value=\"1\" class=\"form-check-input\" {{ $event->allow_open_registration ? 'checked' : '' }}>\n <label class=\"form-check-label\">Allow Open Registration<\/label>\n <\/div>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Attendee Limit<\/label>\n <input type=\"number\" name=\"attendee_limit\" class=\"form-control\" value=\"{{ $event->attendee_limit }}\">\n <\/div>\n\n <button type=\"submit\" class=\"btn btn-primary\">Update Event<\/button>\n <a href=\"{{ route('admin.events.index') }}\" class=\"btn btn-secondary\">Cancel<\/a>\n <\/form>\n <\/div>\n<\/body>\n<\/html>", "summary": { "method_count": 0 } }, "resources\/views\/admin\/events\/index.blade.php": { "size": 2017, "last_modified": 1733262275, "type": "view", "content": "<!DOCTYPE html>\n<html>\n<head>\n <title>Manage Events<\/title>\n <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\n<\/head>\n<body>\n <div class=\"container mt-4\">\n <h1>Manage Events<\/h1>\n \n @if(session('success'))\n <div class=\"alert alert-success\">\n {{ session('success') }}\n <\/div>\n @endif\n\n <a href=\"{{ route('admin.events.create') }}\" class=\"btn btn-primary mb-3\">Create New Event<\/a>\n\n <table class=\"table\">\n <thead>\n <tr>\n <th>Title<\/th>\n <th>Date<\/th>\n <th>Registration<\/th>\n <th>Actions<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n @foreach($events as $event)\n <tr>\n <td>{{ $event->title }}<\/td>\n <td>{{ $event->date->format('Y-m-d H:i') }}<\/td>\n <td>{{ $event->allow_open_registration ? 'Open' : 'Closed' }}<\/td>\n <td>\n <a href=\"{{ route('admin.events.attendees.index', $event) }}\" class=\"btn btn-sm btn-info\">Attendees<\/a>\n <a href=\"{{ route('event.show', $event->slug) }}\" class=\"btn btn-sm btn-secondary\">Link<\/a>\n <a href=\"{{ route('admin.events.edit', $event) }}\" class=\"btn btn-sm btn-primary\">Edit<\/a>\n <form action=\"{{ route('admin.events.destroy', $event) }}\" method=\"POST\" class=\"d-inline\">\n @csrf\n @method('DELETE')\n <button type=\"submit\" class=\"btn btn-sm btn-danger\" onclick=\"return confirm('Are you sure?')\">Delete<\/button>\n <\/form>\n <\/td>\n <\/tr>\n @endforeach\n <\/tbody>\n <\/table>\n <\/div>\n<\/body>\n<\/html>", "summary": { "method_count": 0 } }, "resources\/views\/admin\/events\/create.blade.php": { "size": 1652, "last_modified": 1733260711, "type": "view", "content": "<!DOCTYPE html>\n<html>\n<head>\n <title>Create Event<\/title>\n <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\n<\/head>\n<body>\n <div class=\"container mt-4\">\n <h1>Create Event<\/h1>\n\n <form action=\"{{ route('admin.events.store') }}\" method=\"POST\">\n @csrf\n \n <div class=\"mb-3\">\n <label class=\"form-label\">Title<\/label>\n <input type=\"text\" name=\"title\" class=\"form-control\" required>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Description<\/label>\n <textarea name=\"description\" class=\"form-control\" rows=\"4\"><\/textarea>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Date<\/label>\n <input type=\"datetime-local\" name=\"date\" class=\"form-control\" required>\n <\/div>\n\n <div class=\"mb-3\">\n <div class=\"form-check\">\n <input type=\"checkbox\" name=\"allow_open_registration\" value=\"1\" class=\"form-check-input\">\n <label class=\"form-check-label\">Allow Open Registration<\/label>\n <\/div>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Attendee Limit<\/label>\n <input type=\"number\" name=\"attendee_limit\" class=\"form-control\">\n <\/div>\n\n <button type=\"submit\" class=\"btn btn-primary\">Create Event<\/button>\n <a href=\"{{ route('admin.events.index') }}\" class=\"btn btn-secondary\">Cancel<\/a>\n <\/form>\n <\/div>\n<\/body>\n<\/html>", "summary": { "method_count": 0 } }, "resources\/views\/admin\/attendees\/edit.blade.php": { "size": 1494, "last_modified": 1733262456, "type": "view", "content": "<!DOCTYPE html>\n<html>\n<head>\n <title>Edit Attendee - {{ $event->title }}<\/title>\n <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\n<\/head>\n<body>\n <div class=\"container mt-4\">\n <h1>Edit Attendee<\/h1>\n <h3 class=\"mb-4\">{{ $event->title }}<\/h3>\n\n <form action=\"{{ route('admin.events.attendees.update', [$event, $attendee]) }}\" method=\"POST\">\n @csrf\n @method('PUT')\n \n <div class=\"mb-3\">\n <label class=\"form-label\">Name<\/label>\n <input type=\"text\" name=\"name\" class=\"form-control\" value=\"{{ $attendee->name }}\" required>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Status<\/label>\n <select name=\"status\" class=\"form-control\" required>\n <option value=\"pending\" {{ $attendee->status === 'pending' ? 'selected' : '' }}>Pending<\/option>\n <option value=\"approved\" {{ $attendee->status === 'approved' ? 'selected' : '' }}>Approved<\/option>\n <option value=\"declined\" {{ $attendee->status === 'declined' ? 'selected' : '' }}>Declined<\/option>\n <\/select>\n <\/div>\n\n <button type=\"submit\" class=\"btn btn-primary\">Update Attendee<\/button>\n <a href=\"{{ route('admin.events.attendees.index', $event) }}\" class=\"btn btn-secondary\">Cancel<\/a>\n <\/form>\n <\/div>\n<\/body>\n<\/html>", "summary": { "method_count": 0 } }, "resources\/views\/admin\/attendees\/index.blade.php": { "size": 2518, "last_modified": 1733263398, "type": "view", "content": "<!DOCTYPE html>\n<html>\n<head>\n <title>Manage Attendees - {{ $event->title }}<\/title>\n <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\n<\/head>\n<body>\n <div class=\"container mt-4\">\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\n <h1>Manage Attendees<\/h1>\n <a href=\"{{ route('admin.events.index') }}\" class=\"btn btn-secondary\">Back to Events<\/a>\n <\/div>\n\n <h3 class=\"mb-3\">{{ $event->title }}<\/h3>\n \n @if(session('success'))\n <div class=\"alert alert-success\">\n {{ session('success') }}\n <\/div>\n @endif\n\n <a href=\"{{ route('admin.events.attendees.create', $event) }}\" class=\"btn btn-primary mb-3\">Add Attendee<\/a>\n\n <table class=\"table\">\n <thead>\n <tr>\n <th>Name<\/th>\n <th>Status<\/th>\n <th>Added<\/th>\n <th>Actions<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n @foreach($attendees as $attendee)\n <tr>\n <td>{{ $attendee->name }}<\/td>\n <td>\n <span class=\"badge bg-{{ $attendee->status === 'approved' ? 'success' : ($attendee->status === 'declined' ? 'danger' : 'warning') }}\">\n {{ ucfirst($attendee->status) }}\n <\/span>\n <\/td>\n <td>{{ $attendee->created_at->format('Y-m-d H:i') }}<\/td>\n <td>\n <a href=\"{{ url($event->slug) }}?{{ (new \\App\\Services\\NameEncryption)->encrypt($attendee->name) }}\" class=\"btn btn-sm btn-secondary\">Invite<\/a>\n\n <a href=\"{{ route('admin.events.attendees.edit', [$event, $attendee]) }}\" class=\"btn btn-sm btn-primary\">Edit<\/a>\n <form action=\"{{ route('admin.events.attendees.destroy', [$event, $attendee]) }}\" method=\"POST\" class=\"d-inline\">\n @csrf\n @method('DELETE')\n <button type=\"submit\" class=\"btn btn-sm btn-danger\" onclick=\"return confirm('Are you sure?')\">Delete<\/button>\n <\/form>\n <\/td>\n <\/tr>\n @endforeach\n <\/tbody>\n <\/table>\n <\/div>\n<\/body>\n<\/html>", "summary": { "method_count": 0 } }, "resources\/views\/admin\/attendees\/create.blade.php": { "size": 1240, "last_modified": 1733262368, "type": "view", "content": "<!DOCTYPE html>\n<html>\n<head>\n <title>Add Attendee - {{ $event->title }}<\/title>\n <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\">\n<\/head>\n<body>\n <div class=\"container mt-4\">\n <h1>Add Attendee<\/h1>\n <h3 class=\"mb-4\">{{ $event->title }}<\/h3>\n\n <form action=\"{{ route('admin.events.attendees.store', $event) }}\" method=\"POST\">\n @csrf\n \n <div class=\"mb-3\">\n <label class=\"form-label\">Name<\/label>\n <input type=\"text\" name=\"name\" class=\"form-control\" required>\n <\/div>\n\n <div class=\"mb-3\">\n <label class=\"form-label\">Status<\/label>\n <select name=\"status\" class=\"form-control\" required>\n <option value=\"pending\">Pending<\/option>\n <option value=\"approved\">Approved<\/option>\n <option value=\"declined\">Declined<\/option>\n <\/select>\n <\/div>\n\n <button type=\"submit\" class=\"btn btn-primary\">Add Attendee<\/button>\n <a href=\"{{ route('admin.events.attendees.index', $event) }}\" class=\"btn btn-secondary\">Cancel<\/a>\n <\/form>\n <\/div>\n<\/body>", "summary": { "method_count": 0 } }, "resources\/views\/welcome.blade.php": { "size": 36248, "last_modified": 1731939524, "type": "view", "content": "<!DOCTYPE html>\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n <title>Laravel<\/title>\n\n <!-- Fonts -->\n <link rel=\"preconnect\" href=\"https:\/\/fonts.bunny.net\">\n <link href=\"https:\/\/fonts.bunny.net\/css?family=figtree:400,500,600&display=swap\" rel=\"stylesheet\" \/>\n\n <!-- Styles \/ Scripts -->\n @if (file_exists(public_path('build\/manifest.json')) || file_exists(public_path('hot')))\n @vite(['resources\/css\/app.css', 'resources\/js\/app.js'])\n @else\n <style>\n \/* ! tailwindcss v3.4.1 | MIT License | https:\/\/tailwindcss.com *\/*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}::after,::before{--tw-content:''}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:Figtree, ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*, ::before, ::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 \/ 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 \/ 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.absolute{position:absolute}.relative{position:relative}.-left-20{left:-5rem}.top-0{top:0px}.-bottom-16{bottom:-4rem}.-left-16{left:-4rem}.-mx-3{margin-left:-0.75rem;margin-right:-0.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.flex{display:flex}.grid{display:grid}.hidden{display:none}.aspect-video{aspect-ratio:16 \/ 9}.size-12{width:3rem;height:3rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.h-12{height:3rem}.h-40{height:10rem}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-\\[calc\\(100\\%\\+8rem\\)\\]{width:calc(100% + 8rem)}.w-auto{width:auto}.max-w-\\[877px\\]{max-width:877px}.max-w-2xl{max-width:42rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:0.5rem}.rounded-md{border-radius:0.375rem}.rounded-sm{border-radius:0.125rem}.bg-\\[\\#FF2D20\\]\\\/10{background-color:rgb(255 45 32 \/ 0.1)}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255 \/ var(--tw-bg-opacity))}.bg-gradient-to-b{background-image:linear-gradient(to bottom, var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:rgb(0 0 0 \/ 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.via-white{--tw-gradient-to:rgb(255 255 255 \/ 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.stroke-\\[\\#FF2D20\\]{stroke:#FF2D20}.object-cover{object-fit:cover}.object-top{object-position:top}.p-6{padding:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-3{padding-left:0.75rem;padding-right:0.75rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.pt-3{padding-top:0.75rem}.text-center{text-align:center}.font-sans{font-family:Figtree, ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-sm\\\/relaxed{font-size:0.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.text-black{--tw-text-opacity:1;color:rgb(0 0 0 \/ var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255 \/ var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-\\[0px_14px_34px_0px_rgba\\(0\\2c 0\\2c 0\\2c 0\\.08\\)\\]{--tw-shadow:0px 14px 34px 0px rgba(0,0,0,0.08);--tw-shadow-colored:0px 14px 34px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.ring-transparent{--tw-ring-color:transparent}.ring-white\\\/\\[0\\.05\\]{--tw-ring-color:rgb(255 255 255 \/ 0.05)}.drop-shadow-\\[0px_4px_34px_rgba\\(0\\2c 0\\2c 0\\2c 0\\.06\\)\\]{--tw-drop-shadow:drop-shadow(0px 4px 34px rgba(0,0,0,0.06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\\[0px_4px_34px_rgba\\(0\\2c 0\\2c 0\\2c 0\\.25\\)\\]{--tw-drop-shadow:drop-shadow(0px 4px 34px rgba(0,0,0,0.25));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.duration-300{transition-duration:300ms}.selection\\:bg-\\[\\#FF2D20\\] *::selection{--tw-bg-opacity:1;background-color:rgb(255 45 32 \/ var(--tw-bg-opacity))}.selection\\:text-white *::selection{--tw-text-opacity:1;color:rgb(255 255 255 \/ var(--tw-text-opacity))}.selection\\:bg-\\[\\#FF2D20\\]::selection{--tw-bg-opacity:1;background-color:rgb(255 45 32 \/ var(--tw-bg-opacity))}.selection\\:text-white::selection{--tw-text-opacity:1;color:rgb(255 255 255 \/ var(--tw-text-opacity))}.hover\\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0 \/ var(--tw-text-opacity))}.hover\\:text-black\\\/70:hover{color:rgb(0 0 0 \/ 0.7)}.hover\\:ring-black\\\/20:hover{--tw-ring-color:rgb(0 0 0 \/ 0.2)}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.focus-visible\\:ring-\\[\\#FF2D20\\]:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 45 32 \/ var(--tw-ring-opacity))}@media (min-width: 640px){.sm\\:size-16{width:4rem;height:4rem}.sm\\:size-6{width:1.5rem;height:1.5rem}.sm\\:pt-5{padding-top:1.25rem}}@media (min-width: 768px){.md\\:row-span-3{grid-row:span 3 \/ span 3}}@media (min-width: 1024px){.lg\\:col-start-2{grid-column-start:2}.lg\\:h-16{height:4rem}.lg\\:max-w-7xl{max-width:80rem}.lg\\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.lg\\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.lg\\:flex-col{flex-direction:column}.lg\\:items-end{align-items:flex-end}.lg\\:justify-center{justify-content:center}.lg\\:gap-8{gap:2rem}.lg\\:p-10{padding:2.5rem}.lg\\:pb-10{padding-bottom:2.5rem}.lg\\:pt-0{padding-top:0px}.lg\\:text-\\[\\#FF2D20\\]{--tw-text-opacity:1;color:rgb(255 45 32 \/ var(--tw-text-opacity))}}@media (prefers-color-scheme: dark){.dark\\:block{display:block}.dark\\:hidden{display:none}.dark\\:bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0 \/ var(--tw-bg-opacity))}.dark\\:bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27 \/ var(--tw-bg-opacity))}.dark\\:via-zinc-900{--tw-gradient-to:rgb(24 24 27 \/ 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), #18181b var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\\:to-zinc-900{--tw-gradient-to:#18181b var(--tw-gradient-to-position)}.dark\\:text-white\\\/50{color:rgb(255 255 255 \/ 0.5)}.dark\\:text-white{--tw-text-opacity:1;color:rgb(255 255 255 \/ var(--tw-text-opacity))}.dark\\:text-white\\\/70{color:rgb(255 255 255 \/ 0.7)}.dark\\:ring-zinc-800{--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42 \/ var(--tw-ring-opacity))}.dark\\:hover\\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255 \/ var(--tw-text-opacity))}.dark\\:hover\\:text-white\\\/70:hover{color:rgb(255 255 255 \/ 0.7)}.dark\\:hover\\:text-white\\\/80:hover{color:rgb(255 255 255 \/ 0.8)}.dark\\:hover\\:ring-zinc-700:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(63 63 70 \/ var(--tw-ring-opacity))}.dark\\:focus-visible\\:ring-\\[\\#FF2D20\\]:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 45 32 \/ var(--tw-ring-opacity))}.dark\\:focus-visible\\:ring-white:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255 \/ var(--tw-ring-opacity))}}\n <\/style>\n @endif\n <\/head>\n <body class=\"font-sans antialiased dark:bg-black dark:text-white\/50\">\n <div class=\"bg-gray-50 text-black\/50 dark:bg-black dark:text-white\/50\">\n <img id=\"background\" class=\"absolute -left-20 top-0 max-w-[877px]\" src=\"https:\/\/laravel.com\/assets\/img\/welcome\/background.svg\" alt=\"Laravel background\" \/>\n <div class=\"relative min-h-screen flex flex-col items-center justify-center selection:bg-[#FF2D20] selection:text-white\">\n <div class=\"relative w-full max-w-2xl px-6 lg:max-w-7xl\">\n <header class=\"grid grid-cols-2 items-center gap-2 py-10 lg:grid-cols-3\">\n <div class=\"flex lg:justify-center lg:col-start-2\">\n <svg class=\"h-12 w-auto text-white lg:h-16 lg:text-[#FF2D20]\" viewBox=\"0 0 62 65\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M61.8548 14.6253C61.8778 14.7102 61.8895 14.7978 61.8897 14.8858V28.5615C61.8898 28.737 61.8434 28.9095 61.7554 29.0614C61.6675 29.2132 61.5409 29.3392 61.3887 29.4265L49.9104 36.0351V49.1337C49.9104 49.4902 49.7209 49.8192 49.4118 49.9987L25.4519 63.7916C25.3971 63.8227 25.3372 63.8427 25.2774 63.8639C25.255 63.8714 25.2338 63.8851 25.2101 63.8913C25.0426 63.9354 24.8666 63.9354 24.6991 63.8913C24.6716 63.8838 24.6467 63.8689 24.6205 63.8589C24.5657 63.8389 24.5084 63.8215 24.456 63.7916L0.501061 49.9987C0.348882 49.9113 0.222437 49.7853 0.134469 49.6334C0.0465019 49.4816 0.000120578 49.3092 0 49.1337L0 8.10652C0 8.01678 0.0124642 7.92953 0.0348998 7.84477C0.0423783 7.8161 0.0598282 7.78993 0.0697995 7.76126C0.0884958 7.70891 0.105946 7.65531 0.133367 7.6067C0.152063 7.5743 0.179485 7.54812 0.20192 7.51821C0.230588 7.47832 0.256763 7.43719 0.290416 7.40229C0.319084 7.37362 0.356476 7.35243 0.388883 7.32751C0.425029 7.29759 0.457436 7.26518 0.498568 7.2415L12.4779 0.345059C12.6296 0.257786 12.8015 0.211853 12.9765 0.211853C13.1515 0.211853 13.3234 0.257786 13.475 0.345059L25.4531 7.2415H25.4556C25.4955 7.26643 25.5292 7.29759 25.5653 7.32626C25.5977 7.35119 25.6339 7.37362 25.6625 7.40104C25.6974 7.43719 25.7224 7.47832 25.7523 7.51821C25.7735 7.54812 25.8021 7.5743 25.8196 7.6067C25.8483 7.65656 25.8645 7.70891 25.8844 7.76126C25.8944 7.78993 25.9118 7.8161 25.9193 7.84602C25.9423 7.93096 25.954 8.01853 25.9542 8.10652V33.7317L35.9355 27.9844V14.8846C35.9355 14.7973 35.948 14.7088 35.9704 14.6253C35.9792 14.5954 35.9954 14.5692 36.0053 14.5405C36.0253 14.4882 36.0427 14.4346 36.0702 14.386C36.0888 14.3536 36.1163 14.3274 36.1375 14.2975C36.1674 14.2576 36.1923 14.2165 36.2272 14.1816C36.2559 14.1529 36.292 14.1317 36.3244 14.1068C36.3618 14.0769 36.3942 14.0445 36.4341 14.0208L48.4147 7.12434C48.5663 7.03694 48.7383 6.99094 48.9133 6.99094C49.0883 6.99094 49.2602 7.03694 49.4118 7.12434L61.3899 14.0208C61.4323 14.0457 61.4647 14.0769 61.5021 14.1055C61.5333 14.1305 61.5694 14.1529 61.5981 14.1803C61.633 14.2165 61.6579 14.2576 61.6878 14.2975C61.7103 14.3274 61.7377 14.3536 61.7551 14.386C61.7838 14.4346 61.8 14.4882 61.8199 14.5405C61.8312 14.5692 61.8474 14.5954 61.8548 14.6253ZM59.893 27.9844V16.6121L55.7013 19.0252L49.9104 22.3593V33.7317L59.8942 27.9844H59.893ZM47.9149 48.5566V37.1768L42.2187 40.4299L25.953 49.7133V61.2003L47.9149 48.5566ZM1.99677 9.83281V48.5566L23.9562 61.199V49.7145L12.4841 43.2219L12.4804 43.2194L12.4754 43.2169C12.4368 43.1945 12.4044 43.1621 12.3682 43.1347C12.3371 43.1097 12.3009 43.0898 12.2735 43.0624L12.271 43.0586C12.2386 43.0275 12.2162 42.9888 12.1887 42.9539C12.1638 42.9203 12.1339 42.8916 12.114 42.8567L12.1127 42.853C12.0903 42.8156 12.0766 42.7707 12.0604 42.7283C12.0442 42.6909 12.023 42.656 12.013 42.6161C12.0005 42.5688 11.998 42.5177 11.9931 42.4691C11.9881 42.4317 11.9781 42.3943 11.9781 42.3569V15.5801L6.18848 12.2446L1.99677 9.83281ZM12.9777 2.36177L2.99764 8.10652L12.9752 13.8513L22.9541 8.10527L12.9752 2.36177H12.9777ZM18.1678 38.2138L23.9574 34.8809V9.83281L19.7657 12.2459L13.9749 15.5801V40.6281L18.1678 38.2138ZM48.9133 9.14105L38.9344 14.8858L48.9133 20.6305L58.8909 14.8846L48.9133 9.14105ZM47.9149 22.3593L42.124 19.0252L37.9323 16.6121V27.9844L43.7219 31.3174L47.9149 33.7317V22.3593ZM24.9533 47.987L39.59 39.631L46.9065 35.4555L36.9352 29.7145L25.4544 36.3242L14.9907 42.3482L24.9533 47.987Z\" fill=\"currentColor\"\/><\/svg>\n <\/div>\n @if (Route::has('login'))\n <nav class=\"-mx-3 flex flex-1 justify-end\">\n @auth\n <a\n href=\"{{ url('\/dashboard') }}\"\n class=\"rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black\/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white\/80 dark:focus-visible:ring-white\"\n >\n Dashboard\n <\/a>\n @else\n <a\n href=\"{{ route('login') }}\"\n class=\"rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black\/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white\/80 dark:focus-visible:ring-white\"\n >\n Log in\n <\/a>\n\n @if (Route::has('register'))\n <a\n href=\"{{ route('register') }}\"\n class=\"rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black\/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white\/80 dark:focus-visible:ring-white\"\n >\n Register\n <\/a>\n @endif\n @endauth\n <\/nav>\n @endif\n <\/header>\n\n <main class=\"mt-6\">\n <div class=\"grid gap-6 lg:grid-cols-2 lg:gap-8\">\n <a\n href=\"https:\/\/laravel.com\/docs\"\n id=\"docs-card\"\n class=\"flex flex-col items-start gap-6 overflow-hidden rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white\/[0.05] transition duration-300 hover:text-black\/70 hover:ring-black\/20 focus:outline-none focus-visible:ring-[#FF2D20] md:row-span-3 lg:p-10 lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800 dark:hover:text-white\/70 dark:hover:ring-zinc-700 dark:focus-visible:ring-[#FF2D20]\"\n >\n <div id=\"screenshot-container\" class=\"relative flex w-full flex-1 items-stretch\">\n <img\n src=\"https:\/\/laravel.com\/assets\/img\/welcome\/docs-light.svg\"\n alt=\"Laravel documentation screenshot\"\n class=\"aspect-video h-full w-full flex-1 rounded-[10px] object-top object-cover drop-shadow-[0px_4px_34px_rgba(0,0,0,0.06)] dark:hidden\"\n onerror=\"\n document.getElementById('screenshot-container').classList.add('!hidden');\n document.getElementById('docs-card').classList.add('!row-span-1');\n document.getElementById('docs-card-content').classList.add('!flex-row');\n document.getElementById('background').classList.add('!hidden');\n \"\n \/>\n <img\n src=\"https:\/\/laravel.com\/assets\/img\/welcome\/docs-dark.svg\"\n alt=\"Laravel documentation screenshot\"\n class=\"hidden aspect-video h-full w-full flex-1 rounded-[10px] object-top object-cover drop-shadow-[0px_4px_34px_rgba(0,0,0,0.25)] dark:block\"\n \/>\n <div\n class=\"absolute -bottom-16 -left-16 h-40 w-[calc(100%+8rem)] bg-gradient-to-b from-transparent via-white to-white dark:via-zinc-900 dark:to-zinc-900\"\n ><\/div>\n <\/div>\n\n <div class=\"relative flex items-center gap-6 lg:items-end\">\n <div id=\"docs-card-content\" class=\"flex items-start gap-6 lg:flex-col\">\n <div class=\"flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]\/10 sm:size-16\">\n <svg class=\"size-5 sm:size-6\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\"><path fill=\"#FF2D20\" d=\"M23 4a1 1 0 0 0-1.447-.894L12.224 7.77a.5.5 0 0 1-.448 0L2.447 3.106A1 1 0 0 0 1 4v13.382a1.99 1.99 0 0 0 1.105 1.79l9.448 4.728c.14.065.293.1.447.1.154-.005.306-.04.447-.105l9.453-4.724a1.99 1.99 0 0 0 1.1-1.789V4ZM3 6.023a.25.25 0 0 1 .362-.223l7.5 3.75a.251.251 0 0 1 .138.223v11.2a.25.25 0 0 1-.362.224l-7.5-3.75a.25.25 0 0 1-.138-.22V6.023Zm18 11.2a.25.25 0 0 1-.138.224l-7.5 3.75a.249.249 0 0 1-.329-.099.249.249 0 0 1-.033-.12V9.772a.251.251 0 0 1 .138-.224l7.5-3.75a.25.25 0 0 1 .362.224v11.2Z\"\/><path fill=\"#FF2D20\" d=\"m3.55 1.893 8 4.048a1.008 1.008 0 0 0 .9 0l8-4.048a1 1 0 0 0-.9-1.785l-7.322 3.706a.506.506 0 0 1-.452 0L4.454.108a1 1 0 0 0-.9 1.785H3.55Z\"\/><\/svg>\n <\/div>\n\n <div class=\"pt-3 sm:pt-5 lg:pt-0\">\n <h2 class=\"text-xl font-semibold text-black dark:text-white\">Documentation<\/h2>\n\n <p class=\"mt-4 text-sm\/relaxed\">\n Laravel has wonderful documentation covering every aspect of the framework. Whether you are a newcomer or have prior experience with Laravel, we recommend reading our documentation from beginning to end.\n <\/p>\n <\/div>\n <\/div>\n\n <svg class=\"size-6 shrink-0 stroke-[#FF2D20]\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12h15m0 0l-6.75-6.75M19.5 12l-6.75 6.75\"\/><\/svg>\n <\/div>\n <\/a>\n\n <a\n href=\"https:\/\/laracasts.com\"\n class=\"flex items-start gap-4 rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white\/[0.05] transition duration-300 hover:text-black\/70 hover:ring-black\/20 focus:outline-none focus-visible:ring-[#FF2D20] lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800 dark:hover:text-white\/70 dark:hover:ring-zinc-700 dark:focus-visible:ring-[#FF2D20]\"\n >\n <div class=\"flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]\/10 sm:size-16\">\n <svg class=\"size-5 sm:size-6\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\"><g fill=\"#FF2D20\"><path d=\"M24 8.25a.5.5 0 0 0-.5-.5H.5a.5.5 0 0 0-.5.5v12a2.5 2.5 0 0 0 2.5 2.5h19a2.5 2.5 0 0 0 2.5-2.5v-12Zm-7.765 5.868a1.221 1.221 0 0 1 0 2.264l-6.626 2.776A1.153 1.153 0 0 1 8 18.123v-5.746a1.151 1.151 0 0 1 1.609-1.035l6.626 2.776ZM19.564 1.677a.25.25 0 0 0-.177-.427H15.6a.106.106 0 0 0-.072.03l-4.54 4.543a.25.25 0 0 0 .177.427h3.783c.027 0 .054-.01.073-.03l4.543-4.543ZM22.071 1.318a.047.047 0 0 0-.045.013l-4.492 4.492a.249.249 0 0 0 .038.385.25.25 0 0 0 .14.042h5.784a.5.5 0 0 0 .5-.5v-2a2.5 2.5 0 0 0-1.925-2.432ZM13.014 1.677a.25.25 0 0 0-.178-.427H9.101a.106.106 0 0 0-.073.03l-4.54 4.543a.25.25 0 0 0 .177.427H8.4a.106.106 0 0 0 .073-.03l4.54-4.543ZM6.513 1.677a.25.25 0 0 0-.177-.427H2.5A2.5 2.5 0 0 0 0 3.75v2a.5.5 0 0 0 .5.5h1.4a.106.106 0 0 0 .073-.03l4.54-4.543Z\"\/><\/g><\/svg>\n <\/div>\n\n <div class=\"pt-3 sm:pt-5\">\n <h2 class=\"text-xl font-semibold text-black dark:text-white\">Laracasts<\/h2>\n\n <p class=\"mt-4 text-sm\/relaxed\">\n Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.\n <\/p>\n <\/div>\n\n <svg class=\"size-6 shrink-0 self-center stroke-[#FF2D20]\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12h15m0 0l-6.75-6.75M19.5 12l-6.75 6.75\"\/><\/svg>\n <\/a>\n\n <a\n href=\"https:\/\/laravel-news.com\"\n class=\"flex items-start gap-4 rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white\/[0.05] transition duration-300 hover:text-black\/70 hover:ring-black\/20 focus:outline-none focus-visible:ring-[#FF2D20] lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800 dark:hover:text-white\/70 dark:hover:ring-zinc-700 dark:focus-visible:ring-[#FF2D20]\"\n >\n <div class=\"flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]\/10 sm:size-16\">\n <svg class=\"size-5 sm:size-6\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\"><g fill=\"#FF2D20\"><path d=\"M8.75 4.5H5.5c-.69 0-1.25.56-1.25 1.25v4.75c0 .69.56 1.25 1.25 1.25h3.25c.69 0 1.25-.56 1.25-1.25V5.75c0-.69-.56-1.25-1.25-1.25Z\"\/><path d=\"M24 10a3 3 0 0 0-3-3h-2V2.5a2 2 0 0 0-2-2H2a2 2 0 0 0-2 2V20a3.5 3.5 0 0 0 3.5 3.5h17A3.5 3.5 0 0 0 24 20V10ZM3.5 21.5A1.5 1.5 0 0 1 2 20V3a.5.5 0 0 1 .5-.5h14a.5.5 0 0 1 .5.5v17c0 .295.037.588.11.874a.5.5 0 0 1-.484.625L3.5 21.5ZM22 20a1.5 1.5 0 1 1-3 0V9.5a.5.5 0 0 1 .5-.5H21a1 1 0 0 1 1 1v10Z\"\/><path d=\"M12.751 6.047h2a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-2A.75.75 0 0 1 12 7.3v-.5a.75.75 0 0 1 .751-.753ZM12.751 10.047h2a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-2A.75.75 0 0 1 12 11.3v-.5a.75.75 0 0 1 .751-.753ZM4.751 14.047h10a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-10A.75.75 0 0 1 4 15.3v-.5a.75.75 0 0 1 .751-.753ZM4.75 18.047h7.5a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-7.5A.75.75 0 0 1 4 19.3v-.5a.75.75 0 0 1 .75-.753Z\"\/><\/g><\/svg>\n <\/div>\n\n <div class=\"pt-3 sm:pt-5\">\n <h2 class=\"text-xl font-semibold text-black dark:text-white\">Laravel News<\/h2>\n\n <p class=\"mt-4 text-sm\/relaxed\">\n Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.\n <\/p>\n <\/div>\n\n <svg class=\"size-6 shrink-0 self-center stroke-[#FF2D20]\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12h15m0 0l-6.75-6.75M19.5 12l-6.75 6.75\"\/><\/svg>\n <\/a>\n\n <div class=\"flex items-start gap-4 rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white\/[0.05] transition duration-300 hover:text-black\/70 hover:ring-black\/20 focus:outline-none focus-visible:ring-[#FF2D20] lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800 dark:hover:text-white\/70 dark:hover:ring-zinc-700 dark:focus-visible:ring-[#FF2D20]\">\n <div class=\"flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]\/10 sm:size-16\">\n <svg class=\"size-5 sm:size-6\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <g fill=\"#FF2D20\">\n <path\n d=\"M16.597 12.635a.247.247 0 0 0-.08-.237 2.234 2.234 0 0 1-.769-1.68c.001-.195.03-.39.084-.578a.25.25 0 0 0-.09-.267 8.8 8.8 0 0 0-4.826-1.66.25.25 0 0 0-.268.181 2.5 2.5 0 0 1-2.4 1.824.045.045 0 0 0-.045.037 12.255 12.255 0 0 0-.093 3.86.251.251 0 0 0 .208.214c2.22.366 4.367 1.08 6.362 2.118a.252.252 0 0 0 .32-.079 10.09 10.09 0 0 0 1.597-3.733ZM13.616 17.968a.25.25 0 0 0-.063-.407A19.697 19.697 0 0 0 8.91 15.98a.25.25 0 0 0-.287.325c.151.455.334.898.548 1.328.437.827.981 1.594 1.619 2.28a.249.249 0 0 0 .32.044 29.13 29.13 0 0 0 2.506-1.99ZM6.303 14.105a.25.25 0 0 0 .265-.274 13.048 13.048 0 0 1 .205-4.045.062.062 0 0 0-.022-.07 2.5 2.5 0 0 1-.777-.982.25.25 0 0 0-.271-.149 11 11 0 0 0-5.6 2.815.255.255 0 0 0-.075.163c-.008.135-.02.27-.02.406.002.8.084 1.598.246 2.381a.25.25 0 0 0 .303.193 19.924 19.924 0 0 1 5.746-.438ZM9.228 20.914a.25.25 0 0 0 .1-.393 11.53 11.53 0 0 1-1.5-2.22 12.238 12.238 0 0 1-.91-2.465.248.248 0 0 0-.22-.187 18.876 18.876 0 0 0-5.69.33.249.249 0 0 0-.179.336c.838 2.142 2.272 4 4.132 5.353a.254.254 0 0 0 .15.048c1.41-.01 2.807-.282 4.117-.802ZM18.93 12.957l-.005-.008a.25.25 0 0 0-.268-.082 2.21 2.21 0 0 1-.41.081.25.25 0 0 0-.217.2c-.582 2.66-2.127 5.35-5.75 7.843a.248.248 0 0 0-.09.299.25.25 0 0 0 .065.091 28.703 28.703 0 0 0 2.662 2.12.246.246 0 0 0 .209.037c2.579-.701 4.85-2.242 6.456-4.378a.25.25 0 0 0 .048-.189 13.51 13.51 0 0 0-2.7-6.014ZM5.702 7.058a.254.254 0 0 0 .2-.165A2.488 2.488 0 0 1 7.98 5.245a.093.093 0 0 0 .078-.062 19.734 19.734 0 0 1 3.055-4.74.25.25 0 0 0-.21-.41 12.009 12.009 0 0 0-10.4 8.558.25.25 0 0 0 .373.281 12.912 12.912 0 0 1 4.826-1.814ZM10.773 22.052a.25.25 0 0 0-.28-.046c-.758.356-1.55.635-2.365.833a.25.25 0 0 0-.022.48c1.252.43 2.568.65 3.893.65.1 0 .2 0 .3-.008a.25.25 0 0 0 .147-.444c-.526-.424-1.1-.917-1.673-1.465ZM18.744 8.436a.249.249 0 0 0 .15.228 2.246 2.246 0 0 1 1.352 2.054c0 .337-.08.67-.23.972a.25.25 0 0 0 .042.28l.007.009a15.016 15.016 0 0 1 2.52 4.6.25.25 0 0 0 .37.132.25.25 0 0 0 .096-.114c.623-1.464.944-3.039.945-4.63a12.005 12.005 0 0 0-5.78-10.258.25.25 0 0 0-.373.274c.547 2.109.85 4.274.901 6.453ZM9.61 5.38a.25.25 0 0 0 .08.31c.34.24.616.561.8.935a.25.25 0 0 0 .3.127.631.631 0 0 1 .206-.034c2.054.078 4.036.772 5.69 1.991a.251.251 0 0 0 .267.024c.046-.024.093-.047.141-.067a.25.25 0 0 0 .151-.23A29.98 29.98 0 0 0 15.957.764a.25.25 0 0 0-.16-.164 11.924 11.924 0 0 0-2.21-.518.252.252 0 0 0-.215.076A22.456 22.456 0 0 0 9.61 5.38Z\"\n \/>\n <\/g>\n <\/svg>\n <\/div>\n\n <div class=\"pt-3 sm:pt-5\">\n <h2 class=\"text-xl font-semibold text-black dark:text-white\">Vibrant Ecosystem<\/h2>\n\n <p class=\"mt-4 text-sm\/relaxed\">\n Laravel's robust library of first-party tools and libraries, such as <a href=\"https:\/\/forge.laravel.com\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white dark:focus-visible:ring-[#FF2D20]\">Forge<\/a>, <a href=\"https:\/\/vapor.laravel.com\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Vapor<\/a>, <a href=\"https:\/\/nova.laravel.com\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Nova<\/a>, <a href=\"https:\/\/envoyer.io\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Envoyer<\/a>, and <a href=\"https:\/\/herd.laravel.com\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Herd<\/a> help you take your projects to the next level. Pair them with powerful open source libraries like <a href=\"https:\/\/laravel.com\/docs\/billing\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Cashier<\/a>, <a href=\"https:\/\/laravel.com\/docs\/dusk\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Dusk<\/a>, <a href=\"https:\/\/laravel.com\/docs\/broadcasting\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Echo<\/a>, <a href=\"https:\/\/laravel.com\/docs\/horizon\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Horizon<\/a>, <a href=\"https:\/\/laravel.com\/docs\/sanctum\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Sanctum<\/a>, <a href=\"https:\/\/laravel.com\/docs\/telescope\" class=\"rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white\">Telescope<\/a>, and more.\n <\/p>\n <\/div>\n <\/div>\n <\/div>\n <\/main>\n\n <footer class=\"py-16 text-center text-sm text-black dark:text-white\/70\">\n Laravel v{{ Illuminate\\Foundation\\Application::VERSION }} (PHP v{{ PHP_VERSION }})\n <\/footer>\n <\/div>\n <\/div>\n <\/div>\n <\/body>\n<\/html>\n", "summary": { "method_count": 0 } } } } }