empty laravel app

This commit is contained in:
2026-02-03 07:30:06 +01:00
parent 55bf0ebea5
commit 04a61b71ef
169 changed files with 15318 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
{
"permissions": {
"allow": [
"WebFetch(domain:nova.laravel.com)",
"Bash(test:*)",
"mcp__context7__resolve-library-id",
"mcp__context7__query-docs",
"Bash(herd php:*)",
"Bash(composer:*)",
"Bash(rsync:*)",
"mcp__playwright__browser_navigate",
"mcp__playwright__browser_fill_form",
"mcp__playwright__browser_click",
"mcp__playwright__browser_handle_dialog",
"mcp__playwright__browser_snapshot",
"mcp__playwright__browser_close"
]
}
}

18
.editorconfig Normal file
View File

@@ -0,0 +1,18 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2
[compose.yaml]
indent_size = 4

65
.env.example Normal file
View File

@@ -0,0 +1,65 @@
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
# PHP_CLI_SERVER_WORKERS=4
BCRYPT_ROUNDS=12
LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database
CACHE_STORE=database
# CACHE_PREFIX=
MEMCACHED_HOST=127.0.0.1
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=log
MAIL_SCHEME=null
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}"

11
.gitattributes vendored Normal file
View File

@@ -0,0 +1,11 @@
* text=auto eol=lf
*.blade.php diff=html
*.css diff=css
*.html diff=html
*.md diff=markdown
*.php diff=php
/.github export-ignore
CHANGELOG.md export-ignore
.styleci.yml export-ignore

24
.gitignore vendored Normal file
View File

@@ -0,0 +1,24 @@
*.log
.DS_Store
.env
.env.backup
.env.production
.phpactor.json
.phpunit.result.cache
/.fleet
/.idea
/.nova
/.phpunit.cache
/.vscode
/.zed
/auth.json
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/storage/pail
/vendor
Homestead.json
Homestead.yaml
Thumbs.db

125
CLAUDE.md Normal file
View File

@@ -0,0 +1,125 @@
# CLAUDE.md Go No Go
## Project Overview
Laravel 12 application with Laravel Nova 5 administration panel. The admin panel is served at `/cp`. Authentication includes two-factor authentication (2FA) and email verification.
- **Framework:** Laravel 12
- **Admin Panel:** Laravel Nova 5 at `/cp`
- **Auth:** Fortify with 2FA + email verification
- **Database:** MySQL (`go-no-go`)
- **Local URL:** http://go-no-go.test (Laravel Herd)
## Blaude Execution Flow
Before starting any task, load application knowledge:
### Phase 1: Load Application Knowledge
1. Read `docs/index.md` to understand available documentation
2. Based on the task, identify which documentation files are relevant
3. Read the relevant documentation files to load context
4. Always include docs and rules about sub-agents
5. If `docs/index.md` doesn't exist, **STOP** and inform the user
### Phase 2: Analyze Task Requirements
1. Parse the task description
2. Determine which sub-agents will be needed
3. Identify which documentation is most relevant
4. Plan the execution approach
### Phase 3: Execute Task
1. Use the TodoWrite tool to create a task list
2. Launch appropriate sub-agents and let them read the relevant docs found in Phase 1
3. Follow async execution patterns (parallel when independent, sequential when dependent)
4. Track progress by updating todos
## Claude Code Mandatory Sub-Agent Orchestration Rules
You are operating in a project that supports **specialized sub-agents**.
These rules are **non-optional**.
### Core Principle
**You are an orchestrator, not a solo executor.**
Whenever a task involves analysis, code changes, verification, or testing, you MUST:
- Identify suitable sub-agents
- Delegate work to them
- Coordinate their outputs
- Only integrate results at the end
### Absolute Stop Rule
If you are about to write, modify, refactor, or delete code directly, STOP.
Before making any code change, you MUST:
1. Identify available sub-agents
2. Decide which sub-agents should perform the work
3. Delegate the work to them
Direct code edits without delegation are considered an incorrect response.
### Mandatory Workflow
#### Phase 1: Task Decomposition & Agent Selection
Before starting:
1. Break the task into clear, concrete subtasks
2. For each subtask, determine what specialization is required and whether it can run independently
3. Assign each subtask to a specialized sub-agent
You MUST explicitly state which sub-agents are being used and why.
#### Phase 2: Parallel Execution
Default assumption: subtasks run in parallel.
- Launch all independent sub-agents in a single message
- Each sub-agent must have a clearly defined scope and explicit file or responsibility boundaries
- Sub-agents MUST NOT overlap responsibility unless explicitly required
Sequential execution is allowed ONLY when a hard dependency exists.
#### Phase 3: Verification & Synthesis
After sub-agents complete:
1. Verify all delegated tasks completed successfully
2. Resolve conflicts or inconsistencies
3. Integrate outputs into a coherent result
For any user-facing or logic-critical change, delegate verification to an appropriate testing or validation sub-agent.
### Parallelism Rules
Run in parallel:
- Independent file changes
- Backend + frontend work
- Code implementation + documentation
- Multiple exploration queries
Run sequentially:
- Exploration then Implementation
- Implementation then Testing
- Testing then Fixes then Re-testing
### Transparency Requirements
You MUST announce which sub-agents are being used before execution and summarize each sub-agent's contribution after execution.
## Key Commands
- `herd php artisan migrate:fresh --seed` Reset database with seed data
- `herd php artisan app:schema-generate` Regenerate `database/schema.md`
- `/blaude_work` Execute tasks with full application knowledge
- `/blaude_update_docs` Update documentation and index
- `/blaude_make_schema` Generate database schema documentation
## Test User
- **Email:** jonathan@blijnder.nl
- **Password:** secret
- **Auto-login:** `GET /login-jonathan` (local/testing environments only)

134
README.md
View File

@@ -0,0 +1,134 @@
<div align="center">
```
██████╗ ██████╗ ███╗ ██╗ ██████╗ ██████╗ ██████╗
██╔════╝ ██╔═══██╗ ████╗ ██║██╔═══██╗ ██╔════╝ ██╔═══██╗
██║ ███╗██║ ██║█████╗██╔██╗ ██║██║ ██║█████╗██║ ███╗██║ ██║
██║ ██║██║ ██║╚════╝██║╚██╗██║██║ ██║╚════╝██║ ██║██║ ██║
╚██████╔╝╚██████╔╝ ██║ ╚████║╚██████╔╝ ╚██████╔╝╚██████╔╝
╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝
```
**✨ Laravel 12 + Nova 5 Administration Platform ✨**
`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`
</div>
## 🎮 GETTING STARTED
<div align="center">
```
┌─────────────────────────────────────────────────────────────┐
│ ⚡ QUICK START ⚡ │
└─────────────────────────────────────────────────────────────┘
```
</div>
### Prerequisites
- 📦 PHP 8.2+
- 📦 Laravel Herd
- 📦 MySQL
- 📦 Composer
- 📦 Node.js & npm
### Installation
```bash
# Step 1: Install dependencies
composer install && npm install
# Step 2: Configure environment
cp .env.example .env
# Edit .env: set DB_DATABASE=go-no-go, APP_URL=http://go-no-go.test
# Step 3: Generate key
herd php artisan key:generate
# Step 4: Run migrations and seed
herd php artisan migrate:fresh --seed
# Step 5: Build assets
npm run build
```
### Quick Access
```bash
# Auto-login as test user (local only)
open http://go-no-go.test/login-jonathan
# Admin panel
open http://go-no-go.test/cp
```
<p align="center">
<code>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</code>
</p>
## 📺 FEATURES
- 🔐 **Two-Factor Authentication** Fortify-powered 2FA for admin accounts
- ✉️ **Email Verification** Required for Nova access
- 🛡️ **Nova 5 Admin Panel** Full administration at `/cp`
- 👤 **Test User Seeder** Quick setup with `JonathanSeeder`
- 🚀 **Auto-Login Route** `/login-jonathan` for local development
<p align="center">
<code>═══════════════════════════════════════════════════════════════</code>
</p>
## 📼 DOCUMENTATION
<table>
<tr>
<td width="50%">
### 📁 Core Docs
| File | Description |
|------|-------------|
| [`docs/index.md`](docs/index.md) | Master documentation index |
| [`database/schema.md`](database/schema.md) | Database schema reference |
| [`CLAUDE.md`](CLAUDE.md) | AI assistant project instructions |
</td>
<td width="50%">
### 🤖 Sub-Agents
| Agent | Purpose |
|-------|---------|
| `code-style-reviewer` | Code standards enforcement |
| `laravel-php-code-writer` | PHP code implementation |
| `laravel-nova-code-writer` | Nova resource management |
| `phpunit-code-writer` | PHPUnit test creation |
| `vue-code-writer` | Vue.js component building |
</td>
</tr>
</table>
<p align="center">
<code>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</code>
</p>
## 🌴 CONFIGURATION
| Setting | Value |
|---------|-------|
| Admin Panel | `/cp` |
| Database | `go-no-go` (MySQL) |
| Local URL | `http://go-no-go.test` |
| Test User | `jonathan@blijnder.nl` / `secret` |
<div align="center">
`═══════════════════════════════════════════════════════════════`
**Made with 💜 and mass amounts of ☕**
*🌴 Stay rad! 🌴*
</div>

View File

@@ -0,0 +1,133 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
class GenerateSchemaCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:schema-generate';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Generate a schema.md file documenting all database tables';
/**
* Execute the console command.
*/
public function handle(): int
{
$this->info('Generating database schema documentation...');
// Get all tables
$tables = DB::select('SHOW TABLES');
$tableKey = 'Tables_in_' . DB::getDatabaseName();
$tableNames = [];
foreach ($tables as $table) {
$tableNames[] = $table->$tableKey;
}
// Sort tables alphabetically
sort($tableNames);
// Build markdown content
$markdown = "# Database Schema Documentation\n\n";
$markdown .= '> Generated: ' . date('Y-m-d H:i:s') . "\n";
$markdown .= '> Database: ' . DB::getDatabaseName() . "\n";
$markdown .= '> Total Tables: ' . count($tableNames) . "\n\n";
$markdown .= "## Table of Contents\n\n";
// Add table of contents
foreach ($tableNames as $tableName) {
$markdown .= "- [{$tableName}](#{$tableName})\n";
}
$markdown .= "\n---\n\n";
// Process each table
foreach ($tableNames as $tableName) {
$this->line("Processing table: {$tableName}");
$markdown .= "## {$tableName}\n\n";
// Get columns
$columns = DB::select("SHOW COLUMNS FROM `{$tableName}`");
// Get foreign keys
$foreignKeys = DB::select('
SELECT
CONSTRAINT_NAME,
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
TABLE_NAME = ?
AND TABLE_SCHEMA = DATABASE()
AND REFERENCED_TABLE_NAME IS NOT NULL
', [$tableName]);
// Build FK lookup array
$fkLookup = [];
foreach ($foreignKeys as $fk) {
$fkLookup[$fk->COLUMN_NAME] = [
'table' => $fk->REFERENCED_TABLE_NAME,
'column' => $fk->REFERENCED_COLUMN_NAME,
'constraint' => $fk->CONSTRAINT_NAME,
];
}
// Build columns table
$markdown .= "| Field | Type | Null | Key | Default | Extra | Foreign Key |\n";
$markdown .= "|-------|------|------|-----|---------|-------|-------------|\n";
foreach ($columns as $column) {
$fkInfo = '';
if (isset($fkLookup[$column->Field])) {
$fk = $fkLookup[$column->Field];
$fkInfo = "{$fk['table']}.{$fk['column']}";
}
$markdown .= "| {$column->Field} | {$column->Type} | {$column->Null} | {$column->Key} | ";
$markdown .= ($column->Default === null ? 'NULL' : $column->Default) . ' | ';
$markdown .= "{$column->Extra} | {$fkInfo} |\n";
}
// Add foreign key details if any
if (! empty($foreignKeys)) {
$markdown .= "\n### Foreign Key Constraints\n\n";
foreach ($foreignKeys as $fk) {
$markdown .= "- **{$fk->CONSTRAINT_NAME}**: `{$fk->COLUMN_NAME}` → `{$fk->REFERENCED_TABLE_NAME}.{$fk->REFERENCED_COLUMN_NAME}`\n";
}
}
$markdown .= "\n---\n\n";
}
// Ensure directory exists
$directory = base_path('database');
if (! File::exists($directory)) {
File::makeDirectory($directory, 0755, true);
}
// Write to file
$filePath = $directory . '/schema.md';
File::put($filePath, $markdown);
$this->info('✅ Schema documentation generated successfully!');
$this->line("📄 File saved to: {$filePath}");
return Command::SUCCESS;
}
}

