Skip to content

Commit abed4cb

Browse files
Your Nameclaude
andcommitted
Launch PolyScope: 2,013 market pages with crash signals
Static screener site for Polymarket prediction markets. - 2,013 individual market pages (SEO: one per question) - 10 category pages - Crash signals on homepage (mean reversion opportunities) - Top movers, highest volume sections - Data product CTA on every page ($9 full dataset) - Auto-generated from market_universe.db Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0 parents  commit abed4cb

2,019 files changed

Lines changed: 1108441 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build_screener.py

Lines changed: 1080 additions & 0 deletions
Large diffs are not rendered by default.

docs/.nojekyll

Whitespace-only changes.

docs/404.html

Lines changed: 456 additions & 0 deletions
Large diffs are not rendered by default.

docs/CNAME

Whitespace-only changes.

docs/assets/style.css

Lines changed: 399 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,399 @@
1+
2+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
3+
4+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
5+
6+
:root {
7+
--bg-primary: #0A0A0A;
8+
--bg-secondary: #111111;
9+
--bg-tertiary: #1A1A1A;
10+
--border: #262626;
11+
--border-hover: #404040;
12+
--text-primary: #EDEDED;
13+
--text-secondary:#A1A1A1;
14+
--text-tertiary: #666666;
15+
--accent: #3B82F6;
16+
--accent-hover: #2563EB;
17+
--success: #22C55E;
18+
--danger: #EF4444;
19+
--warning: #F59E0B;
20+
--info: #8B5CF6;
21+
--teal: #00d4aa;
22+
--radius-sm: 6px;
23+
--radius-md: 8px;
24+
--radius-lg: 12px;
25+
--radius-xl: 16px;
26+
}
27+
28+
html { scroll-behavior: smooth; }
29+
30+
body {
31+
background: var(--bg-primary);
32+
color: var(--text-primary);
33+
font-family: 'Inter', sans-serif;
34+
font-size: 15px;
35+
line-height: 1.6;
36+
min-height: 100vh;
37+
}
38+
39+
a { color: var(--accent); text-decoration: none; }
40+
a:hover { color: var(--accent-hover); }
41+
42+
/* ── Nav ── */
43+
.nav {
44+
height: 48px;
45+
background: var(--bg-primary);
46+
border-bottom: 1px solid var(--border);
47+
position: sticky;
48+
top: 0;
49+
z-index: 100;
50+
display: flex;
51+
align-items: center;
52+
padding: 0 20px;
53+
gap: 24px;
54+
}
55+
.nav-brand {
56+
font-weight: 700;
57+
font-size: 1rem;
58+
color: var(--text-primary);
59+
white-space: nowrap;
60+
}
61+
.nav-brand span { color: var(--teal); }
62+
.nav-links { display: flex; gap: 16px; flex: 1; }
63+
.nav-links a {
64+
font-size: 13px;
65+
color: var(--text-secondary);
66+
padding: 4px 8px;
67+
border-radius: var(--radius-sm);
68+
transition: color 0.15s, background 0.15s;
69+
}
70+
.nav-links a:hover { color: var(--text-primary); background: var(--bg-tertiary); }
71+
.nav-right { margin-left: auto; display: flex; gap: 8px; align-items: center; }
72+
73+
/* ── Layout ── */
74+
.container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
75+
.page-header { padding: 40px 0 32px; }
76+
.page-title { font-size: 2rem; font-weight: 700; line-height: 1.2; }
77+
.page-subtitle { color: var(--text-secondary); margin-top: 8px; font-size: 14px; }
78+
79+
/* ── Cards ── */
80+
.card {
81+
background: var(--bg-secondary);
82+
border: 1px solid var(--border);
83+
border-radius: var(--radius-lg);
84+
padding: 16px;
85+
transition: border-color 0.15s ease;
86+
}
87+
.card:hover { border-color: var(--border-hover); }
88+
89+
/* ── Section headers ── */
90+
.section { margin: 32px 0; }
91+
.section-header {
92+
display: flex;
93+
align-items: center;
94+
justify-content: space-between;
95+
margin-bottom: 16px;
96+
}
97+
.section-title {
98+
font-size: 1.1rem;
99+
font-weight: 600;
100+
display: flex;
101+
align-items: center;
102+
gap: 8px;
103+
}
104+
.section-title .dot {
105+
width: 8px; height: 8px;
106+
border-radius: 50%;
107+
background: var(--teal);
108+
animation: pulse 2s infinite;
109+
}
110+
.section-link { font-size: 13px; color: var(--text-secondary); }
111+
.section-link:hover { color: var(--accent); }
112+
113+
@keyframes pulse {
114+
0%, 100% { opacity: 1; }
115+
50% { opacity: 0.4; }
116+
}
117+
118+
/* ── Market Table ── */
119+
.market-table { width: 100%; border-collapse: collapse; }
120+
.market-table th {
121+
background: var(--bg-tertiary);
122+
color: var(--text-tertiary);
123+
font-family: 'JetBrains Mono', monospace;
124+
font-size: 11px;
125+
font-weight: 500;
126+
text-transform: uppercase;
127+
letter-spacing: 0.05em;
128+
padding: 10px 12px;
129+
text-align: left;
130+
border-bottom: 1px solid var(--border);
131+
}
132+
.market-table th.right { text-align: right; }
133+
.market-table td {
134+
padding: 11px 12px;
135+
border-bottom: 1px solid var(--border);
136+
font-size: 13px;
137+
vertical-align: middle;
138+
}
139+
.market-table tr:hover td { background: var(--bg-tertiary); }
140+
.market-table tr:last-child td { border-bottom: none; }
141+
.market-table td.right {
142+
text-align: right;
143+
font-family: 'JetBrains Mono', monospace;
144+
font-size: 12px;
145+
}
146+
.market-table td.mono {
147+
font-family: 'JetBrains Mono', monospace;
148+
font-size: 12px;
149+
}
150+
.market-question {
151+
max-width: 380px;
152+
color: var(--text-primary);
153+
font-size: 13px;
154+
line-height: 1.4;
155+
display: -webkit-box;
156+
-webkit-line-clamp: 2;
157+
-webkit-box-orient: vertical;
158+
overflow: hidden;
159+
}
160+
.market-question:hover { color: var(--accent); }
161+
162+
/* ── Price / Change badges ── */
163+
.price-pill {
164+
display: inline-block;
165+
font-family: 'JetBrains Mono', monospace;
166+
font-size: 13px;
167+
font-weight: 500;
168+
color: var(--text-primary);
169+
}
170+
.positive { color: var(--success); }
171+
.negative { color: var(--danger); }
172+
.neutral { color: var(--text-tertiary); }
173+
174+
/* ── Category badge ── */
175+
.cat-badge {
176+
display: inline-block;
177+
font-size: 11px;
178+
font-weight: 500;
179+
padding: 2px 7px;
180+
border-radius: var(--radius-sm);
181+
background: var(--bg-tertiary);
182+
border: 1px solid var(--border);
183+
color: var(--text-secondary);
184+
white-space: nowrap;
185+
}
186+
187+
/* ── Crash signal cards ── */
188+
.crash-grid {
189+
display: grid;
190+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
191+
gap: 12px;
192+
}
193+
.crash-card {
194+
background: linear-gradient(135deg, rgba(239,68,68,0.06) 0%, var(--bg-secondary) 100%);
195+
border: 1px solid rgba(239,68,68,0.2);
196+
border-radius: var(--radius-lg);
197+
padding: 16px;
198+
transition: border-color 0.15s;
199+
}
200+
.crash-card:hover { border-color: rgba(239,68,68,0.45); }
201+
.crash-drop {
202+
font-family: 'JetBrains Mono', monospace;
203+
font-size: 1.5rem;
204+
font-weight: 700;
205+
color: var(--danger);
206+
}
207+
.crash-question {
208+
font-size: 13px;
209+
color: var(--text-primary);
210+
margin: 8px 0;
211+
line-height: 1.4;
212+
display: -webkit-box;
213+
-webkit-line-clamp: 2;
214+
-webkit-box-orient: vertical;
215+
overflow: hidden;
216+
}
217+
.crash-meta {
218+
font-size: 12px;
219+
color: var(--text-tertiary);
220+
font-family: 'JetBrains Mono', monospace;
221+
}
222+
223+
/* ── Category grid ── */
224+
.cat-grid {
225+
display: grid;
226+
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
227+
gap: 12px;
228+
}
229+
.cat-card {
230+
background: var(--bg-secondary);
231+
border: 1px solid var(--border);
232+
border-radius: var(--radius-lg);
233+
padding: 20px 16px;
234+
text-align: center;
235+
transition: border-color 0.15s, background 0.15s;
236+
display: flex;
237+
flex-direction: column;
238+
gap: 6px;
239+
}
240+
.cat-card:hover {
241+
border-color: var(--teal);
242+
background: var(--bg-tertiary);
243+
}
244+
.cat-icon { font-size: 1.75rem; }
245+
.cat-name { font-size: 13px; font-weight: 600; color: var(--text-primary); }
246+
.cat-count { font-size: 12px; color: var(--text-tertiary); font-family: 'JetBrains Mono', monospace; }
247+
248+
/* ── Monetization banner ── */
249+
.cta-banner {
250+
background: linear-gradient(135deg, rgba(59,130,246,0.1) 0%, rgba(139,92,246,0.1) 100%);
251+
border: 1px solid rgba(59,130,246,0.25);
252+
border-radius: var(--radius-lg);
253+
padding: 20px 24px;
254+
display: flex;
255+
align-items: center;
256+
justify-content: space-between;
257+
gap: 16px;
258+
flex-wrap: wrap;
259+
margin: 24px 0;
260+
}
261+
.cta-text { font-size: 14px; color: var(--text-secondary); }
262+
.cta-text strong { color: var(--text-primary); }
263+
.cta-actions { display: flex; gap: 10px; flex-wrap: wrap; }
264+
.btn-primary {
265+
background: var(--accent);
266+
color: white;
267+
border: none;
268+
border-radius: var(--radius-md);
269+
padding: 8px 16px;
270+
font-size: 13px;
271+
font-weight: 600;
272+
cursor: pointer;
273+
transition: background 0.15s;
274+
display: inline-flex;
275+
align-items: center;
276+
gap: 6px;
277+
white-space: nowrap;
278+
}
279+
.btn-primary:hover { background: var(--accent-hover); color: white; }
280+
.btn-secondary {
281+
background: transparent;
282+
color: var(--text-secondary);
283+
border: 1px solid var(--border);
284+
border-radius: var(--radius-md);
285+
padding: 8px 16px;
286+
font-size: 13px;
287+
font-weight: 500;
288+
cursor: pointer;
289+
transition: border-color 0.15s, color 0.15s;
290+
display: inline-flex;
291+
align-items: center;
292+
gap: 6px;
293+
white-space: nowrap;
294+
}
295+
.btn-secondary:hover { border-color: var(--border-hover); color: var(--text-primary); }
296+
297+
/* ── Market detail page ── */
298+
.market-hero { padding: 32px 0 24px; }
299+
.market-hero-meta { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
300+
.market-hero-q {
301+
font-size: 1.6rem;
302+
font-weight: 700;
303+
line-height: 1.3;
304+
max-width: 800px;
305+
}
306+
.stats-grid {
307+
display: grid;
308+
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
309+
gap: 12px;
310+
margin: 24px 0;
311+
}
312+
.stat-card {
313+
background: var(--bg-secondary);
314+
border: 1px solid var(--border);
315+
border-radius: var(--radius-lg);
316+
padding: 16px;
317+
}
318+
.stat-label {
319+
font-size: 11px;
320+
text-transform: uppercase;
321+
letter-spacing: 0.06em;
322+
color: var(--text-tertiary);
323+
font-family: 'JetBrains Mono', monospace;
324+
margin-bottom: 6px;
325+
}
326+
.stat-value {
327+
font-size: 1.4rem;
328+
font-weight: 700;
329+
font-family: 'JetBrains Mono', monospace;
330+
}
331+
.breadcrumb {
332+
font-size: 13px;
333+
color: var(--text-tertiary);
334+
margin-bottom: 16px;
335+
display: flex;
336+
align-items: center;
337+
gap: 6px;
338+
}
339+
.breadcrumb a { color: var(--text-secondary); }
340+
.breadcrumb a:hover { color: var(--accent); }
341+
342+
/* ── Footer ── */
343+
footer {
344+
margin-top: 64px;
345+
border-top: 1px solid var(--border);
346+
padding: 24px 0;
347+
font-size: 13px;
348+
color: var(--text-tertiary);
349+
}
350+
.footer-inner {
351+
display: flex;
352+
align-items: center;
353+
justify-content: space-between;
354+
flex-wrap: wrap;
355+
gap: 12px;
356+
}
357+
.footer-links { display: flex; gap: 16px; }
358+
.footer-links a { color: var(--text-tertiary); }
359+
.footer-links a:hover { color: var(--text-secondary); }
360+
361+
/* ── Pagination ── */
362+
.pagination {
363+
display: flex;
364+
justify-content: center;
365+
gap: 6px;
366+
margin: 32px 0;
367+
flex-wrap: wrap;
368+
}
369+
.page-btn {
370+
padding: 6px 12px;
371+
border-radius: var(--radius-md);
372+
font-size: 13px;
373+
font-family: 'JetBrains Mono', monospace;
374+
border: 1px solid var(--border);
375+
background: var(--bg-secondary);
376+
color: var(--text-secondary);
377+
cursor: pointer;
378+
transition: all 0.15s;
379+
}
380+
.page-btn:hover, .page-btn.active {
381+
border-color: var(--accent);
382+
color: var(--accent);
383+
}
384+
385+
/* ── Responsive ── */
386+
@media (max-width: 768px) {
387+
.nav-links { display: none; }
388+
.page-title { font-size: 1.5rem; }
389+
.market-hero-q { font-size: 1.2rem; }
390+
.cta-banner { flex-direction: column; }
391+
.market-table th:nth-child(n+4),
392+
.market-table td:nth-child(n+4) { display: none; }
393+
.crash-grid { grid-template-columns: 1fr; }
394+
.cat-grid { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); }
395+
}
396+
@media (max-width: 480px) {
397+
.container { padding: 0 12px; }
398+
.stats-grid { grid-template-columns: 1fr 1fr; }
399+
}

0 commit comments

Comments
 (0)