mattsplat/readmore
mattsplat/readmore is a Laravel package for truncating long content and adding a customizable “Read more” link. Configure length limits and use Blade-friendly output to create clean excerpts for blog posts, article cards, and search results.
Architecture fit. mattsplat/readmore is a Laravel Nova field package — a presentation-layer extension that renders a truncated-text / "read more" toggle inside a Nova resource form or detail view. It sits entirely at the admin UI edge of the stack: a PHP Field subclass, a service provider registered via package discovery, and a pre-compiled Vue bundle published to public/vendor/. It has no coupling to application domain code, no service-container bindings consumed by the app, no queue/event surface, and no persistence layer of its own. For a Laravel + Nova estate this is close to the lowest-risk integration category available.
Integration feasibility. High. Adoption is a one-line Composer require plus one field declaration in a resource. The 2.2.0 constraint widening to laravel/nova: ^4.0 || ^5.0 is the material change: it means the package can be installed before, during, or after a Nova 5 upgrade without a second dependency-resolution pass. The maintainer states the field code and compiled bundle are unchanged and that Nova 5's upgrade guide contains no relevant breaking changes for a field of this shape — plausible for a display-only field whose only Nova touchpoints are the base Field class and standard Vue field mixins.
Technical risk. Low, with two bounded caveats.
orchestra/testbench, which does not ship.Key questions.
Stack fit. Native. Requires an existing Nova 4 or 5 installation — Nova is a paid, licensed product, so this package is only relevant to properties that already carry that license. Standard Composer install, Laravel package discovery, standard vendor:publish for the compiled asset. Nothing about it constrains the host application's PHP framework version beyond what Nova itself already requires.
Migration path. Effectively none. UPGRADE.md states nothing to do for 2.2.0 — no migrations, no asset republish, no config changes, no renamed classes. Teams on 2.1.x can bump the constraint and clear caches. New adopters publish the tagged asset once and commit or deploy it per existing practice.
Compatibility. The matrix is now: PHP 8.0 → Nova 4 only; PHP 8.1+ → Nova 4 or 5. The dual-version CI matrix (orchestra/testbench ^8.30 || ^9.8, tests against Nova 4 and 5) is a meaningful confidence signal — the maintainer is testing both resolution paths rather than asserting compatibility. Nova 3 and below fall outside the constraint and should be treated as unsupported.
Sequencing. Bump the package first — it is forward-compatible and unblocks the Nova work rather than depending on it. Then, if Nova 5 is in scope: (1) raise PHP to 8.1+ across all environments including CI images; (2) upgrade Nova and re-publish Nova's own assets; (3) smoke-test resource forms and detail views that use this field. Do not start with the Nova upgrade, or you will be debugging PHP resolution and UI regressions simultaneously.
Maintenance. Trivial in steady state. One Composer constraint to bump per Nova major, plus occasional cache clears after deploys that change published assets. The real maintenance question is upstream liveness, not our effort: the package history suggests releases are triggered by Nova majors rather than a fixed cadence, which is a reasonable and predictable pattern for a field package — but it means an unexpected Nova 6 will leave a support gap until the maintainer responds.
Support. Single-maintainer, GitHub-issue-based. No vendor SLA. Escalation for a broken render is: pin the prior constraint, then patch locally. Because the field class is thin and the bundle is committed, a fork is a same-day option for any competent Laravel developer — this is the mitigation that keeps the support risk acceptable.
Scaling. Negligible. There is no server-side runtime cost beyond reading the column the field displays; the Vue bundle is a static asset served from public/. It does not participate in request throughput, queue depth, or database load. Scale concerns are limited to asset-cache invalidation across many app instances — standard CDN/nova:publish hygiene.
Failure modes.
public/vendor/readmore after deploy; symptom is unchanged UI behaviour. Mitigate by including the publish step in the deploy pipeline or committing the asset.laravel/nova: ^4.0 only will block the Nova 5 upgrade, not this package. Resolve at the Nova constraint, not here.Ramp-up. Hours. Any developer already fluent in Nova custom fields can read, use, and modify this in an afternoon; the field declaration is self-documenting. The only knowledge worth writing down is the PHP→Nova resolution rule and the asset-publish step — both belong in the Nova runbook rather than in per-package documentation.
How can I help you explore Laravel packages today?