Uniswap Hook Incubator
Re-engagement Playbook.
Lifted Uniswap Hook Incubator enrollment from a projected 77 to a final 135 (75% lift), by designing a four-segment behavioral re-engagement campaign tailored to each lapsed-cohort segment's actual blocker.
Problem
Uniswap Hook Incubator 9 was a technical program for Solidity developers building on Uniswap v4 hooks. Enrollment had a hard deadline, the curriculum was demanding, and the audience was narrow.
Prior cohort outreach had been broad. Same email blast to anyone who had ever interacted with the program. The result: open rates that read as healthy and conversion that read as flat, because the message landed for nobody specifically.
The opportunity was a population that had been ignored entirely: people who had engaged with prior cohorts but had been rejected, accepted-but-not-enrolled, started-but-not-finished, or only completed the async course. That group already knew what Hook Incubator was. They needed a different reason to come back, not the same general invitation.
Approach
The prior-cohort audience was split into four segments based on what they had actually done.
- Rejected applicants. Applied to a prior cohort but were not accepted. The implicit blocker was that their previous application had not cleared the bar at the time. The message acknowledged this directly, framed the rejection as cohort-fit rather than capability, and noted that returning applicants are reviewed seriously when their experience or DeFi project portfolio has developed.
- Accepted non-enrollees. Accepted but did not confirm. Their blocker was usually timing, workload, or life events, not capability. The message led with "you already cleared the bar," kept reapplication low-friction, and asked openly what had held them back.
- Non-graduates. Started and did not finish. Their blocker was capacity. The message acknowledged the difficulty of the program, kept the tone non-judgmental, and emphasized that returning students are reviewed favorably and have context most new applicants do not.
- Async participants. Completed the self-paced version of the v4 hooks course. Their blocker was perceived redundancy. The message focused on what the live cohort offered that async did not: live workshops, office hours with Uniswap Foundation engineers, peer cohort, and a 3-week capstone hookathon.
Each segment got two emails, sent one week apart, both landing before the March 29 application deadline. Subject lines, preview text, opening hooks, and CTAs were segment-specific. The two-email cadence let the first send land the differentiated value proposition and the second create deadline urgency without repeating content.
The subject lines made the segment-specific framing immediate from inbox view.
- Rejected applicants: "UHI9 applications are open. You should apply again."
- Accepted non-enrollees: "We held a spot for you before. UHI9 is now open."
- Non-graduates: "Your path back to UHI."
- Async participants: "You finished the async course. Here's what the live program adds."
Deliverable
The campaign shipped as four segment-specific email sequences (8 emails total, 2 per segment), sent one week apart and landing before the March 29 application deadline.
- Rejected applicants: 2 emails framing rejection as cohort-fit, naming what had changed in the program since their last application, and inviting return when their portfolio had grown.
- Accepted non-enrollees: 2 emails opening with "you already cleared the bar," low-friction reapplication, and an open invitation to share what had held them back.
- Non-graduates: 2 emails acknowledging the difficulty of the program, framed for returning students with the context most new applicants do not have.
- Async participants: 2 emails leading with "what the live program adds that async can't" (live workshops, office hours, peer cohort, hookathon).
Other variables remained in play (curriculum updates, market timing, partner amplification), but the inflection was visible and concurrent with the campaign launch.
What I would do differently
The lapsed-cohort audience (rejected applicants, accepted non-enrollees, non-graduates, async participants) is a recurring asset, but I treated it as a one-shot campaign target. Every cohort produces more of each segment, and the segment definitions stay stable across cohorts. If I built this again, I would set it up as an evergreen lifecycle program: continuous audience tagging from the moment someone applies, drops, or completes the async path, and segment sequences that update based on what worked, so each new cohort launch starts from the system, not from scratch.
The segment work compounds across cohorts. A one-shot campaign captures that value once.