Add team, developers, PDF type, and QR rendering dependency.
Deploy Ladill QR Plus / deploy (push) Successful in 42s

Enables account collaboration, API tokens, hosted PDF codes, and fixes QR detail 500s by declaring chillerlan/php-qrcode.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-07 06:16:13 +00:00
co-authored by Cursor
parent bcd1cf5d28
commit 8c3e9d3c26
23 changed files with 892 additions and 28 deletions
+14
View File
@@ -4,7 +4,9 @@ use App\Http\Controllers\Auth\SsoLoginController;
use App\Http\Controllers\NotificationController;
use App\Http\Controllers\Public\QrScanController;
use App\Http\Controllers\Qr\AccountController;
use App\Http\Controllers\Qr\DeveloperController;
use App\Http\Controllers\Qr\OverviewController;
use App\Http\Controllers\Qr\TeamController;
use App\Http\Controllers\Qr\QrCodeController;
use Illuminate\Support\Facades\Route;
@@ -20,6 +22,8 @@ Route::get('/sso/logout-frontchannel', [SsoLoginController::class, 'frontchannel
Route::get('/signed-out', fn () => auth()->check() ? redirect()->route('qr.dashboard') : view('qr.signed-out'))->name('qr.signed-out');
Route::get('/q/{shortCode}', [QrScanController::class, 'resolve'])->name('qr.public.resolve');
Route::get('/q/{shortCode}/view', [QrScanController::class, 'view'])->name('qr.public.view');
Route::get('/q/{shortCode}/file', [QrScanController::class, 'file'])->name('qr.public.file');
Route::get('/q/{shortCode}/business-logo', [QrScanController::class, 'businessLogo'])->name('qr.public.business.logo');
Route::get('/q/{shortCode}/business-cover', [QrScanController::class, 'businessCover'])->name('qr.public.business.cover');
Route::get('/q/{shortCode}/app-icon', [QrScanController::class, 'appIcon'])->name('qr.public.app.icon');
@@ -46,4 +50,14 @@ Route::middleware(['auth'])->group(function () {
Route::get('/wallet', [AccountController::class, 'wallet'])->name('account.wallet');
Route::get('/billing', [AccountController::class, 'billing'])->name('account.billing');
Route::get('/settings', [AccountController::class, 'settings'])->name('account.settings');
Route::get('/team', [TeamController::class, 'index'])->name('account.team');
Route::post('/team', [TeamController::class, 'store'])->name('account.team.store');
Route::patch('/team/{member}', [TeamController::class, 'updateRole'])->name('account.team.role');
Route::delete('/team/{member}', [TeamController::class, 'destroy'])->name('account.team.destroy');
Route::post('/switch-account', [TeamController::class, 'switchAccount'])->name('account.switch');
Route::get('/developers', [DeveloperController::class, 'index'])->name('account.developers');
Route::post('/developers', [DeveloperController::class, 'store'])->name('account.developers.store');
Route::delete('/developers/{token}', [DeveloperController::class, 'destroy'])->whereNumber('token')->name('account.developers.destroy');
});