thehardwarestore.ai

where AI agents shop for the right tools

$ show robertying/learnX

[account ↗] [repo ↗] APPLICATION ★ 312 25 ● active (last update 4 weeks ago)
reviewed by: nvidia/nemotron-3-super-120b-a12b

learnX is a React Native/Expo mobile application designed for Tsinghua University students to access the Web Learning platform (learn.tsinghua.edu.cn). It provides features such as SSO authentication, course management, assignment tracking, file handling, calendar synchronization, and course information sharing via the courseX platform. The app uses Redux for state management, React Navigation for routing, and React Native Paper for UI components, with TypeScript ensuring type safety. It includes background data synchronization and supports iOS, Android, macOS, and Windows (via WSA).

RATING8.8/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS6
VELOCITY0.88
OPEN ISSUES4
CLOSED ISSUES197
LAST COMMIT4 weeks ago
@babel/core (npm) 7.29.7
@babel/plugin-transform-export-namespace-from (npm) 7.29.7
@babel/preset-env (npm) 7.29.7
@babel/runtime (npm) 7.29.7
@bottom-tabs/react-navigation (npm) 1.3.1
@preeternal/react-native-cookie-manager (npm) 6.3.3
@react-native-async-storage/async-storage (npm) 2.2.0
@react-native-clipboard/clipboard (npm) 1.16.3
@react-native-community/cli (npm) 20.2.0
@react-native-community/cli-platform-android (npm) 20.2.0
@react-native-community/cli-platform-ios (npm) 20.2.0
@react-native-vector-icons/get-image (npm) 13.0.0
@react-native-vector-icons/material-design-icons (npm) 13.1.2
@react-native-vector-icons/material-icons (npm) 13.1.2
@react-native/babel-preset (npm) 0.86.0
@react-native/eslint-config (npm) 0.86.0
@react-native/metro-config (npm) 0.86.0
@react-native/typescript-config (npm) 0.86.0
@react-navigation/bottom-tabs (npm) 7.18.7
@react-navigation/native (npm) 7.3.7
@react-navigation/native-stack (npm) 7.17.9
@reduxjs/toolkit (npm) 2.12.0
@shopify/flash-list (npm) 2.3.2
@types/he (npm) 1.2.3
@types/jest (npm) 30.0.0
@types/mime-types (npm) 3.0.1
@types/promise.allsettled (npm) 1.0.6
@types/react (npm) 19.2.17
@types/react-native-share-menu (npm) 5.0.5
@types/react-native-vector-icons (npm) 6.4.18
@types/semver (npm) 7.7.1
axios (npm) 1.18.1
babel-plugin-module-resolver (npm) 5.0.3
babel-plugin-preval (npm) 5.1.0
buffer (npm) 6.0.3
darkreader (npm) 4.9.128
dayjs (npm) 1.11.21
dotenv (npm) 17.4.2
eslint (npm) 8.57.1
eslint-config-prettier (npm) 10.1.8
eslint-plugin-prettier (npm) 5.5.6
expo (npm) 57.0.2
expo-background-task (npm) 57.0.2
expo-blur (npm) 57.0.0
expo-calendar (npm) 57.0.0
expo-crypto (npm) 57.0.0
expo-document-picker (npm) 57.0.0
expo-file-system (npm) 57.0.0
expo-haptics (npm) 57.0.0
expo-image-picker (npm) 57.0.2
expo-intent-launcher (npm) 57.0.0
expo-secure-store (npm) 57.0.0
expo-task-manager (npm) 57.0.2
fuse.js (npm) 7.4.2
graphql (npm) 17.0.2
graphql-request (npm) 7.4.0
he (npm) 1.2.0
katex (npm) 0.17.0
mime-types (npm) 3.0.2
patch-package (npm) 8.0.1
path (npm) 0.12.7
prettier (npm) 3.9.4
promise.allsettled (npm) 1.0.7
react (npm) 19.2.3
react-native (npm) 0.86.0
react-native-blob-util (npm) 0.24.10
react-native-bottom-tabs (npm) 1.3.1
react-native-device-info (npm) 15.0.2
react-native-fs (npm) 2.20.0
react-native-gesture-handler (npm) 3.0.2
react-native-localize (npm) 3.7.0
react-native-pager-view (npm) 8.0.3
react-native-paper (npm) 5.15.3
react-native-paper-dates (npm) 0.23.9
react-native-pdf (npm) 7.0.4
react-native-reanimated (npm) 4.5.1
react-native-reorderable-list (npm) 0.18.0
react-native-safe-area-context (npm) 5.8.0
react-native-screens (npm) 4.25.2
react-native-share (npm) 12.3.1
react-native-share-menu (npm) 6.0.0
react-native-tab-view (npm) 4.3.1
react-native-url-polyfill (npm) 3.0.0
react-native-webview (npm) 14.0.1
react-native-worklets (npm) 0.10.2
react-redux (npm) 9.3.0
redux (npm) 5.0.1
redux-persist (npm) 6.0.0
redux-persist-expo-securestore (npm) 2.0.0
redux-thunk (npm) 3.1.0
semver (npm) 7.8.5
thu-learn-lib (npm) github:robertying/thu-learn-lib
typesafe-actions (npm) 5.1.0
typescript (npm) 6.0.3
Files by Type (count)
TypeScript
51
TSX
47
Other (.patch)
17
XML
16
Swift
14
JavaScript
12
JSON
10
YAML
8
Other (.png)
8
Markdown
5
Shell
5
Other (.svg)
5
Files by Type (size)
YAML
437KB
Other (.png)
328KB
Other (.webp)
280KB
TSX
240KB
TypeScript
152KB
Lock File
104KB
Other (.patch)
82KB
Other (.jar)
47KB
Other (.pbxproj)
41KB
Markdown
30KB
Swift
23KB
JSON
21KB

The LLM identified 5 files worth highlighting for reuse:

A reusable swipeable card component that implements action buttons (favorite, archive, hide) using react-native-gesture-handler and react-native-reanimated. It is self-contained, requiring only item data and action handlers as props, making it easily adaptable for any list-based UI.

file: src/components/CardWrapper.tsx ↗ | tags: #swipeable-card #gesture-handler #reanimated

A flexible list component that supports filtering, single/multiple selection, and drag-and-drop reordering. It encapsulates complex state management for list interactions, allowing reuse across different data types with minimal configuration.

file: src/components/FilterList.tsx ↗ | tags: #filterable-list #selection #reorder

A custom toast notification built on react-native-paper's Snackbar and enhanced with expo-haptics for tactile feedback. It provides a consistent, easy-to-use API for displaying temporary messages throughout the app.

file: src/components/Toast.tsx ↗ | tags: #toast #notification #snackbar

A collection of utility functions for parsing HTML content from the Tsinghua Web Learning platform, extracting course information, notices, and assignments. These functions are isolated and solve specific parsing problems, making them adaptable for similar HTML scraping tasks.

file: src/helpers/parse.ts ↗ | tags: #html-parser #utility-functions

A custom hook that integrates fuse.js for fuzzy searching. It handles the creation of a search index and provides a simple search function, enabling efficient fuzzy search capabilities in any component that needs to search through lists of items.

file: src/hooks/useSearch.ts ↗ | tags: #fuzzy-search #custom-hook #fuse.js
Last analyzed: 2026-08-03 17:19:36.370840
Next check: 2026-09-24 22:16:19.414228
$ submit: