# VYNDR — Clean-Room Design Log

This log documents every external codebase studied during VYNDR's
development. It proves independent creation — no code was copied from any
external source. When we examined a project under a copyleft license
(GPL/AGPL/LGPL) we restricted the study to **concept and behavior**, not
implementation.

| Date       | Source                                       | License        | What Was Studied                                                                | Insight (Our Own Words)                                                                                                                                                                | Code Copied? |
| ---------- | -------------------------------------------- | -------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| 2026-05-24 | nba_api (github.com/swar/nba_api)            | MIT            | API wrapper patterns for stats.nba.com endpoints                                | NBA.com exposes hidden JSON endpoints with rate limiting; our adapter calls these directly with our own session + retry layer.                                                          | No           |
| 2026-05-24 | pybaseball (github.com/jldbc/pybaseball)     | MIT            | Statcast data access patterns                                                   | Baseball Savant provides pitch-level data via public CSV endpoints; we shape our own query layer on top of those endpoints.                                                              | No           |
| 2026-05-28 | OpenBB (github.com/OpenBB-finance/OpenBB)    | AGPL-3.0 ⚠️    | UI layout patterns for dense financial data display ONLY — no code studied      | Terminal-style UI with panel-based layout suits intelligence products; applied as a design pattern only.                                                                                | No — concept observation, no code read |
| 2026-06-05 | River (github.com/online-ml/river)           | BSD-3-Clause   | Incremental ML API design, ADWIN drift detection algorithm                      | learn_one/predict_one interface enables single-sample model updates; ADWIN splits an error window for drift detection.                                                                  | No           |
| 2026-06-05 | kyleskom/NBA-ML-Sports-Betting               | Unlicensed ⚠️  | XGBoost + NN dual-model approach, Kelly Criterion sizing                        | Two independent model architectures voting together increase robustness; sigmoid calibration converts raw scores to probabilities.                                                       | No           |
| 2026-06-05 | Lisandro79/BeatTheBookie                     | GPL-3.0 ⚠️     | Market consensus deviation concept ONLY                                         | When one book's line diverges from consensus, it signals either sharp action or a trap.                                                                                                  | No — concept only |
| 2026-06-05 | charlesmalafosse/sports-betting-customloss   | MIT            | Custom loss function concept                                                    | Training loss should weight correct predictions by implied probability — a correct call on +150 is more valuable than one on -200.                                                       | No           |
| 2026-06-05 | AagamanVarma/DriftGuard                      | Unknown        | Champion-challenger deployment pattern                                          | Challenger model earns promotion by outperforming champion on holdout set; a model pointer file enables atomic swap.                                                                     | No           |
| 2026-06-06 | Serwist (serwist.pages.dev)                  | MIT            | Service worker integration with Next.js                                         | `@serwist/next` wraps next.config and injects a service worker entry; `defaultCache` provides reasonable runtime caching presets out of the box.                                         | No — documentation read; code is our own SW wiring |
| 2026-06-06 | web-push (github.com/web-push-libs/web-push) | MIT            | VAPID-based push delivery semantics                                             | A 410 Gone response on a subscription is the signal to delete it permanently; other statuses are transient.                                                                              | No           |
| 2026-06-06 | SharpAPI (sharpapi.com)                      | Commercial     | API surface only (docs read, no source available)                               | Player-prop endpoints expose over/under odds per book; consensus is computed client-side by aggregating across books.                                                                     | No — commercial API, no code |
| 2026-06-06 | OddsPapi (oddspapi.io)                       | Commercial     | API surface only (docs read, no source available)                               | Pinnacle closing-line endpoint requires a bookmaker filter; the docs make no guarantee about latency between game start and line availability.                                            | No — commercial API, no code |
| 2026-06-06 | ParlayAPI (parlayapi.io)                     | Commercial     | API surface only (docs read, no source available)                               | Free tier exposes 3.7M historical prop closing records via a credit-based bucket — careful pacing is mandatory because credits don't refresh mid-month.                                   | No — commercial API, no code |
| 2026-06-06 | PropOdds (prop-odds.com)                     | Commercial     | API surface only (docs read, no source available)                               | Specializes in player props specifically; useful as a second consensus point so line-divergence trap signal isn't a two-book artifact.                                                    | No — commercial API, no code |
| 2026-06-06 | College Football Data (collegefootballdata.com) | Free / personal API key | API surface only (docs read, no source available)                       | Talent composites + PPA fill the gap nba_api / ESPN don't cover for college. Bearer-token auth keeps the key off URL logs.                                                                | No — commercial-style API, no code |
| 2026-06-06 | Sports-Reference (basketball-reference.com)  | Site TOS (HTML scraping with credit) | Public HTML tables only — referee + coach index pages       | Data-stat attributes on table cells are the cleanest extraction key. We rate-limit at 1 req per 5s and identify with a User-Agent so the site can contact us if anything's off.           | No — read public HTML, parsed table data only |
| 2026-06-06 | OpenRouter (openrouter.ai)                   | Commercial     | API surface only (docs read, no source available)                               | OpenAI-compatible /chat/completions endpoint with a model-selector header. Bearer auth keeps the key off URLs. Free-tier per-model rate limits are not documented per-account; conservative 20/min budget is safer than relying on 429 retry.        | No — commercial API, no code |

## Template for future entries

```
| YYYY-MM-DD | <source URL> | <license> | <what we studied> | <our own-words insight> | No |
```

## Rules

- **Always log GPL/AGPL/LGPL projects** with the ⚠️ marker and limit study to
  concept observation. Do not read source files line-by-line.
- **Unlicensed code is studied as ideas only.** Without a license the work is
  default copyrighted; we do not duplicate structure.
- **Document the *insight* in our own words.** If an entry reads like a
  paraphrase of the source, rewrite it.
