DEV3 Technologies home

DEV3 Postwren – Social Media Scheduler SaaS Laravel Script with Content Calendar, Queues, Client Approvals, Analytics

A self-hosted social media scheduler on Laravel 12 and Filament 4: a composer with a preview per network, a content calendar, queue slots, approvals with a client portal, analytics with best times, a comments inbox and tracked links. Web installer and demo data included. No mobile apps.
by DEV3 TechnologiesVerified Author(0) 0 sales 0 viewsUpdated 11 Nov 2026

Video tour. Pick a section below to browse 101 screenshots in 9 sections.

App & phone tours

Tap play to watch each app. Nothing downloads until you do.

  • Mobile web1:23

Postwren is a social media scheduler built by DEV3 Technologies on Laravel 12 and Filament 4. You run it as the operator: you sell plans to workspaces (a brand, a creator or an agency with many client brands), and each workspace connects social profiles, writes posts once, schedules them on a calendar or into queue slots, routes them through approvals and reads the results.

What it does

  • Composer with a preview per network. One text, a tab for every selected profile with its own preview and character counter, media from a private library, alt text, a first comment, a tracked link with UTM tags and a rule-based caption helper. Limits for ten networks (text length, media count and kind, aspect ratio, size) are checked as you type, on save, on schedule and again at publish time.
  • Calendar and queues. Month, week and list views for one brand or all, coloured by content pillar, with holidays and notes. Drag a scheduled post to a new day or hour; the move is re-validated. Give each profile weekly slots, add a post to the next open slot, keep category queues, and shuffle what has not gone out.
  • Approvals and a client portal. A rule per brand: none, internal, client, or internal then client. Decisions belong to a round, so an approver with an old version open is told it changed. Clients get a magic link and a phone-first portal with a preview per network: approve or request changes with a comment, no account needed.
  • A worker you can trust. Each due post is claimed exactly once, even with several workers; temporary errors retry with backoff; an expired token holds the post instead of failing it; a crash never posts twice. Daylight saving is handled: the intended local time wins.
  • Analytics. Impressions, reach and engagement per post and profile, a best-time heatmap by weekday and hour, link clicks, a CSV export and a monthly client report as PDF.
  • Comments inbox. Comments on posts published through Postwren, with reply, hide and assign.
  • Operator panel and API. Workspaces with usage meters, plans, subscriptions, invoices, driver configuration, failed publishes across workspaces, profile health, an outbox, an audit log and audited view-only support sessions. A scoped REST API with an OpenAPI document, idempotency keys and signed webhooks.

Quality checks

The release passed seven gates on the final code: Larastan level 6 with 0 errors, 272 Pest tests (2523 assertions), a build inside the page budget, migrations and the full demo seed on MySQL 8 and SQLite, a headless smoke test of 63 pages with the happy paths and the MySQL race checks (the same due batch claimed by four workers, two posts added to one queue at once, approving while editing, parallel drags), the installer driven from the zip, and a secret scan. The home page scores 100 for performance and 96 for accessibility on mobile.

What you should know before buying

  • Real publishing needs your own developer app on each network, and networks review those apps and may restrict what they allow. The demo and the default install use simulated drivers that never call a network; ten real drivers are present behind configuration and refuse with driver_not_configured until you add keys. Network rules change, so the drivers are isolated to be updated.
  • No ads management, no direct messages, no social listening. The inbox covers comments on posts you published.
  • Analytics are what each network's API returns (simulated curves in the demo).
  • Videos are not transcoded. They must already meet each network's format. Images are resized to the right ratio and cleaned of location data.
  • You are the merchant of record. Plans run on a simulated gateway; Stripe, Razorpay and PayPal drivers are present and need your keys.
  • The caption helper is rule-based and calls no AI service. An optional remote driver exists, off by default, for your own key.
  • A cron entry every minute is required; a queue worker and Reverb are optional. Web only: there are no mobile apps. Node.js is not needed (assets are prebuilt).

How it is different

It is a dedicated scheduler, not a CRM or a messaging tool: per-network previews, queues with time slots, approvals for clients, tracked links, a best-time heatmap and a light comments inbox. It is multi-tenant, with every workspace scoped on every query, so it suits an operator who wants to sell scheduling to many brands and agencies.

Included

Source code, the web installer, a buyer guide, demo data with ten fictional workspaces (a year of history, approvals waiting at an agency, posts that go out within minutes of a fresh install), a cron entry for the scheduler, and six months of support.

How it's built

