by PostPack (LX AI)

Last updated: 2026-09-16

Platform-aware captions beat one-size copy

Length, CTA, and hashtag norms differ by channel. PostPack asks for platform + vibe before drafting five options.

How PostPack works behind the scenes

I start with a short form where you paste your product description, choose a platform, and pick a vibe from a preset list. The form sends three fields to our backend: raw text, platform key, and vibe tag.

Input collection

The backend trims whitespace, lowercases the platform key, and checks the vibe against an allowed set. If any field is missing we return a clear error asking you to fill it in.

Prompt building

We assemble a prompt that tells the language model exactly what we need. The prompt contains three parts: a system note that sets the role, a user note that repeats your product text, and a constraint block that lists the platform’s length limit, preferred hashtag count, and CTA style. The vibe tag is inserted as a style modifier (e.g., “witty”, “professional”, “energetic”).

Model call and sampling

The prompt goes to a fine‑tuned LLM hosted on a private endpoint. We request five completions with a temperature of 0.8 and a top‑p of 0.9 to get variety while staying on topic. Each completion is stopped after the model generates a newline or reaches 200 tokens, whichever comes first.

Post‑processing

Each raw output is stripped of leading/trailing spaces, checked for profanity, and scanned for platform‑specific symbols. Hashtags are normalized to lower case and deduplicated. The final five strings are returned as JSON.

Error handling and logging

When the model returns an empty string we log the incident and ask the user to adjust the vibe or shorten the input. All requests are stored with a timestamp and an anonymized hash for later audit, complying with the guidelines from https://owasp.org/www-project-top-10-for-large-language-model-applications and the AI risk framework at https://www.nist.gov/itl/ai-risk-management-framework. No personal data is retained.

Platform-specific rules we encode

Every platform has its own unwritten grammar. Below is a table that shows the concrete limits we bake into the prompt.

Platform Max length (characters) Hashtag norm CTA placement
Twitter (X) 220 1‑2 End of line
LinkedIn 300 0‑3 Mid‑sentence or end
TikTok 150 3‑5 Start or end
Instagram 200 4‑8 End of line
Facebook 250 0‑2 End of line

Twitter (X)

The platform rewards brevity. We cap the output at 220 characters to leave room for a retweet comment. Hashtags are limited to two and placed at the very end so they do not interrupt the main message.

LinkedIn

Professional tone is expected. We allow up to 300 characters, encourage a clear value proposition, and permit up to three hashtags that are usually industry tags. A call‑to‑action can sit after the first sentence or at the close.

TikTok

Here the vibe is casual and trend‑driven. We keep the caption under 150 characters, encourage three to five hashtags that match the sound or challenge, and often place a CTA at the very start to catch scrollers.

Instagram

Visual platforms tolerate longer copy. We target 200 characters, allow four to eight hashtags (mix of broad and niche), and usually put the CTA after the main line so the image remains the focus.

Facebook

Community‑focused posts work best with a friendly tone. We limit to 250 characters, use zero to two hashtags (often for event tags), and place the CTA at the end to encourage comment.

Crafting the vibe presets

Vibe tags are the shortcut that turns a generic prompt into a voice that feels native to the chosen channel. We maintain a curated list that maps each vibe to a set of style cues.

Source of vibe ideas

How we turn a vibe into prompt modifiers

  1. Pick three adjectives that capture the core feeling (e.g., witty, bold, warm)
  2. Add a short phrase that guides syntax (e.g., “use short sentences”, “prefer emojis at end”)
  3. Include a note on emoji usage if the vibe calls for it
  4. Combine the items into a single style block that is appended to the system note

Example vibe entries

Maintaining the list

Every quarter we review the engagement data of generated captions. If a vibe shows low click‑through we either retire it or replace it with a new variant that better matches emerging language. This keeps the preset library fresh without needing constant user input.

Real‑world example workflow

Below is a step‑by‑step walkthrough of how a founder might use PostPack to launch a new feature announcement.

Step 1 – Fill the form

The founder pastes a two‑sentence description of the new feature, selects “LinkedIn” as the platform, and chooses the vibe “Professional”.

Step 2 – Backend receives the payload

The server trims whitespace, lowercases the platform key to “linkedin”, and checks that “Professional” is in the allowed vibe set. All three fields are present so processing continues.

Step 3 – Prompt assembly

The system note tells the model to act as a seasoned B2B copywriter. The user note repeats the feature description verbatim. The constraint block adds: max length 300 characters, hashtag norm 0‑3, CTA allowed mid‑sentence or at end, and the style modifier “Professional”.

Step 4 – Model inference

The prompt is sent to the private LLM endpoint. Five completions are sampled with temperature 0.8 and top‑p 0.9. Each generation stops at the first newline or after 200 tokens.

Step 5 – Post‑processing

Each output is stripped, profanity filtered, and checked for LinkedIn‑specific tokens. Hashtags are lower‑cased and duplicates removed. The final five strings are packaged as JSON and returned to the UI.

Step 6 – User review

The founder sees five options, picks the one that best matches the brand voice, and copies it into the LinkedIn composer. If none feel right they can adjust the vibe or tweak the input and run the tool again.

Step 7 – Publishing and feedback loop

After posting, the founder tracks engagement. If the caption performs well they note the vibe‑platform pair as a winning combination for future similar announcements.

What this is NOT

It is important to be clear about the limits of the tool so you set realistic expectations.

Operator checklist for Platform-aware captions beat one-size copy

I keep a written checklist next to every release that touches this topic. The list is boring on purpose: name the owner, name the evidence artifact, and name the rollback. If a step cannot produce a file, a ticket, or a log line, it is not a step — it is a wish.

Before you change production

While you run the check

After you finish

SignalWhat to recordStop-ship?
Unexpected write or sendTool name, args, identityYes until gated
Missing confirmation on destructive actionCall path and bypassYes
Untrusted text treated as instructionSource surface and resulting actionYes for agent reach
Scanner clean, judgment openDeferred items + ownerOnly if core path safe

postpack helps with the measurable first pass. Architecture choices, legal sign-off, and customer-facing claims still need a human owner. Treat every checklist row as decision support, not a certificate.

How I explain limits to buyers

When a prospect asks whether the product "covers everything," I answer with the boundary: automated checks catch known patterns; novel chains and policy judgment still need review. That honesty keeps support load down and keeps the blog aligned with what the product actually does.

If you need a second opinion, pair this write-up with the references below and with your own staging reproduction. Do not skip the reproduction step just because a model wrote a confident summary.

References

Frequently asked questions

Does it match the platform?

Yes. It is platform-aware, adjusting style and hashtags to the channel you choose.

Are hashtags included?

Hashtags are included in each run, tuned to the platform and vibe.

Can I post them as-is?

The captions are copy-ready, so you can paste and publish.

Who should use PostPack?

Founders and creators posting consistently who want on-vibe captions without writing from scratch.

References

Want to try the product? PostPack

Generated 2026-09-17 · primary sources only · no fabricated traffic metrics