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

Social Post Laravel Package

martin-georgiev/social-post

Social Post is a Laravel package for publishing content to multiple social networks from a single API. Compose a post once and share it to Facebook, Twitter/X, LinkedIn and more, with a clean, framework-friendly interface for managing cross-platform social updates.

Deep Wiki
Context7

Technical Evaluation

Architecture fit. martin-georgiev/social-post is a thin abstraction layer: a manager/driver construct that resolves a per-network driver from Laravel config and exposes a single "publish a status update" call. That shape is idiomatic Laravel (service provider + publishable config + facade) and is the right pattern for centralised publishing. The problem is the abstraction boundary. In 2018 all three networks could be reasonably modelled as "140–280 characters plus a link." Today they diverge on media (required for reach), threading, organisation vs personal identity, mention/link syntax, and scheduling semantics. A single normalised payload will inevitably be bypassed by per-driver payload builders, at which point the package contributes config plumbing and little else.

Integration feasibility. Low for composer require, moderate for a fork. A package last released 2018-08-02 and archived upstream will almost certainly carry php: ^7.0 and illuminate/support: ~5.x constraints, Guzzle 6, and pinned third-party SDKs — all of which block a clean install on PHP 8.2+/Laravel 10–11 without --ignore-platform-reqs hacks. Feasibility improves sharply if we treat the repo as a reference implementation and interface spec rather than a dependency.

Technical risk — high.

  • Platform drift. Every driver is stale. Meta's Graph API is versioned on a ~2-year lifecycle and has already retired large parts of the publishing surface the package targets. LinkedIn has moved off ugcPosts/r_liteprofile (OpenID Connect identity, Posts API, restricted share endpoint). X/Twitter has effectively retired v1.1 write paths in favour of v2 with paid access tiers and revised media upload. None of this is patchable from upstream.
  • Dependency risk. Unmaintained transitive SDKs, no security backport path, no CVE monitoring coverage — a supply-chain concern in any audited environment.
  • Credential risk. Per-account OAuth token storage, refresh, encryption at rest and revocation are ours to design regardless of the package, but the package's storage assumptions will need review.
  • Approval risk (the real critical path). Meta app review plus business verification, LinkedIn Marketing Developer Platform approval, and X developer agreement/tier selection are process gates measured in weeks, not engineering tickets. No package solves these.
  • Verification risk. Zero test doubles for a live API; without contract tests we cannot tell a regression from a platform change.

Key questions before committing.

  1. Does "centralised" mean personal accounts, organisation/brand pages, or both — and is per-tenant OAuth in scope, or one set of system credentials?
  2. What are the actual required capabilities: text only, or media, threads, scheduling, deletion, and engagement metrics? Each one is a separate driver surface.
  3. Which Laravel/PHP versions must be supported, and is there a legacy app that genuinely needs the 2018-era constraints?
  4. Who owns the platform app registrations and the review/approval process, and has any of it been started?
  5. What is the expected daily volume per network, and does it fit within free or low tier rate limits?
  6. Is partial publish failure acceptable (post succeeds on 2 of 3 networks), and what does "success" mean to the product?
  7. Build vs buy: is a Buffer/Hootsuite/Ayrshare-class aggregation API cheaper than owning three drivers?

Integration Approach

Stack fit.

Dimension Package baseline (expected) Our target Verdict
PHP 7.0–7.2 8.2/8.3 Blocking
Laravel 5.x 10/11 Blocking
HTTP Guzzle 6 Guzzle 7 / Laravel HTTP client Blocking
Twitter/X v1.1 + OAuth 1.0a v2 write, OAuth 2.0 PKCE + OAuth 1.0a for media Rewrite
Facebook Graph ~v3/v4 Current Graph, Page access tokens Rewrite
LinkedIn v1/v2 ugcPosts Posts API + OpenID Connect Rewrite
Queueing/retries Synchronous, ad hoc Queued jobs, backoff, idempotency Build

