Skip to content

Releases: mattkerr09/adplaybook-site

AdPlaybook 0.1.1 — fixes the app not starting

Choose a tag to compare

@mattkerr09 mattkerr09 released this 10 Aug 22:52

If you downloaded 0.1.0, it did not work. This fixes it. Delete the old copy and use this one.

What was wrong

The app launched, spawned its engine, and the engine died instantly — so the window sat on "Starting the engine…" and eventually gave up.

PyInstaller's one-file binary unpacks Python.framework into a temporary directory at launch and loads it. The executable was signed with a Developer ID; the embedded framework still carried python.org's signature. Under macOS's hardened runtime, a process cannot load a library signed by a different team:

code signature not valid for use in process: mapping process and mapped
file (non-platform) have different Team IDs

The build signed with the hardened runtime and no entitlements at all, so library validation was fully enforced and there was no exception for the interpreter it ships.

The fix

One entitlement: com.apple.security.cs.disable-library-validation. The hardened runtime stays on and every library still has to be validly signed. They just no longer all have to be signed by the same team.

Why it shipped

The build's smoke test ran before signing. The unsigned binary starts fine, so the check passed every time while the artifact that actually shipped was never started by anything. There is now a second smoke test immediately after signing, run against the binary inside the bundle, and the build refuses to notarise if the signed engine will not serve.

Verified

Downloaded this release, mounted it, applied a browser quarantine attribute, and ran the engine out of the bundle: health ok, 10 strategies, 8 platform specs.

After it opens

It needs a model provider before it can build anything — either Outlier running locally, or an OpenAI or Anthropic key. The first screen asks. Nothing about your product leaves the machine when you use a local model.

AdPlaybook 0.1.0

Choose a tag to compare

@mattkerr09 mattkerr09 released this 10 Aug 20:51

First build. Mac, Apple Silicon. Signed with a Developer ID certificate, notarised by Apple, and stapled — it opens without a Gatekeeper warning.

What it does. Point it at a product URL. It reads the site, works out what you sell and to whom, picks one of ten advertising strategies and explains what that strategy costs you, then writes the whole campaign — objective, audiences, exclusions, creative concepts, copy variants, budget shape and a measurement plan.

Then it attacks its own work before showing you anything:

  • Every claim must trace to your site. A figure that appears nowhere in your own copy is blocked. A sentence that recombines two true statements into a third one nobody made is flagged for your sign-off rather than shipped quietly.
  • Will it run? Deterministic checks against each platform's published limits — character counts, audience floors, forbidden exclusions. It separates "the platform will refuse this" from "this will be cut off", and tells you what it could not check.
  • Compliance pre-flight over housing, employment, credit, health, alcohol, children, political, subscription and pricing claims, with the statutes cited.
  • A second model on a different tier is asked to find the reason the campaign fails, and can refuse it outright.
  • Landing-page coherence — it fetches your destination and checks the page delivers what the ad promised.

You get a build guide in the platform's own click order, an evidence receipt listing every claim beside the URL and verbatim quote behind it, and platform exports.

Eight platforms, each held as dated data quoted from the platform's own documentation: Meta, Google, Reddit, LinkedIn, TikTok, X, Pinterest, YouTube. See https://adplaybook.app/specs/

Runs locally. No account. No server — there isn't one. Nothing about your product leaves the machine when you point it at a local model, and API keys stay in your own config directory.

What it deliberately does not do. It does not generate images or video; it produces a creative brief you can hand to a designer or a creative generator. It does not predict performance or attach a score to an ad that has never run.

Requires a model provider — Outlier running locally, or an OpenAI or Anthropic key.