SkateSpots - local-first skating map, crews, events and marketplace
Find a file
shakespeare.diy d18b62431e fix: remove broken CORS proxy, call ai.shakespeare.diy directly
proxy.shakespeare.diy was returning NetworkError on all requests.
Direct calls to ai.shakespeare.diy work fine from a real browser.
Kept debug logging to confirm correct URL and pubkey.

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-06-16 22:01:15 +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
cvm-server feat: add SkateSpots CVM server — MCP tools over Nostr 2026-06-16 17:45:04 +07:00
eslint-rules Import files from skate-spots project 2026-06-15 20:04:15 +07:00
public fix: restore full skate-spots source tree from misplaced src/src/ copy 2026-06-15 22:18:28 +07:00
skills Import files from skate-spots project 2026-06-15 20:04:15 +07:00
src fix: remove broken CORS proxy, call ai.shakespeare.diy directly 2026-06-16 22:01:15 +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
netlify.toml chore: add netlify.toml with build config, cache headers, and SPA redirect 2026-06-16 19:56:22 +07:00
NIP-06-IMPLEMENTATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
NIP.md Rider Card: badge system, remove shop card, fix print, better license ID 2026-06-16 14:55:10 +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 card printing: html2canvas renders card to PNG before printing 2026-06-16 15:22:13 +07:00
package.json Fix card printing: html2canvas renders card to PNG before printing 2026-06-16 15:22:13 +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 docs: update README with correct domain, new features, and current custom kinds 2026-06-16 11:24:09 +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

  • 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
  • 🎵 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
  • ❤️ Supporters - Community funding via Geyser (Bitcoin Lightning)

🛠️ 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/SkateSpots

# 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 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://goskatespots.nostr1.com

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

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

🙏 Credits

  • Built with: MKStack - Nostr client framework
  • Vibed with: Shakespeare - AI-powered development
  • Powered by: Nostr - Decentralized protocol
  • Funded by: Geyser - Bitcoin Lightning crowdfunding

📞 Support

For issues or questions:

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

Made with ❤️ for the skateboarding community