$ show meetfranz/franz
Franz is a desktop messaging aggregator that consolidates multiple chat services (WhatsApp, Slack, Telegram, etc.) into a single Electron application. It uses a plugin-based 'recipe' system to integrate each service via webviews or BrowserViews. The architecture is a monorepo with Lerna, containing reusable packages for UI components, forms, and theming. The main application is built with React 16, MobX 5, and JSS for styling, with a MobX store layer managing state and API calls. Features include service management, workspaces, todos, subscription tiers (freemium), and a feature toggle system. The codebase is well-structured but shows signs of age: it uses deprecated React lifecycle methods, @electron/remote, and outdated dependencies. The README explicitly states this is the predecessor of Franz 6 and is no longer actively developed, making it a legacy codebase.
The LLM identified 5 files worth highlighting for reuse:
A self-contained UI component library (Icon, Badge, Loader, Infobox, Modal, etc.) built with React and react-jss. Components are themable via a centralized theme object and are fully isolated from the main application, making them reusable in any React project with JSS support.
A form component library (Input, Select, Textarea, Toggle, Button) built on mobx-react-form with built-in validation helpers (e.g., scorePassword). Components are decoupled from business logic and can be extracted for use in other React/MobX projects.
A theme definition package providing default, dark, and legacy color schemes. Exports a simple object structure that can be consumed by any JSS-based React application, enabling consistent theming across projects.
A base class for feature stores that encapsulates action registration, reaction setup, and start/stop lifecycle. Demonstrates a clean pattern for managing feature-specific state and side effects in MobX, reusable for any feature toggle system.
A generic request wrapper for MobX stores that handles API calls with caching, retry logic, and execution state tracking. The companion CachedRequest extends it with TTL-based caching. This pattern is reusable for any MobX-based application needing structured API communication.