JobClass
A job board web application built on Laravel and Bootstrap. JobClass is a modular, responsive CMS for online job portals — with multi-language support, payment gateway add-ons, location-based listings, company and resume profiles, and an admin panel with role-based permissions.
This documentation walks you through installation, common server-side errors, upgrade steps, and the configuration of mail, SMS, social login, payments, captcha, image processing, localization, backups, and more. Use the sidebar to jump to a topic.
System Requirements
Database
- MySQL 5.7+ (or MariaDB 10.3+) is required.
- The DB user needs full privileges to manage the database, including
FLUSH TABLES, etc. - To ensure proper support for certain language characters, the database collation should be set to one of the following options, in order of preference:
utf8mb4_0900_ai_ci,utf8mb4_unicode_ci,utf8mb4_general_ci,utf8mb3_unicode_ci,utf8mb3_general_ci,utf8_unicode_ci, orutf8_general_ci. - For optimal database performance, set
max_user_connectionsbetween30–100andmax_connectionsbetween150–200.
Server
Before installing, make sure the following components are enabled on your server:
- PHP 8.2 or greater (with all default PHP functions enabled, including
exec(),escapeshellarg(), etc.) - BCMath PHP Extension
- Ctype PHP Extension
- cURL PHP Extension (version 7.34.0 or greater)
- DOM PHP Extension
- Fileinfo PHP Extension
- Filter PHP Extension
- Hash PHP Extension
- JSON PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PCRE PHP Extension
- PDO PHP Extension
- Session PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
- GD PHP Extension (version 2.0+) or Imagick PHP Extension (version 6.5.7+)
- PHP Zip Archive
- Rewrite Module Enabled
PHP.ini
open_basedirmust be disabled.
File & Folder Permissions
/bootstrap 775
/storage 775 (recursively)
Supported Web Servers
One of the following server types can be used to host the app:
- Apache — fully supported.
- Nginx — fully supported.
- LiteSpeed (or OpenLiteSpeed) — permissions and firewall management need to be properly handled. LSCache is not supported.
- Varnish — the server cache management needs to be properly handled. Strong server configuration and programming knowledge are required.
Installation
Before starting the installation, check the system requirements first.
Install on Apache
- Create a new MySQL (or MariaDB) database from your cPanel (or similar hosting manager) using phpMyAdmin (or a similar tool). Add a user to manage the database with full privileges.
-
After creating the database, unzip the file you downloaded from CodeCanyon and upload the contents of the JobClass folder to your server root, usually
/path/to/www/,/path/to/html/,/path/to/httpdocs/or/path/to/public_html/.Important: Always use a desktop application like FileZilla to upload files via FTP, rather than web-based file managers, to avoid issues with corrupted or improperly uploaded files.Important: Make sure the .htaccess file got copied properly from the download to the main JobClass folder on your server.This is what the files should look like on your server:
-
public_html/# or "www", "html", "httpdocs", "domain.tld"
- app/
- bootstrap/
- config/
- database/
- docs/
- extensions/
- lang/
- packages/
-
public/# may be the document root
- assets/
- dist/
- images/
- vendor/
- .htaccess# keep all hidden files
- index.php
- resources/
- routes/
- storage/
- tests/
- vendor/
- .htaccess# keep all hidden files
-
public_html/# or "www", "html", "httpdocs", "domain.tld"
- Go to the installation URL:
http://yourdomain.com/install. - Follow the web installation wizard.
Install on Nginx
- Create a new MySQL (or MariaDB) database from your cPanel (or similar hosting manager). Add a user to manage the database with full privileges.
-
Upload all the JobClass package files to your server root and set your server configuration like this:
... root "/path/to/www/public"; ... location / { try_files $uri $uri/ /index.php?$query_string; } ...or
... root "/path/to/public_html/public"; ... location / { try_files $uri $uri/ /index.php?$query_string; } ...Check this link for more information about the Nginx server configuration.
- Restart Nginx.
- Go to the installation URL:
http://yourdomain.com/install. - Follow the web installation wizard.
Install on Localhost
- Create a local virtual host using a domain name (e.g.
http://mysite.localhost) instead ofhttp://localhost/mysite.- This can be easily done using Laravel Herd (macOS & Windows) or MAMP PRO (macOS & Windows) or Laragon (Windows only).
- Or with XAMPP (Windows, macOS & Linux):
- Restart your server.
- Create a new MySQL (or MariaDB) database. Add a user to manage the database with full privileges.
- Go to the installation URL:
http://mysite.localhost/install. - Follow the web installation wizard.
Installation Notes
- The script doesn't have an "install" folder. The installation is handled by a Controller.
- Loading times during the installation process may seem long, but this is by design — pause times of 1–2 seconds are used to avoid asynchronous execution issues across different server configurations.
Error 403
Error 403 on Apache
- Make sure that Apache's
mod_rewriteis enabled on your server. - Make sure that the
AllowOverrideApache directive is set toAllin your server'sapache2.conffile (or in the delegate file for apache configuration on your server). - Make sure that the
/.htaccessand the/public/.htaccessfiles are uploaded on your server.
Error 403 on Nginx
- If you have a 403 error on your Nginx environment, please check these articles to learn more about the Nginx configuration:
- If the error persists, contact your hosting provider for more information and to get suitable help.
Error 403 on LiteSpeed
This error is related to LiteSpeed (LiteSpeed Web Server) or similar servers like OpenLiteSpeed.
- If you receive error 403, this usually means the script's file contents are not yet called before the error occurs. You have to fix this on your server (by contacting your hosting provider for suitable help).
NOTE: Usually this error is caused by wrong file permissions related to your hosting provider rules. See: - If the issue persists after fixing file permissions, you must disable
mod_securityon your server: - Otherwise, if restrictions cannot be properly configured, we strongly recommend moving to a classic web server.
Error 403 related to Firewalls
This error is related to services like Cloudflare, Imunify360, etc.
- This kind of service is often discreet and sometimes only blocks pages or static files (such as CSS or JS files). If pages display without CSS styles and in a disordered way, it is very likely that the protection service of your server has not been configured to authorize requests coming from the files of your new website. Review this configuration on your server or contact your host for suitable help.
- If you receive 403 errors after seeing a security page, this means a service like Cloudflare or Imunify360 is installed on your server and blocks some of the script's requests. Whitelist all the script's requests, or contact your hosting provider for suitable help.
- Otherwise, we strongly recommend adding all the script's files in the service's whitelist, or removing/disabling the service on your server to avoid request bans.
Upgrade to new versions
1. SSH Upgrade Method
- Put your website under maintenance from the Admin panel → System Info → Maintenance. Don't log out as an admin user.
- Clear the website cache from the Admin panel → System Info → Clear Cache.
- Download the latest version from CodeCanyon.
- Copy the
.zipfile to the root of your server (same place where files were uploaded during installation). - Rename this zip file to
jobclass.zipon the server. - Delete the
vendordirectory from your server (so there are no old unused files left from previous versions). - Use a terminal (console) to log into your website's root folder.
- Once in your website's root folder, run:
unzip -o jobclass.zip -x ".htaccess" -x "public/.htaccess" -x "public/dist/front/custom.css" - Ensure to never delete or replace the
/.envand the/storage/installedfiles. - Wait for the command to complete.
- (If you have installed any add-ons) update them to their latest version.
- Visit
https://domain.tld/upgradeand clickUpgrade Now. - Once the update completes, your website will go live automatically and you will be redirected back to the homepage.
2. Traditional Upgrade Method
- If you have made any CSS customization, back up your
/public/dist/front/custom.cssfile and overwrite its latest version after update. (If you didn't make any CSS customization, you can skip this step.) - If you have made any translations, back up your language files in the
/lang/folder and merge their content after update. (If you didn't make any translations, you can skip this step.)
- Put your website under maintenance from the Admin panel → System Info → Maintenance. Don't log out as an admin user.
- Clear the website cache from the Admin panel → System Info → Clear Cache.
- Download the latest version from CodeCanyon.
- Copy the
.zipfile to the root of your server (same place where files were uploaded during installation). - Delete the
vendordirectory from your server (so there are no old unused files left from previous versions). - Extract the
.zipfile into the website's root folder by overwriting old files. Ensure to never delete or replace the/.envand the/storage/installedfiles. - (If you have installed any add-ons) update them to their latest version.
- Visit
https://domain.tld/upgradeand clickUpgrade Now(make sure you are logged in as admin). - Once the update completes, your website will go live automatically and you will be redirected back to the homepage.
Upgrade Notes
- Find Your Purchase Code
- Add a new entry for your purchase code in the
/.envfile:PURCHASE_CODE=yourpurchasecode— or log in to your Admin panel → Settings → Application → Purchase Code and edit the line to add your Purchase Code.
- Exception to v7.1.0: Upload/replace the
/storage/app/public/app/default/folder on your server before or after running the upgrade URL. - v5.1+: Activate all purchased add-ons using their purchase code from the Admin panel → Add-ons.
- If your website is running on v4.8 or lower: Before starting the upgrade, move all contents of the
/public/uploads/directory to/storage/app/public/. - If your website is running on v4.3 or lower — upgrading to v4.4:
- You will lose all your
Admin panel → Settingsentries and will need to set up your website again. - You will lose all current internal messages (which were also sent by email to their receivers).
- If you re-activate the listing review (approval) option, all existing listings will be approved automatically.
- You will need to (uninstall and) re-install all the script's add-ons after the upgrade.
- You will lose all add-on data and settings (except payment add-on transaction entries).
- You will lose all your
- If your website is running on v3.4 or lower: Before starting the upgrade, you have to:
- Add this entry:
APP_VERSION=X.Xin the/.envfile (e.g.APP_VERSION=3.4if your current version is 3.4). - Add a new entry for your purchase code in the
/.envfile:PURCHASE_CODE=yourpurchasecode. - (If exists) change
DB_PREFIX=toDB_TABLES_PREFIX=in the/.envfile. - (If exists) remove the
SESSION_DRIVER=fileandSESSION_DOMAIN=.mysite.comentries from the/.envfile.
- Add this entry:
Mail Sending (SMTP)
Short for Simple Mail Transfer Protocol, SMTP is a protocol for sending e-mail messages between servers. Most e-mail systems that send mail over the Internet use SMTP to send messages from one server to another; the messages can then be retrieved with an e-mail client using either POP or IMAP. In short, SMTP is used to send emails to your site users.
You can use any SMTP service provider:
- Your own hosting SMTP server
- Mailgun
- Postmark
- Amazon SES
- Sparkpost
- Gmail, Yahoo, or another e-mail provider
Own SMTP Server
Admin panel setup
- Go to your Admin panel → Settings → Mail.
- Set Mail Mailer, Mail Host, Mail Port, Mail Encryption, Mail Username and Mail Password.
- Save your changes.
Or use the /.env file
- Log into your FTP account.
- Open and edit
/.env. - Paste your SMTP server details:
MAIL_MAILER=smtp
MAIL_HOST=your-mail-host
MAIL_PORT=your-mail-port
MAIL_USERNAME=your-mail-username
MAIL_PASSWORD=your-mail-password
MAIL_ENCRYPTION=your-mail-encryption
- Replace
your-mail-host,your-mail-port,your-mail-username,your-mail-password, andyour-mail-encryption. - Save and upload the file.
/.env file settings override those of the admin panel. Don't forget to change your sender email address in Admin panel → Settings → Mail → Email Sender to match an allowed email address of your SMTP server.
Mailgun
Admin panel setup
- Go to your Admin panel → Settings → Mail.
- Set Mail Mailer, Mailgun Domain, Mailgun Secret, Mail Host, Mail Port, Mail Encryption, Mail Username, and Mail Password.
- Save your changes.
Or use the /.env file
- Log into your FTP account.
- Open and edit
/.env. - Remove all current Mail configuration variables.
- Add the lines below:
MAIL_MAILER=mailgun
MAILGUN_DOMAIN=your-mailgun-domain
MAILGUN_SECRET=your-mailgun-secret
MAILGUN_ENDPOINT=api.mailgun.net
MAIL_HOST=your-mailgun-smtp-host
MAIL_PORT=your-mailgun-smtp-port
MAIL_USERNAME=your-mailgun-smtp-username
MAIL_PASSWORD=your-mailgun-smtp-password
MAIL_ENCRYPTION=your-mailgun-smtp-encryption
/.env file settings override those of the admin panel. Don't forget to change your sender email address in Admin panel → Settings → Mail → Email Sender to match an allowed email address of your SMTP server.
Postmark
Admin panel setup
- Go to your Admin panel → Settings → Mail.
- Set Mail Mailer, Postmark Token, Mail Host, Mail Port, Mail Encryption, Mail Username, and Mail Password.
- Save your changes.
Or use the /.env file
- Log into your FTP account.
- Open and edit
/.env. - Remove all current Mail configuration variables.
- Add the lines below:
MAIL_MAILER=postmark
POSTMARK_TOKEN=your-postmark-token
MAIL_HOST=your-postmark-smtp-host
MAIL_PORT=your-postmark-smtp-port
MAIL_USERNAME=your-postmark-smtp-username
MAIL_PASSWORD=your-postmark-smtp-password
MAIL_ENCRYPTION=your-postmark-smtp-encryption
/.env file settings override those of the admin panel. Don't forget to change your sender email address in Admin panel → Settings → Mail → Email Sender to match an allowed email address of your SMTP server.
Amazon SES
Admin panel setup
- Go to your Admin panel → Settings → Mail.
- Set Mail Mailer, SES Key, SES Secret, and SES Region.
- Save your changes.
Or use the /.env file
- Log into your FTP account.
- Open and edit
/.env. - Remove all current Mail configuration variables.
- Add the lines below:
MAIL_MAILER=ses
SES_KEY=your-ses-key
SES_SECRET=your-ses-secret
SES_REGION=your-ses-region
/.env file settings override those of the admin panel. Don't forget to change your sender email address in Admin panel → Settings → Mail → Email Sender to match an allowed email address of your SMTP server.
Sparkpost
Admin panel setup
- Go to your Admin panel → Settings → Mail.
- Set Mail Mailer, Sparkpost Secret, Mail Host, Mail Port, Mail Encryption, Mail Username, and Mail Password.
- Save your changes.
Or use the /.env file
- Log into your FTP account.
- Open and edit
/.env. - Remove all current Mail configuration variables.
- Add the lines below:
MAIL_MAILER=sparkpost
SPARKPOST_SECRET=your-sparkpost-secret
MAIL_HOST=your-sparkpost-smtp-host
MAIL_PORT=your-sparkpost-smtp-port
MAIL_USERNAME=your-sparkpost-smtp-username
MAIL_PASSWORD=your-sparkpost-smtp-password
MAIL_ENCRYPTION=your-sparkpost-smtp-encryption
/.env file settings override those of the admin panel. Don't forget to change your sender email address in Admin panel → Settings → Mail → Email Sender to match an allowed email address of your SMTP server.
SMS APIs
This functionality allows verifying user mobile numbers and lets sellers be contacted by SMS.
How to set up
- Admin panel → Settings → Mail → SMS Driver to set the default SMS API.
- You can use both Vonage or Twilio as your SMS provider API.
Vonage
Admin panel setup
- Go to your Admin panel → Settings → SMS.
- Set Vonage Key, Vonage Secret, and Vonage From.
- Save your changes.
Or use the /.env file
VONAGE_KEY=your-vonage-key
VONAGE_SECRET=your-vonage-secret
VONAGE_SMS_FROM=your-sender-number
Twilio
Admin panel setup
- Go to your Admin panel → Settings → SMS.
- Set Twilio Account SID, Twilio Auth Token, and Twilio From.
- Save your changes.
Or use the /.env file
TWILIO_ACCOUNT_SID=your-twilio-account-sid
TWILIO_AUTH_TOKEN=your-auth-token
TWILIO_FROM=your-sender-number
Other SMS Configurations
- Admin panel → Settings → SMS → Enable Phone Verification to enable/disable mobile phone number verification.
- Admin panel → Settings → SMS → Enable SMS Message to enable/disable SMS sending between users.
Social Login
APP_URL in /.env matches your site URL. It should be set automatically, but you might need to do it manually in some rare cases.
- Register for a regular Facebook account, if you don't already have one.
- Open developers.facebook.com and Create a New App.
- Get the new app settings.
Now, set up your admin panel:
- Go to your Admin panel → Settings → Social Authentication.
- For Facebook: set Facebook Client ID and Facebook Client Secret.
- Save your changes.
Or place all the config values or API keys in the /.env file:
FACEBOOK_CLIENT_ID=your-facebook-client_id
FACEBOOK_CLIENT_SECRET=your-facebook-client_secret
- The
/.envfile settings override those of the admin panel. - The OAuth redirect URI is:
APP_URL/auth/connect/facebook/callback. - Replace
APP_URLwith its value (from/.env). Example:https://domain.tld/auth/connect/facebook/callback.
- Register for a regular LinkedIn account, if you don't already have one.
- Open linkedin.com/developer/apps and Create a New App.
- Get the new app settings.
Now, set up your admin panel:
- Go to your Admin panel → Settings → Social Authentication.
- For LinkedIn: set LinkedIn Client ID and LinkedIn Client Secret.
- Save your changes.
Or place all the config values or API keys in the /.env file:
LINKEDIN_CLIENT_ID=your-linkedin-client_id
LINKEDIN_CLIENT_SECRET=your-linkedin-client_secret
- The
/.envfile settings override those of the admin panel. - The OAuth redirect URI is:
APP_URL/auth/connect/linkedin/callback. - Replace
APP_URLwith its value (from/.env). Example:https://domain.tld/auth/connect/linkedin/callback.
Twitter (OAuth 2.0)
- Register for a regular Twitter account, if you don't already have one.
- Open apps.twitter.com and Create a New App.
- Get the new app settings.
Now, set up your admin panel:
- Go to your Admin panel → Settings → Social Authentication.
- For Twitter: set Twitter Client ID and Twitter Client Secret.
- Save your changes.
Or place all the config values or API keys in the /.env file:
TWITTER_OAUTH_2_CLIENT_ID=your-twitter-oauth-2-client_id
TWITTER_OAUTH_2_CLIENT_SECRET=your-twitter-oauth-2-client_secret
- The
/.envfile settings override those of the admin panel. - The OAuth redirect URI is:
APP_URL/auth/connect/twitter-oauth-2/callback. - Before configuring your Twitter app in the script, change its Permissions (on developer.twitter.com) by enabling the Request email address from users option.
- Replace
APP_URLwith its value (from/.env). Example:https://domain.tld/auth/connect/twitter-oauth-2/callback.
Twitter (OAuth 1.0)
- Register for a regular Twitter account, if you don't already have one.
- Open apps.twitter.com and Create a New App.
- Get the new app settings.
Now, set up your admin panel:
- Go to your Admin panel → Settings → Social Authentication.
- For Twitter: set Twitter Client ID and Twitter Client Secret.
- Save your changes.
Or place all the config values or API keys in the /.env file:
TWITTER_CLIENT_ID=your-twitter-client_id
TWITTER_CLIENT_SECRET=your-twitter-client_secret
- The
/.envfile settings override those of the admin panel. - The OAuth redirect URI is:
APP_URL/auth/connect/twitter/callback. - Before configuring your Twitter app in the script, change its Permissions (on developer.twitter.com) by enabling the Request email address from users option.
- Replace
APP_URLwith its value (from/.env). Example:https://domain.tld/auth/connect/twitter/callback.
Google (deprecated)
- Register for a regular Google account, if you don't already have one.
- Open console.developers.google.com and Create a New App.
- Get the new app settings.
Now, set up your admin panel:
- Go to your Admin panel → Settings → Social Authentication.
- For Google: set Google Client ID and Google Client Secret.
- Save your changes.
Or place all the config values or API keys in the /.env file:
GOOGLE_CLIENT_ID=your-google-client_id
GOOGLE_CLIENT_SECRET=your-google-client_secret
- The
/.envfile settings override those of the admin panel. - The OAuth redirect URI is:
APP_URL/auth/connect/google/callback. - Replace
APP_URLwith its value (from/.env). Example:https://domain.tld/auth/connect/google/callback.
Google Maps
You have to activate Google Maps Embed API and Google Maps JavaScript API in your Google Console.
Admin panel setup
- Go to your Admin panel → Settings → Others.
- Set the Google Maps key.
- Save your changes.
Or use the /.env file
GOOGLE_MAPS_JAVASCRIPT_API_KEY=your-google-maps-javascript-api-key
Captcha
Recaptcha
reCAPTCHA is a free CAPTCHA service that helps protect your site against spam, malicious registrations, and other forms of attacks where computers try to disguise themselves as humans. reCAPTCHA comes in the form of a widget that you can easily add to your blog, forum, or registration.
How to set up
- Visit google.com/recaptcha/admin.
- Follow the steps by selecting the reCAPTCHA version. Get your site key and secret key.
Admin panel setup
- Go to Admin panel → Settings → Security.
- Enable the feature from the Enable reCAPTCHA field.
- Set reCAPTCHA version, reCAPTCHA site key, and reCAPTCHA secret key.
- Save your changes.
Or use the /.env file
RECAPTCHA_VERSION=your-recaptcha-keys-version
RECAPTCHA_SITE_KEY=your-recaptcha-site_key
RECAPTCHA_SECRET_KEY=your-recaptcha-secret_key
- Replace
your-recaptcha-keys-versionby v2 or v3. - Replace
your-recaptcha-site_keyandyour-recaptcha-secret_keyby your keys.
/.env file settings override those of the admin panel.
Image Processing
The script supports two image processors:
- GD
- Imagick
GD is a basic image-resizing driver for PHP and is suited only to basic websites. It has memory issues and doesn't perform well at all conditions. For pro-photography or higher quality images, prefer Imagick. Make sure your server has Imagick installed.
Imagick
- Log into your FTP account.
- Open and edit
/.env. - Find:
IMAGE_DRIVER=gd - Change it to:
IMAGE_DRIVER=imagick
Localization
How can I enable Geolocation?
- Visit Admin panel → Settings → Localization.
- Check the Enable Geolocation field.
- Select a GeoIP Driver. By selecting a GeoIP driver/service, its website link (and if required, API/license key/token fields) will be shown.
- (If available) get the GeoIP service API key/token (or license key) and insert it in the geolocation settings form.
- By selecting maxmind.com (Database) as GeoIP service:
- Go to dev.maxmind.com/geoip/geoip2/geolite2/.
- Download the latest binary version of the
GeoLite2-City.mmdbdatabase. - Extract it in the Maxmind database folder at
/storage/database/maxmind/— resulting in/storage/database/maxmind/GeoLite2-City.mmdb. You can replace the current file (if it exists) to update the Maxmind database.
Note: The lite (free) versions of the Maxmind databases are not accurate. See the MaxMind GeoLite FAQ for more information. - If you want to redirect users to their country's website based on their IP address, leave Default Country blank.
Important: When you reset this option by setting a default country, clear all your browser's session and cookies (and other data like hosted-app data and cache) to see the effect of the change.
SVG Maps
The script uses Simplemaps SVG maps (simplemaps.com/resources/svg-maps). Maps for some countries (Kosovo, some islands, etc.) are not available.
For some countries you may need to edit the SVG files to change state or province names. All SVG map files are in /public/images/maps/.
There are free (commercial use) and paid licenses, so you can buy a license for some missing SVG maps and hire a local developer to add them for your website (based on the current code). You can also disable SVG maps from your Admin panel.
Countries Data
Geonames Database
The script uses the Geonames database (geonames.org, their most structured database) for cities and administrative divisions data.
This database is not complete for any country. You can update it from your Admin panel → International → Countries → Admin. Division x or Cities by adding new data (respecting the Geonames data format), modifying existing data, or deleting entries.
From v3.1+ you have to update the countries locations database from your Admin panel → International → Countries.
The script does not support certain countries (Kosovo, some islands, etc.) automatically because their data is not reliable. You will need to add the missing or incorrect data manually from your admin panel.
Your own database
If you want to use your own data instead of the Geonames data, you can delete all Geonames data by using phpMyAdmin to flush the cities, subadmin1, and subadmin2 tables before adding new data from the Admin panel.
Languages
How can I add new languages?
- Go to your Admin panel → Languages.
- Click Add language.
- Go to the translation folder at
/lang. - The script will already have duplicated
/lang/en/to/lang/<code>/.
- Don't forget to translate the database translatable entries from the Admin panel (Listings → Categories, Plans, Report Type, etc.).
- If needed, duplicate (manually, in the same directory) or edit the date language file in
/vendor/nesbot/carbon/src/Carbon/Lang/.
How can I change the default language?
- Go to your Admin panel → Languages.
- Create a new language entry and check the Default field. Or edit an existing language and check Default.
- Save your changes.
/config/app.php and change the fallback_locale value to your default language code (e.g. de). Save your files on your server.
How can I edit translations?
- Go to the translation folder at
/lang/(each language has its language code as folder name). - Open the folder of the language you wish to translate and edit its files (e.g.
global.phpcontains 90% of the site's texts,mail.phpfor email contents, etc.). - To translate a file, change the values, not the keys, of the PHP array.
- Save your files on your server.
How can I disable languages?
- Go to your Admin panel → Languages.
- Select a language and edit it.
- Uncheck Active and save.
How can I delete languages?
- Go to your Admin panel → Languages.
- Select a language and delete it.
/lang/<code> will also be removed.
Cron Job
How can I start the Scheduler?
The Scheduler will execute:
- The Ads Purge command (auto-archives and deletes listings after expiration) every hour.
- The Cache Purge command (cleans up expired cache files) every day at 5:00.
- The Views Clear command (clears cached view files) on the latest day of every week at 6:00.
When using the scheduler, you only need to add the following Cron entry to your server:
* * * * * {PHP_BIN_PATH} /path/to/public_html/artisan schedule:run >> /dev/null 2>&1
For shared hosting, use:
* * * * * {PHP_BIN_PATH} /path/to/public_html/utils/schedule-run.php >> /dev/null 2>&1
This Cron will call the Laravel command scheduler every minute. When schedule:run is executed, Laravel evaluates your scheduled tasks and runs the ones that are due.
{PHP_BIN_PATH}— e.g./usr/bin/php8.2,/usr/bin/php,/usr/lib/php./path/to/public_html/— replace this path with your real path.- Don't hesitate to ask your hosting provider for more information.
- (Not recommended) You can disable the data cached files command by adding
CACHE_MANAGER_CLEAN_UP=truein/.env. - You can activate the views cached files auto-clear command by adding
VIEW_CACHE_AUTO_CLEAN_UP=falsein/.env.
More information about Cron Job
How does the Ads Clear command work?
After setting it up to run every hour (for example), there are 2 cases to consider:
1. Regular Ads
Configure these options under Admin panel → Settings → Cron:
- Unactivated Ads Expiration: after this time (in days), unactivated listings are deleted.
- Activated Ads Expiration: after this time (in days), activated listings are archived.
- Archived Ads Expiration: after this time (in days), archived listings are removed.
2. Premium / Paid Listings
- After the Plan duration (set under Admin panel → Plans → [EDIT] → Duration), Premium Listings become Regular Listings.
Note:
- The expiration duration of free plans (i.e. plans with
0as price) is not taken into account — the Regular Listings rules apply instead. - For site owners that have installed the Offline Payment add-on, pushed listings as premium (manual promotions of listings from the admin panel) will never expire. You will need to un-feature them (remove the promotion manually) first.
- The expiration duration of free plans (i.e. plans with
- Then, the Regular Listings rules (described in #1) are applied to clear the website database.
Backup
Before using this feature, set your MySQL dump binary path with the variable DB_DUMP_BINARY_PATH in /.env.
Example with MAMP on macOS: DB_DUMP_BINARY_PATH=/Applications/MAMP/Library/bin/. Set only the path, without mysqldump.
If local disk is used, the backups are stored on your server in /storage/backups/.
/storage/backups/ directory is NOT the MySQL dump binary (mysqldump) path. If you don't know your server's mysqldump path, contact your host for more information.
Manual Backup
Go to Admin panel → Backups to make backups manually.
Automatic Backup
Go to Admin panel → Settings → Backup to schedule backups and their clearing-up policy.
Backup Storage
Go to Admin panel → Settings → Backup to select a storage type for the backups.
For local storage, select Local Only and save the form. For cloud storage, select Cloud Only or Local and Cloud and save the form.
Local Only— backup is stored on the website server only.Cloud Only— backup is stored on the cloud storage only.Local and Cloud— backup is stored both on the website server and on the cloud storage.
Cloud Storage
FTP
Add the config below in your /.env file and set FILESYSTEM_CLOUD=ftp:
FILESYSTEM_CLOUD=ftp
FTP_HOST=your-ftp-host
FTP_USERNAME=your-ftp-username
FTP_PASSWORD=your-ftp-password
FTP_PORT=21
FTP_ROOT=/path/to/storage/root/
FTP_PASSIVE=true
FTP_SSL=true
FTP_TIMEOUT=30
SFTP
Add the config below in your /.env file and set FILESYSTEM_CLOUD=sftp:
FILESYSTEM_CLOUD=sftp
SFTP_HOST=your-sftp-host
SFTP_USERNAME=your-sftp-username
SFTP_PASSWORD=your-sftp-password
SFTP_SSH_PRIVATE_KEY=
SFTP_HOST_FINGERPRINT=
SFTP_MAX_TRIES=
SFTP_PASSPHRASE=
SFTP_PORT=22
SFTP_ROOT=/path/to/storage/root/
SFTP_TIMEOUT=30
Amazon S3
Add the config below in your /.env file and set FILESYSTEM_CLOUD=s3:
FILESYSTEM_CLOUD=s3
AWS_ACCESS_KEY_ID=your-s3-access-key
AWS_SECRET_ACCESS_KEY=your-s3-secret-key
AWS_DEFAULT_REGION=your-s3-region-code
AWS_BUCKET=your-s3-bucket
AWS_URL=
AWS_ENDPOINT=
AWS_USE_PATH_STYLE_ENDPOINT=
Dropbox
Add the config below in your /.env file and set FILESYSTEM_CLOUD=dropbox:
FILESYSTEM_CLOUD=dropbox
DROPBOX_ROOT=path/to/storage/root
DROPBOX_AUTHORIZATION_TOKEN=your-dropbox-authorization-token
DigitalOcean
Add the config below in your /.env file and set FILESYSTEM_CLOUD=digitalocean:
FILESYSTEM_CLOUD=digitalocean
DIGITALOCEAN_KEY=your-s3-access-key
DIGITALOCEAN_SECRET=your-s3-secret-key
DIGITALOCEAN_REGION=your-s3-region-code
DIGITALOCEAN_BUCKET=your-s3-bucket
DIGITALOCEAN_URL=
DIGITALOCEAN_ENDPOINT=
DIGITALOCEAN_USE_PATH_STYLE_ENDPOINT=
DIGITALOCEAN_FOLDER=
DIGITALOCEAN_CDN_ENDPOINT=
API
By default, the API uses an access token set in /.env with the variable APP_API_TOKEN=. Its value needs to be added in the header of all API requests with X-AppApiToken as key.
The front end of the script consumes the API via cURL (through the Laravel HTTP Client / Guzzle), while the admin panel communicates directly with the database.
- Set a configuration that authorizes all requests with
https://yourdomain.tld/api/as URL base. - If a proxy is needed to communicate with your server, set it with its port separated by
:in/.envwith the variableAPP_API_PROXY=:APP_API_PROXY=proxy-host:proxy-portAPP_API_PROXY=proxy-ip-address:proxy-portAPP_API_PROXY=http://username:password@proxy-ip-address:proxy-port
- Only the OfflinePayment add-on is stateless, so it can be used with the API.
- All other add-ons cannot be used with the API, even though they continue to work with the web client.
How To
How is user registration managed?
When options like Email Address Verification (Admin panel → Settings → Mail) or Enable Phone Verification (Admin panel → Settings → SMS) are enabled, users must verify their email address or mobile phone number accordingly. Users cannot log in until they complete the verification process.
- If only Email Address Verification is enabled, the user can log in once they verify their email address.
- If only Enable Phone Verification is enabled, the user can log in once they verify their phone number via the SMS code.
- If both options are enabled, the user must verify both email and phone before they can log in.
- If neither option is enabled, the user is automatically logged in after registration and can log in without any verification.
How are ads/listings published?
- Admin Approval Not Required
When options like Email Address Verification or Enable Phone Verification are enabled, users must verify their email address or mobile phone number accordingly. Ads will appear in the "Pending Approval" section until users complete verification.
- If only Email Address Verification is enabled, the ad is published once the user verifies their email address.
- If only Enable Phone Verification is enabled, the ad is published once the user verifies their phone number via the SMS code.
- If both options are enabled, the user must verify both email and phone for the ad to go public.
- If neither option is enabled, the ad goes public on the website after publication, without any verification.
- Admin Approval Required
When the Allow listings to be reviewed by Admins option (Admin panel → Settings → Listing Form) is enabled, ads remain in the "Pending Approval" section even after users verify their email and/or phone. These ads require admin approval to be published. Once approved by the admin, the ad goes live.
Important: When a user selects a promotion plan to publish an ad, its publication will bypass admin approval after payment (i.e. the ads will go public after promotion plan payment). More information about plan payments here.
How can I set the default country?
- Go to your Admin panel → Settings → Geo Location and set Default Country with your country code (only ISO alpha-2 codes are accepted). From v2.x or above the script sets the default country during installation.
How can I set the default currency?
- The default currency is that of the current country, except the Plan's currency, which you set from Admin panel → Plans.
How can I set up the plans?
- Go to your Admin panel → Plans.
- Select a plan and edit it.
- You can add new plans or delete current plans in the latest version.
- More information: Configuring the Plans.
How can I set up the advertising code (e.g. Adsense)?
- Go to your Admin panel → Advertising.
- Edit the top and bottom code.
- The code will be displayed on the search result pages and the listing page.
How can I set up reCAPTCHA?
- Go to your Admin panel → Settings → Security.
- Turn ON or OFF Enable reCAPTCHA.
- Set reCAPTCHA public key and reCAPTCHA private key.
- Save your changes.
Please see more features by visiting Admin panel → Settings.
Recover from an Admin Lockout
If a value saved from the admin panel prevents you from signing back in (e.g. a wrong reCAPTCHA key, an unreachable SMTP host, a queue driver pointing at a backend that no longer exists, etc.), you do not need to touch the database by hand. JobClass ships with two complementary recovery levers.
Option 1 — Force .env values (temporary bypass)
Add a SETTINGS_FORCE_ENV entry to your /.env file listing the settings group(s) whose database values should be ignored at boot. The app will then read those settings from .env (or the config/ defaults) instead of from the database, letting you boot the application again and reach the admin panel.
# Examples (in /.env)
SETTINGS_FORCE_ENV=security # ignore DB security settings (e.g. CAPTCHA lockout)
SETTINGS_FORCE_ENV=mail # ignore DB mail settings (broken SMTP creds)
SETTINGS_FORCE_ENV=queue,security # ignore multiple groups at once
SETTINGS_FORCE_ENV=all # ignore every DB-side override (last resort)
Available group names:
general— app name, dates, Google Maps API keys, cookie consent togglecache— cache driver (file, Redis, Memcached) and its parametersqueue— queue driver (sync, database, Redis, SQS) and its parameterslocale— default language, date / number formatsmail— SMTP driver, host, credentials, From addresssms— Twilio / Vonage credentialssecurity— reCAPTCHA / hCaptcha keys, login throttlingsocial_auth— Facebook / Google / LinkedIn / Twitter OAuth keysbackup— backup destination, schedule, retention
After editing .env, clear the config cache:
php artisan config:clear
SETTINGS_FORCE_ENV is a temporary bypass. The bad row is still in your settings table; it will start being used again as soon as you remove the .env entry. Once you've regained access, fix the offending value from the admin panel (or via Option 2 below), then remove SETTINGS_FORCE_ENV from .env so future admin saves take effect again.
Option 2 — Reset a setting from the CLI (permanent)
The settings:reset Artisan command rewrites a single setting row directly in the database, exactly as if the admin had saved the value from the panel. It is the correct way to permanently fix a bad value — after running it you can (and should) remove any matching SETTINGS_FORCE_ENV entry from .env.
# Disable a boolean setting (the default value for *_enabled keys is "0")
php artisan settings:reset captcha_enabled
# Set an explicit value
php artisan settings:reset queue_driver --value=sync
php artisan settings:reset mail_driver --value=log
php artisan settings:reset optimization_cache_driver --value=file
The command will:
- Show you the current value of the setting and the new value it is about to write.
- Ask for confirmation before saving.
- Preserve the row's settings group (so the value stays in the same admin sidebar tab); if the row does not yet exist, it is created in the
generalgroup. - Trigger the regular save side effects (env-mirror to
/.envfor queue / cache / SMS keys, cache regeneration, etc.) so the change takes effect immediately.
Common recovery recipes:
| Symptom | Command |
|---|---|
| Locked out by a broken CAPTCHA | php artisan settings:reset captcha_enabled |
| Broken SMTP credentials | php artisan settings:reset mail_driver --value=log |
| Queue driver pointing at a dead backend | php artisan settings:reset queue_driver --value=sync |
| Cache driver pointing at an unreachable Memcached / Redis | php artisan settings:reset optimization_cache_driver --value=file |
php artisan itself fails because of the bad setting), start by running Option 1 to bring the app back up, then run Option 2 to fix the row, then remove the SETTINGS_FORCE_ENV line.
Credits
- Laravel — laravel.com
- Maxmind — maxmind.com
- Geonames — geonames.org
- Simplemaps — simplemaps.com
- and more…