peerseek
● running in production · peerseek.io
A link-in-bio storefront where creators sell 1:1 sessions, webinars, digital products and links from peerseek.io/<username>, and get paid out. I built the entire backend, from scratch, alone.
the backend
$ tree -L 1 peerseek/ ├── auth user creator central # who you are, what you sell ├── calendar package webinar # 1:1 sessions, cohorts, seats ├── digital_product drm # files, video, PDFs, with DRM ├── payment # the one money engine ├── chat # realtime, django channels ├── auto_dm # instagram comment → DM ├── analytics redirection url_shortner # first-party analytics + UTM ├── inquiry testimonial search # leads, social proof, discovery ├── communication # email + whatsapp notifications └── course # in flight
the idea that holds it together
Everything a creator sells is an offering. Each one gets two records: its own definition (Service, Webinar, DigitalProduct, UrlMap) and a row in one shared catalog, CreatorOffering. They're linked by a polymorphic pointer, (context_id, context_type), and that same pair shows up in every money table. So one payment engine serves products that have nothing else in common, and a new product type gets pricing, coupons, commission and payouts without touching the money path.
definition catalog fulfilment money Service ─┐ Booking ─┐ Webinar ─┼──► CreatorOffering ──► WebinarBuyLog ─┼──► PaymentTransaction DigitalProduct ─┤ DP History ─┘ PaymentBreakdown UrlMap ─┘ CreatorLedger / Wallet
the money path
pick slot → price breakdown per component (base, recording add-on, platform commission, stacking coupons) → slot locked → Razorpay order → webhook captures payment → booking confirmed, Meet link generated, notifications sent → creator earnings go held → settled after a holding period → wallet → payout.
the rest
- Instagram auto-DM. Someone comments a keyword on a reel and gets a DM. Meta Graph API with idempotent webhook handlers, keyword matching, follow-gating ("follow first, then I'll send it") and scheduled token refresh.
- Notifications. One engine for email and WhatsApp that de-duplicates by message ID, so nobody gets "your booking is confirmed" twice when a webhook retries.
- Infra. Django 5 + DRF, Channels/Daphne for websocket chat, Celery on Azure Storage Queues, PostgreSQL, Redis. Docker on Kubernetes (Azure AKS) as four deployments: web, websocket, worker, scheduler. Secrets in Key Vault, files in Blob Storage.
- Not just code. I ran the early sales calls and user interviews, turned what creators asked for into the roadmap, and did onboarding myself.
stack: python django drf channels celery postgres redis razorpay meta-graph-api docker k8s azure-aks

