SkateSpots - local-first skating map, crews, events and marketplace
Find a file
2026-09-03 21:30:56 +07:00
.agents/skills New project created with Shakespeare 2026-06-15 19:49:07 +07:00
.github feat: update zapstore.yaml for local publish workflow with nostr git 2026-06-18 19:57:07 +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 Fix CVM relay URL: relay.contextvm.net → relay.contextvm.org 2026-06-18 11:13:51 +07:00
eslint-rules Import files from skate-spots project 2026-06-15 20:04:15 +07:00
public Replace app logo with new orange starburst emblem across all contexts 2026-08-27 11:27:02 +07:00
scripts v1.2.0: Spedn label, multi-relay community stats, GrapheneOS Near-Me fix 2026-08-27 14:54:00 +07:00
skills Import files from skate-spots project 2026-06-15 20:04:15 +07:00
src Fix ESLint gate: scope ignores to app source (exclude android/.agents/cvm-server/public html/scripts), add index.html title, downgrade unused-vars & no-explicit-any to warnings, fix real lint errors (SkateGlobe unused-expr, EventsPage prefer-const, LicensePage Infinity shadow, useless-escape in SasquatchGuide/RiderCardPage, stale eslint-disable directives) 2026-09-03 21:30:56 +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
.npmrc Add .npmrc: map @jsr scope to JSR registry + legacy-peer-deps 2026-07-24 21:26:54 +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
capacitor.config.ts fix: splash screen + ErrorBoundary dark bg for Capacitor APK white screen 2026-06-18 21:27:34 +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 Fix ESLint gate: scope ignores to app source (exclude android/.agents/cvm-server/public html/scripts), add index.html title, downgrade unused-vars & no-explicit-any to warnings, fix real lint errors (SkateGlobe unused-expr, EventsPage prefer-const, LicensePage Infinity shadow, useless-escape in SasquatchGuide/RiderCardPage, stale eslint-disable directives) 2026-09-03 21:30:56 +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 Fix ESLint gate: scope ignores to app source (exclude android/.agents/cvm-server/public html/scripts), add index.html title, downgrade unused-vars & no-explicit-any to warnings, fix real lint errors (SkateGlobe unused-expr, EventsPage prefer-const, LicensePage Infinity shadow, useless-escape in SasquatchGuide/RiderCardPage, stale eslint-disable directives) 2026-09-03 21:30:56 +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 Add SECURITY.md for auditors + align netlify.toml CSP with public/_headers 2026-08-16 22:20:47 +07:00
NIP-06-IMPLEMENTATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
NIP.md Add Nostr-native newsletter: subscribe, mailbox & notifications 2026-09-03 19:16:49 +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 Add @capacitor/cli and @capacitor/android for native Android builds 2026-07-25 13:23:32 +07:00
package.json Bump version to 1.2.4 and update release notes (Amber signing hardening, upload fallbacks, URL sanitizing) 2026-09-03 20:48:07 +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 feat: replace Geyser with Angor across the entire app 2026-07-30 13:23:55 +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
release-notes.txt Bump version to 1.2.4 and update release notes (Amber signing hardening, upload fallbacks, URL sanitizing) 2026-09-03 20:48:07 +07:00
SECURITY.md Extend admin takedown to Lab profiles and gear/marketplace listings 2026-08-18 19:17:16 +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 Improve mobile/Android UI responsiveness 2026-06-17 22:04:29 +07:00
tsconfig.json Import files from skate-spots project 2026-06-15 20:04:15 +07:00
vite.config.ts Fix vendor-react chunk crash: keep React core with react-dom 2026-08-27 12:50:53 +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 SECURITY: remove committed nsec from ZAPSTORE.md 2026-07-25 13:31:09 +07:00
zapstore.yaml Fix Amber NIP-44 gate on Stash, mobile Crew detail layout, remove Quick Snap 2026-08-27 12:31:34 +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 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

# 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: Angor - Decentralized Bitcoin crowdfunding

📞 Support

For issues or questions:

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

Made with ❤️ for the skateboarding community