返回探索
指南VibeFix 编辑部更新于 2026年10月10日

等候名单 Waitlist 落地实战:上线前 30 天攒出第一批用户

waitlist 不是许愿池,是转化漏斗。本篇给出完整打法:四种等候名单形态与决策表、一天落地的 Next.js + Supabase 最小实现(注册接口、double opt-in、排队名次、推荐计分)、上线前 30 天每周动作节奏表、反作弊与数据清洗、Launch 当天 5 个转化动作、验证通过的指标判断线,以及排队很长但 launch 当天没人来的 3 个解法。

等候名单转化漏斗示意图:注册、确认、预热、激活四个环节

大多数 vibe coding 项目死掉的方式都一样:某天晚上你花 6 小时把产品做出来,激动地发到朋友圈和即刻,然后——沉没。几十个"支持一下",零个留存用户。你安慰自己是产品还不够好,于是又花两周打磨,上线第二次,还是没人来。问题不在产品,在你上线那天手里一张牌都没有。

等候名单(waitlist)就是解决这个问题的:一套在产品上线前 30 天,把"感兴趣的人"变成"等着用的人"的打法。注意措辞——waitlist 不是许愿池,是转化漏斗。你要的不是 5000 个邮箱地址,而是一批在 launch 当天会真的打开产品、真的付费的人。这篇文章给出一套完整做法:选型、最小实现代码、30 天节奏表、反作弊、launch 当天动作、指标判断线,以及排队很长但 launch 当天没人来的解法。

等候名单转化漏斗示意图:注册→确认→预热→激活waitlist 的本质是转化漏斗,不是邮箱收集器:每一层的流失都要单独优化。

为什么 vibe 项目尤其需要 waitlist

大公司做产品靠品牌和预算,vibe 独立开发者靠什么?靠"第一批用户在同一时间出现"。冷启动最难的不是做产品,是让 100 个人在同一周用上它。零散到来的用户产生不了反馈密度:A 用户周一提了 bug,你周三修好,他已经忘了这事;B 用户周五来了,遇到的是另一个问题。你永远在和单个用户的时差搏斗,永远凑不出"大家都在用"的体感。

waitlist 解决三个具体问题:

  • 上线前验证需求,而非上线后验证。落地页放出去一周,注册转化率低于 5%,说明你的描述没击中人——这时候改文案的成本是零。等产品做完再发现没人要,成本是两个月。
  • 攒启动弹药。Product Hunt、V2EX、即刻这些渠道的算法都奖励"短时间高密度互动"。launch 当天你能动员 200 个 waitlist 用户去点赞评论,和你一个人发帖,完全是两个游戏。
  • 逼自己做预售型思考。写落地页文案的过程,就是被迫回答"这东西到底解决谁的什么问题"的过程。很多 vibe 项目做到一半才发现自己答不上来——waitlist 把这个问题提前了 30 天。

一个残酷但有用的数据点:我见过的独立项目里,launch 当天 DAU 超过 200 的,几乎都有某种形式的预热名单;而"裸上"的项目,首周 DAU 能过 50 的不到一成。这不是玄学,是算术——流量需要蓄水池。

四种形态,怎么选

waitlist 不是只有"留邮箱"一种。按投入和目标,分四种形态:

形态一:纯邮箱收集

一个落地页 + 邮箱输入框 + "上线通知你"。成本最低,适合只想验证文案、还没决定做不做的阶段。缺点是转化漏斗最浅:注册到激活的转化率通常只有 5–15%,因为用户和你之间没有任何承诺。

形态二:排队 + 推荐加速

Robinhood 当年玩的那套:注册后给你一个排队号码,分享专属链接、每带来一个注册就往前跳 N 位。适合有社交属性或供给稀缺的产品(AI 工具、社区型产品)。推荐机制把每个注册用户变成你的分销节点,获客成本趋近于零。代价是你要写推荐计分逻辑,还要防刷。

形态三:付费预定

上线前收一笔小额定金(比如 9.9 元 / 9 美元),launch 后抵扣或退款。这是最强的需求验证:愿意掏钱的人和愿意留邮箱的人,完全是两个物种。适合客单价明确、有清晰交付物的产品(模板、课程、SaaS 年费版)。注意:收钱就意味着承诺,跳票的代价比免费 waitlist 大十倍。

形态四:封闭内测邀请制

不公开排队,申请制 + 人工审核,分批发放邀请码。适合需要高质量反馈的复杂产品(开发者工具、AI Agent)。人数少但反馈密度极高,50 个精准内测用户顶 2000 个邮箱注册。缺点是运营重,每个申请都要看。

决策表:

维度纯邮箱收集排队+推荐加速付费预定封闭内测邀请制
团队规模1 人,时间极少1–2 人,能写推荐逻辑1 人,但产品已成型1–3 人,能做人工审核
产品类型想法验证期,MVP 还没影工具/AI 应用,有传播点SaaS/模板/课程,交付物清晰开发者工具/复杂 Agent
核心目标验证文案和方向低成本获客+造势验证付费意愿+回笼资金高质量反馈+打磨
注册→激活转化率5–15%15–30%60–90%40–70%
实现成本半天2–3 天1–2 天(含支付)1 天+持续运营
最大风险名单很长但没人来刷榜、推荐作弊跳票被骂审核标准飘忽

给独立开发者的建议:默认选形态二(排队+推荐加速)。它在验证强度、获客效率、实现成本之间是最均衡的。下面第 3 节的代码就是按这个形态写的;如果你选形态一,把推荐逻辑删掉即可,形态三在表单后加一步支付,形态四把自动确认改成人工审核队列。

最小实现:Next.js + Supabase,一天落地

技术选型:Next.js App Router 做落地页和 API,Supabase 做数据库,Resend 发确认邮件。全部有免费额度,一个人一天能跑通。下面代码按"排队+推荐加速 + double opt-in"形态写,逻辑可直接运行,只需填环境变量。

第一步:建表

在 Supabase SQL Editor 里执行:

-- 等候名单主表
create table waitlist_signups (
  id uuid primary key default gen_random_uuid(),
  email citext unique not null,
  name text,
  -- 每个人的专属推荐码,被推荐人填这个码
  referral_code text unique not null default substr(md5(random()::text), 1, 8),
  -- 谁推荐的(存推荐人的 referral_code)
  referred_by text references waitlist_signups(referral_code),
  confirmed boolean not null default false,
  confirm_token text unique,
  unsubscribed boolean not null default false,
  created_at timestamptz not null default now()
);

create index idx_waitlist_referred_by on waitlist_signups(referred_by);
create index idx_waitlist_confirmed on waitlist_signups(confirmed);

-- 排队名次:按确认时间排序的实时名次视图
create or replace view waitlist_queue as
select
  id,
  email,
  referral_code,
  created_at,
  row_number() over (order by created_at asc) as position
from waitlist_signups
where confirmed = true and unsubscribed = false;

注意两个设计决策:email 用 citext 类型,天然大小写不敏感去重;排队名次不用物理字段存,而是用视图实时算——避免并发写入时名次错乱。

第二步:注册接口(防重复 + 临时邮箱拦截)

app/api/waitlist/route.ts:

import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@supabase/supabase-js';
import { Resend } from 'resend';
import crypto from 'crypto';

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.SUPABASE_SERVICE_KEY! // 服务端 key,注意不要暴露给前端
);
const resend = new Resend(process.env.RESEND_API_KEY);

// 一次性邮箱域名黑名单(生产环境建议接 verifalia 等 API 做实时校验)
const DISPOSABLE_DOMAINS = new Set([
  'tempmail.com', '10minutemail.com', 'guerrillamail.com',
  'mailinator.com', 'throwawaymail.com', 'yopmail.com',
]);

