Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions backend/export_history_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -3543,7 +3543,13 @@ def _build_compact_frontend_payload(
)

snapshots = compact.get("snapshots")
snapshot_dates = None
if isinstance(snapshots, list):
snapshot_dates = {
item.get("date")
for item in snapshots
if isinstance(item, dict) and item.get("date")
}
latest_snapshot = snapshots[-1] if snapshots else None
previous_snapshot = snapshots[-2] if len(snapshots) >= 2 else None
if (
Expand All @@ -3561,6 +3567,37 @@ def _build_compact_frontend_payload(
if "has_historical_comparison" in compact:
compact["has_historical_comparison"] = previous_snapshot is not None

if snapshot_dates and isinstance(compact.get("series"), list):
filtered_series = []
for item in compact["series"]:
if not isinstance(item, dict):
filtered_series.append(item)
continue

points = item.get("points")
if not isinstance(points, list):
filtered_series.append(item)
continue

kept_points = [
point
for point in points
if isinstance(point, dict) and point.get("date") in snapshot_dates
]
if not kept_points:
continue

normalized_item = dict(item)
normalized_item["points"] = kept_points
tech_name = normalized_item.get("tecnologia")
if isinstance(tech_name, str) and tech_name.strip():
normalized_name = _normalize_trend_technology_name(tech_name)
normalized_item["tecnologia"] = normalized_name
normalized_item["slug"] = _technology_slug(normalized_name)
filtered_series.append(normalized_item)

compact["series"] = filtered_series

return compact

if isinstance(payload, list):
Expand Down
2 changes: 1 addition & 1 deletion datos/github_ai_repos_insights.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
total_repos_analizados,repos_ai_detectados,porcentaje_ai,mes_pico_ai,repos_mes_pico_ai,top_keywords_ai,top_repos_ai
1000,550,55.0,2025-04,69,ai:560 | claude:193 | llm:61 | gemini:44 | prompt:39,openclaw/openclaw | affaan-m/everything-claude-code | anthropics/skills | google-gemini/gemini-cli | openai/codex
1000,548,54.8,2025-04,66,ai:552 | claude:206 | llm:60 | gemini:41 | prompt:38,openclaw/openclaw | affaan-m/everything-claude-code | anthropics/skills | google-gemini/gemini-cli | openai/codex
10 changes: 5 additions & 5 deletions datos/github_commits_frameworks.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
framework,repo,commits_2025,active_contributors,merged_prs,closed_issues,releases_count,commits_prev,delta_commits,growth_pct,trend_direction,ranking
Next.js,vercel/next.js,5000,300,5036,2237,636,,,,,1
Angular,angular/angular,4336,277,2167,2116,146,,,,,2
React,facebook/react,1280,86,1281,779,15,,,,,3
Svelte,sveltejs/svelte,987,111,1004,790,202,,,,,4
Vue 3,vuejs/core,393,83,691,403,32,,,,,5
Next.js,vercel/next.js,5000,298,5055,2231,632,5000,0,0.0,estable,1
Angular,angular/angular,4312,277,2221,2119,146,4336,-24,-0.55,cayendo,2
React,facebook/react,1252,88,1253,781,15,1280,-28,-2.19,cayendo,3
Svelte,sveltejs/svelte,992,111,1009,761,202,987,5,0.51,creciendo,4
Vue 3,vuejs/core,410,87,711,412,34,393,17,4.33,creciendo,5
26 changes: 13 additions & 13 deletions datos/github_commits_frameworks_monthly.csv
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
framework,repo,month,commits
Angular,angular/angular,2025-03,265
Angular,angular/angular,2025-03,96
Angular,angular/angular,2025-04,252
Angular,angular/angular,2025-05,438
Angular,angular/angular,2025-06,300
Expand All @@ -8,12 +8,12 @@ Angular,angular/angular,2025-08,308
Angular,angular/angular,2025-09,389
Angular,angular/angular,2025-10,406
Angular,angular/angular,2025-11,497
Angular,angular/angular,2025-12,319
Angular,angular/angular,2026-01,344
Angular,angular/angular,2026-02,277
Angular,angular/angular,2026-03,128
Angular,angular/angular,2025-12,321
Angular,angular/angular,2026-01,353
Angular,angular/angular,2026-02,292
Angular,angular/angular,2026-03,286
Next.js,vercel/next.js,2025-03,0
Next.js,vercel/next.js,2025-04,293
Next.js,vercel/next.js,2025-04,77
Next.js,vercel/next.js,2025-05,494
Next.js,vercel/next.js,2025-06,545
Next.js,vercel/next.js,2025-07,536
Expand All @@ -24,8 +24,8 @@ Next.js,vercel/next.js,2025-11,305
Next.js,vercel/next.js,2025-12,253
Next.js,vercel/next.js,2026-01,438
Next.js,vercel/next.js,2026-02,435
Next.js,vercel/next.js,2026-03,199
React,facebook/react,2025-03,133
Next.js,vercel/next.js,2026-03,415
React,facebook/react,2025-03,12
React,facebook/react,2025-04,108
React,facebook/react,2025-05,111
React,facebook/react,2025-06,125
Expand All @@ -37,8 +37,8 @@ React,facebook/react,2025-11,81
React,facebook/react,2025-12,39
React,facebook/react,2026-01,65
React,facebook/react,2026-02,87
React,facebook/react,2026-03,22
Svelte,sveltejs/svelte,2025-03,54
React,facebook/react,2026-03,37
Svelte,sveltejs/svelte,2025-03,12
Svelte,sveltejs/svelte,2025-04,73
Svelte,sveltejs/svelte,2025-05,94
Svelte,sveltejs/svelte,2025-06,71
Expand All @@ -50,8 +50,8 @@ Svelte,sveltejs/svelte,2025-11,63
Svelte,sveltejs/svelte,2025-12,42
Svelte,sveltejs/svelte,2026-01,96
Svelte,sveltejs/svelte,2026-02,129
Svelte,sveltejs/svelte,2026-03,42
Vue 3,vuejs/core,2025-03,26
Svelte,sveltejs/svelte,2026-03,75
Vue 3,vuejs/core,2025-03,6
Vue 3,vuejs/core,2025-04,17
Vue 3,vuejs/core,2025-05,59
Vue 3,vuejs/core,2025-06,31
Expand All @@ -63,4 +63,4 @@ Vue 3,vuejs/core,2025-11,42
Vue 3,vuejs/core,2025-12,28
Vue 3,vuejs/core,2026-01,28
Vue 3,vuejs/core,2026-02,37
Vue 3,vuejs/core,2026-03,19
Vue 3,vuejs/core,2026-03,44
Loading
Loading