Purpose
We have 8,723 Farcaster users from the DropCast database. We want to score and tag each user for PlotLink pre/launch marketing targeting — identifying potential Writers (content creators) and Readers (traders/consumers).
Setup
1. Add `/archive` to `.gitignore`
Add `archive/` to PlotLink's `.gitignore` so the CSV and scored output are never committed.
2. Input file
`plotlink/archive/dropcast-user-table-20260330.csv` — 8,723 rows with 36 columns including:
- Social signals: `follower_count`, `following_count`, `neynar_score`, `power_badge`, `is_pro_subscriber`
- X/Twitter: `twitter`, `x_followers_count`, `x_following_count`, `x_verified`
- Reputation: `quotient_score`, `quotient_rank`
- Profile: `bio`, `url`, `location`, `github`
- Spam: `spam_label`, `is_blacklisted`
Scoring Requirements
User Score (0-100)
Design a composite score using available signals. Suggested weighting (T3 can refine):
Social reach (40%):
- `follower_count` — log-scaled, higher = more reach
- `x_followers_count` — log-scaled, cross-platform presence
- `x_verified` — bonus for verified accounts
Reputation (30%):
- `neynar_score` — Farcaster social quality (0-1)
- `quotient_score` — on-chain reputation
- `power_badge` — Farcaster power user indicator
- `is_pro_subscriber` — committed Farcaster user
Profile completeness (15%):
- Has `bio` — shows engagement
- Has `twitter` — cross-platform presence
- Has `url` — has a web presence
- Has `pfp_url` — basic profile setup
Negative signals (15% penalty):
- `spam_label > 0` — reduce score
- `is_blacklisted = true` — score = 0
- `follower_count = 0` and `following_count = 0` — likely inactive/bot
User Tag — "Writer", "Reader", or "None"
Classify each user based on signals:
Writer indicators:
- Has substantial `bio` (suggests creative expression)
- High follower count relative to following (content creator pattern)
- Has `github` or `url` (builder/creator signals)
- Higher Neynar/Quotient scores (established identity)
- Keywords in bio suggesting writing/creative (nice-to-have, not required)
Reader indicators:
- Active account (some followers/following)
- Reasonable Neynar score (not spam)
- Has wallet addresses (can trade)
- Moderate engagement but not necessarily creator pattern
None:
- `is_blacklisted = true`
- `spam_label > 0`
- Zero followers AND zero following
- No profile data at all (no bio, no pfp, no twitter)
- Score below a threshold (e.g., < 10)
Output
Create a new file: `plotlink/archive/dropcast-users-scored-20260330.csv`
Same columns as input PLUS:
- `plotlink_score` — integer 0-100
- `plotlink_tag` — "Writer", "Reader", or "None"
Sort by `plotlink_score` descending (highest value users first).
Also output a summary to the ticket comments:
- Total users by tag: X Writers, Y Readers, Z None
- Top 20 highest-scored users (username, score, tag, follower count, bio snippet)
- Score distribution (how many in 80-100, 60-80, 40-60, 20-40, 0-20)
Files to modify
- `.gitignore` — add `archive/`
- New: `plotlink/archive/dropcast-users-scored-20260330.csv`
Branch
`task/645-user-scoring`
Acceptance criteria
Self-Verification (T3)
Purpose
We have 8,723 Farcaster users from the DropCast database. We want to score and tag each user for PlotLink pre/launch marketing targeting — identifying potential Writers (content creators) and Readers (traders/consumers).
Setup
1. Add `/archive` to `.gitignore`
Add `archive/` to PlotLink's `.gitignore` so the CSV and scored output are never committed.
2. Input file
`plotlink/archive/dropcast-user-table-20260330.csv` — 8,723 rows with 36 columns including:
Scoring Requirements
User Score (0-100)
Design a composite score using available signals. Suggested weighting (T3 can refine):
Social reach (40%):
Reputation (30%):
Profile completeness (15%):
Negative signals (15% penalty):
User Tag — "Writer", "Reader", or "None"
Classify each user based on signals:
Writer indicators:
Reader indicators:
None:
Output
Create a new file: `plotlink/archive/dropcast-users-scored-20260330.csv`
Same columns as input PLUS:
Sort by `plotlink_score` descending (highest value users first).
Also output a summary to the ticket comments:
Files to modify
Branch
`task/645-user-scoring`
Acceptance criteria
Self-Verification (T3)
archive/is in.gitignore—git statusshould not show archive filesplotlink_scorecolumn exists (integer 0-100)plotlink_tagcolumn exists with values: Writer, Reader, or Noneplotlink_scoredescendingnpm run build— no errors