View File

@@ -0,0 +1,8 @@
<?php
namespace App\Http\Controllers;
abstract class Controller
{
//
}

49
app/Models/User.php Normal file
View File

@@ -0,0 +1,49 @@
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
class User extends Authenticatable implements MustVerifyEmail
{
/** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory, Notifiable, TwoFactorAuthenticatable;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var list<string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Nova\Dashboards;
use Laravel\Nova\Cards\Help;
use Laravel\Nova\Dashboards\Main as Dashboard;
class Main extends Dashboard
{
/**
* Get the cards for the dashboard.
*
* @return array<int, \Laravel\Nova\Card>
*/
public function cards(): array
{
return [
new Help,
];
}
}

45
app/Nova/Resource.php Normal file
View File

@@ -0,0 +1,45 @@
<?php
namespace App\Nova;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Resource as NovaResource;
use Laravel\Scout\Builder as ScoutBuilder;
abstract class Resource extends NovaResource
{
/**
* Build an "index" query for the given resource.
*/
public static function indexQuery(NovaRequest $request, Builder $query): Builder
{
return $query;
}
/**
* Build a Scout search query for the given resource.
*/
public static function scoutQuery(NovaRequest $request, ScoutBuilder $query): ScoutBuilder
{
return $query;
}
/**
* Build a "detail" query for the given resource.
*/
public static function detailQuery(NovaRequest $request, Builder $query): Builder
{
return parent::detailQuery($request, $query);
}
/**
* Build a "relatable" query for the given resource.
*
* This query determines which instances of the model may be attached to other resources.
*/
public static function relatableQuery(NovaRequest $request, Builder $query): Builder
{
return parent::relatableQuery($request, $query);
}
}

105
app/Nova/User.php Normal file
View File

@@ -0,0 +1,105 @@
<?php
namespace App\Nova;
use Illuminate\Http\Request;
use Laravel\Nova\Auth\PasswordValidationRules;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Password;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
class User extends Resource
{
use PasswordValidationRules;
/**
* The model the resource corresponds to.
*
* @var class-string<\App\Models\User>
*/
public static $model = \App\Models\User::class;
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'name';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'id', 'name', 'email',
];
/**
* Get the fields displayed by the resource.
*
* @return array<int, \Laravel\Nova\Fields\Field|\Laravel\Nova\Panel|\Laravel\Nova\ResourceTool|\Illuminate\Http\Resources\MergeValue>
*/
public function fields(NovaRequest $request): array
{
return [
ID::make()->sortable(),
Text::make('Name')
->sortable()
->rules('required', 'max:255'),
Text::make('Email')
->sortable()
->rules('required', 'email', 'max:254')
->creationRules('unique:users,email')
->updateRules('unique:users,email,{{resourceId}}'),
Password::make('Password')
->onlyOnForms()
->creationRules($this->passwordRules())
->updateRules($this->optionalPasswordRules()),
];
}
/**
* Get the cards available for the request.
*
* @return array<int, \Laravel\Nova\Card>
*/
public function cards(NovaRequest $request): array
{
return [];
}
/**
* Get the filters available for the resource.
*
* @return array<int, \Laravel\Nova\Filters\Filter>
*/
public function filters(NovaRequest $request): array
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @return array<int, \Laravel\Nova\Lenses\Lens>
*/
public function lenses(NovaRequest $request): array
{
return [];
}
/**
* Get the actions available for the resource.
*
* @return array<int, \Laravel\Nova\Actions\Action>
*/
public function actions(NovaRequest $request): array
{
return [];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
//
}
}

View File

@@ -0,0 +1,94 @@
<?php
namespace App\Providers;
use App\Models\User;
use Illuminate\Support\Facades\Gate;
use Laravel\Fortify\Features;
use Laravel\Nova\Nova;
use Laravel\Nova\NovaApplicationServiceProvider;
class NovaServiceProvider extends NovaApplicationServiceProvider
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
parent::boot();
//
}
/**
* Register the configurations for Laravel Fortify.
*/
protected function fortify(): void
{
Nova::fortify()
->features([
Features::updatePasswords(),
Features::emailVerification(),
Features::twoFactorAuthentication(['confirm' => true, 'confirmPassword' => true]),
])
->register();
}
/**
* Register the Nova routes.
*/
protected function routes(): void
{
Nova::routes()
->withAuthenticationRoutes(default: true)
->withPasswordResetRoutes()
->withEmailVerificationRoutes()
->register();
}
/**
* Register the Nova gate.
*
* This gate determines who can access Nova in non-local environments.
*/
protected function gate(): void
{
Gate::define('viewNova', function (User $user) {
return in_array($user->email, [
'jonathan@blijnder.nl',
]);
});
}
/**
* Get the dashboards that should be listed in the Nova sidebar.
*
* @return array<int, \Laravel\Nova\Dashboard>
*/
protected function dashboards(): array
{
return [
new \App\Nova\Dashboards\Main,
];
}
/**
* Get the tools that should be listed in the Nova sidebar.
*
* @return array<int, \Laravel\Nova\Tool>
*/
public function tools(): array
{
return [];
}
/**
* Register any application services.
*/
public function register(): void
{
parent::register();
//
}
}

18
artisan Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env php
<?php
use Illuminate\Foundation\Application;
use Symfony\Component\Console\Input\ArgvInput;
define('LARAVEL_START', microtime(true));
// Register the Composer autoloader...
require __DIR__.'/vendor/autoload.php';
// Bootstrap Laravel and handle the command...
/** @var Application $app */
$app = require_once __DIR__.'/bootstrap/app.php';
$status = $app->handleCommand(new ArgvInput);
exit($status);

18
bootstrap/app.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware): void {
//
})
->withExceptions(function (Exceptions $exceptions): void {
//
})->create();

2
bootstrap/cache/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*
!.gitignore

6
bootstrap/providers.php Normal file
View File

@@ -0,0 +1,6 @@
<?php
return [
App\Providers\AppServiceProvider::class,
App\Providers\NovaServiceProvider::class,
];

94
composer.json Normal file
View File

@@ -0,0 +1,94 @@
{
"$schema": "https://getcomposer.org/schema.json",
"name": "laravel/laravel",
"type": "project",
"description": "The skeleton application for the Laravel framework.",
"keywords": ["laravel", "framework"],
"license": "MIT",
"require": {
"php": "^8.2",
"laravel/framework": "^12.0",
"laravel/nova": "^5.0",
"laravel/tinker": "^2.10.1"
},
"require-dev": {
"fakerphp/faker": "^1.23",
"laravel/nova-devtool": "^1.8",
"laravel/pail": "^1.2.2",
"laravel/pint": "^1.24",
"laravel/sail": "^1.41",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.6",
"phpunit/phpunit": "^11.5.3"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"setup": [
"composer install",
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
"@php artisan key:generate",
"@php artisan migrate --force",
"npm install",
"npm run build"
],
"dev": [
"Composer\\Config::disableProcessTimeout",
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
],
"test": [
"@php artisan config:clear --ansi",
"@php artisan test"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi",
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
"@php artisan migrate --graceful --ansi"
],
"pre-package-uninstall": [
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
]
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true,
"allow-plugins": {
"pestphp/pest-plugin": true,
"php-http/discovery": true
}
},
"minimum-stability": "stable",
"prefer-stable": true,
"repositories": [
{
"type": "composer",
"url": "https://nova.laravel.com"
}
]
}

9816
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

126
config/app.php Normal file
View File

@@ -0,0 +1,126 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application, which will be used when the
| framework needs to place the application's name in a notification or
| other UI elements where an application name needs to be displayed.
|
*/
'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services the application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => (bool) env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| the application so that it's available within Artisan commands.
|
*/
'url' => env('APP_URL', 'http://localhost'),
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. The timezone
| is set to "UTC" by default as it is suitable for most use cases.
|
*/
'timezone' => 'UTC',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by Laravel's translation / localization methods. This option can be
| set to any locale for which you plan to have translation strings.
|
*/
'locale' => env('APP_LOCALE', 'en'),
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is utilized by Laravel's encryption services and should be set
| to a random, 32 character string to ensure that all encrypted values
| are secure. You should do this prior to deploying the application.
|
*/
'cipher' => 'AES-256-CBC',
'key' => env('APP_KEY'),
'previous_keys' => [
...array_filter(
explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
),
],
/*
|--------------------------------------------------------------------------
| Maintenance Mode Driver
|--------------------------------------------------------------------------
|
| These configuration options determine the driver used to determine and
| manage Laravel's "maintenance mode" status. The "cache" driver will
| allow maintenance mode to be controlled across multiple machines.
|
| Supported drivers: "file", "cache"
|
*/
'maintenance' => [
'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
'store' => env('APP_MAINTENANCE_STORE', 'database'),
],
];

115
config/auth.php Normal file
View File

@@ -0,0 +1,115 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option defines the default authentication "guard" and password
| reset "broker" for your application. You may change these values
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => env('AUTH_GUARD', 'web'),
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| which utilizes session storage plus the Eloquent user provider.
|
| All authentication guards have a user provider, which defines how the
| users are actually retrieved out of your database or other storage
| system used by the application. Typically, Eloquent is utilized.
|
| Supported: "session"
|
*/
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication guards have a user provider, which defines how the
| users are actually retrieved out of your database or other storage
| system used by the application. Typically, Eloquent is utilized.
|
| If you have multiple user tables or models you may configure multiple
| providers to represent the model / table. These providers may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => env('AUTH_MODEL', App\Models\User::class),
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| These configuration options specify the behavior of Laravel's password
| reset functionality, including the table utilized for token storage
| and the user provider that is invoked to actually retrieve users.
|
| The expiry time is the number of minutes that each reset token will be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
| The throttle setting is the number of seconds a user must wait before
| generating more password reset tokens. This prevents the user from
| quickly generating a very large amount of password reset tokens.
|
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
'expire' => 60,
'throttle' => 60,
],
],
/*
|--------------------------------------------------------------------------
| Password Confirmation Timeout
|--------------------------------------------------------------------------
|
| Here you may define the number of seconds before a password confirmation
| window expires and users are asked to re-enter their password via the
| confirmation screen. By default, the timeout lasts for three hours.
|
*/
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
];

117
config/cache.php Normal file
View File

@@ -0,0 +1,117 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Cache Store
|--------------------------------------------------------------------------
|
| This option controls the default cache store that will be used by the
| framework. This connection is utilized if another isn't explicitly
| specified when running a cache operation inside the application.
|
*/
'default' => env('CACHE_STORE', 'database'),
/*
|--------------------------------------------------------------------------
| Cache Stores
|--------------------------------------------------------------------------
|
| Here you may define all of the cache "stores" for your application as
| well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches.
|
| Supported drivers: "array", "database", "file", "memcached",
| "redis", "dynamodb", "octane",
| "failover", "null"
|
*/
'stores' => [
'array' => [
'driver' => 'array',
'serialize' => false,
],
'database' => [
'driver' => 'database',
'connection' => env('DB_CACHE_CONNECTION'),
'table' => env('DB_CACHE_TABLE', 'cache'),
'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
'lock_table' => env('DB_CACHE_LOCK_TABLE'),
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
'lock_path' => storage_path('framework/cache/data'),
],
'memcached' => [
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
'options' => [
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],
'redis' => [
'driver' => 'redis',
'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
],
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
],
'octane' => [
'driver' => 'octane',
],
'failover' => [
'driver' => 'failover',
'stores' => [
'database',
'array',
],
],
],
/*
|--------------------------------------------------------------------------
| Cache Key Prefix
|--------------------------------------------------------------------------
|
| When utilizing the APC, database, memcached, Redis, and DynamoDB cache
| stores, there might be other applications using the same cache. For
| that reason, you may prefix every cache key to avoid collisions.
|
*/
'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
];

183
config/database.php Normal file
View File

@@ -0,0 +1,183 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for database operations. This is
| the connection which will be utilized unless another connection
| is explicitly specified when you execute a query / statement.
|
*/
'default' => env('DB_CONNECTION', 'sqlite'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Below are all of the database connections defined for your application.
| An example configuration is provided for each database system which
| is supported by Laravel. You're free to add / remove connections.
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DB_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
'busy_timeout' => null,
'journal_mode' => null,
'synchronous' => null,
'transaction_mode' => 'DEFERRED',
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
(PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'mariadb' => [
'driver' => 'mariadb',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
(PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => env('DB_CHARSET', 'utf8'),
'prefix' => '',
'prefix_indexes' => true,
'search_path' => 'public',
'sslmode' => env('DB_SSLMODE', 'prefer'),
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DB_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => env('DB_CHARSET', 'utf8'),
'prefix' => '',
'prefix_indexes' => true,
// 'encrypt' => env('DB_ENCRYPT', 'yes'),
// 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
],
],
/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run on the database.
|
*/
'migrations' => [
'table' => 'migrations',
'update_date_on_publish' => true,
],
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as Memcached. You may define your connection settings here.
|
*/
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
'persistent' => env('REDIS_PERSISTENT', false),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
'max_retries' => env('REDIS_MAX_RETRIES', 3),
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
'max_retries' => env('REDIS_MAX_RETRIES', 3),
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
],
],
];

