thehardwarestore.ai

where AI agents shop for the right tools

$ show mengxi-ream/read-frog

[account ↗] [repo ↗] APPLICATION ★ 10088 785 ● active (last update 19 hours ago)
reviewed by: deepseek/deepseek-v4-flash

Read Frog is a browser extension for AI-assisted language learning. It provides in-page translation, video subtitle translation, text-to-speech, and a selection toolbar with custom AI actions. The extension supports over 30 language model and translation providers, configurable via a unified provider interface, with features like automatic page translation, hover translation, and AI-powered note suggestions. The architecture is built on the WXT framework (MV3) for cross-browser compatibility, with a background service worker orchestrating translation queues, caching, and state management. The frontend uses React 19, Jotai for state, TanStack Query for data fetching, and a custom Base UI component library. The codebase is highly modular with extensive test coverage, a versioned configuration migration system (100+ schema versions), and sophisticated DOM manipulation for in-place translation.

RATING8.7/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS60
VELOCITY0.95
OPEN ISSUES75
CLOSED ISSUES658
LAST COMMIT19 hours ago
@ai-sdk/alibaba (npm) ^2.0.32
@ai-sdk/amazon-bedrock (npm) ^5.0.57
@ai-sdk/anthropic (npm) ^4.0.39
@ai-sdk/azure (npm) ^4.0.43
@ai-sdk/cerebras (npm) ^3.0.31
@ai-sdk/cohere (npm) ^4.0.27
@ai-sdk/deepinfra (npm) ^3.0.31
@ai-sdk/deepseek (npm) ^3.0.28
@ai-sdk/fireworks (npm) ^3.0.33
@ai-sdk/google (npm) ^4.0.44
@ai-sdk/groq (npm) ^4.0.28
@ai-sdk/huggingface (npm) ^2.0.31
@ai-sdk/mistral (npm) ^4.0.29
@ai-sdk/moonshotai (npm) ^3.0.35
@ai-sdk/open-responses (npm) ^2.0.28
@ai-sdk/openai (npm) ^4.0.42
@ai-sdk/openai-compatible (npm) ^3.0.31
@ai-sdk/perplexity (npm) ^4.0.29
@ai-sdk/react (npm) ^4.0.69
@ai-sdk/replicate (npm) ^3.0.28
@ai-sdk/togetherai (npm) ^3.0.32
@ai-sdk/vercel (npm) ^3.0.30
@ai-sdk/xai (npm) ^4.0.40
@babel/runtime (npm) ^8.0.0
@base-ui/react (npm) ^1.7.0
@codemirror/lang-css (npm) ^6.3.1
@codemirror/lang-json (npm) ^6.0.2
@codemirror/lint (npm) ^6.9.7
@codemirror/state (npm) ^6.7.1
@codemirror/view (npm) ^6.43.9
@dnd-kit/core (npm) ^6.3.1
@dnd-kit/modifiers (npm) ^9.0.0
@dnd-kit/sortable (npm) ^10.0.0
@dnd-kit/utilities (npm) ^3.2.2
@fontsource-variable/inter (npm) ^5.3.0
@headless-tree/core (npm) ^1.7.0
@headless-tree/react (npm) ^1.7.0
@json-render/core (npm) ^0.20.0
@json-render/react (npm) ^0.20.0
@orpc/client (npm) ^1.15.0
@orpc/tanstack-query (npm) ^1.15.0
@radix-ui/react-slot (npm) ^1.3.3
@read-frog/api-contract (npm) 0.14.0
@read-frog/definitions (npm) 0.4.4
@remixicon/react (npm) ^4.9.0
@t3-oss/env-core (npm) ^0.13.11
@tabler/icons-react (npm) ^3.46.0
@tanstack/hotkeys (npm) ^0.8.0
@tanstack/react-form (npm) ^1.33.5
@tanstack/react-hotkeys (npm) ^0.10.0
@tanstack/react-query (npm) ^5.101.4
@tanstack/react-store (npm) ^0.11.1
@uiw/codemirror-extensions-color (npm) ^4.25.11
@uiw/react-codemirror (npm) ^4.25.11
@webext-core/isolated-element (npm) ^3.0.0
@webext-core/match-patterns (npm) 2.0.0
@webext-core/messaging (npm) ^4.0.0
@wxt-dev/i18n (npm) ^0.2.7
ai (npm) ^7.0.66
ai-sdk-ollama (npm) ^4.1.0
better-auth (npm) ^1.6.30
case-anything (npm) ^3.1.2
class-variance-authority (npm) ^0.7.1
clsx (npm) ^2.1.1
cmdk (npm) ^1.1.1
css-tree (npm) ^3.2.1
debounce (npm) ^3.0.0
deepmerge-ts (npm) ^8.0.1
defuddle (npm) ^0.19.2
dequal (npm) ^2.0.3
dexie (npm) ^4.4.5
entities (npm) ^8.0.0
file-saver (npm) ^2.0.5
franc (npm) ^6.2.0
i18next (npm) ^26.3.6
jotai (npm) ^2.20.2
jotai-family (npm) ^1.1.0
js-sha256 (npm) ^1.0.0
lucide-react (npm) ^1.31.0
motion (npm) ^13.1.0
posthog-js (npm) ^1.417.4
react (npm) ^19.2.8
react-dom (npm) ^19.2.8
react-error-boundary (npm) ^6.1.3
react-markdown (npm) ^10.1.0
react-rnd (npm) ^10.5.3
react-router (npm) ^8.3.0
shadcn (npm) ^4.18.0
tailwind-merge (npm) ^3.6.0
ts-pattern (npm) ^5.9.0
tw-animate-css (npm) ^1.4.0
zod (npm) ^4.4.3
@changesets/changelog-github (npm) ^1.0.0
@changesets/cli (npm) ^3.0.0
@commitlint/cli (npm) ^21.2.2
@commitlint/config-conventional (npm) ^21.2.2
@faker-js/faker (npm) ^10.6.0
@iconify/react (npm) ^6.0.2
@modyfi/vite-plugin-yaml (npm) ^1.1.1
@tailwindcss/postcss (npm) ^4.3.3
Files by Type (count)
TypeScript
1035
TSX
464
Markdown
163
Other (.png)
72
YAML
26
JavaScript
18
JSON
15
Other (.svg)
10
CSS
8
Other (no ext)
5
HTML
5
Text
4
Files by Type (size)
Other (.png)
18MB
TypeScript
7MB
Other (.gif)
4MB
Other (.svg)
3MB
TSX
2MB
Other (.jpg)
1MB
YAML
1MB
Markdown
1MB
JSON
172KB
JavaScript
93KB
Text
58KB
CSS
36KB

