Description
A contacts manager for ESX or QB: add, edit, favorite, block and share contacts with photos, plus a proximity vCard swap that beams a contact between two nearby phones. It is commoditized CRUD, so it sells as the polished connective tissue of a phone bundle rather than a standalone product.
Prompt Template
You are writing a FiveM resource for esextended (stable, exports getSharedObject).
The full prompt template and its reference Lua are part of a one-time pack. Pick your depth — both are lifetime access, no subscription, ever.
- 60 prompts + syntax-validated reference Lua
- Lifetime access — pay once
- All 510 prompts — the full library
- Per-prompt profit/trend intelligence (CSV + playbook)
- Lifetime free updates — new niches as the market moves
$49 for 60 · $199 for all 510 + intelligence — one-time, no subscription.
Expected Output
The reference Lua lives at content/expected-outputs/phone/08-contacts-manager.lua. It implements a server-owned per-identifier contacts table with add/edit/delete/favorite/block, and a…
The full prompt template and its reference Lua are part of a one-time pack. Pick your depth — both are lifetime access, no subscription, ever.
- 60 prompts + syntax-validated reference Lua
- Lifetime access — pay once
- All 510 prompts — the full library
- Per-prompt profit/trend intelligence (CSV + playbook)
- Lifetime free updates — new niches as the market moves
$49 for 60 · $199 for all 510 + intelligence — one-time, no subscription.
Known Failure Modes & Corrective Prompt
- Client-trusted list — Claude keeps contacts in a local table and writes straight to the UI; nothing persists and a modder injects contacts for another identifier. Keep the table server-side keyed by owner identifier.
- Anim before load — the vCard-swap
TaskPlayAnimno-ops if the dict is not loaded; alwaysRequestAnimDict+ aHasAnimDictLoadedwait loop. - One-sided net event —
contacts:syncon only one side leaves the second phone without the swapped vCard; both sides useRegisterNetEvent+AddEventHandler.
Corrective re-prompt: "Move the contacts table into server.lua keyed by owner identifier, persist every mutation to phone_contacts, and in contacts:swap validate the target is in range with GetEntityCoords server-side before pushing the requester's card into the target — never trust a contact the client sends."
Framework Integration
- ESX:
local ESX = exports['es_extended']:getSharedObject(); key the table byxPlayer.identifierand persist viaMySQL.prepareonphone_contacts. - QBCore:
local QBCore = exports['qb-core']:GetCoreObject(); key byPlayer.PlayerData.citizenidand store contacts inplayers.charinfoJSON or a side table. - QBox:
exports.qbx_core:GetPlayer(src); reuse the citizenid key andox_libnotifications for the swap result.
Profit Potential
$80–$1200/mo on Tebex (expected ~$300). [INFERRED] within the $50-389 script band against the signal-scraper tebex_snapshot corpus (n=100, median seller $11.85K/mo), sized for a saturated contacts-CRUD niche.
Trend Signal
↘ saturated — inferred: Table-stakes contacts CRUD; commoditized; sells only as a polished bundle piece.
Sales Angle
Position as a polished bundle component, not a standalone hero — lead the listing with the proximity vCard swap, the one feature most free contacts apps lack. Recommended Tebex price $59.
Difficulty & Ship Time
beginner · ships in 1 day.