A project tracker for decentralized social media platforms, clients, and tools

refactor: remove Nostr protocol support

Removed all Nostr-related content from the project including:
- 4 Nostr projects from the database
- Nostr type definitions and network option
- Nostr logos and assets
- Updated README to reflect support for only ATProto and ActivityPub

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

Changed files
+5 -79
public
src
+1 -1
README.md
···
# Social Meshes
-
A comprehensive directory and discovery platform for decentralized social networking projects, clients, and tools across multiple protocols including AT Protocol, ActivityPub, and Nostr. It provides an interface for browsing, searching, and filtering across the three major federated/decentralized networks.
+
A comprehensive directory and discovery platform for decentralized social networking projects, clients, and tools across multiple protocols including AT Protocol and ActivityPub. It provides an interface for browsing, searching, and filtering across the two major federated/decentralized networks.
Most of this code is written by Claude. If you see anywhere you wish to contribute feel free to open a PR! If you see any project data that needs to be changed or you are a project owner and wish for a description / owner to be changed feel free to submit PR's!
-66
public/data/projects.json
···
{ "kind": "spec", "url": "https://www.w3.org/TR/activitypub" }
],
"updatedAt": "2024-01-20"
-
},
-
{
-
"id": "nostr-protocol",
-
"name": "Nostr Protocol",
-
"network": "nostr",
-
"owner": "nostr-protocol",
-
"domain": "nostr.com",
-
"logoUrl": "/logos/nostr-protocol.svg",
-
"description": "A simple, open protocol that enables global, decentralized, and censorship-resistant social media.",
-
"type": "Protocol",
-
"tags": ["protocol", "spec", "nips"],
-
"links": [
-
{ "kind": "homepage", "url": "https://nostr.com" },
-
{ "kind": "repo", "url": "https://github.com/nostr-protocol/nostr" },
-
{ "kind": "docs", "url": "https://github.com/nostr-protocol/nips" }
-
],
-
"stars": 2400,
-
"updatedAt": "2024-12-16"
-
},
-
{
-
"id": "damus",
-
"name": "Damus",
-
"network": "nostr",
-
"owner": "damus-io",
-
"domain": "damus.io",
-
"description": "The social network you control. A twitter-like nostr client for iPhone and MacOS.",
-
"type": "Social Network",
-
"tags": ["client", "ios", "mobile"],
-
"languages": ["Swift"],
-
"links": [
-
{ "kind": "homepage", "url": "https://damus.io" },
-
{ "kind": "repo", "url": "https://github.com/damus-io/damus" }
-
],
-
"stars": 1950,
-
"updatedAt": "2024-12-15"
-
},
-
{
-
"id": "amethyst",
-
"name": "Amethyst",
-
"network": "nostr",
-
"owner": "vitorpamplona",
-
"description": "Nostr client for Android with a focus on note, chat, and picture content.",
-
"type": "Social Network",
-
"tags": ["client", "android", "mobile"],
-
"languages": ["Kotlin"],
-
"links": [
-
{ "kind": "repo", "url": "https://github.com/vitorpamplona/amethyst" }
-
],
-
"stars": 990,
-
"updatedAt": "2024-12-14"
-
},
-
{
-
"id": "nostrgram",
-
"name": "Nostrgram",
-
"network": "nostr",
-
"owner": "nostrgram",
-
"description": "Instagram-like interface for nostr, focused on photo and media sharing.",
-
"type": "Social Network",
-
"tags": ["client", "photos", "web"],
-
"languages": ["JavaScript", "React"],
-
"links": [
-
{ "kind": "homepage", "url": "https://nostrgram.co" },
-
{ "kind": "repo", "url": "https://github.com/nostrgram/nostrgram" }
-
],
-
"stars": 210,
-
"updatedAt": "2024-12-10"
}
]
-4
public/logos/nostr-protocol.svg
···
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
-
<rect width="100" height="100" fill="#8b5cf6" rx="20"/>
-
<text x="50" y="65" font-family="Arial, sans-serif" font-size="35" font-weight="bold" text-anchor="middle" fill="white">NP</text>
-
</svg>
-1
public/logos/nostr.png
···
-
404: Not Found
+1 -2
src/components/ProjectCard.tsx
···
const networkColors = {
atproto: 'bg-blue-900 text-blue-200',
-
activitypub: 'bg-purple-900 text-purple-200',
-
nostr: 'bg-orange-900 text-orange-200'
+
activitypub: 'bg-purple-900 text-purple-200'
};
return (
+1 -2
src/components/TopBar.tsx
···
export default function TopBar({ selectedNetwork, onNetworkChange }: TopBarProps) {
const networks: { value: Network; label: string }[] = [
{ value: 'atproto', label: 'ATProto' },
-
{ value: 'activitypub', label: 'ActivityPub' },
-
{ value: 'nostr', label: 'Nostr' }
+
{ value: 'activitypub', label: 'ActivityPub' }
];
return (
+1 -1
src/types/project.ts
···
-
export type Network = "atproto" | "activitypub" | "nostr";
+
export type Network = "atproto" | "activitypub";
export type ProjectLink = {
kind: "homepage" | "repo" | "docs" | "demo" | "spec" | "social";
+1 -2
src/utils/projectUtils.ts
···
export function getTagsByNetwork(projects: Project[]): Record<Network, string[]> {
const tagsByNetwork: Record<Network, string[]> = {
atproto: [],
-
activitypub: [],
-
nostr: []
+
activitypub: []
};
// Collect all unique tags for each network