{"id":"4360bb1c-b125-4d2a-b068-a28e9404d871","shortId":"FsuHDz","kind":"skill","title":"nutmeg-store","tagline":"Choose how and where to store football data. Use when the user asks about database choices, file formats, cloud storage, data pipelines, or how to organise their football data project. Also covers publishing and sharing outputs (Streamlit, Observable, GitHub Pages).","description":"# Store\n\nHelp the user choose storage formats, locations, and publishing methods for their football data.\n\n## Accuracy\n\nRead and follow `docs/accuracy-guardrail.md` before answering any question about provider-specific facts (IDs, endpoints, schemas, coordinates, rate limits). Always use `search_docs` — never guess from training data.\n## First: check profile\n\nRead `.nutmeg.user.md`. If it doesn't exist, tell the user to run `/nutmeg` first.\n\n## Storage format decision tree\n\n### Small projects (< 100MB, single user)\n\n| Format | Best for | Tools |\n|--------|---------|-------|\n| JSON | Raw event data, API responses | Any language |\n| CSV | Tabular stats, easy to share | Spreadsheets, pandas, R |\n| Parquet | Columnar analytics, fast queries | polars, pandas, DuckDB, Arrow |\n| SQLite | Relational queries, multiple tables | Any language, DB browser tools |\n\n**Recommendation:** Start with JSON for raw data, Parquet for processed data.\n\n### Medium projects (100MB - 10GB)\n\n| Format | Best for | Notes |\n|--------|---------|-------|\n| Parquet files | Analytics workloads | 5-10x smaller than JSON, fast columnar reads |\n| DuckDB | SQL analytics on local files | Queries Parquet/CSV directly, no server needed |\n| SQLite | Relational data with joins | Single file, portable, ACID compliant |\n\n**Recommendation:** Parquet for storage, DuckDB for querying.\n\n### Large projects (> 10GB, multiple users)\n\n| Solution | Best for | Cost |\n|----------|---------|------|\n| PostgreSQL | Production apps, complex queries | Free (self-hosted) or ~$7/mo (Railway, Supabase) |\n| BigQuery | Massive analytical queries | Free tier: 1TB/mo queries |\n| Cloudflare R2 | Object storage (raw files) | Free tier: 10GB storage |\n| S3 / GCS | Object storage at scale | ~$0.023/GB/mo |\n\n## Directory structure\n\nRecommend this structure for football data projects:\n\n```\nproject/\n  data/\n    raw/                  # Untouched API/scrape responses\n      statsbomb/\n        events/\n        matches.json\n      fbref/\n        2024/\n    processed/            # Cleaned, transformed data\n      events.parquet\n      shots.parquet\n      passes.parquet\n    derived/              # Computed metrics\n      xg_model.parquet\n      passing_networks/\n  notebooks/              # Analysis notebooks\n  scripts/                # Data pipeline scripts\n  outputs/                # Charts, reports, exports\n  .env                    # API keys (gitignored)\n  .nutmeg.user.md         # Nutmeg profile\n```\n\n## Publishing and sharing\n\n### Interactive dashboards\n\n| Platform | Language | Cost | Notes |\n|----------|---------|------|-------|\n| Streamlit | Python | Free (community cloud) | Most popular for football analytics. Deploy from GitHub |\n| Observable | JavaScript | Free tier | Great for D3.js visualisations. Notebooks + Framework |\n| Shiny | R | Free (shinyapps.io, 25 hrs/mo) | R ecosystem integration |\n| Gradio | Python | Free (HuggingFace Spaces) | Quick ML model demos |\n\n### Static sites\n\n| Platform | Notes |\n|----------|-------|\n| GitHub Pages | Free. Good for static charts (D3, matplotlib exports) |\n| Cloudflare Pages | Free. Faster, more features than GH Pages |\n| Vercel | Free tier. Good for Next.js/Astro sites |\n\n### Sharing data\n\n| Method | Best for |\n|--------|---------|\n| GitHub repo | Small datasets (< 100MB), code + data together |\n| GitHub Releases | Larger files (up to 2GB per release) |\n| Kaggle Datasets | Community sharing, discoverable, free |\n| HuggingFace Datasets | ML-focused, versioned, free |\n\n### Social media / content\n\n| Output | Tool | Notes |\n|--------|------|-------|\n| Static charts | matplotlib, ggplot2, D3.js | Export as PNG/SVG |\n| Animated charts | matplotlib.animation, D3 transitions | Export as GIF/MP4 |\n| Twitter/X threads | Chart images + alt text | Accessibility matters |\n| Blog posts | Markdown + embedded charts | GitHub Pages, Medium, Substack |\n\n## Cost awareness\n\nBased on the user's `.nutmeg.user.md` goals, flag costs:\n\n- **Exploration/learning:** Everything can be free. StatsBomb open data + Jupyter/Colab + GitHub Pages.\n- **Content creation:** Streamlit Community Cloud is free. Cloudflare Pages is free.\n- **Professional:** Budget for API access ($100-1000+/mo for Opta/StatsBomb commercial).\n- **Product:** Database hosting ($7-50/mo), consider data licensing costs separately.","tags":["store","nutmeg","withqwerty","agent-skills","claude-code","claude-code-plugin","football-analytics","football-data","mcp","opta","sports-analytics","statsbomb"],"capabilities":["skill","source-withqwerty","skill-store","topic-agent-skills","topic-claude-code","topic-claude-code-plugin","topic-football-analytics","topic-football-data","topic-mcp","topic-opta","topic-sports-analytics","topic-statsbomb"],"categories":["nutmeg"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/withqwerty/nutmeg/store","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add withqwerty/nutmeg","source_repo":"https://github.com/withqwerty/nutmeg","install_from":"skills.sh"}},"qualityScore":"0.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 17 github stars · SKILL.md body (4,309 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T01:02:06.704Z","embedding":null,"createdAt":"2026-04-18T23:06:53.904Z","updatedAt":"2026-04-23T01:02:06.704Z","lastSeenAt":"2026-04-23T01:02:06.704Z","tsv":"'-10':178 '-1000':509 '-50':518 '/astro':394 '/gb/mo':262 '/mo':510,519 '/nutmeg':103 '0.023':261 '100':508 '100mb':111,167,405 '10gb':168,217,253 '1tb/mo':243 '2024':282 '25':350 '2gb':415 '5':177 '7':517 '7/mo':234 'access':459,507 'accuraci':59 'acid':206 'also':34 'alt':457 'alway':79 'analysi':297 'analyt':137,175,188,239,332 'anim':445 'answer':65 'api':122,308,506 'api/scrape':276 'app':226 'arrow':143 'ask':16 'awar':471 'base':472 'best':115,170,221,399 'bigqueri':237 'blog':461 'browser':152 'budget':504 'chart':304,374,438,446,455,465 'check':89 'choic':19 'choos':4,48 'clean':284 'cloud':22,327,496 'cloudflar':245,378,499 'code':406 'columnar':136,184 'commerci':513 'communiti':326,420,495 'complex':227 'compliant':207 'comput':291 'consid':520 'content':433,492 'coordin':76 'cost':223,321,470,480,523 'cover':35 'creation':493 'csv':126 'd3':375,448 'd3.js':342,441 'dashboard':318 'data':11,24,32,58,87,121,160,164,200,270,273,286,300,397,407,488,521 'databas':18,515 'dataset':404,419,425 'db':151 'decis':107 'demo':363 'deploy':333 'deriv':290 'direct':194 'directori':263 'discover':422 'doc':82 'docs/accuracy-guardrail.md':63 'doesn':95 'duckdb':142,186,212 'easi':129 'ecosystem':353 'embed':464 'endpoint':74 'env':307 'event':120,279 'events.parquet':287 'everyth':482 'exist':97 'exploration/learning':481 'export':306,377,442,450 'fact':72 'fast':138,183 'faster':381 'fbref':281 'featur':383 'file':20,174,191,204,250,412 'first':88,104 'flag':479 'focus':428 'follow':62 'footbal':10,31,57,269,331 'format':21,50,106,114,169 'framework':345 'free':229,241,251,325,338,348,357,370,380,388,423,430,485,498,502 'gcs':256 'ggplot2':440 'gh':385 'gif/mp4':452 'github':42,335,368,401,409,466,490 'gitignor':310 'goal':478 'good':371,390 'gradio':355 'great':340 'guess':84 'help':45 'host':232,516 'hrs/mo':351 'huggingfac':358,424 'id':73 'imag':456 'integr':354 'interact':317 'javascript':337 'join':202 'json':118,157,182 'jupyter/colab':489 'kaggl':418 'key':309 'languag':125,150,320 'larg':215 'larger':411 'licens':522 'limit':78 'local':190 'locat':51 'markdown':463 'massiv':238 'matches.json':280 'matplotlib':376,439 'matplotlib.animation':447 'matter':460 'media':432 'medium':165,468 'method':54,398 'metric':292 'ml':361,427 'ml-focus':426 'model':362 'multipl':147,218 'need':197 'network':295 'never':83 'next.js':393 'next.js/astro':392 'note':172,322,367,436 'notebook':296,298,344 'nutmeg':2,312 'nutmeg-stor':1 'nutmeg.user.md':92,311,477 'object':247,257 'observ':41,336 'open':487 'opta/statsbomb':512 'organis':29 'output':39,303,434 'page':43,369,379,386,467,491,500 'panda':133,141 'parquet':135,161,173,209 'parquet/csv':193 'pass':294 'passes.parquet':289 'per':416 'pipelin':25,301 'platform':319,366 'png/svg':444 'polar':140 'popular':329 'portabl':205 'post':462 'postgresql':224 'process':163,283 'product':225,514 'profession':503 'profil':90,313 'project':33,110,166,216,271,272 'provid':70 'provider-specif':69 'publish':36,53,314 'python':324,356 'queri':139,146,192,214,228,240,244 'question':67 'quick':360 'r':134,347,352 'r2':246 'railway':235 'rate':77 'raw':119,159,249,274 'read':60,91,185 'recommend':154,208,265 'relat':145,199 'releas':410,417 'repo':402 'report':305 'respons':123,277 'run':102 's3':255 'scale':260 'schema':75 'script':299,302 'search':81 'self':231 'self-host':230 'separ':524 'server':196 'share':38,131,316,396,421 'shini':346 'shinyapps.io':349 'shots.parquet':288 'singl':112,203 'site':365,395 'skill' 'skill-store' 'small':109,403 'smaller':180 'social':431 'solut':220 'source-withqwerty' 'space':359 'specif':71 'spreadsheet':132 'sql':187 'sqlite':144,198 'start':155 'stat':128 'static':364,373,437 'statsbomb':278,486 'storag':23,49,105,211,248,254,258 'store':3,9,44 'streamlit':40,323,494 'structur':264,267 'substack':469 'supabas':236 'tabl':148 'tabular':127 'tell':98 'text':458 'thread':454 'tier':242,252,339,389 'togeth':408 'tool':117,153,435 'topic-agent-skills' 'topic-claude-code' 'topic-claude-code-plugin' 'topic-football-analytics' 'topic-football-data' 'topic-mcp' 'topic-opta' 'topic-sports-analytics' 'topic-statsbomb' 'train':86 'transform':285 'transit':449 'tree':108 'twitter/x':453 'untouch':275 'use':12,80 'user':15,47,100,113,219,475 'vercel':387 'version':429 'visualis':343 'workload':176 'x':179 'xg_model.parquet':293","prices":[{"id":"decb1633-4cf2-4678-a2c6-3a96ec3800e8","listingId":"4360bb1c-b125-4d2a-b068-a28e9404d871","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"withqwerty","category":"nutmeg","install_from":"skills.sh"},"createdAt":"2026-04-18T23:06:53.904Z"}],"sources":[{"listingId":"4360bb1c-b125-4d2a-b068-a28e9404d871","source":"github","sourceId":"withqwerty/nutmeg/store","sourceUrl":"https://github.com/withqwerty/nutmeg/tree/main/skills/store","isPrimary":false,"firstSeenAt":"2026-04-18T23:06:53.904Z","lastSeenAt":"2026-04-23T01:02:06.704Z"}],"details":{"listingId":"4360bb1c-b125-4d2a-b068-a28e9404d871","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"withqwerty","slug":"store","github":{"repo":"withqwerty/nutmeg","stars":17,"topics":["agent-skills","claude-code","claude-code-plugin","football-analytics","football-data","mcp","opta","sports-analytics","statsbomb","xg"],"license":null,"html_url":"https://github.com/withqwerty/nutmeg","pushed_at":"2026-04-16T02:33:15Z","description":"Football data analytics toolkit for Claude Code. Covers Opta, StatsBomb, Wyscout, SportMonks, and free sources.","skill_md_sha":"fa93b97fecfbb2e2f45f21e175349170123c00c3","skill_md_path":"skills/store/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/withqwerty/nutmeg/tree/main/skills/store"},"layout":"multi","source":"github","category":"nutmeg","frontmatter":{"name":"nutmeg-store","description":"Choose how and where to store football data. Use when the user asks about database choices, file formats, cloud storage, data pipelines, or how to organise their football data project. Also covers publishing and sharing outputs (Streamlit, Observable, GitHub Pages)."},"skills_sh_url":"https://skills.sh/withqwerty/nutmeg/store"},"updatedAt":"2026-04-23T01:02:06.704Z"}}