axyr/laravel-productive
A Laravel package for integrating Productive.io into your app. It provides a configured API client and convenient Laravel bindings for managing projects, tasks, time tracking, invoices, and other agency data through Productive's REST API.
Verdict: worth a timeboxed spike, not an unconditional adoption. This is an unusually complete first release — full endpoint coverage, live-API corrections, contract tests, fake-based test doubles — but it is v0.1.0 with an unverified write path and no webhook receiver. Treat it as a strong accelerator for read-heavy integrations and a supervised bet for anything that mutates customer data.
Architecture fit
Integration feasibility
Productive::fake() records real wire traffic, seeding by operation or path, plus assertions and example-derived factories. This is the single biggest lever on delivery speed and should be weighted heavily.Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Pre-1.0 versioning | High | 0.x carries no stability promise. Pin exact versions; assume breaking changes in the generated surface. |
| Writes largely unexercised | High | Only 14 creates sent live; updates, deletes and actions verified against spec + fake only. The fake encodes the same assumptions as the code, so it cannot catch spec misinterpretation. |
| Hand-curated corrections drift | Medium | The 31 type fixes, 73 hidden attributes and 10 relationships are point-in-time observations. They will rot silently if Productive changes and the weekly drift PR only reflects spec changes, not live-API behaviour. |
| No webhook receiver | Medium | Forces polling. Drives latency, cost and rate-limit pressure. |
| Generated code volume | Medium | Human review of the diff is not realistic. Quality assurance must lean on contract tests and drift PRs. |
| Single-maintainer/bus factor | Medium | No stated support model or issue SLA. |
Key questions for engineering / the maintainer
Stack fit
Migration path
Compatibility
included, identity index, ext=bulk) mean callers must understand compound documents; that's a knowledge dependency, not a code dependency.Sequencing
Maintenance
docs/reference.md and docs/api-differences.md diffs, and decide on the generated-code churn. Budget a recurring, non-trivial slice of an engineer's time; generated diffs are noisy and effectively unreviewable line by line.composer record, seed, record:types, record:fixtures with a leak check) is a meaningful operational asset: it lets us re-verify against the live API ourselves instead of waiting upstream. The leak check is a good sign of production hygiene, but re-recording touches real customer data — gate it to a dedicated org and treat the guard as defence in depth, not a licence.Support
Scaling
lazy() for large result sets rather than all(); memory blowups on wide resources are the usual second surprise.ext=bulk and report grouping reduce round trips; prefer them over client-side fan-out.Failure modes to design for
Ramp-up
Productive::fake() plus factories should cut test-writing effort significantly and is the main reason to expect a fast ramp — insist the team writes its first feature test against the fake in the spike so this claim is validated early rather than assumed.How can I help you explore Laravel packages today?