MCPcopy Index your code
hub / github.com/M3rcena/Udeler-Reborn

github.com/M3rcena/Udeler-Reborn @v3.1.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.1.1 ↗ · + Follow
80 symbols 165 edges 27 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Udeler Reborn Logo

Udeler Reborn (v3)

An advanced, high-performance, asynchronous desktop platform for offline course management.

<img src="https://img.shields.io/github/v/release/m3rcena/udeler_gui?include_prereleases&style=for-the-badge&color=2563eb" alt="Release" />
<img src="https://img.shields.io/github/license/m3rcena/udeler_gui?style=for-the-badge&color=7e22ce" alt="License" />
<img src="https://img.shields.io/github/stars/m3rcena/udeler_gui?style=for-the-badge&color=00e5ff" alt="Stars" />

✨ Premium Features

  • 📚 Intelligent Course Updates & Archiving
  • Update Detection: Automatically compares live API fetches against local baselines to detect and badge newly uploaded instructor videos.
  • Archive Protection: Safely identifies downloaded videos that the instructor has removed from Udemy and isolates them into an "Archived" chapter, ensuring zero data loss.
  • ⏱️ Cross-Session Watch Progress Tracking
  • Automatically saves your exact playback position to the local disk while watching.
  • Displays sleek visual progress bars across the library and automatically resumes videos exactly where you left off across application restarts.
  • 📦 Centralized Background Execution Engine
  • Downloads process non-blocking in the native backend thread while navigating the UI.
  • Adaptive state tracking prevents queue reset when closing or shifting tabs.
  • Global master controls allow pausing, resuming, or stopping the active pool safely.
  • 📂 Explorer-Style Library View
  • Automated directory aggregation that maps your downloaded files into interactive nested collections (Library > Course > Chapter).
  • Built-in dynamic storage computation reading precise allocations per file directly from native disk.
  • 🎥 Secure Media Streaming
  • Custom local:// safe streaming protocol to bypass standard Chromium media-sandboxing rules.
  • Decoupled subtitle engine sanitizing, cleaning, and compiling .vtt tracks dynamically on-the-fly into embedded Data URIs to eliminate strict browser Cross-Origin Resource Sharing (CORS) faults.

🛠️ Technology Stack

  • Core Framework: Electron (Native Asynchronous Desktop Bridging)
  • Frontend Layer: React 18, TypeScript (TSX), Tailwind CSS
  • Build System: Vite, electron-vite
  • Data Management: electron-store (Persistent Encrypted App Settings & Progress Mappings)
  • API Validation: zod (Strict runtime schema validation for external API payloads)
  • Type Safety: Generic E2E TypeScript IPC Bridge (Zero-boilerplate backend/frontend communication)

🚀 Getting Started

Prerequisites

Ensure you have Node.js (v20 or higher) and npm installed on your development workstation.

Installation & Initialization

  1. Clone your active development branch: bash git clone -b v3 https://github.com/m3rcena/udeler_gui.git cd udeler_gui

  2. Provision configuration dependencies: bash npm install

  3. Launch the development environment (Hot-Reload Enabled): bash npm run dev

Packaging & Compilation

To compile and pack the production binary distribution executable for your corresponding desktop operating platform:

# Windows Distribution Compile (.exe)
npm run build:win

# macOS Distribution Compile (.dmg / .app)
npm run build:mac

# Linux Distribution Compile (.AppImage / .deb)
npm run build:linux

The output distribution binaries will be written seamlessly to your root /dist or /out packaging paths.


📘 Detailed Usage Architecture

1. Authentication Layer

Upon system initialization, securely capture and apply your authentication bearer access token into the application portal. The application validates endpoints asynchronously against your profile and provisions access tokens directly inside automated localized configurations.

2. Synchronization Settings

Before running mass execution pools, navigate directly to the Settings configuration tab: * Storage Location: Declare your primary output directory path. Moving paths triggers an instantaneous file migration script safely adjusting existing targets. * Conditional Synchronization: Choose whether the background worker processes or drops external captions and structural documents (.pdf, .zip, etc.).

3. Background Processing Queue

Once you select a course module and append files to your actively working pipeline: * The Waiting telemetry module displays absolute metrics remaining in the queue array. * The In Progress counter tracks active background processes. * The processing matrix updates state metrics seamlessly even if you return to alternative navigational tabs.


