Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Nova Admin Notes Laravel Package

itainathaniel/nova-admin-notes

A Laravel Nova package for adding internal admin notes to Nova resources. Keep contextual comments and reminders alongside records, giving teams a simple place to document decisions or follow-ups without leaving the admin panel.

View on GitHub
Deep Wiki
Context7

Getting Started

Add the package and publish its assets/views so the autosave behaviour is visible in your codebase rather than buried in vendor/:

composer require <vendor>/<package>
php artisan vendor:publish --tag=<package>-views
php artisan vendor:publish --tag=<package>-config   # if a config file is offered

Look first at the published Blade view — as of 1.0.2 it is the single place that controls both the <textarea> markup and the autosave timer, so it is where you will spend most of your debugging time.

The first use case to wire up is a plain edit form with a persisted draft: render the component, point its save endpoint at a controller/Livewire action that writes the current field value to your model (or a drafts table), and confirm a save lands roughly every seven seconds while you type. Once that round-trip works, the rest of the package is refinement.

If the component is used inside Livewire, the simplest integration is a wire:model-backed property plus a save() action; if it is plain Blade + Alpine, you will be posting to a named route. Verify which of the two the package ships before writing glue code.

Implementation Patterns

Treat autosave as an idempotent upsert, not a create. The timer fires on a fixed cadence regardless of whether anything changed, so your handler should update-or-create by a stable key (draft_id, model_id + user_id) and be safe to call repeatedly.

Debounce the consumer side, not the producer side. The package fires on its own 7-second schedule; if you also want an immediate save on blur or on a keyboard shortcut, expose a manual save path in your controller so both entry points share one code path.

Return enough state for the UI to be honest. Respond with something like {saved_at: "...", version: 3} so your own layer can render "Saved 12s ago" instead of guessing. Do not assume the package renders a save indicator — verify against the published view.

Guard against overlapping requests. A 7-second interval can race a slow request on a poor connection. Use AbortController or a simple in-flight boolean in your script so an older payload cannot overwrite a newer one.

Scope drafts to the authenticated user. With an ambient timer, forgetting where('user_id', auth()->id()) on the draft lookup is the fastest way to leak another user's in-progress text.

Test the handler directly, not the timer. Feature-test the save action with $this->postJson(...), asserting idempotency across two calls; the interval itself is not worth a browser test unless you are already running Dusk.

Gotchas and Tips

The 7-second interval is not configurable in 1.0.2. Issue #2 introduced it as a fixed value, so tuning cadence means editing the published view or wrapping the component with your own script. Pin the version if that matters, and open an issue asking for a config or prop.

The new 50vh height is a component-level style. Your own textarea { height: ... } rules may lose to it depending on specificity, and 50vh is tall on desktop and cramped on a phone in landscape. Override via your own class or a CSS custom property rather than editing the published view, so future package updates do not clobber your change.

Layout shift on first paint. Switching to 50vh means the form reflows compared to earlier versions; check any screenshot tests or fixed-height containers around the component.

Autosave will fire on untouched forms. If you render the component on a create page, the first tick can create an empty draft row. Either gate the save on non-empty content or delay enabling the timer until the field is dirty.

Debugging silent failures. Autosave errors are easy to miss because nobody is watching the network tab. Log every save attempt server-side with the resulting status, and surface a "last saved" timestamp from real server state rather than client optimism.

Extension point to watch: the published view is your override surface for timer cadence, height, and indicator markup. Anything you cannot express there is a package change request — track upstream issues rather than forking, since the 1.0.x line is still moving quickly.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource