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

Bookmarks Notes Laravel Package

escolalms/bookmarks_notes

Laravel package that lets users bookmark content and attach personal notes to it. Ships the models and backend logic for creating bookmarks and notes, making it easy to add save-for-later and annotation features to any Laravel application.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit escolalms/bookmarks_notes is a first-party module from the EscolaLMS monorepo family, not a general-purpose Laravel package. Expect the standard EscolaLMS package shape: a service provider registering config, migrations, routes and policies; Eloquent models (Bookmark, Note) attached to other entities via polymorphic morphTo relations; API controllers exposed under the host app's versioned API prefix; and authorization delegated to escolalms/auth plus spatie/laravel-permission. Its domain is narrow — a user marks a resource as a bookmark and/or attaches free-text notes to it. That is genuinely useful for course/content platforms (resume points, "my notes" panels, saved lessons), but the value is in the schema and the API contract, not in novel logic.

The decisive question is whether we are inside the EscolaLMS ecosystem. If yes, this is a clean fit: it composes with their auth, permission and course models and drops in like the other ~40 modules. If we are on stock Laravel, the package's own code is largely unusable — its controllers, form requests and policies assume EscolaLMS base contracts — and what we actually get is a two-table schema and a reference implementation we would rewrite in a few days.

Integration feasibility Mechanically simple: composer require escolalms/bookmarks-notes, publish config and migrations, register the provider, run migrations, seed the permission rows. The friction is entirely in the dependency graph. EscolaLMS packages routinely pull escolalms/core, escolalms/auth, escolalms/courses, JWT guards and their admin panel. On a non-EscolaLMS app that is a large, opinionated surface to inherit for two CRUD resources. The composer.json constraints are the first thing to read and are not verifiable from the metadata here — PHP version, Laravel major, and whether it requires escolalms/auth transitively.

Technical risk — high, but asymmetric

  • Zero stars, zero dependents, no public consumers: no third-party bug reports, no battle-testing, no community answers. We would be the only known integrator.
  • Last release February 2024 and no activity since: effectively unmaintained. Laravel 11/12 compatibility is unverified and unlikely to be actively fixed.
  • Single-vendor ecosystem: bus factor of one organisation, and the package may be extracted only because their own product needs it.
  • Offsetting this: MIT license, small surface area, plain relational schema. Forking or vendoring is cheap and legally clean; the exit cost is low. This is not a lock-in risk — it is a "do not depend on upstream" risk.

Key questions to resolve before commitment

  1. What are the composer.json PHP/Laravel constraints, and does it require escolalms/auth, escolalms/core, or escolalms/admin?
  2. What is polymorphic in the schema — can a bookmark/note point at any model, or only at EscolaLMS course/topic types? Is the morph map configurable?
  3. How is authorization expressed — permission strings, policies, or ownership checks in controllers — and does it integrate with a non-EscolaLMS guard (Sanctum vs. JWT)?
  4. Is there test coverage in the repo, and does it exercise cross-user access control (can user A read user B's notes)?
  5. Are there cascade/cleanup semantics when the bookmarked entity is deleted, or do we get orphaned morph rows?
  6. Is multi-tenancy contemplated at all, or is the scope strictly single-instance?
  7. Is the API contract versioned and documented (OpenAPI/Scribe), or must we infer it from controllers?

Integration Approach

Stack fit Treat this as a Laravel 9/10-era package with EscolaLMS conventions. Match it to a Laravel major it was written against rather than forcing it forward; if we are on Laravel 11+, assume we are patching the package. Confirm the permission and auth stack aligns before anything else — that is the single most likely blocker.

Migration path

  1. Spike (1–2 days): install into a throwaway Laravel app at our target version, publish, migrate, and exercise the endpoints. This answers most of the key questions cheaply.
  2. Audit: read migrations, models, policies and the route file. Confirm morph map configuration and ownership enforcement.
  3. Decide: adopt-as-dependency (only if we are already an EscolaLMS shop), vendor-and-patch (fork into packages/, pin a version we control, keep the MIT header), or lift-and-rewrite (copy the schema, write two resources and a policy ourselves — likely under a week).
  4. Integrate behind a feature flag on a single content type first.

Compatibility The main adaptation points will be the auth guard (EscolaLMS uses JWT; a Sanctum app must swap the middleware), the permission seeding (their spatie permission names should be renamed to our conventions), and the user model reference. Plan for these explicitly rather than discovering them at runtime.

Sequencing Do the spike and the adopt/fork/rewrite decision before committing to a sprint estimate. If the answer is "rewrite," the package's contribution is the schema sketch and a sanity check on API shape — that is a genuinely useful half-day of design input, and nothing more. If the answer is "adopt," integrate it after auth and the content model are stable, since it depends on both.

Operational Impact

Maintenance Assume we own it. Upstream will not ship fixes, and no release in over a year means Laravel major upgrades are our problem. Vendoring into the repo with a pinned, locally-tagged version is the right operational posture — it makes the ownership explicit and prevents a surprise composer update from changing behaviour.

Support None available. No issue history, no maintainer responsiveness to rely on, no community to ask. Our team must be able to read the source; budget for that in the onboarding of whoever owns it.

Scaling The data model is simple and relational — two tables with a user_id, a morph pair, and a text body. Scaling concerns are ordinary and easy to address: composite index on (user_id, bookmarkable_type, bookmarkable_id), uniqueness constraint to prevent duplicate bookmarks, and pagination on list endpoints from day one rather than retrofitted. Notes are unbounded free text — enforce a max length and strip HTML at the boundary, since rich-text storage is the most common way these tables bloat and the most common XSS vector. At expected volumes this will never be the bottleneck.

Failure modes to watch

  • Orphaned polymorphic rows when content is deleted — verify cascade or add a cleanup job.
  • Cross-user data leakage if the authorization layer is swapped during integration and ownership checks are lost. This is the highest-severity risk in the whole package and deserves an explicit test.
  • Migration collisions with existing tables (bookmarks, notes are generic names) — namespace or rename before running in a non-greenfield database.
  • Unbounded per-user row growth on high-activity users; add a cap or an archival path.
  • Silent behaviour change from a transitive dependency update — pin the tree.

Ramp-up Low for the domain, moderate for the ecosystem. Any Laravel developer understands bookmarks and notes in ten minutes; the cost is in learning EscolaLMS's provider/config/permission idioms if we are not already fluent. Budget roughly a day of ramp-up for the ecosystem and a week for a full, tested integration — or a week for a clean rewrite that carries no dependency debt.

TPM recommendation The opportunity score (30.95) and the adoption signals are aligned: this is a small, unmaintained, single-vendor module with no external validation. Do not adopt it as a runtime dependency unless we are already committed to EscolaLMS. Do read it. The schema and endpoint shape are a reasonable reference for a feature we can own outright in under a week, with no bus-factor exposure and no unverified auth semantics inherited from someone else's codebase.

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.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource