220 lines
6.5 KiB
Markdown
220 lines
6.5 KiB
Markdown
# SkateSpots - Decentralized Skate Map & Community
|
|
|
|
[](https://shakespeare.diy/clone?url=nostr%3A%2F%2Fnpub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx%2Fgit.shakespeare.diy%2Fskate-spots)
|
|
|
|
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.com
|
|
- **Previous URL**: https://skate-spots.shakespeare.wtf (redirects to new domain)
|
|
- **Nostr Git**: nostr://npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx/git.shakespeare.diy/skate-spots
|
|
|
|
## ✨ 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
|
|
- 👨🏫 **Find Coaches** - Connect with skateboarding instructors in your area
|
|
- 🛍️ **Skate Shops** - Discover local skate shops and support the community
|
|
- 🎵 **NoGood Radio** - 24/7 vibing music (lofi, synthwave, electronica)
|
|
- ⚡ **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
|
|
|
|
## 🛠️ 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/skate-spots
|
|
|
|
# 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 30818** - Skate Spots (addressable)
|
|
- **Kind 30819** - Skate Events (addressable)
|
|
- **Kind 30820** - Skate Coaches (addressable)
|
|
- **Kind 30821** - Skate Shops (addressable)
|
|
- **Kind 30822** - Food Spots (addressable)
|
|
|
|
### Relay Configuration
|
|
|
|
Default relay: `wss://goskatespots.nostr1.com`
|
|
|
|
Users can manage relays in Settings following NIP-65.
|
|
|
|
## 📦 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
|
|
- `coco-cashu-*` - Cashu wallet implementation
|
|
- `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
|
|
|
|
MIT License - See LICENSE file for details
|
|
|
|
## 🙏 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
|
|
|
|
## 🔗 Links
|
|
|
|
- [Live App](https://skate-spots.com)
|
|
- [Nostr Git Repository](nostr://npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx/git.shakespeare.diy/skate-spots)
|
|
- [Edit with Shakespeare](https://shakespeare.diy/clone?url=nostr%3A%2F%2Fnpub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx%2Fgit.shakespeare.diy%2Fskate-spots)
|
|
|
|
## 📞 Support
|
|
|
|
For issues or questions:
|
|
- Open an issue on the repository
|
|
- Contact via Nostr: npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx
|
|
|
|
---
|
|
|
|
Made with ❤️ for the skateboarding community
|
|
|