Table of Contents
-
Profile summary:
BrowserUse → collects text + sources → Gemini extracts 5–10 concise facts (roles, companies, skills, notable work). -
Auto-intent drafting:
No dropdown needed. The server classifies your prompt into one of:- Email (subject + body)
- Questions (3–6 tailored questions)
- Message (short DM/intro)
- Summary (talking points)
-
Grounded generation:
Gemini receives the target’s facts, sources, best URL, and a clipped profile excerpt, plus overlap reasoning with your profile so that drafts stay specific. -
Chat UX built for flow:
- System intro bubble at the top with profile highlights.
- Thinking bubble while Gemini drafts.
- Clean, copy-ready results.
-
Targets sidebar (organized outreach):
Stacked list of people you’ve researched; add from the enter-info page, click to open chat, and delete via a trash icon. -
Simple auth & security:
JWT signup/login; all targets and actions are bound to the authenticated user (no IDs passed in requests). -
Data model (MongoDB Atlas):
- Users: username, passwordHash, name, headline, (optional) experiences, interests, tone
- Targets: ownerUserId, name, headline, facts, sources, profileUrl, profileText, confidence
- Drafts: ownerUserId, targetId, subject/body or questions
-
Dev-friendly setup:
React + Vite, Express, Nodemon,.envconfig, robust JSON parsing for LLM outputs, and CORS enabled for local dev.
FORGELINK/
├── node_modules/
├── python/.venv
├── public/
│ ├── main.jsx
│ ├── styles.css
│ └── assets/
│ ├── icon.png
├── scripts/
│ ├── collect_profile.py
│ └── seed_user.js
├── server/
│ ├── middleware/
│ │ └── requireAuth.js
│ ├── models/
│ │ └── User.js
│ ├── routes/
│ │ ├── auth.js
│ │ └── targets.js
│ ├── services/
│ │ └── ai.js
│ └── server.js
├── src/
│ ├── components/
│ │ ├── Button.jsx
│ │ ├── Message.jsx
│ │ └── Sidebar.js
│ ├── pages/
│ │ ├── Chat.jsx
│ │ ├── EnterInfo.jsx
│ │ ├── Login.jsx
│ │ └── SignUp.jsx
│ ├── styles/
│ │ ├── Chat.css
│ │ ├── EnterInfo.css
│ │ ├── Login.css
│ │ ├── Sidebar.css
│ │ └── SignUp.css
│ ├── utils/
│ │ ├── api.js
│ │ ├── auth.js
│ │ └── targets.js
│ ├── App.jsx
│ ├── App_test.jsx
│ ├── index.html
│ └── index.jsx
├── .env
├── .gitignore
├── nodemon.json
├── package-lock.json
├── package.json
├── README.md
└── vite.config.js-
Create a MongoDB atlas account here
-
Download dependencies in npm:
npm init -y
npm i react react-dom react-router-dom cors express mongoose @google/generative-ai bcryptjs jsonwebtoken
npm i -D vite @vitejs/plugin-react concurrently- Create virtual env in root directory (ForgeLink)
python3 -m venv python/.venv
source python/.venv/bin/activate- Download dependencies with pip:
pip install browser-use python-dotenv playwright
python -m playwright install --with-deps chromium
- In .env:
PORT=3000
GOOGLE_API_KEY=""
MONGODB_URI=""
NODE_ENV=development
PYTHON_BIN=python/.venv/bin/python
JWT_SECRET=
VITE_API_BASE=- Kickstart ForgeLink
npm run devThen open http://localhost:5173/!
API will be hosted at port 3000
| Team member | Roles |
|---|---|
| Vienna | BrowserUse, Gemini, linking backend and frontend, authentication, Login/Sign up logic, chat page, sidebar |
| Angela | Designs and aesthetics for pages, login and sign up pages, EnterInfo page |
Vienna Zhao - GitHub - LinkedIn - [email protected]
Angela Ho - GitHub - LinkedIn - [email protected]
Project Link: https://github.com/Angelaho1128/ForgeLink