export async function POST(req: NextRequest) {
  const { email, name, referredBy } = await req.json();

  // 1. 基础校验
  const cleanEmail = String(email || '').trim().toLowerCase();
  if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(cleanEmail)) {
    return NextResponse.json({ error: '邮箱格式不正确' }, { status: 400 });
  }
  const domain = cleanEmail.split('@')[1];
  if (DISPOSABLE_DOMAINS.has(domain)) {
    return NextResponse.json(
      { error: '请使用常用邮箱注册,临时邮箱无法收到邀请' },
      { status: 400 }
    );
  }

  // 2. 防重复:已存在则直接返回已有记录(幂等,不报错)
  const { data: existing } = await supabase
    .from('waitlist_signups')
    .select('id, referral_code, confirmed')
    .eq('email', cleanEmail)
    .maybeSingle();
  if (existing) {
    return NextResponse.json({
      ok: true,
      deduped: true,
      referralCode: existing.referral_code,
      confirmed: existing.confirmed,
    });
  }

  // 3. 校验推荐码(填错码也不阻断注册,只是不计推荐关系)
  let validReferrer: string | null = null;
  if (referredBy) {
    const { data: referrer } = await supabase
      .from('waitlist_signups')
      .select('referral_code')
      .eq('referral_code', String(referredBy).trim())
      .maybeSingle();
    if (referrer) validReferrer = referrer.referral_code;
  }

  // 4. 写入 + 生成确认 token
  const confirmToken = crypto.randomBytes(32).toString('hex');
  const { data, error } = await supabase
    .from('waitlist_signups')
    .insert({
      email: cleanEmail,
      name: String(name || '').slice(0, 50) || null,
      referred_by: validReferrer,
      confirm_token: confirmToken,
    })
    .select('referral_code')
    .single();
  if (error) {
    // 并发重复提交兜底:唯一键冲突时按幂等处理
    if (error.code === '23505') {
      return NextResponse.json({ ok: true, deduped: true });
    }
    return NextResponse.json({ error: '注册失败,请稍后重试' }, { status: 500 });
  }

  // 5. 发送 double opt-in 确认邮件
  const confirmUrl = `${process.env.NEXT_PUBLIC_SITE_URL}/api/waitlist/confirm?token=${confirmToken}`;
  await resend.emails.send({
    from: '你的产品名 <hello@你的域名.com>',
    to: cleanEmail,
    subject: '请确认你的等候名单席位',
    html: `<p>你好!点击下方链接确认你的席位,确认后才能参与排队:</p>
<p><a href="${confirmUrl}">确认我的席位</a></p>
<p>确认后你会得到专属推荐链接,每邀请 1 位朋友注册,你的排队名次前进 10 位。</p>`,
  });

  return NextResponse.json({
    ok: true,
    referralCode: data.referral_code,
    message: '确认邮件已发送,请查收',
  });
}

关键点:double opt-in(双重确认)不是可选项。没有确认环节的 waitlist,30% 以上是随手填的假邮箱和机器人,launch 当天邮件发出去全是硬退,还会搞坏你的发信域名信誉。多一步点击,换来的是名单质量翻倍。

第三步:确认接口

app/api/waitlist/confirm/route.ts:

import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.SUPABASE_SERVICE_KEY!
);

export async function GET(req: NextRequest) {
  const token = new URL(req.url).searchParams.get('token');
  if (!token) return NextResponse.redirect(new URL('/waitlist?error=bad_token', req.url));

  const { data } = await supabase
    .from('waitlist_signups')
    .select('id, confirmed, referral_code')
    .eq('confirm_token', token)
    .maybeSingle();

  if (!data) return NextResponse.redirect(new URL('/waitlist?error=bad_token', req.url));

  if (!data.confirmed) {
    await supabase
      .from('waitlist_signups')
      .update({ confirmed: true, confirm_token: null }) // token 一次性,用完即焚
      .eq('id', data.id);
  }
  // 跳到成功页,带上推荐码方便分享
  return NextResponse.redirect(
    new URL(`/waitlist/success?code=${data.referral_code}`, req.url)
  );
}

第四步:排队名次查询

用户最爱看的就是"前面还有多少人"。单独一个接口 app/api/waitlist/status/route.ts:

import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.SUPABASE_SERVICE_KEY!
);

// 推荐加速规则:每带来 1 个"已确认"的被推荐人,前进 10 位(可按需调参)
const BOOST_PER_REFERRAL = 10;

export async function GET(req: NextRequest) {
  const code = new URL(req.url).searchParams.get('code');
  if (!code) return NextResponse.json({ error: '缺少推荐码' }, { status: 400 });

  // 我的原始名次
  const { data: me } = await supabase
    .from('waitlist_queue')
    .select('position')
    .eq('referral_code', code)
    .maybeSingle();
  if (!me) return NextResponse.json({ error: '未找到' }, { status: 404 });

  // 我带来的已确认注册数
  const { count: referrals } = await supabase
    .from('waitlist_signups')
    .select('id', { count: 'exact', head: true })
    .eq('referred_by', code)
    .eq('confirmed', true);

  // 总人数
  const { count: total } = await supabase
    .from('waitlist_queue')
    .select('id', { count: 'exact', head: true });

  const boost = (referrals ?? 0) * BOOST_PER_REFERRAL;
  const effectivePosition = Math.max(1, me.position - boost);

  return NextResponse.json({
    rawPosition: me.position,
    referrals: referrals ?? 0,
    boost,
    position: effectivePosition, // 加速后的实际名次
    total: total ?? 0,
  });
}

前端 success 页调这个接口,展示"你的排名 #128 / 2034,邀请 3 位好友可前进到 #98"——这种实时反馈是推荐机制的燃料。注意名次是"软排名":加速只影响邀请批次的优先级,不改数据库里的原始顺序,避免并发争议。

第五步:Launch 分批邀请的计分逻辑

launch 当天不要一次性全放出去。按"有效分数"排序分批:

// scripts/invite-batches.ts —— 用 tsx 或 ts-node 运行
import { createClient } from '@supabase/supabase-js';

const supabase = createClient(process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!);

// 计分规则:越早注册权重越高,每带来一个确认用户加分
function scoreOf(row: { created_at: string; referralCount: number }) {
  const daysSinceSignup =
    (Date.now() - new Date(row.created_at).getTime()) / 86400000;
  return row.referralCount * 100 + Math.max(0, 30 - daysSinceSignup);
}

async function main() {
  const batchSize = Number(process.argv[2] ?? 100); // 本批放多少人
  const { data: users } = await supabase
    .from('waitlist_signups')
    .select('id, email, created_at')
    .eq('confirmed', true)
    .eq('unsubscribed', false);

  // 统计每人的有效推荐数
  const { data: all } = await supabase
    .from('waitlist_signups')
    .select('referred_by')
    .eq('confirmed', true);
  const refCount = new Map<string, number>();
  for (const r of all ?? []) {
    if (r.referred_by) refCount.set(r.referred_by, (refCount.get(r.referred_by) ?? 0) + 1);
  }
  // 注意:referred_by 存的是 referral_code,这里简化演示;
  // 生产环境建议在 signups 表加 referred_by_id(uuid) 外键,避免 code 变更导致错位

  const ranked = (users ?? [])
    .map((u) => ({ ...u, score: scoreOf({ created_at: u.created_at, referralCount: 0 }) }))
    .sort((a, b) => b.score - a.score);

  const batch = ranked.slice(0, batchSize);
  console.log(`本批邀请 ${batch.length} 人,分数线 score >= ${batch.at(-1)?.score.toFixed(1)}`);
  // TODO: 在这里调 Resend 发邀请邮件,或写入 invite_codes 表生成邀请码
  for (const u of batch) console.log(u.email);
}
main();

