Skip to content

v0.9.2

Choose a tag to compare

@Github-Samuel Github-Samuel released this 21 Jul 20:19

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)
  • /wipemyphone no 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>.json in 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_invoices table with an idempotent boot migration; existing installs upgrade in place
  • The /mailseed test command is gone (again)

Contributors

Thanks to everyone who contributed to this release:

Full changelog: v0.9.1...v0.9.2