Open-source link-in-bio page builder with a customizable bento grid layout.
- Bento Grid Layout — drag-and-drop cards in a responsive bento grid
- Multiple Card Types — links, notes, images, and videos
- Custom Profiles — claim your
openbio.app/usernamelink - Social OAuth — sign in with GitHub or Google
- Pro Plan — unlimited profile links with Stripe-powered subscriptions
- OG Image Generation — auto-generated social preview images
- Self-hostable — deploy your own instance with ease
- Next.js 15 — App Router, Turbopack
- TypeScript — strict mode
- Tailwind CSS 4 — styling
- shadcn/ui — UI components
- tRPC 11 — type-safe API
- Drizzle ORM — database ORM
- Neon — serverless PostgreSQL
- Better Auth — authentication
- Stripe — payments
- Upstash Redis — caching
- Vercel Blob — file storage
- Resend — transactional email
- Bun >= 1.0.0
- PostgreSQL (or a Neon account)
- Clone the repo
git clone https://github.com/vanxh/openbio
cd openbio- Install dependencies
bun install- Copy
.env.exampleto.env
cp .env.example .env- Configure environment variables
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string |
BETTER_AUTH_SECRET |
Yes | Auth secret (generate with openssl rand -hex 32) |
BETTER_AUTH_URL |
Yes | Your app URL (http://localhost:3000 for dev) |
NEXT_PUBLIC_URL |
Yes | Public app URL (http://localhost:3000 for dev) |
RESEND_API_KEY |
Yes | Resend API key for emails |
UPSTASH_REDIS_REST_URL |
Yes | Upstash Redis REST URL |
UPSTASH_REDIS_REST_TOKEN |
Yes | Upstash Redis REST token |
BLOB_READ_WRITE_TOKEN |
Yes | Vercel Blob token |
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY |
Yes | Stripe publishable key |
STRIPE_SECRET_KEY |
Yes | Stripe secret key |
STRIPE_WEBHOOK_SECRET |
Yes | Stripe webhook signing secret |
STRIPE_PRO_MONTHLY_PRICE_ID |
Yes | Stripe price ID for monthly plan |
STRIPE_PRO_YEARLY_PRICE_ID |
Yes | Stripe price ID for yearly plan |
GITHUB_CLIENT_ID |
No | GitHub OAuth client ID |
GITHUB_CLIENT_SECRET |
No | GitHub OAuth client secret |
GOOGLE_CLIENT_ID |
No | Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
No | Google OAuth client secret |
- Push the database schema
bun run db:push- Start the development server
bun devThe app will be running at http://localhost:3000.
OpenBio is designed to be deployed on Vercel:
- Fork this repository
- Create a new project on Vercel and import the fork
- Add the required environment variables in the Vercel dashboard
- Deploy
You can also deploy anywhere that supports Next.js — just make sure to set up the environment variables and a PostgreSQL database.
Want to help build a better open-source link-in-bio page builder? Check out our contribution guidelines.
OpenBio is open source under the AGPLv3 license.