https://github.com/renderghost/lanyards
Lanyards is a dedicated profile for researchers, built on the AT Protocol
https://github.com/renderghost/lanyards
atproto atprotocol atscience linkinbio linkinbio-alternative linktree-alternative orcid orcid-alternative researcher-profiles
Last synced: about 2 months ago
JSON representation
Lanyards is a dedicated profile for researchers, built on the AT Protocol
- Host: GitHub
- URL: https://github.com/renderghost/lanyards
- Owner: renderghost
- License: mit
- Created: 2025-11-14T07:05:38.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-12-11T20:52:08.000Z (3 months ago)
- Last Synced: 2025-12-31T17:52:38.960Z (2 months ago)
- Topics: atproto, atprotocol, atscience, linkinbio, linkinbio-alternative, linktree-alternative, orcid, orcid-alternative, researcher-profiles
- Language: TypeScript
- Homepage: http://lanyards.app
- Size: 1.42 MB
- Stars: 12
- Watchers: 1
- Forks: 1
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-repositories - renderghost/lanyards - Lanyards is a dedicated profile for researchers, built on the AT Protocol (TypeScript)
README
# Lanyards 🧑🚀
**One link to make your research life easier to share!** Papers, talks, affiliations, socials, whatever... Easy, free, decentralised, and built on the AT Protocol.
> [!NOTE]
> The complete documentation is available on the [GitHub Wiki](https://github.com/renderghost/lanyards/wiki)
## Features
- **Account Creation**: Sign in with your Bluesky account using OAuth
- **Researcher Profile**: Mobile-first profile display with QR code sharing
- **Profile Management**: Manage honorifics, location, affiliations, and more
- **Social Networks**: Link to Twitter, LinkedIn, ResearchGate, Google Scholar, and Semble
- **Scholarly Contributions**: Add research using DOIs
- **Academic Events**: Track conference presentations and symposiums
## Technology Stack
- Next.js
- TypeScript
- Tailwind CSS
- AT Protocol (@atproto/*)
## Getting Started
### 1. Install Dependencies
```bash
npm install
```
### 2. Configure Environment Variables (Optional)
Copy the example environment file:
```bash
cp .env.example .env
```
Edit `.env` if you need to customize settings:
```env
# Set authentication method (app_password for development, oauth for production)
AUTH_METHOD=app_password
# Application URL
NEXT_PUBLIC_APP_URL=http://localhost:3000
# PDS Configuration (change if using a different PDS)
PDS_URL=https://bsky.social
```
### 3. Run the Development Server
```bash
npm run dev
```
### 4. Sign In
Visit [http://localhost:3000](http://localhost:3000) and click "Sign In". Enter your Bluesky handle and app password.
#### Creating a Bluesky App Password
1. Go to [https://bsky.app/settings/app-passwords](https://bsky.app/settings/app-passwords)
2. Click "Add App Password"
3. Give it a name (e.g., "Lanyards")
4. Copy the generated password and use it to sign in
## Authentication
### App Password (Recommended for Development)
- **Pros**: Simple setup, works immediately, no OAuth configuration needed
- **Cons**: Users must create an app password from Bluesky settings
- **Use for**: Local development and testing
- **Configuration**: Set `AUTH_METHOD=app_password` in `.env`
## Development Commands
- `npm run build` - Generate lexicons and build for production
- `npm run dev` - Generate lexicons and start development server
- `npm run format` - Format code with Prettier
- `npm run lex:gen` - Generate TypeScript types from lexicon schemas
- `npm run lex:watch` - Watch lexicon schemas and regenerate types on changes
- `npm run lint:fix` - Run ESLint and automatically fix issues
- `npm run lint` - Run ESLint
- `npm run start` - Start production server
## Next Steps
Once authenticated, you can:
1. View your dashboard at `/dashboard`
2. Add affiliations, publications, and events
3. Configure your profile settings
4. View your public profile at `/{your-handle}`
## Troubleshooting
### Authentication fails
- Verify your app password is correct (no typos, copied fully)
- Make sure your Bluesky account is active
- Check that `PDS_URL` is set to `https://bsky.social` (or your PDS URL)
- Try creating a new app password
### Can't access dashboard
- Make sure you're signed in (check for session cookie)
- Try clearing cookies and signing in again
- Check the browser console for errors
### Public profiles not loading
- Check the browser console for errors
- Ensure the handle is correct (e.g., `alice.bsky.social`)
- Verify the user has created a Lanyards profile