Skip to content

psam21/NostrForNomads

Repository files navigation

Nostr for Nomads

The Decentralized Super-App for Digital Nomads

Your Identity. Your Network. Your Income. Your Data.

A sovereign platform built on the Nostr protocol and Bitcoin Lightning Network, enabling 35 million digital nomads worldwide to connect, work, travel, and tradeβ€”without platform middlemen extracting 15-30% of your income.

🌐 Live at nostr.co.in


🎯 Mission

End platform extraction. Enable true digital sovereignty.

For 15 years, digital nomads have been promised "location independence"β€”but platforms like Airbnb, Upwork, and Instagram extract billions in fees, control your reach with algorithms, and can ban you overnight.

Nostr for Nomads changes that:

  • βœ… You own your identity (cryptographic keys, not platform username)
  • βœ… You own your network (portable followers, not captive audience)
  • βœ… You own your income (0% fees, peer-to-peer payments via Lightning)
  • βœ… You own your data (encrypted, not harvested for ads)

Built on battle-tested protocols (Nostr + Bitcoin), not venture-backed extraction machines.


πŸ“Š Market

  • 35 million digital nomads globally (growing 20% annually β†’ 60M by 2030)
  • $1.2 trillion annual economy ($200B+ in platform fees extracted yearly)
  • 50+ countries offering digital nomad visas (governments competing for talent)
  • Perfect timing: Remote work normalized, platform trust collapsing, Bitcoin maturing

We're building the infrastructure for what comes after platforms.


🌟 Features

βœ… Live in Production (Available Now)

Core Identity & Communication

  • πŸ” Sovereign Identity - NIP-05 verification, Lightning address, browser extension support (Alby, nos2x)
  • πŸ’¬ Private Messaging - NIP-17 gift-wrapped encryption (double-encrypted, E2E secure)
  • πŸ‘€ Profile Management - Custom avatars/banners via Blossom, full CRUD control

The Nomad Tools

  • πŸ“ Contributions (Share Your Journey)

    • Travel stories, location guides, cultural insights
    • 13 nomad categories Γ— 195 countries coverage
    • Rich media support (images, video, audio)
    • NIP-33 parameterized replaceable events (fully editable)
  • πŸ” Explore (Discover Community Knowledge)

    • Real-time queries across 8 global relays
    • Filter by region, category, tags
    • Media galleries with full metadata
  • πŸ›οΈ Marketplace (Commerce Without Middlemen)

    • List products/services with 0% commission
    • 10 categories: Art, Services, Hardware, Software, Education, etc.
    • Multi-media listings (5 attachments per product)
    • Full shop management (My Shop dashboard)

Technical Features

  • NIP-09 deletion events (true content control)
  • Blossom protocol media storage (NIP-96)
  • Multi-relay redundancy (censorship-resistant)
  • Encrypted cache with 30-day TTL

The Work Platform

  • πŸ’Ό Work Marketplace (Live in Production)
    • Post freelance opportunities with 0% commission
    • 10+ categories: Development, Design, Marketing, Writing, Consulting
    • Multi-media job listings (images, videos, audio)
    • Full CRUD operations (My Work dashboard)
    • Remote-first, location-flexible opportunities

Meetups & Events

  • 🀝 Meet (Live in Production)
    • Organize local meetups and events with 0% commission
    • 6 types: Social Gathering, Workshop, Conference, Networking, Casual, Other
    • Virtual and in-person events with RSVP tracking
    • Full CRUD operations with generic edit architecture (My Meet dashboard)
    • NIP-52 calendar events (Kind 31923 + 31925) for time-based discovery
    • Single hero image per event (intentional design matching industry standards)
    • Statistics dashboard: Total/Upcoming/Past/RSVPs with reusable components
    • RSVP management with accepted/declined/tentative status

πŸš€ Coming Soon (6-12 Months)

  • πŸ’° Work Escrow - Lightning-based escrow for safe payments
  • 🀝 Meetups - Location-based events with RSVP and Lightning deposits
  • ✈️ Travel Tools - P2P accommodation booking, visa crowdsourcing
  • πŸ’° Payments Hub - Lightning wallet integration, invoicing, multi-currency
  • ⚑ Zaps - Lightning tips for creators (NIP-57)
  • πŸ›’ Shopping Cart - Multi-vendor cart with NIP-78 storage (service layer complete)
  • πŸ“± Mobile Apps - Native iOS & Android

