- Platform
- Web App
- Duration
- 12 weeks
- Industry
- Enterprise
- Read time
- 6 min read
RaftLabs built IntroJoy, a professional introduction web app that replaces the back-and-forth email coordination required for warm introductions with a structured double opt-in flow. The connector drafts the introduction once, both parties confirm via email, and the connection is made without further coordination. IntroJoy reached 10,000 users in 6 months, earned a 4.2/5 rating on Product Hunt, and expanded active users' professional networks by 20%. Built in 12 weeks using React, Node.js, PostgreSQL, and AWS SES for high-deliverability email dispatch.
Making a warm professional introduction involves more coordination than it should. The connector emails person A to ask if they want to be connected, waits for a reply, emails person B for the same, waits again, then writes the mutual introduction email, only to be copied on the back-and-forth that follows while hoping neither party feels their inbox was disrupted without permission.
The problem is consent and coordination happening manually when both could be handled by a structured tool. IntroJoy is that tool. We built it as a web app where the connector drafts the introduction once, both parties receive an opt-in confirmation email, and the connection is made only when both agree. 10,000 users joined in the first six months. Active users expanded their professional networks by 20%.

before & after
What changed
- Making a warm introduction required multiple back-and-forth emails to confirm consent from both parties before the actual introduction could be sent
- Connectors tracked the status of each introduction manually, following up, resending, and chasing replies across an unstructured email thread
- There was no guarantee both parties had agreed to the connection before contact details were shared, leading to introductions that landed without consent
- The quality of the introduction email varied with how much time the connector had; no template or preview existed to standardize the format
- Once the introduction was made, the connector had no visibility into whether the connection progressed or went unanswered
- The connector drafts the introduction once; both parties receive a confirmation email and accept or decline independently, with no further coordination required from the connector
- Introduction status (pending, one accepted, connected, declined, or expired) is visible from the dashboard without the connector tracking anything manually
- Consent is confirmed before any contact details are shared; neither party receives the other's information until both have accepted
- Customizable email templates allow connectors to maintain a consistent, personal tone without rewriting from scratch for every introduction
- Connected introductions and their status are logged in the platform so connectors can see the outcome of every introduction they have made
What we had to solve
- 01
Building a double opt-in flow that felt like a warm introduction, not a compliance form
The entire value of a warm introduction is that it carries the connector's credibility and feels personal. An automated flow that reads like a system email undermines that credibility immediately. The design challenge was making the confirmation email feel like it came from a person (using the connector's own name, their drafted introduction text, and the context they provided) while the underlying workflow was fully automated. Getting that balance right between automation and apparent personalization was the UX and copywriting challenge at the core of the product.
- 02
Managing the state machine for introductions reliably across multiple email clients
An introduction can be in a dozen states: draft, sent to party A, party A accepted, sent to party B, both accepted, declined by either party, expired after no response, re-sent after reminder. Each state transition was triggered by email confirmation links that needed to work across Gmail, Outlook, and other clients without link-click tracking failures. Building a state machine that handled retries, reminder scheduling, expiry logic, and edge cases (one party accepts before the other has opened the email, a confirmation link clicked twice) was the backend engineering challenge.
outcomes
What we achieved
Professional introductions required multiple coordination emails from the connector before the actual introduction could be sent. The overhead scaled with the number of introductions being managed simultaneously.
There was no purpose-built tool for warm professional introductions. Connectors used plain email, which had no consent tracking, no status visibility, and no consistent format.
Without a structured flow, introductions that were sent before both parties confirmed consent often landed as unwanted intrusions, damaging the connector's credibility.
What clients say
Most clients stay.
Some say so on camera.
Three-year average engagement. Founders and operators describing the work in their own words. No marketing varnish.
Working with this team was a pleasure. They translated our vision for IntroJoy into a customer-first web application. Their proactive and fresh approach delivered a platform that quickly captured the attention of thousands.
Your team spends hours coordinating warm introductions that a structured tool could handle in minutes?
the build
What we built
IntroJoy is built around a single discipline: the connector's effort ends when they hit send. Everything that follows (confirmation, connection, tracking) is handled by the platform.
Neither party gets connected without explicitly saying yes
Each party receives an independent opt-in email carrying the connector's introduction text. Neither party sees the other's contact details until both have accepted. Declining or not responding within the expiry window closes the introduction without either party being connected without consent. The confirmation links work across Gmail, Outlook, and other clients without requiring recipients to create an account.

Connector's work ends at submission: the platform handles everything after
Connectors enter the two parties' details, draft the introduction text, and submit. The platform handles everything from that point: sending confirmation emails to each party, monitoring responses, triggering the mutual introduction when both accept, and sending reminders if a party has not responded after a set period. The connector's involvement ends at submission.

