nowo-tech/slide-to-confirm-bundle
A Symfony bundle that adds a slide-to-confirm control for sensitive actions, helping prevent accidental clicks and submissions. Drop it into forms or templates with customizable labels, styling, and behavior for a safer, smoother confirmation flow.
Architecture fit. nowo-tech/slide-to-confirm-bundle is a Symfony bundle that ships a FormType plus a Twig template and a small frontend asset (TypeScript/Vite entrypoint, built output under src/Resources/public/build). Architecturally that is a thin presentation-layer concern: it renders a drag-to-confirm control and maps its state onto a Symfony form field. It carries no domain logic, no persistence, no server-side policy engine, and no queue/async surface. That makes for a low-blast-radius integration — it can be adopted on a single form or removed without touching the data model — but it also means the package provides almost no leverage beyond saving you a few hundred lines of JS and one form type. The first correction to make in the intake record: this is a Symfony bundle, not a Laravel package. If the consuming application is Laravel, the value proposition collapses to "copy the Twig/JS slider into a Blade component"; there is no drop-in path because the FormType depends on Symfony\Component\Form and the Twig integration depends on Symfony's form theme system.
Integration feasibility. Mechanically feasible and small: register the bundle in config/bundles.php, enable it in the DI extension, use the provided form type on a delete/confirm/consent form, and ensure the asset is published and loaded (AssetMapper or Webpack Encore/Vite, depending on your pipeline). The main friction points are asset delivery (the built file lives under Resources/public/build and must be copied or served via assets:install, or consumed through AssetMapper's path config), CSP compatibility (slider interaction commonly attaches inline handlers or inline styles, which a strict script-src will block), and form theme overrides if the project already overrides form_div_layout.html.twig. None of these are blockers; all are half-day-scale work.
Technical risk. The risk profile is dominated by project health rather than code complexity. Zero stars, zero dependents, and a single published release mean there is essentially no community validation signal — no one has reported whether it works on Symfony 7.x with a real asset pipeline, no issue history to mine, no downstream implementations to pattern-match against. The declared last release date (2026-10-25) is in the future relative to normal release cadence, which suggests either a misconfigured repository metadata/changelog or a package that is being version-stamped ahead of use; either way the release provenance cannot be trusted as a maturity signal. Score 19.9 with an opportunity sub-score of 47.9 describes a package with a plausible niche but no adoption. Beyond health, the substantive technical risks are: (1) accessibility — slider/gesture confirmation is intrinsically hostile to keyboard-only, switch-access, and motor-impaired users, and drag affordances are hard to discover on touch and near-unusable on screen readers; WCAG 2.2 (2.5.7 Dragging Movements, 2.1.1 Keyboard, 4.1.2 Name/Role/Value) requires a non-drag alternative, which the bundle may not ship; (2) false security — the drag is a client-side UX gate, and a TPM must confirm it is never treated as an authorization control; server-side permission checks and CSRF (Symfony's form CSRF token) must remain the enforcement point; (3) false compliance — for "legal consent" and "payments," a slider is not a signature, not SCA, and not an auditable consent record; you still need timestamped, versioned, attributable consent storage and a real audit trail; (4) i18n/RTL — slider labels and directionality are commonly hardcoded in bundle templates. Mitigating factor: MIT license means full fork rights, so worst case is a vendored, internally owned copy.
Key questions. Who owns this bundle upstream, and is there any commitment to security patching? Does it ship a keyboard-accessible and screen-reader-announced fallback, or is drag the only path? Is the "confirmed" state exposed as a normal form value that server-side validation can require (constraints: [NotBlank / IsTrue]), or is it purely visual? Which asset strategy does it assume — AssetMapper, Encore, or raw assets:install — and does it work under a strict CSP with no unsafe-inline? Does the template support translation domains and RTL? Does it work on Symfony 7.x and 8.x as declared, or is that claim untested? And what precisely would we be replacing — is this a net build-vs-buy win over a ~200-line in-house component we control outright?
Stack fit. Suitable only for Symfony 6/7/8 applications on PHP ≥8.1. Fit is strongest where a single, low-frequency, high-consequence action needs deliberate friction — deleting an account, revoking an API key, acknowledging a destructive migration, accepting terms on a signup form. It is a poor fit for high-frequency flows (it adds latency to every interaction) and an actively bad fit anywhere the "confirmation" is doing security or legal work rather than UX work. If the estate is Laravel-first or mixed, scope this as a port, not an install: extract the Twig markup and the TS interaction module into an internal Blade component and drop the Symfony FormType entirely.
Migration path. Do not migrate anything to it. Treat this as a new-capability adoption on a greenfield form, with the bundle as a reference implementation and a plausible starting point. The concrete path: identify one destructive action currently guarded by a plain checkbox or a native confirm() dialog; pilot the slider there; keep the existing server-side authorization and CSRF untouched; and stage it behind a feature flag so the flag flip is the rollback. If the pilot succeeds, decide fork-and-own versus upstream dependency before it spreads to a second form — spreading first is how a zero-adoption dependency becomes load-bearing.
Compatibility. Verify rather than assume: confirm the constraint set actually resolves on your PHP/Symfony matrix (composer why-not against your locked Symfony version), confirm the built asset loads through your pipeline without a manual rebuild, confirm the form type's options array is stable enough to set labels/IDs without patching, and confirm the template can be overridden from templates/bundles/ so you can add i18n and an accessible fallback without forking. The bundle's own rules commit to preserving DI extension, compiler pass wiring, form type options, and Twig block structure — that is a good BC posture on paper, and it is also the exact surface you will need to touch.
Sequencing. (1) One-day spike: install in a throwaway branch, render the slider on a dummy form, confirm asset loading, CSP behavior, keyboard/screen-reader behavior, and translation/RTL support. (2) Accessibility and compliance review in parallel with the spike — an a11y failure here is a hard stop, not a backlog item. (3) Decision gate: adopt upstream, fork internally, or build in-house (~1–2 days of frontend work for a well-tested accessible slider). Given the health signals, in-house or fork should be the default position and upstream adoption the position that must be argued for. (4) If adopted, pin the exact version, vendor or mirror the built asset, add a regression test asserting the confirm field is required server-side, and document the fork point. (5) Roll out to one form behind a flag; measure completion/failure rates before widening.
Maintenance. This is the section that decides the recommendation. A zero-star, zero-dependent package with a single release and one apparent maintainer carries single-maintainer bus factor with no downstream safety net — if upstream goes quiet, you will not find out from a CVE feed or from a peer's breakage report, because there is no peer set. Budget for the realistic outcome: you will own this code. That is acceptable for ~300 lines of UI, but it must be an explicit line item, not an accident. Mitigations: vendor the package into the repo or a private mirror, pin the version, and assign a named internal owner with a standing reminder to review before each Symfony major upgrade. Also budget for the built asset — CI must be able to reproduce or at least re-serve Resources/public/build without a Node toolchain in the deploy image.
Support. No support channel of consequence: no issue triage history, no documented SLA, no published compatibility matrix beyond the composer constraint, no visible CI badge evidence. Internal support burden lands on whoever integrates it, and the questions they will field are predictable — "why can't I use my keyboard?", "why doesn't it work on my phone?", "why did the button stop working after the CSP change?". That is a support surface you would otherwise avoid entirely with a native checkbox plus a confirm dialog.
Scaling. Performance scaling is a non-issue — the widget is per-form, per-render, with a trivial DOM and a tiny JS payload; it will not appear in any load profile. The scaling concern is organizational: every additional form that uses it deepens the dependency and multiplies the cost of a future fork or removal. Cap adoption deliberately (one or two flows) until the health question is settled, and keep the component behind a shared internal wrapper so a swap is a one-file change.
Failure modes. Ranked by likelihood × impact: (1) asset pipeline breakage on a Symfony or bundler upgrade — the slider renders as a static, unusable bar, silently blocking the guarded action; mitigate with an integration test that asserts the confirm value is required server-side, so a broken widget fails closed rather than open. (2) CSP regression — inline handlers blocked, control inert, same fail-closed test catches it. (3) accessibility exclusion — users who cannot drag are unable to complete the flow at all; this is the highest-severity failure and it is a legal/compliance exposure, not just a UX one; require a keyboard/click fallback. (4) misinterpreted assurance — a product owner or auditor treats the slider as evidence of consent or as an authorization control; mitigate with explicit documentation that the server-side check is the control and that consent records live elsewhere. (5) silent abandonment upstream — no security response, no Symfony 8/9 compatibility, forcing an emergency fork on someone else's schedule. (6) i18n gap — hardcoded English labels surface in localized flows.
Ramp-up. Low for engineers: a Symfony developer can integrate it in under a day, and the concepts (a form type, a Twig block, a small interaction module) are already familiar. The real ramp-up cost is elsewhere — the accessibility and compliance analysis required to use it responsibly is a review activity, not an integration activity, and it needs a designer or a11y specialist plus, for the consent/payments use cases, a legal or compliance reviewer. Plan roughly one engineer-day for the spike plus integration and one to three days of cross-functional review before the first production form. Overall TPM position: pilot only, single flow, behind a flag, with an explicit fork-or-build decision made before a second adoption — the code is likely fine, the health signals are not, and the compliance framing in the package description ("payments, deletes, legal consent") is the part most likely to cause real damage if taken at face value.
How can I help you explore Laravel packages today?