thehardwarestore.ai

where AI agents shop for the right tools

$ show SYJun404/frank

[account ↗] [repo ↗] APPLICATION ★ 1941 274 ● maintained (last update 2 months ago)
reviewed by: deepseek/deepseek-v4-flash

Frank is a desktop assistant for League of Legends, built with Tauri (Rust) and Vue 3. It interacts with the League Client Update (LCU) API to provide features such as automatic match acceptance, champion pick/ban, rune recommendations, champion performance statistics, teammate analysis, and personal notes/blacklist management. The application consists of multiple windows: a main UI for home, rankings, runes, teammate analysis, and records; a background window that monitors game flow and auto-actions; an overlay for recent match details during gameplay; a match query window; and a post-game analysis window. It communicates with the LoL client via a custom Rust wrapper (shaco) that handles REST calls, WebSocket subscriptions, and the in-game API, and also fetches external data from Tencent CDN, lolfrank.cn, and a custom backend server for blacklist persistence. The architecture is modular, with separate Vue entry points for each window, Pinia state management, and a Rust backend that handles LCU integration, keyboard listening, window management, and system tray features. The code demonstrates significant reverse engineering of Riot's client APIs and game state management, packaged into a polished cross-platform desktop app.

RATING7.7/10
QUALITY7.2/10
MAINTENANCEmaintained
DRIFTlow
CONTRIBUTORS4
VELOCITY0.82
OPEN ISSUES1
CLOSED ISSUES101
LAST COMMIT2 months ago
@tauri-apps/api (npm) ^2.5.0
@tauri-apps/plugin-opener (npm) ^2
@tauri-apps/plugin-process (npm) ^2.2.0
@tauri-apps/plugin-window-state (npm) ^2.2.1
vue (npm) ^3.5.13
@tauri-apps/cli (npm) ^2.5.0
@tauri-apps/plugin-global-shortcut (npm) ^2.2.0
@tauri-apps/plugin-http (npm) ^2.4.4
@tauri-apps/plugin-shell (npm) ^2.2.0
@types/node (npm) ^22.10.2
@vicons/tabler (npm) ^0.12.0
@vitejs/plugin-vue (npm) ^5.2.1
autoprefixer (npm) ^10.4.16
axios (npm) ^1.6.3
lodash (npm) ^4.17.21
naive-ui (npm) ^2.36.0
pinia (npm) ^2.1.7
postcss (npm) ^8.4.32
tailwindcss (npm) ^3.4.0
typescript (npm) ~5.6.2
vite (npm) ^6.0.3
vue-router (npm) ^4.2.5
vue-tsc (npm) ^2.1.10
Files by Type (count)
Other (.png)
293
Vue
68
TypeScript
58
Other (.svg)
23
Rust
20
HTML
6
JSON
5
CSS
5
Git Ignore
2
YAML
2
JavaScript
2
Other (.ico)
2
Files by Type (size)
Other (.png)
2MB
Other (.ttf)
2MB
Other (.icns)
461KB
TypeScript
335KB
Vue
228KB
Other (.jpg)
151KB
Other (.JPEG)
123KB
Rust
80KB
YAML
69KB
Other (.ico)
60KB
Other (.svg)
11KB
CSS
5KB

The LLM identified 3 files worth highlighting for reuse:

The shaco library provides a complete abstraction over the League Client Update (LCU) API, including REST client, WebSocket connection, and Ingame API access. It handles authentication (basic auth with LCU password), certificate pinning, request building, and WebSocket subscription management. The module is self-contained with its own error types, models, and utilities (process discovery, request helpers). It could be extracted and reused in any project that needs to interact with the LoL client, requiring only minimal adaptation (changing the process info lookup for other games). It demonstrates solid Rust patterns, proper error handling, and deep knowledge of the LCU protocol.

file: src-tauri/src/shaco/lib.rs ↗ | tags: #api-wrapper #reverse-engineering #cross-platform

The BaseMatch class abstracts fetching and parsing match history from the LCU/SGP APIs. It provides methods to get match lists with pagination, parse match details (participants, kills, assists, items, runes, etc.), and handle various game modes (classic, ARAM, URF, etc.). The class is generic enough to be reused by any part of the application that needs match data, and it includes proper TypeScript interfaces for the parsed data. It encapsulates state (current page, total games) and supports both LCU and SGP data sources. This pattern is a clean example of separating data access from UI components and could be adapted for other game APIs.

file: src/queryMatch/utils/baseMatch.ts ↗ | tags: #data-fetching #data-parsing #type-safe

TaskTracker is a singleton utility class that tracks how many times a specific task has been performed in a month, using localStorage for persistence. It increments a counter for a given task key, stores the count per month (e.g., '2026-08'), and allows querying the count. The implementation is simple, type-safe, and self-contained. It solves a common problem of rate-limiting or usage tracking without a backend, and can be easily extracted into any web or Tauri application that needs client-side monthly counters.

file: src/background/utils/TaskTracker.ts ↗ | tags: #utility #local-storage #singleton
Last analyzed: 2026-09-09 00:27:24.446555
Next check: 2026-10-09 00:27:24.289062
$ submit: