A Point of Sale (POS) demo application showcasing PowerSync's real-time sync and local-first capabilities.
- Node.js 22+
- iOS Simulator (macOS) or Android Emulator
- PowerSync Instance
- MongoDB Database
# Install dependencies
npm install
# iOS
npm run ios
# Android
npm run androidMake sure your PowerSync backend is configured to sync the following collections:
storesproductsordersorder_items
- Verify PowerSync backend is running
- Check database seeding logs
- Ensure
is_active = 1in products table
Run the following script in MongoDB Compass to import demo products.
// Helper function to get random item from array
function randomItem(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
// Update the storeId as needed.
const storeId = '6907a4fe6244fdd259615ea0';
print(`📦 Creating 500 tech products for store ${storeId}...`);
const productNames = [
// Keyboards
'Mechanical Keyboard RGB', 'Wireless Keyboard', 'Gaming Keyboard', 'Ergonomic Keyboard', 'Compact Keyboard', 'Mechanical Keyboard Silent',
'Tenkeyless Keyboard', 'Full-size Keyboard', 'RGB Mechanical Keyboard', 'Mac Keyboard', 'Mechanical Keyboard Blue Switch',
// Graphics Cards
'RTX 4090 Graphics Card', 'RTX 4080 Graphics Card', 'RTX 4070 Graphics Card', 'RX 7900 XTX', 'RX 7800 XT', 'RTX 4060 Ti',
'RTX 3060 Graphics Card', 'RX 6700 XT', 'RTX 3070 Graphics Card', 'RTX 3080 Graphics Card',
// CPUs/Processors
'Intel Core i9-13900K', 'AMD Ryzen 9 7950X', 'Intel Core i7-13700K', 'AMD Ryzen 7 7800X3D', 'Intel Core i5-13600K',
'AMD Ryzen 5 7600X', 'Intel Core i3-13100', 'AMD Ryzen 9 7900X',
// Motherboards
'Z790 ATX Motherboard', 'X670E Motherboard', 'B650 Motherboard', 'H610 Motherboard', 'B550 Motherboard',
'Z690 ATX Motherboard', 'X570 Motherboard', 'AM5 Motherboard',
// RAM/Memory
'32GB DDR5 RAM 5600MHz', '16GB DDR5 RAM 5200MHz', '64GB DDR5 RAM 6000MHz', '32GB DDR4 RAM 3200MHz',
'16GB DDR4 RAM 2666MHz', '64GB DDR4 RAM 3600MHz', '8GB DDR5 RAM 4800MHz',
// Storage - SSDs
'1TB NVMe SSD Gen4', '2TB NVMe SSD Gen4', '500GB NVMe SSD Gen3', '4TB NVMe SSD', '512GB NVMe SSD',
'1TB SATA SSD', '2TB SATA SSD', '4TB SATA SSD',
// Storage - HDDs
'4TB HDD 7200RPM', '8TB HDD 7200RPM', '2TB HDD 5400RPM', '1TB HDD 7200RPM', '16TB HDD Enterprise',
// Monitors
'27" 4K IPS Monitor', '32" 4K Gaming Monitor', '24" 1080p 144Hz Monitor', '27" 1440p 144Hz Monitor',
'34" Ultrawide Monitor', '24" 1080p 75Hz Monitor', '32" 4K OLED Monitor', '27" 1440p 240Hz Monitor',
// Mice
'Wireless Gaming Mouse', 'RGB Gaming Mouse', 'Ergonomic Mouse', 'Trackball Mouse', 'Vertical Mouse',
'Lightweight Gaming Mouse', 'MMO Gaming Mouse', 'Silent Mouse',
// Headphones/Audio
'Wireless Gaming Headset', 'Noise Cancelling Headphones', 'Studio Headphones', 'Gaming Headset RGB',
'True Wireless Earbuds', 'Gaming Earbuds', 'USB Headset', 'Bluetooth Headphones',
// Webcams & Streaming
'4K Webcam', '1080p Webcam', 'Streaming Webcam', 'USB C Webcam', 'HD Webcam with Microphone',
// PSUs
'850W 80+ Gold PSU', '750W 80+ Gold PSU', '1000W 80+ Platinum PSU', '650W 80+ Bronze PSU',
'1200W 80+ Titanium PSU', '500W 80+ Bronze PSU',
// Cases
'ATX Mid Tower Case', 'ATX Full Tower Case', 'Mini ITX Case', 'Micro ATX Case', 'RGB ATX Case',
'Tempered Glass Case', 'Compact ITX Case',
// Cooling
'360mm AIO Liquid Cooler', '240mm AIO Cooler', '120mm AIO Cooler', 'Tower Air Cooler',
'CPU Air Cooler RGB', 'Case Fan RGB 120mm', 'Case Fan RGB 140mm',
// Network
'WiFi 6 Router', 'Gigabit Ethernet Switch', 'WiFi 6E Router', 'Mesh WiFi System',
'Network Adapter PCIe', 'USB WiFi Adapter', 'Ethernet Cable Cat6',
// Peripherals
'USB-C Hub', 'USB Hub 4 Port', 'Laptop Stand', 'Monitor Stand', 'Desk Mat Extended',
'Mouse Pad RGB', 'Wrist Rest', 'Cable Management Kit',
// Laptops
'Gaming Laptop RTX 4070', 'Ultrabook 14"', 'Workstation Laptop', 'Gaming Laptop RTX 4060',
'Business Laptop', '2-in-1 Convertible', 'Thin & Light Laptop',
// Tablets
'12.9" Tablet', '10.9" Tablet', 'Mini Tablet', 'Tablet Keyboard Case', 'Tablet Stylus',
// Smartphones
'Flagship Smartphone 256GB', 'Mid-range Smartphone 128GB', 'Budget Smartphone 64GB',
'Gaming Phone', 'Foldable Phone',
// Speakers
'Desktop Speakers 2.0', 'Gaming Speakers 2.1', 'Bluetooth Speaker', 'USB Speakers',
'Soundbar', 'Wireless Speaker',
// Cables & Adapters
'HDMI 2.1 Cable', 'DisplayPort Cable', 'USB-C to USB-A Cable', 'Thunderbolt 4 Cable',
'USB-C Charging Cable', 'Ethernet Cable', 'VGA to HDMI Adapter',
// Printers & Scanners
'Wireless Printer', 'Laser Printer', 'Inkjet Printer', 'Photo Printer', 'Document Scanner',
// Accessories
'Laptop Cooling Pad', 'USB Drive 256GB', 'USB Drive 512GB', 'External SSD 1TB',
'External HDD 2TB', 'Card Reader', 'Power Bank 20000mAh'
];
const productCategories = [
{ base: 'Keyboard', multiplier: 1.2 },
{ base: 'Graphics Card', multiplier: 2.5 },
{ base: 'CPU', multiplier: 3.0 },
{ base: 'Monitor', multiplier: 1.8 },
{ base: 'Mouse', multiplier: 0.8 },
{ base: 'Headset', multiplier: 1.5 },
{ base: 'SSD', multiplier: 1.0 },
{ base: 'RAM', multiplier: 0.6 },
{ base: 'Motherboard', multiplier: 1.4 },
{ base: 'PSU', multiplier: 1.2 },
{ base: 'Case', multiplier: 0.9 },
{ base: 'Cooler', multiplier: 0.7 },
{ base: 'Laptop', multiplier: 2.0 },
{ base: 'Speaker', multiplier: 1.1 },
{ base: 'Webcam', multiplier: 0.5 },
{ base: 'Router', multiplier: 1.3 },
{ base: 'Tablet', multiplier: 1.6 },
{ base: 'Smartphone', multiplier: 2.2 },
{ base: 'Printer', multiplier: 1.0 },
{ base: 'Accessory', multiplier: 0.4 }
];
const manufacturers = [
'Corsair', 'Logitech', 'Razer', 'SteelSeries', 'ASUS', 'MSI', 'Gigabyte', 'EVGA', 'NVIDIA',
'AMD', 'Intel', 'Samsung', 'Western Digital', 'Crucial', 'Kingston', 'HyperX', 'BenQ',
'LG', 'Dell', 'Acer', 'HP', 'Lenovo', 'Apple', 'Sony', 'Bose', 'JBL', 'Creative',
'AOC', 'ViewSonic', 'Seagate', 'Sabrent', 'G.Skill', 'TeamGroup', 'Noctua', 'be quiet!',
'Cooler Master', 'NZXT', 'Fractal Design', 'Lian Li', 'Thermaltake', 'Phanteks'
];
const products = [];
const now = new Date();
for (let i = 0; i < 500; i++) {
const productName = randomItem(productNames);
const manufacturer = randomItem(manufacturers);
const category = randomItem(productCategories);
// Price based on product category with some variation
const basePrice = category.multiplier * (Math.random() * 500 + 20); // $20-$520 * multiplier
const price = parseFloat(basePrice.toFixed(2));
const stock = Math.floor(Math.random() * 200) + 1;
const isActive = Math.random() > 0.1 ? 1 : 0; // 90% active
// Create a more unique product name by combining manufacturer and product name
const fullProductName = `${manufacturer} ${productName}`;
// Generate SKU with manufacturer prefix
const manufacturerPrefix = manufacturer.substring(0, 3).toUpperCase();
const sku = `${manufacturerPrefix}-${Math.floor(Math.random() * 1000000).toString().padStart(6, '0')}`;
products.push({
created_at: new Date(now - Math.random() * 90 * 24 * 60 * 60 * 1000).toISOString(),
name: fullProductName,
store_id: storeId,
price: price,
image_url: null,
description: `Premium ${productName.toLowerCase()} from ${manufacturer}. High-quality components with excellent performance.`,
sku: sku,
stock: stock,
is_active: isActive
});
}
db.products.insertMany(products);
print(`✅ ${db.products.countDocuments({ store_id: storeId })} products for store ${storeId}`);
Built with ❤️ using PowerSync, React Native, Tamagui, and Expo