Migration path — four options, ranked.

  1. Adopt as-is. Only viable if we are supporting a legacy PHP 7 app. Accepted technical debt with a hard expiry date. Not recommended for new work.
  2. Fork and patch. Buys weeks, not quarters. We inherit three dying SDKs and become the maintainer of a package nobody else uses. Rejected.
  3. Extract the interface, reimplement drivers. Keep the SocialPost contract and config ergonomics, rebuild the drivers on current platform APIs behind Laravel's HTTP client and queue. Recommended — preserves the package's one genuinely good idea (a uniform publishing contract) and discards the unmaintainable half.
  4. Buy the aggregation. Use a multi-network publishing API. Highest recurring cost, lowest engineering and app-review burden. Recommended if volume is modest and differentiation is low.

Sequencing.

  1. Spike (3–5 days). Confirm composer constraints, inventory actual driver coverage, and produce a gap list against current platform APIs. Gate: do we fork or replace?
  2. Contract definition (1 week). Define the internal publishing interface and canonical result object — including a first-class PartialSuccess state and per-network outcome list. This is the deliverable we keep from the package.
  3. Approval in parallel, not after. File Meta app review, LinkedIn MDP, and X tier selection at the start of phase 2. This gate dominates the timeline.
  4. Driver delivery, one network at a time (2–3 weeks each). Pick the network with the largest business need first to prove the contract. Each driver ships with a fake/stub for CI and a small live smoke-test suite.
  5. Operational hardening (1–2 weeks). Queue + rate limiter per network, token refresh job, retry with idempotency keys, dead-letter handling, alerting.
  6. Retire the dependency. Remove the fork, document the replacement, close the supply-chain finding.

Operational Impact

Maintenance. We become the maintainer. Budget roughly 0.2–0.25 FTE steady state for token handling, error triage and dependency hygiene, with 1–2 week spikes whenever a platform ships a breaking change — Meta on a near-annual version cadence, LinkedIn one to two times a year, X unpredictably. Upstream is archived and effectively has no maintainer, so there is no "wait for a fix" path; every incident is ours.

Support. No vendor, no SLA, and a 10-star community means no realistic third-party answers. This is a bus-factor-1 pattern: the engineer who understands the drivers must document them or the whole capability becomes unmaintainable. Contrast with a bought aggregation service, which moves this to a support contract.

Scaling. Publishing is I/O-bound fan-out with per-network quotas, not a throughput problem — a queue with per-network rate limiters and concurrency caps is sufficient for typical volumes. The non-obvious costs are (a) token lifecycle for every connected account, which grows linearly with tenants, (b) media upload, which is a separate multi-step protocol on X and LinkedIn, and (c) idempotency, because retries on a partially-completed publish will produce duplicate posts on networks that succeeded.

Failure modes to design for explicitly.

  • Partial publish — 2 of 3 succeed; the user sees one post missing. Requires an explicit result model and retry-only-failed semantics.
  • Credential decay — expired or revoked tokens surface as opaque 401s; needs proactive refresh and a re-auth prompt.
  • Rate limiting (429) — burst publishing exhausts quotas; needs backoff and a per-network budget.
  • Content rejection — character limits, unsupported media, policy blocks; validate client-side where possible.
  • Silent interface drift — a platform changes payload shape and posts fail without warning; contract tests plus a canary account catch this.
  • Permission revocation — Meta/LinkedIn suspend the app for policy reasons; this is a total outage of one channel with no engineering fix.
  • Duplicate posts on retry — the most visible user-facing failure and the one most often missed.

Ramp-up. One engineer, roughly one week to fully understand the package and produce the gap analysis; two to three weeks per driver to bring to production quality including auth, media and tests; plus platform review lead times that we do not control. Net: this is not a "drop in a package" task. It is a 6–10 week capability build where the package supplies a naming convention and a config file. The honest recommendation is to keep the interface idea, source the drivers from current APIs or a paid aggregator, and avoid inheriting an archived dependency into a codebase we intend to maintain.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core