SkateSpots - local-first skating map, crews, events and marketplace
Find a file
shakespeare.diy 93e607ea1f fix: upgrade react-day-picker to v9 to resolve date-fns v4 peer dep conflict
react-day-picker@8 requires date-fns@^2||^3, which conflicts with the
project's date-fns@^4.1.0. react-day-picker@9 dropped the date-fns peer
dependency entirely (bundles its own date helpers), so `npm i` now resolves
cleanly without --legacy-peer-deps.

- package.json: ^8.10.1 → ^9.0.0
- package-lock.json: updated version/resolved/integrity/peerDependencies
  for node_modules/react-day-picker to 9.14.0

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-06-15 21:42:42 +07:00
.agents/skills New project created with Shakespeare 2026-06-15 19:49:07 +07:00
.github Import files from skate-spots project 2026-06-15 20:04:15 +07:00
.nsite Import files from skate-spots project 2026-06-15 20:04:15 +07:00
.vscode Import files from skate-spots project 2026-06-15 20:04:15 +07:00
eslint-rules Import files from skate-spots project 2026-06-15 20:04:15 +07:00
public Import files from skate-spots project 2026-06-15 20:04:15 +07:00
skills Import files from skate-spots project 2026-06-15 20:04:15 +07:00
src fix: resolve Zod compatibility issue 2026-06-15 21:26:53 +07:00
.gitignore Import files from skate-spots project 2026-06-15 20:04:15 +07:00
.gitlab-ci.yml New project created with Shakespeare 2026-06-15 19:49:07 +07:00
.mcp.json New project created with Shakespeare 2026-06-15 19:49:07 +07:00
AGENTS.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
BOUNTY-SYSTEM-PLAN.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
BUDGET_IMPLEMENTATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
components.json Import files from skate-spots project 2026-06-15 20:04:15 +07:00
CONTEXTVM_INTEGRATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
DEPLOYMENT_COMPARISON.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
EMERGENCY_FIX.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
eslint.config.js Import files from skate-spots project 2026-06-15 20:04:15 +07:00
FINAL_POLISH_BREAKDOWN.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
FINAL_SCOPE.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
FIXES_BREAKDOWN.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
FOLLOW_MANAGEMENT_BRIEFING.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
HOW_TO_ENABLE_RELATR.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
IMPLEMENTATION_COMPLETE.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
IMPLEMENTATION_PLAN.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
index.html Import files from skate-spots project 2026-06-15 20:04:15 +07:00
INTEGRATION_BRIEFING.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
LIVE_MUSIC_PROPOSAL.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
LOGO_USAGE.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
MCP_SERVER_SPEC.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
NIP-06-IMPLEMENTATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
NIP.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
NOGOOD_RADIO_PROPOSAL.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
opencode.json New project created with Shakespeare 2026-06-15 19:49:07 +07:00
package-lock.json fix: upgrade react-day-picker to v9 to resolve date-fns v4 peer dep conflict 2026-06-15 21:42:42 +07:00
package.json fix: upgrade react-day-picker to v9 to resolve date-fns v4 peer dep conflict 2026-06-15 21:42:42 +07:00
postcss.config.js Import files from skate-spots project 2026-06-15 20:04:15 +07:00
RADIO_PLAYER_GUIDE.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
README.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
RELATR_INTEGRATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
RELAY_FIX.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
RELAY_SETUP.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
SHOP_VERIFICATION_ANALYSIS.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
stack.json Import files from skate-spots project 2026-06-15 20:04:15 +07:00
tailwind.config.ts Import files from skate-spots project 2026-06-15 20:04:15 +07:00
tsconfig.json Import files from skate-spots project 2026-06-15 20:04:15 +07:00
vite.config.ts Import files from skate-spots project 2026-06-15 20:04:15 +07:00
WEATHER_FEATURE.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
ZAP_INTEGRATION_PROPOSAL.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
ZAP_QUICK_WINS.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
ZAP_SIMPLE_PLAN.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
ZAPSTORE.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00

SkateSpots - Decentralized Skate Map & Community

Edit with Shakespeare

A decentralized skateboarding community platform built on Nostr. Discover skate spots, find coaches, join events, and connect with skaters worldwide.

🌐 Live App

✨ 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

# Clone the repository
git clone nostr://npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx/git.shakespeare.diy/skate-spots

# Install dependencies
npm install

# Start development server
npm run dev

Building

# 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:

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

# 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 - Nostr client framework
  • Vibed with: Shakespeare - AI-powered development
  • Powered by: Nostr - Decentralized protocol

📞 Support

For issues or questions:

  • Open an issue on the repository
  • Contact via Nostr: npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx

Made with ❤️ for the skateboarding community