SkateSpots/README.md
SkateSpots e00a382c36 chore: slim repo assets and refresh README
- Drop tracked Android build intermediates (already gitignored; regenerated by Gradle).
- Remove unused sticker-design.png; recompress logo, cover and guide images.
- Replace the stale README with a concise current project guide.
2026-10-28 13:35:24 +07:00

93 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.
```bash
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
```text
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`](AGENTS.md) — operational memory: commands, services, gotchas and current state.
- [`NIP.md`](NIP.md) — every custom/adopted Nostr kind and schema.
- [`ESCROW.md`](ESCROW.md) — Cashu escrow design and device checklist.
- [`GROUP_MESSAGING.md`](GROUP_MESSAGING.md) — DM/crew chat decisions.
- [`TRUST_SCORE.md`](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.”