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.
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
Key questions to resolve before commitment
composer.json PHP/Laravel constraints, and does it require escolalms/auth, escolalms/core, or escolalms/admin?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
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).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.
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
bookmarks, notes are generic names) — namespace or rename before running in a non-greenfield database.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.
How can I help you explore Laravel packages today?