πŸ—οΈ Tech Stack

Frontend

  • Next.js 15.4.6 - React framework with App Router
  • React 18 - UI library with hooks and client components
  • TypeScript 5.5.4 - Type-safe development
  • Tailwind CSS 3.x - Utility-first styling with @tailwindcss/typography
  • Lucide React - Modern icon library
  • Framer Motion - Animation library

Nostr Integration

  • nostr-tools 2.17.0 - Nostr protocol implementation (NIPs 01, 05, 07, 17, 19, 23, 33, 44)
  • WebSocket - Real-time relay connections to 8 high-reliability relays
  • Blossom Client SDK 4.1.0 - Decentralized media protocol (NIP-96)

State Management

  • Zustand 5.0.8 - Lightweight state management
  • React Hooks - Local component state
  • IndexedDB (idb 8.0.3) - Client-side data persistence

Rich Text & Communication

  • Tiptap 3.6.2 - Extensible rich text editor with extensions:
    • Character count, color, highlight, links
    • Tables, task lists, text alignment
    • Subscript, superscript, YouTube embeds
  • Tiptap Markdown - Markdown conversion support
  • React Markdown - Markdown rendering with remark-gfm

Media & File Handling

  • Blossom Protocol - Decentralized media storage (NIP-96)
  • React Easy Crop 5.5.3 - Image cropping and editing
  • Multi-file progress tracking - Batch upload management

Development Tools

  • ESLint 8.57 - Code linting with TypeScript support
  • Prettier 3.3 - Code formatting
  • PostCSS - CSS processing with Autoprefixer
  • Vercel Analytics 1.5.0 - Performance monitoring
  • Upstash Redis 1.35.6 - Edge-compatible caching

πŸ›οΈ Architecture

Service-Oriented Architecture (SOA)

The application follows a layered Service-Oriented Architecture with clear separation of concerns:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     PRESENTATION LAYER                   β”‚
β”‚  (Pages, Components, Hooks - User Interface)            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   BUSINESS LOGIC LAYER                   β”‚
β”‚         (Business Services - Domain Logic)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     CORE SERVICES LAYER                  β”‚
β”‚   (Infrastructure Services - Technical Capabilities)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   PROTOCOL/DATA LAYER                    β”‚
β”‚      (Nostr Services, External APIs, Storage)            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Layer Breakdown

1. Presentation Layer (/src/app, /src/components, /src/hooks)

  • Responsibility: User interface, routing, user interactions
  • Components:
    • Pages (Next.js App Router)
    • Reusable UI components (primitives, pages, auth)
    • Custom React hooks for state and side effects
  • Key Principle: Presentation components are thin and delegate business logic to services

2. Business Logic Layer (/src/services/business)

Encapsulates domain-specific business rules and workflows (15 services):

  • AuthBusinessService: Authentication flows, key management, sign-up/sign-in
  • MessagingBusinessService: Message composition, threading, NIP-17/NIP-44 encryption
  • MessageCacheService: Message caching with 30-day TTL and adaptive sync
  • ProfileBusinessService: Profile management, validation, NIP-05 verification
  • MediaBusinessService: Media upload orchestration, Blossom integration
  • ContributionService: Contribution creation, validation, and publishing
  • ContributionUpdateService: Update service for editing contributions
  • ContributionValidationService: Field-level validation for contributions
  • ContributionContentService: Content provider interface for contributions
  • ShopService: Product marketplace logic, multi-attachment management
  • ProductValidationService: Field-level validation for products
  • ShopContentService: Content provider interface for shop products
  • WorkService: Work opportunity posting and discovery orchestration
  • WorkUpdateService: Update service for editing work opportunities
  • WorkValidationService: Field-level validation for work opportunities
  • WorkContentService: Content provider interface for work opportunities
  • MeetService: Meetup creation, update (updateMeetup()), and deletion logic
  • MeetValidationService: Field-level validation for meetups
  • MeetContentService: Content provider interface for meetups
  • ContentDetailService: Generic content detail provider pattern

Key Characteristics:

  • Contains domain logic (e.g., "how to create a user profile")
  • Orchestrates multiple core services
  • Validates business rules
  • Independent of UI frameworks

3. Core Services Layer (/src/services/core)

