How hadanice/fudan_icourse_subscriber works
iCourse Subscriber monitors selected Fudan courses, processes new lecture recordings into transcripts, PPT-derived context, and AI summaries, then emails a batch of notes. The backend authenticates through WebVPN, enumerates lectures, and uses a per-lecture runner alongside a scheduler for audio and image work. A separate browser viewer decrypts and browses the sharded database, supports catalog search and subscription editing, and can trigger PDF export. The README documents persistence, export, and provider capabilities beyond the sampled excerpts; those links are shown only where their ownership is clear.
Main entry points: lecture_runner.py Lecture runner · main.py Run orchestrator · ppt_pipeline.py PPT pipeline · sharder.py Database shards
Components 25
Monitoring
- Run orchestrator
main.py - WebVPN login
src/api/webvpn.py - iCourse client
src/api/icourse.py
Lecture processing
- Lecture runner
src/pipeline/lecture_runner.py - Work scheduler
src/runtime/scheduler.py - PPT pipeline
src/pipeline/ppt_pipeline.py - PPT OCR
src/ai/ocr.py - PPT bucketing
src/ai/bucketer.py - Speech transcription
src/ai/transcriber.py - AI summarizer
src/ai/summarizer.py
Encrypted data
- Lecture database
src/data/database.py - Database encryption
src/data/crypto_box.py - Database shards
src/data/sharder.py
Browser viewer
- Viewer application
frontend/js/app.js - Browser SQL
frontend/js/db.js - Browser decryption
frontend/js/crypto.js - GitHub client
frontend/js/github.js - Content renderer
frontend/js/render.js
Notes delivery
- Email sender
src/api/emailer.py
Other components
- Subscriber
- iCourse platform
- LLM providers
- GitHub services
- SMTP service
- Note recipient
Connections 32
- Subscriber → Run orchestrator: configures and triggers
- Run orchestrator → WebVPN login: authenticates via
- WebVPN login → iCourse platform: logs in through
- Run orchestrator → iCourse client: enumerates courses
- iCourse client → iCourse platform: requests course data
- Run orchestrator → Lecture runner: processes lectures with
- Lecture runner → iCourse client: fetches lecture media
- Lecture runner → Work scheduler: schedules downloads
- Lecture runner → PPT pipeline: submits PPT work
- PPT pipeline → iCourse client: fetches PPT images
- PPT pipeline → Work scheduler: uses worker pools
- PPT pipeline → PPT OCR: submits pages for OCR
- PPT pipeline → Lecture database: records page state
- Lecture runner → Speech transcription: transcribes audio
- Lecture runner → AI summarizer: generates lecture notes
- Lecture runner → PPT bucketing: uses PPT context
- AI summarizer → LLM providers: requests summaries
- Lecture runner → Lecture database: reads and saves results
- Run orchestrator → Email sender: sends summary batch
- Email sender → SMTP service: delivers email
- SMTP service → Note recipient: delivers notes
- Run orchestrator → Database shards: prepares persisted shards
- Database shards → Lecture database: reads database
- Database shards → Database encryption: encrypts shards
- Database shards → GitHub services: persists shard data
- Subscriber → Viewer application: opens and configures
- Viewer application → GitHub client: loads shards and triggers export
- GitHub client → GitHub services: fetches blobs and dispatches
- Viewer application → Browser decryption: decrypts downloaded data
- Viewer application → Browser SQL: loads and queries data
- Browser SQL → Content renderer: provides view data
- Content renderer → Note recipient: displays notes