Parakeet is a Rust-based Bluesky AppServer aiming to implement most of the functionality required to support the Bluesky client
appview atproto bluesky rust appserver
66
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: pronouns and websites

https://github.com/bluesky-social/atproto/pull/4224

Mia b2548b8c 9ca43755

+27 -2
+2
consumer/src/db/record.rs
··· 576 576 &pinned_cid, 577 577 &joined_sp_uri, 578 578 &joined_sp_cid, 579 + &rec.pronouns, 580 + &rec.website, 579 581 &rec.created_at.unwrap_or(Utc::now()).naive_utc(), 580 582 ], 581 583 )
+4 -2
consumer/src/db/sql/profile_upsert.sql
··· 1 1 INSERT INTO profiles (did, cid, avatar_cid, banner_cid, display_name, description, pinned_uri, pinned_cid, 2 - joined_sp_uri, joined_sp_cid, created_at) 3 - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) 2 + joined_sp_uri, joined_sp_cid, pronouns, website, created_at) 3 + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) 4 4 ON CONFLICT (did) DO UPDATE SET cid=EXCLUDED.cid, 5 5 avatar_cid=EXCLUDED.avatar_cid, 6 6 banner_cid=EXCLUDED.banner_cid, ··· 10 10 pinned_cid=EXCLUDED.pinned_cid, 11 11 joined_sp_uri=EXCLUDED.joined_sp_uri, 12 12 joined_sp_cid=EXCLUDED.joined_sp_cid, 13 + pronouns=EXCLUDED.pronouns, 14 + website=EXCLUDED.website, 13 15 indexed_at=NOW()
+4
consumer/src/indexer/records.rs
··· 23 23 pub labels: Option<SelfLabels>, 24 24 pub joined_via_starter_pack: Option<StrongRef>, 25 25 pub pinned_post: Option<StrongRef>, 26 + #[serde_as(as = "utils::safe_string")] 27 + pub pronouns: Option<String>, 28 + #[serde_as(as = "utils::safe_string")] 29 + pub website: Option<String>, 26 30 pub created_at: Option<DateTime<Utc>>, 27 31 } 28 32
+4
lexica/src/app_bsky/actor.rs
··· 199 199 pub verification: Option<VerificationState>, 200 200 #[serde(skip_serializing_if = "Option::is_none")] 201 201 pub status: Option<StatusView>, 202 + #[serde(skip_serializing_if = "Option::is_none")] 203 + pub pronouns: Option<String>, 204 + #[serde(skip_serializing_if = "Option::is_none")] 205 + pub website: Option<String>, 202 206 203 207 pub created_at: DateTime<Utc>, 204 208 pub indexed_at: NaiveDateTime,
+3
migrations/2025-09-24-205239_profiles-4224/down.sql
··· 1 + alter table profiles 2 + drop column pronouns, 3 + drop column website;
+3
migrations/2025-09-24-205239_profiles-4224/up.sql
··· 1 + alter table profiles 2 + add column pronouns text, 3 + add column website text;
+3
parakeet-db/src/models.rs
··· 37 37 pub joined_sp_uri: Option<String>, 38 38 pub joined_sp_cid: Option<String>, 39 39 40 + pub pronouns: Option<String>, 41 + pub website: Option<String>, 42 + 40 43 pub created_at: NaiveDateTime, 41 44 pub indexed_at: NaiveDateTime, 42 45 }
+2
parakeet-db/src/schema.rs
··· 301 301 joined_sp_cid -> Nullable<Text>, 302 302 created_at -> Timestamp, 303 303 indexed_at -> Timestamp, 304 + pronouns -> Nullable<Text>, 305 + website -> Nullable<Text>, 304 306 } 305 307 } 306 308
+2
parakeet/src/hydration/profile.rs
··· 229 229 labels: map_labels(labels), 230 230 verification, 231 231 status, 232 + pronouns: profile.pronouns, 233 + website: profile.website, 232 234 created_at: profile.created_at.and_utc(), 233 235 indexed_at: profile.indexed_at, 234 236 }