Provides technical infrastructure capabilities (5 services):

  • EventLoggingService: System event tracking and logging
  • KVService: Key-value storage abstraction
  • LoggingService: Application-wide logging
  • ProfileCacheService: Profile data caching
  • CacheEncryptionService: Encrypted cache management

Key Characteristics:

  • Framework-agnostic utilities
  • Reusable across different features
  • Technical concerns (logging, caching, storage)
  • No business domain knowledge

4. Protocol/Data Layer (/src/services/nostr, /src/services/generic)

Handles external protocols and data sources (11 services):

  • NostrEventService: Nostr event creation and formatting (Kind 0, 1, 5, 14, 1059, 24242, 30023, 30078, 31923, 31925)
  • GenericEventService: Generic NIP-23/NIP-33/NIP-52 event building
  • GenericRelayService: WebSocket relay management (8 high-reliability relays)
  • GenericBlossomService: Blossom media protocol (NIP-96)
  • GenericMediaService: Media upload and management
  • GenericAuthService: Cryptographic authentication
  • GenericContributionService: Fetches and parses contribution events from Nostr relays
  • GenericShopService: Product event parsing with NIP-94 imeta tag support
  • GenericWorkService: Work opportunity event queries and parsing
  • GenericMeetService: Meetup/event queries and parsing (NIP-52 calendar events)
  • EncryptionService: NIP-44 encrypted messaging
  • WorkContentService: Work content detail provider

Key Characteristics:

  • Direct protocol implementation
  • Network communication
  • Data persistence
  • External API integration

πŸ” Service Segregation Principles

1. Separation of Concerns

Each service has a single, well-defined responsibility:

// ❌ BAD: Mixed concerns
class MessageService {
  sendMessage() { /* business logic + Nostr protocol + UI updates */ }
}

// βœ… GOOD: Separated concerns
class MessagingBusinessService {
  async sendMessage(content: string) {
    // Business logic only
    const validated = this.validateMessage(content);
    const encrypted = await this.encryptionService.encrypt(validated);
    return this.nostrService.publishEvent(encrypted);
  }
}

2. Dependency Injection

Services depend on abstractions, not concrete implementations:

// Business service depends on core service interface
class MessagingBusinessService {
  constructor(
    private nostrService: GenericNostrService,
    private encryptionService: EncryptionService,
    private cacheService: MessageCacheService
  ) {}
}

Layered Dependencies

Strict dependency rules:

  • Presentation β†’ Business Logic β†’ Core Services β†’ Protocol Layer
  • Never reverse direction (e.g., Core cannot depend on Business)
  • Horizontal communication within same layer is allowed
Page Component
    ↓ uses
MessagingBusinessService
    ↓ uses
GenericNostrService + EncryptionService
    ↓ uses
WebSocket API / Crypto API

4. Service Isolation

Each service is independently testable and replaceable:

// Can mock dependencies for testing
const mockNostrService = { publishEvent: jest.fn() };
const messagingService = new MessagingBusinessService(mockNostrService);

// Can swap implementations without changing consumers
const realNostrService = new GenericNostrService();
const prodMessagingService = new MessagingBusinessService(realNostrService);

5. State Management Segregation

  • Zustand stores (/src/stores): Global application state (auth, UI)
  • Service state: Internal service state (connection pools, caches)
  • Component state: Local UI state (forms, toggles)
// Global auth state
useAuthStore() // Zustand

// Service manages its own connection state
GenericRelayService.relayConnections // Internal

// Component manages UI state
const [isOpen, setIsOpen] = useState(false) // Local

πŸ“ Directory Structure

