import React, { useState, useEffect, useMemo } from 'react'; import { Search, Filter, Box, Calendar, Tag, ChevronRight, Info, ExternalLink, Grid, List } from 'lucide-react'; // Mock Data - In a real scenario, you would use PapaParse to load your master_metadata.csv const INITIAL_DATA = [ { id: 1, sku: "BA3241-001", name: "RPM Black Anthracite", year: 2012, colorway: "Black/Black", status: "Released", description: "The classic OG RPM with the iconic skateboard straps and 15-inch laptop sleeve.", rarity: "Common" }, { id: 2, sku: "BA3241-200", name: "RPM Iguana Camo", year: 2014, colorway: "Iguana/Black", status: "Released", description: "Heavyweight textured polyester with a classic woodland camo pattern.", rarity: "Uncommon" }, { id: 3, sku: "BA3241-010", name: "RPM Triple Black", year: 2018, colorway: "Black/Black/Black", status: "Released", description: "Water-resistant coating with blacked-out branding for a stealth look.", rarity: "Common" }, { id: 4, sku: "BA3241-601", name: "RPM Solar Red", year: 2015, colorway: "Solar Red/White", status: "Discontinued", description: "A vibrant release from the mid-2010s era of Nike SB design.", rarity: "Rare" }, { id: 5, sku: "BA5971-010", name: "RPM Skate Backpack 2.0", year: 2021, colorway: "Black/White", status: "Active", description: "The updated silhouette with improved shoulder strap ergonomics.", rarity: "Common" }, { id: 6, sku: "BA3241-401", name: "RPM Midnight Navy", year: 2013, colorway: "Navy/Black", status: "Archive", description: "Part of the early RPM catalog, featuring the original zipper pull design.", rarity: "Rare" }, ]; const App = () => { const [searchTerm, setSearchTerm] = useState(''); const [selectedYear, setSelectedYear] = useState('All'); const [viewMode, setViewMode] = useState('grid'); const [selectedItem, setSelectedItem] = useState(null); const years = ['All', ...new Set(INITIAL_DATA.map(item => item.year))].sort((a, b) => b - a); const filteredData = useMemo(() => { return INITIAL_DATA.filter(item => { const matchesSearch = item.name.toLowerCase().includes(searchTerm.toLowerCase()) || item.sku.toLowerCase().includes(searchTerm.toLowerCase()); const matchesYear = selectedYear === 'All' || item.year.toString() === selectedYear; return matchesSearch && matchesYear; }); }, [searchTerm, selectedYear]); return (
{/* Header */}
SB

RPM Master Archive

Digital Museum & Catalog

{/* Search and Filters */}
setSearchTerm(e.target.value)} />
{filteredData.length} ITEMS FOUND
LAST UPDATED: JAN 2026
{/* Catalog Display */} {viewMode === 'grid' ? (
{filteredData.map((item) => (
setSelectedItem(item)} className="group bg-zinc-900/40 border border-zinc-800 p-6 cursor-pointer hover:border-zinc-500 transition-all relative overflow-hidden" >
{item.year}
{/* Using inline SVG to represent the backpack structure */}
{item.rarity}

{item.sku}

{item.name}

{item.colorway}

{item.status}
))}
) : (
{filteredData.map(item => ( setSelectedItem(item)}> ))}
SKU Model Name Year Colorway Status
{item.sku} {item.name} {item.year} {item.colorway} {item.status}
)} {/* Empty State */} {filteredData.length === 0 && (

No Archive Records Found

Try adjusting your search terms or filters.

)}
{/* Item Details Sidebar/Modal */} {selectedItem && (
setSelectedItem(null)}>
{selectedItem.sku}

{selectedItem.name}

RELEASE YEAR

{selectedItem.year}

STATUS

{selectedItem.status}

Historical Context

{selectedItem.description}

Technical Specs

  • Primary Color {selectedItem.colorway.split('/')[0]}
  • Secondary Color {selectedItem.colorway.split('/')[1] || 'N/A'}
  • Rarity Level {selectedItem.rarity}

Internal Tags

{['Backpack', '600D', 'Skateboard Straps', 'Laptop Sleeve', 'Nike SB'].map(tag => ( {tag} ))}
)} {/* Footer */}
); }; export default App;