Commit Graph

81 Commits

Author SHA1 Message Date
eb932ebdaa Publish milestones per channel and add Instagram
Consent is bound to the channel it was given for: approving a post on X says
nothing about Instagram. Publishing state moves from the SocialMilestone row
into SocialMilestonePost, one row per channel, where a missing row means no
consent. The dialog asks per channel, shows the text each one will publish and
keeps a separate handle for each; Instagram captions end in hashtags because a
link there is not clickable.

Also fixes three problems in the existing X path:

- A QR code already past several thresholds produced one prompt per threshold,
  and since the post quotes the current scan count, every one of them would
  have published the same number. Only the highest threshold is announced now.
- Detection ran after every unique scan and re-read the QR code's full scan
  history just to hit skipDuplicates. Known milestones are filtered first.
- A failed post stayed failed forever because the consent dialog only opens
  once. The queue now retries three times on its own, spaces first attempts by
  SOCIAL_MILESTONE_MIN_GAP_HOURS, and Settings lists every milestone per
  channel with restart and revoke.

The worker no longer renders the card itself; it downloads the image the app
renders at /s/m/<token>/og, which also serves the new square and portrait
formats. Instagram publishing stays off until SOCIAL_MILESTONE_CHANNELS and
SOCIAL_WORKER_CHANNELS both name it.

Schema changes are manual SQL, see sql/2026-08-16_*.sql. Run both before
deploying this version.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 13:46:13 +02:00
13879e3d3a Fix milestone publisher and social previews 2026-08-14 19:35:29 +02:00
4ec70ed30f Harden milestone sharing and X publishing 2026-08-14 18:19:55 +02:00
d8f7202bf6 Fix milestone sharing previews and publisher recovery 2026-08-14 14:33:29 +02:00
925540f3c6 Improve social milestone sharing flow 2026-08-14 12:31:10 +02:00
45f6c4d83b Add orphaned pages to sitemap and link review tool from industry pages 2026-08-13 10:04:49 +02:00
ca1e432f80 Clarity 2026-08-11 21:50:42 +02:00
87eb8c8883 bugfix 2026-08-06 09:14:01 -05:00
6d29aa0be1 Mozzila extension 2026-08-06 10:58:19 +02:00
ca605f8852 SEO blog post V2 2026-08-05 22:28:34 +02:00
94bf162062 Extension 2026-08-03 11:38:29 +02:00
49c85288a1 Add developer ecosystem page and footer links 2026-08-02 00:11:29 +02:00
977fcdccf3 press 2026-07-30 10:00:35 +02:00
8f29efaf50 seo + press V3 2026-07-29 17:40:26 +02:00
914e312a1b seo + press V2 2026-07-29 16:35:56 +02:00
e73075cdbc seo + press 2026-07-29 15:13:18 +02:00
6fd0ed8522 Email marketing V2 2026-07-29 10:42:21 +02:00
11fdec610f Email marketing 2026-07-29 00:02:50 +02:00
e1b6d5fcc1 email marketing 2026-07-28 13:29:35 +02:00
70d97aa970 Copy overhaul + qr designs 2026-07-27 17:54:59 +02:00
033bc7e29d Copy audit: fix static-bulk disclosure, remove unsourced stat, soften overclaim, strengthen subheadlines for headline-checklist compliance 2026-07-26 22:20:53 +02:00
62ac1ad819 Copy updates: pricing, marketing-campaigns page, signup, tool pages 2026-07-26 21:57:06 +02:00
7b81464a1d Atom eve seo 2026-07-15 18:08:51 +02:00
671c1a1559 SEO V2 2026-07-10 21:52:36 +02:00
bb528d6ef9 SEO 2026-07-10 13:07:15 +02:00
854670197b TikTok V4 2026-07-10 11:26:47 +02:00
01284f5283 Fix 2026-07-07 00:10:29 +02:00
68b2ac0089 11 seo pages 2026-07-06 21:53:53 +02:00
Timo Knuth
91bd940edc Pro/business 2026-07-06 00:18:06 +02:00
Timo Knuth
0b9c8d2a8f TikTok api 2026-07-02 13:06:50 +02:00
Timo Knuth
b0b70640ab Terms page 2026-07-02 10:18:20 +02:00
Timo Knuth
22a987029b SEO: compare/guide pSEO pages + internal links + intent differentiation 2026-06-22 13:22:11 +02:00
Timo Knuth
0866c200a0 Weekly SEO 2026-06-08 20:33:38 +02:00
Timo Knuth
a7cbbee084 SEO 2026-05-27 20:37:15 +02:00
Timo Knuth
4774f4d51e SEO 2026-05-18 16:00:24 +02:00
Timo Knuth
81d1fdd280 weekly seo 2026-05-11 11:10:30 +02:00
Timo Knuth
35e7e77f6b GSC seo 2026-05-10 23:00:06 +02:00
Timo Knuth
8741edc362 /restaurants 2026-04-30 16:59:27 +02:00
Timo Knuth
9b31e77daa mehr SEO 2026-04-27 22:21:52 +02:00
Timo Knuth
c4fac0f726 SEO + Stripe 2026-04-27 17:10:30 +02:00
Timo Knuth
11159eb02b stripe promo code 2026-04-27 11:42:09 +02:00
Timo Knuth
7d2724b65d revops + onboarding 2026-04-22 20:01:46 +02:00
Timo Knuth
32935041b3 add 2026-04-21 12:37:18 +02:00
Timo Knuth
c3efe8ceb9 fehler 2026-04-16 20:28:08 +02:00
Timo Knuth
231a85ffa4 Popup free generatoren 2026-04-16 19:34:26 +02:00
Timo Knuth
65fe18a718 dynamisch barcode 2026-04-14 19:46:14 +02:00
Timo Knuth
6b73ac5c50 feat: implement pricing strategy, subscription tiers, and core infrastructure for QR code management 2026-04-14 19:34:47 +02:00
Timo Knuth
82101ca08f aufräumen 2026-04-14 11:21:17 +02:00
Timo Knuth
f5fd33a304 feat: add marketing resources, technical documentation, and email outreach templates for bulk QR code generation 2026-04-14 10:29:47 +02:00
Timo Knuth
b1d7d95d6f feat: add Instagram QR code generator tool page and SEO outreach documentation 2026-04-12 12:13:18 +02:00