上线前 30 天节奏表:每周做什么

waitlist 的技术实现只占 20%,剩下 80% 是 30 天的运营节奏。按周拆:

周次目标动作清单渠道/话术要点
第 1 周
落地
落地页上线,拿到前 100 个种子注册 上线落地页+注册表单;写 3 版 headline 做 A/B;给 20 个朋友发私信内测 话术模板:"我在做一个帮 XX 解决 XX 的小工具,下周上线内测,留个邮箱我给你留前排位置?"——私信转化率通常 30%+,别群发,要一个一个发,带名字。
第 2 周
内容预热
靠内容把注册做到 500 发 2–3 篇构建过程(build in public)帖子;录 1 个 60 秒产品演示视频;落地页加"已排队 XXX 人"实时计数 即刻/V2EX/推特/小红书(按受众选 2 个主阵地)。帖子结构:痛点场景 → 30 秒演示 → "内测排队中,链接在评论区"。不要只发产品,要发"血泪过程",过程帖的传播是产品帖的 5 倍。
第 3 周
借力
冲到 1500–2000 注册 找 3–5 个小 KOL(粉丝 1–5 万的比大 V 好谈)送内测资格;去 2–3 个相关社群/论坛发帖;启动推荐加速,上线排行榜 给 KOL 的话术:"产品下周 launch,给你 20 个免排队内测码,你可以发给粉丝。"——给对方"发福利"而不是"打广告",接受度完全不同。社群发帖前先潜水 3 天,摸清版规。
第 4 周
倒计时
把名单"烧热",launch 当天转化率拉满 发 3 封预热邮件(D-7 功能剧透 / D-3 内测用户评价 / D-1 上线时间+专属早鸟价);落地页挂倒计时;社群每天冒泡一次 邮件标题别写"即将上线",写具体的钩子:"周五 10 点,你的排队号 #128 生效(含 48 小时早鸟 5 折)"。具体信息 > 氛围感。

每周雷打不动的检查项:看一次数据(注册数、确认率、推荐系数),砍掉没起量的渠道,把时间加到起量的那个上。30 天里你大概会试 6–8 个渠道,最后真正出量的通常只有 2 个——这很正常,waitlist 运营的本质就是快速试错。

工具栈:一个人搞定 waitlist 的最低配

别在工具上纠结,waitlist 阶段够用就行:

  • 落地页:会写代码就直接 Next.js 手写,一天搞定,还能顺手把上面的 API 全接上;不会或想更快,Framer / Webflow 拖一个,表单接到 Supabase 或 Tally。关键是页面加载要快、移动端不能崩——一半以上的注册来自手机。
  • 邮件:Resend(开发者友好,免费额度够发几千封)或 Loops(给独立开发者做的,模板好看)。发信域名一定要配 SPF/DKIM/DMARC,否则确认邮件进垃圾箱,你的 double opt-in 就白做了。
  • 数据分析:早期别上重型 BI,每周跑三条 SQL 就够:当日新增确认数、推荐系数 K、各渠道来源占比(注册表单里加个 utm_source 隐藏字段)。等名单过 5000 再考虑 PostHog。
  • 排行榜/倒计时前端:success 页调第 4 步的 status 接口渲染名次;倒计时用客户端 setInterval 就行,别为了这点东西引入 WebSocket。

总成本:域名 + Resend 免费档 + Supabase 免费档,一个月不到 100 块。waitlist 阶段把钱和时间花在内容和渠道上,别花在基建上。

反作弊与数据清洗:名单很长但全是水

排队+推荐机制一定会招来羊毛党。一个 2000 人的 waitlist,如果 40% 是刷的,你的 launch 当天转化率会被彻底稀释。四个手段:

  • 临时邮箱识别。注册接口里已经做了域名黑名单,这是第一道。进阶做法:接实时邮箱验证 API(如 Verifalia、MillionVerifier),在注册时校验邮箱是否真实存在、是否为 catch-all。免费额度一般够 waitlist 阶段用。
  • 刷榜识别。看三个信号:同一 IP 短时间内大量注册;被推荐人全部来自同一个 /24 IP 段;推荐链条呈"一传十"的星型且被推荐人零邮件打开。满足两条就标记可疑,launch 分批时降权而非直接删除(避免误伤真实用户)。
  • 去重策略。邮箱 citext 唯一键解决大小写变体;再加一层归一化:Gmail 的 name+tag@gmail.com 和 name@gmail.com 是同一个人,入库前 strip 掉 + 后缀和 .(Gmail 忽略点号)。代码里加一行:cleanEmail.replace(/\+[^@]*@/, '@'),Gmail 域名再去点。
  • 确认率是最好的清洗器。double opt-in 本身就会筛掉 20–30% 的低质量注册。launch 前 3 天,给"注册但未确认"的人发最后一封提醒,仍不确认的直接移出邀请批次——别心疼,他们本来也不会来。

一句话原则:宁要 500 个真人,不要 5000 个数字。投资人或朋友问起来,报"确认用户数",别报"注册数",从第一天就养成这个习惯。

Launch 当天:把名单变成用户的 5 个动作

  1. 分三批放邀请,每批间隔 4–6 小时。第一批:推荐达人 + 最早注册的 100 人(你的"传教士");第二批:中间 60%;第三批:剩余 + 当天新注册。分批的目的是让服务器不炸、让你有时间修第一批用户发现的 bug,以及制造"还没轮到我"的稀缺讨论。
  2. 邮件序列三封,节奏卡死。第一封(放码同时):"你的邀请码是 XXX,48 小时内有效";第二封(24 小时后,只发给未激活的):"你的码还有 24 小时过期,3 分钟上手指南在这里";第三封(过期前 2 小时):"最后提醒"。每封只讲一件事,只放一个按钮。
  3. Scarcity 设计要真实。"前 500 名终身 5 折"可以,"仅限今天"然后天天延期不行。用户对假稀缺的嗅觉极其灵敏,一次狼来了,整个 waitlist 的信任就没了。真实稀缺的做法:早鸟价有名额计数器,实时显示"剩余 37 席"。
  4. launch 当天你本人要在场。Product Hunt、V2EX、社群——每个你发帖的地方,发布后 12 小时内每条评论都要回。waitlist 用户看到创始人亲自下场,激活意愿会明显上升。这是 1 人团队相对大公司的不对称优势,别浪费。
  5. 24 小时后算总账。统计:邀请发送数 → 邮件打开率 → 点击率 → 注册激活数 → 付费数。每个环节的流失都要定位到具体原因,写进复盘文档。这是你下一次做 waitlist 的起点。

指标:多少 waitlist 算"验证通过"

三个核心指标,每周看一次:

  • 注册→激活转化率 = launch 后 7 天内激活数 / 确认注册数。健康线:形态二(排队+推荐)15–30%,低于 10% 说明预热没做到位或产品与落地页承诺脱节。
  • 推荐系数 K = 被推荐注册数 / 总注册数。K > 0.3 说明推荐机制转起来了;K < 0.1 说明大家注册完就忘了你,得在 success 页和邮件里强化推荐钩子。
  • 邮件打开率 = 预热邮件打开 / 发送。waitlist 邮件打开率健康线是 40–60%(远高于普通营销邮件的 20%)。如果低于 30%,说明名单里水货太多,或者你的标题写得像垃圾邮件。

那么,多少 waitlist 算"验证通过"?给一个可操作的判断线:确认用户 ≥ 300,且邮件打开率 ≥ 40%,且至少 20% 的注册来自推荐。三个条件同时满足,说明:有人要(数量)、是真人(打开率)、愿意传播(推荐)。这时候上线,launch 当天大概率能拿到 50–100 个真实激活用户——对独立项目来说,这就是成功的冷启动。

