- 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.
93 lines
4.6 KiB
Markdown
93 lines
4.6 KiB
Markdown
# 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.”
|