# Small keys. Big detour.

Original PointCast Micro Club house-ad campaign. Three concepts, five formats per concept, fifteen static HTML units and fifteen PNG exports. The gallery is [index.html](index.html).

## Creative idea

Small everyday controls open into something unexpectedly generous: a miniature detour, a message carried in color, and a desk with an after-hours life. The art is deliberately sculptural and metaphorical, not a photograph or rendering of a particular keyboard. All advertising concepts, copy, layouts and hierarchy were created for PointCast; no agency or hardware-maker affiliation is implied.

### Small keys. Big detour.

Six little games. One good reason to stop working.

CTA: Play Micro Club →
Destination: https://pointcast-micro-club.mhoydich.workers.dev/v2/

### Say it in color.

A private room for people, agents, and a little good signal.

CTA: Send a signal →
Destination: https://pointcast-micro-club.mhoydich.workers.dev/signals/

### Your desk has a nightlife.

Turn a dial. Catch a beat. Make a little time for play.

CTA: Play after hours →
Destination: https://pointcast-micro-club.mhoydich.workers.dev/v2/?game=pulse

## Formats and use

- 300 × 250: medium rectangle, custom two-line headline and compact CTA.
- 728 × 90: leaderboard, one-line headline and separate art/CTA zones.
- 320 × 100: mobile banner, compact headline and readable action.
- 1080 × 1080: square, full copy and a large art field.
- 1080 × 1920: portrait story, full copy with generous top/bottom spacing.

Every unit visibly says House ad. The three display formats omit body copy to preserve legibility. Units are static and silent. No account, purchase, physical RGB behavior, audience size or verified ownership is promised. Signal Room messaging remains subject to its invite, retention and privacy rules.

Each HTML file is clickable and references the untouched original artwork in ../art/. Preserve this directory structure when hosting HTML units. PNG files need the matching landingUrl from campaign.json attached by the publisher. Do not substitute a generic click URL if attribution matters.

UTMs: utm_source=pointcast; utm_medium=house_ad; utm_campaign=small_keys_big_detour; utm_content=CONCEPT_FORMAT. Pulse Club keeps its game=pulse query. No tracking scripts or pixels are embedded. The campaign kit contains creative files only; it does not purchase inventory, publish external ads or incur ad spend.

## Original artwork and provenance

The three source illustrations were made with OpenAI's built-in image_gen tool. Their exact supplied prompts and tool attribution are retained in [prompts.json](prompts.json). Art files in art/ are read-only inputs to the layout generator and were not altered. CSS positions and crops those originals for each placement. Typography is live HTML using Arial/Helvetica/system fallbacks; the PNGs freeze the approved Chrome rendering. No remote fonts or libraries are required by the ad units.

## Verification and files

[campaign.json](campaign.json) records dimensions, exact destinations, SHA-256 hashes and byte counts for every HTML/PNG unit and each original art file. PNG dimensions were checked from their headers. Essential text/CTA boxes were checked against each canvas. The display contact sheet uses actual-size banner images; the social sheet shows square/story units at 50% for visual review. Both are in qa/. The gallery is responsive and includes PNG/HTML downloads and destination links.

## Rebuilding

The retained source is build-campaign.mjs. Run it with Node and an already-installed Playwright/Chrome runtime. On Mike's Mac the bundled runtime path is the script default; elsewhere set PLAYWRIGHT_MODULE to a usable Playwright ES module path. No dependency installation is performed by the script.

    node build-campaign.mjs

This overwrites generated HTML, PNG, gallery, manifest, contact sheets and campaign-kit.zip. It never writes the art/ inputs or prompts.json. Recheck contact sheets after changes.

## Publication

Campaign PC-MICRO-CLUB-2026 is live in [PointCast inventory](https://pointcast.xyz/ads.json), with a native card verified on [Play](https://pointcast.xyz/play). PointCast and Industry Next include it in their portable campaign preferences. [PR #1275](https://github.com/mhoydich/pointcast/pull/1275) contains the network integration. No paid media was purchased.