📐 Project Directory Structure

├── .github/                 # Repository metadata profiles
├── build/                   # OS entitlement rules & distribution parameters
├── resources/               # Application-wide icons (.ico, .icns, .png, .svg)
├── src/
│   ├── main/                # Primary Electron Application Backend Process
│   │   ├── index.ts         # Window lifecycle and sandboxed IPC listeners
│   │   ├── download.ts      # Multi-stage request processor & Zod validation
│   │   └── udemy.ts         # Course extraction mappings
│   ├── preload/             # Electron Context Bridge Isolation Layer
│   │   ├── index.ts         # Generic API Invoker bridge
│   │   └── ipc-types.d.ts   # Single Source of Truth E2E Type Definitions
│   └── renderer/            # React Client Frontend Layer
│       ├── index.html       # Client viewport with hardened Content Security Profile
│       └── src/
│           ├── assets/      # Vector design definitions and global CSS styles
│           ├── components/  # Modular overlays and notification components
│           ├── contexts/    # React context state engine pipelines
│           ├── views/       # Application views (Library Explorer, Settings)
│           └── App.tsx      # Main state routers
├── electron-builder.yml     # Desktop compilation assembly rules
└── electron.vite.config.ts  # Vite bundler parameters

🔒 Security Posture & Hardening

Udeler Reborn is designed to adhere to standard enterprise Electron application security metrics: * Strict Context Isolation: Electron render engines are locked away from the bare operating system. Node APIs like fs and child_process are fully isolated to the backend layer and exposed safely via the custom Generic Electron Context Bridge. * Runtime Schema Protection: All external API responses are intercepted and validated through strict Zod schemas, ensuring corrupted or malicious server data cannot poison the internal state. * Hardened Content Security Policy (CSP): The embedded index.html file employs a modern CSP directive policy limiting external injection patterns while carefully authorizing local file streaming configurations via media-src 'self' local: blob: data:.


💬 Community & Support

Join our community to report issues, suggest features, or chat with other developers and users!


📄 License

This software is distributed under the terms of the MIT License. Check the root LICENSE profile for comprehensive parameters.

Extension points exported contracts — how you extend this code

Window (Interface)
(no doc)
src/renderer/src/types/index.d.ts
Course (Interface)
(no doc)
src/preload/ipc-types.d.ts
SafeStore (Interface)
(no doc)
src/main/index.ts
CurriculumItem (Interface)
(no doc)
src/preload/ipc-types.d.ts
SubtitleTrack (Interface)
(no doc)
src/main/index.ts
DownloadedFile (Interface)
(no doc)
src/preload/ipc-types.d.ts
DownloadedFile (Interface)
(no doc)
src/main/index.ts
DownloadContextType (Interface)
(no doc)
src/preload/ipc-types.d.ts

Core symbols most depended-on inside this repo

openExternalLink
called by 4
src/renderer/src/views/AboutTab.tsx
fetchDiskData
called by 4
src/renderer/src/views/DownloadsTab.tsx
useDownload
called by 3
src/renderer/src/contexts/DownloadContext.tsx
sanitizeName
called by 3
src/main/download.ts
handleConfirmMove
called by 2
src/renderer/src/views/SettingsTab.tsx
forceSave
called by 2
src/renderer/src/views/DownloadsTab.tsx
handleLogin
called by 2
src/renderer/src/contexts/AuthContext.tsx
useAuth
called by 2
src/renderer/src/contexts/AuthContext.tsx

Shape

Function 58
Interface 22

Languages

TypeScript100%

Modules by API surface

src/preload/ipc-types.d.ts14 symbols
src/renderer/src/contexts/DownloadContext.tsx9 symbols
src/main/download.ts8 symbols
src/renderer/src/views/SettingsTab.tsx6 symbols
src/renderer/src/views/DownloadsTab.tsx6 symbols
src/main/index.ts6 symbols
src/renderer/src/contexts/AuthContext.tsx5 symbols
src/renderer/src/views/AboutTab.tsx3 symbols
src/renderer/src/components/UpdateToast.tsx3 symbols
src/renderer/src/components/GlobalDownloadWidget.tsx3 symbols
src/renderer/src/App.tsx3 symbols
src/main/udemy.ts3 symbols

For agents

$ claude mcp add Udeler-Reborn \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page