chore: 将 traffic/ 移出版本库,改为本地 ignore

This commit is contained in:
breath57
2026-03-30 18:27:35 +08:00
parent 311c53f181
commit 43ccd4daa7
22 changed files with 3 additions and 629 deletions
+3
View File
@@ -8,4 +8,7 @@ __pycache__/
# local drafts & temp files (not for repo)
docs/
# traffic dashboard — local only
traffic/
temp/
-121
View File
@@ -1,121 +0,0 @@
// Auto-generated by scripts/merge_traffic.py — do not edit manually
const TRAFFIC_DATA = {
"last_updated": "2026-03-30 01:00 UTC",
"repos": {
"breath57_dingtalk-skills": {
"name": "breath57/dingtalk-skills",
"summary": {
"total_clones": 2600,
"total_clone_uniques": 1427,
"total_views": 2109,
"total_view_uniques": 883,
"stars": 37,
"forks": 4
},
"daily": {
"2026-03-12": {
"clones": 101,
"clone_uniques": 61,
"views": 118,
"view_uniques": 38
},
"2026-03-13": {
"clones": 143,
"clone_uniques": 75,
"views": 150,
"view_uniques": 75
},
"2026-03-14": {
"clones": 59,
"clone_uniques": 26,
"views": 53,
"view_uniques": 28
},
"2026-03-15": {
"clones": 57,
"clone_uniques": 30,
"views": 73,
"view_uniques": 20
},
"2026-03-16": {
"clones": 118,
"clone_uniques": 57,
"views": 168,
"view_uniques": 56
},
"2026-03-17": {
"clones": 180,
"clone_uniques": 103,
"views": 198,
"view_uniques": 72
},
"2026-03-18": {
"clones": 232,
"clone_uniques": 123,
"views": 243,
"view_uniques": 121
},
"2026-03-19": {
"clones": 275,
"clone_uniques": 135,
"views": 121,
"view_uniques": 49
},
"2026-03-20": {
"clones": 180,
"clone_uniques": 106,
"views": 108,
"view_uniques": 51
},
"2026-03-21": {
"clones": 58,
"clone_uniques": 30,
"views": 70,
"view_uniques": 27
},
"2026-03-22": {
"clones": 75,
"clone_uniques": 42,
"views": 97,
"view_uniques": 48
},
"2026-03-23": {
"clones": 226,
"clone_uniques": 132,
"views": 202,
"view_uniques": 91
},
"2026-03-24": {
"clones": 202,
"clone_uniques": 120,
"views": 112,
"view_uniques": 63
},
"2026-03-25": {
"clones": 203,
"clone_uniques": 109,
"views": 87,
"view_uniques": 43
},
"2026-03-26": {
"clones": 240,
"clone_uniques": 124,
"views": 155,
"view_uniques": 42
},
"2026-03-27": {
"clones": 160,
"clone_uniques": 98,
"views": 92,
"view_uniques": 44
},
"2026-03-28": {
"clones": 91,
"clone_uniques": 56,
"views": 62,
"view_uniques": 15
}
}
}
}
};
-488
View File
@@ -1,488 +0,0 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GitHub Traffic Dashboard</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.4/dist/chart.umd.min.js"></script>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0a0a0c;
--s1: #111114;
--s2: #1a1a1e;
--s3: #222228;
--border: #2a2a30;
--text: #f0f0f2;
--muted: #71717a;
--dim: #52525b;
--green: #34d399;
--teal: #2dd4bf;
--blue: #60a5fa;
--indigo: #818cf8;
--amber: #fbbf24;
--orange: #fb923c;
--rose: #fb7185;
--r: 16px;
}
html { scroll-behavior: smooth; }
body {
background: var(--bg);
color: var(--text);
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Helvetica, sans-serif;
min-height: 100vh;
padding: 0;
}
/* ── Container ── */
.container {
max-width: 1400px;
margin: 0 auto;
padding: 2rem 2.5rem;
}
@media (max-width: 768px) { .container { padding: 1.25rem; } }
/* ── Header ── */
header {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 1rem;
margin-bottom: 2rem;
padding-bottom: 1.25rem;
border-bottom: 1px solid var(--border);
}
.hd-left { display: flex; align-items: center; gap: 1rem; }
.hd-icon {
width: 44px; height: 44px;
background: linear-gradient(135deg, #34d39918 0%, #60a5fa18 100%);
border: 1px solid var(--border);
border-radius: 12px;
display: flex; align-items: center; justify-content: center;
font-size: 1.4rem;
flex-shrink: 0;
}
.hd-title { font-size: 1.2rem; font-weight: 700; letter-spacing: -0.03em; }
.hd-sub { font-size: 0.72rem; color: var(--muted); margin-top: 0.1rem; }
.hd-right { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
.badge {
background: var(--s2);
border: 1px solid var(--border);
border-radius: 999px;
padding: 0.3rem 0.9rem;
font-size: 0.65rem;
color: var(--muted);
white-space: nowrap;
}
.badge-live {
display: flex; align-items: center; gap: 0.4rem;
}
.badge-live::before {
content: '';
width: 6px; height: 6px;
background: var(--green);
border-radius: 50%;
animation: pulse-dot 2s ease-in-out infinite;
}
@keyframes pulse-dot { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } }
/* ── Repo tabs ── */
.repo-tabs {
display: flex;
gap: 0.5rem;
margin-bottom: 1.75rem;
flex-wrap: wrap;
}
.repo-tab {
background: var(--s1);
border: 1px solid var(--border);
border-radius: 10px;
padding: 0.55rem 1.1rem;
font-size: 0.75rem;
color: var(--muted);
cursor: pointer;
transition: all 0.2s;
font-family: 'SF Mono', 'Fira Code', monospace;
letter-spacing: -0.02em;
}
.repo-tab:hover { border-color: var(--dim); color: var(--text); }
.repo-tab.active {
background: var(--s2);
border-color: var(--green);
color: var(--green);
box-shadow: 0 0 12px #34d39915;
}
/* ── 6-col card grid ── */
.cards {
display: grid;
grid-template-columns: repeat(6, 1fr);
gap: 0.875rem;
margin-bottom: 1.5rem;
}
@media (max-width: 1100px) { .cards { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 640px) { .cards { grid-template-columns: repeat(2, 1fr); } }
.card {
background: var(--s1);
border: 1px solid var(--border);
border-radius: var(--r);
padding: 1.25rem 1.2rem 1rem;
position: relative;
overflow: hidden;
transition: border-color 0.2s, transform 0.2s, box-shadow 0.2s;
}
.card:hover {
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
transform: translateY(-2px);
box-shadow: 0 8px 30px #00000050;
}
.card::before {
content: '';
position: absolute; top: 0; left: 0; right: 0; height: 2px;
background: linear-gradient(90deg, var(--accent), transparent);
}
.card::after {
content: '';
position: absolute; inset: 0;
background: radial-gradient(ellipse at 20% 0%, color-mix(in srgb, var(--accent) 8%, transparent) 0%, transparent 60%);
pointer-events: none;
}
.card-icon { font-size: 1.1rem; margin-bottom: 0.5rem; }
.card-label {
font-size: 0.58rem; font-weight: 600;
text-transform: uppercase; letter-spacing: 0.1em;
color: var(--muted); margin-bottom: 0.65rem;
}
.card-value {
font-size: 1.9rem; font-weight: 800;
letter-spacing: -0.05em; line-height: 1;
color: var(--text);
font-variant-numeric: tabular-nums;
}
.card-sub {
font-size: 0.6rem; color: var(--dim);
margin-top: 0.5rem;
}
/* ── Charts ── */
.charts {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.875rem;
margin-bottom: 1rem;
}
@media (max-width: 900px) { .charts { grid-template-columns: 1fr; } }
.chart-card {
background: var(--s1);
border: 1px solid var(--border);
border-radius: var(--r);
padding: 1.5rem;
}
.chart-hd {
display: flex; align-items: center; justify-content: space-between;
margin-bottom: 1.25rem;
}
.chart-title {
font-size: 0.7rem; font-weight: 600;
text-transform: uppercase; letter-spacing: 0.08em;
color: var(--muted);
display: flex; align-items: center; gap: 0.4rem;
}
.chart-wrap { position: relative; height: 220px; }
/* ── Footer ── */
.footer {
display: flex; align-items: center; justify-content: space-between;
flex-wrap: wrap; gap: 0.5rem;
margin-top: 1.5rem;
font-size: 0.62rem; color: var(--dim);
padding-top: 1rem; border-top: 1px solid var(--border);
}
.footer code {
background: var(--s2); border: 1px solid var(--border);
border-radius: 5px; padding: 0.1rem 0.4rem; font-size: 0.6rem;
}
</style>
</head>
<body>
<div class="container">
<header>
<div class="hd-left">
<div class="hd-icon">📊</div>
<div>
<div class="hd-title">GitHub Traffic Dashboard</div>
<div class="hd-sub">自动采集 · 实时刷新 · 多仓库</div>
</div>
</div>
<div class="hd-right">
<span id="last-updated" class="badge">载入中…</span>
<span class="badge badge-live">实时</span>
</div>
</header>
<div id="repo-tabs" class="repo-tabs"></div>
<div class="cards">
<div class="card" style="--accent: var(--green)">
<div class="card-icon">📥</div>
<div class="card-label">总 Clone</div>
<div class="card-value" id="v-clones"></div>
<div class="card-sub">全历史累计</div>
</div>
<div class="card" style="--accent: var(--teal)">
<div class="card-icon">👥</div>
<div class="card-label">独立 Cloner</div>
<div class="card-value" id="v-clone-u"></div>
<div class="card-sub">每日之和</div>
</div>
<div class="card" style="--accent: var(--blue)">
<div class="card-icon">👁</div>
<div class="card-label">总访问量</div>
<div class="card-value" id="v-views"></div>
<div class="card-sub">全历史累计</div>
</div>
<div class="card" style="--accent: var(--indigo)">
<div class="card-icon">🧑</div>
<div class="card-label">独立访客</div>
<div class="card-value" id="v-view-u"></div>
<div class="card-sub">每日之和</div>
</div>
<div class="card" style="--accent: var(--amber)">
<div class="card-icon"></div>
<div class="card-label">Stars</div>
<div class="card-value" id="v-stars"></div>
<div class="card-sub">当前</div>
</div>
<div class="card" style="--accent: var(--orange)">
<div class="card-icon">🍴</div>
<div class="card-label">Forks</div>
<div class="card-value" id="v-forks"></div>
<div class="card-sub">当前</div>
</div>
</div>
<div class="charts">
<div class="chart-card">
<div class="chart-hd">
<span class="chart-title">📥 Clone 趋势</span>
</div>
<div class="chart-wrap"><canvas id="chart-clones"></canvas></div>
</div>
<div class="chart-card">
<div class="chart-hd">
<span class="chart-title">👁 访问趋势</span>
</div>
<div class="chart-wrap"><canvas id="chart-views"></canvas></div>
</div>
</div>
<div class="footer">
<span id="coverage"></span>
<span>
采集: <code>./scripts/collect-traffic.sh</code> ·
看板: <code>python3 scripts/traffic-server.py</code>
</span>
</div>
</div><!-- .container -->
<script>
(function () {
const REFRESH_MS = 60000;
let chartClones = null, chartViews = null;
let currentSlug = null;
async function loadData() {
const resp = await fetch('data.js?t=' + Date.now());
const text = await resp.text();
const m = text.match(/const TRAFFIC_DATA\s*=\s*(\{[\s\S]*\})\s*;/);
if (!m) return null;
return JSON.parse(m[1]);
}
const fmt = n => (n ?? 0).toLocaleString('zh-CN');
function renderTabs(data) {
const box = document.getElementById('repo-tabs');
const slugs = Object.keys(data.repos);
box.innerHTML = '';
if (slugs.length <= 1) { box.style.display = 'none'; return; }
box.style.display = 'flex';
slugs.forEach(slug => {
const tab = document.createElement('div');
tab.className = 'repo-tab' + (slug === currentSlug ? ' active' : '');
tab.textContent = data.repos[slug].name;
tab.onclick = () => { currentSlug = slug; render(data); };
box.appendChild(tab);
});
}
function fillCards(repo) {
const s = repo.summary || {};
document.getElementById('v-clones').textContent = fmt(s.total_clones);
document.getElementById('v-clone-u').textContent = fmt(s.total_clone_uniques);
document.getElementById('v-views').textContent = fmt(s.total_views);
document.getElementById('v-view-u').textContent = fmt(s.total_view_uniques);
document.getElementById('v-stars').textContent = fmt(s.stars);
document.getElementById('v-forks').textContent = fmt(s.forks);
}
const mkGrad = (ctx, hex) => {
const g = ctx.createLinearGradient(0, 0, 0, 220);
g.addColorStop(0, hex + '30');
g.addColorStop(1, hex + '00');
return g;
};
const ds = {
tension: 0.35, fill: true, spanGaps: true,
pointRadius: 2.5, pointHoverRadius: 6,
pointBorderWidth: 0, borderWidth: 2,
};
const chartOpts = () => ({
responsive: true,
maintainAspectRatio: false,
interaction: { mode: 'index', intersect: false },
plugins: {
legend: {
labels: {
color: '#71717a', font: { size: 10.5 },
boxWidth: 8, padding: 16,
usePointStyle: true, pointStyleWidth: 8,
},
},
tooltip: {
backgroundColor: '#1a1a1e',
titleColor: '#f0f0f2', bodyColor: '#a1a1aa',
borderColor: '#2a2a30', borderWidth: 1,
padding: 10, cornerRadius: 8,
callbacks: {
label: ctx =>
` ${ctx.dataset.label}: ${ctx.parsed.y?.toLocaleString('zh-CN') ?? '—'}`,
},
},
},
scales: {
x: {
grid: { color: '#1a1a1e' },
ticks: { color: '#52525b', font: { size: 10 }, maxRotation: 0 },
border: { display: false },
},
y: {
grid: { color: '#1a1a1e' },
ticks: { color: '#52525b', font: { size: 10 } },
beginAtZero: true,
border: { display: false },
},
},
});
function renderCharts(repo) {
const daily = repo.daily || {};
const days = Object.keys(daily).sort();
const labels = days.map(d => d.slice(5));
// Clone chart
const ctxC = document.getElementById('chart-clones').getContext('2d');
if (chartClones) chartClones.destroy();
chartClones = new Chart(ctxC, {
type: 'line',
data: {
labels,
datasets: [
{
...ds, label: 'Clone',
data: days.map(d => daily[d]?.clones ?? null),
borderColor: '#34d399',
backgroundColor: mkGrad(ctxC, '#34d399'),
pointBackgroundColor: '#34d399',
},
{
...ds, label: '独立 Cloner',
data: days.map(d => daily[d]?.clone_uniques ?? null),
borderColor: '#2dd4bf',
backgroundColor: mkGrad(ctxC, '#2dd4bf'),
pointBackgroundColor: '#2dd4bf',
},
],
},
options: chartOpts(),
});
// View chart
const ctxV = document.getElementById('chart-views').getContext('2d');
if (chartViews) chartViews.destroy();
chartViews = new Chart(ctxV, {
type: 'line',
data: {
labels,
datasets: [
{
...ds, label: '访问量',
data: days.map(d => daily[d]?.views ?? null),
borderColor: '#60a5fa',
backgroundColor: mkGrad(ctxV, '#60a5fa'),
pointBackgroundColor: '#60a5fa',
},
{
...ds, label: '独立访客',
data: days.map(d => daily[d]?.view_uniques ?? null),
borderColor: '#818cf8',
backgroundColor: mkGrad(ctxV, '#818cf8'),
pointBackgroundColor: '#818cf8',
},
],
},
options: chartOpts(),
});
if (days.length) {
document.getElementById('coverage').textContent =
`数据覆盖:${days[0]}${days[days.length - 1]}${days.length} 天)`;
}
}
function render(data) {
document.getElementById('last-updated').textContent = '更新于 ' + (data.last_updated || '—');
const slugs = Object.keys(data.repos);
if (!slugs.length) return;
if (!currentSlug || !data.repos[currentSlug]) currentSlug = slugs[0];
renderTabs(data);
const repo = data.repos[currentSlug];
fillCards(repo);
renderCharts(repo);
}
async function refresh() {
try {
const data = await loadData();
if (data) render(data);
} catch (e) {
console.warn('刷新失败:', e);
}
}
// 初始加载 + 定时刷新
refresh();
setInterval(refresh, REFRESH_MS);
})();
</script>
</body>
</html>
-2
View File
@@ -1,2 +0,0 @@
# raw/ 目录存放每日原始 API 响应,由 collect-traffic.sh 自动生成
# 文件命名格式clones-YYYY-MM-DD.json / views-YYYY-MM-DD.json / repo-YYYY-MM-DD.json
@@ -1 +0,0 @@
{"count":2109,"uniques":886,"clones":[{"timestamp":"2026-03-12T00:00:00Z","count":101,"uniques":61},{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109}]}
@@ -1 +0,0 @@
{"count":2109,"uniques":886,"clones":[{"timestamp":"2026-03-12T00:00:00Z","count":101,"uniques":61},{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109}]}
@@ -1 +0,0 @@
{"count":2248,"uniques":900,"clones":[{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109},{"timestamp":"2026-03-26T00:00:00Z","count":240,"uniques":124}]}
@@ -1 +0,0 @@
{"count":2265,"uniques":892,"clones":[{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109},{"timestamp":"2026-03-26T00:00:00Z","count":240,"uniques":124},{"timestamp":"2026-03-27T00:00:00Z","count":160,"uniques":98}]}
@@ -1 +0,0 @@
{"count":2297,"uniques":918,"clones":[{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109},{"timestamp":"2026-03-26T00:00:00Z","count":240,"uniques":124},{"timestamp":"2026-03-27T00:00:00Z","count":160,"uniques":98},{"timestamp":"2026-03-28T00:00:00Z","count":91,"uniques":56}]}
@@ -1 +0,0 @@
{"forks":4,"stars":37}
@@ -1 +0,0 @@
{"forks":4,"stars":37}
@@ -1 +0,0 @@
{"forks":4,"stars":37}
@@ -1 +0,0 @@
{"forks":4,"stars":37}
@@ -1 +0,0 @@
{"forks":4,"stars":37}
@@ -1 +0,0 @@
{"count":1800,"uniques":692,"views":[{"timestamp":"2026-03-12T00:00:00Z","count":118,"uniques":38},{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43}]}
@@ -1 +0,0 @@
{"count":1800,"uniques":692,"views":[{"timestamp":"2026-03-12T00:00:00Z","count":118,"uniques":38},{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43}]}
@@ -1 +0,0 @@
{"count":1837,"uniques":707,"views":[{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43},{"timestamp":"2026-03-26T00:00:00Z","count":155,"uniques":42}]}
@@ -1 +0,0 @@
{"count":1779,"uniques":685,"views":[{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43},{"timestamp":"2026-03-26T00:00:00Z","count":155,"uniques":42},{"timestamp":"2026-03-27T00:00:00Z","count":92,"uniques":44}]}
@@ -1 +0,0 @@
{"count":1788,"uniques":681,"views":[{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43},{"timestamp":"2026-03-26T00:00:00Z","count":155,"uniques":42},{"timestamp":"2026-03-27T00:00:00Z","count":92,"uniques":44},{"timestamp":"2026-03-28T00:00:00Z","count":62,"uniques":15}]}
-1
View File
@@ -1 +0,0 @@
{"count":2109,"uniques":886,"clones":[{"timestamp":"2026-03-12T00:00:00Z","count":101,"uniques":61},{"timestamp":"2026-03-13T00:00:00Z","count":143,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":59,"uniques":26},{"timestamp":"2026-03-15T00:00:00Z","count":57,"uniques":30},{"timestamp":"2026-03-16T00:00:00Z","count":118,"uniques":57},{"timestamp":"2026-03-17T00:00:00Z","count":180,"uniques":103},{"timestamp":"2026-03-18T00:00:00Z","count":232,"uniques":123},{"timestamp":"2026-03-19T00:00:00Z","count":275,"uniques":135},{"timestamp":"2026-03-20T00:00:00Z","count":180,"uniques":106},{"timestamp":"2026-03-21T00:00:00Z","count":58,"uniques":30},{"timestamp":"2026-03-22T00:00:00Z","count":75,"uniques":42},{"timestamp":"2026-03-23T00:00:00Z","count":226,"uniques":132},{"timestamp":"2026-03-24T00:00:00Z","count":202,"uniques":120},{"timestamp":"2026-03-25T00:00:00Z","count":203,"uniques":109}]}
-1
View File
@@ -1 +0,0 @@
{"forks":4,"stars":37}
-1
View File
@@ -1 +0,0 @@
{"count":1800,"uniques":692,"views":[{"timestamp":"2026-03-12T00:00:00Z","count":118,"uniques":38},{"timestamp":"2026-03-13T00:00:00Z","count":150,"uniques":75},{"timestamp":"2026-03-14T00:00:00Z","count":53,"uniques":28},{"timestamp":"2026-03-15T00:00:00Z","count":73,"uniques":20},{"timestamp":"2026-03-16T00:00:00Z","count":168,"uniques":56},{"timestamp":"2026-03-17T00:00:00Z","count":198,"uniques":72},{"timestamp":"2026-03-18T00:00:00Z","count":243,"uniques":121},{"timestamp":"2026-03-19T00:00:00Z","count":121,"uniques":49},{"timestamp":"2026-03-20T00:00:00Z","count":108,"uniques":51},{"timestamp":"2026-03-21T00:00:00Z","count":70,"uniques":27},{"timestamp":"2026-03-22T00:00:00Z","count":97,"uniques":48},{"timestamp":"2026-03-23T00:00:00Z","count":202,"uniques":91},{"timestamp":"2026-03-24T00:00:00Z","count":112,"uniques":63},{"timestamp":"2026-03-25T00:00:00Z","count":87,"uniques":43}]}