/src
β”œβ”€β”€ app/                    # Next.js App Router pages
β”‚   β”œβ”€β”€ api/               # API routes (event logging)
β”‚   β”œβ”€β”€ my-contributions/  # User's contributions management
β”‚   β”‚   β”œβ”€β”€ create/        # Create new contribution
β”‚   β”œβ”€β”€ explore/           # Discover content and communities
β”‚   β”œβ”€β”€ work/              # Work marketplace page
β”‚   β”œβ”€β”€ meetups/           # Local meetup organizer
β”‚   β”œβ”€β”€ messages/          # Messaging page
β”‚   β”œβ”€β”€ meetings/          # Video meetings page
β”‚   β”œβ”€β”€ payments/          # Payment management page
β”‚   β”œβ”€β”€ profile/           # User profile page
β”‚   β”œβ”€β”€ shop/              # Shopping marketplace page
β”‚   β”œβ”€β”€ travel/            # Travel booking page
β”‚   β”œβ”€β”€ work/              # Job board page
β”‚   β”œβ”€β”€ signin/            # Authentication page
β”‚   β”œβ”€β”€ signup/            # Registration page
β”‚   β”œβ”€β”€ user-event-log/    # Event logging dashboard
β”‚   └── layout.tsx         # Root layout
β”‚
β”œβ”€β”€ components/            # React components
β”‚   β”œβ”€β”€ auth/             # Authentication UI (flows, steps, signer)
β”‚   β”œβ”€β”€ generic/          # Reusable components (layouts, dialogs)
β”‚   β”œβ”€β”€ meetings/         # Meeting components (dashboard, URL creator)
β”‚   β”œβ”€β”€ pages/            # Feature-specific components (messages, events)
β”‚   β”œβ”€β”€ primitives/       # Base UI primitives (skeleton, ratings, stats)
β”‚   β”œβ”€β”€ profile/          # Profile-specific UI (image upload, cropper)
β”‚   β”œβ”€β”€ ui/               # Common UI elements (rich text, markdown)
β”‚   β”œβ”€β”€ Header.tsx        # Global header navigation
β”‚   └── Footer.tsx        # Global footer
β”‚
β”œβ”€β”€ hooks/                # Custom React hooks
β”‚   β”œβ”€β”€ useAuthHydration.ts
β”‚   β”œβ”€β”€ useConsentDialog.ts
β”‚   β”œβ”€β”€ useConversations.ts
β”‚   β”œβ”€β”€ useMediaUpload.ts
β”‚   β”œβ”€β”€ useMessages.ts
β”‚   β”œβ”€β”€ useMessageSending.ts
β”‚   β”œβ”€β”€ useNostrSigner.ts
β”‚   β”œβ”€β”€ useNostrSignIn.ts
β”‚   β”œβ”€β”€ useNostrSignUp.ts
β”‚   └── useUserProfile.ts
β”‚
β”œβ”€β”€ services/             # Service layer (SOA)
β”‚   β”œβ”€β”€ business/         # Business logic services
β”‚   β”‚   β”œβ”€β”€ AuthBusinessService.ts
β”‚   β”‚   β”œβ”€β”€ MessagingBusinessService.ts
β”‚   β”‚   β”œβ”€β”€ ProfileBusinessService.ts
β”‚   β”‚   β”œβ”€β”€ MediaBusinessService.ts
β”‚   β”‚   β”œβ”€β”€ MessageCacheService.ts
β”‚   β”‚   β”œβ”€β”€ ContributionService.ts
β”‚   β”‚   β”œβ”€β”€ ContributionValidationService.ts
β”‚   β”‚   β”œβ”€β”€ ContributionContentService.ts
β”‚   β”‚   β”œβ”€β”€ ShopBusinessService.ts
β”‚   β”‚   └── WorkService.ts
β”‚   β”‚
β”‚   β”œβ”€β”€ core/             # Infrastructure services
β”‚   β”‚   β”œβ”€β”€ EventLoggingService.ts
β”‚   β”‚   β”œβ”€β”€ KVService.ts
β”‚   β”‚   β”œβ”€β”€ LoggingService.ts
β”‚   β”‚   β”œβ”€β”€ ProfileCacheService.ts
β”‚   β”‚   └── CacheEncryptionService.ts
β”‚   β”‚
β”‚   β”œβ”€β”€ generic/          # Generic utilities
β”‚   β”‚   β”œβ”€β”€ GenericAuthService.ts
β”‚   β”‚   β”œβ”€β”€ GenericBlossomService.ts
β”‚   β”‚   β”œβ”€β”€ GenericEventService.ts
β”‚   β”‚   β”œβ”€β”€ GenericContributionService.ts
β”‚   β”‚   β”œβ”€β”€ GenericShopService.ts
β”‚   β”‚   β”œβ”€β”€ GenericWorkService.ts
β”‚   β”‚   β”œβ”€β”€ GenericMediaService.ts
β”‚   β”‚   β”œβ”€β”€ GenericRelayService.ts
β”‚   β”‚   β”œβ”€β”€ EncryptionService.ts
β”‚   β”‚   └── MultiFileProgressTracker.ts
β”‚   β”‚
β”‚   └── nostr/            # Nostr protocol services
β”‚       β”œβ”€β”€ NostrEventService.ts
β”‚       β”œβ”€β”€ WorkValidationService.ts
β”‚       └── WorkContentService.ts
β”‚
β”œβ”€β”€ stores/               # Zustand state management
β”‚   └── useAuthStore.ts   # Global auth state
β”‚
β”œβ”€β”€ types/                # TypeScript type definitions
β”‚   β”œβ”€β”€ attachments.ts
β”‚   β”œβ”€β”€ messaging.ts
β”‚   └── nostr.ts
β”‚
β”œβ”€β”€ utils/                # Utility functions
β”‚   β”œβ”€β”€ keyManagement.ts
β”‚   β”œβ”€β”€ keyExport.ts
β”‚   β”œβ”€β”€ signerFactory.ts
β”‚   β”œβ”€β”€ profileValidation.ts
β”‚   β”œβ”€β”€ nip05.ts
β”‚   └── tagFilter.ts
β”‚
β”œβ”€β”€ config/               # Configuration files
β”‚   β”œβ”€β”€ relays.ts
β”‚   β”œβ”€β”€ blossom.ts
β”‚   └── media.ts
β”‚
β”œβ”€β”€ errors/               # Error handling
β”‚   β”œβ”€β”€ AppError.ts
β”‚   └── ErrorTypes.ts
β”‚
└── styles/               # Global styles
    β”œβ”€β”€ globals.css
    └── tiptap.css

πŸ”„ Data Flow Example: Sending a Message

Demonstrates how SOA layers interact:

// 1. USER INTERACTION (Presentation Layer)
// Component: MessageComposer.tsx
const handleSend = async () => {
  await messagingBusinessService.sendMessage(content, recipientPubkey);
}

// 2. BUSINESS LOGIC (Business Layer)
// MessagingBusinessService.ts
async sendMessage(content: string, recipient: string) {
  // Validate business rules
  if (!this.validateRecipient(recipient)) throw new Error();
  
  // Orchestrate core services
  const encrypted = await this.encryptionService.encrypt(content, recipient);
  const event = await this.eventService.createDirectMessage(encrypted);
  
  // Publish via protocol layer
  await this.nostrService.publishEvent(event);
  
  // Update cache
  await this.cacheService.cacheMessage(event);
  
  return event;
}

// 3. CORE SERVICES (Core Layer)
// EncryptionService.ts
async encrypt(plaintext: string, pubkey: string) {
  // NIP-04 encryption logic
  return await nip04.encrypt(this.privateKey, pubkey, plaintext);
}

// 4. PROTOCOL LAYER (Data Layer)
// GenericNostrService.ts
async publishEvent(event: NostrEvent) {
  // Send to all connected relays
  for (const relay of this.relays) {
    await relay.publish(event);
  }
}

πŸ’Ό Business Model

Phase 1: Growth (Current - 12 Months)

  • 100% FREE - No subscriptions, no transaction fees, no ads
  • Focus: Reach 100,000 active users (critical mass for network effects)

Phase 2: Freemium (12-24 Months)

  • Free Tier: All core features, 5 shop listings, 10 contributions
  • Creator Tier: 10,000 sats/month (~$10) - Unlimited listings, analytics, featured placement
  • Pro Tier: 50,000 sats/month (~$50) - Verified badge, custom domain, API access

Phase 3: Platform Services (24+ Months)

  • Featured listings, promoted content, event promotion
  • Partnership revenue (coworking spaces, travel services, nomad visas)
  • Enterprise white-label deployments

Path to $10M ARR: 100K users Γ— 5% paid Γ— $100/year avg = $500K ARR (Year 1) β†’ $10M+ (Year 3)


πŸ“„ Documentation


πŸš€ Getting Started

For Users

Try it now: nostr.co.in

  1. Sign in with browser extension (Alby, nos2x) OR generate new keys
  2. Complete your profile (add Lightning address for payments)
  3. Start exploring contributions or list your first product

Sign-up takes 30 seconds. No email. No KYC. Just keys.

For Developers

Prerequisites

  • Node.js 18+
  • npm or yarn

Installation

# Clone the repository
git clone https://github.com/psam21/NostrForNomads.git
cd NostrForNomads

# Install dependencies
npm install

# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your configuration

# Run development server
npm run dev

Build for Production

npm run build
npm start

Available Scripts

# Development
npm run dev              # Start development server

# Building
npm run build            # Production build
npm start                # Start production server

# Code Quality
npm run lint             # Run ESLint
npm run lint:fix         # Auto-fix linting issues
npm run lint:prod        # Lint with production rules
npm run format:check     # Check code formatting
npm run format           # Format code with Prettier
npm run typecheck        # TypeScript type checking

# Utilities
npm run metrics:export   # Export application metrics
npm run bench:signing    # Benchmark signing performance
npm run enrich:nostr     # Enrich Nostr handles

πŸ”‘ Key Nostr Concepts

NIPs (Nostr Implementation Possibilities)

Implemented NIPs

  • NIP-01: Basic protocol - events, signatures, relays βœ…
  • NIP-05: DNS-based verification - alice@example.com identifiers βœ…
  • NIP-07: Browser extension signing - window.nostr interface (Alby, nos2x, Nostore) βœ…
  • NIP-09: Event deletion - Kind 5 deletion events (used in My Contributions, My Shop, My Work) βœ…
  • NIP-17: Private Direct Messages - gift-wrapped encrypted messages (double encryption) βœ…
  • NIP-19: Bech32-encoded entities - npub, nsec, note, nprofile, nevent βœ…
  • NIP-23: Long-form content - articles, blogs (used in Contribute/Explore/Shop/Work) βœ…
  • NIP-33: Parameterized replaceable events - d-tag based content (used in Contribute/Explore/Shop/Work) βœ…
  • NIP-44: Encrypted payloads (v2) - ChaCha20-Poly1305 + HKDF-SHA256 for NIP-17 encryption βœ…
  • NIP-78: Application-specific data - Kind 30078 for cart/settings storage (service layer ready) βœ…
  • NIP-94: File metadata - imeta tags for media attachments βœ…
  • NIP-96: Blossom protocol - decentralized media hosting with SHA-256 verification βœ…

Planned for Future Integration

  • NIP-11: Relay capability discovery
  • NIP-46: Remote signer protocol - Nostr Connect for mobile apps
  • NIP-57: Lightning Zaps - tip creators
  • NIP-65: Relay list metadata - user's preferred relay list

Relays

The application connects to multiple Nostr relays for redundancy:

  • Default relays configured in /src/config/relays.ts
  • WebSocket-based real-time communication
  • Automatic reconnection and failover
  • Multi-relay publishing for redundancy

Key Management

  • Private keys: Stored securely in browser (encrypted localStorage via KVService)
  • Public keys: User identity (npub format)
  • Signing: All events cryptographically signed (ed25519)
  • Backup: Exportable key backup files (keyExport utility)
  • Browser extension: NIP-07 compatible (Alby, nos2x, etc.)

πŸ§ͺ Testing Strategy

Unit Tests

  • Service layer methods (business logic in isolation)
  • Utility functions (key management, validation)
  • Core services (caching, encryption)

Integration Tests

  • Service composition (business β†’ core β†’ protocol)
  • Nostr event flow
  • Authentication workflows

E2E Tests

  • User journeys (signup, messaging, profile updates)
  • Cross-feature workflows

πŸ›‘οΈ Security Considerations

  • Client-side encryption: Messages encrypted before transmission (NIP-04)
  • No password storage: Nostr uses cryptographic key pairs (ed25519)
  • Relay privacy: Users can choose their own relays
  • Censorship resistance: Decentralized architecture with multi-relay publishing
  • Key backup: User-controlled key management with export functionality
  • Encrypted caching: Sensitive data encrypted in browser storage (CacheEncryptionService)
  • Event validation: All events validated before signing (GenericEventService)
  • Content sanitization: User input sanitized to prevent XSS attacks

πŸ“ Environment Variables

# Nostr Relays (comma-separated WebSocket URLs)
NEXT_PUBLIC_DEFAULT_RELAYS=wss://relay1.example.com,wss://relay2.example.com

# Blossom Media Server
NEXT_PUBLIC_BLOSSOM_SERVER=https://blossom.example.com

# Analytics (optional)
NEXT_PUBLIC_ENABLE_ANALYTICS=true

# Redis/Upstash (for server-side caching, optional)
UPSTASH_REDIS_REST_URL=https://your-redis-url
UPSTASH_REDIS_REST_TOKEN=your-redis-token

# Environment
APP_ENV=production # or development

🎯 Why This Matters

This isn't just a startup. This is a movement.

The Broken Promise

For 15 years, we've been told:

  • "Work from anywhere!"
  • "Travel the world!"
  • "Live on your terms!"

The Reality:

  • Platforms extract 15-30% of your income
  • Algorithms control your reach
  • Accounts vanish overnight
  • Reputation trapped on each platform
  • Data sold to advertisers

The Solution

Nostr for Nomads is what digital nomadism should have been from the start:

Traditional Platforms Nostr for Nomads
Username = platform property Cryptographic keys = yours forever
Followers locked to platform Portable across any Nostr app
Can be deleted/censored Signed by your key = permanent
Reputation starts at zero Travels with your public key
10-30% fees 0% today, <5% future
Data sold Encrypted, you control

We're not just replacing platforms. We're making them obsolete.


🀝 Contributing

Read docs/nc-critical-guidelines.md before contributing.

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Follow SOA architecture principles (mandatory - see critical-guidelines.md)
  4. Write and test your changes
  5. Run npm run build to ensure no errors
  6. Commit with concise messages (git commit -m 'feat: Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

Code Quality Standards

  • SOA Compliance: Follow service-oriented architecture (non-negotiable)
  • TypeScript: All code must be properly typed
  • Testing: Test features end-to-end before marking complete
  • Documentation: Add JSDoc comments for complex components
  • Linting: Code must pass ESLint checks (npm run lint)
  • No Dead Code: Remove unused imports, functions, and files

Want to Help?

  • Developers: Check GitHub issues tagged good-first-issue
  • Designers: UI/UX improvements always welcome
  • Nomads: User feedback, bug reports, feature requests
  • Writers: Documentation, guides, tutorials
  • Investors: See docs/Nostr-for-Nomads-Deck.md

πŸ“Š Project Status

Current Phase: Production MVP with active users

Metrics (as of November 2025)

  • βœ… 12 NIPs implemented (01, 05, 07, 09, 17, 19, 23, 33, 44, 52, 78, 94, 96)
  • βœ… 10 Event kinds (Kinds 0, 1, 5, 14, 1059, 24242, 30023, 30078, 31923, 31925)
  • βœ… 14 Features in production (Sign Up, Sign In, Profile, Messages, Explore, My Contributions, My Shop, Shop, My Work, Work, My Meet, Meet, User Event Log, Payments UI)
  • βœ… 8 high-reliability global relays integrated
  • βœ… Service-Oriented Architecture (4-layer design with 36 services)
  • βœ… Production deployment on Vercel
  • βœ… 99.9% uptime target
  • βœ… Full CRUD with generic edit architecture for Shop, Work, Meet, and Contributions
  • βœ… Standardized statistics dashboards across all My pages (reusable StatCard/StatBreakdown components)
  • βœ… Selective attachment operations for multi-image features (Contributions/Shop/Work)
  • βœ… Single-image design for Meet events (intentional, industry-standard pattern)
  • πŸš€ Early adopter user base growing
  • πŸš€ Community feedback driving roadmap

Next Milestones

  • Q1 2026: Freemium launch (Creator/Pro tiers)
  • Q2 2026: Mobile apps (iOS + Android)
  • Q3 2026: Work marketplace with Lightning escrow
  • Q4 2026: 100,000 active users

πŸ’° Funding

Seeking $500K seed round to:

  • Hire core team (3 engineers, 1 designer, 1 growth lead)
  • Scale to 100,000 users
  • Achieve product-market fit in 12-18 months
  • Position for Series A

Investment highlights:

  • Working product (not vaporware)
  • Massive TAM ($1.2T nomad economy)
  • Protocol moat (network effects = defensibility)
  • Path to $10M ARR in 3 years
  • 100-400x return potential

Contact: contact@nostr.co.in | Read full pitch deck


πŸ“„ License

This project is open source and available under the MIT License.


πŸ”— Resources

Nostr Protocol

Bitcoin & Lightning

Tech Stack

Community


Built with ⚑ by nomads, for nomads

35 million digital nomads are waiting for this. Let's build it.

About

Nostr for Nomads

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

 
 
 

Contributors

Languages