A service that allows Bluesky users to create custom .bluesky.bot handles for their profiles, making them easier to share and remember.
.bluesky.bot usernames do NOT guarantee authenticity. Anyone can register any available name under .bluesky.bot. There is no identity verification, brand validation, or manual approval process. Always verify accounts through official channels.
- 🎯 Custom Handles: Create personalized subdomains like
yourname.bluesky.bot - 🔗 Easy Sharing: Share your Bluesky profile with a memorable URL
- 🔐 OAuth Integration: Secure authentication with Bluesky/AT Protocol
- 📱 Responsive Design: Works on all devices
- ⚡ Fast Redirects: Quick redirection to your actual Bluesky profile
This is a monorepo built with:
- Framework: Next.js 15 with TypeScript
- Monorepo: Turbo for build orchestration
- Database: PostgreSQL with Prisma ORM
- Authentication: AT Protocol OAuth
- Styling: Tailwind CSS
apps/
├── web/ # Main web application (port 3000)
└── handle/ # Handle resolution service (port 3001)
packages/
└── database/ # Shared Prisma database package
- Node.js 18 or higher
- PostgreSQL database
- Bun (or yarn|npm|pnpm)
-
Clone the repository
git clone https://github.com/pirmax/bluesky.bot.git cd bluesky.bot -
Install dependencies
bun install
-
Set up environment variables
Create a
.envfile in the root directory:# Database DATABASE_URL="postgresql://username:password@localhost:5432/blueskybot" # Application NEXT_PUBLIC_URL="http://localhost:3000" COOKIE_PASSWORD="your-secure-32-character-secret-key" NODE_ENV="development"
-
Set up the database
# Push the schema to your database bun run db:push # Or run migrations in production bun run db:migrate:deploy
-
Generate Prisma client
bun run generate
# Start both web and handle apps
bun run devThis will start:
- Web app: http://localhost:3000 (main application)
- Handle service: http://localhost:3001 (handle resolution)
# Start only the web app
cd apps/web && bun run dev
# Start only the handle service
cd apps/handle && bun run dev# Push schema changes to database (development)
bun run db:push
# Deploy migrations (production)
bun run db:migrate:deploy
# Seed the database (if seeding is implemented)
bun run db:seed# Check code style and lint
bun run lint
# Format code
bun run format# Build all applications
bun run build
# Start production servers
cd apps/web && bun run start
cd apps/handle && bun run start- User Registration: Users sign in with their existing Bluesky account using OAuth
- Handle Selection: Users choose their desired
.bluesky.botsubdomain - Profile Management: Users can update their custom handle through the management interface
- Handle Resolution: When someone visits
username.bluesky.bot, they're redirected to the user's actual Bluesky profile
- User visits the web app and enters their current Bluesky handle
- OAuth flow authenticates the user with Bluesky/AT Protocol
- User selects their desired
.bluesky.bothandle - Handle is stored in the database linked to their Bluesky DID
- The handle service resolves requests to
*.bluesky.botand redirects to the appropriate profile
The application uses three main models:
- User: Stores user information and handle mappings
- AuthState: Manages OAuth state during authentication
- AuthSession: Stores user sessions
| Variable | Description | Required |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | Yes |
NEXT_PUBLIC_URL |
Base URL of the application | Yes |
COOKIE_PASSWORD |
Secret key for session encryption (32+ chars) | Yes |
NODE_ENV |
Environment mode (development/production) | Yes |
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes and test them
- Run linting:
bun run lint - Commit your changes:
git commit -m "Add your feature" - Push to your branch:
git push origin feature/your-feature - Create a Pull Request
This service does not verify the identity of users claiming specific handles. Users should:
- Never rely solely on a
.bluesky.bothandle to verify identity - Cross-check accounts through official channels
- Look for verified custom domain handles on Bluesky for authentic accounts
This project is licensed under the GPL v3.0 - see the LICENSE file for details.
For issues related to this service, please create an issue in this repository. For general Bluesky support, contact Bluesky's moderation service.