@extends('layouts.app') @section('title', 'Settings') @section('breadcrumb')Settings@endsection @section('content')
System
Access
Branding & Email
@if(session('success'))
{{ session('success') }}
@endif @if($errors->any())
    @foreach($errors->all() as $e)
  • {{ $e }}
  • @endforeach
@endif
@csrf

Company Details

@csrf

Job Pipeline Settings

Project Types

Comma-separated list of project types available when creating jobs.

Lead Sources

Comma-separated list of lead source options.

Job Number Prefix

@csrf

Quote & Contract Defaults

Work Order Settings

Work orders with total fault cost above this amount require manager approval.

Default Payment Schedule (%)

These percentages are applied by default when a new contract is created. They must total 100%.

Invoice Settings

Bank Details (shown on invoices)

Define additional data fields that appear on job and lead forms. Changes take effect immediately after saving.

@csrf

Document Templates

@foreach([['Quote Header Text','quote_header','Thank you for requesting a quote from Degabriele Kitchens. We are pleased to provide the following proposal for your consideration.'],['Quote Footer / Terms','quote_footer','This quote is valid for 30 days from the date of issue. Prices exclude GST unless stated. A deposit of 30% is required upon acceptance.'],['Contract Intro','contract_intro','This agreement is entered into between Degabriele Kitchens Pty Ltd (the Contractor) and the Client named above.'],['Completion Sign-off','completion_text','Works have been completed in accordance with the agreed specifications. Client acknowledges satisfactory completion.']] as [$label, $key, $default])
@endforeach
@csrf

Notification Preferences

@csrf
@foreach([ ['New lead assigned', 'notify_new_lead'], ['Job stage change', 'notify_stage_change'], ['Payment received', 'notify_payment'], ['Quote accepted', 'notify_quote_accepted'], ['Quote expiring (3 days)', 'notify_quote_expiry'], ['Check measure scheduled', 'notify_cm_scheduled'], ['Installation scheduled', 'notify_install_scheduled'], ['Warranty expiring (30 days)', 'notify_warranty'], ] as [$label, $key])
{{ $label }}
@endforeach
Notifications are currently sent via the activity log. Email notifications require SMTP configuration in the Integrations section.

Security Settings

@csrf
@foreach([ ['Require uppercase in passwords', 'security_require_upper'], ['Require numbers in passwords', 'security_require_numbers'], ['Allow multiple sessions per user','security_multi_session'], ['Log all page views in activity log','security_log_views'], ] as [$label, $key])
{{ $label }}
@endforeach

Change Password

@csrf

Active Sessions

{{ strtoupper(substr(auth()->user()->name, 0, 2)) }}
{{ auth()->user()->name }} ● Current session
{{ request()->ip() }} · {{ request()->userAgent() ? substr(request()->userAgent(), 0, 60).'…' : 'Unknown browser' }}

Integrations

@foreach([ ['fa-envelope','SMTP Email','Connect an SMTP server to send quote and contract emails directly','email','Configure','Configure SMTP host, port, username and password for outbound email.'], ['fa-comment-sms','SMS / Twilio','Send automated SMS reminders for appointments and milestones','sms','Configure','Enter Twilio account SID, auth token, and sender number.'], ['fa-calendar-alt','Google Calendar','Sync check measure and installation appointments','gcal','Connect','OAuth 2.0 connection to sync events with Google Calendar.'], ['fa-file-pdf','Xero Accounting','Export invoices and payments to Xero automatically','xero','Connect','Connect via Xero OAuth to push invoice data automatically.'], ['fa-cloud','Dropbox / Google Drive','Attach cloud documents to jobs and contracts','storage','Connect','Link a cloud storage provider for document management.'], ] as [$icon,$name,$desc,$key,$btn,$detail])
{{ $name }}
{{ $desc }}
Not configured

{{ $detail }}

@endforeach

Data & Storage

@php $dbPath = database_path('database.sqlite'); $dbSize = file_exists($dbPath) ? round(filesize($dbPath) / 1024, 1) : 0; $dbSizeMB = round($dbSize / 1024, 2); @endphp
Database Size
{{ $dbSize < 1024 ? $dbSize.'KB' : $dbSizeMB.'MB' }}
SQLite
Total Records
{{ number_format(\App\Models\Job::count() + \App\Models\Lead::count() + \App\Models\Quote::count()) }}
Jobs + Leads + Quotes
Activity Logs
{{ number_format(\App\Models\ActivityLog::count()) }}
Total entries
Last Backup
Never
Set up below

Export Data

@foreach([ ['All Jobs (CSV)', route('reports.index', ['export'=>'csv']), 'fa-briefcase', 'text-blue-400'], ['All Leads (CSV)', route('reports.index', ['export'=>'csv','group_by'=>'source']), 'fa-users', 'text-purple-400'], ['Revenue Report', route('reports.index', ['export'=>'csv','group_by'=>'stage']), 'fa-coins', 'text-green-400'], ] as [$label, $url, $icon, $color]) {{ $label }} @endforeach

Data Retention

@csrf

Danger Zone

Purge Soft-Deleted Records
Permanently deletes all trashed leads, jobs, quotes, and contacts
Clear Activity Log
Removes all activity log entries older than the retention period

Company Logo

@php $logoPath = \App\Models\AppSetting::get('company_logo'); @endphp @if($logoPath && \Illuminate\Support\Facades\Storage::disk('public')->exists($logoPath))
Company Logo
@endif
@csrf

PNG, JPG, SVG or GIF. Max 2MB. Recommended: transparent PNG on dark background.

Logo appears in the sidebar, on quote emails, and on printed reports.
Note: Run php artisan storage:link if images don't display.

@csrf

SMTP / Email Settings

Used when sending quote emails to clients via the Send to Client button.

Gmail: Use smtp.gmail.com, port 587, TLS, and a Google App Password (enable 2FA first in Google Account › Security).

Activity Log

Last 20 events
@forelse($recentActivity as $log)
{{ strtoupper(substr($log->user?->name ?? 'S', 0, 2)) }}
{{ $log->action }} by {{ $log->user?->name ?? 'System' }}
{{ $log->description }}
{{ $log->created_at->diffForHumans() }}
@empty

No activity logged yet

@endforelse
@php $rawCm = $settings['cm_checklist_defaults'] ?? ''; if (is_array($rawCm)) { $rawCm = implode(" ", $rawCm); } $cmItems = array_values(array_filter(array_map('trim', explode(" ", (string)$rawCm)))); @endphp
@csrf

Check Measure Default Checklist Items

These items are automatically added as checkboxes to every new check measure. Check measurers can tick them off and still add extra per-job items.

No default items yet — add your first item below.

Hover over any item and click to remove it. Items can be edited inline. Press Enter to quickly add multiple items.

@endsection