SkateSpots - local-first skating map, crews, events and marketplace
Find a file
2026-10-28 18:22:47 +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 chore: slim repo assets and refresh README 2026-10-28 13:35:24 +07:00
public feat: show Amber prompt budget; cache service worker headers 2026-10-28 16:51:41 +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: Android back/app links and web app-shell cache 2026-10-28 16:39:07 +07:00
skills Import files from skate-spots project 2026-06-15 20:04:15 +07:00
src feat: global command palette and scroll/layer context 2026-10-28 18:08:45 +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.19 global palette and context 2026-10-28 18:22:47 +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 feat(web): add short /community and /c links 2026-10-27 21:00:39 +07:00
NIP-06-IMPLEMENTATION.md Import files from skate-spots project 2026-06-15 20:04:15 +07:00
NIP.md docs: document the weekly newsletter draft and 1.7.9 2026-10-28 09:51:53 +07:00
opencode.json New project created with Shakespeare 2026-06-15 19:49:07 +07:00
package-lock.json release: 1.7.19 2026-10-28 18:12:19 +07:00
package.json release: 1.7.19 2026-10-28 18:12:19 +07:00
postcss.config.js Import files from skate-spots project 2026-06-15 20:04:15 +07:00
README.md chore: slim repo assets and refresh README 2026-10-28 13:35:24 +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.19 2026-10-28 18:12:19 +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 chore: refresh Zapstore screenshots and listing images 2026-10-28 14:17:40 +07:00

SkateSpots

A local-first skateboarding community app on Nostr: map spots, join crews, find events and coaches, trade gear, and talk privately without a central account.

  • Live: https://skate-spots.org
  • Android: Zapstore / APK (org.skatespots.app)
  • Source: nostr://npub1yrnuj56rnen08zp2h9h7p74ghgjx6ma39spmpj6w9hzxywutevsst7k5cx/git.shakespeare.diy/SkateSpots
  • License: AGPL-3.0-only

Principles

  • Your keys, your identity. No custodial accounts, no uploaded private keys, no Bitcoin custody.
  • Local-first. Public data is cached on-device; private messages are decrypted on-device.
  • Self-hosted where it matters. Community relay, Blossom media, push, AI and CVM services run on our own infrastructure.
  • No tracking, ads or analytics. No third-party scripts, no behavioural profiles, no selling data.
  • Forkable by design. Open protocol, open source, ordinary Nostr events.

Features

  • Map & spots — street, park, transition and plaza pins; photos, conditions, comments and directions.
  • Crews — public crews, membership, roles, events, a crew feed and invites.
  • Private chat — NIP-17 DMs and crew chat; MLS end-to-end encrypted crew chat via Cordn (reactions, replies, read receipts, device linking).
  • The Lab — coaches, filmers, editors, photographers, builders, artists and other skate crafts.
  • Marketplace — NIP-99 listings, offers, barter, reputation and Lightning/cashu payments.
  • Events & tours — calendar events, RSVPs, event updates and spot tours.
  • Stash — encrypted private gear inventory with public want/showcase listings.
  • Translation — on-device message translation for every app language; message text never leaves the device.
  • Newsletter & community — weekly drops, an in-app mailbox and a public Cordn community room.
  • Notifications — in-app bell, Web Push, and local Android notifications; no FCM/Google dependency.

Stack

React 18 · TypeScript · Vite · Tailwind CSS · shadcn/ui · TanStack Query · Nostrify · Leaflet/OpenStreetMap · Capacitor (Android) · Cashu/NWC · ONNX Runtime Web (translation).

Quick start

Requires Node 22 (see .nvmrc) and npm.

npm ci
npm run dev      # http://localhost:8080
npm test         # typecheck + lint + i18n + unit tests + web build

Useful scripts:

Command What it does
npm run build Production web build (dist/)
npm run android:build Signed release APK
npm run android:init / android:sync Generate/sync the Capacitor Android project
npm run translation:matrix Browser translation matrix runner (downloads the model)
npm run newsletter:weekly Generate the weekly newsletter draft
scripts/release.sh patch --yes Test, build APK, publish to Zapstore, commit and tag

Repository map

src/
  components/      shared UI, map, crews, auth, wallet
  pages/           route pages
  hooks/           Nostr queries, live data, wallet
  lib/             protocol helpers, Cordn/MLS, translation, storage
  i18n/            24 lazy-loaded dictionaries
  workers/         on-device translation worker
scripts/           release, deploy, ops, newsletter, watchers
public/            icons, images, ONNX Runtime WASM
netlify/           NIP-05 and AI proxy functions
cvm-server/        ContextVM MCP server (external host)
push-service/      Web Push / native-poll service
packages/          local Capacitor plugins

Releases & infrastructure

  • Web is deployed by scripts/auto-deploy.sh (systemd timer) after the full preflight and production smoke test.
  • Android is built with npm run android:build; versioning comes from package.json; releases go through Zapstore.
  • Community relay wss://relay.skate-spots.org (Newlay + Caddy) also serves Blossom at blossom.skate-spots.org.
  • Push (push.skate-spots.org), AI proxy (ai.skate-spots.org) and CVM run separately; see AGENTS.md.

Documentation

  • AGENTS.md — operational memory: commands, services, gotchas and current state.
  • NIP.md — every custom/adopted Nostr kind and schema.
  • ESCROW.md — Cashu escrow design and device checklist.
  • GROUP_MESSAGING.md — DM/crew chat decisions.
  • TRUST_SCORE.md — trust/reputation model.

Credits

Nostr · Cordn (crew chat) · Cashu · NWC · Amber · BTCMap · Angor · Zapstore · ContextVM · OpenStreetMap. Built by skaters, for skaters.

Support the project through the app’s Supporters page or Angor. No VC, no token, no sponsored placements sold as “community.”