Skip to content

Commit b461bab

Browse files
committed
N/A
1 parent 6f32dc4 commit b461bab

2 files changed

Lines changed: 268 additions & 1 deletion

File tree

codepilot-commit.gif

262 KB
Loading

src/App.jsx

Lines changed: 268 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,190 @@ const builderFieldOrder = [
5656
"releaseTag",
5757
];
5858

59+
const searchExplorerSections = [
60+
{
61+
title: "Custom GitHub Searches",
62+
items: [
63+
{ title: "Paid Bounties", emoji: "💲", query: "type:issue state:open label:bounty", searchType: "issues" },
64+
{
65+
title: "Documentation Issues",
66+
emoji: "📄",
67+
query: "type:issue state:open label:documentation",
68+
searchType: "issues",
69+
},
70+
{
71+
title: "Good First Issues",
72+
emoji: "🥇",
73+
query: 'type:issue state:open label:"good first issue"',
74+
searchType: "issues",
75+
},
76+
{
77+
title: "Help Wanted Issues",
78+
emoji: "🆘",
79+
query: 'type:issue state:open label:"help wanted"',
80+
searchType: "issues",
81+
},
82+
],
83+
},
84+
{
85+
title: "Find Repositories",
86+
items: [
87+
{
88+
title: "Find boilerplates & starter kits",
89+
emoji: "✅",
90+
query: '"starter template" vite react',
91+
searchType: "repositories",
92+
},
93+
{
94+
title: "Find repos using specific tools",
95+
emoji: "🧰",
96+
query: 'vite react "gh-pages"',
97+
searchType: "repositories",
98+
},
99+
{
100+
title: "Find experimental / weird projects",
101+
emoji: "⭐",
102+
query: "topic:creative-coding stars:<100",
103+
searchType: "repositories",
104+
},
105+
{
106+
title: "Find weird projects by phrase",
107+
emoji: "🧪",
108+
query: '"weird project" stars:<50',
109+
searchType: "repositories",
110+
},
111+
{
112+
title: "Find small, under-the-radar gems",
113+
emoji: "💎",
114+
query: "stars:10..50 pushed:>2026-01-01",
115+
searchType: "repositories",
116+
},
117+
{
118+
title: "Find trending repos",
119+
emoji: "💖",
120+
query: "stars:>1000 created:>2026-04-01",
121+
searchType: "repositories",
122+
},
123+
{
124+
title: "Find repos by tech + popularity",
125+
emoji: "🧩",
126+
query: "topic:streamlit stars:>100",
127+
searchType: "repositories",
128+
},
129+
{
130+
title: "Find repos with specific features",
131+
emoji: "📝",
132+
query: '"markdown editor" react',
133+
searchType: "repositories",
134+
},
135+
{ title: "Find repos with demos", emoji: "🎬", query: '"live demo" github.io', searchType: "repositories" },
136+
{
137+
title: "Find repos with contribution guides",
138+
emoji: "🤝",
139+
query: '"CONTRIBUTING.md" stars:<200',
140+
searchType: "repositories",
141+
},
142+
{
143+
title: "Find repos with real usage (stars + forks)",
144+
emoji: "📦",
145+
query: "stars:>50 forks:>20",
146+
searchType: "repositories",
147+
},
148+
{
149+
title: "Find abandoned but popular repos",
150+
emoji: "🏚️",
151+
query: "stars:>100 pushed:<2025-01-01",
152+
searchType: "repositories",
153+
},
154+
{
155+
title: "Find early-stage trending repos",
156+
emoji: "🚀",
157+
query: "stars:20..200 created:>2026-01-01",
158+
searchType: "repositories",
159+
},
160+
{ title: "Find tools by GitHub Topics", emoji: "📫", query: "topic:email-builder", searchType: "repositories" },
161+
],
162+
},
163+
{
164+
title: "Find People",
165+
items: [
166+
{
167+
title: "Find collaborators or interesting devs",
168+
emoji: "👋",
169+
query: "followers:>100 location:portland language:JavaScript",
170+
searchType: "users",
171+
},
172+
{
173+
title: "Find people building lots of small projects",
174+
emoji: "🧠",
175+
query: "repos:>20 followers:<200",
176+
searchType: "users",
177+
},
178+
{
179+
title: "Find niche experts",
180+
emoji: "🎯",
181+
query: "language:TypeScript repos:>5 followers:>20",
182+
searchType: "users",
183+
},
184+
{ title: "Find local developers", emoji: "📍", query: "location:portland language:JavaScript", searchType: "users" },
185+
{ title: "Find indie builders", emoji: "🛠️", query: "followers:<200 repos:>15", searchType: "users" },
186+
],
187+
},
188+
{
189+
title: "Find Issues",
190+
items: [
191+
{
192+
title: "Find ignored issues (low competition)",
193+
emoji: "👻",
194+
query: "type:issue state:open comments:0",
195+
searchType: "issues",
196+
},
197+
{
198+
title: "Find high-demand feature requests",
199+
emoji: "🔥",
200+
query: "type:issue state:open label:enhancement reactions:>10",
201+
searchType: "issues",
202+
},
203+
{
204+
title: "Find bugs nobody is working on",
205+
emoji: "🐛",
206+
query: "type:issue state:open label:bug no:assignee",
207+
searchType: "issues",
208+
},
209+
{ title: "Find stale issues", emoji: "🕰️", query: "type:issue state:open updated:<2026-01-01", searchType: "issues" },
210+
{
211+
title: "Find discussions about specific problems",
212+
emoji: "💬",
213+
query: '"github pages" "vite" type:issue',
214+
searchType: "issues",
215+
},
216+
],
217+
},
218+
{
219+
title: "Find Code Patterns",
220+
items: [
221+
{ title: "Find repos needing work (TODOs in code)", emoji: "🛠️", query: '"TODO" in:file stars:<100', searchType: "code" },
222+
{ title: "Find markdown-heavy projects", emoji: "🧾", query: 'extension:md "##"', searchType: "code" },
223+
{ title: "Find contenteditable implementations", emoji: "✏️", query: '"contenteditable" "onInput"', searchType: "code" },
224+
{ title: "Find drag-and-drop implementations", emoji: "🖱️", query: '"dragstart" "drop"', searchType: "code" },
225+
{ title: "Find file upload patterns", emoji: "📤", query: '"type=\\"file\\"" "onChange"', searchType: "code" },
226+
{ title: "Find API call patterns", emoji: "🌐", query: '"fetch(" "POST"', searchType: "code" },
227+
{
228+
title: "Find reusable components",
229+
emoji: "🧩",
230+
query: '"export function" "component" language:TypeScript',
231+
searchType: "code",
232+
},
233+
{ title: "Find projects built just for fun", emoji: "🎲", query: '"just for fun" stars:<100', searchType: "repositories" },
234+
],
235+
},
236+
];
237+
238+
function buildGitHubSearchUrl(query, searchType) {
239+
const params = new URLSearchParams({ q: query, type: searchType });
240+
return `https://github.com/search?${params.toString()}`;
241+
}
242+
59243
function generateProfileLinks(username) {
60244
if (!username) return [];
61245
return dedupeByUrl(
@@ -371,6 +555,7 @@ export default function GitHubPowerLinksGenerator() {
371555
});
372556
const [builderError, setBuilderError] = useState("");
373557
const [builderCopiedKey, setBuilderCopiedKey] = useState("");
558+
const [searchCopiedKey, setSearchCopiedKey] = useState("");
374559

375560
const cleanUsername = parseUsername(username);
376561
const cleanRepo = parseRepo(repo);
@@ -514,6 +699,13 @@ export default function GitHubPowerLinksGenerator() {
514699
setTimeout(() => setBuilderCopiedKey(""), 1200);
515700
}
516701

702+
async function copySearchValue(key, value) {
703+
const ok = await copyToClipboard(value);
704+
if (!ok) return;
705+
setSearchCopiedKey(key);
706+
setTimeout(() => setSearchCopiedKey(""), 1200);
707+
}
708+
517709
return (
518710
<div className="min-h-screen bg-zinc-100 text-zinc-900">
519711
<div className="mx-auto w-full max-w-[1700px] px-4 py-8 sm:px-6 lg:px-8">
@@ -547,6 +739,14 @@ export default function GitHubPowerLinksGenerator() {
547739
>
548740
Builder
549741
</button>
742+
<button
743+
onClick={() => handleModeChange("searchExplorer")}
744+
className={`rounded-xl px-4 py-2 text-sm font-semibold ${
745+
mode === "searchExplorer" ? "bg-zinc-900 text-white" : "text-zinc-700"
746+
}`}
747+
>
748+
Search Explorer
749+
</button>
550750
</div>
551751
</div>
552752

@@ -663,7 +863,7 @@ export default function GitHubPowerLinksGenerator() {
663863
)}
664864
<TestCasesPanel />
665865
</>
666-
) : (
866+
) : mode === "builder" ? (
667867
<div className="grid gap-8 lg:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] 2xl:grid-cols-[minmax(0,1.08fr)_minmax(0,1fr)]">
668868
<section className="rounded-3xl border-4 border-zinc-900 bg-white p-6 shadow-[8px_8px_0_0_#18181b]">
669869
<h2 className="text-2xl font-black">Build link</h2>
@@ -863,6 +1063,73 @@ export default function GitHubPowerLinksGenerator() {
8631063
</div>
8641064
</section>
8651065
</div>
1066+
) : (
1067+
<div className="space-y-6">
1068+
<div className="rounded-3xl border-4 border-zinc-900 bg-white p-6 shadow-[8px_8px_0_0_#18181b]">
1069+
<h2 className="text-2xl font-black">Link Explorer</h2>
1070+
<p className="mt-1 text-sm text-zinc-600">
1071+
Curated GitHub search queries for finding issues, repos, code patterns, and people faster.
1072+
</p>
1073+
</div>
1074+
1075+
{searchExplorerSections.map((section) => (
1076+
<section
1077+
key={section.title}
1078+
className="rounded-3xl border-4 border-zinc-900 bg-white p-6 shadow-[8px_8px_0_0_#18181b]"
1079+
>
1080+
<h3 className="text-xl font-black">{section.title}</h3>
1081+
<div className="mt-4 grid gap-4 md:grid-cols-2">
1082+
{section.items.map((item) => {
1083+
const url = buildGitHubSearchUrl(item.query, item.searchType);
1084+
return (
1085+
<article key={`${section.title}-${item.title}`} className="rounded-2xl border-2 border-zinc-300 p-4">
1086+
<div className="text-sm font-black">
1087+
<span className="mr-2">{item.emoji}</span>
1088+
{item.title}
1089+
</div>
1090+
<a
1091+
href={url}
1092+
target="_blank"
1093+
rel="noreferrer"
1094+
className="mt-2 inline-flex break-all text-sm font-semibold text-blue-700 underline"
1095+
>
1096+
{item.query}
1097+
</a>
1098+
<pre className="mt-3 overflow-x-auto rounded-xl border border-zinc-300 bg-zinc-50 p-3 text-xs">
1099+
{item.query}
1100+
</pre>
1101+
<div className="mt-3 flex flex-wrap gap-2">
1102+
<button
1103+
onClick={() => copySearchValue(`query-${item.title}`, item.query)}
1104+
className="inline-flex items-center gap-2 rounded-xl border-2 border-zinc-900 px-3 py-2 text-xs font-semibold"
1105+
>
1106+
<CopyIcon size={14} />
1107+
{searchCopiedKey === `query-${item.title}` ? "Copied query" : "Copy query"}
1108+
</button>
1109+
<button
1110+
onClick={() => copySearchValue(`url-${item.title}`, url)}
1111+
className="inline-flex items-center gap-2 rounded-xl border-2 border-zinc-900 px-3 py-2 text-xs font-semibold"
1112+
>
1113+
<CopyIcon size={14} />
1114+
{searchCopiedKey === `url-${item.title}` ? "Copied link" : "Copy link"}
1115+
</button>
1116+
<a
1117+
href={url}
1118+
target="_blank"
1119+
rel="noreferrer"
1120+
className="inline-flex items-center gap-2 rounded-xl border-2 border-zinc-900 px-3 py-2 text-xs font-semibold"
1121+
>
1122+
<ExternalLinkIcon size={14} />
1123+
Open
1124+
</a>
1125+
</div>
1126+
</article>
1127+
);
1128+
})}
1129+
</div>
1130+
</section>
1131+
))}
1132+
</div>
8661133
)}
8671134
</div>
8681135
</div>

0 commit comments

Comments
 (0)