反过来,如果 30 天只攒到 80 个确认用户,别硬上。回去改落地页文案,换个渠道再跑两周。waitlist 最大的价值恰恰是让你"便宜地失败":30 天发现没人要,比做完产品 3 个月发现没人要,强一百倍。

失败模式:排队很长,但 launch 当天没人来

这是 waitlist 最常见的死法。名单 3000 人,launch 当天来了 50 个。三个常见原因和解法:

原因一:预热期静默,用户忘了你是谁

注册后 30 天零联系,launch 邮件发出去,用户想的是"这谁啊"。解法:第 4 节的 3 封预热邮件是底线;更好的做法是第 2–3 周每周一封"构建周报":这周做了什么功能、修了什么 bug、内测用户说了什么。让用户感觉自己在"追更",而不是在等一个陌生人。

原因二:落地页承诺与产品实际脱节

为了冲注册数,文案写得天花乱坠,产品打开一看是另一回事。用户觉得被骗,一次性流失,还顺手给你差评。解法:落地页的每一句承诺,launch 前逐句核对。第 2 周的演示视频要用真实产品录制,别用概念图。宁可注册少一点,也别透支信任。

原因三:邀请机制 friction 太大

邀请码要复制、要去另一个页面兑换、兑换完还要再验证邮箱——每多一步,流失 20%。解法:邀请链接一点即登录(magic link),把"收到邀请 → 用上产品"的路径压到 2 步以内。launch 前自己走三遍流程,掐表计时,超过 3 分钟就是不合格。

最后说一句:waitlist 不是许愿池,是转化漏斗。漏斗的每一层——注册、确认、预热打开、launch 激活、付费——都要单独看数据、单独优化。300 个走完漏斗的真人,顶 3000 个躺在数据库里的邮箱。30 天后上线,你要的不是热闹,是第一批会留下来的人。

浏览项目广场发布你的项目

相关文章

vibe 项目推荐计划与邀请码裂变实战指南封面:邀请链接裂变传播示意图
指南
别让推荐链接躺着睡觉:vibe 项目推荐计划与邀请码裂变实战

你花一个周末加上了邀请链接,一个月后:发出 200 条邀请,回来 3 个注册,2 个还是你自己的小号。推荐计划不是'加个链接'——它是一套经济系统。本文从 R < CAC × L 算账公式讲起:单边/双边奖励决策、现金/折扣/额度/功能解锁四种奖励形态定价,Next.js 可直接跑的邀请归因与防刷代码,羊毛党识别 5 招、三阶段上线节奏,以及 K-factor 增长指标与失败模式复盘。

增长与营销创业实践Next.js
黎明时分升空的火箭,象征产品上线首日
指南
上线即沉没?vibe 项目冷启动首日实战手册

vibe 项目最大的死法不是做得烂,而是上线那天没人知道。这篇首日作战手册包含:上线前 14 项检查清单、T 日 24 小时五个动作节点的节奏表、Product Hunt / Show HN / X / 小红书四平台文案模板、预热弹药库(等候名单、build in public、KOL 内测)、评论区作战话术、三级流量预案(Vercel/Cloudflare 速配),以及决定产品值不值得继续的五个漏斗数字。

产品发布增长与营销独立开发
vibe 项目鉴权落地实战指南封面:登录安全
指南
别让 AI 给你的登录留后门:vibe 项目鉴权落地实战

AI 生成的登录代码能跑但全是洞:token 塞 localStorage、密码弱哈希、接口无限流。本指南给出四象限选型表、5 个典型漏洞修复、Next.js 中间件守卫、Supabase RLS 策略模板、第三方登录踩坑清单与上线前 10 问自查,全部代码可直接复制落地。

登录与权限安全与隐私AI 编程实践