Architecture, stack, key decisions and the quality gates DEV3 Postwren passed before release.

The engineering behind Postwren: a worker that claims each post once, approvals that cannot be decided on an old round, schedules that survive daylight saving and an HTTP layer that pins every hop.

The problem it solves

A scheduler looks like a calendar until two workers wake at once, a token expires an hour before a post, the clocks change overnight, or an approver clicks on a version that was just edited. Each of those must end with one post, on time, with the right text.

Architecture and approach

Postwren is a Laravel 12 application with Filament 4 operator and workspace panels and a hand-built composer, calendar and client portal. Publishing runs through one worker that claims due variants with a row-level update, so each is taken once; a stale claim is released only after asking the network for the post by its idempotency tag, so a crash never posts twice. Approvals keep a round number: a decision on an older round is refused and an edit opens a new one.

Schedules store the UTC instant and the intended local time, and a nightly job re-derives the instant so daylight saving cannot move a post. Every outbound request, from link previews to webhooks and real network drivers, goes through a client that resolves the host once, refuses private ranges, pins the checked address on every hop and re-checks redirects. Tenancy fails closed, and tests walk every route and panel page with another workspace's ids.

Quality gates and results

The release passed seven gates, including a headless smoke test of 63 pages and race checks on MySQL: four workers on one batch publish every post once, parallel queue additions take different slots, and approving while editing never leaves an approved post with the new text.

Tech stack

Area Technologies
Application Laravel 12, Filament 4, Blade, REST API
Data MySQL 8, SQLite
Quality Pest, Larastan, Playwright

Inside the build

Plan the week: The week grid fills as posts drop into their slots, beside a composer with a tab per network. Plan the week — The week grid fills as posts drop into their slots, beside a composer with a tab per network.

Hero in dark mode: Periwinkle on night ink, following the visitor colour scheme. Hero in dark mode — Periwinkle on night ink, following the visitor colour scheme.

Guides & articles

Practical guides and engineering write-ups for DEV3 Postwren.

Social media scheduler software: 6 things to check before you pick one

Last updated
Social media scheduler software: 6 things to check before you pick one: DEV3 Postwren

Posting is the easy part. The hard part is knowing a post will go out, on time, with the text someone approved. Here are six things to check before you pick scheduling software, with DEV3 Postwren as the worked example.

The Postwren home page: a week grid filling with posts beside a composer with a tab per network

1. Does it show each network's limits before you hit publish?

Every network counts characters, media and aspect ratios differently. Postwren checks the post per network as you type, in a tab for each selected profile, and checks it again when the post is due, so a rule that changed after scheduling is caught instead of failing in public.

The composer with a tab per network, a live character counter and a preview

2. Can it keep a queue full without you?

A weekly set of slots per profile, an "add to queue" that takes the next open one, and category slots so each content pillar gets its share. Changing the slots re-flows what is already queued.

Queue slots per profile for the week

3. Who approves, and what if the text changes?

Agencies need an internal sign-off, a client sign-off, or both. The detail that matters is the round: a decision belongs to one version of the post, so approving an old version is refused. Clients should not need an account either; a private link on a phone is enough.

The client approval portal on a phone, with a preview per network

4. What happens when something goes wrong?

Tokens expire and networks rate limit. Look for a worker that holds a post when a connection needs renewing, retries temporary errors with backoff, never posts twice after a crash and tells you plainly what failed and why.

Failed and partially failed posts with their error codes

5. Are the numbers honest?

Analytics are only as good as what each network's API returns. A best-time heatmap should say how many posts stand behind a cell and never recommend a time with too few.

The best-time heatmap by weekday and hour

6. What does going live really need?

Ask this one first. Publishing to real networks needs a developer app on each network, created by you and reviewed by the network. Postwren ships with simulated networks so you can try everything today, and real drivers behind configuration that refuse until you add keys. It does not manage ads, send direct messages or listen across the social web.

Driver configuration: which real networks have their keys, never the secrets

Video: the Postwren tour

Frequently asked questions

The complete source code (version 1.0.0) as a download from your account, with the setup and usage guides shown on this page. You can modify the code to suit your product.

Buying guides: Laravel scripts with Filament panels and a web installer · Next.js or Laravel for a SaaS script?

Questions about this product (0)

Answers from the DEV3 team and the community.

Ask a question

No questions yet.

Wondering about setup, licensing or customisation? Ask, and the DEV3 team will help.

More from this author

View all

Related in Web Scripts & Software

View all