Keep listed published rules public and guest-claim rules unlisted, with semantic document markup and share chrome that stays clickable.

Guest publishes remain share-by-link but stay out of the catalog and sitemap, and their pages send noindex until claimed. The published-rule view now uses heading and list markup matching Markdown export, and top banners sit below the header so Share is not covered.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
adilalloandCursor committed 2026-09-17 17:42:01 -06:00
1 parent 77b0ec8ad8
commit 1445cb7e1e
27 files changed
+524 -86

No files matched your search

+24
View File
@@ -0,0 +1,24 @@
import type { Prisma } from "@prisma/client";
/**
* Access model for published CommunityRules:
*
* - **Readable without sign-in:** every published row is share-by-link at
* `/rules/[id]` and `GET /api/rules/[id]`.
* - **Listed** (public catalog `GET /api/rules`, sitemap, indexable): owned
* rows, and ownerless rows that are *not* waiting on a guest claim
* (including rules orphaned when an account is deleted).
* - **Unlisted** (omitted from the catalog and sitemap, `noindex`): guest
* publishes with `userId` null and `claimTokenHash` set, until claimed.
*/
export function isListedPublishedRule(row: {
userId: string | null;
claimTokenHash: string | null;
}): boolean {
return row.userId != null || row.claimTokenHash == null;
}
/** Prisma `where` for the public catalog and sitemap. */
export const LISTED_PUBLISHED_RULE_WHERE: Prisma.PublishedRuleWhereInput = {
OR: [{ userId: { not: null } }, { claimTokenHash: null }],
};