# SkateSpots - Decentralized Skate Map & Community [![Edit with Shakespeare](https://shakespeare.diy/badge.svg)](https://shakespeare.diy/clone?url=nostr%3A%2F%2Fnpub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx%2Fgit.shakespeare.diy%2FSkateSpots) A decentralized skateboarding community platform built on Nostr. Discover skate spots, find coaches, join events, and connect with skaters worldwide. ## 🌐 Live App - **Deployed URL**: https://skate-spots.org - **Nostr Git**: nostr://npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx/git.shakespeare.diy/SkateSpots ## ✨ Features - πŸ—ΊοΈ **Interactive Skate Map** - Discover skate spots worldwide with geolocation - πŸ›Ή **Spot Database** - Browse, create, and review skate parks and street spots - πŸ“… **Events Calendar** - Find and create skateboarding events and competitions - πŸ‘¨β€πŸ« **The Lab** - Connect with coaches, filmers, and video editors in your area - 🎬 **Video Editors** - Find editors who list their software, hardware, and portfolio - πŸ›οΈ **Skate Shops** - Discover local skate shops and support the community - πŸ”„ **Buy/Sell Gear** - Marketplace for used skate gear (NIP-99 classified listings) - πŸŽ’ **My Stash** - Private encrypted gear inventory with location tracking - ⚑ **Lightning Zaps** - Send Bitcoin tips to content creators - 🌀️ **Weather Integration** - Check conditions before you skate - πŸ” **Nostr Authentication** - Decentralized login with your Nostr keys - πŸ“± **PWA Support** - Install as a native app on any device - ❀️ **Supporters** - Community funding via Angor (decentralized Bitcoin crowdfunding) ## πŸ› οΈ Technology Stack - **React 18** - Modern UI with hooks and concurrent rendering - **Nostr Protocol** - Decentralized data storage and communication - **TailwindCSS 3** - Utility-first CSS framework - **Vite** - Lightning-fast build tool and dev server - **shadcn/ui** - Beautiful, accessible UI components - **Nostrify** - Nostr framework for web applications - **TanStack Query** - Data fetching and caching - **OpenStreetMap** - Interactive maps - **TypeScript** - Type-safe development ## πŸš€ Getting Started ### Prerequisites - Node.js 18+ - npm or yarn ### Installation ```bash # Clone the repository git clone nostr://npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx/git.shakespeare.diy/SkateSpots # Install dependencies npm install # Start development server npm run dev ``` ### Building ```bash # Build for production npm run build # Run tests npm test ``` ## 🌍 Deployment The app is configured for deployment via: - **Shakespeare Deploy** - Nostr-native deployment (configured) - **Netlify** - Static site hosting - **Vercel** - Edge deployment - **nsite** - Nostr-native sites Deploy command: ```bash npm run deploy ``` ## πŸ“± PWA Installation SkateSpots works as a Progressive Web App (PWA) and can be installed on: - **Desktop**: Chrome, Edge, Safari - Look for install icon in address bar - **Android**: Chrome - "Add to Home Screen" from menu - **iOS**: Safari - "Add to Home Screen" from share menu ## πŸ”Œ Nostr Integration ### Custom Event Kinds This app uses custom Nostr event kinds defined in `NIP.md`: | Kind | Type | Description | |------|------|-------------| | 30017 | Addressable | Skate Shops (NIP-15 Stall) | | 30402 | Addressable | Gear Listings (NIP-99 Classified) | | 30818 | Addressable | Skate Spots | | 30823 | Addressable | Skate Tours | | 31923 | Addressable | Skate Events (NIP-52 Calendar) | | 35001 | Addressable | Skate Coaches | | 35002 | Addressable | Skate Filmers / Photographers | | 35003 | Addressable | Skate Video Editors | ### Relay Configuration Default relay: `wss://relay.skate-spots.org` Users can manage relays in Settings following NIP-65. ## πŸŽ’ My Stash The Stash is a private, encrypted gear inventory (NIP-51 kind 30001). Users can track their equipment with: - **Categories**: Decks, trucks, wheels, bearings, shoes, apparel, protective gear, and more - **Storage locations**: Home, car, backpack, wardrobe, van, skatepark, friend's, parents', warehouse, storage unit, sponsor, or other - **Condition rating** (1–5 stars), rarity tier, and optional price - **Visibility control**: Private (encrypted), friends-only, or public - **Filter & search** by category, storage location, or keyword ## πŸ§ͺ The Lab The Lab connects skaters with service providers in three categories: - **Coaches** - Skateboarding instructors with skill specializations - **Filmers** - Videographers and photographers with equipment/style details - **Video Editors** - Editors who list their software (Premiere, DaVinci, After Effects, etc.), hardware setup, portfolio, and contact details ## πŸ“¦ Dependencies Overview ### Core Dependencies - `@nostrify/nostrify` - Nostr protocol implementation - `@nostrify/react` - React integration for Nostr - `react` & `react-dom` - UI framework - `react-router-dom` - Client-side routing - `@tanstack/react-query` - Data fetching and state - `nostr-tools` - Nostr utilities and cryptography ### UI & Styling - `tailwindcss` - Utility-first CSS - `@radix-ui/*` - Accessible UI primitives - `lucide-react` - Icon library - `class-variance-authority` - Component variants - `tailwind-merge` - Class name merging ### Maps & Location - OpenStreetMap - Interactive maps - `ngeohash` - Geohash encoding/decoding ### Bitcoin & Lightning - `@getalby/sdk` - Alby wallet integration - `@cashu/cashu-ts` - Cashu ecash protocol - `npubcash-sdk` - npub.cash integration - `bitcoinjs-lib` - Bitcoin utilities - `@noble/curves` & `@noble/hashes` - Cryptography ### Media & Streaming - `hls.js` - HLS streaming support - `qrcode` - QR code generation - `html5-qrcode` - QR code scanning ### Utilities - `date-fns` - Date formatting - `zod` - Schema validation - `react-hook-form` - Form handling - `buffer` - Node.js buffer polyfill - `idb` & `dexie` - IndexedDB wrappers ## πŸ—οΈ Project Structure ``` /src β”œβ”€β”€ components/ # React components β”‚ β”œβ”€β”€ ui/ # shadcn/ui components (48+) β”‚ β”œβ”€β”€ auth/ # Authentication components β”‚ └── ... # Feature components β”œβ”€β”€ hooks/ # Custom React hooks β”œβ”€β”€ pages/ # Route pages β”œβ”€β”€ lib/ # Utilities and helpers β”œβ”€β”€ contexts/ # React context providers └── test/ # Testing utilities /public β”œβ”€β”€ images/ # Static images and icons β”œβ”€β”€ manifest.webmanifest └── robots.txt /skills # Implementation guides for features ``` ## πŸ§ͺ Testing ```bash # Run all tests (TypeScript, ESLint, Vitest, Build) npm test # Type checking only npx tsc --noEmit # Linting only npx eslint ``` ## 🀝 Contributing This is a Nostr-based open source project. Contributions are welcome! 1. Fork/clone the repository via Shakespeare or git 2. Create your feature branch 3. Make your changes 4. Run tests (`npm test`) 5. Commit your changes 6. Push and create a pull request ## πŸ“„ License **YOU ARE FREE TO SKATEBOARD** This project is open. Share it, fork it, build on it, skate it. The streets belong to everyone. So does this code. Just keep skating and don't be a kook. Copyright Β© 2025β€“βˆž SkateSpots contributors & the community See `/license` in the app for the full license page. ## ❀️ Support the Project SkateSpots is 100% free, open-source, and community-funded. No ads, no data selling, no investors. - **Angor**: https://angor.io/project/angor1qtunna00uqyx52rr0nvqa059z2gknhrmn7urd6z - **Supporters page**: https://skate-spots.org/supporters ## πŸ™ Credits - **Built with**: [MKStack](https://soapbox.pub/mkstack) - Nostr client framework - **Vibed with**: [Shakespeare](https://shakespeare.diy) - AI-powered development - **Powered by**: [Nostr](https://nostr.com) - Decentralized protocol - **Funded by**: [Angor](https://angor.io/project/angor1qtunna00uqyx52rr0nvqa059z2gknhrmn7urd6z) - Decentralized Bitcoin crowdfunding ## πŸ”— Links - [Live App](https://skate-spots.org) - [Supporters](https://skate-spots.org/supporters) - [Nostr Git Repository](nostr://npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx/git.shakespeare.diy/SkateSpots) - [Edit with Shakespeare](https://shakespeare.diy/clone?url=nostr%3A%2F%2Fnpub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx%2Fgit.shakespeare.diy%2FSkateSpots) ## πŸ“ž Support For issues or questions: - Open an issue on the repository - Contact via Nostr: npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx --- Made with ❀️ for the skateboarding community