80
config/filesystems.php Normal file
View File

@@ -0,0 +1,80 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application for file storage.
|
*/
'default' => env('FILESYSTEM_DISK', 'local'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
| Below you may configure as many filesystem disks as necessary, and you
| may even configure multiple disks for the same driver. Examples for
| most supported storage drivers are configured here for reference.
|
| Supported drivers: "local", "ftp", "sftp", "s3"
|
*/
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app/private'),
'serve' => true,
'throw' => false,
'report' => false,
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage',
'visibility' => 'public',
'throw' => false,
'report' => false,
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
'report' => false,
],
],
/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/
'links' => [
public_path('storage') => storage_path('app/public'),
],
];

132
config/logging.php Normal file
View File

@@ -0,0 +1,132 @@
<?php
use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;
use Monolog\Processor\PsrLogMessageProcessor;
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that is utilized to write
| messages to your logs. The value provided here should match one of
| the channels present in the list of "channels" configured below.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Deprecations Log Channel
|--------------------------------------------------------------------------
|
| This option controls the log channel that should be used to log warnings
| regarding deprecated PHP and library features. This allows you to get
| your application ready for upcoming major versions of dependencies.
|
*/
'deprecations' => [
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
'trace' => env('LOG_DEPRECATIONS_TRACE', false),
],
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Laravel
| utilizes the Monolog PHP logging library, which includes a variety
| of powerful log handlers and formatters that you're free to use.
|
| Available drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog", "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => explode(',', (string) env('LOG_STACK', 'single')),
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'replace_placeholders' => true,
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => env('LOG_DAILY_DAYS', 14),
'replace_placeholders' => true,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
'level' => env('LOG_LEVEL', 'critical'),
'replace_placeholders' => true,
],
'papertrail' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
],
'processors' => [PsrLogMessageProcessor::class],
],
'stderr' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => StreamHandler::class,
'handler_with' => [
'stream' => 'php://stderr',
],
'formatter' => env('LOG_STDERR_FORMATTER'),
'processors' => [PsrLogMessageProcessor::class],
],
'syslog' => [
'driver' => 'syslog',
'level' => env('LOG_LEVEL', 'debug'),
'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
'replace_placeholders' => true,
],
'errorlog' => [
'driver' => 'errorlog',
'level' => env('LOG_LEVEL', 'debug'),
'replace_placeholders' => true,
],
'null' => [
'driver' => 'monolog',
'handler' => NullHandler::class,
],
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];

118
config/mail.php Normal file
View File

@@ -0,0 +1,118 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Mailer
|--------------------------------------------------------------------------
|
| This option controls the default mailer that is used to send all email
| messages unless another mailer is explicitly specified when sending
| the message. All additional mailers can be configured within the
| "mailers" array. Examples of each type of mailer are provided.
|
*/
'default' => env('MAIL_MAILER', 'log'),
/*
|--------------------------------------------------------------------------
| Mailer Configurations
|--------------------------------------------------------------------------
|
| Here you may configure all of the mailers used by your application plus
| their respective settings. Several examples have been configured for
| you and you are free to add your own as your application requires.
|
| Laravel supports a variety of mail "transport" drivers that can be used
| when delivering an email. You may specify which one you're using for
| your mailers below. You may also add additional mailers if needed.
|
| Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
| "postmark", "resend", "log", "array",
| "failover", "roundrobin"
|
*/
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'scheme' => env('MAIL_SCHEME'),
'url' => env('MAIL_URL'),
'host' => env('MAIL_HOST', '127.0.0.1'),
'port' => env('MAIL_PORT', 2525),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
],
'ses' => [
'transport' => 'ses',
],
'postmark' => [
'transport' => 'postmark',
// 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
// 'client' => [
// 'timeout' => 5,
// ],
],
'resend' => [
'transport' => 'resend',
],
'sendmail' => [
'transport' => 'sendmail',
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
],
'log' => [
'transport' => 'log',
'channel' => env('MAIL_LOG_CHANNEL'),
],
'array' => [
'transport' => 'array',
],
'failover' => [
'transport' => 'failover',
'mailers' => [
'smtp',
'log',
],
'retry_after' => 60,
],
'roundrobin' => [
'transport' => 'roundrobin',
'mailers' => [
'ses',
'postmark',
],
'retry_after' => 60,
],
],
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all emails sent by your application to be sent from
| the same address. Here you may specify a name and address that is
| used globally for all emails that are sent by your application.
|
*/
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
];

205
config/nova.php Normal file
View File

@@ -0,0 +1,205 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Nova License Key
|--------------------------------------------------------------------------
|
| The following configuration option contains your Nova license key. On
| non-local domains, Nova will verify that the Nova installation has
| a valid license associated with the application's active domain.
|
*/
'license_key' => env('NOVA_LICENSE_KEY'),
/*
|--------------------------------------------------------------------------
| Nova App Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to display the name of the application within the UI
| or in other locations. Of course, you're free to change the value.
|
*/
'name' => env('NOVA_APP_NAME', env('APP_NAME')),
/*
|--------------------------------------------------------------------------
| Nova Domain Name
|--------------------------------------------------------------------------
|
| This value is the "domain name" associated with your application. This
| can be used to prevent Nova's internal routes from being registered
| on subdomains which do not need access to your admin application.
|
*/
'domain' => env('NOVA_DOMAIN_NAME', null),
/*
|--------------------------------------------------------------------------
| Nova Path
|--------------------------------------------------------------------------
|
| This is the URI path where Nova will be accessible from. Feel free to
| change this path to anything you like. Note that this URI will not
| affect Nova's internal API routes which aren't exposed to users.
|
*/
'path' => '/cp',
/*
|--------------------------------------------------------------------------
| Nova Authentication Guard
|--------------------------------------------------------------------------
|
| This configuration option defines the authentication guard that will
| be used to protect your Nova routes. This option should match one
| of the authentication guards defined in the "auth" config file.
|
*/
'guard' => env('NOVA_GUARD', null),
/*
|--------------------------------------------------------------------------
| Nova Password Reset Broker
|--------------------------------------------------------------------------
|
| This configuration option defines the password broker that will be
| used when passwords are reset. This option should mirror one of
| the password reset options defined in the "auth" config file.
|
*/
'passwords' => env('NOVA_PASSWORDS', null),
/*
|--------------------------------------------------------------------------
| Nova Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will be assigned to every Nova route, giving you the
| chance to add your own middleware to this stack or override any of
| the existing middleware. Or, you can just stick with this stack.
|
*/
'middleware' => [
'web',
\Laravel\Nova\Http\Middleware\HandleInertiaRequests::class,
'nova:serving',
],
'api_middleware' => [
'nova',
\Laravel\Nova\Http\Middleware\Authenticate::class,
// \Laravel\Nova\Http\Middleware\AuthenticateSession::class,
\Laravel\Nova\Http\Middleware\EnsureEmailIsVerified::class,
\Laravel\Nova\Http\Middleware\Authorize::class,
],
'asset_middleware' => [
'nova:api',
\Illuminate\Http\Middleware\CheckResponseForModifications::class,
],
/*
|--------------------------------------------------------------------------
| Nova Pagination Type
|--------------------------------------------------------------------------
|
| This option defines the visual style used in Nova's resource pagination
| views. You may select between "simple", "load-more", and "links" for
| your applications. Feel free to adjust this option to your choice.
|
*/
'pagination' => 'simple',
/*
|--------------------------------------------------------------------------
| Nova Storage Disk
|--------------------------------------------------------------------------
|
| This configuration option allows you to define the default disk that
| will be used to store files using the Image, File, and other file
| related field types. You're welcome to use any configured disk.
|
*/
'storage_disk' => env('NOVA_STORAGE_DISK', 'public'),
/*
|--------------------------------------------------------------------------
| Nova Currency
|--------------------------------------------------------------------------
|
| This configuration option allows you to define the default currency
| used by the Currency field within Nova. You may change this to a
| valid ISO 4217 currency code to suit your application's needs.
|
*/
'currency' => 'USD',
/*
|--------------------------------------------------------------------------
| Branding
|--------------------------------------------------------------------------
|
| These configuration values allow you to customize the branding of the
| Nova interface, including the primary color and the logo that will
| be displayed within the Nova interface. This logo value must be
| the absolute path to an SVG logo within the local filesystem.
|
*/
// 'brand' => [
// 'logo' => resource_path('/img/example-logo.svg'),
// 'colors' => [
// "400" => "24, 182, 155, 0.5",
// "500" => "24, 182, 155",
// "600" => "24, 182, 155, 0.75",
// ]
// ],
/*
|--------------------------------------------------------------------------
| Nova Action Resource Class
|--------------------------------------------------------------------------
|
| This configuration option allows you to specify a custom resource class
| to use for action log entries instead of the default that ships with
| Nova, thus allowing for the addition of additional UI form fields.
|
*/
'actions' => [
'resource' => \Laravel\Nova\Actions\ActionResource::class,
],
/*
|--------------------------------------------------------------------------
| Nova Impersonation Redirection URLs
|--------------------------------------------------------------------------
|
| This configuration option allows you to specify a URL where Nova should
| redirect an administrator after impersonating another user and a URL
| to redirect the administrator after stopping impersonating a user.
|
*/
'impersonation' => [
'started' => '/',
'stopped' => '/',
],
];

129
config/queue.php Normal file
View File

@@ -0,0 +1,129 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Queue Connection Name
|--------------------------------------------------------------------------
|
| Laravel's queue supports a variety of backends via a single, unified
| API, giving you convenient access to each backend using identical
| syntax for each. The default queue connection is defined below.
|
*/
'default' => env('QUEUE_CONNECTION', 'database'),
/*
|--------------------------------------------------------------------------
| Queue Connections
|--------------------------------------------------------------------------
|
| Here you may configure the connection options for every queue backend
| used by your application. An example configuration is provided for
| each backend supported by Laravel. You're also free to add more.
|
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
| "deferred", "background", "failover", "null"
|
*/
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'connection' => env('DB_QUEUE_CONNECTION'),
'table' => env('DB_QUEUE_TABLE', 'jobs'),
'queue' => env('DB_QUEUE', 'default'),
'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
'after_commit' => false,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
'queue' => env('BEANSTALKD_QUEUE', 'default'),
'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
'block_for' => 0,
'after_commit' => false,
],
'sqs' => [
'driver' => 'sqs',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'default'),
'suffix' => env('SQS_SUFFIX'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'after_commit' => false,
],
'redis' => [
'driver' => 'redis',
'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
'block_for' => null,
'after_commit' => false,
],
'deferred' => [
'driver' => 'deferred',
],
'background' => [
'driver' => 'background',
],
'failover' => [
'driver' => 'failover',
'connections' => [
'database',
'deferred',
],
],
],
/*
|--------------------------------------------------------------------------
| Job Batching
|--------------------------------------------------------------------------
|
| The following options configure the database and table that store job
| batching information. These options can be updated to any database
| connection and table which has been defined by your application.
|
*/
'batching' => [
'database' => env('DB_CONNECTION', 'sqlite'),
'table' => 'job_batches',
],
/*
|--------------------------------------------------------------------------
| Failed Queue Jobs
|--------------------------------------------------------------------------
|
| These options configure the behavior of failed queue job logging so you
| can control how and where failed jobs are stored. Laravel ships with
| support for storing failed jobs in a simple file or in a database.
|
| Supported drivers: "database-uuids", "dynamodb", "file", "null"
|
*/
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
'database' => env('DB_CONNECTION', 'sqlite'),
'table' => 'failed_jobs',
],
];

38
config/services.php Normal file
View File

@@ -0,0 +1,38 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Mailgun, Postmark, AWS and more. This file provides the de facto
| location for this type of information, allowing packages to have
| a conventional file to locate the various service credentials.
|
*/
'postmark' => [
'key' => env('POSTMARK_API_KEY'),
],
'resend' => [
'key' => env('RESEND_API_KEY'),
],
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
'slack' => [
'notifications' => [
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
],
],
];

