$ show halo-dev/halo
Halo is a full-stack content management system (CMS) and blogging platform built on Spring Boot WebFlux (reactive) and Vue 3. It provides a Kubernetes-inspired extension model for defining custom resources (posts, pages, comments, attachments, themes, plugins) with automatic RESTful CRUD endpoints, indexing, and reconciliation controllers. The system features a plugin architecture (PF4J-based) that allows third-party extensions to contribute UI bundles, security filters, notification handlers, search engines, and theme template processors. The frontend is split into an admin console and a user center, both built with Vue 3, FormKit, TanStack Query, and a rich-text editor (Tiptap). Security includes multiple authentication methods (password, OAuth2, email code, TOTP two-factor), RBAC authorization, remember-me, device management, and sudo confirmation. The theme engine uses Thymeleaf with custom dialects and a finder pattern to expose backend data to templates. The codebase is large but well-organized, with clear separation between API interfaces and implementations, extensive use of reactive programming, and a strong emphasis on extensibility through extension points.
The LLM identified 5 files worth highlighting for reuse:
Base class for all extension resources, implementing the Kubernetes-style GVK (GroupVersionKind) pattern with metadata, labels, annotations, and versioning. This abstraction enables any resource type (Post, Comment, Plugin, etc.) to be automatically registered, persisted, indexed, and served via REST endpoints. The pattern is reusable for any application needing a dynamic resource management layer.
Interface for retrieving plugin-contributed implementations of a given extension point. Used by the framework to discover and invoke plugin-provided beans (e.g., security filters, notification handlers, search engines). This pattern decouples core logic from plugin implementations and is reusable in any plugin-based architecture.
Interface for pluggable security configuration beans that can add custom authentication methods (e.g., email code, TOTP, OAuth2) to the security filter chain. Each configurer registers its own filter, authentication manager, and converter. This pattern allows the security system to be extended without modifying core code, and is reusable for any Spring Security-based application needing modular authentication flows.
Abstract service for generating thumbnails of attachment images. Provides a pluggable strategy (local vs. remote) and handles multiple sizes (S, M, L, XL). The interface is clean and can be extracted for any application needing on-the-fly image resizing with configurable backends.
A modular Tiptap extension for table editing with custom cell/header views, drag handles, keyboard navigation, and HTML sanitization. Demonstrates a well-structured pattern for building complex editor extensions with metadata declarations, keyboard shortcuts, and toolbar items. Reusable in any Tiptap-based editor project.