Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Track every Fortnite Sprite across Chapter 7 Season 4
Translation pending
GamesJavaScript · CSSGitHub @mombiemalaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A fan-made Fortnite sprite tracker — track every sprite across all of its
finishes (Normal, Gold, Gummy, Galaxy, Gem, Holofoil, Cube, Quack,
and the Season 4 Cheat Master & Loot Hacker), see your collection
and mastery progress, save it to the cloud, add friends and compare or trade-match
with them, browse the live Item Shop, and look up any player's Battle Royale stats.Read the full README ↗🔗 Live: fnsprites.app
A fan-made Fortnite sprite tracker — track every sprite across all of its finishes (Normal, Gold, Gummy, Galaxy, Gem, Holofoil, Cube, Quack, and the Season 4 Cheat Master, Loot Hacker, Bounty Hunter & Trick-or-Treat), see your collection and mastery progress, save it to the cloud, add friends and compare or trade-match with them, browse the live Item Shop, and look up any player's Battle Royale stats. Current through Chapter 7 Season 4 "Override" (update v42.40, Oct 15 — the Honey & One Wish Willow Sprites) — 280 released variants across two generations: the Season 3 "Runners" roster (kept forever in the Sprite Garden) and the live Override generation (27 Sprites — Sonic, Shadow, Jonesy, Klombo, the Fortnitemares set Vampire / Spooky Dash / The Deer / Dumpster Dive, Morgana & Birthday, the Honey & One Wish Willow wave-2 pair, Crash Bandicoot, Blinky, Pond and more) — in Normal, Gold, Cheat Master, Loot Hacker, Bounty Hunter (live roster-wide Sep 24) & Trick-or-Treat (live Oct 8). Epic confirmed Sprites are kept forever, but a new generation takes over Battle Royale each season: older -gen Sprites are preserved and displayed (Sprite Garden + Collection) rather than used in BR ("may return down the line"), and Sprite Dust & Gizmos reset at the flip. Season 4 also adds Hack the Lobby codes, Loot Hacks (spend Sprite Dust to customise your chest loot), and a social Sprite Garden island. Leaked/ unconfirmed content (upcoming Sprites, unannounced codes, exact event times) is flagged Rumored / Upcoming until confirmed.
Not affiliated with Epic Games. Support the maker with Creator Code: MOMBIE in the Fortnite Item Shop. #EpicPartner
/sprite-garden. (The earlier in-app Community Gallery / Layout
Planner were retired — they saw no real use — leaving the Garden as an in-game feature
the tracker documents rather than reimplements.)/codes page: grouped by reward, per-code copy,
redeemed-tracking, a "new this week" highlight + verified dates, and upcoming
codes shown before their string drops./sprite-garden), Sprite Dust & Loot Hacks (/sprite-dust), Events schedule
(/events) and the Tier list (/tier-list), each with FAQ/HowTo structured data.Release notes — technical, but written for humans, with the reasoning behind the
bigger decisions — live in CHANGELOG.md and in-app via the
Changelog link in the footer (src/data/changelog.js). Keep the two in sync
when shipping.
Sprite art is © Epic Games, Inc., used for identification only. With thanks to:
No game assets beyond the identification sprite images are bundled.
npm install
npm run dev # start dev server
npm run build # production build
npm run lint # lint
The app ships with the project's public Supabase URL + publishable (anon) key
baked into src/lib/supabase.js. Those keys are safe to expose in the client —
all data access is protected by Row Level Security. To point at a different
project, set VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY (see .env).
The Player Stats tab calls a serverless function (api/stats.js, deployed on
Vercel) that forwards to fortnite-api.com with an API
key. Set FORTNITE_API_KEY in the Vercel project's Environment Variables — it is
a server-only var (no VITE_ prefix) so it never reaches the client bundle.
The Item Shop and Cosmetics tabs use fortnite-api.com's free, no-auth endpoints
directly and need no key.
Database schema (applied via migrations):
profiles — one row per user (gamertag, is_public, epic_username,
epic_platform, showcase_sprite_ids, stats_public, discord,
notify_trades, …). Public-readable for
sharing; owner-writable. Shared-link reads go through the get_shared_profile()
security-definer RPC, which returns only public display fields plus the Epic
account only when stats_public is on. Anonymous SELECT on the Epic columns
is revoked at the DB level, so epic_username is never exposed unless the owner
opts into public stats.sprite_progress — (user_id, sprite_id) with owned / mastered flags plus
for_trade / wanted (which power the Friends → Trade matches view — flag a
spare or a want and the matcher pairs you with your friends).
Readable when the owning profile is public (or it's your own); owner-writable.friends — (user_id, friend_id), RLS so you only ever see/manage your own
rows (a one-directional "save to compare" model — no reciprocal consent).trade_vouches, trade_confirmations, trade_reports):
trade_confirmations — (confirmer_id, partner_id); each side marks a completed
trade. Both directions present ⇒ a mutual trade. RLS: involved parties read,
confirmer deletes; inserts go only through trade_confirm(uuid).trade_vouches — (voucher_id, vouchee_id, note). A vouch only records via the
gated vouch_add(uuid, text) RPC (there is no direct-insert policy), which now
requires a mutual trade confirmation (Phase 2 gate), a public target, no self,
and ≤5/24h.trade_reports — (reporter_id, subject_id, reason), private to the reporter
(RLS, no public read); recorded via report_add(uuid, text). Advisory only — never
auto-adjusts reputation.bug_reports — insert-only feedback backup.Key RPCs (all security-definer, public profiles only, so raw collections are never
exposed): leaderboard; my_friends() — your saved friends with the same Flex Score;
friend_trade_matches() — two-way trade matches limited to your friends (gamertag +
discord, they_give, i_give); search_public_profiles(text) — gamertag search to
add friends; find_trade_matches(uuid) — the global (all public players) variant;
sprite_ownership_stats() — privacy-safe aggregate ownership counts. Reputation:
trade_confirm / trade_unconfirm / trade_confirmations_for (trade confirmations),
vouch_add (mutual-trade-gated), vouchers_for(uuid) (credible voucher list), and
trade_reputation_batch(uuid[]) — returns each player's credible-voucher count + tier
(🤝 Trusted / ✅ Verified / ⭐ Top), where Verified/Top require non-mutual vouchers
(collusion capping: reciprocal back-vouches can't inflate the top tiers).
(Some older tables are kept in place, non-destructively but unused by the app: the
legacy trade_posts board (the current Trade tab uses lightweight
for_trade/wanted matching instead of posts) and the old crowd-sourced map —
maps, map_shares, map_markers, map_marker_votes.)
src/data/sprites.js
(sprite_ids are derived as ${typeId}_${themeId}).src/data/themes.js + src/index.css.src/lib/statsApi.js + src/components/StatsTab.jsx;
server-side key proxy api/stats.js (needs FORTNITE_API_KEY env in Vercel).src/data/news.js.src/data/changelog.js.public/sprites/<id>_<variant>.png; Season 4 Override art ships as .webp).
Sprite images are © Epic Games, Inc., used for identification only; base
identities are sourced from UltronCore/sprite-tracker,
and the Season 4 Override roster uses Epic's official datamined icons (Normal,
Gold, Cheat Master & Loot Hacker). Where official art doesn't exist for a finish,
the variant renders are produced through one shared image-to-image pipeline
(Google Gemini) from each sprite's Normal, so a given finish (Gold, Gummy,
Holofoil, Cube…) looks the same material on every sprite rather than drifting
per-sprite. Real-person and licensed collab sprites (e.g. Vini Jr. / Vinícius
Júnior, Pollo) use Epic's official in-game art with the background removed —
never an AI-fabricated likeness. A generated SVG fallback covers any missing image.Lv 3/5 readout. Works instantly as a guest (saved in your
browser) and syncs to the cloud when you log in, with a live save-status
indicator. Bulk quick-add: filter to a theme or rarity and mark the whole
shown set owned in one tap./sprite/<name>, e.g. /sprite/grim-reaper) and an
all-sprites index (/sprites) — static, SEO-friendly pages with drop rate,
Dust cost, chest odds, ability, variants and an FAQ, prerendered at build time
from the same data the app uses (scripts/prerender.mjs), with JSON-LD for
rich search results.for_trade) against a friend's wanted list (and vice-versa) and flags two-way
matches, with their Discord to coordinate. Backed by RLS + security-definer RPCs
(my_friends, friend_trade_matches, search_public_profiles) so a private
friend's collection is never exposed./loot-hacks guide page; refreshed each rotation.sprite_ownership_stats
RPC), baked into the per-Sprite SEO pages too.api/stats.js),
never shipped to the browser. Connect your account: signed-in players can
save their Epic name in their Profile (or via a one-tap "save to profile" on any
result), and the Stats tab then auto-loads their stats on open./events schedule page.
Every item shows
its source and whether it's official (Epic) or unofficial (with a
Tentative badge for unconfirmed dates), and live events pin to the top. A
dismissible announcement bar highlights the current featured event.?u=<your-id>) opens a player profile:
an avatar and up to 6 hand-picked showcase sprites, headline stats, and
earned badges (Completionist, Shiny Hunter, Mythic Owner, Variant Hunter…)
derived on the fly from your progress. Badges also appear on the leaderboard.
Optionally (opt-in in Profile) surface your live Battle Royale stats on the
card too.