217
config/session.php Normal file
View File

@@ -0,0 +1,217 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Session Driver
|--------------------------------------------------------------------------
|
| This option determines the default session driver that is utilized for
| incoming requests. Laravel supports a variety of storage options to
| persist session data. Database storage is a great default choice.
|
| Supported: "file", "cookie", "database", "memcached",
| "redis", "dynamodb", "array"
|
*/
'driver' => env('SESSION_DRIVER', 'database'),
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to expire immediately when the browser is closed then you may
| indicate that via the expire_on_close configuration option.
|
*/
'lifetime' => (int) env('SESSION_LIFETIME', 120),
'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
/*
|--------------------------------------------------------------------------
| Session Encryption
|--------------------------------------------------------------------------
|
| This option allows you to easily specify that all of your session data
| should be encrypted before it's stored. All encryption is performed
| automatically by Laravel and you may use the session like normal.
|
*/
'encrypt' => env('SESSION_ENCRYPT', false),
/*
|--------------------------------------------------------------------------
| Session File Location
|--------------------------------------------------------------------------
|
| When utilizing the "file" session driver, the session files are placed
| on disk. The default storage location is defined here; however, you
| are free to provide another location where they should be stored.
|
*/
'files' => storage_path('framework/sessions'),
/*
|--------------------------------------------------------------------------
| Session Database Connection
|--------------------------------------------------------------------------
|
| When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options.
|
*/
'connection' => env('SESSION_CONNECTION'),
/*
|--------------------------------------------------------------------------
| Session Database Table
|--------------------------------------------------------------------------
|
| When using the "database" session driver, you may specify the table to
| be used to store sessions. Of course, a sensible default is defined
| for you; however, you're welcome to change this to another table.
|
*/
'table' => env('SESSION_TABLE', 'sessions'),
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
| When using one of the framework's cache driven session backends, you may
| define the cache store which should be used to store the session data
| between requests. This must match one of your defined cache stores.
|
| Affects: "dynamodb", "memcached", "redis"
|
*/
'store' => env('SESSION_STORE'),
/*
|--------------------------------------------------------------------------
| Session Sweeping Lottery
|--------------------------------------------------------------------------
|
| Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100.
|
*/
'lottery' => [2, 100],
/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the session cookie that is created by
| the framework. Typically, you should not need to change this value
| since doing so does not grant a meaningful security improvement.
|
*/
'cookie' => env(
'SESSION_COOKIE',
Str::slug((string) env('APP_NAME', 'laravel')).'-session'
),
/*
|--------------------------------------------------------------------------
| Session Cookie Path
|--------------------------------------------------------------------------
|
| The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of
| your application, but you're free to change this when necessary.
|
*/
'path' => env('SESSION_PATH', '/'),
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
| This value determines the domain and subdomains the session cookie is
| available to. By default, the cookie will be available to the root
| domain without subdomains. Typically, this shouldn't be changed.
|
*/
'domain' => env('SESSION_DOMAIN'),
/*
|--------------------------------------------------------------------------
| HTTPS Only Cookies
|--------------------------------------------------------------------------
|
| By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you when it can't be done securely.
|
*/
'secure' => env('SESSION_SECURE_COOKIE'),
/*
|--------------------------------------------------------------------------
| HTTP Access Only
|--------------------------------------------------------------------------
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
| the HTTP protocol. It's unlikely you should disable this option.
|
*/
'http_only' => env('SESSION_HTTP_ONLY', true),
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| will set this value to "lax" to permit secure cross-site requests.
|
| See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
|
| Supported: "lax", "strict", "none", null
|
*/
'same_site' => env('SESSION_SAME_SITE', 'lax'),
/*
|--------------------------------------------------------------------------
| Partitioned Cookies
|--------------------------------------------------------------------------
|
| Setting this value to true will tie the cookie to the top-level site for
| a cross-site context. Partitioned cookies are accepted by the browser
| when flagged "secure" and the Same-Site attribute is set to "none".
|
*/
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
];

1
database/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.sqlite*

View File

@@ -0,0 +1,44 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
*/
class UserFactory extends Factory
{
/**
* The current password being used by the factory.
*/
protected static ?string $password;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10),
];
}
/**
* Indicate that the model's email address should be unverified.
*/
public function unverified(): static
{
return $this->state(fn (array $attributes) => [
'email_verified_at' => null,
]);
}
}

View File

@@ -0,0 +1,49 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Schema::create('password_reset_tokens', function (Blueprint $table) {
$table->string('email')->primary();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->primary();
$table->foreignId('user_id')->nullable()->index();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->longText('payload');
$table->integer('last_activity')->index();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('users');
Schema::dropIfExists('password_reset_tokens');
Schema::dropIfExists('sessions');
}
};

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('cache', function (Blueprint $table) {
$table->string('key')->primary();
$table->mediumText('value');
$table->integer('expiration')->index();
});
Schema::create('cache_locks', function (Blueprint $table) {
$table->string('key')->primary();
$table->string('owner');
$table->integer('expiration')->index();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('cache');
Schema::dropIfExists('cache_locks');
}
};

View File

@@ -0,0 +1,57 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('jobs', function (Blueprint $table) {
$table->id();
$table->string('queue')->index();
$table->longText('payload');
$table->unsignedTinyInteger('attempts');
$table->unsignedInteger('reserved_at')->nullable();
$table->unsignedInteger('available_at');
$table->unsignedInteger('created_at');
});
Schema::create('job_batches', function (Blueprint $table) {
$table->string('id')->primary();
$table->string('name');
$table->integer('total_jobs');
$table->integer('pending_jobs');
$table->integer('failed_jobs');
$table->longText('failed_job_ids');
$table->mediumText('options')->nullable();
$table->integer('cancelled_at')->nullable();
$table->integer('created_at');
$table->integer('finished_at')->nullable();
});
Schema::create('failed_jobs', function (Blueprint $table) {
$table->id();
$table->string('uuid')->unique();
$table->text('connection');
$table->text('queue');
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('jobs');
Schema::dropIfExists('job_batches');
Schema::dropIfExists('failed_jobs');
}
};

View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->text('two_factor_secret')
->after('password')
->nullable();
$table->text('two_factor_recovery_codes')
->after('two_factor_secret')
->nullable();
$table->timestamp('two_factor_confirmed_at')
->after('two_factor_recovery_codes')
->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn([
'two_factor_secret',
'two_factor_recovery_codes',
'two_factor_confirmed_at',
]);
});
}
};

208
database/schema.md Normal file
View File

