- What is Conn?
- Features
- Tech Stack
- Quick Start
- Deploy to Vercel
- Project Structure
- API Reference
- Roadmap
- Releases
- Troubleshooting
- Contributing
- Contact
- License
Conn is a full-stack SaaS link-in-bio platform — a premium alternative to Linktree built from scratch. Create a stunning, fully customizable page that houses all your links, social profiles, and content in one place.
Share one link. Connect everywhere.
From dark aesthetics to animated gradient meshes — Midnight, Neon Cyber, Aurora Borealis, Holographic, Cosmic Nebula, and more. One-click switching, live preview.
Add, edit, delete, toggle, and drag-to-reorder links from a beautiful admin dashboard. Set featured links, track clicks, and organize your content.
Track total clicks, view your top-performing links, and understand your audience — all from the dashboard.
Three tiers with Razorpay payment integration — upgrade seamlessly from Free → Plus → Professional.
JWT-based authentication with httpOnly cookies. No sessions stored in memory — works flawlessly on serverless platforms like Vercel.
Secure Google Sign In / Sign Up integration using Google Identity Services and google-auth-library. Existing users can continue with Google using the same email, while new users get automatic account creation and profile initialization.
Every user gets a shareable public page at /u/username with a unique aesthetic, social icons, and their curated links.
JSON-LD structured data (SoftwareApplication + Person schemas), dynamic meta tags per user, sitemap.xml, robots.txt, Open Graph and Twitter cards.
Pixel-perfect on every screen size. Designed for the mobile creators your audience actually is.
| Layer | Technology |
|---|---|
| Runtime | Node.js |
| Framework | Express.js |
| Database | Supabase (PostgreSQL) |
| Auth | JWT + httpOnly Cookies + Google OAuth |
| Payments | Razorpay |
| Frontend | Vanilla HTML, CSS, JavaScript |
| Hosting | Vercel |
| Analytics | Custom click tracking |
Ensure you have the required tools installed. Open your terminal or command prompt and run:
- Node.js (v18+):
node -v - npm (v9+):
npm -v - Git:
git --version - A Supabase account (free tier is sufficient)
git clone https://github.com/mayo-byte07/Conn.git
cd ConnThe installation process is similar across operating systems:
Linux / macOS / Windows:
npm install(Windows Users: Conn uses bcryptjs, a pure JavaScript implementation, so you do not need Python or Visual Studio Build Tools to compile native modules!)
npm install google-auth-library- Create a free project at supabase.com
- Go to Dashboard → SQL Editor
- Paste and run the contents of
scripts/setup-db.sql - Go to Settings → API and copy your Project URL and service_role key
Create a .env file in the root directory:
Linux / macOS:
cp .env.example .env
nano .envWindows:
New-Item -ItemType File -Name ".env"
notepad .env
⚠️ IMPORTANT:JWT_SECRETis required. The server will exit immediately if it's missing.
Add the following to your .env file:
SUPABASE_URL=https://your-project-id.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-key
JWT_SECRET=your-random-secret-min-32-chars
GOOGLE_CLIENT_ID=your-google-client-id.apps.googleusercontent.com💡 Tip: Generate a secure JWT secret by running:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
To enable Google Authentication locally and in production:
- Go to the Google Cloud Console: https://console.cloud.google.com/apis/credentials
- Create an OAuth Client ID
- Application Type: Web Application
- Add the following Authorized JavaScript Origins:
http://localhost:3000
https://conn-delta.vercel.app- Copy the generated Client ID and add it to your
.envfile:
GOOGLE_CLIENT_ID=your-google-client-id.apps.googleusercontent.com
⚠️ Warning: Do not expose any Google Client Secret publicly. Only the Client ID is required for this implementation.
npm startVisit http://localhost:3000 to see your local instance running! 🎉
If you have local JSON data files from a previous version, you can migrate them:
npm run seedgit add -A
git commit -m "Initial deploy"
git push origin main- Go to vercel.com/new
- Import your GitHub repository
- Go to Settings → Environment Variables and add:
| Variable | Value |
|---|---|
SUPABASE_URL |
Your Supabase project URL |
SUPABASE_SERVICE_KEY |
Your service_role secret key |
JWT_SECRET |
Your JWT secret string |
NODE_ENV |
production |
RAZORPAY_KEY_ID |
Your Razorpay key (if using payments) |
RAZORPAY_KEY_SECRET |
Your Razorpay secret |
GOOGLE_CLIENT_ID |
Your Google OAuth Client ID |
- Click Deploy ✅
The
vercel.jsonconfig is already included — Vercel will automatically route all traffic through Express.
Conn/
├── server.js # Express server — all API routes
├── db.js # Supabase client singleton
├── vercel.json # Vercel serverless config
├── package.json
│
├── public/ # Static frontend files
│ ├── home.html # Landing page
│ ├── index.html # Public profile / link-in-bio page
│ ├── admin.html # Admin dashboard
│ ├── login.html # Sign in page
│ ├── signup.html # Sign up page
│ ├── robots.txt # SEO crawler config
│ ├── sitemap.xml # XML sitemap
│ │
│ ├── features/ # Feature landing pages
│ │ ├── link-in-bio.html
│ │ ├── social-media.html
│ │ ├── grow.html
│ │ ├── monetize.html
│ │ └── analytics.html
│ │
│ ├── css/ # Stylesheets
│ │ ├── style.css # Global styles
│ │ ├── home.css # Landing page styles
│ │ ├── themes.css # All 26+ theme definitions
│ │ ├── features.css # Feature page styles
│ │ └── auth.css # Auth page styles
│ │
│ └── js/ # Client-side JavaScript
│ ├── app.js # Public profile page logic
│ ├── admin.js # Dashboard logic
│ ├── auth.js # Login / signup logic
│ ├── home.js # Landing page interactions
│ └── features.js # Feature pages shared logic
│
├── scripts/
│ ├── setup-db.sql # SQL to create all Supabase tables
│ └── seed-db.js # Migrate local JSON data → Supabase
│
└── data/
└── subscriptions.json # Plan configuration (static)
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/register |
Create account |
POST |
/api/auth/login |
Sign in |
POST |
/api/auth/logout |
Sign out |
GET |
/api/auth/check |
Check session |
GET |
/api/auth/check-username/:username |
Check username availability |
POST |
/api/auth/google |
Authenticate user using Google OAuth |
GET |
/api/auth/google-client-id |
Get Google Client ID for frontend initialization |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/profile |
Get authenticated user's profile |
PUT |
/api/profile |
Update profile |
GET |
/api/links |
Get all links |
POST |
/api/links |
Add a link |
PUT |
/api/links/:id |
Update a link |
DELETE |
/api/links/:id |
Delete a link |
PUT |
/api/links-reorder |
Reorder links |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/u/:username/profile |
Public profile data |
GET |
/api/u/:username/links |
Public links |
GET |
/api/u/:username/settings |
Public settings (theme etc) |
POST |
/api/u/:username/links/:id/click |
Track link click |
| Method | Endpoint | Description |
|---|---|---|
GET/PUT |
/api/settings |
Get / update settings |
GET |
/api/subscription |
Current subscription |
GET |
/api/plan-limits |
Get plan limits & usage |
POST |
/api/payment/create-order |
Create Razorpay order |
POST |
/api/payment/verify |
Verify payment |
- Custom domain support
- Email link scheduling
- Team collaboration
- Embeddable widgets
- Detailed geographic analytics
- Password-protected links
- Link expiry dates
| Version | What's new |
|---|---|
| v1.2.0 | ☁️ Supabase cloud DB, JWT auth, SEO, Vercel fix |
| v1.1.0 | 👥 Multi-user SaaS, subscriptions, 26+ themes |
| v1.0.0 | 🚀 Initial launch |
If port 3000 is already occupied, stop the existing process or use a different port.
Verify that:
SUPABASE_URLis correctSUPABASE_SERVICE_KEYis valid- Database tables were created successfully
We welcome contributions! Please check our CONTRIBUTING.md for detailed guidelines on how to contribute, especially for GSSoC 2026 participants.
A huge thank you to everyone who has helped improve Conn!
- GitHub Issues: Report bugs or request features
- GitHub Discussions: Ask questions or discuss ideas
- Email: aethercode.society@gmail.com
- Twitter/X: @AetherCodeSoc
MIT License © 2026 AetherCode Society
Built with ⚡ by AetherCode Society