empty laravel app
This commit is contained in:
19
.claude/settings.local.json
Normal file
19
.claude/settings.local.json
Normal 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
18
.editorconfig
Normal 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
65
.env.example
Normal 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
11
.gitattributes
vendored
Normal 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
24
.gitignore
vendored
Normal 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
125
CLAUDE.md
Normal 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
134
README.md
@@ -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>
|
||||||
|
|||||||
133
app/Console/Commands/GenerateSchemaCommand.php
Normal file
133
app/Console/Commands/GenerateSchemaCommand.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
8
app/Http/Controllers/Controller.php
Normal file
8
app/Http/Controllers/Controller.php
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
abstract class Controller
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
49
app/Models/User.php
Normal file
49
app/Models/User.php
Normal 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',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
21
app/Nova/Dashboards/Main.php
Normal file
21
app/Nova/Dashboards/Main.php
Normal 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
45
app/Nova/Resource.php
Normal 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
105
app/Nova/User.php
Normal 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 [];
|
||||||
|
}
|
||||||
|
}
|
||||||
24
app/Providers/AppServiceProvider.php
Normal file
24
app/Providers/AppServiceProvider.php
Normal 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
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
94
app/Providers/NovaServiceProvider.php
Normal file
94
app/Providers/NovaServiceProvider.php
Normal 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
18
artisan
Executable 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
18
bootstrap/app.php
Normal 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
2
bootstrap/cache/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
||||||
6
bootstrap/providers.php
Normal file
6
bootstrap/providers.php
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
App\Providers\AppServiceProvider::class,
|
||||||
|
App\Providers\NovaServiceProvider::class,
|
||||||
|
];
|
||||||
94
composer.json
Normal file
94
composer.json
Normal 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
9816
composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
126
config/app.php
Normal file
126
config/app.php
Normal 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
115
config/auth.php
Normal 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
117
config/cache.php
Normal 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
183
config/database.php
Normal 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
80
config/filesystems.php
Normal 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
132
config/logging.php
Normal 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
118
config/mail.php
Normal 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
205
config/nova.php
Normal 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
129
config/queue.php
Normal 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
38
config/services.php
Normal 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
217
config/session.php
Normal 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
1
database/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*.sqlite*
|
||||||
44
database/factories/UserFactory.php
Normal file
44
database/factories/UserFactory.php
Normal 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,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
49
database/migrations/0001_01_01_000000_create_users_table.php
Normal file
49
database/migrations/0001_01_01_000000_create_users_table.php
Normal 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');
|
||||||
|
}
|
||||||
|
};
|
||||||
35
database/migrations/0001_01_01_000001_create_cache_table.php
Normal file
35
database/migrations/0001_01_01_000001_create_cache_table.php
Normal 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');
|
||||||
|
}
|
||||||
|
};
|
||||||
57
database/migrations/0001_01_01_000002_create_jobs_table.php
Normal file
57
database/migrations/0001_01_01_000002_create_jobs_table.php
Normal 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');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -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
208
database/schema.md
Normal 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 | | |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
20
database/seeders/DatabaseSeeder.php
Normal file
20
database/seeders/DatabaseSeeder.php
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
22
database/seeders/JonathanSeeder.php
Normal file
22
database/seeders/JonathanSeeder.php
Normal 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(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
11
docs/agents/code-style-reviewer.md
Normal file
11
docs/agents/code-style-reviewer.md
Normal 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
|
||||||
11
docs/agents/cypress-code-writer.md
Normal file
11
docs/agents/cypress-code-writer.md
Normal 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
|
||||||
11
docs/agents/docs-writer.md
Normal file
11
docs/agents/docs-writer.md
Normal 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
|
||||||
11
docs/agents/laravel-blade-code-writer.md
Normal file
11
docs/agents/laravel-blade-code-writer.md
Normal 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
|
||||||
11
docs/agents/laravel-config-code-writer.md
Normal file
11
docs/agents/laravel-config-code-writer.md
Normal 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
|
||||||
11
docs/agents/laravel-nova-code-writer.md
Normal file
11
docs/agents/laravel-nova-code-writer.md
Normal 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
|
||||||
11
docs/agents/laravel-php-code-writer.md
Normal file
11
docs/agents/laravel-php-code-writer.md
Normal 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
|
||||||
11
docs/agents/phpunit-code-writer.md
Normal file
11
docs/agents/phpunit-code-writer.md
Normal 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
|
||||||
11
docs/agents/vue-code-writer.md
Normal file
11
docs/agents/vue-code-writer.md
Normal 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
40
docs/flow.md
Normal 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
150
docs/general.md
Normal 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
35
docs/index.md
Normal 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
111
docs/questions-audit.md
Normal 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 |
|
||||||
|
|----------|
|
||||||
|
| |
|
||||||
98
docs/questions-digital-solutions.md
Normal file
98
docs/questions-digital-solutions.md
Normal 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
112
docs/questions-legal.md
Normal 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 |
|
||||||
|
|----------|
|
||||||
|
| |
|
||||||
91
docs/questions-outsource-solutions.md
Normal file
91
docs/questions-outsource-solutions.md
Normal 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
102
docs/questions-tax.md
Normal 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
495
lang/vendor/nova/en.json
vendored
Normal 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
19
lang/vendor/nova/en/validation.php
vendored
Normal 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
17
package.json
Normal 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
35
phpunit.xml
Normal 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
25
public/.htaccess
Normal 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
0
public/favicon.ico
Normal file
20
public/index.php
Normal file
20
public/index.php
Normal 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
2
public/robots.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
User-agent: *
|
||||||
|
Disallow:
|
||||||
1
public/vendor/nova/app.css
vendored
Normal file
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
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
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
54
public/vendor/nova/app.js.LICENSE.txt
vendored
Normal 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
1
public/vendor/nova/app.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty10iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty10iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty14iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty14iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty1ciurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty1ciurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty1miurt9w6c.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty1miurt9w6c.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty1wiurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g1pty1wiurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy10iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy10iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy14iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy14iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy1ciurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy1ciurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy1miurt9w6c.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy1miurt9w6c.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy1wiurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g35sy1wiurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy10iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy10iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy14iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy14iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy1ciurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy1ciurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy1miurt9w6c.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy1miurt9w6c.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy1wiurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4g3joy1wiurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy10iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy10iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy14iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy14iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy1ciurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy1ciurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy1miurt9w6c.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy1miurt9w6c.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy1wiurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gwzuy1wiurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry10iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry10iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry14iurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry14iurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry1ciurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry1ciurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry1miurt9w6c.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry1miurt9w6c.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry1wiurt9w6fk2a.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe01mimslybiv1o4x1m8cce4gxzry1wiurt9w6fk2a.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5gu1ecvzl-86y.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5gu1ecvzl-86y.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5iu1ecvzl-86y.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5iu1ecvzl-86y.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5ju1ecvzl-86y.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5ju1ecvzl-86y.woff2
vendored
Normal file
Binary file not shown.
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5pu1ecvzl-86y.woff2
vendored
Normal file
BIN
public/vendor/nova/fonts/snunitosansv11pe03mimslybiv1o4x1m8cc8-bm5pu1ecvzl-86y.woff2
vendored
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user