Skip to content

Frontend Authoring

This page is generated from public package documentation in capell-4/packages and the package manifest checked into the source repository.

FieldValue
Composer packagecapell-app/frontend-authoring
Package slugfrontend-authoring
Product groupCapell Foundation
Tierfree
Bundlefoundation
Runtime contextsfrontend, console
Capell version^4.0
Source repositorycapell-app/packages
Source pathpackages/frontend-authoring
Docs sourcepackages/frontend-authoring/docs
Manifestcapell.json

Frontend authoring bridge and in-page editing for Capell frontend.

  • Package: capell-app/frontend-authoring
  • Namespace: Capell\FrontendAuthoring\
  • Surfaces: Livewire, HTTP
  • Service providers: packages/frontend-authoring/src/Providers/FrontendAuthoringServiceProvider.php
  • Capell dependencies: capell-app/admin, capell-app/frontend, capell-app/html-cache
  • Third-party dependencies: spatie/laravel-package-tools
  • Lets authenticated admins edit page fields from the public site context without exposing authoring controls to anonymous visitors.
  • Protects static caching because the public page loads as ordinary HTML and the admin-only beacon adds editing affordances later.
  • Helps editors fix content in place while developers keep signed edit URLs, permissions, and field paths out of public Blade.
  • Frontend authoring bridge and in-page editing for Capell frontend.
  • Livewire components: EditRegionField.

This package makes its Composer dependencies visible because they are part of the value proposition, not just plumbing. When an upstream package has a public repository, its linked preview card points readers back to the maintainers so their work gets proper credit.

Capell packages used here

Open-source packages used here

Linked package previews

Spatie Laravel Package Tools GitHub preview

Screenshots are generated from docs/screenshots.json during package deployment.

The documentation screenshots include the package working inside capell-app: the runner logs in as an admin, opens the public homepage, waits for the beacon to decorate editable regions, and hovers the first region so the edit control is visible.

AreaPathPurpose
Actionspackages/frontend-authoring/src/ActionsDomain operations. Test these directly where possible.
Datapackages/frontend-authoring/src/DataStructured payloads, form state, view models, and integration data.
Livewirepackages/frontend-authoring/src/LivewireInteractive frontend or admin components.
HTTPpackages/frontend-authoring/src/HttpControllers, middleware, and request handling.
Providerspackages/frontend-authoring/src/ProvidersRegistration, extension hooks, routes, migrations, and resources.
Resourcespackages/frontend-authoring/resourcesViews, translations, assets, and package resources.
Routespackages/frontend-authoring/routesRoute files loaded by the service provider.
Configpackages/frontend-authoring/configPackage configuration and publishable config.
Testspackages/frontend-authoring/testsPackage-level Pest coverage.
  • Livewire: EditRegionField.
  • Controllers: BeaconController, EditRegionController.
  • Routes: packages/frontend-authoring/routes/web.php.
  • Config: packages/frontend-authoring/config/capell-frontend-authoring.php.
  • Data objects live in src/Data/; use them for payloads, form state, and view models.
  • Register Capell extension points, routes, migrations, settings, render hooks, and resources from service providers.
  • Install with composer require capell-app/frontend-authoring in the host Capell application.
  • In this repository, verify package changes with vendor/bin/pest; do not use php artisan.

Run package tests from the repository root:

Terminal window
vendor/bin/pest packages/frontend-authoring/tests --configuration=phpunit.xml
  • Never render authoring controls, model identifiers, field paths, selectors, signed editor URLs, or package hints into public HTML. Add editing affordances only after an authenticated admin beacon response.
  • Put behaviour changes in src/Actions/; UI classes, commands, and controllers should call actions instead of owning domain logic.
  • Use package Data classes at boundaries instead of passing anonymous arrays between layers.