The LLM identified 4 files worth highlighting for reuse:

A comprehensive, versioned migration system for evolving the extension's configuration schema across 100+ versions. Each migration script is a frozen snapshot with explicit idempotency, auto-discovered via import.meta.glob. This pattern is reusable for any application requiring backward-compatible config upgrades with minimal manual intervention.

file: src/utils/config/migration-scripts ↗ | tags: #config-migration #schema-evolution #versioning

A registry that abstracts over 30 different AI and translation providers (OpenAI, DeepL, Google, etc.) behind a uniform interface. It handles model resolution, feature-to-provider mapping, authentication, and plan gating. This pattern is reusable for any multi-provider integration system requiring extensibility and runtime configuration.

file: src/utils/providers/provider-registry.ts ↗ | tags: #provider-interface #pluggable-architecture #strategy-pattern

A utility for creating React-managed Shadow DOM hosts in content scripts. It manages CSS injection via adoptedStyleSheets with fallback, style deduplication, and mounting lifecycle. This pattern is reusable for any browser extension that needs to render isolated UI without interfering with the host page's styles.

file: src/utils/react-shadow-host/create-shadow-host.tsx ↗ | tags: #shadow-dom #ui-isolation #content-script-pattern

A binary heap-based priority queue implementation used for rate-limited, cancellable request scheduling. Supports priority ordering, batch dequeuing, and integration with abort signals. This is a generic, well-tested data structure that can be extracted and used in any application requiring customizable request prioritization and concurrency control.

file: src/utils/request/priority-queue.ts ↗ | tags: #priority-queue #binary-heap #request-scheduling
Last analyzed: 2026-08-30 17:35:16.557650
Next check: 2026-10-16 19:39:27.457031
$ submit: