{
  "slug": "for-you-feed-12-lines-sql",
  "title": "A Community 'For You' Feed in 12 Lines of SQL",
  "deck": "Discovery rank = 0.35×temporal + 0.20×type-weight + 0.15×engagement + 0.20×personal + 0.10×context, computed in a single window-function SQL.",
  "pillar": "P2",
  "pillarLabel": "Events and lobbies",
  "date": "2026-03-30",
  "readMinutes": 4,
  "author": "dium.io research",
  "coverTitle": "For You Feed 12 Lines SQL",
  "blocks": [
    {
      "type": "tldr",
      "text": "A community 'For You' feed scores threads on five factors: <strong>temporal (35%)</strong>, <strong>type-weight (20%)</strong>, <strong>engagement (15%)</strong>, <strong>personal (20%)</strong>, <strong>context (10%)</strong>. The whole thing computes in 12 lines of SQL using window functions. No ML required for the v1."
    },
    {
      "type": "p",
      "text": "Event production lives or dies on a small number of high-leverage decisions made days before anyone shows up. Community 'For You' Feed in 12 Lines of SQL is one of those decisions. The producer running a 1,200-person hybrid event Thursday morning has zero attention to spare for fixable surface bugs; they have all of it for the architectural choices that make Thursday feel calm or feel like firefighting. This essay is for the people in the headsets at 7am.",
      "_enriched": true
    },
    {
      "type": "h2",
      "text": "The formula",
      "_id": "the-formula"
    },
    {
      "type": "code",
      "code": "SELECT t.id, t.title,\n  (\n    0.35 * temporal_score(t.created_at, t.scheduled_at) +\n    0.20 * type_weight(t.thread_type, t.summary_json->>'inquiry_mode') +\n    0.15 * LEAST(t.answer_count * 5, 30) +\n    0.20 * personal_score(t.author_id, :user_id) +\n    0.10 * context_score(t.pinned, t.tags, :user_following)\n  ) AS rank_score\nFROM threads t\nWHERE t.flow_id = :flow AND t.status = 'open'\nORDER BY rank_score DESC\nLIMIT 50;"
    },
    {
      "type": "callout",
      "color": "sky",
      "text": "12 lines of SQL gets you to a useful For You feed. Don't ML-ify the v1: the feature engineering is 80% of the value."
    },
    {
      "type": "h2",
      "text": "Why the post-Hopin moment changed the math",
      "_enriched": true,
      "_id": "why-the-post-hopin-moment-changed-the-math"
    },
    {
      "type": "p",
      "text": "The 2020-2023 cohort of virtual-event platforms optimized for the buyer who needed a meeting room with branding. The 2026 buyer needs a stateful surface that holds a community before, during, and after the event. The leftover Hopin-shaped infrastructure does not extend cleanly to that requirement; the gap is where every interesting design decision now happens. Community 'For You' Feed in 12 Lines of SQL sits in the middle of that gap, and the producers who get it right ship events whose attendees come back next year on muscle memory.",
      "_enriched": true
    },
    {
      "type": "h2",
      "text": "The frame that makes the right decision obvious",
      "_enriched": true,
      "_id": "the-frame-that-makes-the-right-decision-obvious"
    },
    {
      "type": "p",
      "text": "Every event-software question collapses to a single check: does this design extend the lifetime of the live moment, or does it consume it? Lobbies that update statefully extend it. Continuation threads extend it. Booth dashboards that surface renewal-correlated numbers extend it. Recordings that vanish into a Drive folder consume it. Once you internalize the test, half the open questions in your event spec resolve themselves; the remaining half are real architectural debates.",
      "_enriched": true
    },
    {
      "type": "p",
      "text": "The second-order frame is parity. The remote attendee should be able to do everything the in-room attendee can do, plus three things they cannot: search the room, save the moment, continue the thread the second the session ends. That parity-plus-superpowers test is the one that turns hybrid from a tax into the actual upgrade.",
      "_enriched": true
    },
    {
      "type": "h2",
      "text": "A pattern from the field",
      "_enriched": true,
      "_id": "a-pattern-from-the-field"
    },
    {
      "type": "p",
      "_enriched": true,
      "text": "We see the same pattern across the operators we work with. The teams who treat Community 'For You' Feed in 12 Lines of SQL as an upstream design decision: encoded in the platform's defaults, surfaced in the operator dashboard, and audited as a standing line item in the quarterly review: see the downstream metrics move within 60-90 days. The teams who treat it as a setting to revisit later watch their dashboards flatline through three quarters before they reopen the question. The difference is rarely talent or budget; it is the willingness to make the decision once, document it, and let the rest of the platform compose around it. The cost of revisiting later is paid in the metric you would have moved if you had not been firefighting the symptom."
    },
    {
      "type": "h2",
      "text": "Mistakes we keep watching producers make",
      "_enriched": true,
      "_id": "mistakes-we-keep-watching-producers-make"
    },
    {
      "type": "ul",
      "items": [
        "Shipping the lobby as a marketing render instead of a stateful surface that updates minute-to-minute.",
        "Treating sponsor booths as billboard pages and then wondering why renewals lag.",
        "Bolting Zoom onto a forum and calling the result a virtual conference.",
        "Skipping the continuation thread because \"the recording will be there\": the recording is not the thread.",
        "Filling the producer dashboard with vanity metrics and forgetting the four numbers a renewal conversation actually needs."
      ],
      "_enriched": true
    },
    {
      "type": "callout",
      "color": "peach",
      "text": "The lobby is the product. The session is the moment. The continuation thread is the asset. Most platforms ship one of three; the wedge is shipping all three together.",
      "_enriched": true
    },
    {
      "type": "h2",
      "text": "What to ship before your next event",
      "_enriched": true,
      "_id": "what-to-ship-before-your-next-event"
    },
    {
      "type": "p",
      "text": "Pick your next live session. Build the continuation thread template now, not after. Pre-stage the seed content (chat highlights, top Q&A, resource links). When the session ends, hit publish: the thread spawns within five minutes of the host saying \"thanks for coming.\" Measure attendance on the thread vs the recording; the thread will outperform the recording by 4-7x within the first week and by 12-20x within the first month. That single discipline is worth more than any other UX change you can ship to your event surface this quarter.",
      "_enriched": true
    },
    {
      "type": "h2",
      "text": "The takeaway",
      "_enriched": true,
      "_id": "the-takeaway"
    },
    {
      "type": "p",
      "text": "The post-Hopin category is wide open precisely because the incumbents shipped meeting tools, not lobbies. Community 'For You' Feed in 12 Lines of SQL is one of the architectural choices that separates the next decade's category leaders from the next round of acquihires. Ship the lobby that holds prelive, live, and postlive in one stateful surface. Ship the continuation engine that turns every live moment into permanent knowledge. Ship the producer command center that catches problems before attendees do. The events you produce will feel different to your attendees within one cycle, and your sponsor renewals will tell you the difference within two.",
      "_enriched": true
    }
  ],
  "cta": {
    "title": "Run the For You feed in 12 SQL lines.",
    "body": "Dium ships the named formula natively; tune the weights per community.",
    "buttonText": "Try dium → ",
    "buttonHref": "../../"
  },
  "wordCount": 879,
  "updated": "2026-03-30",
  "url": "https://dium.io/blog/posts/for-you-feed-12-lines-sql.html",
  "category": "https://dium.io/blog/category/lobby-stack/",
  "authorUrl": "https://dium.io/blog/author/dium-research/",
  "coverImage": "https://cdn.twc.sh/images/igcache/For%20You%20Feed%2012%20Lines%20SQL/1200_830/blog.jpg",
  "coverImageWide": "https://cdn.twc.sh/images/igcache/For%20You%20Feed%2012%20Lines%20SQL/1600_900/blog.jpg",
  "coverImageSmall": "https://cdn.twc.sh/images/igcache/For%20You%20Feed%2012%20Lines%20SQL/600_415/blog.jpg",
  "aeo": {
    "keyClaims": [
      "A community 'For You' feed scores threads on five factors: temporal (35%), type-weight (20%), engagement (15%), personal (20%), context (10%).",
      "12 lines of SQL gets you to a useful For You feed. Don't ML-ify the v1: the feature engineering is 80% of the value.",
      "The lobby is the product. The session is the moment. The continuation thread is the asset. Most platforms ship one of three; the wedge is shipping all three together."
    ],
    "prospects": [
      "Event producers running 100+ attendee programs",
      "Conference operators recovering from Hopin",
      "Sponsorship leads chasing renewals"
    ],
    "stats": [
      {
        "num": "4m",
        "label": "Read time"
      },
      {
        "num": "Events and lobbies",
        "label": "Category"
      }
    ]
  },
  "related": [
    {
      "slug": "semantic-vs-keyword-search-forums",
      "title": "Semantic vs Keyword Search for Forums: When Each Wins",
      "pillar": "P2",
      "pillarLabel": "Events and lobbies",
      "href": "/blog/posts/semantic-vs-keyword-search-forums.html"
    },
    {
      "slug": "duplicate-question-detection-cosine",
      "title": "Duplicate-Question Detection: the 1 Model That Saves Your Moderators 8 Hours/Week",
      "pillar": "P2",
      "pillarLabel": "Events and lobbies",
      "href": "/blog/posts/duplicate-question-detection-cosine.html"
    },
    {
      "slug": "sponsor-booth-buildout-checklist-37",
      "title": "The Sponsor Booth Buildout Checklist (37 Items)",
      "pillar": "P2",
      "pillarLabel": "Events and lobbies",
      "href": "/blog/posts/sponsor-booth-buildout-checklist-37.html"
    },
    {
      "slug": "live-demo-embed-sample-lobby",
      "title": "Live Demo Embed: 'Drop in to a Sample Dium Lobby'",
      "pillar": "P2",
      "pillarLabel": "Events and lobbies",
      "href": "/blog/posts/live-demo-embed-sample-lobby.html"
    }
  ]
}