@@ -0,0 +1,208 @@
# Database Schema Documentation
> Generated: 2026-02-03 05:38:33
> Database: go-no-go
> Total Tables: 13
## Table of Contents
- [action_events](#action_events)
- [cache](#cache)
- [cache_locks](#cache_locks)
- [failed_jobs](#failed_jobs)
- [job_batches](#job_batches)
- [jobs](#jobs)
- [migrations](#migrations)
- [nova_field_attachments](#nova_field_attachments)
- [nova_notifications](#nova_notifications)
- [nova_pending_field_attachments](#nova_pending_field_attachments)
- [password_reset_tokens](#password_reset_tokens)
- [sessions](#sessions)
- [users](#users)
---
## action_events
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | bigint unsigned | NO | PRI | NULL | auto_increment | |
| batch_id | char(36) | NO | MUL | NULL | | |
| user_id | bigint unsigned | NO | MUL | NULL | | |
| name | varchar(255) | NO | | NULL | | |
| actionable_type | varchar(255) | NO | MUL | NULL | | |
| actionable_id | bigint unsigned | NO | | NULL | | |
| target_type | varchar(255) | NO | MUL | NULL | | |
| target_id | bigint unsigned | NO | | NULL | | |
| model_type | varchar(255) | NO | | NULL | | |
| model_id | bigint unsigned | YES | | NULL | | |
| fields | text | NO | | NULL | | |
| status | varchar(25) | NO | | running | | |
| exception | text | NO | | NULL | | |
| created_at | timestamp | YES | | NULL | | |
| updated_at | timestamp | YES | | NULL | | |
| original | mediumtext | YES | | NULL | | |
| changes | mediumtext | YES | | NULL | | |
---
## cache
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| key | varchar(255) | NO | PRI | NULL | | |
| value | mediumtext | NO | | NULL | | |
| expiration | int | NO | MUL | NULL | | |
---
## cache_locks
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| key | varchar(255) | NO | PRI | NULL | | |
| owner | varchar(255) | NO | | NULL | | |
| expiration | int | NO | MUL | NULL | | |
---
## failed_jobs
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | bigint unsigned | NO | PRI | NULL | auto_increment | |
| uuid | varchar(255) | NO | UNI | NULL | | |
| connection | text | NO | | NULL | | |
| queue | text | NO | | NULL | | |
| payload | longtext | NO | | NULL | | |
| exception | longtext | NO | | NULL | | |
| failed_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | |
---
## job_batches
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | varchar(255) | NO | PRI | NULL | | |
| name | varchar(255) | NO | | NULL | | |
| total_jobs | int | NO | | NULL | | |
| pending_jobs | int | NO | | NULL | | |
| failed_jobs | int | NO | | NULL | | |
| failed_job_ids | longtext | NO | | NULL | | |
| options | mediumtext | YES | | NULL | | |
| cancelled_at | int | YES | | NULL | | |
| created_at | int | NO | | NULL | | |
| finished_at | int | YES | | NULL | | |
---
## jobs
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | bigint unsigned | NO | PRI | NULL | auto_increment | |
| queue | varchar(255) | NO | MUL | NULL | | |
| payload | longtext | NO | | NULL | | |
| attempts | tinyint unsigned | NO | | NULL | | |
| reserved_at | int unsigned | YES | | NULL | | |
| available_at | int unsigned | NO | | NULL | | |
| created_at | int unsigned | NO | | NULL | | |
---
## migrations
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | int unsigned | NO | PRI | NULL | auto_increment | |
| migration | varchar(255) | NO | | NULL | | |
| batch | int | NO | | NULL | | |
---
## nova_field_attachments
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | int unsigned | NO | PRI | NULL | auto_increment | |
| attachable_type | varchar(255) | NO | MUL | NULL | | |
| attachable_id | bigint unsigned | NO | | NULL | | |
| attachment | varchar(255) | NO | | NULL | | |
| disk | varchar(255) | NO | | NULL | | |
| url | varchar(255) | NO | MUL | NULL | | |
| created_at | timestamp | YES | | NULL | | |
| updated_at | timestamp | YES | | NULL | | |
---
## nova_notifications
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | char(36) | NO | PRI | NULL | | |
| type | varchar(255) | NO | | NULL | | |
| notifiable_type | varchar(255) | NO | MUL | NULL | | |
| notifiable_id | bigint unsigned | NO | | NULL | | |
| data | text | NO | | NULL | | |
| read_at | timestamp | YES | | NULL | | |
| created_at | timestamp | YES | | NULL | | |
| updated_at | timestamp | YES | | NULL | | |
| deleted_at | timestamp | YES | | NULL | | |
---
## nova_pending_field_attachments
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | int unsigned | NO | PRI | NULL | auto_increment | |
| draft_id | varchar(255) | NO | MUL | NULL | | |
| attachment | varchar(255) | NO | | NULL | | |
| disk | varchar(255) | NO | | NULL | | |
| created_at | timestamp | YES | | NULL | | |
| updated_at | timestamp | YES | | NULL | | |
---
## password_reset_tokens
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| email | varchar(255) | NO | PRI | NULL | | |
| token | varchar(255) | NO | | NULL | | |
| created_at | timestamp | YES | | NULL | | |
---
## sessions
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | varchar(255) | NO | PRI | NULL | | |
| user_id | bigint unsigned | YES | MUL | NULL | | |
| ip_address | varchar(45) | YES | | NULL | | |
| user_agent | text | YES | | NULL | | |
| payload | longtext | NO | | NULL | | |
| last_activity | int | NO | MUL | NULL | | |
---
## users
| Field | Type | Null | Key | Default | Extra | Foreign Key |
|-------|------|------|-----|---------|-------|-------------|
| id | bigint unsigned | NO | PRI | NULL | auto_increment | |
| name | varchar(255) | NO | | NULL | | |
| email | varchar(255) | NO | UNI | NULL | | |
| email_verified_at | timestamp | YES | | NULL | | |
| password | varchar(255) | NO | | NULL | | |
| two_factor_secret | text | YES | | NULL | | |
| two_factor_recovery_codes | text | YES | | NULL | | |
| two_factor_confirmed_at | timestamp | YES | | NULL | | |
| remember_token | varchar(100) | YES | | NULL | | |
| created_at | timestamp | YES | | NULL | | |
| updated_at | timestamp | YES | | NULL | | |
---

View File

@@ -0,0 +1,20 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call(JonathanSeeder::class);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class JonathanSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
User::factory()->create([
'name' => 'Jonathan',
'email' => 'jonathan@blijnder.nl',
'password' => bcrypt('secret'),
'email_verified_at' => now(),
]);
}
}

View File

@@ -0,0 +1,11 @@
# Code Style Reviewer
Reviews code against project standards including Laravel Pint formatting, strict types declarations, final class declarations, proper use of `Illuminate\Support\Arr` for array operations, adherence to naming conventions, and alignment with CLAUDE.md instructions.
## Purpose
This agent is launched as the **final step** of every task that involves code changes. It ensures all written code complies with project coding standards.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# Cypress Code Writer
Writes, updates, and debugs Cypress E2E tests for user workflows.
## Purpose
Use this agent when writing new Cypress E2E tests, updating existing test files, debugging failing tests, adding test coverage for user workflows, or creating test utilities.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# Docs Writer
Creates and updates documentation files and maintains the documentation index.
## Purpose
Use this agent to create new documentation, update existing docs when code changes, and keep `docs/index.md` current with all documentation files.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# Laravel Blade Code Writer
Creates and modifies Laravel Blade templates and views.
## Purpose
Use this agent when working with Blade templates in `resources/views/`, including creating new templates, fixing layout issues, implementing UI changes, or refactoring template code.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# Laravel Config Code Writer
Manages database-driven config groups, fields, and the Config Service.
## Purpose
Use this agent when creating new Config Field classes, updating the Config Service, modifying the Config Model, updating the Nova Config Resource, creating migrations for new config groups, or debugging config value resolution.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# Laravel Nova Code Writer
Creates and modifies Laravel Nova 5 resources, actions, metrics, and dashboards.
## Purpose
Use this agent for ALL Nova-related code work in the `App\Nova` namespace, including resources, fields, actions, metrics, lenses, filters, cards, and dashboards.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# Laravel PHP Code Writer
Writes and refactors PHP code (controllers, models, services, migrations) except Nova resources.
## Purpose
Use this agent for all PHP code work outside of Nova resources: controllers, models, services, migrations, middleware, form requests, policies, commands, jobs, and any other PHP files.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# PHPUnit Code Writer
Creates, runs, and validates PHPUnit tests with mocking support.
## Purpose
Use this agent to write new test classes, fix failing tests (test issues only), create test seeders with DB facade, set up mocking routes for external API calls, or validate test coverage for PHP classes.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

View File

@@ -0,0 +1,11 @@
# Vue Code Writer
Builds Vue.js components in the Laravel + Inertia.js stack.
## Purpose
Use this agent when creating new Vue components, modifying existing ones, implementing Inertia page components, handling form submissions with useForm, integrating with Laravel backend endpoints, or fixing Vue-related bugs.
## Relevant Documentation
- `docs/index.md` - Master index of all project documentation

40
docs/flow.md Normal file
View File

@@ -0,0 +1,40 @@
# Flow of the go-no-go process
```mermaid
flowchart TB
StartPage["Page: Start"]
StartPage --> Continue{continue}
Continue -->|Yes| YesNoQuestion["Page: Yes/No Questions"]
YesNoQuestion --- R[ ]
R -->|"10x"| YesNoQuestion
YesNoQuestion --> FivePoints{"5 Points<br/>or more?"}
FivePoints -->|YES| ChooseProject["Page: Choose project type"]
FivePoints -->|NO| NoGo
ChooseProject --> Questionnaire["Page: Questionnaire"]
Questionnaire --- Q[ ]
Q -->|"Nx"| Questionnaire
Questionnaire --> CheckScore{"Check score"}
CheckScore -->|"Not enough points"| NoGo
CheckScore -->|"Questionable score"| Questionable
CheckScore -->|"Enough points"| Go
NoGo["🔴 Page: No Go"]
Questionable["🟡 Page: Speak to SL or SSL leadership"]
Go["🟢 Page: Go"]
NoGo -->|"Again"| StartPage
Questionable -->|"Again"| StartPage
Go -->|"Again"| StartPage
style R fill:none,stroke:none,color:none
style Q fill:none,stroke:none,color:none
```

150
docs/general.md Normal file
View File

@@ -0,0 +1,150 @@
# Baker Tilly Go/No Go Checklist - Service Line Comparison
## Overview
This document compares the Go/No Go checklists across all 5 Baker Tilly service lines to inform the application design.
---
## Scoring System (Consistent Across All)
| Color | Points | Decision |
|-------|--------|----------|
| 🟢 Green | 10+ Points | GO |
| 🟡 Yellow | 5-9 Points | Speak to SL or SSL leadership |
| 🔴 Red | 1-5 Points | NO GO |
---
## Question Format by Service Line
| Service Line | Format | Scoring Mechanism |
|--------------|--------|-------------------|
| **Tax** | Open-ended questions | Unclear - no explicit Yes/No |
| **Legal** | Open-ended questions | Unclear - no explicit Yes/No |
| **Audit** | Hybrid (Open + Yes/No) | Yes = 1 point, No = 0 points |
| **Outsourced Solutions** | Yes/No questions | Yes = 1 point, No = 0 points |
| **Digital Solutions** | Yes/No questions | Yes = 1 point, No = 0 points |
**Design Implication:** The application needs to support both open-ended questions AND Yes/No scoring questions.
---
## Section Comparison Matrix
| Section | Tax | Legal | Audit | Outsourced | Digital |
|---------|-----|-------|-------|------------|---------|
| 1. Opportunity Details | ✅ 7Q | ✅ 8Q | ✅ 5Q | ✅ 6Q | ✅ 4Q |
| Client Background & History | ✅ 3Q | ✅ 3Q | ✅ 4Q (Y/N) | ✅ 2Q (Y/N) | ✅ 2Q (Y/N) |
| Financial Information | ✅ 2Q | ✅ 2Q | ✅ 2Q (Y/N) | ❌ | ❌ |
| Regulatory Compliance | ✅ 3Q | ✅ 2Q | ✅ 3Q (Y/N) | ✅ 3Q (Y/N) | ✅ 2Q (Y/N) |
| Risk Assessment | ✅ 2Q | ✅ 3Q | ✅ 3Q (Y/N) | ✅ 5Q (Y/N) | ✅ 5Q (Y/N) |
| Resource Allocation | ✅ 4Q | ✅ 5Q | ✅ 2Q (Y/N) | ✅ 2Q (Y/N) | ✅ 2Q (Y/N) |
| Stakeholder Engagement | ✅ 2Q | ✅ 2Q | ❌ | ❌ | ❌ |
| Technology & Innovation | ❌ | ❌ | ❌ | ❌ | ✅ 1Q (Y/N) |
| Reporting Requirements | ❌ | ❌ | ✅ 1Q (Y/N) | ❌ | ❌ |
| Fee Quote | ❌ | ✅ 1Q | ❌ | ❌ | ❌ |
| Additional Comments | ✅ | ✅ | ✅ | ✅ | ✅ |
---
## Unique Sections by Service Line
### Tax
- No unique sections (standard template)
### Legal
- **Fee Quote** - "Has the client provided sufficient information to enable a fee quote?"
- Most comprehensive checklist (22+ questions)
### Audit
- **Reporting Requirements** - Understanding reporting rules and stakeholder expectations
- **IESBA Independence** - Specific question about BTI member firm independence
- Previous audit reports consideration
### Outsourced Solutions
- No unique sections
- Most streamlined Yes/No format
### Digital Solutions
- **Technology & Innovation Fit** - Technology expertise and partnership assessment
- Cross-border data transfer considerations
---
## Common Questions Across All Service Lines
These questions appear (with slight variations) in ALL checklists:
1. **Type of opportunity** - What sort of [service] opportunity is it?
2. **Locations** - How many locations involved?
3. **Baker Tilly coverage** - Do we have BTI firms in all locations?
4. **Client HQ** - Where is the client headquartered?
5. **Competition** - Who are the competitors?
6. **Client business/industry** - What is the client's business?
7. **Regulatory compliance** - Does client comply with regulations?
8. **Pending legal issues** - Any legal/regulatory issues that could impact?
9. **Conflict check** - Has a conflict check been completed?
10. **Resources required** - What resources are needed (personnel, time, budget)?
---
## Question Count Summary
| Service Line | Open Questions | Yes/No Questions | Total |
|--------------|----------------|------------------|-------|
| Tax | ~17 | 0 | ~17 |
| Legal | ~22 | 0 | ~22 |
| Audit | 5 | ~12 | ~17 |
| Outsourced Solutions | 6 | 12 | 18 |
| Digital Solutions | 4 | 12 | 16 |
---
## Design Recommendations for Application
### 1. Question Types to Support
- **Open text** - For opportunity details and explanatory fields
- **Yes/No/Not Applicable** - For scored questions
- **Conditional details** - "[if yes/no insert details]" fields
### 2. Scoring Logic
- Yes/No questions: Yes = 1 point, No = 0 points
- Not Applicable: Needs clarification (0 points? excluded from total?)
- Open questions: May need separate evaluation or no scoring
### 3. Service Line Configuration
- Each service line needs its own question set
- Common sections can share base questions
- Unique sections need service-line-specific implementation
### 4. Threshold Handling
- Score < 5: Automatic NO GO
- Score 5-9: Escalation required (flag for SL/SSL leadership)
- Score 10+: GO (but may still need approval workflow)
### 5. Data Collection
- Basic info (Client Name, Contact, Lead Firm) - common header
- Section-by-section question flow
- Additional comments section at end
- PDF/report generation capability
---
## Inconsistencies to Address
1. **Section numbering** - Some checklists have duplicate section numbers (two "Section 1"s)
2. **Question phrasing** - Some questions are phrased positively, others negatively
3. **Scoring for Tax/Legal** - No clear Yes/No mechanism; needs clarification from stakeholders
4. **"Not Applicable" handling** - Not defined in scoring methodology
---
## Next Steps
1. Clarify scoring mechanism for Tax and Legal service lines
2. Define "Not Applicable" scoring treatment
3. Confirm if all questions are mandatory
4. Determine if negative questions (e.g., "There are NO key risks...") should reverse score
5. Design conditional logic for detail fields
6. Plan AI validation approach for open text responses

35
docs/index.md Normal file
View File

@@ -0,0 +1,35 @@
# Documentation Index
This file contains a complete list of all documentation in this project.
## Documentation Files
### Root Level
- `docs/index.md` - This file; master index of all project documentation
### Agents
- `docs/agents/code-style-reviewer.md` - Project-specific notes for the code style review agent
- `docs/agents/cypress-code-writer.md` - Project-specific notes for the Cypress E2E test writer agent
- `docs/agents/docs-writer.md` - Project-specific notes for the documentation writer agent
- `docs/agents/laravel-blade-code-writer.md` - Project-specific notes for the Blade template agent
- `docs/agents/laravel-config-code-writer.md` - Project-specific notes for the config management agent
- `docs/agents/laravel-nova-code-writer.md` - Project-specific notes for the Nova resource agent
- `docs/agents/laravel-php-code-writer.md` - Project-specific notes for the Laravel PHP code agent
- `docs/agents/phpunit-code-writer.md` - Project-specific notes for the PHPUnit test agent
- `docs/agents/vue-code-writer.md` - Project-specific notes for the Vue.js component agent
## Available Sub-Agents
These are the sub-agents available globally that can be used in this project:
- `code-style-reviewer` - Reviews code against project standards including Laravel Pint, strict types, and naming conventions
- `cypress-code-writer` - Writes, updates, and debugs Cypress E2E tests for user workflows
- `docs-writer` - Creates and updates documentation files and maintains the documentation index
- `laravel-blade-code-writer` - Creates and modifies Laravel Blade templates and views
- `laravel-config-code-writer` - Manages database-driven config groups, fields, and the Config Service
- `laravel-nova-code-writer` - Creates and modifies Laravel Nova 5 resources, actions, metrics, and dashboards
- `laravel-php-code-writer` - Writes and refactors PHP code (controllers, models, services, migrations) except Nova resources
- `phpunit-code-writer` - Creates, runs, and validates PHPUnit tests with mocking support
- `vue-code-writer` - Builds Vue.js components in the Laravel + Inertia.js stack

111
docs/questions-audit.md Normal file
View File

@@ -0,0 +1,111 @@
# Baker Tilly International Go/No Go Check List
## Audit
### Score Legend
| Color | Points | Decision |
|-------|--------|----------|
| 🟢 Green | 10+ Points | GO |
| 🟡 Yellow | 5-9 Points | Speak to SL or SSL leadership |
| 🔴 Red | 1-5 Points | NO GO |
---
### Basic Information
| Field | Value |
|-------|-------|
| **Client Name:** | |
| **Client Contact:** | |
| **Lead Firm Name:** | |
| **Lead Firm Contact:** | |
---
## 1. Opportunity Details
| # | Question | Details |
|---|----------|---------|
| 8 | What sort of audit opportunity is it? | [insert details] |
| 9 | How many locations involved in this opportunity? | [insert details] |
| 10 | List any locations included in this opportunity where we do not have a Baker Tilly firm. | [if no insert details] |
| 11 | Where is the client HQ? | [insert details] |
| 12 | Who is the competition? | [insert details] |
---
## 1. Client Background and History
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 14 | What is the client's business and industry? | | [insert details] |
| 15 | There have been no significant changes in the client's business operations or structure recently? | - | [if no insert details] |
| 16 | Does the sector and/or client come with a reputation which we are comfortable that Baker Tilly is associated with? | - | |
| 17 | Are there any previous audit reports or findings that need to be considered? | | [if yes insert details] |
---
## 2. Financial Information
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 19 | Has the client provided financial statements or balance sheet? | - | [insert details if needed] |
| 20 | Are the client's financial statements complete and accurate? | - | [insert details if needed] |
---
## 3. Regulatory Compliance
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 22 | Does the client comply with all relevant regulatory requirements and standards? | - | [if no insert details] |
| 23 | The client has no pending legal or regulatory issues that you know of that could impact the audit? | | [if no insert details] |
| 24 | The client has been subject to no regulatory investigations or penalties? | - | [if no insert details] |
---
## 4. Risk Assessment
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 26 | There are no key risks associated with the audit? | - | [if no insert details] |
| 27 | Have you completed a conflict check? | - | [insert details] |
| 28 | Are you and other BTI member firms independent with the meaning of local and IESBA rules? | - | [if no insert details] |
---
## 5. Resource Allocation
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 30 | What resources are required for the audit (personnel, time, budget)? | - | [insert details if available] |
| 31 | Does your firm have the scale, seniority and degree of expertise available at the right time to report in accordance with the client's schedule? | | [insert details if needed] |
---
## 6. Reporting Requirements
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 33 | Do we understand reporting rules, regulatory environment and stakeholder expectations? | - | [insert details if needed] |
---
## 7. Additional comments to support this decision
| Comments |
|----------|
| |

View File

@@ -0,0 +1,98 @@
# Baker Tilly International Go/No Go Check List
## Digital Solutions
### Score Legend
| Color | Points | Decision |
|-------|--------|----------|
| 🟢 Green | 10+ Points | GO |
| 🟡 Yellow | 5-9 Points | Speak to SL or SSL leadership |
| 🔴 Red | 1-5 Points | NO GO |
---
### Basic Information
| Field | Value |
|-------|-------|
| **Client Name:** | |
| **Client Contact:** | |
| **Lead Firm Name:** | |
| **Lead Firm Contact:** | |
---
## 1. Opportunity Details
| # | Question | Details |
|---|----------|---------|
| 8 | What sort of digital consulting opportunity is it? | |
| 9 | How many locations involved in this opportunity and are there any locations where we do not have digital capabilities in the local Baker Tilly firm. | |
| 10 | Where is the client HQ? please share more about the clients industry and digital maturity level. | |
| 11 | Who are the competitors in this space? | |
---
## 2. Client Background and History
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 13 | Have we previously worked with this client, and was the experience positive? | - | |
| 14 | Have we conducted a reputational risk check on the client (negative press, ethical concerns, etc.)? | - | |
---
## 3. Regulatory Compliance
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 16 | Does the project involve cross-border data transfers, and if so, are necessary safeguards in place? | - | |
| 17 | Does the client have no pending legal, tax or regulatory issues that [you know of] which could impact this opportunity? | - | |
---
## 4. Risk Assessment
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 19 | Is there a clear understanding of the project scope, responsibilities, and deliverables? | - | |
| 20 | Do we have the necessary delivery tools (platforms, technology, security measures etc.) to support this opportunity? | - | |
| 21 | Have we completed a conflict check? | - | |
| 22 | Can we meet the service-level agreements (SLAs) without overcommitting our resources? | - | |
| 23 | Are there no special expectations or requirements from the client that may pose a challenge? | - | |
---
## 5. Resource Allocation
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 25 | Do you have the resources required for the opportunity (personnel, time, budget)? | - | |
| 26 | Do you have the right expertise and capacity across our network to deliver high-quality service? | - | |
---
## 6. Technology & Innovation Fit
> *If you answer yes, you will score 1 point; if you answer no, you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 28 | Are the technologies involved within our area of expertise, or do we have partnerships to support the implementation? | - | |
---
## 7. Additional comments to support this decision
| Comments |
|----------|
| |

112
docs/questions-legal.md Normal file
View File

@@ -0,0 +1,112 @@
# Baker Tilly International Go/No Go Check List
## Legal
### Score Legend
| Color | Points | Decision |
|-------|--------|----------|
| 🟢 Green | 10+ Points | GO |
| 🟡 Yellow | 5-9 Points | Speak to SL or SSL leadership |
| 🔴 Red | 1-5 Points | NO GO |
---
### Basic Information
| Field | Value |
|-------|-------|
| **Client Name:** | |
| **Client Contact:** | |
| **Lead Firm Name:** | |
| **Lead Firm Contact:** | |
---
## 1. Opportunity Details
| # | Question | Score | Details |
|---|----------|-------|---------|
| 7 | What type of legal opportunity is it (e.g., litigation, corporate, M&A, regulatory)? | | [insert details] |
| 8 | How many locations involved in this opportunity? | | [insert details] |
| 9 | Do we have a presence or a reliable partner in all locations listed in this opportunity? | - | [if no insert details] |
| 10 | Is the client budget realistic? | | [insert details] |
| 11 | Has the client requested any additional information from our firms? | - | [insert details] |
| 12 | What is the deadline to respond to the client on this opportunity? | | [insert details] |
| 13 | Where is the client HQ? | | [insert details] |
| 14 | Who is the competition? | | [insert details] |
---
## 1. Client Background and History
| # | Question | Score | Details |
|---|----------|-------|---------|
| 16 | What is the client's business and industry? | | [insert details] |
| 17 | Have there been any significant changes in the client's business operations or structure recently? | - | [if yes insert details] |
| 18 | What is our competitive edge in this opportunity (e.g., prior experience with the client, unique expertise, pricing advantage)? | - | [insert details] |
---
## 2. Financial Information
| # | Question | Score | Details |
|---|----------|-------|---------|
| 20 | Has the client provided enough financial information about their company? | - | [insert details if needed] |
| 21 | Are there any significant financial risks or uncertainties that you are aware of? | - | [if yes insert details] |
---
## 3. Regulatory Compliance
| # | Question | Score | Details |
|---|----------|-------|---------|
| 23 | Are there any pending legal or regulatory issues that you know of that could impact the opportunity? | - | [if yes insert details] |
| 24 | Has the client been subject to any regulatory investigations or penalties? | - | [if yes insert details] |
---
## 4. Risk Assessment for Legal Opportunities
| # | Question | Score | Details |
|---|----------|-------|---------|
| 26 | Are there any potential risks or challenges associated with the opportunity? | - | [if yes insert details] |
| 27 | Has a conflict check been completed? | - | [if yes insert details] |
| 28 | Are there any potential conflicts of interest? | - | [if yes insert details] |
---
## 5. Resource Allocation
| # | Question | Score | Details |
|---|----------|-------|---------|
| 30 | Do we have the required skills and capacity within our firm to deliver this work, or would we need support from another firm? | - | [insert details if available] |
| 31 | What resources are required for the opportunity (personnel, time, budget)? | - | [insert details if available] |
| 32 | Are there any constraints on the availability of your resources? | - | [insert details if needed] |
| 33 | Do you know of the any constraints on the availability of other firms included in this opportunity? | - | [insert details if needed] |
| 34 | Is the deadline to respond to the client is more than two weeks away. Our experience shows that anything shorter is often unrealistic to pursue. | | [insert details if needed] |
---
## 6. Stakeholder Engagement
| # | Question | Score | Details |
|---|----------|-------|---------|
| 36 | Who are the key stakeholders involved in this opportunity? | | [insert details] |
| 37 | Are there any special expectations and requirements? | - | [insert details if needed] |
---
## 8. Fee Quote
| # | Question | Score | Details |
|---|----------|-------|---------|
| 39 | Has the client provided sufficient information to enable a fee quote? | - | [insert details if needed] |
---
## 9. Additional comments to support this decision
| Comments |
|----------|
| |

View File

@@ -0,0 +1,91 @@
# Baker Tilly International Go/No Go Check List
## Outsourced Solutions
### Score Legend
| Color | Points | Decision |
|-------|--------|----------|
| 🟢 Green | 10+ Points | GO |
| 🟡 Yellow | 5-9 Points | Speak to SL or SSL leadership |
| 🔴 Red | 1-5 Points | NO GO |
---
### Basic Information
| Field | Value |
|-------|-------|
| **Client Name:** | |
| **Client Contact:** | |
| **Lead Firm Name:** | |
| **Lead Firm Contact:** | |
---
## 1. Opportunity Details
| # | Question | Details |
|---|----------|---------|
| 8 | What sort of outsourcing opportunity is it? | |
| 9 | How many locations involved in this opportunity? | |
| 10 | List any locations included in this opportunity where we do not have a Baker Tilly firm. | |
| 11 | Where is the client HQ? | |
| 12 | What is the client's business and industry? | |
| 13 | Who are the competitors in this space? | |
---
## 2. Client Background and History
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 15 | Have we previously worked with this client, and was the experience positive? | - | |
| 16 | Have we conducted a reputational risk check on the client (negative press, ethical concerns, etc.)? | - | |
---
## 3. Regulatory Compliance
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 18 | Does the client comply with all relevant regulatory requirements? | - | |
| 19 | Has the client provided complete and accurate financial records for review? | - | |
| 20 | Does the client have no pending legal, tax or regulatory issues that [you know of] which could impact this opportunity? | - | |
---
## 4. Risk Assessment
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 22 | Is there a clear understanding on the scope, responsibilities and deliverables? | - | |
| 23 | Do we have the necessary delivery tools (platforms, technology, security measures etc.) to support this opportunity? | - | |
| 24 | Have you completed a conflict check? | - | |
| 25 | Can we meet the service-level agreements (SLAs) without overcommitting our resources? | - | |
| 26 | Are there no special expectations or requirements from the client that may pose a challenge? | - | |
---
## 5. Resource Allocation
> *If you answer yes, you will score 1 point, if you answer no you will score 0 points*
| # | Question | Yes / No / Not applicable | Insert details |
|---|----------|---------------------------|----------------|
| 28 | Do you have the resources required for the opportunity (personnel, time, budget)? | - | |
| 29 | Do you have the right expertise and capacity across our network to deliver high-quality service? | - | |
---
## 6. Additional comments to support this decision
| Comments |
|----------|
| |

102
docs/questions-tax.md Normal file
View File

@@ -0,0 +1,102 @@
# Baker Tilly International Go/No Go Check List
## Tax
### Score Legend
| Color | Points | Decision |
|-------|--------|----------|
| 🟢 Green | 10+ Points | GO |
| 🟡 Yellow | 5-9 Points | Speak to SL or SSL leadership |
| 🔴 Red | 1-5 Points | NO GO |
---
### Basic Information
| Field | Value |
|-------|-------|
| **Client Name:** | |
| **Client Contact:** | |
| **Lead Firm Name:** | |
| **Lead Firm Contact:** | |
---
## 1. Opportunity Details
| # | Question | Score | Details |
|---|----------|-------|---------|
| 7 | What sort of opportunity is it?/Describe the Scope of Work | | [insert details] |
| 8 | How many locations involved in this opportunity? | | [insert details] |
| 9 | Do we have a Baker Tilly firm in all locations within this opportunity? | - | [if no insert details] |
| 10 | Has the client requested any additional information from our firms? | - | [insert details] |
| 11 | What is the deadline to respond to the client on this opportunity? | | [insert details] |
| 12 | Where is the client HQ? | | [insert details] |
| 13 | Who is the competition? | | [insert details] |
---
## 1. Client Background and History
| # | Question | Score | Details |
|---|----------|-------|---------|
| 15 | What is the client's business and industry? | | [insert details] |
| 16 | Have there been any significant changes in the client's business operations or structure recently? | - | [if yes insert details] |
| 17 | Is the client an existing client? | - | [insert details] |
---
## 2. Financial Information
| # | Question | Score | Details |
|---|----------|-------|---------|
| 19 | Has the client provided enough financial information about their company? | - | [insert details if needed] |
| 20 | Are there any significant financial risks or uncertainties that you are aware of? | - | [if yes insert details] |
---
## 3. Regulatory Compliance
| # | Question | Score | Details |
|---|----------|-------|---------|
| 22 | Does the client comply with all relevant regulatory requirements and standards? | - | [if no insert details] |
| 23 | Are there any pending legal or regulatory issues that you know of that could impact the opportunity? | - | [if yes insert details] |
| 24 | Has the client been subject to any regulatory investigations or penalties? | - | [if yes insert details] |
---
## 4. Risk Assessment
| # | Question | Score | Details |
|---|----------|-------|---------|
| 26 | Are there any potential risks or challenges associated with the opportunity? | - | [if yes insert details] |
| 27 | Are there any potential conflicts of interest? | - | [if yes insert details] |
---
## 5. Resource Allocation
| # | Question | Score | Details |
|---|----------|-------|---------|
| 29 | What resources are required for the opportunity (personnel, time, budget)? | - | [insert details if available] |
| 30 | Are there any constraints on the availability of your resources? | | [insert details if needed] |
| 31 | Do you know of the any constraints on the availability of other firms included in this opportunity? | - | [insert details if needed] |
| 32 | What is the expected timeline for the opportunity, including any critical deadlines that must be met? | | [insert details if needed] |
---
## 6. Stakeholder Engagement
| # | Question | Score | Details |
|---|----------|-------|---------|
| 34 | Who are the key stakeholders involved in this opportunity? | | [insert details] |
| 35 | Are there any special expectations and requirements? | - | [insert details if needed] |
---
## 7. Additional comments to support this decision
| Comments |
|----------|
| |

495
lang/vendor/nova/en.json vendored Normal file
View File

@@ -0,0 +1,495 @@
{
"Actions": "Actions",
"Details": "Details",
"If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.",
"Reset Password": "Reset Password",
"Sorry! You are not authorized to perform this action.": "Sorry! You are not authorized to perform this action.",
"You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.",
"Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.": "Before continuing, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.",
"A new verification link has been sent to the email address you provided in your profile settings.": "A new verification link has been sent to the email address you provided in your profile settings.",
"This is a secure area of the application. Please confirm your password before continuing.": "This is a secure area of the application. Please confirm your password before continuing.",
"Error": "Error",
"Current Password": "Current Password",
"Confirm Password": "Confirm Password",
"We have emailed your password reset link!": "We have emailed your password reset link!",
"Dashboard": "Dashboard",
"Email Address": "Email Address",
"Username": "Username",
"Forgot Password": "Forgot Password",
"Forgot your password?": "Forgot your password?",
"Log In": "Log In",
"Logout": "Logout",
"Password": "Password",
"Remember me": "Remember me",
"Email Verification": "Email Verification",
"Secure Area": "Secure Area",
"Resources": "Resources",
"Send Password Reset Link": "Send Password Reset Link",
"Welcome Back!": "Welcome Back!",
"Delete Resource": "Delete Resource",
"Delete :resource": "Delete :resource",
"Delete": "Delete",
"Soft Deleted": "Soft Deleted",
"Detach Resource": "Detach Resource",
"Detach": "Detach",
"Detach Selected": "Detach Selected",
"Delete Selected": "Delete Selected",
"Force Delete Selected": "Force Delete Selected",
"Restore Selected": "Restore Selected",
"Restore Resource": "Restore Resource",
"Restore :resource": "Restore :resource",
"Restore": "Restore",
"Force Delete Resource": "Force Delete Resource",
"Force Delete :resource": "Force Delete :resource",
"Force Delete": "Force Delete",
"Confirm": "Confirm",
"Are you sure you want to delete this resource?": "Are you sure you want to delete this resource?",
"Are you sure you want to delete the selected resources?": "Are you sure you want to delete the selected resources?",
"Are you sure you want to detach this resource?": "Are you sure you want to detach this resource?",
"Are you sure you want to detach the selected resources?": "Are you sure you want to detach the selected resources?",
"Are you sure you want to force delete this resource?": "Are you sure you want to force delete this resource?",
"Are you sure you want to force delete the selected resources?": "Are you sure you want to force delete the selected resources?",
"Are you sure you want to restore this resource?": "Are you sure you want to restore this resource?",
"Are you sure you want to restore the selected resources?": "Are you sure you want to restore the selected resources?",
"Are you sure you want to remove this item?": "Are you sure you want to remove this item?",
"No :resource matched the given criteria.": "No :resource matched the given criteria.",
"Failed to load :resource!": "Failed to load :resource!",
"Another user has updated this resource since this page was loaded. Please refresh the page and try again.": "Another user has updated this resource since this page was loaded. Please refresh the page and try again.",
"Are you sure you want to delete this file?": "Are you sure you want to delete this file?",
"Are you sure you want to run this action?": "Are you sure you want to run this action?",
"Attach": "Attach",
"Attach & Attach Another": "Attach & Attach Another",
"Close": "Close",
"Cancel": "Cancel",
"Choose": "Choose",
"Choose File": "Choose File",
"Choose Files": "Choose Files",
"Drop file or click to choose": "Drop file or click to choose",
"Drop files or click to choose": "Drop files or click to choose",
"Choose Type": "Choose Type",
"Choose an option": "Choose an option",
"Click to choose": "Click to choose",
"Reset Filters": "Reset Filters",
"Create": "Create",
"Create & Add Another": "Create & Add Another",
"Delete File": "Delete File",
"Edit": "Edit",
"Edit Attached": "Edit Attached",
"Go Home": "Go Home",
"Hold Up!": "Hold Up!",
"Lens": "Lens",
"New": "New",
"Next": "Next",
"Only Trashed": "Only Trashed",
"Per Page": "Per Page",
"Preview": "Preview",
"Previous": "Previous",
"No Data": "No Data",
"No Current Data": "No Current Data",
"No Prior Data": "No Prior Data",
"No Increase": "No Increase",
"No Results Found.": "No Results Found.",
"Standalone Actions": "Standalone Actions",
"Run Action": "Run Action",
"Select Action": "Select Action",
"Search": "Search",
"Press / to search": "Press / to search",
"Select All Dropdown": "Select All Dropdown",
"Select all": "Select all",
"Select this page": "Select this page",
"Something went wrong.": "Something went wrong.",
"The action was executed successfully.": "The action was executed successfully.",
"The government won't let us show you what's behind these doors": "The government won't let us show you what's behind these doors",
"Update": "Update",
"Update & Continue Editing": "Update & Continue Editing",
"View": "View",
"We're lost in space. The page you were trying to view does not exist.": "We're lost in space. The page you were trying to view does not exist.",
"Show Content": "Show Content",
"Hide Content": "Hide Content",
"Whoops": "Whoops",
"Whoops!": "Whoops!",
"With Trashed": "With Trashed",
"Trashed": "Trashed",
"Write": "Write",
"total": "total",
"January": "January",
"February": "February",
"March": "March",
"April": "April",
"May": "May",
"June": "June",
"July": "July",
"August": "August",
"September": "September",
"October": "October",
"November": "November",
"December": "December",
"Afghanistan": "Afghanistan",
"Aland Islands": "Åland Islands",
"Albania": "Albania",
"Algeria": "Algeria",
"American Samoa": "American Samoa",
"Andorra": "Andorra",
"Angola": "Angola",
"Anguilla": "Anguilla",
"Antarctica": "Antarctica",
"Antigua And Barbuda": "Antigua and Barbuda",
"Argentina": "Argentina",
"Armenia": "Armenia",
"Aruba": "Aruba",
"Australia": "Australia",
"Austria": "Austria",
"Azerbaijan": "Azerbaijan",
"Bahamas": "Bahamas",
"Bahrain": "Bahrain",
"Bangladesh": "Bangladesh",
"Barbados": "Barbados",
"Belarus": "Belarus",
"Belgium": "Belgium",
"Belize": "Belize",
"Benin": "Benin",
"Bermuda": "Bermuda",
"Bhutan": "Bhutan",
"Bolivia": "Bolivia",
"Bonaire, Sint Eustatius and Saba": "Bonaire, Sint Eustatius and Saba",
"Bosnia And Herzegovina": "Bosnia and Herzegovina",
"Botswana": "Botswana",
"Bouvet Island": "Bouvet Island",
"Brazil": "Brazil",
"British Indian Ocean Territory": "British Indian Ocean Territory",
"Brunei Darussalam": "Brunei",
"Bulgaria": "Bulgaria",
"Burkina Faso": "Burkina Faso",
"Burundi": "Burundi",
"Cambodia": "Cambodia",
"Cameroon": "Cameroon",
"Canada": "Canada",
"Cape Verde": "Cape Verde",
"Cayman Islands": "Cayman Islands",
"Central African Republic": "Central African Republic",
"Chad": "Chad",
"Chile": "Chile",
"China": "China",
"Christmas Island": "Christmas Island",
"Cocos (Keeling) Islands": "Cocos (Keeling) Islands",
"Colombia": "Colombia",
"Comoros": "Comoros",
"Congo": "Congo",
"Congo, Democratic Republic": "Congo, Democratic Republic",
"Cook Islands": "Cook Islands",
"Costa Rica": "Costa Rica",
"Cote D'Ivoire": "Côte d'Ivoire",
"Croatia": "Croatia",
"Cuba": "Cuba",
"Curaçao": "Curaçao",
"Cyprus": "Cyprus",
"Czech Republic": "Czechia",
"Denmark": "Denmark",
"Djibouti": "Djibouti",
"Dominica": "Dominica",
"Dominican Republic": "Dominican Republic",
"Ecuador": "Ecuador",
"Egypt": "Egypt",
"El Salvador": "El Salvador",
"Equatorial Guinea": "Equatorial Guinea",
"Eritrea": "Eritrea",
"Estonia": "Estonia",
"Ethiopia": "Ethiopia",
"Falkland Islands (Malvinas)": "Falkland Islands (Malvinas)",
"Faroe Islands": "Faroe Islands",
"Fiji": "Fiji",
"Finland": "Finland",
"France": "France",
"French Guiana": "French Guiana",
"French Polynesia": "French Polynesia",
"French Southern Territories": "French Southern Territories",
"Gabon": "Gabon",
"Gambia": "Gambia",
"Georgia": "Georgia",
"Germany": "Germany",
"Ghana": "Ghana",
"Gibraltar": "Gibraltar",
"Greece": "Greece",
"Greenland": "Greenland",
"Grenada": "Grenada",
"Guadeloupe": "Guadeloupe",
"Guam": "Guam",
"Guatemala": "Guatemala",
"Guernsey": "Guernsey",
"Guinea": "Guinea",
"Guinea-Bissau": "Guinea-Bissau",
"Guyana": "Guyana",
"Haiti": "Haiti",
"Heard Island & Mcdonald Islands": "Heard Island and McDonald Islands",
"Holy See (Vatican City State)": "Vatican City",
"Honduras": "Honduras",
"Hong Kong": "Hong Kong",
"Hungary": "Hungary",
"Iceland": "Iceland",
"India": "India",
"Indonesia": "Indonesia",
"Iran, Islamic Republic Of": "Iran",
"Iraq": "Iraq",
"Ireland": "Ireland",
"Isle Of Man": "Isle of Man",
"Israel": "Israel",
"Italy": "Italy",
"Jamaica": "Jamaica",
"Japan": "Japan",
"Jersey": "Jersey",
"Jordan": "Jordan",
"Kazakhstan": "Kazakhstan",
"Kenya": "Kenya",
"Kiribati": "Kiribati",
"Korea, Democratic People's Republic of": "North Korea",
"Korea": "South Korea",
"Kosovo": "Kosovo",
"Kuwait": "Kuwait",
"Kyrgyzstan": "Kyrgyzstan",
"Lao People's Democratic Republic": "Laos",
"Latvia": "Latvia",
"Lebanon": "Lebanon",
"Lesotho": "Lesotho",
"Liberia": "Liberia",
"Libyan Arab Jamahiriya": "Libya",
"Liechtenstein": "Liechtenstein",
"Lithuania": "Lithuania",
"Luxembourg": "Luxembourg",
"Macao": "Macao",
"Macedonia": "North Macedonia",
"Madagascar": "Madagascar",
"Malawi": "Malawi",
"Malaysia": "Malaysia",
"Maldives": "Maldives",
"Mali": "Mali",
"Malta": "Malta",
"Marshall Islands": "Marshall Islands",
"Martinique": "Martinique",
"Mauritania": "Mauritania",
"Mauritius": "Mauritius",
"Mayotte": "Mayotte",
"Mexico": "Mexico",
"Micronesia, Federated States Of": "Micronesia",
"Moldova": "Moldova",
"Monaco": "Monaco",
"Mongolia": "Mongolia",
"Montenegro": "Montenegro",
"Montserrat": "Montserrat",
"Morocco": "Morocco",
"Mozambique": "Mozambique",
"Myanmar": "Myanmar",
"Namibia": "Namibia",
"Nauru": "Nauru",
"Nepal": "Nepal",
"Netherlands": "Netherlands",
"New Caledonia": "New Caledonia",
"New Zealand": "New Zealand",
"Nicaragua": "Nicaragua",
"Niger": "Niger",
"Nigeria": "Nigeria",
"Niue": "Niue",
"Norfolk Island": "Norfolk Island",
"Northern Mariana Islands": "Northern Mariana Islands",
"Norway": "Norway",
"Oman": "Oman",
"Pakistan": "Pakistan",
"Palau": "Palau",
"Palestinian Territory, Occupied": "Palestinian Territories",
"Panama": "Panama",
"Papua New Guinea": "Papua New Guinea",
"Paraguay": "Paraguay",
"Peru": "Peru",
"Philippines": "Philippines",
"Pitcairn": "Pitcairn Islands",
"Poland": "Poland",
"Portugal": "Portugal",
"Puerto Rico": "Puerto Rico",
"Qatar": "Qatar",
"Reunion": "Réunion",
"Romania": "Romania",
"Russian Federation": "Russia",
"Rwanda": "Rwanda",
"Saint Barthelemy": "St. Barthélemy",
"Saint Helena": "St. Helena",
"Saint Kitts And Nevis": "St. Kitts and Nevis",
"Saint Lucia": "St. Lucia",
"Saint Martin": "St. Martin",
"Saint Pierre And Miquelon": "St. Pierre and Miquelon",
"Saint Vincent And Grenadines": "St. Vincent and Grenadines",
"Samoa": "Samoa",
"San Marino": "San Marino",
"Sao Tome And Principe": "São Tomé and Príncipe",
"Saudi Arabia": "Saudi Arabia",
"Senegal": "Senegal",
"Serbia": "Serbia",
"Seychelles": "Seychelles",
"Sierra Leone": "Sierra Leone",
"Singapore": "Singapore",
"Sint Maarten (Dutch part)": "Sint Maarten",
"Slovakia": "Slovakia",
"Slovenia": "Slovenia",
"Solomon Islands": "Solomon Islands",
"Somalia": "Somalia",
"South Africa": "South Africa",
"South Georgia And Sandwich Isl.": "South Georgia and South Sandwich Islands",
"South Sudan": "South Sudan",
"Spain": "Spain",
"Sri Lanka": "Sri Lanka",
"Sudan": "Sudan",
"Suriname": "Suriname",
"Svalbard And Jan Mayen": "Svalbard and Jan Mayen",
"Swaziland": "Eswatini",
"Sweden": "Sweden",
"Switzerland": "Switzerland",
"Syrian Arab Republic": "Syria",
"Taiwan": "Taiwan",
"Tajikistan": "Tajikistan",
"Tanzania": "Tanzania",
"Thailand": "Thailand",
"Timor-Leste": "Timor-Leste",
"Togo": "Togo",
"Tokelau": "Tokelau",
"Tonga": "Tonga",
"Trinidad And Tobago": "Trinidad and Tobago",
"Tunisia": "Tunisia",
"Turkey": "Türkiye",
"Turkmenistan": "Turkmenistan",
"Turks And Caicos Islands": "Turks and Caicos Islands",
"Tuvalu": "Tuvalu",
"Uganda": "Uganda",
"Ukraine": "Ukraine",
"United Arab Emirates": "United Arab Emirates",
"United Kingdom": "United Kingdom",
"United States": "United States",
"United States Outlying Islands": "U.S. Outlying Islands",
"Uruguay": "Uruguay",
"Uzbekistan": "Uzbekistan",
"Vanuatu": "Vanuatu",
"Venezuela": "Venezuela",
"Viet Nam": "Vietnam",
"Virgin Islands, British": "British Virgin Islands",
"Virgin Islands, U.S.": "U.S. Virgin Islands",
"Wallis And Futuna": "Wallis and Futuna",
"Western Sahara": "Western Sahara",
"Yemen": "Yemen",
"Zambia": "Zambia",
"Zimbabwe": "Zimbabwe",
"Yes": "Yes",
"No": "No",
"Action Name": "Name",
"Action Initiated By": "Initiated By",
"Action Target": "Target",
"Action Status": "Status",
"Action Happened At": "Happened At",
"resource": "resource",
"resources": "resources",
"Choose date": "Choose date",
"The :resource was created!": "The :resource was created!",
"The resource was attached!": "The resource was attached!",
"The :resource was updated!": "The :resource was updated!",
"The resource was updated!": "The resource was updated!",
"The :resource was deleted!": "The :resource was deleted!",
"The :resource was restored!": "The :resource was restored!",
"Increase": "Increase",
"Constant": "Constant",
"Decrease": "Decrease",
"Reset Password Notification": "Reset Password Notification",
"Nova User": "Nova User",
"of": "of",
"no file selected": "no file selected",
"Sorry, your session has expired.": "Sorry, your session has expired.",
"Reload": "Reload",
"Key": "Key",
"Value": "Value",
"Add row": "Add row",
"Attach :resource": "Attach :resource",
"Create :resource": "Create :resource",
"Choose :resource": "Choose :resource",
"New :resource": "New :resource",
"Edit :resource": "Edit :resource",
"Update :resource": "Update :resource",
"Add :resource": "Add :resource",
"Start Polling": "Start Polling",
"Stop Polling": "Stop Polling",
"Choose :field": "Choose :field",
"Download": "Download",
"Action": "Action",
"Changes": "Changes",
"Original": "Original",
"This resource no longer exists": "This resource no longer exists",
"The resource was prevented from being saved!": "The resource was prevented from being saved!",
":resource Details": ":resource Details",
"There are no available options for this resource.": "There are no available options for this resource.",
"All resources loaded.": "All resources loaded.",
"Load :perPage More": "Load :perPage More",
":amount selected": ":amount selected",
":amount Total": ":amount Total",
"Show All Fields": "Show All Fields",
"There was a problem submitting the form.": "There was a problem submitting the form.",
"There was a problem executing the action.": "There was a problem executing the action.",
"There was a problem fetching the resource.": "There was a problem fetching the resource.",
"Do you really want to leave? You have unsaved changes.": "Do you really want to leave? You have unsaved changes.",
"*": "*",
"—": "—",
"The file was deleted!": "The file was deleted!",
"This file field is read-only.": "This file field is read-only.",
"No additional information...": "No additional information...",
"ID": "ID",
"30 Days": "30 Days",
"60 Days": "60 Days",
"90 Days": "90 Days",
"Today": "Today",
"Month To Date": "Month To Date",
"Quarter To Date": "Quarter To Date",
"Year To Date": "Year To Date",
"Customize": "Customize",
"Update :resource: :title": "Update :resource: :title",
"Update attached :resource: :title": "Update attached :resource: :title",
":resource Details: :title": ":resource Details: :title",
"The HasOne relationship has already been filled.": "The HasOne relationship has already been filled.",
"An error occurred while uploading the file.": "An error occurred while uploading the file.",
"An error occurred while uploading the file: :error": "An error occurred while uploading the file: :error",
"Previewing": "Previewing",
"Replicate": "Replicate",
"Are you sure you want to log out?": "Are you sure you want to log out?",
"There are no new notifications.": "There are no new notifications.",
"Resource Row Dropdown": "Resource Row Dropdown",
"This copy of Nova is unlicensed.": "This copy of Nova is unlicensed.",
"Impersonate": "Impersonate",
"Stop Impersonating": "Stop Impersonating",
"Are you sure you want to stop impersonating?": "Are you sure you want to stop impersonating?",
"Light": "Light",
"Dark": "Dark",
"System": "System",
"From": "From",
"To": "To",
"There are no fields to display.": "There are no fields to display.",
"Notifications": "Notifications",
"Mark all as Read": "Mark all as read",
"Delete all notifications": "Delete all notifications",
"Are you sure you want to delete all the notifications?": "Are you sure you want to delete all the notifications?",
"Mark Read": "Mark Read",
"Mark Unread": "Mark Unread",
"Copy to clipboard": "Copy to clipboard",
"Are you sure you want to delete this notification?": "Are you sure you want to delete this notification?",
"The image could not be loaded": "The image could not be loaded",
"The selected resources have been :action!": "The selected resources have been :action!",
"Are you sure you want to mark all notifications as read?": "Are you sure you want to mark all notifications as read?",
"Mark all notifications as read": "Mark all notifications as read",
"OK": "OK",
"Delete Notification": "Delete Notification",
"Export As CSV": "Export As CSV",
"Filename": "Filename",
"Type": "Type",
"CSV (.csv)": "CSV (.csv)",
"Excel (.xlsx)": "Excel (.xlsx)",
"Attach files by dragging & dropping, selecting or pasting them.": "Attach files by dragging & dropping, selecting or pasting them.",
"Uploading files... (:current/:total)": "Uploading files... (:current/:total)",
"Remove": "Remove",
"Uploading": "Uploading",
"The image could not be loaded.": "The image could not be loaded.",
"Action Events": "Action Events",
"Action Event": "Action Event",
"User Actions": "User Actions",
"User Security": "User Security"
}

19
lang/vendor/nova/en/validation.php vendored Normal file
View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'attached' => 'This :attribute is already attached.',
'relatable' => 'This :attribute may not be associated with this resource.',
];

17
package.json Normal file
View File

@@ -0,0 +1,17 @@
{
"$schema": "https://www.schemastore.org/package.json",
"private": true,
"type": "module",
"scripts": {
"build": "vite build",
"dev": "vite"
},
"devDependencies": {
"@tailwindcss/vite": "^4.0.0",
"axios": "^1.11.0",
"concurrently": "^9.0.1",
"laravel-vite-plugin": "^2.0.0",
"tailwindcss": "^4.0.0",
"vite": "^7.0.7"
}
}

35
phpunit.xml Normal file
View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Unit">
<directory>tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory>tests/Feature</directory>
</testsuite>
</testsuites>
<source>
<include>
<directory>app</directory>
</include>
</source>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="BROADCAST_CONNECTION" value="null"/>
<env name="CACHE_STORE" value="array"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="MAIL_MAILER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="PULSE_ENABLED" value="false"/>
<env name="TELESCOPE_ENABLED" value="false"/>
<env name="NIGHTWATCH_ENABLED" value="false"/>
</php>
</phpunit>

25
public/.htaccess Normal file
View File

@@ -0,0 +1,25 @@
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Handle X-XSRF-Token Header
RewriteCond %{HTTP:x-xsrf-token} .
RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

0
public/favicon.ico Normal file
View File

20
public/index.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
// Determine if the application is in maintenance mode...
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
require $maintenance;
}
// Register the Composer autoloader...
require __DIR__.'/../vendor/autoload.php';
// Bootstrap Laravel and handle the request...
/** @var Application $app */
$app = require_once __DIR__.'/../bootstrap/app.php';
$app->handleRequest(Request::capture());

2
public/robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-agent: *
Disallow:

1
public/vendor/nova/app.css vendored Normal file

File diff suppressed because one or more lines are too long

1
public/vendor/nova/app.css.map vendored Normal file

File diff suppressed because one or more lines are too long

1
public/vendor/nova/app.js vendored Normal file

File diff suppressed because one or more lines are too long

54
public/vendor/nova/app.js.LICENSE.txt vendored Normal file
View File

@@ -0,0 +1,54 @@
/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
* @license MIT */
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <http://feross.org>
* @license MIT
*/
/*!
* tabbable 6.2.0
* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
*/
/*! #__NO_SIDE_EFFECTS__ */
/*! Hammer.JS - v2.0.7 - 2016-04-22
* http://hammerjs.github.io/
*
* Copyright (c) 2016 Jorik Tangelder;
* Licensed under the MIT license */
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
/**
* @vue/compiler-core v3.5.13
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
/**
* @vue/reactivity v3.5.13
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
/**
* @vue/runtime-core v3.5.13
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
/**
* @vue/runtime-dom v3.5.13
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
/**
* @vue/shared v3.5.13
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/

1
public/vendor/nova/app.js.map vendored Normal file

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More