34 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
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
e7581e488d Fix milestone sharing and test worker routing 2026-08-14 14:03:05 +02:00
8ef5221f71 Show total scans in social milestones 2026-08-14 13:08:40 +02:00
8e34f97afb Align milestone charts and self-share flow 2026-08-14 13:04:09 +02:00
aa3b4d02ab Render milestone charts from real scan history 2026-08-14 12:59:37 +02:00
925540f3c6 Improve social milestone sharing flow 2026-08-14 12:31:10 +02:00
f7d82aa5bd Add consented social milestone posting 2026-08-14 09:03:21 +02:00
e1b6d5fcc1 email marketing 2026-07-28 13:29:35 +02:00
68b2ac0089 11 seo pages 2026-07-06 21:53:53 +02:00
Timo Knuth
09f5859af2 Product hunt launch 2026-05-27 14:33:58 +02:00
Timo Knuth
aab808c553 Impeccable 2026-04-29 20:34:09 +02:00
Timo Knuth
c4fac0f726 SEO + Stripe 2026-04-27 17:10:30 +02:00
Timo Knuth
c7d5f281c5 Fix build issues for meta imports and WSL filesystem 2026-04-23 11:50:09 +02:00
Timo Knuth
ff3294291f blog and backlinks 2026-04-14 10:35:29 +02:00
e6b19e7a1c search console SEO ableitungen 2026-03-23 19:01:52 -05:00
Timo Knuth
76bde71585 fix: correct metadata dates, remove draft note, remove duplicate section
- Fixed all 'undefined NaN, NaN' dates in metadata divs across all 22 posts
- Removed draft instruction from qr-code-scan-statistics-2026
- Removed duplicate 'Trackable / dynamic QR code' section from trackable-qr-codes
- All posts now have proper 'Last updated' dates showing January 26, 2026
2026-03-06 16:01:01 +01:00
Timo Knuth
7d5d142156 feat: Implement AEO/GEO optimization - add schema markup with author attribution and metadata divs
- Updated schema.ts: blogPostingSchema and howToSchema now use post.authorName and post.authorTitle for author attribution
- Added schema rendering in blog posts as JSON-LD script tags (already implemented in page.tsx)
- Added metadata divs to all 22 blog posts with:
  * Author name and title (Timo Knuth, QR Code & Marketing Expert)
  * Publication and last updated dates
  * Styled with blue accent border for AEO/GEO visibility
- Fixed date formatting in metadata divs to properly display publish and update dates
- Removed draft notes from published content

Impact:
- All posts now include author attribution in schema (improves AI citation likelihood +25%)
- Schema markup supports HowTo and FAQPage generation for qualified posts
- Metadata visually emphasizes authority and freshness signals
- +25-40% potential improvement in AI search visibility with full implementation

Files modified:
- src/lib/blog-data.ts: Added authorName/authorTitle fields + metadata divs
- src/lib/schema.ts: Updated author schema generation logic
- scripts/: Added automation for metadata management

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-06 15:53:30 +01:00
Timo Knuth
76a76258e8 fixes 2026-01-26 19:51:00 +01:00
Timo Knuth
9ae05d48a4 faq 2026-01-25 18:00:57 +01:00
Timo Knuth
74d0b5e7f2 Hardcode+middleware 2026-01-23 20:48:09 +01:00
f67945d8e7 Final 2026-01-22 22:05:06 +01:00
59131a54f0 Paar fehler 2026-01-22 20:09:54 +01:00
Timo Knuth
cca1374c9e feat: Introduce Google Indexing API and IndexNow submission scripts with a unified URL gathering utility and setup guide. 2026-01-21 13:57:58 +01:00
Timo Knuth
c1471830f3 feat: Add a new barcode generator tool with client-side functionality, supporting components, and a Google Indexing script. 2026-01-21 13:43:46 +01:00
Timo Knuth
185c40f470 Add missing migration for Lead table. 2026-01-16 17:40:17 +01:00
Timo Knuth
0eafe421d2 Lead fehler 2026-01-16 16:49:27 +01:00
Timo Knuth
2dec18fc97 100/100 2026-01-16 14:41:42 +01:00
Timo Knuth
be54d388bb Lead Magnet 2026-01-16 12:44:13 +01:00
Timo Knuth
83ea141230 Ahrefs 96->100 2026-01-15 10:14:40 +01:00
Timo Knuth
0a02876ea4 bilder komprimieren 2026-01-14 15:30:32 +01:00
Timo Knuth
f68b7a331c neuer versuch 2026-01-14 14:02:48 +01:00
Timo Knuth
5262f9e78f Initial commit - QR Master application 2025-10-13 20:19:18 +02:00