The Open edX Platform is a modular monolith for online learning, comprising two Django services: the Learning Management System (LMS) for learners and the Content Management System (CMS, called Studio) for course authors. In production, the LMS serves courseware, manages enrollments, grades, certificates, discussions, and user identity, while the CMS provides authoring tools for creating and organizing course content using XBlocks (plugin learning components). Both services use Celery for asynchronous tasks such as grade recalculation, certificate generation, and email notifications, and rely on MySQL and MongoDB for data storage, with Elasticsearch for search and Memcached/Redis for caching. Key entry points include manage.py for management commands, WSGI for HTTP serving, and Celery workers for background jobs. REST APIs are versioned (v0–v3) for contentstore, course blocks, grades, enrollments, and more. The frontend uses a mix of Backbone.js and React with Webpack for asset bundling. External dependencies include Django, Django REST Framework, Celery, MySQL, MongoDB, Elasticsearch, S3 for file storage, OAuth2 providers, SAML identity providers, video services (YouTube, 3Play Media), and analytics services (Segment, Braze). The architecture follows a plugin-based pattern with stevedore entry points for XBlocks, course tabs, block structure transformers, and course apps. Configuration models (e.g., ConfigurationModel, StackedConfigurationModel) enable database-backed feature toggles and per-context settings. The codebase includes extensive testing with pytest, factory_boy, Jasmine, and pact contract tests, though some legacy frontend code (Backbone, RequireJS) and migration sprawl indicate ongoing modernization efforts.
This repository is the deployment system for Internet-in-a-Box (IIAB): an offline-first learning server for schools and communities without reliable Internet. It is an Ansible configuration-management application that installs and configures a complete local network stack — nginx reverse proxy, PHP-FPM, MySQL/PostgreSQL, hostapd WiFi access point, dnsmasq DNS/DHCP, Squid proxy, captive portal, Samba, CUPS — alongside a catalog of educational services such as Kiwix (offline Wikipedia/ZIM), Kolibri, WordPress, MediaWiki, Nextcloud, Gitea, JupyterHub, Moodle, Calibre-Web, and an offline OpenStreetMap/vector-tile mapping system with geocoding. Python, PHP, and Jinja2 templates generate systemd units, nginx virtual hosts, and app configs for every deployed service. Architecture is a staged Ansible pipeline: eleven role groups (0-init through 9-local-addons, then network) are driven from top-level playbooks (iiab-stages.yml, iiab-from-cmdline.yml) invoked by shell entry points (iiab-install, iiab-configure, iiab-network). Every role follows consistent conventions: defaults in defaults/main.yml, an install.yml and enable-or-disable.yml, boolean *_install/*_enabled flags validated up front with Ansible assert tasks, install state recorded in /etc/iiab/iiab_state.yml, and disk usage audited into iiab.ini. A custom Ansible module (get_curl) performs resumable/atomic downloads used across roles. Content provisioning is data-driven: maps and ZIM catalogs are generated (roles/maps/generate-catalog.py) and fetched at install time; offline search and geometry utilities (FQR, static_search.js) are bundled into the served front end. The project is actively developed (Ubuntu 24.04 and Raspberry Pi OS CI matrices, expected-state integration tests) but carries heavy legacy baggage: a large 0-DEPRECATED-ROLES tree, numerous .unused files, Python 2 support scripts, hardcoded versions/vendor URLs, plaintext default secrets, and fragile per-distro workarounds. The reusable gems — the custom download module, the tested geographic FQR geometry utility, the client-side static geocoder, the Ansible facts script, and the pdsm proot service manager — are isolated enough to extract into new projects. Overall it is a solid, professional infrastructure-as-code project with a few genuinely reusable components, tempered by significant accumulated technical debt.
TypeWords is a browser-based English vocabulary and article memorization application built with Nuxt 3 / Vue 3. It operates on a local-first architecture, storing user progress in IndexedDB, with an optional (now obsolete) Supabase cloud sync. The application is a monolith SPA but is well-modularized into a custom UI kit (app/base/), core business logic (app/core/), and page components (app/pages/). The core learning mechanic is typing-based practice, supporting multiple modes (follow-write, dictation, self-test, spelling) for both individual words and full articles. It integrates the FSRS (Free Spaced Repetition System) algorithm for intelligent review scheduling. Static dictionary data (CET-4, GRE, NCE articles) is loaded from bundled JSON files. The practice flow is managed by a sophisticated, serializable state machine (practice-flow-types/runtime), demonstrating strong architectural patterns. The codebase exhibits high craftsmanship in several isolated components, such as the global dialog stack, event bus, and versioned cache. These are genuinely reusable patterns. However, the project suffers from significant technical drift: it relies on experimental Vue Macros ($ref/$computed), has zero automated tests, contains dead code (obsolete Supabase sync), and bundles third-party libraries statically. The TypeScript configuration is lax (strict: false), increasing refactoring risk. TypeWords is a feature-rich, community-driven project (10k+ stars) that effectively solves a specific learning problem. Its architecture is a valuable study for developers building local-first, content-rich Vue applications. However, its lack of tests and reliance on experimental features make it a risky candidate for direct production reuse without significant hardening. It is best suited for educational analysis or as a foundation for a new project willing to address the technical debt.