Skip to content

preyam2002/kindred

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kindred

A social taste-matching platform that aggregates your tracked media activity from Goodreads, MyAnimeList, Letterboxd, and Spotify to connect you with people who share your tastes.

Live Demo: seamless-phi.vercel.app

What is Kindred?

Kindred is a social discovery platform that aggregates your media activity from various sources (Goodreads, MyAnimeList, Letterboxd, Spotify) and helps you discover people with similar tastes. The platform calculates a "MashScore" to quantify taste compatibility between users.

Tech Stack

  • Framework: Next.js 16.0.1 with App Router
  • Language: TypeScript 5
  • UI Library: React 19.2.0
  • Styling: Tailwind CSS v4 with tw-animate-css
  • Animations: Framer Motion 12.23.24
  • Database: Supabase (PostgreSQL) via @supabase/supabase-js 2.78.0 and @supabase/ssr 0.7.0
  • Authentication: NextAuth.js 5.0.0-beta.30
  • 3D Graphics: Three.js (@react-three/fiber 9.4.0, @react-three/drei 10.7.7) with three 0.181.1
  • AI Integration: Anthropic SDK 0.68.0, OpenAI 6.9.0
  • Image Generation: html2canvas 1.4.1, @vercel/og 0.8.5
  • Testing: Vitest 4.0.9 with @vitest/ui
  • Icons: Lucide React 0.552.0
  • UI Components: Radix UI (@radix-ui/react-dialog, @radix-ui/react-label, @radix-ui/react-slot)
  • Utilities: clsx 2.1.1, class-variance-authority 0.7.1, tailwind-merge 3.3.1
  • Date: date-fns 4.1.0
  • Archive: adm-zip 0.5.16
  • Web Scraping: cheerio 1.1.2

Key Features

Taste Matching

  • Aggregates media from Goodreads, MyAnimeList, Letterboxd, and Spotify
  • AI-powered taste compatibility scoring (MashScore)
  • Personalized recommendations based on taste overlap

Media Management

  • Personal library management with ratings and favorites
  • Media collections for organizing content
  • Import from CSV files and OAuth integrations
  • Queue management for watch lists
  • Mood-based discovery

Social Features

  • Friend connections and friend requests
  • Blind match discovery (swipe-based matching)
  • Taste Twins - find users with identical preferences
  • Activity feeds showing friend activities
  • Group consensus suggestions for group viewing
  • Watch Together sessions for synchronized viewing
  • Real-time chat interface

Gamification

  • Taste challenges with streaks
  • Roulette for random media discovery
  • AI-generated Taste Art
  • Leaderboards and rankings
  • Share cards for social media
  • Year Wrapped summaries

AI-Powered Features

  • Taste DNA analysis and visualization
  • Personalized recommendations using OpenAI/Claude
  • AI-generated insights about your taste profile
  • Automated content suggestions

Project Structure

kindred/
├── app/                          # Next.js App Router
│   ├── page.tsx                  # Landing page with CTA
│   ├── layout.tsx                # Root layout with providers
│   ├── globals.css               # Global styles and animations
│   ├── error.tsx                 # Error boundary
│   ├── not-found.tsx             # 404 page
│   ├── dashboard/                # Main dashboard with stats
│   ├── discover/                 # Discovery page for finding users
│   ├── matches/                  # Taste matches listing
│   ├── friends/                  # Friends management
│   ├── library/                  # Personal library and ratings
│   ├── collections/              # User collections
│   ├── recommendations/          # AI-powered recommendations
│   ├── taste-dna/                # Taste analysis visualization
│   ├── taste-match/              # Matching interface
│   ├── taste-twins/              # Find similar users
│   ├── taste-art/                # AI art generation
│   ├── taste-challenge/          # Challenge system
│   ├── roulette/                 # Random discovery spinner
│   ├── mood-discovery/           # Mood-based discovery
│   ├── queue/                    # Watch queue management
│   ├── notifications/            # Notifications center
│   ├── chat/                     # Chat interface
│   ├── watch-together/           # Watch together sessions
│   ├── group-consensus/          # Group suggestion engine
│   ├── blind-match/              # Blind matching (tinder-style)
│   ├── social-feed/              # Social activity feed
│   ├── share-cards/              # Generate shareable cards
│   ├── leaderboards/             # User rankings
│   ├── year-wrapped/             # Annual summary
│   ├── analytics/                # Analytics dashboard
│   ├── u/[username]/             # User public profiles
│   │   ├── page.tsx              # Profile page
│   │   └── queue/                # Public queue view
│   ├── [user1]/[user2]/          # Compare two users
│   ├── mash/[username]/          # Taste mash page
│   ├── auth/                     # Authentication pages
│   │   ├── login/
│   │   └── signup/
│   ├── api/                      # API routes
│   │   ├── auth/[...nextauth]/   # NextAuth configuration
│   │   ├── friends/              # Friend management API
│   │   ├── library/              # Library API
│   │   ├── collections/          # Collections API
│   │   ├── matches/              # Matches API
│   │   ├── recommendations/      # Recommendations API
│   │   ├── taste-dna/            # Taste DNA API
│   │   ├── insights/             # Insights API
│   │   ├── activity/             # Activity API
│   │   ├── challenges/           # Challenges API
│   │   ├── roulette/             # Roulette API
│   │   ├── blind-match/          # Blind match API
│   │   ├── mood-discovery/       # Mood API
│   │   ├── watch-together/       # Watch together API
│   │   ├── group-consensus/      # Consensus API
│   │   ├── chat/                 # Chat API
│   │   ├── comments/             # Comments API
│   │   ├── mash/                 # Mash API
│   │   ├── share/                # Share API
│   │   ├── year-wrapped/         # Wrapped API
│   │   ├── social-proof/         # Social proof API
│   │   ├── analytics/            # Analytics API
│   │   ├── cover-images/         # Cover images API
│   │   ├── dashboard-enhanced/   # Enhanced dashboard
│   │   ├── leaderboards/         # Leaderboards API
│   │   ├── waitlist/             # Waitlist API
│   │   ├── media/                # Media API
│   │   └── taste-art/            # Taste art API
│   └── test/                     # Test pages
├── components/                   # React components
│   ├── providers.tsx             # Context providers (auth, etc.)
│   └── authenticated-layout.tsx  # Layout wrapper for auth
├── lib/                          # Utilities
│   ├── utils.ts                  # General utilities
│   ├── auth/                     # Authentication logic
│   ├── integrations/             # Third-party API integrations
│   └── supabase/                 # Supabase client
├── scripts/                      # Database scripts
│   └── reset-and-setup.sql       # Database setup
├── public/                       # Static assets
├── package.json
├── tsconfig.json
├── next.config.js
└── tailwind.config.ts

NPM Scripts

npm run dev           # Start dev server on port 5001
npm run build         # Build for production
npm run start         # Start production server on port 5001
npm run lint          # Run ESLint
npm run test          # Run Vitest tests in watch mode
npm run test:run      # Run tests once
npm run db:reset      # Display database reset SQL
npm run db:help       # Show database reset help

Database Schema

Uses Supabase PostgreSQL with tables for:

  • users: User accounts and profiles
  • media_items: Books, movies, anime, music tracks
  • user_libraries: User ratings and library entries
  • friend_connections: Friend relationships
  • taste_matches: Pre-calculated match scores
  • collections: User-created collections
  • activities: Activity feed entries
  • challenges: Challenge data and progress
  • notifications: User notifications
  • chat_messages: Chat history
  • watch_together_sessions: Synchronized viewing sessions

Authentication

Uses NextAuth.js with credentials provider and JWT session strategy. OAuth providers can be configured for Google and Twitter.

Development

# Install dependencies
npm install

# Set up environment variables
# Required variables:
# - NEXTAUTH_SECRET
# - NEXTAUTH_URL
# - SUPABASE_URL
# - SUPABASE_ANON_KEY
# - SUPABASE_SERVICE_ROLE_KEY
# - OPENAI_API_KEY
# - ANTHROPIC_API_KEY
# - GOOGLE_CLIENT_ID (optional)
# - GOOGLE_CLIENT_SECRET (optional)

# Set up database
cat scripts/reset-and-setup.sql | psql

# Run development server
npm run dev

Open http://localhost:5001 to view it in the browser.

Documentation

Roadmap

  • Mobile app (React Native)
  • More integrations (Netflix, Steam, Apple Music)
  • Enhanced AI recommendations
  • Group matching features
  • Taste prediction model
  • Trending content discovery

Author

Preyam - GitHub

License

MIT

About

A social taste-matching platform that aggregates your tracked media activity from Goodreads, MyAnimeList, Letterboxd, and Spotify to connect you with people who share your tastes.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors