Architecture and extension
Documentation site
This site is a static Docusaurus 3 application. Markdown documents live under docs/, the Docusaurus config
sets the public base URL and strict link checks, and an autogenerated sidebar follows the docs tree. The build
does not ingest internal workspace documentation or application runtime data.
Application boundaries
ES Portfolio and ES Blog are independent applications with separate repositories, runtime dependencies, config, and release flows. Their shared app launcher is a navigation integration, not a shared runtime or database. ES Journal remains private; ES Labs contains prototypes and is not an implicit production dependency.
Supported extension points
ES Portfolio
The public portfolio uses Blade themes and the administration panel uses React. Atlas is built in; additional themes are installed as signed packages through the supported theme installer. Prefer that documented extension path to editing framework internals or adding ad-hoc template loading.
ES Blog
The public and admin presentation uses Twig. Themes can be installed through the app's supported theme picker or ZIP upload flow. Signed packages and trusted keys are part of the trust boundary because templates can execute code. Do not disable signature checks for untrusted packages.
The Blog supports external identity, feed and publishing integrations, but enabling one requires explicit provider configuration and account authorization. Do not expose credentials in a theme or client-side asset.
Adding an application or integration
Before adding another launcher entry or documenting an integration:
- Confirm the application owner, repository visibility, canonical name and maintenance status.
- Verify its URL and local/prod behavior from its source configuration.
- Keep private or personal app data out of public docs.
- Document required external accounts, permissions, callback URLs and operational dependencies.
- Add only the app-specific frontend link; do not imply that another app's launcher is updated automatically.