Minute-long verified placements — premium CPMs on awake-and-unlocked attention

Put your brand in the menu bar.

Minute-long verified placements on real Macs — your campaign occupies the empty stretch of the menu bar while the user is awake and unlocked. You bid in the auction with a CPM you control; $15 minimum campaign spend. Users keep 65% of auction revenue per the published model. Managing existing campaigns? Head to Campaigns.

How it works

Highest bid wins. When multiple campaigns are eligible, the placement always goes to the highest CPM bid — competition, not rotation, decides who gets the minute. Advertisers compete for verified awake-and-unlocked attention, which is why minute-long menu-bar placements command premium CPMs.

  1. Submit a campaign feed

    Host a JSON campaign feed at any HTTPS URL — GitHub raw, your CDN, or your own server. No SDK, no account hookup, no rebuild. The spec is below.

  2. We review it

    Every sponsor, tagline, and destination URL is human-reviewed before go-live — the same standard the user-facing demo promises. Nothing ships unreviewed.

  3. It goes live in the app

    Your campaigns appear in the menu bar and dashboard. Impressions are minute-long and verified — counted only while the Mac is awake and unlocked, never over a hidden bar.

The feed contract — one URL, no rebuild

A feed is any HTTPS URL returning a JSON array of campaigns. Host the JSON anywhere HTTPS (GitHub raw, your CDN, your server), paste the URL into FreeCoffee's profile page, and campaigns appear in the menu bar and dashboard.

[ { "id": "camp_001", "sponsor": "Acme Coffee Co.", "tagline": "Single-origin beans — 20% off first bag", "clickUrl": "https://advertiser.example/offer?utm_source=freecoffee", "cpm": 6.0, "logoText": "AC", "accent": "#C98F4E" } ]
Campaign feed field reference
FieldTypeRules
idstringUnique per campaign (max 40 chars; duplicates are dropped). Optional — falls back to the array position.
sponsorstringBrand name, trimmed, max 40 chars. Required — entries without it are skipped.
taglinestringOne line of creative, trimmed, max 90 chars. Optional.
clickUrlstringMust be https://. Anything else is dropped and the campaign renders without a link.
cpmnumberWhat the platform earns per 1,000 verified minutes. Coerced to a number, clamped 0–100.
logoTextstring1–2 character monogram for the tile. Optional — initials are derived from the sponsor name.
accentstringOptional hex color #RRGGBB for the tile; invalid values fall back to the default caramel.

Feeds are fetched with an 8-second timeout, validated field-by-field, deduplicated by id, and capped at 20 campaigns. The same contract is implemented in the web app (assets/js/demo.js → fetchLiveCampaigns) and the Mac menu-bar app (config.json → adFeedURL).

What we report — and what we don't (yet)

What the client reports today

  • Impressions and clicks are counted locally on the user's machine and shown in their dashboard ledger — demo accounting on simulated numbers.
  • Your campaigns render with a LIVE marker everywhere they appear; nothing about them is presented as settled earnings.
  • Verification rules are already defined: impressions count only awake + unlocked; clicks need ≥10s delay and ≥2s dwell, capped at 5/day and ≤25% of monthly impressions.

What we won't pretend to have

  • No advertiser-facing reporting dashboard yet — per-campaign delivery, CTR, and spend reporting ship with the platform backend.
  • No payment collection yet — we cannot invoice your $15 minimum spend until the payment rails are live. No money moves today, in either direction.
  • No fabricated numbers — the demo ledger is seeded and simulated, and every page says so. We won't dress it up as delivery data.

In plain terms: the feed bridge is live today — campaigns you submit really appear in the app and on the dashboard. Measurement and money are the parts that need the platform backend, and we'd rather say that plainly than fake a dashboard.

Pricing

Launch offer — first 10 advertisers

No minimum spend, no platform cut on your first $100 of media, and a human review inside 48 hours. You bring a real product and an https:// page — we bring the placement, the verification, and the public ledger math.

  1. Minimum campaign spendwaived → $0 to start
  2. Platform cut on first $1000% (user still gets 65%+)
  3. Review turnaround≤ 48 hours
  4. After the first $100$15 min · standard share
Claim a launch slot →

Launch offer: first 10 advertisers · 0 claimed so far — this line changes the day a campaign clears review, by hand, with a reference (no staged counters pretending the room is fuller than it is).

Auction CPM with tier floors

You set your bid; the auction picks the winner per verified minute. Regional floors match the published user model:

Tier floor CPMs by region
TierRegionsFloor CPM
Tier 1US, CA, UK, CH, EEA$4.00
Tier 2AU, NZ, JP, KR, SG, AE$2.50
Tier 3Rest of world$1.25

Floors are the same ones published on the payout model — one set of numbers for users and advertisers, not two.

Minimums & share

  1. Minimum campaign spend$15
  2. What the user keeps65%
  3. Publicly committed at $50k/mo70%
  4. Verified clicks (user bonus)$0.05

65% of auction revenue goes to the user, always on — per the published model. Worked example: 1,000 impressions @ $6 CPM = $6.00 → user base $3.90 → platform keeps ≥ ~$1.55.

See it at real size, before review

Type your sponsor name, tagline, and bid — the menu-bar chip below renders at the real compact scale, with the same field rules the app enforces (40-char sponsor, 90-char tagline, https-only link).

Winning math preview vs Tier 1 floor ($4.00): bid $6.00 → user base $3.90 per 1,000 verified minutes.

Live preview — menu-bar scale

Same readability rule as review: the chip keeps your name, message, and color; text colors are chosen for contrast at this size.

What can run — the review bar

Required for approval

  • A real company or product name — no impersonation, no fake system alerts.
  • A short, accurate tagline that matches the destination page.
  • An https:// destination you control or are authorized for — loads without a forced download.
  • Readable creative at menu-bar scale — no misleading macOS-interface mimicry.

Never accepted

  • Adult, gambling, weapons, malware/surveillance, or deception (financial, health, income claims).
  • Political persuasion, hate, harassment, or graphic content.
  • Phishing, forced downloads, or destinations unrelated to the advertised product.

Review can approve, request changes, reject, pause, or end a campaign — and unspent credit stays with the advertiser account. Same bar for self-serve feeds and managed campaigns.

Where we are: day zero

Live network status

0live campaigns

No paying campaigns yet — the placements above are the seeded demo set. Your feed goes live the moment review passes, and this counter moves the same day.

  1. Live campaigns right now0
  2. Verified minutes served0
  3. Advertiser dollars settled$0.00

Why this is good for the first 10: zero competition for the minute. Your bid is the top bid until the auction fills — every verified minute is yours at the tier floor.

Start a campaign

Send your feed for review

Email the feed URL (and a contact) and a human will review the sponsor, creative, and destination before go-live — every campaign is reviewed before it appears, self-serve or not.

advertisers@freecoffee.tech

Self-serve in the meantime: host your feed, paste the URL into your profile page, and your own app shows the campaigns immediately — review is still required before other users see them.