# 🚨 Code Plagiarism Report: vishkx/gitstory copied from PankajKumardev/gitstory-2025
## TL;DR
**vishkx/gitstory is a direct copy of my project PankajKumardev/gitstory-2025** with minimal modifications (renamed archetypes). The evidence below proves this conclusively.
---
## 📅 Timeline Evidence
| Repository | First Commit | Date |
|------------|--------------|------|
| **PankajKumardev/gitstory-2025** (Original) | `ad1408e` | **December 7, 2025** |
| vishkx/gitstory (Copy) | `2c16be34` | December 15, 2025 |
**My project existed 8 days before vishkx created their repo.**
---
## 🚨 The Smoking Gun: "v1" Bulk Import
On **December 16, 2025**, vishkx made a suspicious commit:
Commit: 322b3d11 Message: "v1" Files Changed: 54 FILES AT ONCE
**This is not normal development.** Adding 54 complete, working files in one commit labeled just "v1" is the signature of:
1. Clone an existing repository
2. Delete the `.git` folder to remove history
3. `git init` and commit everything as "v1"
---
## 🔬 Side-by-Side Code Comparison
### 1. types.ts — 100% IDENTICAL
**My code (Dec 7, 2025):**
```typescript
export interface Language {
name: string;
color: string;
percentage: number;
count: number; // Used for calculation
}
export interface Repository {
name: string;
description: string;
stars: number;
language: string;
topics: string[]; // Added topics for AI detection
url: string;
}
vishkx's "v1" commit (Dec 16, 2025):
// EXACTLY THE SAME - including my comments
vishkx copied my made-up mock data character-for-character:
| Data | My Original | vishkx's Copy |
|---|---|---|
| Username | "creative-dev" |
"creative-dev" ✅ SAME |
| Avatar | "<https://picsum.photos/200/200>" |
"<https://picsum.photos/200/200>" ✅ SAME |
| Top Repo | "neuro-net-v2" |
"neuro-net-v2" ✅ SAME |
| Description | "Distributed inference engine for LLMs on consumer hardware." |
✅ SAME |
| Stars | 3420 |
3420 ✅ SAME |
| All 5 Repos | neuro-net-v2, rust-gpu-compute, ai-code-reviewer, ml-notebooks, dotfiles |
✅ ALL SAME |
The probability of independently inventing the same fake data is ZERO.
vishkx copied my algorithm and only renamed the archetype strings:
| My Original | vishkx's Version | Threshold |
|---|---|---|
"The Pull Request Pro" |
"The Collaboration Maestro" |
prPercentage > 20 ✅ SAME |
"The Reviewer" |
"The Quality Guardian" |
reviewPercentage > 10 ✅ SAME |
"The Night Owl" |
"The Midnight Architect" |
peakHour >= 22 \|\| <= 4 ✅ SAME |
"The Early Bird" |
"The Dawn Coder" |
peakHour >= 5 && <= 11 ✅ SAME |
"The Weekend Warrior" |
"The Passion Programmer" |
weekendPercentage > 35 ✅ SAME |
"The Grid Painter" |
"The Relentless Builder" |
totalCommits >= 1200 ✅ SAME |
"The Consistent" |
"The Steady Craftsman" |
totalCommits >= 400 ✅ SAME |
"The Planner" |
"The Visionary Planner" |
issuePercentage > 15 ✅ SAME |
"The Community Star" |
"The Open Source Star" |
followers >= 500 \|\| stars >= 1000 ✅ SAME |
"The Tinkerer" |
"The Curious Explorer" |
(default) |
Same conditions. Same thresholds. Same order. Just find-and-replace on strings.
Both have:
https://github-contributions-api.jogruber.de/v4Example — identical error messages:
// Both repos:
throw new Error(`User "${username}" not found. Check the spelling and try again.`);
throw new Error("Invalid GitHub token. Please check your token and try again.");
throw new Error(`API Rate Limit Exceeded. Resets at ${resetTime}. Add a GitHub token for 5000 requests/hour.`);
// BOTH REPOS HAVE THESE EXACT SAME VALUES:
export const SCORING_CONFIG = {
language: {
baseWeight: 1,
recentActivityBonus: 1,
diversityThreshold: 3,
diversityBonus: 0.5,
},
repo: {
stars: { maxPoints: 30, logMultiplier: 10 },
forks: { maxPoints: 15, logMultiplier: 5 },
recency: { maxPoints: 25, decayDays: 15 },
originalWork: 15,
hasDescription: 5,
hasTopics: 5,
hasLanguage: 3,
watchersMultiplier: 0.5,
watchersMax: 5,
archivedPenalty: -20,
sizeLogMultiplier: 3,
sizeMaxPoints: 15,
openIssuesLogMultiplier: 4,
openIssuesMaxPoints: 8,
createdIn2025Bonus: 10,
}
};
My layout.tsx (Dec 7, 2025):
import { Instrument_Serif, Inter_Tight, Space_Mono } from 'next/font/google'
const instrumentSerif = Instrument_Serif({
weight: '400',
style: ['normal', 'italic'],
subsets: ['latin'],
variable: '--font-instrument-serif',
})
const interTight = Inter_Tight({
weight: ['300', '400', '600', '700'],
style: ['normal', 'italic'],
subsets: ['latin'],
variable: '--font-inter-tight',
})
const spaceMono = Space_Mono({
weight: ['400', '700'],
style: ['normal', 'italic'],
subsets: ['latin'],
variable: '--font-space-mono',
})
vishkx's layout.tsx:
// EXACTLY THE SAME FONTS, SAME WEIGHTS, SAME VARIABLES
import { Instrument_Serif, Inter_Tight, Space_Mono } from "next/font/google"
const instrumentSerif = Instrument_Serif({
weight: "400",
style: ["normal", "italic"],
subsets: ["latin"],
variable: "--font-instrument-serif", // ✅ SAME
})
const interTight = Inter_Tight({
weight: ["300", "400", "600", "700"], // ✅ SAME
style: ["normal", "italic"],
subsets: ["latin"],
variable: "--font-inter-tight", // ✅ SAME
})
const spaceMono = Space_Mono({
weight: ["400", "700"], // ✅ SAME
style: ["normal", "italic"],
subsets: ["latin"],
variable: "--font-space-mono", // ✅ SAME
})
My globals.css:
--font-serif: var(--font-instrument-serif), "Instrument Serif", serif;
--font-sans: var(--font-inter-tight), "Inter Tight", sans-serif;
--font-mono: var(--font-space-mono), "Space Mono", monospace;
vishkx's globals.css:
--font-sans: var(--font-inter-tight), "Inter Tight", sans-serif; /* ✅ SAME */
--font-serif: var(--font-instrument-serif), "Instrument Serif", serif; /* ✅ SAME */
--font-mono: var(--font-space-mono), "Space Mono", monospace; /* ✅ SAME */
Same 3 Google Fonts. Same weight configurations. Same CSS variables. Same fallbacks.
| File | Similarity |
|---|---|
types.ts |
100% identical (including comments) |
constants.ts |
100% identical (including fake data) |
githubService.ts |
99% identical (only import aliases differ) |
scoringAlgorithms.ts |
95% identical (renamed archetype strings) |
layout.tsx fonts |
100% identical (same 3 fonts, same weights) |
globals.css |
100% identical font variables |
| Error messages | 100% identical |
| API endpoints | 100% identical |
| Step | Action | Date |
|---|---|---|
| 1 | Cloned my repository | Dec 15 |
| 2 | Deleted .git folder |
Dec 15 |
| 3 | Renamed archetype strings | Dec 15-16 |
| 4 | Created new repo, "Initial commit" | Dec 15 |
| 5 | Committed 54 files as "v1" | Dec 16 |
| 6 | Made iterative UI changes | Dec 17-24 |
| 7 | Added Credits component | Dec 25 (only after being caught?) |
My README explicitly states:
Attribution Required: If you use, modify, or build upon this project, you MUST:
- Credit the original author — Include "Based on GitStory by Pankaj Kumar"
- Link to the original repo
- Do NOT claim original authorship
vishkx's README says:
"Created and maintained by vishkx"
This is a direct violation of my license terms.
This is not "inspiration" or "similar approach." This is direct code theft:
vishkx copied my code, stripped the git history, renamed some strings, and claimed it as their own.
Report generated: December 25, 2025 Author: Pankaj Kumar (@pankajkumardev)