MCPcopy Index your code
hub / github.com/divinevideo/divine-web

github.com/divinevideo/divine-web @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
2,025 symbols 6,500 edges 625 files 107 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

diVine Web

OpenVine-compatible Nostr client for short-form looping videos. Built with React 18.x, TailwindCSS 3.x, Vite, shadcn/ui, and Nostrify.

Features

  • 6-second looping videos (Kind 34236)
  • MP4 and GIF support with auto-loop playback
  • Blurhash placeholders for smooth progressive loading
  • Social features: Likes, reposts, follows, hashtag discovery
  • Feed types: Home (following), Discovery, Trending, Hashtag, Profile
  • Primary relay: wss://relay.divine.video

Relay Architecture

relay.divine.video is a high-performance OpenSearch-backed relay with NIP-50 search extensions.

NIP-50 Search Support

The relay implements NIP-50 full-text search with advanced sorting:

{
  kinds: VIDEO_KINDS,
  search: "sort:hot",  // Recent + high engagement
  limit: 50
}

Supported sort modes: - sort:hot - Recent events with high engagement (trending) - sort:top - Most referenced events (popular all-time) - sort:rising - Recently created events gaining engagement - sort:controversial - Events with mixed reactions

Combined search and sort:

{
  kinds: VIDEO_KINDS,
  search: "sort:hot bitcoin",  // Hot bitcoin videos
  limit: 50
}

Feed types using NIP-50: - Trending (sort:hot) - Discovery (sort:top) - Home following feed (sort:top) - Hashtag feeds (sort:hot) - Full-text search (with relevance scoring)

Fallback: Standard Nostr relays without NIP-50 will return chronological results.

For detailed relay documentation, see docs/relay-architecture.md.

Development

Built with MKStack template - a starter for Nostr client applications.

Extension points exported contracts — how you extend this code

EnrichedVideo (Interface)
* A video enriched with its bulk stats, ready for analytics computation
src/lib/analyticsTransform.ts
Env (Interface)
(no doc)
functions/api/report.ts
VideoMetadata (Interface)
(no doc)
src/types/video.ts
EditListDialogProps (Interface)
(no doc)
src/components/EditListDialog.tsx
RecordedSegment (Interface)
(no doc)
src/pages/UploadPage.tsx
StaticViner (Interface)
(no doc)
src/data/classicViners.ts
TestAppProps (Interface)
(no doc)
src/test/TestApp.tsx
LoginDialogContextType (Interface)
(no doc)
src/contexts/LoginDialogContext.tsx

Core symbols most depended-on inside this repo

cn
called by 325
src/lib/utils.ts
debugLog
called by 259
src/lib/debug.ts
toast
called by 106
src/hooks/useToast.ts
useCurrentUser
called by 84
src/hooks/useCurrentUser.ts
query
called by 82
src/lib/eventCache.ts
clear
called by 76
src/lib/eventCache.ts
verboseLog
called by 65
src/lib/debug.ts
initializeI18n
called by 41
src/lib/i18n/index.ts

Shape

Function 1,581
Interface 334
Method 75
Class 32
Enum 3

Languages

TypeScript100%

Modules by API surface

src/lib/dm.ts47 symbols
src/lib/funnelcakeClient.ts43 symbols
src/lib/videoVerification.ts28 symbols
src/lib/videoParser.ts25 symbols
compute-js/src/index.js25 symbols
src/lib/eventCache.ts24 symbols
src/lib/dmOutbox.ts24 symbols
public/embed-viewer.js23 symbols
src/lib/serverSocialMeta.ts22 symbols
src/pages/SearchPage.tsx20 symbols
src/hooks/useDirectMessages.ts20 symbols
src/pages/UniversalUserPage.tsx18 symbols

For agents

$ claude mcp add divine-web \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact