Prerequisites
Before you begin, make sure your server meets these requirements:| Requirement | Minimum version |
|---|---|
| PHP | 8.1+ |
| MySQL | 8.0+ |
| Composer | Latest stable |
| Node.js | 16.x+ |
| SSL certificate | Required for production |
Redis is strongly recommended for caching and queue processing. See the environment variables section for Redis configuration.
Installation
Upload files to server
Upload the entire project to your hosting server. Set the document root to point at the
public/ folder.Configure .env
Copy See the full environment variables reference below for all available options.
.env.example to .env in your project root, then update these values for your live server:Run migrations
Apply any pending migrations. This adds notification templates and other post-release fixes:
Install dependencies
Install PHP packages optimised for production. Generate an application key only if
APP_KEY is currently empty in your .env:If you run into a memory limit error, prefix the command with
COMPOSER_MEMORY_LIMIT=-1.Copy modified files
Replace the following files in your project with the versions from the release ZIP. These contain security fixes and Tripfy-specific customisations:Controllers (
app/Http/Controllers/)CheckoutController.php— security fixes, ownership checksUser/BookingController.php— bug fix, booking email to guideUser/ReviewController.php— correct rating formulaAdmin/BasicControlController.php— live colour + dynamic CSS generation
routes/web.php— HTTP method fixes, security patchesroutes/admin.php— removed dangerous/transroute, protected utilities
resources/views/)themes/adventra/layouts/app.blade.phpthemes/adventra/layouts/user.blade.phpthemes/adventra/partials/header.blade.phpthemes/adventra/partials/pwa.blade.phpthemes/adventra/frontend/package/list.blade.phpthemes/adventra/frontend/checkout/userInfo.blade.phpadmin/layouts/app.blade.phpadmin/control_panel/basic_control.blade.php
public/assets/)themes/adventra/css/tripfy.css— light/dark theme systemthemes/adventra/js/tripfy.js— theme toggle, scroll revealadmin/css/tripfy-admin.css— admin panel branding
database/seeders/)AdminSeeder.php— creates [email protected]BasicControlSeeder.php— sets [email protected]NotificationSeeder.php— updates all email templates to tripfy.africa domain
Generate dynamic colours CSS
Run this once after deployment so the frontend picks up theme colours from the database:
You can also trigger this by visiting Admin → Settings → Basic Control and clicking Save. The file is regenerated automatically on every save.
Admin panel access
Once installation is complete, access the admin panel at:| Field | Value |
|---|---|
[email protected] | |
| Password | Set during initial setup, or check AdminSeeder.php |
- Basic Control — site title, currency, primary and secondary colours with live preview
- Appearance — home page variation, tour listing layout, page themes
- KYC Management — approve or reject guide identity verifications
- Packages — review, approve, hold, or reject tour packages
- Bookings — view all bookings across all guides
- Payment Gateways — configure and enable payment methods
- Email / SMS Config — SMTP, Twilio, and Infobip settings
- Notification Templates — edit all email, SMS, and push templates
- Languages — add and edit translation keys
Environment variables
The following table covers all variables in.env.example. Update each section for your environment.
Application
| Variable | Description | Default |
|---|---|---|
APP_NAME | Application name | TripVendor |
APP_ENV | Environment (local, production) | local |
APP_KEY | Encryption key — generate with php artisan key:generate | — |
APP_DEBUG | Show debug info (true/false) | true |
APP_URL | Full application URL | http://localhost |
APP_TIMEZONE | Server timezone | Africa/Addis_Ababa |
Database
| Variable | Description | Default |
|---|---|---|
DB_CONNECTION | Database driver | mysql |
DB_HOST | Database host | 127.0.0.1 |
DB_PORT | Database port | 3306 |
DB_DATABASE | Database name | trip_vendor |
DB_USERNAME | Database user | root |
DB_PASSWORD | Database password | (empty) |
Cache, queue, and session
| Variable | Description | Default |
|---|---|---|
BROADCAST_DRIVER | Broadcasting driver | pusher |
CACHE_DRIVER | Cache driver (file, redis) | file |
QUEUE_CONNECTION | Queue driver (database, redis) | database |
SESSION_DRIVER | Session driver | file |
SESSION_LIFETIME | Session lifetime in minutes | 120 |
Redis
| Variable | Description | Default |
|---|---|---|
REDIS_HOST | Redis host | 127.0.0.1 |
REDIS_PASSWORD | Redis password | null |
REDIS_PORT | Redis port | 6379 |
| Variable | Description |
|---|---|
MAIL_MAILER | Mail driver (smtp, mailgun, sendgrid, etc.) |
MAIL_HOST | SMTP host |
MAIL_PORT | SMTP port |
MAIL_USERNAME | SMTP username |
MAIL_PASSWORD | SMTP password |
MAIL_FROM_ADDRESS | Sender address |
MAIL_FROM_NAME | Sender name |
MAILGUN_DOMAIN / MAILGUN_SECRET | Mailgun credentials |
SENDGRID_API_KEY | SendGrid API key |
MAILERSEND_API_KEY | MailerSend API key |
SENDINBLUE_API_KEY | Sendinblue API key |
POSTMARK_TOKEN | Postmark token |
Storage
| Variable | Description | Default |
|---|---|---|
FILESYSTEM_DISK | Default disk driver | local |
AWS_ACCESS_KEY_ID | AWS access key | — |
AWS_SECRET_ACCESS_KEY | AWS secret | — |
AWS_DEFAULT_REGION | AWS region | — |
AWS_BUCKET | S3 bucket name | — |
DIGITALOCEAN_SPACES_KEY | DigitalOcean Spaces key | — |
DIGITALOCEAN_SPACES_SECRET | DigitalOcean Spaces secret | — |
DIGITALOCEAN_SPACES_BUCKET | Spaces bucket name | — |
SMS
| Variable | Description | Default |
|---|---|---|
SMS_METHOD | Active SMS provider (twilio, infobip, plivo, vonage) | twilio |
TWILIO_ACCOUNT_SID | Twilio account SID | — |
TWILIO_AUTH_TOKEN | Twilio auth token | — |
TWILIO_PHONE_NUMBER | Twilio sender number | — |
INFOBIP_API_KEY | Infobip API key | — |
INFOBIP_URL_BASE_PATH | Infobip base URL | — |
PLIVO_AUTH_ID | Plivo auth ID | — |
PLIVO_AUTH_TOKEN | Plivo auth token | — |
VONAGE_API_KEY | Vonage API key | — |
VONAGE_API_SECRET | Vonage API secret | — |
Firebase (push notifications)
| Variable | Description |
|---|---|
FIREBASE_SERVER_KEY | Firebase server key |
FIREBASE_VAPID_KEY | Web push VAPID key |
FIREBASE_API_KEY | Firebase project API key |
FIREBASE_AUTH_DOMAIN | Firebase auth domain |
FIREBASE_PROJECT_ID | Firebase project ID |
FIREBASE_STORAGE_BUCKET | Firebase storage bucket |
FIREBASE_MESSAGING_SENDER_ID | Messaging sender ID |
Pusher (real-time broadcasting)
| Variable | Description |
|---|---|
PUSHER_APP_ID | Pusher app ID |
PUSHER_APP_KEY | Pusher app key |
PUSHER_APP_SECRET | Pusher app secret |
PUSHER_APP_CLUSTER | Pusher cluster (e.g. ap2) |
Social authentication
| Variable | Description |
|---|---|
GOOGLE_CLIENT_ID | Google OAuth client ID |
GOOGLE_CLIENT_SECRET | Google OAuth client secret |
GOOGLE_REDIRECT_URL | Google OAuth callback URL |
FACEBOOK_CLIENT_ID | Facebook app ID |
FACEBOOK_CLIENT_SECRET | Facebook app secret |
FACEBOOK_REDIRECT_URL | Facebook OAuth callback URL |
Maps and AI
| Variable | Description |
|---|---|
GOOGLE_MAPS_API_KEY | Google Maps API key |
GOOGLE_GEMINI_API_KEY | Gemini AI API key (used for package content generation) |
TRANSLATE_METHOD | Translation provider (azure) |
SUBSCRIPTION_KEY | Azure Cognitive Services subscription key |
SUBSCRIPTION_REGION | Azure region |
reCAPTCHA
| Variable | Description |
|---|---|
GOOGLE_RECAPTCHA_SITE_KEY | reCAPTCHA site key |
GOOGLE_RECAPTCHA_SECRET_KEY | reCAPTCHA secret key |