SkateSpots - local-first skating map, crews, events and marketplace
Find a file
2026-10-27 20:50:53 +07:00
.agents/skills New project created with Shakespeare 2026-06-15 19:49:07 +07:00
.githooks chore(ops): pre-push/pre-deploy test gate + patch-only deps fallback 2026-10-27 09:23: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
ai-proxy fix(pro): stack Pro proofs + owner-grant fallback 2026-09-28 18:58:25 +07:00
android-templates fix(amber): disable result compression (native) + decode Signer1 fallback 2026-10-13 21:05:29 +07:00
cvm-server feat(relay): retire the legacy hosted relay from the app + servers 2026-10-12 13:06:02 +07:00
eslint-rules Import files from skate-spots project 2026-06-15 20:04:15 +07:00
netlify/functions fix(audit P2 money/auth): invoice amount checks (Pro/fee/pointer), verify embedded zap req, harden NIP-05 proof + Pro grant, sanitize cordn link 2026-10-05 21:32:58 +07:00
packages fix(nfc): add androidx.appcompat to the plugin classpath (Capacitor activity) 2026-10-02 14:24:44 +07:00
public feat(chat): on-device translation pilot (English ↔ Spanish) 2026-10-27 10:49:54 +07:00
push-service feat(relay): retire the legacy hosted relay from the app + servers 2026-10-12 13:06:02 +07:00
scripts feat(community): add the app-wide Cordn room and always-on bot 2026-10-27 17:37:09 +07:00
skills Import files from skate-spots project 2026-06-15 20:04:15 +07:00
src fix(auth): open sign-in above menus and close the burger first 2026-10-27 20:48:04 +07:00
.gitignore feat(community): add the app-wide Cordn room and always-on bot 2026-10-27 17:37:09 +07:00
.gitlab-ci.yml New project created with Shakespeare 2026-06-15 19:49:07 +07:00
.mcp.json security: verify Amber signatures + pin MCP server versions 2026-09-24 19:20:47 +07:00
.npmrc Add .npmrc: map @jsr scope to JSR registry + legacy-peer-deps 2026-07-24 21:26:54 +07:00
.nvmrc chore(ops): ops-health deps status, release --deploy flag, .nvmrc 2026-10-27 09:17:04 +07:00
AGENTS.md docs: record 1.7.4 community room and bot 2026-10-27 17:43:33 +07:00
BOUNTY-SYSTEM-PLAN.md feat(relay): cut over community relay to self-hosted Newlay 2026-10-12 12:38:13 +07:00
BUDGET_IMPLEMENTATION.md Add tour countdown badges + fix/standardize NIP-05 provider prompts 2026-09-09 22:31:44 +07:00
capacitor.config.ts Security polish (audit F5-F6): disable broad allowMixedContent on Android (loopback cleartext stays via network_security_config); document CVM client's intentional fixed data-relay set + IP-disclosure privacy note 2026-09-24 18:15:19 +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
CORDN_UX_AUDIT.md docs(cordn): mark i18n drift + shareable invite done; note unread needs a signed fetch 2026-10-13 19:19:08 +07:00
CREW_CHAT_AUDIT.md refactor(crew-chat): Chat tab is always NIP-17; widen group read window 2026-10-13 18:35:03 +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
ESCROW.md docs(escrow): exact Android test-build steps for on-device verification 2026-09-26 23:19:47 +07:00
eslint.config.js feat(android): native background poller plugin (no Google) - Cordn pattern 2026-10-01 19:51: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 feat(relay): cut over community relay to self-hosted Newlay 2026-10-12 12:38:13 +07:00
GROUP_MESSAGING.md docs: group messaging — what ships (NIP-17) and the upgrade paths (Marmot/Concord/Cordn) 2026-09-26 19:56:58 +07:00
HOW_TO_ENABLE_RELATR.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
IMPLEMENTATION_COMPLETE.md Bump version to 1.4.4 (package.json is source of truth for Android version) 2026-09-09 19:34:30 +07:00
IMPLEMENTATION_PLAN.md Add tour countdown badges + fix/standardize NIP-05 provider prompts 2026-09-09 22:31:44 +07:00
index.html perf: self-host Leaflet CSS+icons (drop unpkg), preconnect relay/blossom 2026-10-12 20:14:34 +07:00
INTEGRATION_BRIEFING.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
LICENSE chore(license): use the canonical AGPL-3.0 verbatim 2026-10-09 17:33:39 +07:00
LIVE_MUSIC_PROPOSAL.md feat(settings,map,docs): polish Relays UI, drop desktop Near Me, remove NoGood Radio 2026-09-26 23:37:32 +07:00
LOGO_USAGE.md Bump version to 1.4.4 (package.json is source of truth for Android version) 2026-09-09 19:34:30 +07:00
MARKETPLACE_FLOW_AUDIT.md feat(marketplace): close the deal from an accepted offer 2026-10-10 15:51:58 +07:00
MCP_SERVER_SPEC.md feat(relay): cut over community relay to self-hosted Newlay 2026-10-12 12:38:13 +07:00
netlify.toml perf: self-host Leaflet CSS+icons (drop unpkg), preconnect relay/blossom 2026-10-12 20:14:34 +07:00
NIP-06-IMPLEMENTATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
NIP.md feat(lab): add Clothing Designer craft (kind 35015) 2026-10-10 19:30:47 +07:00
opencode.json New project created with Shakespeare 2026-06-15 19:49:07 +07:00
package-lock.json release: 1.7.5 2026-10-27 20:50:53 +07:00
package.json release: 1.7.5 2026-10-27 20:50:53 +07:00
postcss.config.js Import files from skate-spots project 2026-06-15 20:04:15 +07:00
README.md feat(relay): cut over community relay to self-hosted Newlay 2026-10-12 12:38:13 +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 release: 1.7.5 2026-10-27 20:50:53 +07:00
SECURITY.md docs(security): add 2026-10-12 audit log; refresh NIP-05 and popup rendering notes 2026-10-12 14:45:11 +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 i18n: lazy-load locales + register 8 new (pt fr de it nl pl ru ko) with fonts 2026-10-07 21:23:39 +07:00
TRUST_SCORE.md docs: record the own-scorer decision as deferred for later revision 2026-10-09 18:57:41 +07:00
tsconfig.json Import files from skate-spots project 2026-06-15 20:04:15 +07:00
UX_AUDIT.md docs: UI/UX audit + fix backlog (60 findings across all areas) 2026-09-26 17:40:25 +07:00
UX_AUDIT_2026-10-09.md fix(ux): URL-addressable marketplace tabs, offers error state, nav reset 2026-10-09 21:04:52 +07:00
vite.config.ts feat(chat): on-device translation pilot (English ↔ Spanish) 2026-10-27 10:49:54 +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 release: 1.6.8 (3-card sign-in, curated deps, AGPL on Zapstore) 2026-10-26 11:27:04 +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
  • ⚡ 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://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

# 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