A rapid-fire guide to get your BioLink instance up and running in under 10 minutes.
# Clone the repository
git clone https://github.com/yourusername/biolink.git
cd biolink
# Set up environment
cp .env.example .env
# Edit .env and add your DATABASE_URL
# Run with Docker
docker-compose up -d
# Visit http://localhost:3000- Node.js 18+
- PostgreSQL (or Neon account)
- npm or pnpm
# 1. Install dependencies
npm install
# 2. Configure database
echo 'DATABASE_URL=postgresql://user:password@localhost:5432/biolink' > .env
# 3. Push schema to database
npm run db:push
# 4. Seed demo data (optional)
NODE_ENV=development tsx server/seed.ts
# 5. Start development server
npm run devVisit http://localhost:3000/demo to see the seeded profile.
Add ?edit=shivam to any profile URL to access edit mode:
http://localhost:3000/demo?edit=shivam
- Toggle "Edit Profile" mode
- Click "Edit Profile" button
- Update your info:
- Display name
- Bio
- Profile image URL
- Username
- Click "Add New Link"
- Choose platform (Instagram, Twitter, GitHub, etc.)
- Fill in details:
- Title
- URL
- Description (optional)
- Save and watch it appear!
- In edit mode, click "View Analytics"
- See your:
- Profile views
- Total link clicks
- Per-link performance
- Engagement rate
- Avatar/profile image
- Display name
- Bio (supports line breaks)
- Platform selection (affects icon & color)
- Custom title & description
- Drag-to-reorder
- Show/hide individual links
- Twitter/X
- TikTok
- YouTube
- GitHub
- Website
- Newsletter
- Custom links
Profile Views:
- Incremented on every page load
- Helps measure reach
Link Clicks:
- Tracks when users click your links
- Per-link breakdown available
Engagement Rate:
- Clicks ÷ Views × 100
- Shows how engaging your content is
- 20%+ is considered excellent
DATABASE_URL=postgresql://user:password@host:port/databasePORT=3000 # Server port (default: 3000)
NODE_ENV=development # Environment mode- Visit neon.tech
- Create free account
- Create new project
- Copy connection string
- Add to
.env:DATABASE_URL=postgresql://user:password@ep-xxx.region.aws.neon.tech/neondb?sslmode=require
# macOS (Homebrew)
brew install postgresql
brew services start postgresql
createdb biolink
# Linux (Ubuntu/Debian)
sudo apt-get install postgresql
sudo systemctl start postgresql
sudo -u postgres createdb biolink
# Connection string
DATABASE_URL=postgresql://localhost:5432/biolinkdocker run -d \
--name biolink-db \
-e POSTGRES_PASSWORD=mypassword \
-e POSTGRES_DB=biolink \
-p 5432:5432 \
postgres:15
# Connection string
DATABASE_URL=postgresql://postgres:mypassword@localhost:5432/biolink# Install Vercel CLI
npm i -g vercel
# Deploy
vercel
# Set environment variables in Vercel dashboard- Click "Deploy on Railway"
- Add PostgreSQL service
- Set
DATABASE_URLenvironment variable - Deploy!
- Create new Web Service
- Connect your repository
- Add PostgreSQL database
- Set environment variables
- Deploy
- Create new app
- Link GitHub repository
- Add managed PostgreSQL database
- Configure environment
- Deploy
Create docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://biolink:biolink@db:5432/biolink
NODE_ENV: production
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: biolink
POSTGRES_PASSWORD: biolink
POSTGRES_DB: biolink
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
postgres_data:Run:
docker-compose up -d# Build image
docker build -t biolink .
# Run container
docker run -d \
-p 3000:3000 \
-e DATABASE_URL=your_database_url \
--name biolink \
biolinkProblem: Connection refused or Cannot connect to database
Solution:
- Verify DATABASE_URL is correct
- Check database is running:
pg_isready - Ensure firewall allows connection
- For Neon, verify
?sslmode=requireis in URL
Problem: Module not found errors
Solution:
rm -rf node_modules package-lock.json
npm install
npm run buildProblem: Port 3000 already in use
Solution:
# Use different port
PORT=3000 npm run dev
# Or kill process on port 3000
lsof -ti:3000 | xargs kill -9Problem: Tables don't exist
Solution:
# Push schema to database
npm run db:push
# Or generate and run migrations
npx drizzle-kit generate
npx drizzle-kit migrate# Find your local IP
ifconfig | grep "inet " | grep -v 127.0.0.1
# Access from phone
http://YOUR_IP:3000/demo# Install ngrok
npm install -g ngrok
# Create tunnel
ngrok http 3000
# Use provided URL
https://abc123.ngrok.ioFrontend:
Backend:
Database:
- Discord: Join Server
- Twitter: @biolink
- Email: support@biolink.dev
# Development
npm run dev # Start dev server
npm run build # Build for production
npm run start # Run production build
# Database
npm run db:push # Push schema changes
npx drizzle-kit studio # Open database studio
# Seed
NODE_ENV=development tsx server/seed.ts
# Type checking
npm run check # TypeScript check
# Lint (if configured)
npm run lint # Run linterNow that you have BioLink running:
- ✅ Customize your profile
- ✅ Add your social links
- ✅ Share your profile URL
- ✅ Monitor analytics
- 📖 Read the Roadmap for upcoming features
- 🤝 Consider Contributing
- ⭐ Star the repo if you find it useful!
Before going to production:
- Replace URL parameter auth with proper authentication
- Set up HTTPS/SSL
- Configure CORS properly
- Add rate limiting
- Enable security headers
- Review Security Checklist
- Enable production builds
- Use CDN for static assets
- Implement lazy loading
- Optimize images
- Add database indexes
- Implement caching (Redis)
- Use connection pooling
- Enable compression
-- Add indexes for common queries
CREATE INDEX idx_profiles_username ON profiles(username);
CREATE INDEX idx_social_links_profile_id ON social_links(profile_id);
CREATE INDEX idx_social_links_order ON social_links(profile_id, "order");- Custom Domain: Use Cloudflare for free SSL and DNS
- Analytics: Keep checking engagement rates to optimize link order
- SEO: Update your bio regularly with relevant keywords
- Backups: Set up automated database backups
- Monitoring: Use UptimeRobot for free uptime monitoring
Happy Linking! 🎉
If you build something cool with BioLink, we'd love to hear about it! Share on Twitter with #BioLink or open a discussion on GitHub.