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.
Simplify the VaultX login and registration flow around the linked Sky Cloud identity, enlarge the authentication controls, and use the application logo. Add a confirmed sign-out dialog with localized copy and update the VaultX contracts.
Bridge CityWarn bootstrap, publish, update, and resolve callbacks through the phone client. Apply server broadcasts to the active store and surface eligible alerts as localized phone notifications with deep links.
Add the Pinia domain, citizen feed, map, archive, settings, alert detail, and authorized publishing workflows. Ship complete German and English locale trees with a browser-safe fallback and contract coverage for every CityWarn label.
Integrate the complete VaultX application, including account flows, server-authoritative trading, live market cycles, wallet transfers, profile management, and the refined mobile interface.
Drive server-authoritative prices through alternating global and per-market trend phases with eased transitions, reduced noise, momentum, mean reversion, and rare bounded shocks. Mirror the cycle model in browser mocks and slow development preview ticks so charts show readable highs and downs.
Run smaller server-authoritative market ticks every few seconds, update portfolio and chart values from batched prices, and mirror the live feed in the browser test server.
Complete the VaultX frontend fallback locale for auth, transfers, profile keys, and activity labels so browser previews never render raw translation paths. Shorten and constrain the send quick action so all four cards remain equal-width on the phone surface.
Add explicit Copy and Share actions to the profile key card. Use the CEF-compatible clipboard helper for reliable copying and route sharing through the phone-owned EasyShare flow with localized payload text.
Give every VaultX profile a unique public receiving key and migrate existing profiles safely. Add server-authoritative, password-confirmed, idempotent crypto-only transfers with atomic balance and ledger updates, recipient refresh events, detailed auth flows, profile key display, localized transfer UI, and browser mock coverage.
Drive market prices from randomized server intervals with per-market momentum, global trend, mean reversion, bounded shocks, and retained history. Stream authoritative market updates into live holdings, portfolio valuations, and real detail charts while invalidating stale quotes.
Pin Buy and Sell actions to the crypto detail footer, rebuild the trade sheet around protected quote review, and invalidate stale quotes after side or quantity changes. Add localized trading labels without config or SQL migrations.
Move profile identity edits into a secure sheet, add header sign out, persist preferences immediately, and support authenticated password rotation with the existing scrypt provider.
Integrates the weather-app interface refinements while preserving the newer dev Dynamic Island and cross-platform contract tests. Adds the matching German Notes deletion confirmation strings required by the merged locale contract.
Replace the decorative market sparkline with a holdings-weighted profit and loss chart. Anchor the solid history and dashed forecast to the same current-position point and localize the new labels.
Rebuild the portfolio, market, activity, asset-detail, and profile surfaces with a denser premium hierarchy and richer data visualization. Remove manual refresh controls, retain server-authoritative financial flows, and add localized allocation copy plus regression coverage.
Authenticate CityMarkt profiles with the linked iFruit account password, including server-side validation and rate limiting. Update the shared auth UI, localized copy, frontend state, browser mocks, and regression coverage for login and registration flows.
Remove the static vanilla payphone coordinate list so configured prop models are detected directly in the streamed world. Add vector4-based custom locations that spawn the selected custom prop, and validate detected booth models and player proximity server-side.
Register a configurable F1 phone toggle through a server-authoritative open request and retain the selected unique handset by IMEI. Verify usable-item support for every inventory adapter, fail visibly on registration errors, and document the behavior.
Resolve configured and regional locales through a centralized English fallback for Lua and NUI consumers. Complete the German and English app translation keys, localize remaining picker and attachment copy, and add contract tests that detect missing locale entries.
Integrates the current dev branch while preserving the weather-app Dynamic Island alongside the new hardware volume HUD and homescreen editing state. Makes the new Companies contract tests line-ending agnostic so the merged suite passes on Windows checkouts.