Tone stays personal, structure stays consistent every time
Connectors work from pre-built templates that carry their name, the introduction context, and the call to action. Templates are editable before sending so the tone stays personal, but the structure is consistent. The preview view shows exactly what each party will receive before the introduction is sent.

Connectors see every outcome without following up manually
Every introduction is visible from the dashboard with its current state: pending acceptance from party A or B, both accepted, declined, or expired. Connectors see the outcome of every introduction they have made without manually following up or tracking anything in a spreadsheet. Completed introductions include the timestamp each party accepted.

Engagement
How we worked together
- 01Weeks 1–2
Discovery and scoping
We map the problem before writing code. Two weeks of technical audit, stakeholder interviews, and prototype — so both teams align on scope and risk before sprint one.
- 02Ongoing
Two-week Agile sprints
Each sprint ends with working software, not a status update. You review a real build, request changes, and approve before we move forward. No surprises at handover.
- 03Ongoing
Daily async updates
Slack for daily progress, Asana for task visibility, weekly video calls for decisions. You have full visibility without needing to attend every meeting.
- 04Final
Handover and warranty
Full code handover with deployment runbooks and documentation. Thirty-day warranty period for production issues at no extra cost.
stack
Why we chose this stack
- 01The introduction dashboard shows multiple active introductions simultaneously, each at a different state. React's component model gave us the interactive, real-time status view those concurrent states required without a page reload per introduction.React
- 02The backend handles email dispatch, opt-in confirmation webhook processing, state machine transitions, reminder scheduling, and expiry logic, all concurrently. Node's event-driven model managed those async workflows without thread management overhead.Node.js
- 03Introductions follow a defined lifecycle with distinct states and timestamps for each transition. A relational model captured that history with the transactional integrity needed to prevent duplicate state updates when a confirmation link was clicked more than once.PostgreSQL
- 04An introduction platform where confirmation emails land in spam fails by definition. AWS SES provided high-deliverability email dispatch with SPF and DKIM configuration. Lambda ran the reminder and expiry workflows on schedule without dedicated server infrastructure to maintain.AWS
Common questions about IntroJoy
When a connector submits an introduction, both parties receive a separate email carrying the connector's introduction text. Each email contains a clear Accept or Decline link. Party A's response does not depend on party B's: each accepts or declines independently. Only when both parties have clicked Accept does the mutual introduction email go out, sharing contact details with each person. If either party declines or does not respond within the expiry window, the introduction closes without either party being connected without consent. Neither party needs to create an IntroJoy account to confirm.
IntroJoy sends all emails from the platform's own mail infrastructure using the connector's name and customized introduction text. The recipients experience the email in their native inbox (Gmail, Outlook, or any other client) without any plugin or extension required. The platform was originally explored as a Chrome extension but was built as a web app to ensure the full experience worked without browser-specific dependencies and was accessible on any device.
The platform sends automatic reminders to the non-responding party at configurable intervals. If the reminder window expires without a response, the introduction closes and the accepting party is notified that the introduction did not complete. The connector sees the status update in their dashboard. They can choose to re-initiate the introduction at any point, or the accepting party can contact the connector directly if they want to proceed another way. No contact details are shared until both parties have accepted.
Templates are managed by each connector within their IntroJoy account. The structure (connector name, introduction body, the two parties' names, and the opt-in call to action) is fixed, but the body text and framing are fully editable before each introduction is sent. For organizations rolling out IntroJoy across a team, shared template libraries allow a consistent introduction style to be maintained across multiple connectors without each person writing from scratch.
We built IntroJoy (double opt-in email flow, introduction state machine, connector dashboard with real-time status, customizable email templates, reminder scheduling, and expiry logic) in 12 weeks. The product launched in that first version and reached 10,000 users in six months, which validated the scope decision to ship core functionality first rather than building every possible feature before launch. A platform that also handles two-sided matching, CRM integration, or team-level analytics would take longer. Contact us to scope based on your platform's requirements.
Related work
More work like this
TuneClub logs 200+ practice sessions in 60 days by connecting digital learning to live performance
We built TuneClub, a phygital music learning platform for Irish musicians, connecting digital practice to real-world performance through submission review, creator feedback, and community-driven learning pathways.
Read case study

ULT Movies reaches 4,000 remote theaters with custom OTT app
Leading Indian movie distributor, ULT Movies, solved the challenge of delivering new releases to remote theatres with an Android app for STBs. Now, the distributor delivers smooth movie access even in areas with limited internet connectivity.
Read case study
PSi reaches consensus 75% faster by replacing slow in-person sessions with anonymous real-time voice discussions for 300+ users
PSi replaced slow, expensive in-person deliberation sessions with anonymous real-time voice discussion. 300+ users in simultaneous audio. 75% faster consensus. 98% cost reduction. 10x more participants per session. Delivered in 14 weeks.
Read case study