Pebbled
January 25, 2026 · View on GitHub
A full-stack application for creating, managing and browsing Pebbled Pebbles. Pebbles are promotional campaigns for Nostr notes that reward engagement and conversations.
The rewards are paid out automatically through NWC connections.
Tech Stack
- Monorepo Management: npm workspaces
- Backend:
- Framework: Fastify
- Language: TypeScript
- ORM: Prisma
- Database: SQLite (for development)
- Nostr:
nostr-tools, NDK - Job Queues: BullMQ
- Frontend:
- Framework: React
- Build Tool: Vite
- Language: TypeScript
- Styling: Tailwind CSS, shadcn/ui
- State Management: Jotai
Project Structure
The project is structured as a monorepo with two main packages:
backend/: The Node.js server application.frontend/: The React client application.
pebbled/
├── backend/ # Fastify API and workers
├── frontend/ # React web client
└── package.json # Root package configuration
Getting Started
Prerequisites
- Bun (v1.1+ recommended for backend)
- Node.js (v18 or later for frontend tooling with npm)
- A running Redis instance (for job queues)
Running Local Dependencies
The project requires a running Redis instance for development. A docker-compose.yml file is provided to easily start one. A local Nostr relay is also provided for local development.
-
Start the services in detached mode:
docker-compose up -dThis will start:
- Redis: Accessible on
localhost:6380 - Nostr Relay: Accessible on
ws://localhost:7777
- Redis: Accessible on
-
To stop the services:
docker-compose down
Installation
- Install dependencies (Bun workspaces):
bun install
Configuration
Create a .env file in the backend directory by copying the .env.example and filling in the required values.
Running the Application
You can run both the frontend and backend concurrently.
-
Run the Backend Server:
bun run dev:backend -
Run the Frontend Development Server:
bun run dev:frontend