Portable guilds built on ATProtocol! Create a guild and invite your friends.
Note
This project is currently in an exploration phase as I learn about ATProtocol.
Feel free to reuse the lexicon schemas however you see fit.
Once mature, this project and its lexicons should be hosted outside the dev.jakestout.atguilds domain/namespace.
Goals:
- develop a weekly leaderboard system to rank guild member activities
- develop SDKs for unity/unreal/godot to authenticate users and enable guild access in-game
Please reach out if you're interested in collaborating on this!
Guilds are created in the guild leader's PDS, and represented by guild.atguilds.jakestout.dev records.
Guild membership is represented by "claim" records (guildMemberClaim.atguilds.jakestout.dev) on each member's PDS.
Memberships should only be considered "valid" if both are true:
- A guild record's
membersarray contains the decentralized ID (DID) of an ATProto account - That ATProto account contains a guildMemberClaim record with the
guildUriset to the ATUri of that guild.
Bi-directionality is important because guild membership must be confirmed by two people, typically via an invitation from the guild leader.
Install dependencies with pnpm install.
Start a development server:
# start postgres
docker-compose up -d
# run app
pnpm run devTo (re)generate TypeScript code for guild lexicons
./node_modules/.bin/lex gen-server ./src/lib/lexicon ./lexicons/*
To create a production version of your app:
pnpm run buildYou can preview the production build with pnpm run preview.
Winner of "Best Bluesky Fun Project" @ Jan 2025 LFC.DEV - Bluesky/ATProto Hackathon