Nostr-native freelancing marketplace (PWA): post jobs, offer services, chat, pay in sats, and build a portable reputation.
- Live: https://satshoot.com
- Jobs & bidding: clients post jobs (RFQs), freelancers bid with fixed or time-based offers.
- Services & orders: freelancers list services; clients can place orders.
- Chat & notifications: Nostr DMs + a service worker for notifications.
- Payments: Lightning zaps (NIP-57) and Cashu ecash wallets (NIP-60 / nutzaps); optional Nostr Wallet Connect (NIP-47).
- Anti-spam: relay selection + outbox model (NIP-65) and Web-of-Trust oriented UX.
SatShoot models freelancing primitives as custom Nostr event kinds:
32765Freelance Service32766Freelance Order32767Freelance Job32768Freelance Bid1986Review967Kind-scoped follow
See EVENT_STRUCTURE.md for the full tag/content schemas.
apps/satshoot: SvelteKit (static adapter) + Vite + TypeScript + Tailwind/Skeleton- Nostr client:
@nostr-dev-kit/ndk(+ndk-sveltehelpers) - Wallet toolkit (vendored):
packages/ndk-wallet(Git submodule, used via workspace dependency)
- Clone with submodules:
git clone --recurse-submodules <repo-url>
- Enable the repo-pinned
pnpm(recommended):corepack enable && corepack prepare pnpm@9.7.0 --activate
- Install dependencies:
pnpm i
- Run the app:
pnpm dev
Useful scripts from the repo root:
- Build:
pnpm build(buildspackages/ndk-walletfirst, then Turbo build) - Preview:
pnpm preview - Tests:
pnpm -r test - Clean reinstall:
just renew
If you use Nix, a dev shell is provided via flake.nix:
nix develop
See CONTRIBUTE.md and CHANGELOG.md.
MIT (see apps/satshoot/LICENSE; packages/ndk-wallet declares MIT in packages/ndk-wallet/package.json).