The generic mutable-table blank template persisted incomplete company definitions before runtime domain validation. Seed valid company defaults, validate before SQL writes, and repair legacy blank entries.
* FIX - repair company detail actions
Constrain compact navbar titles to their grid column so long company names cannot overlap the back action. Allow configured public emergency companies to accept normal service requests, and migrate existing police profile and Phone Configurator defaults exactly once.
* FIX - preserve phone key rebindings
Use the stable sky_phone_toggle command as the RegisterKeyMapping identifier. The previous revisioned command names detached FiveM's persisted keyboard settings from the active handler whenever the mapping identity changed.
* FIX - honor configured camera look control
Camera focus was owned by hard-coded Space DOM handlers, bypassing Config.Phone.HoldToLook. Move focus input to the FiveM client and add a bounded scripted-camera orbit so selfie mode can rotate while the configured control is held.
* FIX - preserve camera movement passthrough
* FIX - restore Phone Configurator startup warning
* FIX - keep camera modifier input readable
Replace the unavailable workspace-only build_frontend.bat hint with the frontend pnpm commands shipped in the GitHub source tree. Link the pushed frontend development guide and keep the local-only script name out of the startup diagnostic through regression coverage.
* FIX - repair inventory metadata and ESX contracts
Use the stable core_inventory metadata setter and validate the complete inventory adapter contract after provider bridges load. Preserve the real ESX configuration error instead of cascading into a missing RegisterUsableItem failure.
* FIX - clarify phone opening without SIM
* FIX - harden inventory and device contracts
Validate SIM number configuration before item handling, preserve QB metadata mutation contracts, and propagate phone-open failures to callers. Extend regression coverage for inventory bridges and device bootstrap errors.
* FIX - resolve reported phone interaction issues
Stop game-input passthrough while NUI text fields are focused and add an independent hold-to-look option. Propagate SIM number formatting to the frontend, migrate configured currency symbols to utf8mb4, and clarify SkyRide, VaultX, and DarkChat behavior with focused contract coverage.
* FIX - detect missing packaged phone UI
Validate the generated NUI entrypoint, its referenced assets, and required static media when the resource starts. Print an actionable server-console warning for incomplete source archives, package phone sounds through the manifest, and cover the detection contract with Lua regressions.
* FIX - layer dynamic island above phone camera
The phone screen stacking context kept the Dynamic Island below the physical frame and its camera lens. Render the island at device-shell level, position it around the lens, and keep expanded notification spacing in sync.
* ADD - preview all dynamic island states
Reuse the runtime component for a development-only gallery and size expanded previews to the actual phone display so they cannot be clipped.
* FIX - match dynamic island live activity behavior
Show each activity only outside its owning app, use reference-sized activity layouts, and remove the separate expand glyph in favor of direct island taps.
* FIX - refine dynamic island live controls
Keep background activity state separate from foreground visibility so the island remains visible in the compact closed-phone peek. Match the timer, stopwatch, music, collapse, and spacing behavior to the supplied references.
* FIX - keep business call availability after closing
Stop treating the closed phone UI as the end of business-call readiness. Route background service-line calls only after revalidating the employee, owned device, and registered SIM.
* FIX - remove dock apps from home grid
The stored Home layout treated dock and grid shortcuts independently, so default dock apps appeared twice. Let the dock own those default placements and migrate saved layouts by removing matching grid shortcuts.
* FIX - keep memo island active after closing
Memo recording was cancelled as soon as the UI closed, while uploads required an active UI session and reopening a locked phone forced the home route. Keep the recorder bound to the physical device, revalidate device ownership server-side for uploads, preserve the last route behind the lock screen, and render only a compact frame, display, and live Dynamic Island while closed.
* ENH - align live activity controls with phone hardware
Report compact live-activity state to the client so Space opens Home or the enabled lock screen contextually. Apply the phone hardware volume as a shared output level for app media, games, YouTube playback, radio, and auxiliary sounds, and render the volume speaker icon in grey.
* FIX - hide paused music live activity
The music island previously depended only on the selected track, which remains set after playback pauses. Require active playback as well so the island closes when music stops while preserving the track for later resume.
---------
Co-authored-by: DerEchteAlec <bycraky@gmail.com>
Compare the fxmanifest version against the latest published sky_phone release tag and report update, current, ahead, and failure states without blocking resource startup.
Document the startup check and cover the HTTP and version comparison behavior with a focused Lua test.
Refactor test data seeding to use deterministic identifiers for DarkChat and Flare, ensuring re-runs don't create duplicate entries or inconsistent states. Implement robust SIM card movement logic and add contract tests to verify seeding constraints and default configuration safety.
Small documentation edits in README.md and sky_phone/README.md: update image alt text to "Sky Phone, the free FiveM phone script", change title punctuation from an em dash to a colon ("Sky Phone: Free FiveM Phone Script"), and adjust a sentence comma/em-dash usage for clarity. No functional changes.
Add readme-assets/live-demo-button.svg and update README.md and sky_phone/README.md to reference the local SVG instead of the external shields.io badge. Replaces the remote badge with a bespoke SVG (larger, styled) and updates image paths/attributes for consistent appearance and offline reliability.
Bump the 'TRY_THE_LIVE_DEMO' badge height from 76 to 156 in README.md and sky_phone/README.md to improve visibility of the live demo link in repo and package views. No functional changes; purely presentational.
This commit updates the live demo badge sizing in both README files and removes the outdated 'Updating Sky Phone' guidance from the published documentation. The goal is to keep the docs aligned with the current branding and avoid directing users through obsolete upgrade steps.
Insert an interactive "Try the live demo" badge and a short call-to-action into README.md and sky_phone/README.md, and add a "Live demo" link to the header links. Also remove an outdated sentence about maintaining separate ESX/QBCore/Qbox phone versions from the top-level README.
Restructure root and resource READMEs with professional header, badges, and visual hierarchy. Expand feature documentation organized by category (communication, social, business, media, games, system). Add hex_4_inventory and native ESX inventory support with adapter notes. Enhance custom app section explaining native API and compatibility. Update LB Phone migration docs with Flare support. Add Support and Community section with Discord link. Explicitly license under GPL-3.0.
Enable verbose tracing for custom apps and wire diagnostics through the stack. Sets Config.CustomApps.Debug = true, adds a debug_custom_app logger exposed as SkyPhoneApps.Debug, and instruments client and shared compatibility code (registration, normalization, provider exports, catalog sync, lifecycle hooks, resource stop, and app add/update/remove) with structured debug messages. Frontend sends a debug flag with the catalog and will call back to NUI (custom-app:catalog-debug) when debug is enabled. Tests updated to enable debug and assert fixBlur preservation and NUI catalog ACK handling. This provides detailed traces for exports, registration, catalog sync and lifecycle events.
Add a contract test to ensure bootstrap data providers (memos/notes) are initialized before phone startup. Reorder fxmanifest.lua so source/server/memos.lua and source/server/notes.lua load prior to phone.lua. Fix lb_phone_migration.lua dark chat migration to avoid indexing missing usernames by only resolving profiles when a channel has exactly two members, preventing nil lookups and incorrect comparisons.
Resolve DarkChat participant profiles only after confirming that a source channel contains exactly two members. This lets incomplete and group channels be counted as unsupported while the remaining LB Phone migration domains continue without a nil-index failure.
Relocates the project README from the repository root into the sky_phone resource directory so it sits alongside the resource files and matches the project layout.
Auto-detect hex_4_inventory and add a count-based ESX adapter for non-unique, virtual-SIM phone configurations. Expose the LB Phone IsOpen alias required by HEX and document/test the supported configuration boundaries.
Quote the VaultX portfolio return key in the English and German locale tables. This preserves the existing locale lookup while allowing Lua to parse both files successfully.