Changelog

What shipped.

Newest first. Every line is a capability that's live, not a promise. If it's on the roadmap and not in the box, it isn't here yet.

  1. Launchv1.0

    The engine makes the pixels

    • The v2 visual engine is now a documented part of the public API. POST /v1/generate-visual-v2 takes a brief and a brand kit and returns a finished post: caption, hashtags, rendered image masters, and the judge's score. Behind every image is a serializable spec, so the same spec renders the same pixels and a revision is a diff, not a re-roll.
    • Layout is dealt, not templated. Five archetypes (photo-full, poster-grid, split-block, inset-card, text-panel) cross with six typography voices so a feed never reads as one repeated design, and the spec records what the dealer dealt.
    • A design judge grades every render on a ladder from TEMPLATE to GREAT, and the engine revises what falls short before returning it. The verdict, the score, and the single highest-leverage fix ride along in the response.
    • Carousels ship the same way: POST /v1/generate-carousel-v2 renders a full deck with one frame family and per-slide roles, and POST /v1/revise-carousel-v2 refines a deck with freeform feedback while POST /v1/revise-visual-v2 does the same for a single post.
    • The homepage now shows the engine's work. /gallery serves real, unretouched masters rendered for fictional brands, each labeled with the layout archetype and typography voice the dealer actually dealt.
    • All four visual endpoints are in the OpenAPI spec and on /docs, and MCP agents get them as first-class tools: generate_visual, revise_visual, generate_carousel, and revise_carousel, annotated as credit-bearing and slow. They meter like every other model-backed call: one credit, charged only when the call succeeds.
  2. Featurev0.25

    One frame family per deck

    • Carousel decks now sign a frame contract: the dealer picks one frame family for the whole swipe (gallery, split, inset, or panel) and every slide honors it, with variation carried by the slide's role instead of per-slide randomness. A hook anchors differently than a step, a step differently than the closing ask, and the deck still reads as one designed object. Per-slide roulette was a tell, so it is gone.
  3. Featurev0.24

    Layout is dealt, not templated

    • Static posts stopped living in two structures. The engine now deals one of five layout archetypes per post: full-bleed photo, split photo and brand field, inset framed photo, a dedicated text panel, or the poster grid card. The deal is deterministic per brand and post, so the same post re-renders identically while a feed stops repeating one shape, and the design judge grades the render against the archetype's own bar.
  4. Featurev0.23

    Typography gets a voice

    • Six typeface voices joined the renderer, from gritty condensed poster type to editorial serif, each with rhythm expressions so consecutive posts share a voice without sharing a look. Brands with real fonts in their kit keep them; brands without get a voice fitted to their mood instead of a default. Two businesses in the same town stop wearing the same face.
  5. Featurev0.22

    The reel is editable too

    • The video composition became an editable document: timeline beats, free-canvas text layers, and voiceover that round-trips. This powers the editor in Taka, where every reel the engine cuts can be adjusted beat by beat before it ships. The reel engine itself remains behind Taka for now.
  6. Featurev0.21

    Carousels grow up

    • Multi-slide decks became first-class: planned as an arc (hook, rehook, value, ask), rendered slide by slide, and editable per slide as layered compositions.
    • Carousel imagery got the honesty pass: real brand photos lead the deck, and generated imagery is only ever name-free atmosphere. The engine will not invent your storefront, your staff, or your logo.
  7. Featurev0.20

    Every post is a layered document

    • Behind every rendered master there is now a Composition: an ordered set of typed layers (background, scrim, headline, accent, logo) with geometry in canvas fractions. An editor can move a headline, the engine re-renders the same document, and the published pixels match what the canvas showed. Edits became diffs instead of re-rolls.
  8. Launchv0.19

    The visual engine becomes the default

    • The v2 engine took over as the production default behind Taka: every static post it ships is decided, rendered, judged, and revised by this pipeline. Hardening came with the flip, including Sentry-grade alerting on every generation path. Nothing sells an engine like running it on your own product first.
  9. Featurev0.18

    Reels, rendered on Cloudflare

    • A short-form video engine joined the family: narrative beats, motion b-roll, captions timed to a real voiceover, assembled fully on Cloudflare infrastructure. It powers Taka's reels in production and stays internal while it earns its way to the public API.
  10. Launchv0.17

    The post gets pixels

    • The v2 static engine shipped end to end: a brief and a brand kit go in, and a postable image post comes out with its caption, hashtags, and rendered masters in true 4:5 and 9:16. The model writes the words; a real layout engine composites them, so warped text and garbled logos are structurally impossible.
    • Every render faces a judge before it returns: hard gates for specificity, truth against the proof bank, visual integrity, and whether the owner would proudly sign it, plus a bounded revise loop that fixes the weakest stage instead of re-rolling the post.
  11. Fixv0.16

    No tell in the verdict

    • Generated posts already had the em-dash and en-dash stripped, since that punctuation is the model's most-cited writing tell. Now the rest of the human-facing prose gets the same pass: the score verdict, the hook and format notes, and every signal's label and detail, plus rewrite change notes and the hook and angle on each planned post. The cleanup never touches ordinary hyphens, so 'build-in-public' and number ranges stay intact.
  12. Docsv0.15

    The credit wall is in the spec

    • Every credit-bearing endpoint (score, rewrite, generate, plan, both voice paths, and scoring a stored post) now documents the 402 quota_exceeded response in the OpenAPI spec, with a Retry-After header and the credit headers that report your standing. A code generator reading the spec now knows a model call can be refused when the monthly allotment runs out, instead of discovering it at runtime.
    • While auditing, two endpoints had incomplete response sets: creating a voice from samples and scoring a stored post can both fail on a rate limit or a misbehaving model, and now say so (429 and 502). The spec matches what the server actually returns.
  13. Featurev0.14

    Discover the cost before you spend it

    • GET /v1/meta (and the socialkit://meta MCP resource) now carry a billing block: the credit cost model an agent can read without a key. It spells out that a credit is one successful model-backed call, that only score, rewrite, generate, plan, and build_voice cost one, that nothing is charged unless the call succeeds, and the full plan ladder with each tier's monthly allowance. No more scraping /pricing to learn what a call costs.
  14. Featurev0.13

    Planning that says which rubric ran

    • POST /v1/plan (and the plan_week MCP tool) now echo the platform they planned for, so a caller can confirm which pillar set produced the calendar instead of inferring it. This matches the platform echo score has carried since 0.10.
    • The MCP prompts are platform-aware. draft_and_grade and improve_post no longer claim LinkedIn is the only supported platform, and plan_and_draft_week takes a platform argument ('linkedin' or 'x') that threads through every step of the workflow.
    • The OpenAPI spec version now tracks the shipped version automatically, so /docs, /openapi.json, and /openapi.yaml can never drift from what we actually shipped.
  15. Fixv0.12

    Credit headers tell the truth

    • The x-credits-used and x-credits-remaining headers on a successful model call now reflect the balance after that call is billed, not before. A score that leaves you with 99 credits now says 99, instead of the old off-by-one 100. A blocked (402) call still reports the pre-charge balance, since nothing was spent.
  16. Featurev0.11

    Retry-safe, and easy to watch

    • Idempotency-Key now covers the LLM endpoints (score, rewrite, generate, plan) and their MCP tools, not just post creation. A retried call replays the original result instead of charging a second credit.
    • Reusing an Idempotency-Key with a different body is now an error (409 idempotency_key_reused on REST, a clear tool error on MCP) instead of silently replaying a stale result, so a buggy retry can't quietly return the wrong answer.
    • Draft and schedule in one call: pass runAt to POST /v1/posts (or the create_post tool) to create an already-scheduled post.
    • GET /v1/health is a keyless readiness probe that checks the database and key-value store, returning 200 when healthy and 503 when degraded so an uptime monitor can page on it.
    • The API host root (api.socialkit.sh) now returns a machine-readable service index pointing at the docs, spec, discovery, and health, instead of marketing HTML.
  17. Featurev0.10

    A contract you can build on

    • Every response now carries an x-request-id, and every error envelope includes the same id as error.requestId. Log it, and quote it to support so we can pull the exact call from our logs.
    • Post creation is idempotent. Send an Idempotency-Key header and a retry returns the original response instead of creating a duplicate.
    • List endpoints (posts, media, webhook deliveries) are paginated with limit and offset and a hasMore flag, so large accounts stay fast.
    • Webhooks are signed with a timestamped HMAC and retried with backoff, so you can verify authenticity and survive a brief outage without dropping events.
    • Score responses now echo the platform they graded against, so a caller can confirm which rubric ran.
  18. Featurev0.9

    Pricing and credits

    • Plans are live. Free starts at 100 credits a month with no card; Pro lifts the ceiling. See the full breakdown at /pricing.
    • A credit is one successful LLM-backed call, charged only after the call succeeds, so a rate limit or quota error never costs you one.
    • Every response echoes your standing in x-credits headers, and the dashboard's billing tab shows your plan, usage, and reset date.
  19. Launchv0.8

    The dashboard

    • A logged-in home at app.socialkit.sh. Sign in with a magic link or with Google, no password to manage.
    • Create and revoke API keys, manage brands and voices, draft and schedule posts, and see your calendar, all from the browser.
    • Score, generate, and rewrite in-app, so you can feel the product before wiring a single line of code.
    • Everything the dashboard does is the same surface the API and MCP server expose. One capability, three ways in.
  20. Featurev0.7

    X planning

    • plan now builds X (Twitter) content calendars, not just LinkedIn. Set platform: "x" on /v1/plan or the plan_week MCP tool.
    • X calendars use reply-shaped pillars (sharp takes, build-in-public receipts, save-worthy tips, reframes), keep hooks punchy and reply-baiting, and never suggest a PDF carousel since X has no document format.
    • Honest scope: scoring, preflight, generation, rewrite, and planning are all multi-platform now. Publishing stays LinkedIn-only until the X channel path ships.
  21. Featurev0.6

    X rewrite

    • rewrite now sharpens X (Twitter) posts, not just LinkedIn. Set platform: "x" on /v1/rewrite or the rewrite_post MCP tool, or pick the platform in the dashboard's Rewrite page.
    • X rewrites pull toward the reply: tighter (default under 280 chars), a sharper reply-baiting hook, link moved out of the body, hashtags stripped. You still get the honest before/after score, graded against the live X rubric, and no facts are invented.
    • Honest scope: scoring, preflight, generation, and rewrite are all multi-platform now. Publishing stays LinkedIn-only until the X channel path ships.
  22. Featurev0.5

    X generation

    • generate now writes X (Twitter) posts, not just LinkedIn. Set platform: "x" on /v1/generate or the generate_post MCP tool, or pick the platform in the dashboard's Generate page.
    • X drafts are written for the ranker that matters: reply-optimized hooks, punchy by default (under 280 chars), no link in the body, no hashtag spam. Each candidate is auto-graded against the live X rubric and returned best-first.
    • Honest scope: scoring, preflight, and generation are multi-platform today. Rewrite and publishing stay LinkedIn-only until their X paths ship.
  23. Featurev0.4

    X scoring

    • score and validate now grade X (Twitter) posts, not just LinkedIn. Set platform: "x" on /v1/score or /v1/posts/validate, or on the score_post / validate_post MCP tools.
    • Each platform is graded against its own 2026 rubric. X weights the hook and reply-driving harder, knows the link deboost is brutal (move the link to a reply), and warns on hashtag spam at 3+ instead of 6+.
    • Per-platform contract everywhere: X allows long-form up to 25,000 characters and drops the PDF-carousel media kind. GET /v1/meta now returns a platformConfigs block with each live platform's cap, media set, and dimension weights.
  24. Docsv0.3

    Docs that can't drift, and copy that's true

    • /docs is now generated from the OpenAPI spec. Every endpoint, parameter, and schema on the page is the real surface, with a build-time check that fails if the page and the spec disagree.
    • Added /blog and this changelog.
    • Removed the last of the inflated copy. We grade with a Claude Sonnet judge, and the site now says exactly that.
  25. Featurev0.2

    Memory: brands and voices

    • Brands and voices are now first-class, account-scoped objects. Create one once, reference it by id from generate and plan.
    • build_voice distills a reusable voice from sample posts. Pass the returned id to condition every later draft.
    • Same memory works over REST and over MCP. One capability, two transports, never implemented twice.
  26. Launchv0.1

    The API and the MCP server

    • Authed JSON REST surface at /v1: score, rewrite, generate, and plan, plus accounts and API keys.
    • MCP server exposing the same capabilities as tools. Drop it into Claude, Cursor, or any MCP client with one bearer key.
    • OpenAPI spec published as the single source of truth for the whole surface.
    • Scoring eval harness with a held-out reference set, so we can measure the grader instead of guessing.
  27. Launchv0.0

    PostScore

    • Free, no-signup PostScore: paste a LinkedIn draft, get a 0-100 score with a per-dimension breakdown and ranked signals.
    • Shareable result pages with rendered OG cards.

Want this as a feed?

The API and MCP server move faster than this page. Get a key and watch the surface grow from the inside.

Read the docs