React to each joke and I'll learn your sense of humour โ getting funnier every day!
No email. No password. No app download. By messaging us, you agree to receive My Daily Dad Joke WhatsApp messages and to our Terms and Privacy Policy. Reply STOP anytime.
No download. No sign-in. The entire product lives inside your existing WhatsApp.
Click here to open WhatsApp with a pre-filled message. Hit send. That's it - you're in.
One joke lands in your WhatsApp every day. Two buttons to tell me whether you liked the joke. One tap and you're done.
Every reaction trains your personal taste model. The engine re-ranks your feed in real time. The more you react, the better it gets.
Each daily joke has a unique share link. When a friend signs up through yours, both of you get extra weighting on the joke that brought them in.
The delivery scheduler shards users across 168 hourly buckets with a single deterministic hash. Each send is a constant-time single-row pop.
Every joke is a 1,024-dimensional vector from Amazon Titan Embed v2. A user's taste is the weighted mean centroid of their liked joke vectors - a position in semantic space that captures subject, register, and incongruity type simultaneously.
After 10 likes, a 2D interquartile-range filter activates over two hand-labelled axes - wordplayโsituational and wholesomeโcynical - narrowing the candidate pool to the user's proven taste region before the embedding layer re-ranks within it.
Claude Fable 5 generates single-axis variants of source jokes - setup reframe, punchline rephrase, tone shift, structure shift. Each variant is reviewed by OpenAI o3 in an iterative loop (up to five rounds), with a human final check before delivery. Variants are delivered in a separate experiment corpus, keeping the preference-learning signal clean.
EventBridge fires a Lambda every hour. A deterministic hash shards each user to exactly one hour per day - MOD(ABS(HASHTEXT(userId)), 7) - spreading sends across 168 buckets. Each delivery is a constant-time single-row pop from a pre-filled queue.
Inbound messages hit a Hono webhook Lambda that verifies HMAC-SHA256 and immediately enqueues to SQS โ returning 200 to Meta in ~100ms. A separate processor Lambda consumes the queue asynchronously, handling all DB writes and replies. Duplicate detection via sourceEventId prevents duplicate interaction rows.
PostgreSQL with pgvector. Scales to 0 ACU with auto-pause (max 4 ACU). Drizzle ORM for type-safe queries. A single schema holds jokes, embeddings, user profiles, delivery queues, and referral chains.
The hybrid architecture pairs a neural embedding model with a statistical filter. Each compensates for the other's weaknesses at different points in the user's journey.
Your taste is a position in 1,024-dimensional semantic space - the weighted mean centroid of every joke you've liked. Future recommendations are ranked by cosine distance to this point.
A 2D interquartile-range fence over two structural axes. Deliberate delayed activation avoids over-fitting on sparse early data while still narrowing the candidate set once sufficient signal exists.
LIKE arrives at webhook.sourceEventId. If already recorded, return 200 and exit.+1. Previous opposite reaction undone if present.userProfiles in a single upsert. Next delivery query uses this immediately.deliveryQueue for the week ahead.TypeScript end-to-end. Infrastructure-as-Code. Open source on GitHub.
Works on any phone with WhatsApp. Click below and hit send - that's the whole sign-up.
Tell me a joke Dad!No email. No password. No app download. By messaging us, you agree to receive My Daily Dad Joke WhatsApp messages and to our Terms and Privacy Policy. Reply STOP anytime.