v0.9.2
Vibez
Vibez has been on the phone for a while as a frontend-only mock; this release gives it a real server backend (#55). The frontend still needs a proper round of work, so expect rough edges there while that lands in a coming release.
- The feed, likes, comments, Discover and profiles are now backed by the server, with editing and uploads through the shared media pipeline
- Accounts run on the shared accounts engine: register, sign in, password resets by text from the app's short code
- Go live: real live streaming with a host view, a viewer with live comments, and late-join support
- Admin moderation tooling wired into the phone's admin panel
- Inbox notifications with a proper home-screen badge, server-authoritative like the other social apps
Payphones (beta)
Street payphones landed (#56) and got a full follow-up round. Treat them as a beta for now: they work, but there is more to do before they're considered finished.
- Working payphone booths across the map with static numbers; call out from a booth, or answer one that's ringing
- Booths play a proper handset scene: the world prop swaps for an animated one and the ped grabs the handset
- Coin-operated calling (optional,
configs/payphone.lua): the LCD reads INSERT COIN, feeding the slot charges the configured cost and unlocks the keypad, a failed dial keeps your credit, answering is always free - A fully redrawn machine UI: brushed-steel enclosure, hanging handset that lifts during calls, green LCD, riveted placard and taped-on notes
- ox_lib menu mode for servers that prefer context menus over the machine UI; the menu flow charges the coin toll on dial
- Ring matching is tight enough for payphone banks, so the booth next to a ringing one no longer offers Answer Phone
Invoicing
Invoicing arrived in two layers this release: businesses first, then everyone.
Business invoicing (Services)
- On-duty employees send invoices from their business (suggested in #62): recipient by phone number or server ID, amount and note, with server-side validation and configurable bounds (
configs/services.lua) - Payments land in the business society account where society banking exists, with a personal-bank fallback and an automatic refund if crediting fails; the sender gets a paid notification
- The Actions tab now has two clean entries: Send Invoice opens a full slide-in composer page, View Invoices opens the business ledger with pending and settled invoices, status chips and cancelling
Personal invoicing (Wallet)
- The Wallet grew a tab bar: Home is the familiar wallet, and a new Invoices tab (with a pending-count badge and swipe transitions) holds everything invoice-shaped (#75)
- Anyone can invoice anyone: full-page composer with a contact picker, drafts that survive closing the phone, and recipients by phone number or server ID
- Received shows business and personal invoices together, pending pinned on top, with settled history kept as Paid/Cancelled chips so a cancelled invoice explains itself instead of vanishing
- Sent tracks your own invoices with live status and cancelling
- Anti-spam guard rails in
configs/banking.lua: amount bounds plus a cap on outstanding unpaid invoices per sender - Identity follows your contact book everywhere: saved contacts show their name and avatar, strangers show their number, in rows, dialogs and even the notification banners, and adding or deleting a contact updates open lists on the spot
Wallet
- Every invoice payment carries a short reference code, printed on both parties' transactions (
Invoice Paid · 4F09AC) and beside every invoice title, so payments and invoices match up from either side; invoice transactions have their own category and receipt icon - The balance now updates live when money moves from anywhere, not just phone features: the phone listens to the framework money broadcasts, so a paycheck or a shop purchase ticks the balance while the Wallet is open
- Every bank movement from any script now lands in the transaction list as a labelled row (qb/qbox), with phone-driven movements deduplicated so transfers and invoices keep their single richer entry
- The Wallet and the Services company balance both re-sync the moment the app is foregrounded, closing the stale-balance-until-reopen gap
Phone shell
- The phone can reopen straight into the app you were using, now a per-player toggle in Settings (Reopen Last App)
- iOS-style reveal animations across the shell, plus settings row polish
- The phone opens noticeably faster: the hold animation and the installed-app list moved off the critical path, so the UI reveals instantly and reconciles in the background (#57)
/wipemyphoneno longer strands NUI focus, and a wipe mid-payphone-call now tears the booth session down properly
Messages and contacts
- Save a number from a conversation: unknown-number threads offer Add Contact in the header, opening the contact form prefilled in a standard sheet; automated senders like password-reset short codes are excluded (#60)
- Conversation names resolve live against your contacts: deleting a contact reverts their threads to the number, renames propagate instantly (#58)
- Unknown numbers show a proper person silhouette instead of number-derived initials, across the messages list, conversation headers, recents, No Caller ID calls, call screens and the Add Contact photo placeholder (#59)
- The call detail page updates in place after Add to Contacts: saved name, avatar, and the add button gone
Fixes
- Garage status labels no longer surface in the wrong language: they resolve against the active locale on every render instead of freezing at first load (#65)
- The Health app's Time Awake starts counting from character load, not from the first time you open the app; steps and heart rate were always session-tracked (#64)
- Mark All Read in Mail now clears the home-screen badge, and the underlying write race that silently lost read flags on restart is gone (#61)
- Birdy got a full round of reported fixes: feed, follows, comments, reposts, notifications, privacy, DMs and avatars (#37)
- Picking dark mode during setup (or any setting, on a slow first join) no longer reverts to defaults after a relog: the character-load rehydrate was silently lost in the Vibez merge and is restored, so theme, wallpaper, tones and language apply the moment the character loads
Under the hood
- The project is now licensed under GPLv3, same as the frameworks it runs beside
- Adding a language is now a one-file job: drop a
locales/<code>.jsonin and it appears in the Setup and Settings language pickers automatically with its native name (a UI rebuild is still required, since catalogs are bundled as lazy chunks) - New
phone_service_invoicestable with an idempotent boot migration; existing installs upgrade in place - The
/mailseedtest command is gone (again)
Contributors
Thanks to everyone who contributed to this release:
- @Epixx1337: Vibez, street payphones, and the Birdy fix round
- @ihyajb: faster phone opening and the wipe focus cleanup (#57)
- @boppescripting: reported #58, #61 and #64, and suggested contact saving (#60), silhouette avatars (#59) and business invoicing (#62)
- @OhNoItsOri: reported the garage locale bug (#65)
Full changelog: v0.9.1...v0.9.2