WePush is a Java application monorepo with two coexisting generations of a multi-channel bulk messaging system. The legacy `src/main` tree is a Swing desktop client that manages accounts, message templates, recipient lists, tasks, and run history, and sends via WeChat (official accounts, mini programs, WeCom), SMS vendors, email, HTTP, DingTalk/Feishu bots, and carrier SMS protocols (CMPP/SMGP/SGIP/SMPP). It persists to SQLite through MyBatis and generates UI with IntelliJ GUI Designer forms. The `next/` tree is a modular, distributed push orchestration platform: a Spring Boot control plane (REST + gRPC), remote agents connected via an mTLS gRPC stream, a provider SPI with built-in HTTP, Aliyun SMS, SMTP, WeChat, and bot providers, and pluggable signed PF4J plugins for carrier protocols. It adds multi-tenant workspaces, secret envelope encryption, artifact storage (local/S3), audience streaming import, run state machines with idempotency and retry, schedule management, a React/Vite web UI, an Electron desktop shell, and a Java SDK. Persistence is SQLite for standalone mode or PostgreSQL for server mode, with Flyway migrations and JDBC repositories. The Next codebase is well-architected with core-api/engine/provider-spi/service/domain/infrastructure separation, ADRs, architecture tests, integration tests, CI, and installers. However, the repository as a whole carries the legacy desktop codebase in parallel, duplicating several domain concepts and retaining generated UI code and older dependencies. This split and the aging legacy portions are the main sources of technical debt.
Linphone Desktop is a production-grade, cross-platform SIP softphone built on the Linphone C++ SDK and wrapped in a Qt6/QML user interface. It delivers audio/video calls, instant messaging (including group chat, file transfer, reactions, and ephemeral messages), conference scheduling, call recording, and presence management across Windows, macOS, and Linux. The architecture follows a strict MVVM split: model classes run on the Linphone SDK thread and expose Qt signals, while GUI-facing 'Core' classes live on the main thread and communicate with models via a custom SafeConnection template that enforces thread affinity. QML views bind directly to these cores, with list proxies (e.g., ListProxy, SortFilterProxy) providing paginated, filterable models for contact lists, call history, and chat logs. The codebase also integrates advanced features like OIDC/OAuth authentication, LDAP/CardDAV address book sync, end-to-end encryption (LIME/DTLS/SRTP), and system-level integrations (toast notifications, tray icons, screen-sharing, autostart) with per-platform backends. The repository is actively maintained with a modern build system (CMake), comprehensive GitLab CI pipelines (Linux, macOS, Windows, Squish GUI tests), and a substantial localization effort (multiple .ts files).