Hear every voice in your language
Live AI dubbing and bilingual subtitles for any video. Free, open source and private by design.
Sokker++ es una extensión ultraligera para Google Chrome y navegadores basados en Chromium, diseñada para inyectar analíticas avanzadas
Translation pending
PluginsTypeScript · JavaScriptGitHub @manunolySelf-installOwner unconfirmed
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Installable projects can be verified without a deployment domain. Use GitHub sign-in for a personal repository, or the repository verification file above for an organization repository.
Ask about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗English · Español
Sokker++ is a Chromium extension that adds skill history and junior talent estimates to Sokker.org. It is an unofficial fan project, not affiliated with Sokker.
It uses TypeScript, native browser APIs, and local IndexedDB storage. Charts use Canvas without a charting library.
/app/squad/) green (increase) or red (decrease).<canvas> API, no heavy external libraries.The Manifest V3 content script separates same-origin API access (src/core/api.ts), IndexedDB persistence (src/core/repository.ts and src/core/juniorRepository.ts), synchronization (src/core/sync.ts and src/core/juniorSync.ts), and page integration (src/content/). The build uses Vite; runtime charts use the browser's Canvas API.
The source code is split to maximize testability and separation of concerns:
sokker-plus-plus/
├── manifest.json # Manifest V3 configuration
├── popup/ # Extension UI (Import/Export/manual Sync)
└── src/
├── content/ # DOM interaction (side effects)
│ ├── main.ts # Content script entry point
│ ├── observer.ts # MutationObserver for the Sokker SPA
│ ├── ui.ts # Visual table mutations
│ ├── tooltip.ts # First-team hover and focus lifecycle
│ ├── playerCard.ts # First-team summary, skill card, and weekly table
│ ├── playerLocale.ts # Ten first-team card languages
│ ├── i18n.ts # Incoming skill-label normalization
│ ├── juniorPage.ts # Eligible routes and junior-name interaction
│ ├── juniorCard.ts # Local-data hover card
│ └── juniorLocale.ts # Ten UI languages with English fallback
├── core/ # Business logic and data
│ ├── api.ts # Pure fetchers for sokker.org/api (same origin)
│ ├── repository.ts # Functional IndexedDB wrapper (closures)
│ ├── sync.ts # Orchestrator: compares weeks and decides what to fetch
│ ├── gapDetector.ts # Detects missing weeks in the history
│ ├── talent.ts # Focused per-skill training counts
│ ├── playerTimeline.ts # Report weeks and observed skill levels
│ ├── levelTrend.ts # Shared regression math
│ ├── juniorSync.ts # Weekly junior queue and roster decisions
│ ├── juniorRepository.ts # Junior records in the shared IndexedDB
│ ├── juniorTalent.ts # Junior curve estimate
│ └── trainingReport.ts # Per-player training report
├── types/ # Shared TypeScript types
├── ui-components/ # Pure presentation
│ ├── playerSkillCanvas.ts # First-team skill chart (Canvas API)
│ ├── playerSkillExport.ts # First-team PNG adapter
│ ├── chartExport.ts # Shared PNG compositor
│ └── juniorCanvas.ts # Junior chart (Canvas API)
└── utils/ # Utilities
├── scheduleIdle.ts # Schedules work during idle time
└── escapeHtml.ts # Escapes values rendered as HTML
npm ci # install dependencies
npm run dev # build in watch mode
npm run build # generates dist/ (load it as "unpacked" in chrome://extensions)
npm run package # build + zip dist/ into documentation/sokker-plus-plus.zip
npx vitest run # tests
npx tsc --noEmit # typecheck
npm run package currently needs POSIX rm and zip; on Windows use a shell that provides them. Loading dist/ only needs npm run build.