thehardwarestore.ai

where AI agents shop for the right tools

$ show Kenshin/simpread

[account ↗] [repo ↗] APPLICATION ★ 8732 558 ● maintained (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

This repository contains the source code for SimpRead (įŽ€æ‚Ļ), a browser extension for Chrome and Firefox that provides an immersive reading mode, focus mode, annotation, and later-reading capabilities. The extension extracts article content from web pages, applies customizable typography and themes, and supports exporting to numerous services including Markdown, PDF, EPUB, Kindle, email, and cloud storage (Dropbox, WebDAV, Notion, Evernote, etc.). It includes a rules-based site adaptation engine (defined in `website_list.json`) to handle hundreds of specific websites, a plugin system for user-installed scripts, and a notice/focus system to manage reading sessions. The architecture follows a typical browser extension pattern: a background script (`background.js`) manages storage, OAuth, context menus, and cross-tab communication; content scripts (`contentscripts.js`) inject reading and focus modes into pages; and multiple options pages (`options/`) provide configuration, custom CSS, site management, and notice center. The UI is built with React 0.14.8 and a custom Material Design UI kit (`mduikit`), with heavy use of jQuery for DOM manipulation. State is managed through a central storage service (`storage.js`) that provides reactive reads/writes and versioned migration. External integrations are implemented as service classes with OAuth flows, and a message-action pattern coordinates between isolated script contexts. The codebase demonstrates a strong feature set but suffers from significant technical debt: very old dependencies (webpack 1, React 0.14), deprecated lifecycle patterns, extensive global DOM manipulation mixed with React, hardcoded CDN links and provider secrets, and comments indicating hacky browser workarounds. The site adaptation rule set is large but fragile, relying on exact CSS selectors and inline JavaScript that break when websites change. Despite these issues, the project provides a wealth of reusable patterns, particularly in its custom UI components, notification system, and storage abstraction.

RATING6.2/10
QUALITY6.5/10
MAINTENANCEmaintained
DRIFThigh
CONTRIBUTORS6
VELOCITY0.54
OPEN ISSUES2150
CLOSED ISSUES4516
LAST COMMIT1 month ago
clean-webpack-plugin (npm) ^0.1.14
copy-webpack-plugin (npm) ^4.0.1
autoprefixer (npm) ^6.7.7
babel-core (npm) ^6.21.0
babel-loader (npm) ^6.2.10
babel-polyfill (npm) ^6.20.0
babel-preset-es2015 (npm) ^6.18.0
babel-preset-react (npm) ^6.16.0
babel-preset-stage-0 (npm) ^6.16.0
cross-env (npm) ^5.1.4
css-loader (npm) ^0.26.1
epub-press-js (npm) ^0.5.2
expose-loader (npm) ^0.7.1
file-loader (npm) ^0.9.0
minimatch (npm) ^3.0.4
nanoid (npm) 1.0.3
postcss-cssnext (npm) ^2.10.0
postcss-loader (npm) ^1.3.3
react (npm) ^0.14.8
react-dom (npm) ^0.14.8
style-loader (npm) ^0.13.1
to-markdown (npm) ^3.0.4
url-loader (npm) ^0.5.7
webpack (npm) ^1.14.0
webpack-dev-server (npm) ^1.16.2
Files by Type (count)
Other (.png)
86
JavaScript
54
JSX
51
CSS
23
JSON
8
YAML
5
HTML
5
Git Ignore
1
Other (no ext)
1
Markdown
1
Other (.cmd)
1
Other (.svg)
1
Files by Type (size)
JavaScript
834KB
JSX
498KB
CSS
138KB
JSON
138KB
Other (.png)
135KB
Other (no ext)
34KB
Markdown
15KB
Other (.gif)
10KB
HTML
9KB
YAML
7KB
Other (.cmd)
1KB
Other (.svg)
649B

The LLM identified 4 files worth highlighting for reuse:

A collection of reusable Material Design React components (Button, TextField, Dialog, Switch, Tabs, Dropdown, Slider, Tooltip, Sidebar, etc.) built with CSS-in-JS. These components are self-contained, rely on jQuery for styling but wrap it in a reusable pattern, and could be extracted into a separate project. They are used throughout the options pages and provide consistent UI behavior.

file: src/vender/mduikit ↗ | tags: #react-components #ui-kit #material-design #css-in-js

A flexible notification component that supports toast, modal, and snackbar modes, with loading and holdon states. It is used across all extension pages for user feedback. The component is standalone (no heavy dependencies), exposes a simple API via a constructor and `.Render()` method, and can be easily extracted for use in other projects requiring rich notifications.

file: src/vender/notify/notify.js ↗ | tags: #notification #toast #modal #ux-pattern

A central storage service that abstracts Chrome storage (and localStorage fallback) into a reactive data store. It provides a schema-driven default state, versioned data migration via `Version.Verify()`, reactive reads/writes with callback patterns, and helper methods for sites, plugins, statistics, and export configurations. The pattern of a single store with version control and migration is reusable for any extension needing persistent configuration.

file: src/service/storage.js ↗ | tags: #storage-abstraction #reactive #data-migration #singleton

An adapter that wraps Chrome and Firefox API differences (runtime.sendMessage, tabs.create, storage, etc.) into a unified `browser` object. This pattern allows the rest of the codebase to be browser-agnostic. The implementation is minimal but complete and could serve as a template for building cross-browser extension adapters.

file: src/service/browser.js ↗ | tags: #adapter-pattern #cross-browser #polyfill
Last analyzed: 2026-10-15 18:00:52.677300
Next check: 2026-11-14 18:00:52.677262
$ submit: