Skip to content

Omnikon-Org/IssuesSwipe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

56 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ”₯ IssueSwipe

Tinder for Open Source Contributions β€” Discover your next pull request in seconds.

Swipe right to contribute, left to skip, or bookmark issues for later β€” all while earning XP, maintaining streaks, and climbing the developer ranks.

Code. Create. Conquer.

Next.js TypeScript Prisma Tailwind CSS License: MIT GSSoC PRs Welcome

Live Demo Β· Report Bug Β· Request Feature


πŸ“Έ Preview

Demo GIF / screenshots coming soon β€” swipe feed, onboarding, and admin dashboard previews will go here.

🎬 placeholder β€” add a GIF of the swipe feed in action

πŸ“š Table of Contents


✨ Features

Feature Description
πŸƒ Swipe Feed Tinder-style drag-to-swipe card interface powered by Framer Motion
🧠 Smart Matching Scoring engine matches issues to your languages, interests & skill level
πŸ† Gamification XP system, 5 developer ranks, daily streak tracking
πŸ”– Saved Matches Bookmark issues and track your contribution workflow (Opened β†’ PR β†’ Merged)
πŸ”„ GitHub Sync Live GraphQL API sync for good first issue and help wanted labels
πŸ‘€ GitHub OAuth Secure login with JWT session management
πŸ“Š Admin Dashboard Platform analytics: swipe ratios, popular tech, most-swiped repos
πŸŒ™ Dev Mode Full local development with mock auth β€” no GitHub OAuth app required

πŸš€ Getting Started

Prerequisites

  • Node.js 20+
  • npm or pnpm

1. Clone & Install

git clone https://github.com/Demon-Die/issueswipe.git
cd issueswipe
npm install

2. Configure Environment

cp .env.example .env

Edit .env with your values. For local development, leave NEXT_PUBLIC_DEV_MODE="true" and skip the GitHub OAuth setup entirely.

3. Set Up the Database

# Push schema to SQLite
npx prisma db push

# Seed with sample repositories, issues, and users
npx prisma db seed

4. Start the Dev Server

npm run dev

Open http://localhost:3000 β€” you'll be automatically logged in as the mock developer account.


πŸ—‚οΈ Project Structure

issueswipe/
β”œβ”€β”€ prisma/
β”‚   β”œβ”€β”€ schema.prisma        # Database models
β”‚   └── seed.ts              # Sample data seeder
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ api/             # Next.js API Route Handlers
β”‚   β”‚   β”‚   β”œβ”€β”€ auth/        # GitHub OAuth + session endpoints
β”‚   β”‚   β”‚   β”œβ”€β”€ issues/      # Feed API with match scoring
β”‚   β”‚   β”‚   β”œβ”€β”€ matches/     # Saved issues CRUD
β”‚   β”‚   β”‚   β”œβ”€β”€ profile/     # User profile + onboarding
β”‚   β”‚   β”‚   β”œβ”€β”€ swipe/       # Swipe registration + XP
β”‚   β”‚   β”‚   β”œβ”€β”€ sync/        # GitHub GraphQL sync trigger
β”‚   β”‚   β”‚   └── admin/       # Analytics dashboard API
β”‚   β”‚   β”œβ”€β”€ swipe/           # Swipe feed page
β”‚   β”‚   β”œβ”€β”€ onboarding/      # User preference setup
β”‚   β”‚   β”œβ”€β”€ matches/         # Saved matches page
β”‚   β”‚   β”œβ”€β”€ profile/         # User profile page
β”‚   β”‚   └── admin/           # Admin dashboard page
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ LandingPage.tsx
β”‚   β”‚   β”œβ”€β”€ Navbar.tsx
β”‚   β”‚   β”œβ”€β”€ SwipeFeed.tsx
β”‚   β”‚   β”œβ”€β”€ OnboardingForm.tsx
β”‚   β”‚   β”œβ”€β”€ SavedMatches.tsx
β”‚   β”‚   β”œβ”€β”€ UserProfile.tsx
β”‚   β”‚   └── AdminDashboard.tsx
β”‚   └── lib/
β”‚       β”œβ”€β”€ auth.ts          # JWT session management
β”‚       β”œβ”€β”€ db.ts            # Prisma client singleton
β”‚       β”œβ”€β”€ github.ts        # GitHub GraphQL sync
β”‚       β”œβ”€β”€ matching.ts      # Issue match scoring algorithm
β”‚       └── xp.ts             # XP & rank computation

🧠 Match Scoring Algorithm

Issues are scored 0–100 based on:

Factor Max Points
Language match (repo language == user language) 30
Interest match (labels/title keywords vs user interests) 25
Difficulty/experience alignment 20
good first issue / help wanted labels 15
Repository star count (popularity bonus) 10

πŸ… XP & Rank System

Action XP Gained
Save an issue +10 XP
Swipe right (Contribute) +25 XP
Submit a PR +100 XP
Get a PR Merged +250 XP
Rank XP Required
New Contributor 0 – 100
Issue Hunter 101 – 500
PR Warrior 501 – 1,500
Merge Machine 1,501 – 5,000
Open Source Legend 5,001+

πŸ”‘ Environment Variables

See .env.example for the full list. Key variables:

Variable Description
DATABASE_URL SQLite connection string (default: file:./dev.db)
GITHUB_CLIENT_ID GitHub OAuth App Client ID
GITHUB_CLIENT_SECRET GitHub OAuth App Client Secret
GITHUB_PERSONAL_ACCESS_TOKEN For live issue sync (optional, falls back to simulation)
JWT_SECRET Secret key for signing session JWTs
NEXT_PUBLIC_DEV_MODE Set "true" to skip OAuth and use a mock dev account

πŸ“œ Available Scripts

Command Description
npm run dev Start the development server
npm run build Create a production build
npm run start Run the production build locally
npm run lint Run ESLint across the codebase
npx prisma studio Open Prisma's visual database editor
npx prisma db push Sync the schema to the database
npx prisma db seed Seed the database with sample data

πŸ› οΈ Tech Stack


☁️ Deployment

IssueSwipe deploys cleanly to Vercel:

  1. Push your fork/branch to GitHub
  2. Import the repo into Vercel
  3. Add the environment variables from .env.example in the Vercel project settings
  4. For production, swap SQLite for a hosted database (e.g. Turso or PostgreSQL via Prisma) and update DATABASE_URL accordingly β€” better-sqlite3 is intended for local/dev use

🀝 Contributing

IssueSwipe is built in the open under the Demon-Die organization and proudly participates in GSSoC'26 (GirlScript Summer of Code). Contributions of all sizes are welcome!

How to contribute

  1. Find an issue β€” check the Issues tab for anything labeled gssoc26, good first issue, or help wanted
  2. Get assigned β€” comment on the issue asking to be assigned; please wait for a maintainer to assign it to you before starting work
  3. Fork & branch β€” fork the repo and create a feature branch (feature/short-description)
  4. Code β€” follow the existing project structure and lint rules (npm run lint before committing)
  5. Commit β€” use clear, conventional commit messages (e.g. feat: add streak freeze logic)
  6. Open a PR β€” target main, reference the issue number (Closes #123), and describe what changed and how to test it

Please don't open issues and immediately self-assign/PR against them β€” let a maintainer review and assign first, in line with GSSoC contribution etiquette.

For larger features or architectural changes, open an issue to discuss before submitting a PR.


πŸ“„ License

MIT Β© Demon-Die


Built with πŸ”₯ by the Demon-Die team Β· Code. Create. Conquer.

About

πŸ”₯ Tinder for Open Source Contributions β€” Swipe to find your next pull request. Built with Next.js 16, Framer Motion, Prisma & GitHub GraphQL API.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors