Skip to main content
The admin panel is the control center for your Tripfy Africa installation. You access it at /admin (the prefix is configurable in Basic Control). Default admin credentials after seeding:
  • Email: [email protected]
  • Password: set during initial setup or check database/seeders/AdminSeeder.php

What admin can control

Basic Control

Site title, timezone, currency symbol, pagination sizes, admin URL prefix, and brand colors (primary + secondary) with live preview.

Appearance

Home page variation (Quest, Elite, or Voyage), tour listing layout, and page themes.

Manage content

Hero section, destinations, about page, footer content, and all homepage sections.

Manage menu

Navigation links for all header and footer menus.

Package approval

Review packages submitted by guides. Approve, hold, or reject each one before it goes live.

KYC management

Approve or reject guide identity verification documents.

User management

View, create, edit, and deactivate traveler and guide accounts.

Bookings

View all bookings across all guides with status and payment details.

Payment gateways

Configure and enable/disable payment methods (Stripe, PayPal, Flutterwave, etc.).

Email / SMS config

SMTP settings, Twilio, and Infobip credentials for transactional messages.

Notification templates

Edit the content of all email, SMS, and push notification templates.

Blog

Full blog management — create, edit, categorize, and publish posts.

Languages

Add translation languages and edit individual translation keys.

SEO

Set meta title, description, and Open Graph tags per page.

Basic Control — colors and site identity

Admin → Settings → Basic Control is where you set the two brand colors that drive the entire frontend color scheme.
Fields:
  Site title          → used in <title> and the basicControl('site_title') helper
  Base currency       → e.g. USD
  Currency symbol     → e.g. $
  Primary color       → hex, e.g. #2596be  (buttons, links, active nav)
  Secondary color     → hex, e.g. #02d0e3 (accents, dark mode links)
  Admin URL prefix    → default: admin

Live preview

The Basic Control form includes color pickers that use a live preview. As you drag the picker, the page updates in real time so you can see exactly how the colors will look before saving.

How saved colors reach the frontend

When you click Save in Basic Control, the basicControlUpdate method in BasicControlController runs two things:
  1. It saves primary_color and secondary_color to the basic_controls database table.
  2. It calls generateDynamicCss(), which writes a new public/assets/themes/adventra/css/dynamic-colors.css.
// app/Http/Controllers/Admin/BasicControlController.php
public function basicControlUpdate(Request $request)
{
    $request->validate([
        'primary_color'   => ['required', 'string', 'regex:/^#[0-9A-Fa-f]{6}$/'],
        'secondary_color' => ['required', 'string', 'regex:/^#[0-9A-Fa-f]{6}$/'],
        // ... other fields
    ]);

    $response = BasicControl::updateOrCreate(
        ['id' => $basic->id ?? ''],
        [
            'primary_color'   => $request->primary_color,
            'secondary_color' => $request->secondary_color,
            // ...
        ]
    );

    // Regenerate dynamic CSS — frontend reflects new colors immediately
    $this->generateDynamicCss($response);

    Artisan::call('optimize:clear');
    return back();
}
The generated CSS file sets CSS custom properties on :root (light) and html[data-theme="dark"]. Every button, link, badge, and sidebar active state in tripfy.css references --tf-primary and --tf-secondary, so the entire UI updates on the next page load. See Theme system for the full structure of the generated CSS.

Package approval workflow

Guides submit packages for review. The admin sees them listed under Admin → Packages with a status of Pending.
1

Review the package

Click View to open the full package detail, including description, pricing, itinerary, and photos.
2

Take action

Choose one of:
  • Approve — the package becomes publicly visible
  • Hold — keeps it pending for further review
  • Reject — the guide is notified and the package is not listed
3

Notify the guide

The system sends an automated email or push notification to the guide based on your configured notification template for package_approved or package_rejected.

KYC management

Guides must pass identity verification before they can receive payouts. Under Admin → KYC Management, you see all submitted verification documents.
  • Click Approve to mark the guide as verified — this unlocks withdrawal features for them.
  • Click Reject to decline the submission and send the configured rejection notification.

User management

Admin → Users lists all traveler and guide accounts. You can:
  • Filter by role (user, guide) and status (active / inactive)
  • Edit account details including name, email, phone, and role
  • Activate or deactivate an account without deleting it
  • View a user’s booking history

Notification templates

Admin → Notification Templates lets you edit the content of every automated message the system sends. Templates exist for:
  • Booking confirmation, cancellation, and completion
  • Package approval and rejection
  • KYC approval and rejection
  • Password reset
  • Welcome email
Each template supports dynamic variables (e.g. {{name}}, {{booking_id}}) documented in the template editor. After installation, the NotificationSeeder seeds all default templates with @tripfy.africa sender addresses:
php artisan db:seed --class=NotificationSeeder

Payment gateway configuration

Each payment gateway has its own form under Admin → Payment Methods. Enable a gateway by toggling it on and entering your API credentials. The checkout page shows only gateways that are both enabled and have valid credentials configured.

Email and SMS configuration

Admin → Email Configuration sets SMTP credentials. Admin → SMS Configuration sets Twilio or Infobip credentials. These are separate from push notifications, which are configured under Admin → Settings → Push Notification using your Firebase project credentials.

Admin routes structure

All admin routes are defined in routes/admin.php and are protected behind admin authentication middleware. The route prefix defaults to admin but is configurable via Basic Control → Admin URL Prefix.
// routes/admin.php (structure)
Route::prefix(config('adminPrefix'))->middleware(['auth', 'admin'])->group(function () {

    Route::get('/dashboard', [DashboardController::class, 'index']);

    // Basic Control
    Route::get('/basic-control',        [BasicControlController::class, 'basicControl']);
    Route::post('/basic-control',       [BasicControlController::class, 'basicControlUpdate']);

    // Packages
    Route::resource('/packages', PackageController::class);
    Route::post('/packages/{id}/approve', [PackageController::class, 'approve']);
    Route::post('/packages/{id}/reject',  [PackageController::class, 'reject']);

    // Users
    Route::resource('/users', UserController::class);

    // KYC
    Route::get('/kyc',             [KycController::class, 'index']);
    Route::post('/kyc/{id}/action', [KycController::class, 'action']);

    // Theme mode (admin session preference)
    Route::get('/themeMode/{themeType?}', function ($themeType = 'true') {
        session()->put('themeMode', $themeType);
        return $themeType;
    });
});
The dangerous /trans route that previously allowed unauthenticated database modifications has been removed. The /queue-work and /schedule-run utility routes are now protected behind admin authentication. See the security section in INSTALL.md for the full list of security fixes applied.

Build docs developers (and LLMs) love