Paste a hackathon attendee list to find five people worth meeting, personalized conversation starters, and suggested teams.
At a large hackathon, it is hard to know who shares your interests or complements your skills. HackaLink takes a list of names, finds public LinkedIn, Twitter/X, and GitHub profiles through Google search, and uses an LLM to rank people you may want to meet. It also suggests what to say. HackaLink does not scrape LinkedIn. It uses public search results or information that participants provide.
- Top people — ranks the five most influential participants by job level and company, with a score and short reason for each
- Conversation starters — creates three ideas for each top person based on their role, profile headline, and recent posts when available; otherwise, it uses general suggestions
- Social profiles — finds Twitter/X and GitHub profiles so suggestions can refer to real activity
- Team builder — suggests teams of about four people with complementary skills and explains each choice
- Similar backgrounds — scores shared schools, companies, and skills with fixed rules instead of an LLM
- LinkedIn post generator — drafts a post about your hackathon experience and the people you met
- Live progress — streams each stage through Server-Sent Events so you can follow the analysis
Sign in with Stack Auth through /login or /signup. The handler is at src/app/handler/[...stack], and AuthGuard protects the app. On the dashboard, enter one name per line. You can also use Name | linkedin-url. The client sends the list to /api/participants, which returns an SSE stream.
flowchart LR
A["Dashboard: paste names"] -->|POST| B["/api/participants (SSE)"]
B --> C["ParticipantService"]
C -->|"SerpAPI Google search"| D["LinkedIn profile discovery"]
D -->|"gpt-3.5-turbo"| E["Rank top 5 heavy hitters"]
E -->|"SerpAPI Twitter/GitHub search"| F["Social enrichment"]
F -->|"gpt-3.5-turbo"| G["Talking points + teams"]
G -->|"progress + results"| A
Main files under src/:
lib/services/participant-service.ts— discovers profiles, ranks people, adds social data, and generates suggestionslib/linkedin-scraper-legal.ts— finds profiles with SerpAPI Google searches such assite:linkedin.com/in/ "Name" "Company", then reads result snippets; it also supports the official LinkedIn API throughLINKEDIN_ACCESS_TOKENand manually entered profileslib/social-media-scraper.ts— finds Twitter/X and GitHub profiles for top candidates with SerpAPIlib/llm-client.ts— uses OpenAIgpt-3.5-turboin JSON mode for rankings, conversation starters, teams, and posts; every call has a rule-based fallbacklib/rate-limiter.ts— limits SerpAPI calls to 10 requests per minute with added timing variationapp/api/linkedin-post/route.ts— generates LinkedIn posts
Next.js App Router API routes run all processing on the server. There is no database; results stay in the browser for the current session.
Next.js 14 (App Router) · TypeScript · Tailwind CSS · Stack Auth (@stackframe/stack) · OpenAI API · SerpAPI
npm install
npm run dev # http://localhost:3000Create .env.local with:
| Variable | Purpose |
|---|---|
OPENAI_API_KEY |
Required for rankings, conversation starters, team suggestions, and posts |
SERPAPI_API_KEY |
Recommended for finding LinkedIn, Twitter/X, and GitHub profiles through Google; without it, analysis uses names only |
NEXT_PUBLIC_STACK_PROJECT_ID |
Stack Auth project |
NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY |
Stack Auth client key |
STACK_SECRET_SERVER_KEY |
Stack Auth server key |
LINKEDIN_ACCESS_TOKEN |
Optional access to the official LinkedIn API as another profile source |
For production, run npm run build and then npm start. Run npm run lint to check the code.
Built by Abhiram Segu (Nightwolf7570) at the StackAuth Hackathon, where it won Judge's Favorite. Licensed under MIT.