Portis Delivery | Phone-Based Courier App | Multi-Phone

:mobile_phone: Portis Delivery β€” The Ultimate Phone-Based Courier Script

A fully standalone, phone-integrated courier delivery system. Players receive orders, pick up packages, and deliver them β€” all through their in-game phone. Built for performance, flexibility, and immersion.


:camera: Preview

:credit_card: Download

:speech_balloon: Portis Store Discord


:sparkles: Features

  • :mobile_phone: Multi-Phone Support β€” Works with lb-phone, lb-tablet, yseries, 17mov_Phone, gksphonev2, codem-phone. Auto-detection included.
  • :card_index_dividers: 5 Order Types β€” Package, Food, Market, Special Cargo, VIP. Each with unique props, time limits, and base prices.
  • :trophy: Progression System β€” 25 levels with XP rewards, streak bonuses, and unlockable order types as players advance.
  • :stopwatch: Time Bonus System β€” Early delivery gives +30% payment. Late delivery applies a penalty. Auto-cancel after 2Γ— time limit.
  • :bar_chart: Weekly Leaderboard β€” Top couriers ranked by deliveries, earnings, and speed. Resets every Monday automatically.
  • :globe_showing_europe_africa: Zone System β€” 5 delivery zones (Starter β†’ Full Map) that unlock with player level and apply price multipliers.
  • :backpack: Animated Props β€” Order-type-specific hand props with carry animations and seamless vehicle transitions.
  • :bell: Discord Webhook Logs β€” Delivery complete, level up, cancel, and leaderboard reset events. Per-event toggle.
  • :locked: Server-Side Validation β€” All critical actions validated server-side with position checks, rate limiting, and anti-exploit logic.
  • :globe_with_meridians: Multi-Framework β€” ESX, QBCore, QBox with auto-detection. Cash or bank payment.
  • :globe_showing_europe_africa: Fully Localizable β€” All UI and in-game text driven from a single locales/en.json file.
  • :high_voltage: Optimized β€” Resmon 0.00ms idle. Built with ox_lib zones, callbacks, and progress circles.

:hammer_and_wrench: Configuration

Everything is configured through config.lua :

  • Phone/framework selection (auto or manual)
  • Order types, prices, time limits, XP values
  • Pickup & delivery locations (vector3 coords)
  • Zone system with price multipliers
  • Rate limits, cancel cooldown, level curve
  • Discord webhook

:package: Installation (Quick)

:hammer_and_wrench: Installation (Quick)

1. Extract portis-delivery into your resources folder

2. Add to server.cfg:

ensure portis-delivery

3. Import the database:

portis-delivery/sql/install.sql

4. Restart your server β€” that’s it.


:eyes: Explore More Releases

PixelHunters App

Code is accessible Partial
Subscription-based No
Lines (approximately) ~3,400+
Framework ESX, QBCore, Standalone
Requirements ox_lib, oxmysql, (lb-phone, gksphonev2, yseries, lb-tabet, 17mov_Phone, codem-phone)
Support Yes
5 Likes

looks good man

1 Like

Does it support npwd?

APPS SO DELAY IF CLICK ONLINE OR OFFILE

Thank you for the error report. I’ve made the update.

v1.0.2

Fixed

  • ox_lib type error in NUI callbacks
  • β€œFailed to fetch” log spam when the phone is closed mid-request

NPWD doesn’t support custom apps via exports, so it’s not compatible with this system. Currently supported: lb-phone, gksphone, yseries, 17mov, and lb-tablet.

hello there you made a good relase but i have 1 concern that is it posible to add framework based funciton to have the add xp remove xp get xp cuz every server uses there own defined xp if it posible to ad getxp removexp addxp function open

1 Like

Thanks for the suggestion β€” makes total sense. In the next update we’ll be adding server-side exports (GetXP, AddXP, RemoveXP, GetLevel and a few more) so you can fully sync the courier XP with your server’s own system from your side.

v1.0.3

New

  • codem-phone integration added
  • XP & progression exports added β€” GetXP, GetLevel, GetXPForNextLevel, GetPlayerStats, AddXP, RemoveXP, SetXP, SetLevel
-- Server Exports
local xp        = exports['portis-delivery']:GetXP(source)               -- number
local level     = exports['portis-delivery']:GetLevel(source)            -- number
local needed    = exports['portis-delivery']:GetXPForNextLevel(source)   -- number (0 if max level)
local stats     = exports['portis-delivery']:GetPlayerStats(source)      -- table (level, xp, deliveries, earnings, streaks, ...)


exports['portis-delivery']:AddXP(source, 100)        -- adds 100 XP, triggers level-up if reached
exports['portis-delivery']:RemoveXP(source, 50)      -- removes 50 XP (clamped at 0)
exports['portis-delivery']:SetXP(source, 0)          -- resets to level 1, then awards N XP
exports['portis-delivery']:SetLevel(source, 10)      -- sets level directly (clamped to MaxLevel)
1 Like

i think you missunderstood me i wonderd a open funciton module where i can inject xps like get xp get level next level what u added but i want to inject my xp system on ur resource

Question i noticed it says the code is partially accessible, which parts are accessible and are the plans to have a non escrowed version in the future, however from the preview pictures the app looks really good and clean.

Open files: config, framework, interaction hooks.
I currently have no plans to release a non-escrow or open-source version.