SkateSpots - local-first skating map, crews, events and marketplace
Find a file
SkateSpots c7be44dfb3 release: 1.6.5 (crew chat fixes)
Messages now appear on send; shared DM decrypt cache stops per-view re-decrypts;
double-send guarded. Bump 1.6.4 -> 1.6.5, APK built + published to Zapstore
(verified on relay.zapstore.dev).
2026-10-13 00:31:07 +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
ai-proxy fix(pro): stack Pro proofs + owner-grant fallback 2026-09-28 18:58:25 +07:00
android-templates Citrine: allow loopback ws:// in WebView so the local relay connects (1.3.5) 2026-09-09 10:47:39 +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 perf: self-host Leaflet CSS+icons (drop unpkg), preconnect relay/blossom 2026-10-12 20:14:34 +07:00
push-service feat(relay): retire the legacy hosted relay from the app + servers 2026-10-12 13:06:02 +07:00
scripts Cordn native: browser probe, group-ref sharing, image messages 2026-10-12 22:42:44 +07:00
skills Import files from skate-spots project 2026-06-15 20:04:15 +07:00
src fix(crew-chat): show sent messages, stop re-decrypting the inbox 2026-10-13 00:21:42 +07:00
.gitignore docs: record /card audit fixes; gitignore native plugin gradle build output 2026-10-02 14:44:22 +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
AGENTS.md release: 1.6.5 (crew chat fixes) 2026-10-13 00:31:07 +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 ux(cordn): reconcile the crew chat card with the MLS tab (+ audit) 2026-10-12 23:41:29 +07:00
CREW_CHAT_AUDIT.md fix(crew-chat): show sent messages, stop re-decrypting the inbox 2026-10-13 00:21:42 +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.6.5 (crew chat fixes) 2026-10-13 00:31:07 +07:00
package.json release: 1.6.5 (crew chat fixes) 2026-10-13 00:31:07 +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.6.5 (crew chat fixes) 2026-10-13 00:31:07 +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 fix(dev): proxy /api/nip05 and /api/ai in the Vite dev server 2026-09-28 19:46:03 +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 Set zapstore.yaml repository to browsable nostrhub.io source URL so Zapstore renders a Source link 2026-09-14 10:25:49 +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