SkateSpots/README.md
SkateSpots 6407310213 feat(relay): cut over community relay to self-hosted Newlay
Point SKATE_RELAY, the default relay pools, the DM/CVM/zap relay arrays, the cvm-server + push-service defaults, and the archive default at wss://relay.skate-spots.org, keeping the legacy hosted relay as a fallback during the client-update window. Restored 115/115 archived events; the relay runs behind Caddy with TLS. Docs + AGENTS.md updated.
2026-10-12 12:38:13 +07:00

258 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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