Compare commits

...

2 Commits

Author SHA1 Message Date
卡若
10c17ddff3 🔄 同步 2026-03-12 15:56 | 一场soul的创业实验(书稿) 2026-03-12 15:56:58 +08:00
卡若
fac8888dc0 🔄 同步 2026-03-12 15:55 | 一场soul的创业实验(书稿) 2026-03-12 15:55:42 +08:00
302 changed files with 13588 additions and 31197 deletions

View File

@@ -1,241 +1,13 @@
---
alwaysApply: true
---
要求:
{
对话完成后,告诉我你做了什么、完成整个项目的百分比、以及下一步做什么
打开新的网站的时候,先关掉上一个进程端口和接口
每一步思考和运营脚本后告诉我,你准备怎么做,我需要你按照我的要求进行
每次进度汇报内容都更新到"10、项目管理/项目落地推进表.md"
在项目开发过程中,请按照以下规范进行进度管理和功能开发:
# 《一场soul的创业实验》第9章写作规则
1. 进度汇报要求:
- 每日更新项目推进表,明确标注已完成部分
- 详细记录当前开发进度(具体到功能模块)
- 提供已完成工作的百分比精确到5%的进度区间)
第9章「我在Soul上亲访的赚钱案例」的单场文章**写作与上传统一以卡若AI的 Soul创业实验 Skill 为准**。
2. 开发规范:
- 严格按照项目推进表制定的功能模块顺序进行开发
- 每个功能模块开发完成后需进行单元测试
- 提交代码时需附带进度更新说明
- **Skill 路径**`卡若AI/02_卡人/水桥_平台对接/Soul创业实验/`
- **写作**:主入口 `SKILL.md` → 子类一「写作」;细则见 `写作/写作规范.md`
- **上传**:子类二「上传」;配置与命令见 `上传/README.md`
3. 进度反馈格式:
- 模块名称:${模块名称}
- 当前状态:开发中/已完成/待测试
- 完成百分比:${百分比}%
- 预计完成时间:${日期}
- 存在问题:${问题描述}
4. 质量要求:
- 确保各功能模块按时交付
- 保持代码质量符合项目规范
- 及时汇报开发障碍和风险
请按照以上规范执行项目开发工作,并保持推进表(/Users/karuo/Documents/个人/2、我写的书/《一场soul的创业实验》/开发文档/10、项目管理/项目落地推进表.md的实时更新。
每一次运行完成,就启动页面
我是“卡若”,每个文章最多提一次,不要重复提到我名字
不要少于2000-3000个字如果是多个场景需要切换
需要提到有具体的数值来验证,数值以聊天内提到的为主,不要自己乱猜
对话中表达语言整理清晰
一切以真实的聊天内容出现的文字为基础,不要自己乱改
(具体事件/场景/对话切入)
(正文分段,每段一个主题,时间线或逻辑线推进,穿插细节、对话、心理描写和观点分析)
(每一句话后面空一行,每个自然段之间空一行)
}
github地址https://github.com/fnvtk/Mycontent/tree/soul-content (上传仅用这个地址)
写 开始扩展,只根据这个对话以及我上传给你的文档内容,贴近主题开始写
继续
以真实的聊天内容为基础,写这本书,写过的内容就不要重复
每个小节字数在3000-5000个字
内容从文件内并且和主题一定相关性要非常高,如何发现匹配度不高直接改小节名称和目录
每小节的时间都以文档的时间为主
对项目分享的主题围绕这几个问题展开,提问的形式非常隐晦的方式
{
5、每个月营收多少
1、目标人群
2、你的生意逻辑是什么
3、你觉得你的核心是什么
4、进群可以联系管理
}
写 开始扩展,只根据这个对话以及我上传给你的文档内容,贴近主题开始写
继续
以真实的聊天内容为基础,写这本书,写过的内容就不要重复
每个小节字数在3000-5000个字
内容从文件内并且和主题一定相关性要非常高,如何发现匹配度不高直接改小节名称和目录
每小节的时间都以文档的时间为主
对项目分享的主题围绕这几个问题展开,提问的形式非常隐晦的方式
{
5、每个月营收多少
1、目标人群
2、你的生意逻辑是什么
3、你觉得你的核心是什么
4、进群可以联系管理
}
### 二、开篇设计
- 以一句比较世俗激烈有冲突的观点开始
- 以具体事件、场景、对话或回忆切入。
- 语言简洁,迅速带入情境。
- 可用“具体日期和时间”“昨晚,某某联系我”等生活化表达。
---
### 三、内容结构
- **时间线/事件线推进**:按时间或事件发展顺序推进,逻辑清晰。
- **分段分主题**:每段聚焦一个小主题,段落之间自然过渡,小主题比较隐藏一些,不要列出来,作为段头
- **细节描写**:大量生活细节、动作、对话、心理活动穿插其中。
- **观点穿插**:在叙述中随时插入个人观点、分析和总结。
- **多用对话**:增强真实感和代入感。
- **情感递进**:情绪自然流动,时有自省、感慨、幽默或犀利。
---
### 四、写作技巧
- **第一人称视角**:多用“我”,增强亲历感。
- **短句+空行**:每一句话后面空一行,段落之间也空行,增强可读性和节奏感。
- **口语化表达**:用词接地气,贴近生活。
- **对比反转**:善用对比、反转,突出矛盾和冲突。
- **穿插议论**:故事与议论交替,观点自然流露。
- **生活化细节**:如吃饭、出行、聊天、买卖、日常琐事等,增强真实感。
- **自嘲/幽默**:适当自嘲,增加亲和力。
---
### 五、情感调动
- **真诚自然**:情感表达真实,不做作。
- **共鸣点**:挖掘普遍情感或经历,引发共鸣。
- **情绪递进**:情感有递进和高潮,结尾有余韵。
---
### 六、结尾处理
- **总结升华**:结尾总结观点,升华主题。
- **留有余味**:可留悬念、开放式结尾,激发思考。
- **行动号召/**:常以“这本书的真实目的。
---
### 七、格式规范
- 每一句话后面空一行。
- 每个自然段之间空一行。
- 对话、心理活动、细节描写、观点分析都要分行,避免大段文字堆积。
- 结尾处常卡若个人特色的字样。
---
## 快速提示词清单
- 真实场景
- 生活细节
- 对话穿插
- 观点随写
- 情感递进
- 短句分行
- 空行分段
- 结尾个人特色
每小节的时间都以文档的时间为主
写第 X 场文章时,请按 Soul创业实验 Skill 及 `写作/写作规范.md` 执行。

View File

@@ -1 +0,0 @@
MONGODB_URI=mongodb://cdb_outerroot:Zhiqun1984@56b4c23f6853c.gz.cdb.myqcloud.com:14413/my_database\n\nALIPAY_ACCESS_KEY_ID=LTAI5t9zkiWmFtHG8qmtdysW\nALIPAY_ACCESS_KEY_SECRET=xxjXnZGLNvA2zDkj0aEBSQm3XZAaro\n\nTENCENT_APP_ID=1251077262\nTENCENT_SECRET=AKIDjc6yO3nPeOuK2OKsJPBBVbTiiz0aPNHl\n\n# Add your Stripe, PayPal, Web3 keys here\nSTRIPE_SECRET_KEY=your_stripe_key\nPAYPAL_CLIENT_ID=your_paypal_client_id\nPAYPAL_CLIENT_SECRET=your_paypal_client_secret\nUSDT_WALLET_ADDRESS=your_usdt_wallet

View File

@@ -0,0 +1,149 @@
# 第102场今年第一个红包你发给谁
今年你第一个红包发给谁,比发多少重要。
2026 年 2 月 17 日,大年初一,早上 8:01。
第 102 场。
人不多,过年嘛,能来的都是真在听的。
主题临时改的:今年过年,你第一个红包发给谁?
我发了三个。
不是只发三个红包,是「第一个」只发给这三个人,后面的该咋发咋发。
---
第一个发给一个亏过一个亿的哥们。
他 13 年就做收银机、做美团那种模式,太早,市场没起来,嘎了,现在还在还债。
年纪比我大,认知高,我跟他泡茶聊天学到不少,人脉也从他那儿来的。
他找我有事我直接帮。
我要的就是他那种视角,我自己看不到的。
他也不会白要,看事情的角度、踩过的坑都会在聊天里带出来,这些比单次帮忙值钱。
派对房里有人问那你图啥,我说你帮人的时候别老想自己,想多了反而卡住,不想,回馈自己会来。
这种人叫引路人,一个就够了,多了你也顾不过来。
---
第二个,樊登读书福建的负责人。
我那会儿在厦门搞抖音矩阵引流本地创业者,做出点数据,他们注意到了。
聊的时候他不看你多能吹,就看你能不能解决问题、能不能复制、能不能有数。
后来合作上了,别人一听「给樊登做过」就认。
他还有一点:我哪儿做错了敢直接说,这事可能不对。
人生只做一件最重要的事,也是他老敲我的。
身边没人敢说你的时候,容易跑偏。
有个皮鞭型的贵人能少走很多弯路,皮鞭型的不是让你舒服,是让你少踩坑,这种人也不多,有一个就够。
---
第三个,我老婆。
钱她管,公司跟负责人对接也是她,生活上的事我都不太行,她兜着,没她我早崩了。
她不懂我代码和方案细节,但她懂我这个人。
我焦虑、身体不好情绪差的时候,都是她兜着,还会说「有人就有钱,身体第一,别的慢慢来」。
我俩也有吵,有三个卡点摊开讲过,约好每人说三件,不憋着。
她习惯先认错,然后找地方把卡点列出来讲清楚。
关系里对错放后面,先别内耗。
创业的人容易忽略身边人,其实后盾不稳,前面冲再猛也白搭。
---
红包这事儿,多大不重要,微信 200 封顶就是让你别压力大意思到了就行9 块 9 也行。
心意型就是过节图个气氛,大小无所谓。
建联型是礼尚往来,保持联系就行。
交易型是一收就等于答应后面要办事、要场地要人要资源的,这种要慎收,收了就得办,不办关系更僵。
一收就等于答应他后面要场地要人要资源的,我基本不收,七成没收。
谁离你近先顾谁:自己、伴侣、小孩。
不是自私,是你自己先垮了,谁都顾不上。
---
102 场下来Soul 上机会在能接触到一线、能说真心话、多几个视角。
第一波十来个人挺好稳的,每天把纪要丢群里、做做总结,有用。
不订阅群主你看不到派对,很多人说找不到我,就是没点订阅。
想在这上面捞个大项目比较难,但能合作的小事、靠谱的人是有,总结得做,每场聊了什么留下来大家能复盘能接着连。
发完红包他们回你的时候顺带聊两句,比群发一句新年快乐有感觉。
今年你第一个红包发给谁?
想聊这个的,来派对房就行,每天纪要发群,每场都会总结一下。

View File

@@ -0,0 +1,162 @@
# 第103场号商、某客与炸房
有些钱你看到了,差一层窗户纸,人家不捅破你就拿不到。
2026 年 2 月 18 日,初二,早上 7:17。
第 103 场155 分钟;
场观 46749进房 545 人。
有人上麦问今年有啥规划,他说今年想去做号商,做社交 APP 的号Soul、墨、QQ 这种。
---
他说他有流量,有注册的玩法,几毛钱一个号能产出来,卖十几块,利润翻好几倍。
渠道也有,买号的人无限要,有多少吃多少。
卡在中间一步:号注册完了,怎么存、怎么给买家登上去?
只有一次接验证码的机会,注册用掉了,后面买家要登、要换绑都要二次验证,他这条链路没有。
朋友那儿已经跑通了,一天几万号出去,去年十月做到现在利润过两千个了,但这一步不告诉他。
我说你假装客户去买一个,走一遍流程不就知道了。
他说人家都是几万几万地出,不单个卖。
那就从终端找。
谁在买?
淘宝、闲鱼、百度搜一下,总有零散卖的,买一个回来测,看他是怎么把号给你的。
他说零散买的那种是换绑好了再卖的,跟他这种批量生产的不一样。
他这种是几百台手机 24 小时注册,产出来的号没有二次接码,就卡在怎么存、怎么出。
---
我说你号存起来无非几种。
要么云手机,号一直在云上,卖的时候卖云手机账号密码;
要么真实手机,号一直在那批手机里,谁要就那批手机里登着用。
深圳有个朋友十五万台手机root 好、接口打通,号一封就自动补,大主体直接对接收号的人,没有二次登录这事,消耗多少结算多少。
你朋友有可能就是给这种大机房供货的。
你如果能对接到这种,注册完直接进他机房、登在他手机矩阵上,你只负责产号,他负责登和补,就没有二次验证这一环。
他说云手机别人买过去用起来很卡,没法用。
真实手机寄过去的话,一个号才十几块,不可能连手机一起卖。
我说那买这些号的人都是干啥的?
灰产多,消耗量巨大,一个号用一两天就没了再买。
他们不一定非要「拿到手里一个号」,他们要的是「能用」。
你要是能对接那种机房,号一直在机房登着,他们用接口调你的号,封了自动补,你按消耗结算,就不存在把号「交给」谁的问题。
他说懂了,链路可以往这个方向找。
我说你先把自己这一段做好,注册、流量、产号你都有了,差中间就找两三家能解决登号、能接你量的人,有机会跑通。
但有些钱就是人家不会卖给你,打钱也没用,只能自己摸,从终端反推,或者等机缘碰到懂又愿意合作的人。
---
后面聊到别的事,房炸了。
聊到真正挣钱、能放大的东西,平台就容易掐,一讲就炸,只能讲点普通的、大众的。
有人问能不能用别的词替代一下,比如某客。
我说某客就某客吧。
真正挣钱的某客,不是去黑什么,是把网上闲置的资源变现。
电脑四大件,内存、硬盘、带宽、算力,很多人不知道能变现,某客就扫描、植入,把你的机器变成挂机的,带宽做 CDN算力做节点一台机器一年能多出几百上千块。
人家干了二十几年,手上有几千台,躺着收。
现在有 AI自动扫、自动分析漏洞翻倍了。
这种才是真正用 AI 挣钱的人,一招吃几十年。
普通人就自己挂 PCDN、挂节点宽带费电费能省回来等于免费用网。
某客是另一条路,人家吃的是「别人不会」的那一块。
---
还有人说 14 岁小孩会 QQ 霸屏、SEO 霸屏,来投靠做了三年被挖走了,走的时候 17 岁,玛莎拉蒂都买了。
核心是人,不是方法,方法会变,会修 bug一直研究的那个人才值钱。
今天也聊了地摊。
有人问 10 万 20 万小项目我说厦门有餐车、有定点900 到 6000 一月,有的点不用钱,我们有补贴,你卖啥自己弄,没产品找品牌方聊,本质是就业项目。
103 场下来今天炸了两次人倒蛮多500 多了。
Soul 的流量密码我们比较清楚,每个月 70 到 100 万曝光。
不订阅群主容易找不到房,炸了就没了,订阅一下不容易丢。
每天 6 点到 9 点,停留 10 到 15 分钟,一场 300 到 600 人,能听到两三个别人的视角。
想链接的私聊群主,有资源群、会员群,有执行力就来。
小程序搜卡若的创业派对,一天一块钱一节,每天更。

View File

@@ -0,0 +1,167 @@
# 第104场婚恋、AI客服与一个微信
事情要做得足够简单,人和人之间的事可以足够复杂。
2026 年 2 月 19 日,初三,早上 7:35。
第 104 场140 分钟;
场观 36221进房 367 人。
昨天 103 场聊号商、某客炸了两次房500 多人。
---
有个做婚恋的小姐姐上麦09 年做到现在,婚礼一站式,摄影加礼服,今年想平台化。
她问有没有 AI 客服工具,能多平台聚合、自动回复、拟人一点,微信、某书、某音、视频号都能用。
我说网易有个客服系统,能聚合各平台聊天,按席位算,三百到六百一年,很便宜。
要专业的那种、自动回复还带 AI 的,就大几十万了。
豆包做客服会稍微傻一点,今年说不定会发力。
免费的方案也有,各平台自带自动回复,就是要配置维护。
她说需要一点灵活性、拟人化。
我说网易那个先去试,多平台聚合聊天这个需求是有的,还没到私域那一步,聚合一下还可以。
她讲她的规划,两个礼服馆品牌做祝福价引流,再整合五星级酒店、策划、执行成产品,从深圳打样,民政局、企业福利都合作。
我说你们拓客从哪来?
她说自媒体、上下游、渠道、企业、民政局、大活动都有,但做得不够深。
我说婚恋这块线上不一定好弄,我有个朋友做抖音婚恋大 IP一条几十万播放获客并不明显整个行业从线上走很难解决信任问题。
你线下沉淀这么久,民政局、合作方都有,这种形式可能更直接。
我说有一家叫一万和合的,你可以参考。
他们学王婆,跟万达和商场合作,现场做结婚匹配活动,外面一圈只能看,里面一圈能参与,进里面要签到加微信。
就这一招,每两个月一场沙龙,一场能加三百到五百人,后端会员费加高定撮合。
她说婚恋机构平台还没合作,可以把产品放进他们会员礼包里。
我说你多找几家这种机构不就快了,他们那几百个人就够消化两个月,而且很精准。
你自己一个微信就搞定了,各平台流量没那么重要,解决信任问题很麻烦,链路太长会很长。
她走高端,摄影加服装平均一万五左右,获客成本行业一千多,她方最多两百,某书投流 1:10线上聊完到线下消费。
我说你们板块还可以,深圳有个美能妆给医美机构导流,你可以参考。
先做好自己那一块,私域维护好,单个产品做好,别急着搭平台。
她说工具不想追求特别高大上的,怕被割韭菜。
我说很多是营销号宣传出来的,网易大厂做得久,飞鱼吧,也不贵,先试试。
深圳做婚恋、比较白的话Soul 已经接入广点通,可以了解一下,正规内容有机会。
---
再说一个微信的事。
有人说 AI 怎么挣钱。
我说你们都有很多微信好友了,多少有认识有链接,信任是第一层。
如果有一个 AI手机或电脑形态微信登上去自动帮你聊天、分析客户通过朋友圈知道性格职业喜好通过聊天记录知道需求。
比如三千个好友里三十个有婚恋需求,就针对这三十个人触达、点赞、评论,朋友圈让 AI 发婚恋相关内容。
这个叫 AI 数字员工。
你再往生意想:把红娘整合过来,给她一个 AI 数字员工,帮她开发所有客户,开发完你分她钱。
红娘做了五年十年,资源贡献给你,成交后分钱。
AI 在中间看好友朋友圈、判定需求、分到流量池做运维,但缺情绪、没温度,关键环节还是要人。
搭这个中台成本很重,两百万到五百万以上。
加入现成中台约 600 块 token 一月,你负责客户,企业负责转化。
核心九成在运营,工具只占一成,原有链路没跑通,用再好工具都没用。
---
另一个做私人眼镜定制的说,和杭州合作卖货机器人,抖音 API 自动获客锁客到微信小程序,单账号日触达五千加,转化高,但类目库没有眼镜。
我说后端扩展类目、多平台,核心在运营与话术流程,不是单靠工具。
AI 主要是知识库,按你原有成交话术流程、按人的情绪阶段触达。
你前端链路已经跑通了,后端的触达形式在运营思路和策略上。
---
104 场数据顺带说一下。
2 月到现在 Soul 推流 31 万,进房 40601 月推流 77 万,进房去重 969076 个曝光进一个人。
前几个月加起来差不多 250 万曝光,三个多月触达 30 万人了,链接 100 多人,合作七八个,公司招了两三个,线上团队 7 个。
开派对我搞得足够简单,两个手机点三下就开。
动力是数据清晰,每月 60 到 80 万曝光,触达 1 到 2 万人,总会有合作对象。
能坚持的事一定是聊天就能解决的,别给自己太大压力。
小程序叫卡若创业派对,有空可以看。

View File

@@ -0,0 +1,194 @@
# 第105场创业社群、直播带货与程序员
能坚持的事,一定是聊天就能解决的。
2026 年 2 月 20 日,初四,早上 7:10。
第 105 场138 分钟;
进房 403 人。
四个月 105 场,推流 108 万,进房去重 1 万 4昨天 103 场炸了房,今天人也不少。
---
2 号上麦在北京做创业社群27 岁。
他说本业做私域、社交、创业社群,刚起步半个多月,拉了几百人群,很多东西抄原公司的,把 LOGO 换一下。
载体是线下沙龙,场地还没定,想招商找合作方,或者跟家里修复关系用公司会议厅。
我问你怎么覆盖成本,他说还没想,私域本身没想一上来就变现。
我说聚人气的话,收会员费、茶水费就能把线下开支覆盖,很容易。
给企业做赋能,前面可以不收钱,资源好的邀请入会不收,没资源的该交交。
他问怎么搞流量,说自媒体某书某音还没怎么开始,引流几天拉了几百人,之前花时间做网站、开发程序,都自己一个人,用 AI 开发。
我说你可以来 Soul 试一下,还比较早。
105 场下来,我们推流 108 万,进房 1 万 4 去重,线下也见了三十几个人,有点效果。
他说私域还有一个用途,给未来做的 agent 和 AI 玩具找落地场景、打通销售渠道,线上活动还邀请了上市公司老总、大学教授,一开始要留影音资料做宣传。
我说资源可以,一开始就有个启动,不差。
Soul 派对每月一两万人进房、60 到 80 万曝光,能解决需求别人就愿意买单。
创业社群刚起步的,早点来试试,不亏。
---
有个小姐姐按格式介绍ESTJ江苏扬州之前房地产团队管理现在做直播带货。
从搭建直播间到选品到运营到直播前段都她弄,团队也她管,碰到的问题是投流。
她说直播带货很卷,一个品打得好就有人复制,甚至用鹌鹑蛋冒充咸鸭蛋,外包装写咸鸭蛋,价格比你低,消费者不知道。
我问她从房地产转直播带货哪一年,她说 24 年 11 月之前陪读一年多边学理论24 年底开始行动。
我说你执行力很强,管理跟落地跟进能力都行,事情没做好会难受,适合带大团队。
她讲最后一个房地产项目没做好,老板拿地做公寓商铺,商业用地改不了住宅,产品非刚需,房地产又在下行,开盘延迟,节点没卡上。
我说房地产下行是大环境,但刚需还在,结婚上学要买房。
她问直播带货和房产哪个好做。
我说房产。
房产总金额高,卖一套拿佣金上万,还有金融属性;
直播带货门槛低、复制率高,一单利润没多少,投流退货人工扣完剩不多。
她说出来干感受最深的是私人老板出尔反尔多,约定好待遇和做到多少,你做到了他反悔不想给那么多,觉得账号起来了换个人也能做,说话不算话成本太低。
我说讲信用很重要,线上要大量筛人,线下 100 人筛三五个合作伙伴,线上得 1000 人。
房产比直播带货好做。
老板说话不算话,筛对人比做对事更重要。
---
8 号小杨,广东广州,擅长大数据和 AI。
最赚钱一个月交付一个系统 12 万SAP ERP 对接端小程序,那时候还没 AI。
现在用 AI 开发,大框架自己有,细分把简单工作抛给 AI工作已经不太需要自己开发业余开发自己的偏架构、产品。
他说做金融类大模型训练底座,日活 1700 万。
有人问豆包手机、root、各平台数据接口有没有资源他说他们数据都内部产生不需要调讯飞。
他说 AI 做出来跟想要的有偏差,经验是多轮对话先别生成代码,跟 AI 把想法完善成完整需求,再交给 AI 实施,等于需求评审、技术评审做完再生成代码,实施和蓝图不偏离效果就不会太差。
我说跟传统开发一样AI 像产品经理帮你把需求整理好,再交给前后端实施,先可视化看是不是想要的,再后端实现、测试。
他说程序员找女朋友难,身边很多十多年的,写代码搞 AI 不难,找女朋友真难。
我说程序员工资偏高,所以现在裁得多。
女生不听逻辑,听语言温度,要给情绪价值,不要一直解决问题、一直给,要让她对你付出。
程序员容易陷入我帮她解决问题的逻辑黑洞,要魅力、身份、语言艺术。
他说公司 10 个开发 9 个光棍,工资最高的一个月 7 万。
我说程序员要以目标为导向不能以工时为导向,解决问题速度、效率、结果,程序员最容易做超级个体。
跟 AI 协作开发,先把需求想清楚再生成代码,效果差不了。
程序员最适合做超级个体。
---
AI 这块,今年一定 all in不用想。
公司招人,程序员第一个看每月 AI 消耗有没有超过 1000 刀,连 300 刀 2000 多块都没有的直接淘汰。
运营也是,有没有用 GPT 什么的,每月至少 20 美金消耗,没买过的放二档。
买 GPT、Cursor、Canva 等,有消费才说明在用。
去年开发平均每人 3000 到 8000 块 AI 费用,人效提升 3 倍,多花 5000 块很值。
有人问 open cloud、扣子觉得以后工资不是给程序员是给算力公司。
我说正常,我一天消耗折算人民币七八百。
开发出来的东西因为太容易了、重构太容易,变得不值钱,现在值钱的是算力。
南风说号被封了,新注册的每天早上 8 到 9 点封一小时。
我说封号就像创业失败从头再来,但你积累的经验在,知道怎么快速让号有三四十人、怎么在 Soul 搞流量搞派对,回头弄个教程给一起的小伙伴公开就行。
---
今天 393 人,差不多了。
有想做副业的联系管理 2 号 5 号,想了解切片、分发的,分发不收费还有收益,不会的有人教收点小学费。
自己分享我们会写成书放进小程序,别人看到会来链接。
能坚持的事一定是聊天就能解决的,每天 6 点到 9 点,多听每个人的视角,别给自己太大压力。

View File

@@ -0,0 +1,157 @@
# 第107场性格、陪伴经济与本地AI
了解自己,才知道什么样的运你接得住。
2026 年 2 月 23 日,初六,上午。
第 107 场137 分钟;
场观 33820进房 398 人。
四个月 107 场,每月一两万人进派对,平均停留 1015 分钟。
这场聊了三块:性格和创业怎么搭、陪伴经济谁在挣钱、本地同城用 AI 做代运营的 7 号。
---
先说你得先了解自己。
很多人一上来就问怎么挣钱,听说什么挣钱就去做,没想自己适合什么。
愿力大于能力,你得敢有目标;
但目标要跟你这个人对得上。
最简单的自测:你最强的三个能力是什么、最有成就感的一件事、最赚钱的一个月做了什么,写下来,自我画像就出来一半。
再加三条你绝不越界的底线、短期和长期的职业规划,自己就清晰了。
性格会决定你适合单干还是带团队、做执行还是做决策。
比如 INTJ 最适合先打透一条闭环、再找一个 ENFP 去复制放大;
INFP 适合当二把手、做顾问或协调,不适合自己扛决策。
ENFP 适合收集资源、链接人脉,但底下得有一个 INTJ 或 INFJ 帮着落地和收束。
这些不是迷信,是很多人用团队试错试出来的——性格不对,能力再强也容易散。
---
4 号上麦ENFJ像变色龙做新项目粘合剂。
她说最近在搞睫毛增长液,产品还没出来,几个人之间会有小摩擦,她在中间调节、把力往一处使。
我说这就对了ENFJ 适合项目冷启动:目标定完,大家看不到利益或遇到挫败的时候,需要有人做感情维护、给阶段性的小结果,这是 ENFJ 擅长的。
她问 MBTI 是不是对应小孔雀。
我说孔雀是 PDP 动物型,测的是团队协同;
MBTI 测的是个人性格和职业倾向,两个可以一起看。
ENFJ 做多了项目会越来越值钱,不用追求特别精,把团队每个业务流都摸一遍,当好粘合剂就行。
5 号说他天天给员工画大饼,但落实别找他。
我说 ENTP 就这样,画大饼、冲前面可以,执行要甩给 ENTJ 或 INTJ你带一个 INTP 帮你整逻辑、一个 ENTJ 扛执行饼画够大ENTJ 才控得住。
---
陪伴经济这场也聊了不少。
6 号问普通人做陪伴、针对宝妈或大学生行不行。
我说可以,但收益低;
高收益的在别处。
比如伴游:抖音发漂亮小姐姐陪老板商务局、几个高大上场景,一条视频 800 到账,流量和付费人群都清晰,后端把私域和团队接住就行。
再比如高端婚恋:有些富婆找有格局、能聊同频的创业男性,成功在一起一单 30 万,人家做深圳上海厦门三城,一年百单就三千万。
核心不是流量,是高质量的人。
还有绿色陪伴、陪老人、陪玩赶海,都能做。
养老要五轮考核,风险高;
赶海那种是辛苦做量。
情绪价值接下来会越来越值钱AI 越冷,真人带温度的服务越贵。
---
7 号做 AI 自动化,从短视频到直播到私域一整条链路。
他说 3 月会拿一笔投资,把公司做起来,已经合作了周六福和广东 600 多家门店的餐饮连锁。
收费是工具使用费一年 13 万,主播和团购另算抽点。
主攻实体企业老板、对 AI 有认知的,目前做青旅、餐饮、珠宝,在深圳青旅做到同城头部。
我说你这个业务不新颖,本地同城代运营很多,关键看人:你是谁、资方是谁、案例有没有。
你已经做出标准化样本,接下来是跟商家怎么深度捆绑——纯工具没壁垒,纯代运营太累,最好能锁定几家、成立运营公司或拿用户触达权,不然很容易被「我觉得我自己也能做」的商家甩开。
他说客户和投资人都是在 Soul 这个房间链接上的。
我说线上筛人快,但开发落地沟通成本高,核心岗位最好线下碰;
你深圳的,南山月亮湾 AI 沙龙多,可以线下再筛一轮。
---
其他零碎的。
炸房很正常,聊深了就容易触线;
我准备了 6 个号,手机摆旁边,封一个换一个。
Soul 上搞流量不难,有内容、有节奏、什么人数做什么动作,开多了就摸得到规律。
基因胶囊这周刚出,技能打包成一颗「药丸」丢给 AI它就会了
公司里都在做,财务、拆书、本地模型协同,能沉淀成基因的都在沉淀。
学 AI 就学怎么用 AI 挣钱,不然学了也没用。
想副业的联系管理,切片分发、分享书都有收益;
想深度合作的业务清晰的可以进会员群。
每天 6 点到 9 点,多听每个人的视角,多分享多曝光,别人知道你能解决什么,合作才会来。
了解自己,才知道什么样的运你接得住;
接住了,再谈坚持和放大。

View File

@@ -0,0 +1,227 @@
# 第108场Soul场观400等于抖音1万
Soul 场观 400 到 600合作价值相当于抖音 1 万。
2026 年 2 月 24 日,初七,早上 6:53。
第 108 场162 分钟;
进房 544 人。
---
6 号问了一个问题:你们在 Soul 上做这个事,跟抖音有什么本质区别?
我说最大的区别就两个:停留时间、专注力。
抖音的场观是多少?
我搞了几年,开直播场观 5000 到 15000 之间。
Soul 的场观是多少?
400 到 600。
但你听别人 1 到 3 分钟,跟听别人 10 到 15 分钟,完全不是一回事。
能聊 10 到 15 分钟的人,他的沉浸程度、合作意愿、能聊出来的东西的价值,跟刷 1 到 3 分钟就划走的人,完全不一样。
所以 Soul 400 到 600 的场观,效果相当于抖音 1 万左右的场观,甚至更好。
我们没有瞎说,每天都在做数据运营,管理很辛苦,数据报表都有。
---
抖音的优势是能展示办公室、场景、人,流量大。
但抖音的缺点是停留太短1 到 3 分钟就没了。
Soul 是纯社交,语音聊天,没有画面,但人愿意待 10 到 15 分钟。
你想想两个人对话聊业务、聊合作、聊需求1 到 3 分钟能聊出什么?
刚进入状态就结束了。
10 到 15 分钟,能把事情讲清楚,能把人筛出来,能判断这个人靠不靠谱、能不能合作。
合作的机会完全不一样。
---
108 场下来,结果是什么?
核心管理 7 个,做副业的 40 多个,老板群 90 多个,会员群在聚集。
这些全是线上组织的,不是线下发工资招的。
线下招人太容易了,给钱就行;
线上要讲情绪价值、要筛选、要磨合,难 100 倍。
抖音搞这个事情得一年多Soul 两三个月就出来了。
十月到十一月,进房人数多了 3 倍;
十一月到十二月,多了 4 倍;
一月到二月,又多了 30% 到 40%。
Soul 是增量的,每个月都在涨。
现在我们每月 1 万人进派对,每天 300 到 600 个人,最高一次 800 多。
这 1 万人里面,有多少能合作?
有多少能形成联合?
有多少可能投资?
不一定,但基数在这。
---
3 号上麦,合肥的,做医疗 AI 辅助诊疗系统。
标品 2 万永久版,给私人诊所用的,从挂号、辅助诊疗、病历库存、财务多端协同到硬件外设,一整条流程。
定制单子几百万,做过雨露先行的 AI 制药文献综述、国投证券的投资项目计划书智能体、小工厂的拼多多 AI 客服。
他说标品走量,定制维持现金流,一年接一两个大单就够吃。
我问你们交付形态是什么?
他说主要给医师端用Windows 台式机本地跑,数据不上云,医生放心。
诊所这块是上行的,美业下行,但私人诊所、中医馆很火,我全家每个月花 3 万多在针灸看病上。
他说拓市场缺人,之前做拓展的离职了,想找医疗器械方面的业务合伙人。
我说技术的人不适合走关系你找个专门做这块的合伙人来跑渠道线上也可以筛Soul 上很多做诊所的、做医院招投标的,可以链接。
他说讯飞应用市场、奇绩创坛都是在 Soul 上朋友推荐的。
渠道最重要,产品已经跑通了,就差人。
---
5 号问:像你们这种财务比较自由的人,为什么还要这么努力?
我说跟钱没关系,本来就在享受生活。
每天陪小孩、遛狗、公司逛一逛,开派对就是 6 点到 9 点聊聊天,以前这个时间是散步的,现在改成聊天而已。
做 Soul 四个月108 场,发现降本增效很多:服务器成本降了一大半,供应链合作成本比想象中低,找切片的人容易找,人才也懂。
Soul 现在是送流量的,不做完全是浪费。
开派对等于开淘宝店07 年淘宝也是设一两百个宝贝7 天快到期的排序,流量咔咔进来,跟现在 Soul 的感觉一样。
比当年开淘宝还快。
---
6 号又问:你们到底怎么赚钱?
聊了一大堆,最后还是说怎么加入你们,但没讲清楚你们的业务模式。
我说讲了很多遍了,你进来没多久,多听几场就懂。
第一,派对两三个小时的内容,优质部分切成切片,切片团队分发,有动作给钱,有客资给钱,有产品分成给钱,平均一个月 800 到 5000 不等。
第二,优秀的项目我们帮你推广,几十个人分发,一天几十万曝光,业务上去谈分钱。
第三,项目投资,你靠谱、有结果、能闭环,我们投你,分钱。
第四,推一条项目推广,拿多少分成先讲好,推过去就分钱。
第五,会员费,你想进来就交,我们筛选。
多维度,不是单一路径。
我们不需要筛选项目,线下我过去看你财报、看你公司、看人员状态,该合作就合作;
线上看不见摸不着,只能从你表述的节奏、解决问题的能力来判断,合适就约线下见面。
---
7 号总结了一句:你们要的是切实的业务,不是想法。
你把自己的业务、感触、现在的需求说清楚,有人能帮上就链接,链接的深度取决于你做这个事情靠不靠谱、有没有结果。
8 号说:这个平台的价值就是分享我需要什么、我能带来什么,认知提升,同时可能找到合作伙伴。
把想法具象化:我开影楼,有摄影资源,能接触到拍婚纱的人,谁有婚礼 MV 的需求?
我帮你做。
这样才有落脚点。
---
今天 162 分钟544 人,人均 11 分钟。

View File

@@ -0,0 +1,203 @@
# 第110场Soul变现逻辑全程公开
挣钱这件事,能摊开讲的都不算秘密。
2026 年 2 月 26 日,上午 7:02。
第 110 场144 分钟;
进房 406 人。
---
有人问Soul 上面怎么挣钱?
开派对就挣钱。
今天 110 场了,跟你讲这套变现逻辑,全程公开。
前期都是砸钱的。
第一个,召集切片的、召集干活的,有动作就给钱。
发瞬间给钱,有客资给钱,项目卖出去也给钱,他们赚的是副业的钱。
内容由场上生产,写总结,把每天派对里优秀的分享、案例整理出来,给有时间的人去发,发就有钱拿。
想做切片、做副业的,可以@管理,有电脑、会剪辑的都能问问。
第二个,省钱。
Soul 上很多供应链的人过来,直接合作。
一年服务器加租金各种费用差不多小 40 万有一个人给了半价还不到17 万多,省了二十几万。
做水的过来,定了一年的水,另一个投资的金融公司也找他定了一年。
消费的本质是省钱,前期在上面花了不少,但省得更多。
第三个,收钱的几个形式。
资源群加了门槛,有分享、有介绍才进,现在 93 个老板。
有人要获客、推项目,开发做了小程序,把项目写进去、推广出去,收一点钱,会员群就出来了。
好的项目提前谈好分润,有合作的分。
再就是跟主营赋能,做电竞的,在派对里筛到不错的人,配几个人给他,跑通了,一个月一二十万利润,也是收益。
四个月下来,做副业的 40 多个,管理 7 个,老板群 93 个,会员也收了好几个。
前期投入发钱,现在慢慢成型了。
想参与副业、做切片的,联系管理就行。
---
3 号问Soul 来回转化干嘛的?
没太听清楚。
变现逻辑就这几个。
后面小程序 2.0 已经上了你分享一篇文章别人付一块钱90% 归你5% 给腾讯,平台拿一个点,管理拿四个点。
你开派对、推当天的文章,别人付费都跟你 30 天捆绑,开派对可能就挣几万,这套打底要打半年。
对比传统沙龙已经快很多了。
每个月派对进来一两万人,去重完 1 万出头,人均停留 10 到 15 分钟。
还有 30 多个做切片的,每月小 2000 万播放。
想做切片的可以找@南风了解一下流程
有这个量,接啥不行?
有厦门场地的人来合作,给人堆满;
有开发需求的,当渠道丢给程序员。
都是顺便的事。
---
场上还有人问别的。
有人问 AI 怎么做、怎么赚钱,太泛了,你原来做什么就用 AI 赋能,提升效率。
想了解 AI 就进圈子,付费圈子好一点,免费的里面都是不懂的,聊不出啥。
4 号做工厂电商,白胚一千个图案就一千个新款,一套图最便宜 200 多,拍不过来。
AI 出图、批量上架的工具很多,豆包搜一下、需求描述清楚,让它给你推,前三款付一两个试试。
5 号室内设计想转行,围绕原有能力转,设计师转短视频、转 AI 出图的多,比跨赛道做跨境容易出结果。
6 号问 10 个抖音号用 AI 在自己电脑上分发会不会封号。
同一 IP 多号做矩阵肯定要出问题,现在成熟的是分布式矩阵,用别人的号,租号已经成产业链了,一个号一个月 100 块普通的,好一点的 200有粉丝的 1000。
7 号做太阳能、卖电的,以前一个人干拿过几十万,现在浙江市场利润低。
跟现在卖算力是一类事,找有算力的公司、找有算力需求的企业,赚差价,本质是销售。
8 号博士、大学老师手上有两所学校、17000 学生,开了 AI 漫剧课,想组团跟红果谈。
肯定能做,以前做过飞飞时间,企业把工作流拆细发到 APP 上接任务,学生做完就有收益;
擅长做培训就对接好红果,学校做成,是这个城市第一家,大机会。
---
有人问:写东西能产生收益吗?
没有直接收益,创造价值就有收益。
每天写一篇放到小程序别人付一块钱90% 给分享的人。
小程序日活几千,大家都能挣钱。
2.0 已经上线,超级个体点一下能加对方微信、拉群,后面有 AI。
3 月份迭代 3.0109 场内容做向量化,提问都交给 AI 智能体。
其实没花太多精力6 点到 9 点聊聊天,管理很辛苦,流程都是他们整理的。
有事想对接、想做副业或切片的,找管理就行。
今天 144 分钟406 人。
每天公开数据Soul 结束之后小助手去重完才是真实数,每个月 1 万到 2 万去重,停留 10 到 15 分钟,流量质量还可以。
懂的就知道,就花 3 个小时,本来也是遛狗散步的时间,拿来聊聊天,顺便把变现跑通了。
---
Soul 咋变现?
前期给钱、切片加会员加项目分润,四个月跑通。
能坚持的事,一定是聊天就能解决的。

View File

@@ -0,0 +1,86 @@
# 第111场平台规则变了怎么办
平台规则一变,别把身家押在一个篮子里。
2026 年 2 月 27 日,上午。
第 111 场。
---
那两天 Cursor 大封号,不少高消耗用户也被误伤。
有人月耗 TOKEN 七八千,照样被封,申诉就完了,别自己先崩。
封号背后是蒸馏攻击那档子事:国内几家套壳用蒸馏技术抽人家研究文档当训练数据,被定义成蒸馏攻击,上升到国家安全层面,对方批量封号。
正规用、用得勤的,被一起扫进去,只能认规则。
规则是别人的,活法自己的。
能控的备好,不能控的别耗。
---
场上有人问:新号登不上去,要手机号啥的,试了一整天都不行;还有说流程走完了、图也生成了,结果账号里找不到——是不是跟这两天封号有关?
会。
平台一收紧,接口、存储、展示都会抽风,流程对、结果丢,常有的事。
别死磕一台设备、一个账号。
云电脑用过吗?远程登录到另一台电脑上操作,本机是华为是苹果都无所谓,封号、限流往往跟设备或环境绑在一起,换环境就少很多 7 的 8 的。
真想长期搞,备一台云机、多一个环境,成本不高,省的是心态。
---
还有人担心:手机、电脑会不会记录隐私,聊啥都被标注、以后被重点关照?
平台有能力这么干但没必要对每个用户都这么干Soul 上我们聊的每一句话它要留存、做归类、做流量池,那是平台的事,你控制不了。
别自己吓自己,也别把时间耗在「会不会被盯上」上。
生活在哪就接受哪的规则,抱怨没用,多留后手才有用。
---
做事落点放在「能控」上:账号封了能申诉、能换号;环境不稳就上云电脑;平台改版就跟着调节奏。
不押宝在一个平台、一个号、一台设备,规则变了,还能接着干。
想做切片、做副业、要稳定环境的,可以找管理问问云机或备用方案,有电脑会剪辑的也能一起对一下流程。
---
平台规则变了怎么办?别押宝在一个篮子,备选方案先铺好,接着做事。

View File

@@ -0,0 +1,364 @@
# 第112场一个人起头维权挣了大半套房
起头难。
起完头,后面都是顺势。
2026 年 2 月 28 日,上午 7:01。
第 112 场135 分钟。
---
场上有人问:普通人怎么敢跟 ZF 搞?
你不怕吗?
干过。
十几年前,小区 12 栋楼房产证被压着,开发商把土地证抵押了 14 个亿,业主办不了证。
没人起头,就起头。
第一天晚上在群里发:明天早上 8 点拉横幅,你们想来就来,不来就一个人干。
8 点到了,没人下来。
就一个人站着。
后来有个本地的阿三,带几个老头下来,说我们帮你。
阿三他们去敲门,说下来办房产证,一户一户敲,把人「骗」下来——下来才发现是拉横幅。
一个多小时,三十几个人。
让大家喊话、拍视频,发到各个楼群:有钱出钱、有力出力。
到 9 点多,两百多人下来了。
写了一条朋友圈:无良开发商某某,土地证抵押云南,请 ZF 主持公道。
让所有下来的人把这条和视频发出去,发了、截图的才优先办证。
到下午 1 点,市长办公室打电话过来:过来泡茶。
后面就是游街、ZF 门口、市委书记市长十五号上访日见我们,法院院长、消防、房产局几个局一起开会,责任切割,消防开绿灯,房产证办下来。
全程一两个礼拜。
自己把整条链路跑通了一遍,很麻烦,但跑通了。
跑通之后就是生意。
起头难,跑通更难;
跑通了就能变成别人愿意付费的服务。
小区几千户,要办证的人很多。
做了全套 SOP、视频免费给业主看能自己办就自己办不能办就找房主。
找一个做过桥的朋友来跑腿,办一份 5000 块,推微信给他,他收钱办事。
还有很多人没过桥完、怕房子出问题,找他过桥,他一单能挣四五万。
同学搞了一套房,房主搞了大半套。
业委会把房主选上去了,狗都能养了,保安再也不敢说不能养狗。
众筹的那笔钱没用上,在小区对面开了个超市,到现在还有分红。
那五个起头的人,阿三开了鼻炎诊所,小区的人都知道他是元老,生意一直不错。
所以你说怕不怕?
初心就是为了拿证。
势能不够就组织人,共同目标有了,信任才出来;
信任出来了,才会有人找你办证、过桥。
利他不是口号,是大家都有收益——拿证、分红、生意、口碑。
受益终身。
---
2 号说:一般人起不了头,得有勇气、影响力、人脉。
房主没有人脉。
从头到尾一点都没有。
起头就是一个人,然后几个人,然后几十个,然后两百多个。
核心就三件事:初心是解决问题,不是搞事;
有勇气先站出来;
参与的人都要有收益。
不是为了自己的利益去闹,是大家共同目标、一起拿结果,顺便有人找你办事,钱就来了。
现在在 Soul 上干的也是这种事。
链切 1 万是第三个阶段,接下来 112 场到 150 场,赋能 100 个超级个体太宽,先赋能 10 个。
38 场赋能 10 个,大概三场一个。
能赋能的体系已经搭好了:能给做副业的发钱,能帮人提升业务,在 Soul 上把一件事干成,也是一辈子的事。
就像当年小区那批人,只要房子还在,大家都还记得谁帮过忙。
---
有人问:亲子教育、家庭教育在 Soul 上怎么变现?
别藏着掖着。
标题直接写痛点:解决夫妻问题(付费)、挽回女朋友(付费)、中考如何上 985、如何提升孩子记忆力。
主题垂直一点,直接收费。
来了先帮人解决一两个问题,觉得有用再谈深度、付多少、加泡泡。
交付轻一点,觉得没效可以退。
一个月进派对一两万人,你要变现太容易;
你场上十几个人在线,就把主题写清楚、写垂直,直接收费。
5 号说:你这一下子打开思路了,有需要的人就来了。
对。
想做什么就直接做。
一天一块钱一小节,小程序上都有;
你的专业程度和身份决定了能收多少。
越专业、越能解决问题,收 1 万、2 万、10 万都有人付。
李亚鹏一开始众筹几十块、几百块,到后面是谁在给?
明星、微商大佬 500 万、香港那位 5000 万。
公益永远最挣钱,势能到位人生就起飞。
不用怕事情小,坚持足够久,弹簧压紧,起飞很快。
---
◊ Soul 上投流和派对价值的算法,场上说过,具体数值是这样。
推流自然流量Soul 会把派对推给用户,规则改过一轮。
正常情况下一场 120 分钟,平台每天给这个房间大约 3 万次曝光;
能实际进到派对里的人大约 300600 人。
算下来平均约 7580 次曝光进 1 个人,有的场 72、有的场 80取个中就行。
房间里一分钟大概进 3 个人左右,可以自己对着时长算。
派对价值:一个月进派对一两万人,主题写清楚、写垂直,变现空间就很大;
你场上十几个人在线也能直接收费。
付费投流1000 次曝光大约 610 块,按 75 曝光进 1 人算,进一个人到派对大约 4 毛 2
每天想多进 500 人的话,成本大概 200 块左右。
每天能加微信大概 10 个的话,获客到微信的成本就是 20 块一个人。
后端闭环打通之后20 块获客、能变现 25 块就可以拉满投。
核心是把最小闭环跑通一块钱小课、会员链接、AI 赋能,再算 100 个人里多少人成交、多少钱。
播了 112 场,内容合规上没出大问题;
偶尔炸房就改房名、换号开,解决问题就行。
设备标配:几台手机、备用号、两台电脑,丝滑切换。
---
有人问超级个体要什么条件。
超级个体不需要太多条件。
做好你自己最小闭环里能挣钱的那一件事,用工具放大,再嫁接优质的前端或后端。
比如游戏主播就每天播、加微信,后端有人转化;
比如销售就聊天分钱,别人给你客资你谈分成。
超级就是加一层:用好 AI效率上去。
千万别啥都做,挣不到钱或只能挣小钱,还特别累。
把做事当成玩,像现在三个小时派对就是聊天,跟散步差不多。
以前做游戏,一键宏那个品:没 IP 的卖 50 块、赚 5 块;
有 IP 的把全国冠军的输出手法写进去,卖 1980卖 10 份就 2 万,还有年费。
同一类产品,卖的是影响力。
血染那种,打比赛、接单、打排名,一单一万两万,一赛季一个组能挣 10 万,还能买别墅。
坚持做自己喜欢的事,但要遇到对的人、对的链路,不然拿不到结果。
---
7 号问:上传视频还要自己截封面再上传,很麻烦。
你身边有什么人?
有技术就直接提需求:上传视频自动生成封面,首帧或 AI 挑一帧当封面,减少操作。
想到就做,有卡点就丢给能解决的人。
就像想买房子,就委托专门做房产的小伙伴;
想收租就找法务团队批量处理。
人永远比工具好用AI 也只是工具。
大姑做瓷器几十年,一句话顶十年。
她讲情绪价值、大客户怎么接待、什么做什么不做、内销怎么打。
聊一小时,值好几百万。
生意就是有来有往,投其所好、情绪价值给足、身份对等。
做电竞、做私域也一样,把事情当项目做,能链接的就快速链接。
---
今天 135 分钟。
112 到 150 场,目标赋能 10 个超级个体。
想做副业、做切片的联系管理;
有业务想进资源群的要先上来分享、说清楚项目。
会员群付费,小程序里每天一节一块钱,大家怎么赚钱的视角都在里面。
懂的来链接,不懂的多听几场再动。
一个人起头,后面都是顺势。
小区维权是这样Soul 上开派对也是这样。
敢第一个站出来的人,往往也是最后分到钱的人。

View File

@@ -0,0 +1,383 @@
# 第113场不会选择怎么办
人最怕的不是没得选,是有的选。
选 A 还是选 B哪条才是最优解想破头不如先动一条。
2026 年 3 月 2 日,上午 6:24。
第 113 场163 分钟;
场观 34290进房 430 人。
---
一上来就炸房。
系统把房间推到别处去了,标题多打了两个「私域」就炸,大家重新进。
有人问:你说要赋能 10 个人,什么样条件的人?
随缘,现在没定条件。
就是先提一嘴,看大家怎么接。
2 号说:我想被你赋能,怎么办?
你得先有个项目,项目尽量白一点、别太灰;
把你做的事用人话讲清楚,房主会帮你整理成别人能看懂、能链接、能合作的样子,直接丢到小程序里。
小程序日活还可以Soul 创业派对那块,现在多了超级个体板块。
每天把派对内容整理成一节一节,最赚钱的一个月、四十几个人的视角,一块钱一节,想看的人自己点。
你如果做过「最赚钱的一个月」分享,或者项目被写进文章,别人分发出去就会看到你,有人会来链接。
房主撮合这事,收个会员费,导客资、导流量给能跑通的人。
现在几十个分销团队,收费很低,后面能怎样再说,先让管理他们跑起来。
先有项目,再谈赋能;
项目能讲清楚、有人感兴趣,现场 510 分钟就能聊明白,现场拉群就开干。
---
2 号说:我在琢磨个人 IP打算辞职有两个方向。
一个是小红书3055 岁女性,身心灵、疗愈那种,承载她们「刚开始活明白、想要更好生活」的情绪。
另一个是读书赛道,一天能保证 3 小时左右100 场跟你这种类似,看数据、引私域、知识付费、线上读书会、线下读书会,再嫁接育儿、家庭辅导师,客单价高,能见面更好。
先开始再说,很多事你一做脑子就清楚了。
已经开了 113 场,每月流量比较稳:三个月下来,每月大概 60 万到 100 万曝光,触达 1 万到 2 万人进派对。
线下要见的话,一个月见 20 个人很正常,前 50 场见了三十几个人。
流量起来了,才敢说赋能——能导流、能撮合生意,才有人愿意跟你绑一起。
做 IP 最吃两样:影响力和能协作的人。
线下招人快,但贵。
房主 19 年底组过团队,筛了三十几个人,最后 5 个人,拍剪、分发、接待、写稿、对接老板,全发工资。
厦门工资低,一人 50008000一个月 2 万到 3 万支出。
线下你知道谁靠谱,天天在眼前。
线上难多了:沟通成本大,合伙制大家看不到预期;
想找执行的人,多半要「给多少钱干多少活」,而线上很多是想得多、做得少的,人人想做 IP、做内容不执行。
线下 30 个人发工资筛出 5 个,线上你得筛一两百个才出三五个人,还不发工资、用分润,更难。
2 号说:我想找一个能推动我的人,不是给他钱,是他觉得我能做起来、他也有回报,才愿意推。
叫他律,可以搞,但难。
以前身体不好,在观音山搞过老板跑队,早上 5 点跑步,一天没来扣 99 块发红包。
跑了 7 天,大降温,没人来了,三天不来就散了。
他律有他律的难处,最后还是得靠自己,再加点运气——先开,先动,才有后面。
闭环跑通之前,先干再说;
先动一条,再调。
---
Soul 导流到私域,场上测过一轮:广点通出来之后,导流到一个微信大概 2050 块,创业粉粘性强。
正常这类粉要到 100 多,内容做得还行,成本就压下来了。
算一笔账10 个人按 20 块算200 块;
能转化 1000 来块,链路就通,大家能分到钱,才愿意继续推。
现在已经在拓第二条线:有些人开派对,但没后端变现。
房主就提供一个产品——一块钱一节内容、会员、后端变现、资源对接,内容、产品、人工都由房主出;
对方只管开派对、聊聊天,导流到 APP30 天捆绑,收益跟他有关。
对方就开派对,后端房主做完,大家都有变现路径。
不止是帮房主,也是帮派对里分享的老板们导流、赋能。
切片的人多了,规模慢慢起来;
资源群免费,副业、做切片的找 4 号,会员群也找 4 号。
6 点到 9 点,快速链接,项目靠谱、闭环跑通了,可以进资源群。
---
有人提到知识星球。
知识星球就是个载体,轻付费、轻交付,几百块一年,把人聚起来看内容、做互动。
小程序不一样:把好项目整理好放进小程序,结合 AI 匹配谁对谁的项目感兴趣点一下名字AI 会加好友、拉群。
小程序叫「卡若创业派对」,搜就有——本来想叫 Soul 创业派对Soul 不给,怕品牌侵权下架,就改成了房主名字。
上线一个多礼拜,两个礼拜不到,公司的人现开发的。
先干再说,不干不知道;
前端做简单,大家动动手发文章,就可能挣几百甚至几万,看发的群体和需求。
Soul 现在精选派对都上首页了,主打派对,腾讯入股之后往 KOL、KOC 圈人、做停留,调了三四年了,上面有大机会。
---
3 号在古北做内容电商,自己也当房主,聊 3D 打印。
同学是厂商,做 3D 打印设备;
手头有桂花主题馆,要做文创,用 3D 打印做文旅产品——比如桂花树,树干是真的,叶子花用 3D 打;
还有乌鸡、嫦娥兔子这类萌宠 IP带桂花用 AI 让它动起来。
要招能绘图的人,绘图这部分先花钱,后面做一整套 UI 给客户;
已经有个搭档做交付的有设备——拓足、UV 3D、激光、切割、车床都有还能进学校做第三课堂。
两天就找到搭档彼此对得上他负责动手3 号自己负责动嘴、卖课和打包。
房主问:你缺啥?
产品有了,市场在做,还缺什么?
3 号说,缺执行强的人;
线下管人、培训人很强,半天能培训一个人,情景模拟销售,能扛住提问就算过;
线上不知道进度怎么约束。
线上找纯执行的很难,你约束不了。
先做闭环,看到流水再聊分钱——成交一单分多少,先打样;
开派对也可以直接讲你的方法,线上可行就让他们按你的来,拿到结果人自然多。
3 号说,像劳务派遣,绘图我给钱你画完;
但以后会有多场景、多宠物的交互,可能接近游戏公司或动画公司,需要很多人才。
你先跑通一两条线,网吧或商场都行。
网吧的话送电影服务器、桌面做个工具有人点就分成——05 年干过,当时优酷还没出,网络差,厦门国贸三楼搞了中央电影服务器,底下网吧送服务器,桌面用 ASP 写了个类似优酷的看片工具。
《满城尽带黄金甲》一上,一天后台两三万流水;
厦门当时 70 家左右网吧,基本都铺了。
前提是之前已经拿了网吧桌面广告位:鼠标键盘耳机包了,成本 200 多一个网吧,网吧自己买要一千多,等于 200 多包了几十到几百台电脑的桌面,信任有了,送服务器才顺。
后来上海一个姓廖的投资人投了钱买硬件,直接铺网吧;
优酷出来、网好了,项目就黄了,小亏。
3D 打印你要是铺网吧或商场,要么送设备占位置,要么租金加分红;
商场谈「设备拖过去、帮你做呈现」,一天不少于 1000 块也有人干。
先打样板:一天 1000一个月 3 万,分你 1 万 5你愿不愿意投设备
看到流水再谈分工。
设备是创想的,可以找创想要资源;
总设备钱得有人出,你才有量,第三方掏钱卡点就多。
---
有人问怎么进群。
搜小程序,里面都是文章;
每天会把大家分享的内容写成小节,生意逻辑、需要什么,上面都有。
有小小一点规模才会写进去,不会每场都写,有时稍微提一下。
生财有术跟这种模式有点像,霸榜很多年;
会费 1000 块,进圈子,资源怎么匹配、怎么约,各凭本事。
有人说是广东人,在商会做志愿者很多年,端茶送水、混脸熟;
以前在武汉卖手机、回收、修手机,晚上下班去商会混,慢慢很多人找他,会费 1000 一个月就回本。
圈子就是这样,先交费进圈,再谈匹配。
生财有术体量大,很多人分享项目,但项目要人能执行——人从哪来、专业的人从哪来、资金够不够,都得自己想;
纯看项目只能略知一二,执行才是大头。
---
后面聊到房地产。
7 号说14 亿房产、13 亿人,不看好;
除了主流城市、核心城市吸虹还有一点空间,其他都没爬升空间了,下行是必然,政策小拉升而已。
大项目跟普通人关系不大,但跟你有关系的小机会可以参与。
国家队进来收房,就有量,有量就有交易,有一小波拉升;
手上有房、等着卖的这一波就赶紧出。
炒房的人拿的价和普通人拿的价不一样;
能得利的、跟自己相关的就动,不行就扛着,算好每月利息和杠杆成本。
场上也有人在做收不良资产、个人资产膨胀,拿钱、房票、政策、批量尾房折上折,拿房成本低,抗风险。
行业都一样,拼谁有想象力、谁能坚持、谁钱袋子扛得住;
条件不成熟就不动,钱放着吃利息,等条件齐了再动。
多学科组合、五行八卦那种,福建广东很信;
有个做智能空间的大神,纯分享,线下聊聊天,人家找他咨询一次 40 万。
先闭环,再分钱;
等条件够了再动,不迟。
---
今天 173 分钟。
赋能 10 个人随缘,先有项目、讲清楚、能链接再说;
小程序超级个体、资源群、加入vip会员群都在做切片的、做副业的找 4 号。
Soul 每月 60 万100 万曝光、1 万2 万人进派对,导流 2050 块一个微信10 个人 200 块能转化 1000 来块链路就通;
开派对没后端的房主给产品给后端30 天捆绑一起分。
做 IP 线下招人快、贵,线上筛一两百才出三五执行的;
他律可以试,但难持久,最后还是自己加运气。
3D 打印、网吧、商场,先打样板见流水再谈分工;
05 年网吧电影服务器也是先拿桌面、再送服务器,满城尽带黄金甲一天两三万。
房地产下行,小机会跟自己相关的可以参与,看不懂就别碰;
收不良、房票、尾房折上折,等条件成熟再动。
这个夏天,一定会有人接到果。
先闭环,再分钱;
条件齐了再动,不着急。

View File

@@ -0,0 +1,318 @@
# 第114场人跟人差别以前没 AI 差 100 倍,有 AI 差 1 万倍
人跟人差别,以前没 AI 差 100 倍,有 AI 差 1 万倍。
你还在纠结菜叶有没有虫眼,别人已经让 AI 写报表了。
2026 年 3 月 3 日,上午 6:33。
第 114 场163 分钟;
场观 42360进房 445 人。
---
我开派对,核心很简单:六点到九点没事,早上精神,找人聊聊天。
以前一个人散步,走到公司;
去公司也无聊,不如在派对里跟几百个人过一遍话题。
今天有人问:你们做电竞还招人吗?
招。
能力过关、有私域操盘手经验、有 Macbook、AI 每个月消耗超过 1000 块的我们发工资1 万到 2 万 5 之间,看能力。
厦门。
用的越多我们越开心;
你用三个月和用一年水平不一样,一个月连 1000 块都耗不到,要么没在干活,要么时间都耗在找免费工具上了。
2 号问AI 除了剪视频,私域还有什么工具?
后端比前端重要。
你打好知识库,有人加到你微信,接在数字员工底下,让他维护客户、看朋友圈、点赞评论、发有温度的话,有意向再真人介入,人效就高。
前端工具太多太杂,不一定好用。
我在 Soul 上也有导流全程公开你进小程序就知道——卡若创业派对搜一下点一下名字AI 会来加你、打招呼、发信息。
上线两个礼拜,日活几千,效果还可以。
3 号说:我最大问题是前端,以前一天能来上千上万个客户,现在 100 万播放量才几十个。
那就把视频做到极致。
以前一天一个,现在用 AI 一天 10 个、100 个,一样是怼量。
抖音能让你上就上,不像 Soul 发视频还删你。
分发可以找别人发。
手头 43 个人跟着发瞬间,我剪好他们发,发就有钱,有客资也给钱,卖会员也给钱,一个普通宝妈平均一个月 800 到 5000。
你发一个动作就有收益,跟你捆绑 30 天,有人付款都跟你有关系。
内容我出,流量我导,他们只做一个动作:发视频。
有人问:网上很多东西是不是假的?
99% 是假的1% 是真的。
你要自己去识别;
不识别,生意没法做。
互联网没成本,线下有——你公司在那儿,骗一次试试,越大的公司风险越大。
线下违约成本高,线上瞎扯容易,所以更要靠你自己分辨。
觉得假的就笑一笑走,不用链接;
觉得真的、能做,就做,做了就别怀疑。
易经讲的就是:先收集信息,多到过载,再分辨、辩证,在自己认知内确定的事,就去干。
判断不够就换圈子,最简单的办法就是换圈子。
世界上谁带你挣钱?
没人带。
挣钱你要付出努力;
分辨清楚,愿意合作就来我往,不愿意就再找。
挣 100 块你开心,你就是挣钱的;
挣一个亿你不开心,你也是不挣钱的。
看你的欲望和生存环境。
你既然决定了,就坚定地去做;
别让 10 个领 3000 块工资的人跟你说不能做,你就不做了。
---
场上有人聊招人、聊私域、聊真假,也有人聊具体生意。
南风做文玩核桃,私域电商,客单价 1000 到大几千过万,不是直播间十块八块那种。
面视、六面图、原视频、自然光、尺寸、克重都上,不满意付个邮费寄回,确定要了有打底、锦盒、终身包退。
一天发 10 个左右视频,每个曝光 500 到 1000一天加微信多的时候 10 个左右,少的话五六个;
一单 400 到 500不打折能到 800、900。
前两天没人打扰,头一天一单 400第二天一单 500以量取胜投入多得到就多。
他之前招代理被封号,三个号全没了,好友、朋友圈、瞬间都被清空。
平台有风控,我们现在才把引流路径优化好,不让你做容易被风控的事;
他是在被打死之后才知道要优化。
要说数据,就得自己记:一天多少曝光、加几个微信、一周成交几单、一单赚多少。
比如一天 1 万曝光加 10 个微信,一周加 50 个成交 1 单、赚 1000那一个加过来的人成本就是 20 块,你才能量化努力和回报。
5 号分享怎么招人、怎么问对的问题。
他在鄂州园博园 7 天卖 2 万桂花糕,请了三个大学生,其中一个是他问志愿者「有没有同学愿意兼职」,前两个说没有,第三个想了半天说「你觉得我怎么样」——有勇气。
我当场情景模拟:我当顾客为难你,你顶得住就第二天来上班。
不是要标准答案,是要看你能不能顶住连续提问。
行业积累、常识储备、对人观察,问对问题就能在短时间里判断一个人合不合适。
尊重人、情绪稳定、好好说话、找一项运动坚持、保持好奇,这些听起来简单,做得到的人不多。
一人公司、AI 创业,最怕一个人闷头搞;
一定要接触人,不然走不远。
---
6 号做长白山野生食品出口、支付平台、IDC 监控,三个板块;
7 号做毛巾生产,想扩客。
毛巾利润薄,零售不现实,走 B 端找连锁、理发店、批发商,或者品牌采购,关系跟硬实力都要有。
纯私域获客成本高,毛巾复购可以但客单价低,后端产品组合少,没有 IP 很难;
要么学恒安搞直播间烧钱做 C 端,要么供应链+私域搭 AI 扫码加微、寄货即获客,但运营成本很重,私域人才 1 万 5 到 5 万,半年 100 万到 200 万烧出去,磨三个月半年才出结果。
我最后说了几句。
我们派对每个月一两万人进来,我天天在表达,你觉得我会缺客户、缺流量、缺合作伙伴吗?
不缺。
我在上面找人、找钱、找资源,找了好多,不开玩笑,每天都在做。
你把项目讲清楚,目标人群、价格、交付说清楚,有人感兴趣就链接;
讲不清楚,没人帮你整理,你找别人整理也没人理。
我每天都有小结切片团队几十个人在做分发我给他们钱他们发完你的项目有人知道、有人来链接你在内容里点一下名字AI 自己去加对你感兴趣的人——这就是赋能。
开派对我亏钱在做。
李无聊来公司,我给他买了 17 万的服务器;
那么多人在公司喝水、聊天,都是成本。
但我在派对认识的供应链级别不一样,全国性的。
比如服务器,原来一年四十多万,在 Soul 认识一个给腾讯做供应链的17 万搞定,省了二十几万。
2 号管理卖昭通苹果,我都没听过,他送了我好几箱,我转送股东,好吃,后来一直买、送礼,股东说可以做成送礼套餐,我就跟 2 号说弄个价格、给销售分钱,生意就搭起来了。
都是莫名其妙的链接。
每天 400 到 600 个人在房里,你上去讲,等于每天开几百人的会;
你去哪个展馆能跟 400 到 600 个人集中聊?
没有。
所以表达清楚、坚持表达,就不缺人和机会。
先讲清楚,再谈合作;
讲不清楚,连机会都没有。
---
今天 158 分钟437 人进房,停留 8 分钟。
Soul 广点通已经能投流了ROI 算得过来就可以拉满;
跟 17 年抖音太像,有起飞的机会。
Soul 人群 15 到 25 岁占 78.3%二次元、文创、AI、NFT 全是关键词。
我们切片团队四十多个人,免费培训、免费教 AI、发视频还给钱
接下来 38 场,目标从 1 万人里赋能 10 个人,做成一人公司、超级个体,一起玩。
做副业的联系 4 号;
有项目、要进资源群或会员群的,私聊 2 号。
派对里能解决的尽量派对里解决,私下交流浪费彼此时间。
表达清楚,就不缺人;
坚持表达,机会会自己找上来。

View File

@@ -0,0 +1,270 @@
# 第115场一天改变可控的事先做
事业再好,家庭这一环不能省。
家和谐、有烟火气,人聚过来,钱才聚过来。
2026 年 3 月 4 日,上午 6:38。
第 115 场156 分钟;
场观 36974进房 484 人。
---
Soul 推荐机制最近改了一轮。
一开房只要有聊天,很容易就到 10 个人;
以前新号要等 10 分钟、20 分钟才推人,现在限制放开了,直接推。
6号怡然聊聊家庭和家族生意。
有人住平房,一年两档口 8000 块,楼下 80 平、楼上住 400和搭档一起
18 年底破产过一次,关店关过十几次,都是钱断了、家庭内耗,一吵就离家出走、去开店。
我接话:找伴侣很重要;
家里面和谐、有烟火气、能互相谦让、互相道歉,才容易聚人聚钱。
道歉如果不是心甘情愿的,要双倍还回去,不然负能量会 2 到 10 倍还回来。
风水不是玄的,两人关系好、身体好、厨房有烟火气,花都长得好,人跟钱才会聚过来。
同一人说在做「桂花糕社交」:无差别送,想链接的人就送桂花糕和茶叶,每月成本 1 万多,年底送得更多,回了一点本还没完全回本;
家里人说拿家里的钱做人情世故。
送礼要前置,你带头送,送完还要时不时提醒对方,不能送完就等别人想起你;
客人吃你嘴短,送糕点还会分享,比送烟只有一个人享受强。
他们看不到你的价值,你走是对的;
回来第一投两个月,一个景区店就做了 12 万营业额。
家庭比事业重要;
很多人搞着搞着忘了,生意好的时候觉得所有人该配合你,等你下滑或钱又出去,他们不这么认为。
要么一直怂,要么一直雄起,一直雄起不太可能,所以先把家里稳住。
一开始做任何事都非常孤独;
脱离原来的圈子、从零开始,没钱的时候千万别想着借钱维持,借钱是在害人害己。
房地产下行,谁还敢借;
越往下越损人脉,自己走出来、从头开始更好。
能把控的先做,不可控的少纠结。
---
一命二运三风水,四积阴德五读书,六名七相八敬神,九交贵人十养生。
越往上越不可控,命运不可控;
能控的是后面几条。
第十养生能控,身体好、精神好,贵人才愿意跟你合作;
敬神是信仰,内心有信仰别人更愿意合作;
名是心理暗示,相是视觉锤——见面第一眼就是脸,气色好别人就愿意跟你做。
把身体照顾好、家庭关系做好、有敬仰之心,前面几条才会顺;
大家老练 1 到 5其实 6 到 10 才是可控的。
南风小程序里的介绍要填完整,不该显示的让远志他们处理;
人家点一下有兴趣才能加到你微信。
南风说数据:每天发十七八条、二十条,账号几天、一星期就开单,一单纯利润好几百,专注的话月入过万;
5 点起来是因为 5 点才开始推流,精力分散就没那么理想。
听话照做、选对赛道、坚持,群里筛过很多人,亲戚朋友看你挣钱只看到钱,真让他执行做不到。
---
5 号做本地生活、家电维保,想从直播转短视频,在找编导。
同城看内容本身;
没做过编导不太建议自己做,要么怼流量、要么走关键字搜索。
编导和剪辑最好分开——编导是脑力活,想前三秒怎么抓、怎么拍、怎么配合;
剪辑是手动活想怎么剪得好看、SOP 怎么跑。
好的编导不会给你剪,两个岗;
日更成本高,编导加剪辑人工就出去了。
5 号说在聊一个编导,保底 1 万,对赌两月达标 5 万。
他要 30% 就做项目切割,比如你只有抖音一个板块,就切「抖音板块」给他 30%,不影响大盘;
马云也不是给财务总监整个阿里,是给淘宝、天猫、支付宝几个板块。
立个项、专门一块给他占比例,切割清楚就好。
6 号做人力资源咨询,国资委、山东企业面试 5060 人,教方法论、陪跑。
AI 能结合——拍三张脸加简历性格、MBTI、岗位匹配可以自动化人事做不了 AI 能做;
测完变成流量入口,测性格、顺便找工作,直接加到公司人事微信,比 Boss 高效。
我们公司自己开发的,拍三张脸就知道适不适合,再对岗位;
组 8 个人可能要筛 30 到 40 人,有这一套筛 10 个 20 个就够,损耗少一半,省一二十万。
个人定位做一次 2 万多,公司付,做完知道这个人大概多久会离开、跟岗位匹不匹配。
他们内部孵化了独立项目,线下沙龙获客,帮企业搞简历、性格、人岗匹配;
找 ENTJ、ENFP、ESTP 这类人去拓市场就行。
---
5 号麦先生做城市礼物,联系了几家商会,潮汕、成都、珠三角、武汉,做礼品袋定制、印刷要在仓库旁边;
鄂州园博园 7 天卖 2 万多,顺丰机场有可能成中部小义乌,政府在谈运营、拿流量换位置。
你动作做太多了,木木的小技工也是做甜品、好几家店,你俩可以私聊;
我只介绍业务、不挣这个钱,有信息消化掉就行。
9 号问:网红要把他的人放进我私域,把流量导走,怎么办?
你看中他什么?
他看中你什么?
你有客户、他能把流量变现,就两种——产品合作或流量合作。
产品合作:他提供产品,你运营、你维护,流量握在自己手上。
流量合作:你把流量给他,他运维,签协议分钱,最后一定被他拿走,但你挣到你那份。
不想被导走就产品合作,让他找人教你、你边做边看,后面你自己维护,不要让他的人维护。
招商为什么难做?
拉完皮条就没了;
用户到你手上,自己做运维、做服务,今年更偏这个方向。
江左做私域 AI 员工RPA 控电脑、加好友、群发、朋友圈、AI 评论发圈、防折叠、智能回复、分时建群,用豆包,数百到千把、全功能千把,代理几百、用户十几万。
个微风控和矩阵要解决;
公司化一个员工控四五台电脑、一台电脑五个微信,客户重要,你们找做私域渠道的合作会快。
---
Soul 给的流量又翻了二三十。
开派对这条线可以弄个 SOP告诉想开的人怎么开派对挣钱后端产品已经有了前面就是引流到小程序、捆绑 30 天,或者加自己微信自己拉群,一天三五个很正常,会累积。
派对里能解决的尽量派对里解决;
做副业联系 4 号,进资源群、会员群联系 2 号 3 号 4 号,备注来意。
发广告没人看,不如上麦分享。
家庭先于事业;
能把控的从养生、从关系、从名字和面相做起,再谈命运。

View File

@@ -0,0 +1,324 @@
# 第116场钱是大风刮来的如何接住
真正赚钱的,别人为什么要拿出来分享?
有些连说都不能说。
你看到的明面生意,坐下来算数据,很多根本不挣钱;
挣钱的在别处。
2026 年 3 月 5 日,上午 6:25。
第 116 场154 分钟;
进房 418 人。
---
有人问量化交易、AI 能不能帮着挣钱。
量化本质上是策略厉害,多因子轮动、你的经验厉害,不是 AI 厉害;
AI 只是帮你执行、方便理解。
懂的自然懂,不挣钱的用也没用,源码都公开了。
没 100 万别跑,基础 100 万都没有,手续费都跑不赢。
炒了快 20 年,这东西作用不大;
想靠自动交易发财,不可能。
很多程序员幻想搞个量化工具就能挣钱,不是的。
策略和灵魂才重要,工具只是加速。
---
我炒大 A 很少碰,一年花不了两三个小时;
买外汇玩一玩,伊朗的跌多了就买 10 万块,博个输赢,跟当年买特朗普币一样,有就有没有就算。
昨天场上有人做家电维修、桂花糕、人力资源、私域操盘、AI 数字员工,一个板块下面很多细分。
人力资源也一样:有高端猎头挖连锁门店运营总、年薪 60 万跳槽变 100 万;
有人事邀约一天用 AI 邀约 50 个 100 个、一个 10 块;
有高级人才鉴定,测你多久会离职、跟岗位匹不匹配。
3 号做猎头,问能不能用 AI 筛简历——应届生加 AI 可以筛,但高端岗位要深挖一个人脑子里想什么,不然叫过来也没用。
大厂出来的,我用过好几个阿里新浪抖音百度;
除非想裁员,比如 30 人团队想减掉七八个,找一个大厂的人来,大家不适应就会走,前两年就这么干过。
不成熟的团队丢一个 ESTJ 进去,也容易散。
6 号问灰的。
第一桶金很多人是灰的;
慢慢再转正。
桂花糕、连锁门店利润很薄,要让利、赋能大、成本重,后端没别的东西就挣不到。
我自己也赚过灰的07 年做电竞11 年拿德国兄弟的魔兽外挂代理,很多人不会英文不会德语,用谷歌翻译一点点聊。
进价 18 块,卖 68 一块,工作室 50 台 100 台机子,月费 6000 到 1 万续费;
拉了个群全是工作室和想做工作室的人。
那一年 400 多万流水,利润 70% 以上。
后来暴雪告了作者,作者不做了;
年卡终身卡还能用,等于 0 成本又卖了一年,又赚了一倍。
灰的赚过就赚过现在法律完善了17 年网易告过360 多万18 万摆平。
本质是渠道生意、做得早、又稀缺;
现在卷、更新快、工作室挣不到钱,卖工具的人也难。
场上有人说 Soul、讯飞输入法算不算灰——贩卖个人信息、打字就进抖音流量池推精准视频本质也是灰的只是藏得深。
欢鹿电竞开网吧挣的不是加盟费3 个点覆盖不了成本;
挣的是云机的钱、算力补贴。
谷子店 Green Party 那种22 年从湖南湖北来厦门开 4 家 5 家现在到处开15 到 25 岁年轻人、IP 动漫,净利润率比商场平均高很多,能做到五六十;
品牌线下很多是赚吆喝。
今年不适合扩张;
更多是赋能、超级个体、阿米巴,让优秀的人自己担一部分成本拿更高分成。
---
咨询行业下滑,企业没钱了;
有钱的做细节做实效,没到请咨询那一步。
查信息太容易GPT 一搜就有。
但专业的人加精准经验、加资源,还是有用的。
有个北京的大神给我做规划定位,股东付了 10 万,聊两小时很受益;
有用,但价格高。
4 号做职业规划,六七千一单,北上广深客户;
一次一两个小时,后续微信交流。
从价值看,不少人薪酬能提升 15% 到 20%
有的转行成功,有的掉坑,看人、看执行力、看运气。
深圳共享人才、杭州好做;
厦门人才洼地,适合养老。
北京不少脑子想的是搞点钱就跑,骗投资人;
火云邪神卖鞋 29 块 9、成本 70圈了一两亿鞋厂亏五六亿、几千人失业定性诈骗进去了。
投资环境不好,我只投内部孵化、知根知底、有确定性数据的;
对外一分钱不投。
老婆被戏称鼓浪屿包租婆、投资失败率百分百INFJ 共情一打钱就遇跑路;
但也有一次 13 年 14 年给一个刚离婚的朋友 2 万、房子给他住,那人记到现在,去年发家了,追了 12 年一起成立金融公司,直接起飞——所以有些看起来是坑,以后也不是坑。
家庭的事:一命二运三风水,四积阴德五读书,六名七相八敬神,九交贵人十养生。
第十是养生,身体和身边人好了才能遇贵人;
能把控的就是身体、家庭和睦。
起势的时候家里花开了、厨房有烟火气、两个人互相谦让、有矛盾立即认错。
一辈子分母足够大,分子就那样,拉平就没事。
储蓄罐多装美好,矛盾大的时候拿出来消费一下。
4 号 23 年进 ICU五病齐发差点没了
之后整个人变了,特别在意饮食健康、家庭底层。
选伴侣是人生最重要的事,比赚钱比事业都重要;
女人是家庭最好的风水。
---
Soul 上开派对,流量很好;
肯开的人按 123 步骤执行、有点内容,很容易拿到一两万人。
我都公开,新号也能搞四五百人,方法论 12345 照着做就行。
一两百人总能吧?
一个月就几千人,做啥生意不能做。
地摊平台SM、厚朴 2000 多摊,和小伙伴一起,海辰储能投了;
熬了 7 年亏了 5 年,翔安房子都抵押过。
做的是摊位出租、餐车租给摊主ZF 给地、解决就业;
SM 地铁口 900 块、一天人流 3 万要摇号,夜市 2000 到 6000。
软二科创园想过做夜市、9 块 9 直播卖饭碾压美团二三十块,成本压到极致。
5 号做环保规划、ESG、科技项目申报问 AI 怎么结合、智能体怎么变现。
传统模式是认识 A 介绍 BCD
信任背书重,很难线上化。
智能体只能做中间流程、引流对接;
先到小程序里让人推、再链接到你,比较有机会。
6 号做自媒体、帮中医馆导流,客资 80 到 120
要么先把量做上去、一天导 10 个 20 个再谈合作,要么立个项一起投预算、按比例分、绑深一点。
体量足够大,对方才愿意往深了聊。
每天 6 点到 9 点,四百到六百人;
一个月一万个人,碰不到一个合适的合作者?
能碰到几个。
五个挑一个,事就成了。
不然几万块请一个人,可能没结果,学会了有结果还撬你项目。
做副业、做切片的联系管理123 都可以;
有资源群、副业群、会员群。
今年 4 到 6 月 all in 电竞,做了 19 年想发力;
网吧回本两年,去年 Q4 全国 21 万家,资本没地方去只能往这儿怼。
有开网吧的、做游戏主播的、私域操盘手、AI 研发有作品的,可以来聊。
钱是大风刮来的——做着做着到一定度,就有人来链接;
身体和家庭才是最大的本钱。

View File

@@ -0,0 +1,59 @@
# 第117场流水百万挣八千你还干不干
流水百万挣八千,不是失败,是验证。
2026 年 3 月 6 日,上午 6:31。
第 117 场154 分钟;场观 51602进房 503 人。
---
点卡进货 0.97 卖 0.98,流水 100 万挣 8000利润薄到很多人看不上。
但这一单验证了两件事:高频出手能把随机性压成稳定现金流;机制写死、风控设阈值,情绪来了动作不变形。
点卡的本质不是暴利而是周转,周转快就能用样本量把随机性压成稳定现金流。
风控是阈值,阈值过线就触发,退款、冻结、封店一起上;通道要备份、账号要备份、客服要备份,最坏情况要提前写成流程。
规则写在前面,执行放在中间,复盘放在后面。
先把出局概率压到最低,再谈好运。
---
运气不是等来的,是设计出来的。
设计分三层,次序不能乱:第一层先不出局,第二层进场被选,第三层接住放大。
第一层,不出局。现金流安全垫、健康、可替代收入源、不过度负债、避免单点依赖,这是反脆弱底盘。不出局比赌对更重要,能活着才有机会等到下一次风口。点卡的风控逻辑就是这一层:最坏情况先有答案,真遇到就按流程走,而不是临场靠感觉硬扛。情绪一上来动作就变形,变形就会出局,所以机制要写在前面。
第二层,进场被选。把自己放进高密度机会场,这场的机会场是派对房,一场 300600 人进房,偶尔 700 人,两小时相当于一场线上会展;固定高频出手,每周发内容、约人、做试单,频率比灵感重要,把出手做成日历事件别等情绪来带路,运气偏爱样本量;做可被选择的标准件,标签写清楚、解决什么问题服务谁怎么交付、给出可验证证据比如案例数据作品,入口做短一步就能合作,入口越短被选中的概率越高;用降低他人风险影响选择,报价结构、交付边界、里程碑、退款保底、试用试单、对赌条款写死,别人选你本质是在控风险,这一场最直接的例子是把「搞不到流量退款」和「内部价 365」写成规则让对方先敢试再谈放大。
第三层,接住放大。建立信任资产,信任等于持续一致加可预测交付加公开证据,信任越厚越容易被默认选择,能交付就交付不能交付就提前说清楚边界;把人脉当路由器不是收藏品,关键不是认识多少人而是能把价值在网络里路由起来,资源对接、信息过滤、机会撮合,越像基础设施越常被想起,派对房的价值是把需求和供给撮合到能落地的那 3%5%;做有杠杆的表达,内容作品产品方法论都是杠杆,杠杆越大别人看到你的概率越高,把每次好运都沉淀成可复用素材;把恐惧决策从系统里剔除,预算上限、止损线、决策清单先写出来,机制的意义是让最坏情况先有答案;把不确定变成可选项,少做不可逆的大赌,多做小成本可撤退上行无限的尝试,多渠道多产品雏形多合作试单,机会是试出来的不是等出来的;选正反馈环境,赛道组织伙伴是否奖励正确行为,环境惩罚努力就别硬扛;把好运变复利,沉淀 SOP、包装案例、提炼方法论、产品化渠道化把一次性好运变成持续性能力。
---
先不出局,再进场被选,再接住放大;次序乱了,运气接不住。
把风控写成流程,把分配写死在合同里,把出手做成日历事件。
---
合作的核心不是热情,是把风险和分配写死。
钱从哪里来、花到哪里去、挣回来怎么分,不写清楚必然翻车。
钱打公账、明码标价、财务监管,是降低内耗的最短路径;没有预算的项目最容易崩,谁请客谁垫钱说不清就变成欠账。
这一场聊链接合作、派对流量、教培,核心都是同一套:把价值写清楚、把流程写清楚、把价格写清楚。
派对里跑项目,装龙虾和代充都验证了同一件事:标准件、低摩擦入口、降低他人风险,把价值写清楚把流程写清楚把价格写清楚,对方缺利润就会主动找你。
想做副业、做切片的,联系管理就行,发就有钱,流程跑通就持续给。
---
运气等于在场频率乘可被选择,再除以出局风险。
流水百万挣八千,验证的是底盘稳;底盘稳了,才有资格谈放大。

View File

@@ -0,0 +1,131 @@
# 第118场运气是选出来的不是等出来的
运气是选择叠加出来的,不是求来的。
2026 年 3 月 7 日,上午 6:39。
第 118 场190 分钟;场观 74873进房 586 人。
---
人无非在做很多选择,你的选择可控,别人的选择你不可控。
运气,就是你的选择叠加了别人的选择,再加上天气、环境、事件这些外在因素,三重叠加等于运气。
比如招人,对方选不选你来面试你不可控,但你选不选他、看不看得懂简历,你可控。
看懂简历你就邀约,这是可控,他来了,能力很强、跟公司很匹配,那是他的选择,你控制不了,那就是运气。
运气好,就是好的人、好的事、好的环境同时选了你,所以提升运气不是意念,是改磁场。
改磁场靠行动,不靠想,想不动。
---
怎么提升?三条主径:提升影响力,提升识别能力,提升圈子。
第一条,提升影响力,多说多曝光,更多人知道你,机会自然多,被选中的概率自然高。
最简单的动作,每天发一条朋友圈,坚持发。
开派对就是提升曝光量,这场每天 300700 人进房,场观到过 5 万多,每月一两万人在听 1015 分钟,这就是在堆曝光。
第二条,提升识别能力,不踏坑,别在错的人、错的事上浪费机会。
看不懂就不碰,看不懂就是不确定,不确定就别决策。
每天跟一个高质量的人交流,或者每天看一个跟自己专业相关的视频、一本书,做笔记,都是在提升识别力。
第三条,提升圈子,圈子决定你的格局和机会池。
圈子越小越精,越值钱,全国电竞圈子核心就 8 个人,最大的五家天猫游戏老板都在里面,谁要联系谁,发条微信就行。
入圈的前提是你有分量、有筹码,不是求来的,是别人选你。
---
三条主径往下拆,就是十二个可执行动作。
一、找高密度机会场机会最大的地方才有运气。AI 是当前最大的机会场,派对名加 AI聊事跟 AI 相关,公司全用 AI 提效,你 all in 进去,机会自然多。
二、高频出手,样本足够多,运气才会到你这。派对两三个小时快速撮合 a、b、c、d、e能聊到一块的拉群直接开干快速试错、快速链接高频才有叠加。
三、做可被选择的标准件,让别人选你而不是你求人。做电竞、做私域,能带给电商公司什么、带给游戏公司什么,非常清楚,每天在展示这个,曝光够了,是被选择。
四、降低别人的风险别人敢选你才选你。做切片不用你花钱还给你钱、培训、分钱全部降低风险2000 块就能做最小闭环,不用租办公室、不用凑十万块。
五、建立信任,言行一致、持续叠加,信任才会厚。有场地、有团队、有持续在做的事,一年两年都在做同一件事,别人更愿意跟你合作。
六、把人脉当路由器,不是收藏品。不是认识你就放着,是你需要他、他需要你,委托他去调配资源,利益分清楚。
七、做有杠杆的表达,放大你的声音。派对里说一遍,录下来写成文章发小程序,再发朋友圈,再让粉丝分发赚钱,一次表达撬动几千几万人。
八、剔除恐惧决策,看不懂、害怕的事,不要决策。量化为什么容易赢?它只在可控数据模型底下做最小闭环,不靠感觉,不靠赌。
九、永远在牌桌上,不要出局。出局就是破产、没钱参与,控制好预算、跑好最小单位模型,一直在牌桌上,才能等到下一波运气。
十、把不确定变成可选项,期权思维。炒股方法很多,看不懂就是不确定,只做确定的事,比如 11 点半到 1 点放消息的时间窗口,看得懂就做,看不懂不碰。
十一、做正反馈的事,小成功推动大成功。小成功获得小自信,中成功获得中自信,螺旋上升,力所能及不断叠加。
十二、把好运变成复利,流程化、案例化、方法论化。当这些变成体系、框架、流程,运气就不是一次性的,而是可以复利的。
---
这一场有人问正财跟偏财的区别。
正财的人想的是投产比、解决市场需求、成本多少、最坏情况是什么、稳定向上。
偏财的人想的是投机、all in 搏杀、多少回报多少比例、靠运气挣钱、大起大落。
正财是稳定现金流、可复制模型,偏财是看懂窗口、快进快出,本质都是同一套,只是你心里更偏向哪一种。
项目立项、融资、分钱也一样:一开始不投钱是浅合作,一投钱就有很多卡点。没有统一预算,谁付饭钱、谁付车钱都会吵。把钱交公账、统一分配,大家用同一笔预算做事,才容易推进。能力再强,不认同就别合作;占多少比例按投多少钱算,不要说能力抵股。
---
**运气是留给有准备的人:首先你得拥有这个东西,并且不断在曝光。**
拆迁砸到你头上,首先你得是村里的、有户口,你才有资格被砸中。
想被选中,就得先让自己变成可被选中的标准件,然后在高密度机会场里高频出现。
---
这一场还聊了 3D 打印和游戏代充。
3D 打印那位穿人字拖的潮汕人,模式很简洁:跟网吧合作,把机器丢到网吧,跟网吧分成,和充电宝逻辑一样,再提供设计稿。游戏代充分白的和灰的,白的赚一个点,灰的偏财,你要自己识别选哪条路。
开派对想有结果,三点把控好就行:第一主题,取个好标题;第二找你最舒服的聊天形式,不用管别人怎么说;第三有结果路径,聊这么久是给会所赋能、门店赋能还是业务赋能,得能闭环。
想做副业、做切片的,联系管理就行,有电脑、能坚持的可以先跑一遍流程,发就有钱。
---
有人问亲戚想来学习、入行,该怎么带。
我的建议是别带。带亲戚风险极大:他做不好会怪你,要你介绍工作、出了问题也算在你头上,消耗你时间还会传你坏话。推荐都不要推荐,顶多指个路——哪个方向工资高、哪家公司发 1.5 倍,你自己去应聘,别说认识我。没有利益关联的亲戚一律不碰,过好自己,能给你赋能的才值得花时间。
人脉当路由器用做残疾人的电竞赛事我出预算、对方出人和场地600 个残疾人基地当场报名,我把负责人当路由器去调配资源,我不用亲自对接每一个人,节奏和 SOP 列清楚,发一条朋友圈就能推进,结果自然来。这是运气,也是你把自己变成可被选择、又能降低别人风险之后,别人选你的结果。
---
提升运气没有玄学,就是清单化、可执行。
每天发一条朋友圈,每天见一个有价值的人或看一个专业相关视频并做笔记,每天在机会场里露脸。派对控制在 3050 人在线最舒服,再往上平台会推你刷礼物、做任务,那是给平台打工;不贪那个数,每天三五百人进房、一两万人能听 1015 分钟,曝光已经够用。
有决心开派对的,可以给自己设他律:一天没开就发 100 块红包到群里20 天坚持下来,再谈流量和变现。自律的起点往往是他律。
场上有人分享过减肥 80 斤:每天跳郑多燕 10 分钟、骑 7 公里车、晚上 7 点后吃饭,把动作收到两个最有效的,其余砍掉,再拉个群、一天没掉称就发 666 红包,用他律逼自己。结果一样,动作越少越能坚持。做曝光、做派对也一样,先选一两个可执行的动作,跑出正反馈再叠加。
圈子要缩,不能一直大而泛。从大圈缩到小圈,像吃鸡跑毒,最后在一个小圈里都是对的人;全国电竞核心就 8 个人,游戏厅投资圈也就十几二十人,找到那个能跟你直接合作的一两个人就够了,不需要认识所有人。
---
这一场聊 3D 打印、游戏代充、正财偏财,本质都是同一套:你在什么场、用什么规则、和谁一起选出来的结果。
想做副业、做切片的,联系管理就行,发就有钱。
---
运气可以改变,改变靠做,不靠想。

View File

@@ -0,0 +1,121 @@
# 第119场开派对的初心是早上不影响老婆睡觉
早起不是为了开派对,早起是为了不吵老婆睡觉。
2026 年 3 月 8 日。
第 119 场154 分钟;场观 50692进房 446 人。
---
平常早上 4 点起来,复盘、写文章、写公告,干完活到 6 点6 点开派对,纯粹聊天,两三个小时。
为什么不是 5 点把老婆挖起来聊聊天、遛遛狗?因为吵她睡觉。
初衷是不吵老婆,开派对核心就这个,不然平常就遛遛狗吵吵她。
所以去隔壁书房,自己聊、跟大家聊,聊完老婆也醒了,家里也舒服。
这个初心自然而然形成了风格:娱乐型社交,允许说废话,不刻意做体系。
才来 Soul 四个月开派对三个半月119 场,七八个管理、几十人做切片、副业群、小程序,全是自然形成的。
千里宝宝问我勤快吗?勤快?懒,懒得半死,每天太闲了,几乎都在睡觉。
早上 11 点或下午 3 点才会客,一周排不了两个面试,平常公司泡茶、睡觉,其他时间都是大家主动拜访的多。
懒是人的本性,谁想勤快?
但懒有懒的活法:动作足够简单、有利可图、正反馈,就能坐得住。
开派对 30 秒就开7 个手机5 个安卓备用号,进房间直接开,不纠结取名、不纠结装修,动作足够简单。
发切片就给钱,发瞬间就有收益,获客资再给钱,有利可图;谁受益谁坚持,正反馈来了就能坐得住。
九麦问我刚 ICU 出来没多久一年多了3 月 20 号进的,五病齐发,差 5 分钟就没命,又救回来了;活着要留下点什么,留点内容在互联网上,万一下次回不来了就没了。
走过鬼门关之后,想的角度不一样,更多是顺着自己喜好做事,顺便留下点东西,所以坚持写书、写日记、天天哔哔,尽可能自然来的事。
初心不一样,结果就不一样。
---
早起先把活干完再开派对,不吵家人。
动作足够简单30 秒能开就别纠结取名装修。
有利可图、正反馈:谁受益谁坚持,发就给钱。
开派对就是筛选:能坚持发 7 天、14 天的人再去找管理。
做好自己,不消耗能量,闲聊留给闲的时候。
---
有人问 Soul 的业务模型。
开派对多分享,很多人来分享最赚钱的一个月,写成文章,派对几小时生产内容;几十人想做切片的在群里,给钱做切片,分发到瞬间引流;一块钱一节浓缩进小程序,谁分享谁拿 90% 收益30 天锁定;后端推流业务、撮合项目、招人,就这样。
等于把抖音成熟的模式在 Soul 上做一遍,抖音 17 年就开始做18 年起飞整个生命周期都参与了现在流量很差Soul 还有机会。
光派对每月 60100 万曝光,一两万人进房,捞几个客户很容易;分发是 20100 倍的曝光量。
但我说 Soul 现在都是花钱的,不是靠这个挣钱,主要是让管理和参与的人能看到钱、参与进来;想做副业、做切片的,联系管理就行,发就有钱,流程跑通就持续给。
有人问切片是什么形式?一块钱在哪买?
想做副业的人联系管理,副业只干一件事:把视频发到瞬间,就给钱,做多少动作给多少钱;别人看了瞬间私聊问内容在哪,切片只有 30 秒到 8 分钟理解不深所以后端做了小程序3 小时浓缩成一块钱30 秒能看完付一块钱90% 收益归分享的人30 天锁定,后续消费也跟他绑定。
以前 3 小时派对想提取 1030 个主题,得花一个礼拜剪,现在 AI 半小时能剪 1030 个,发多容易,发就给钱。
我说开派对本身就是筛选:能开派对的人再来,能坚持发视频 7 天、14 天的人再去找管理,这是基础筛选;如果对方不能跟你合作、跟你没关系,就不要闲聊,除非很闲;每天都要做这动作时,尽可能不消耗自己能量,做好自己就行。
核心就两个字:筛选。
---
阿满接麦,说刷着牙在听,想听听业务逻辑,能不能代入一下自己的赛道。
阿满主业做贷款,兼职做保险,又在炒股,都绕着金融走。
我说金融这块有投资一家助贷公司,可以讲一讲它跟 AI 怎么结合:金融最缺客户,后端 30 人,沉淀 12 年,跑银行对接、助贷放款;前端把 AI 手机分发给银行职员、法务、财务对方只要把客户加到微信AI 来点赞、评论、转发、激活,中台 30 人负责线下成交,分钱比例写死在流程里,跳单约束住,就不会出事。
厦门最大的助贷公司干了二十几年,想并它,并不动,因为跑的数据比他们获客和投产高三倍。
阿满问有没有合作机会我说可以找叶总聊看在你城市能不能再搞一个联系方式分段发或者搜卡若创业派对小程序点右上角头像AI 会自动加你。
阿满问能不能把金融 AI 获客体系嫁接到保险,成本大概多少?
成本很重,去年 7 月到现在预算花了一百七十几万,总预算二百六十几万,打磨体系不是开玩笑的;但前端的人几十块钱就能参与,挣几百可能上万,后端磨了大半年才摸出来,前端就是丢个手机,发就给钱。
有人问,还记得来时路吗?还不是很强的时候,怎么建立信任?
直接去做,直接执行,没有别的。
早年卖游戏外挂,加工作室群,天天加、天天发、天天聊,人家就来找你买;买着买着发现利润可以,就去找全世界最好的渠道,发邮件发三个月,不会英文用谷歌翻译发德文,终于拿下德国总代,一分钱没花,靠认真做事、长期给别人带来价值;那一年 11 年还是 12 年,卖了 430 多万;进价 18 块,卖 68 块,工作室 50 台 100 台,月费 6000 到 1 万。
信任不是求来的,是做出来的;门槛是自己定的,后端产品能不能跟你融合,看你怎么设计包装、解决目标人群的需求。
---
有人分享深圳电工开房24 小时房,流量高峰主持,平时几个管理顶,场观经常 100 人,各行业大佬刷礼物,但还没找到变现;我说这种房价值低,因为人群没筛选,报来报去没有筛选,钱在筛选出来的人身上;李亚鹏 33 万人众筹 500 多万,最终 2300 多万是几个大佬 500 万、1000 万砸的,筛选出来的优秀的人用业务体量和体系解决需求、赚应得的钱,顺便给李亚鹏借力;你要众生平等解决所有人需求,不可能都挣到钱,筛选才能出钱出利润。
九麦问学国学、易经怎么学的,试了几次没学成。
我说方法很简单:先看序和说明,再看目录,找最感兴趣的章节,把那几章看完,再快速扫整本;曾仕强讲得很有节奏感,两小时能看完七七八八;国学、易经是为了向内求、了解自己,才能驾驭 AI而不是被 AI 控制。
有人问睡眠不好怎么办,冥想、呼吸法都试了没用。
想睡好觉,先把事放下,每天放下一件事,不要想,就放下;做减法一段时间,睡眠就好;你都快爆炸了还造个钟把自己变炸弹?要循序渐进让身体习惯,我现在一躺 30 秒就睡着,前一句跟老婆聊天,后一句就睡了。
人智力最高的时候是起床之后两小时4 点起床6 点开派对,脑子刚好活。
我说 Soul 房间等级看右上角鸽子3 级能设 2 个管理4 级能设 3 个没投流Soul 现在 1000 曝光 610 块,算下来派对到微信 2030 块进一个人;广点通可以投 Soul 流量了,要审核,商业化刚开始。
上周六 700 多人,上周曝光量比上上周又涨了 30%,光上周就 20 多万快 30 万。
做副业的、做切片的,联系 2 号 3 号管理;想做金融的,联系 7 号;有靠谱项目想写进电子书的,来派对分享;小程序搜卡若创业派对,内容都有,想合作、想对接,点头像 AI 会加你。
---
初衷是不吵老婆,开派对核心就这个。

View File

@@ -0,0 +1,217 @@
# 第120场发视频就有钱这才是最低门槛的AI副业
发朋友圈不赚钱,发视频就有钱,这才叫副业。
2026 年 3 月 10 日,上午 6:50。
第 120 场165 分钟。
---
有人担心号被封,不敢发切片,不敢发任何东西。
我说最该考虑的不是封号,是这号能不能把钱发出来。
在 Soul 上买号发、发完被封再买号发,不是重点,重点是算投产比:一个视频能挣 300 还是 3000能不能覆盖 30 块一个号的成本。
一个号一天发 30 个视频,哪怕只挣 300 块,一个视频 10 块钱,号钱早回来了。
副业的第一原则,从来不是“安全”,是“值不值得”。
发视频就有钱,是因为后台已经把工作流打磨好了。
---
现在的派对,每天 23 小时聊天智能纪要、AI 提取、AI 切片20 分钟能把 3 小时的内容拆成 1030 条主题。
素材库里有现成的标题、文案、封面,切片发到瞬间和抖音、小红书、视频号,发一条有一条的钱。
你不需要研究算法、不需要研究剪辑、不需要研究文案,只需要会一件事:把我们给你的片子发出去。
副业的动作简单成这样,只有两种人做不到:一种是完全不信,一种是完全不动。
想做副业、做切片的,联系管理就行,发就有钱,流程跑通就持续给。
---
**副业要想长久,顺序只有三个:先能手动挣钱,再用 AI 放大,再想全自动。**
只在头脑里想 AI 副业的,永远只会买课;
能靠自己手动赚到第一块钱的AI 只是在帮你把 1 变成 100
真正的自动,是把工作流写清楚,让机器照着跑,而不是你什么都不做。
---
现在的切片副业,本质上就是帮别人做“分发”。
我们在前端开派对、聊项目、拆逻辑,把赚钱的方法讲给你听;
中台用 AI 把内容切成 1030 条短视频,自动加字幕、自动加封面、自动生成标题;
你在后端只做一件最简单的事:发视频。
发到瞬间、发到抖音、发到小红书、发到视频号,平台越多越好。
一条视频 500 播放,跟 100 条视频 5 万播放,结果不一样,钱也不一样。
副业不是多聪明,是多发、多试、多坚持。
---
很多人说教你赚钱的人都是在赚你的钱,这句话没错,但只说了一半。
更完整的是:**你挣得越多,他才有得赚,这才叫值得的关系。**
你想白嫖,他想白嫖,最后谁也赚不到钱。
我们现在的模式是:副业的人不投钱,只投时间;
我们出 AI、出工作流、出素材、出小程序你发切片就能拿到客资、拿到收益。
一开始不给你 AI是因为看你能不能连续发 37 天连这个动作都做不到AI 给你也没用。
副业不是考智商,是考执行力。
---
中间有小伙伴上麦问AI 这个世界很挣钱吗?
我说 AI 不决定你挣不挣钱,它只是效率更高的一台电脑。
以前是 Word、五笔、Excel现在多了 Cursor、小龙虾、TRAE本质没变该挣钱的人还是挣钱不该挣钱的人只是多了新的借口。
真正决定收入的,是你用它来放大的是什么工作流。
你原来就能稳稳挣 1 块钱AI 能帮你把这个 1 放大成 100
你原来 0都不知道自己能做什么AI 只能放大你的迷茫。
---
这场我们聊了很久的小龙虾。
营销号在抖音上天天吹:装完小龙虾一夜暴富、全自动印钞,背后真正赚钱的是两拨人——帮你装小龙虾的,和卖 API TOKEN 的。
我们算过一笔账:认真跑小龙虾,一天 TOKEN 消耗 1000 多块,一个开发一个月就要烧掉六七千甚至一万。
它背后是十几个研发在磨模型,几个人在磨话术、磨流程,还有人盯着平台接口、盯着风控,几十个人一起,才做出一个你看起来只要“点一下就行”的工具。
所以对普通人来说,真正适合的不是去做下一个小龙虾,而是接入已经成熟的小龙虾工作流。
你有苹果电脑,会科学上网,能坚持发片,就可以接入这一条流水线。
---
这一场还有个重点:选人比选工具重要。
做副业加入团队的门槛很简单:
会科学上网;
有一台苹果电脑或者 Mac mini
能连续发几天视频不喊累。
其他的 AI、工作流、脚本、剪辑、分发我们都已经跑顺了。
你要做的,就是把精力从“学工具”挪到“跑动作”上:每天发多少条、发到多少平台、哪种标题点击高、哪种留资多。
你只要手动能挣一块钱,用 AI 放大就是 100 块,乘的是倍数,不是奇迹。
---
中间我们也聊到自信心和位置感。
有小伙伴说,自己总觉得不行,别人让做什么,第一反应就是“我不行”。
我说自信不是靠喊口号,是靠一次次完成小任务堆上来的——
今天发 3 条视频,明天发 5 条,下周发满 30 条,看到后台真实到账,这种自信最牢。
还有人说自己样样都懂一点、样样都不精,我说没关系,你只要知道自己适合做什么就够了。
适合做链接的,就去当管理、当中台,把副业的人、项目方、技术方串起来;
适合做执行的,就老老实实发视频、剪片、跑数据;
适合做项目的,就把自己的项目讲清楚,让别人帮你分发、帮你切片、帮你获客。
每个人站对位置,副业这条线就跑得很顺。
---
**副业的本质不是多一份工作,是给你的时间找到第二种变现路径。**
你以前刷视频只是打发时间,现在刷完顺手发一下,就能给自己多一份现金流。
你以前只会在群里聊天,现在聊完就能进素材库,被切成几十条片子,帮你引流、帮你找客户。
你以前觉得 AI 离自己很远,现在只要记住一句话:
发视频就有钱,这才是最低门槛的 AI 副业。
---
这一场还有两个我很看重的案例。
一个是残疾人基地600 个残疾人,一开始一天只能剪两个视频,只能做最基础的美羊剪辑。
接入 AI 工作流之后,我们的目标是先把他们提效到一天 200 条,再往上冲到 1000 条。
他们不需要懂 AI 的底层,只需要按流程点按钮:导入原始视频、等待自动切片、检查一遍、点击分发。
对他们来说,这是一份稳定工资加社保公积金的全职工作;
对我们来说,是一条稳定的产能管线,把每天派对 1030 个主题变成几千条可以全网铺开的内容。
人效一旦被 AI 放大,副业就从“零工模式”变成了“流水线模式”。
另一个是跨境项目,几万个小红书账号,准备做系统化的分发。
前端是海外设美、海外仓、商学院、品牌出海赋能这些主题,后端是统一的客服和成交链路。
账号矩阵本身不神秘,真正关键的是有没有一套统一的内容结构和分发节奏。
我们现在做的,就是把派对里的实战内容、复盘、案例、坑位,全部做成“基因胶囊”,丢给小龙虾去跑。
一个账号每天发 5 条1 万个账号就是 5 万条,这样的覆盖密度是不可能靠人力长期硬撑的。
你要做的也不是搭出这一整套系统,而是选一条最适合你的接入口——
是单纯发切片拿现金,还是接客户做服务,还是带团队做管理。
---
如果你现在就想开始120 场可以给你一条最小路径。
第一步,认领一个动作:每天发 10 条视频,不管在哪个平台。
第二步,坚持 7 天,把所有“今天有点累”“明天再说”的借口全部写下来,扔掉。
第三步,和管理对齐:你是只拿发片的钱,还是想要客资,还是想要后端的服务学习和执行。
第四步,学会看两组数字:播放量和留资量,明白哪种标题、哪种封面、哪种话题更容易带来咨询。
第五步,当你能稳定每天发 30 条、每周录入多少条客资都心里有数的时候,再谈 AI 升级和小龙虾接入。
这条路径没有任何玄学,只有动作和复盘。
---
很多人以为副业是多开一个工作窗口120 场聊下来,我更愿意把副业看成一块“时间资产”。
你把刷视频、聊天、碎片时间,全部换成一个个可以被记录、被切片、被分发的内容片段,它就从纯消费变成了生产。
你把原来在群里白聊的项目、行业经验、踩坑故事,拿来在派对里讲一遍,再让几十个人帮你剪成视频、发出去,它就从一对一变成了一对多。
你把原来只敢想、不敢试的那些小项目,拿到派对上过一遍“众筹评审”,有人能接单、有人能投钱,你就少走很多弯路。
副业真正稀缺的不是机会,而是愿意连续做 100 场验证的那份笃定。
我们已经开到第 120 场了,流程一轮一轮迭代,你只要在这个流程里找对位置,就能让时间多一条变现通道。
发视频就有钱,这才是最低门槛的 AI 副业,也是这一场想留给你的东西。

56
Gitea同步说明.md Normal file
View File

@@ -0,0 +1,56 @@
# 《一场soul的创业实验》→ Gitea 同步说明
**Gitea 与 GitHub 同路径**`fnvtk/Mycontent`
**Gitea 地址**<http://open.quwanzhi.com:3000/fnvtk/Mycontent>
---
## 一、首次使用(若 Gitea 上还没有本仓库)
1. 打开 <http://open.quwanzhi.com:3000>,登录 fnvtk 账号。
2. 点击「新建仓库」。
3. **仓库名称**填:`Mycontent`(与 GitHub 一致)。
4. 描述可填:`一场soul的创业实验 · 与 GitHub fnvtk/Mycontent 同步`
5. 创建后**不要**勾选「使用自述文件初始化」,保持空仓库。
6. 在本项目根目录执行首次推送(见下一节)。
---
## 二、有更新时自动上传到 Gitea
在项目根目录执行:
```bash
bash scripts/gitea_sync.sh
```
脚本会:如有未提交变更则先提交,再推送到 `gitea` 远程的 `main` 分支。
**外网环境**(需代理时)可先设置再执行:
```bash
export GITEA_HTTP_PROXY=http://127.0.0.1:7897
bash scripts/gitea_sync.sh
```
---
## 三、本机已配置的远程
| 远程名 | 地址 | 说明 |
|:---|:---|:---|
| origin | https://github.com/fnvtk/Mycontent.git | GitHub 源 |
| gitea | http://fnvtk:****@open.quwanzhi.com:3000/fnvtk/Mycontent.git | Gitea 备份 |
本仓库的 gitea 远程已使用与卡若AI 相同的 Gitea Token见卡若AI 的 `git remote get-url gitea`),无需再改。若 Gitea 上尚未创建 **Mycontent** 仓库,请先打开 http://open.quwanzhi.com:3000 → 新建仓库,名称填 **Mycontent**,再执行 `git push gitea main`
---
## 四、同时推送到 GitHub 和 Gitea
```bash
git push origin main
bash scripts/gitea_sync.sh
```
或先提交后分别推送:`git push origin main && git push gitea main`

View File

@@ -1,30 +0,0 @@
# AI phone branding
*Automatically synced with your [v0.app](https://v0.app) deployments*
[![Deployed on Vercel](https://img.shields.io/badge/Deployed%20on-Vercel-black?style=for-the-badge&logo=vercel)](https://vercel.com/fnvtks-projects/v0--ap)
[![Built with v0](https://img.shields.io/badge/Built%20with-v0.app-black?style=for-the-badge)](https://v0.app/chat/tPF15XbLAKD)
## Overview
This repository will stay in sync with your deployed chats on [v0.app](https://v0.app).
Any changes you make to your deployed app will be automatically pushed to this repository from [v0.app](https://v0.app).
## Deployment
Your project is live at:
**[https://vercel.com/fnvtks-projects/v0--ap](https://vercel.com/fnvtks-projects/v0--ap)**
## Build your app
Continue building your app on:
**[https://v0.app/chat/tPF15XbLAKD](https://v0.app/chat/tPF15XbLAKD)**
## How It Works
1. Create and modify your project using [v0.app](https://v0.app)
2. Deploy your chats from the v0 interface
3. Changes are automatically pushed to this repository
4. Vercel deploys the latest version from this repository

View File

@@ -1 +0,0 @@
Mon Dec 29 18:11:24 CST 2025

View File

@@ -0,0 +1,222 @@
# 1.1 荷包:电动车出租的被动收入模式
"每个人都在梦想特斯拉帮他挣钱,我现在电动车帮我挣钱。"
2025年10月21日周一早上6点18分。
Soul派对房里进来一个人声音很稳。
他上麦之后,先听了十分钟。
然后说了一句话:"你讲的被动收入,我做了好几年了。"
我愣了一下。
Soul上吹牛的人太多但这个人的语气不像吹牛。
---
"那你是做什么的?"
"电动车。"
"电动车?卖车的?"
”不是,出租的。"
"出租电动车?"
"对在泉州我有1000辆电动车。"
派对房里,突然安静了。
---
"1000辆怎么做的"
他笑了。
"其实很简单。"
"你找一个工厂、工业园区,那里有很多工人,对吧?"
"工人上下班需要交通工具,骑电动车最方便。"
"但买一辆电动车要两三千块,很多人舍不得。"
"那我就租给他们。"
他停了一下。
"一个月三百六十几块,一天算下来才十几块钱。"
"工人觉得划算,我也稳定赚钱。"
---
派对房里,有人打字:"那你一个月能赚多少?"
他说:"1000辆车一个月就是三十多万流水。"
"扣掉成本、维护、人工,净利润大概十几万。"
"关键是,这是被动收入。"
"车放在那里,每个月都有钱进来。"
---
我问:"那你怎么找到这些工厂的?"
他说:"一开始是自己一家一家跑。"
"后来我发现,最好的办法是找做人力的人合作。"
"做人力的,手上有大量的工厂资源。"
"他给我介绍工厂,我给他分成。"
---
派对房里,有人问:"那你现在还在扩张吗?"
他说:"刚投了100多万在河源又铺了500辆。"
我有点惊讶。
"河源?那不是广东那边吗?"
他说:"对我在Soul上认识了一个小伙伴姓李大家叫他犟总。"
"他在河源那边有个工业园区5万多平工人非常多。"
"我们一聊,觉得这个事情可以做,就直接签了。"
---
派对房里,有人说:"等等你们是在Soul上认识的"
他说:"对,就是在这个派对房里。"
我笑了。
"这可能是我们派对房第一个真正落地的合作。"
他说:"可不是嘛。"
"犟总那边做人力,我这边有车,一拍即合。"
"他负责场地和工人,我负责车和运营。"
"500辆车拉过去直接就开始赚钱了。"
---
派对房里,有人问:"那你这个模式能复制吗?"
他说:"当然能。"
"你只要找到有大量人口的地方,工厂、学校、工业园区都行。"
"然后投车进去,租出去就完了。"
他停了一下。
"我现在还在看宝盖山那边。"
"石狮那个理工学校,有两万六的学生。"
"如果能摆电动车进去,又是一个新的点。"
---
我问:"那你这个生意最难的是什么?"
他想了一下。
"最难的是找到对的合作伙伴。"
"你一个人做不了这个事情,你需要有人帮你搞定场地。"
"场地有了,车铺进去,后面就是运营的事情了。"
他继续说:"所以我现在花很多时间在Soul上。"
"因为这里能认识各种各样的人。"
"做人力的、做地产的、做工厂的,什么人都有。"
"你多聊,总能找到合适的合作伙伴。"
---
派对房里,有人问:"那你还做什么?"
他说:"车身广告。"
"我1000辆电动车每辆车身上都可以贴广告。"
"一天一辆车才3毛钱一个月9块钱。"
"但1000辆车一个月就是9000块额外收入。"
"关键是,这个钱几乎没有成本,纯利润。"
---
我问:"所以你的生意模式是,车租出去赚租金,车身贴广告赚广告费?"
他说:"对,两条腿走路。"
"租金是主要收入,广告是锦上添花。"
"以后车多了,广告这块收入会越来越高。"
---
那天聊完已经快9点了。
我在派对房里总结了一下。
"刚才荷包分享的,是一个非常典型的被动收入模式。"
"什么叫被动收入?"
"就是你把资产放在那里,它自己给你赚钱。"
"可以是房子出租,可以是电动车出租,可以是任何有需求的资产。"
我停了一下。
"但被动收入不是躺着赚钱。"
"前期你要投入资金、要找合作伙伴、要铺设网络。"
"等这些都做好了,后面才能相对轻松。"
---
早上9点12分荷包说他要去准备出发了。
"今天500辆车都到河源了我要过去盯一下。"
"祝你顺利。"
"谢了。下次回来给大家汇报进展。"
派对房里有人说:"这才是Soul的正确用法。"
我笑了。
确实,在这里认识的人,在这里谈成的合作,在这里落地的项目。
这才是商业社会里社交的真正价值。
不是认识多少人,而是能不能和对的人一起做对的事。
荷包和犟总,一个有车,一个有场地。
两个人在Soul上认识在现实中落地。
这就是资源整合最简单的样子。

View File

@@ -0,0 +1,215 @@
# 1.2 老墨:资源整合高手的社交方法
"有些人手上没有一个项目,但他认识所有有项目的人。"
2025年10月25日周六早上6点15分。
这是我对老墨的第一印象。
Soul派对房里进来一个人声音很稳不像大多数人那样急着表达自己。
他上麦之后,先听了十分钟。
然后说了一句话:"你讲的资源整合我做了15年。"
我愣了一下。
---
"那你是做什么的?"
"财务。"
"财务公司?"
"对,但我不是做账的,我是做资源整合的。"
这句话,让我来了兴趣。
"你看,一家企业需要做账,对吧?"
"但做账只是一个入口。"
"企业还需要什么?税筹、退税、融资、法律、客户资源。"
"我手上有很多企业客户,每一家都有不同的需求。"
他停了一下。
"我的生意就是把A的需求对接给B的资源。"
"中间抽几个点。"
---
派对房里,有人打字:"这不就是中介吗?"
他说:"你可以这么理解。"
"但我不是普通的中介。"
"我是有背书的中介。"
"那你怎么找到这些资源的?"
"我每天花三个小时在Soul派对房里听人聊天。"
我有点惊讶。
"Soul"
他点点头。
"Soul上什么人都有。做税筹的做退税的做供应链的做融资的。"
"我每天上麦,不说话,就听。"
"听他们在讲什么项目,讲什么资源,讲什么需求。"
"然后我加他们微信,进飞书,慢慢聊。"
他停了一下。
"三个月我在Soul上认识了80个老板。"
"每个老板手上都有不同的资源。"
"我的工作,就是把他们链接起来。"
---
派对房里,有人问:"他们为什么愿意给你分钱?"
他说:"因为我给他们带客户。"
他给我们讲了一个案例。
"今年年初我在Soul上认识了一个做退税的老板。"
"他说,他的退税业务,只针对年流水比较大的企业。"
"但他找不到客户。"
他停了一下。
"我手上有很多企业客户,我一筛选,发现有一些符合条件。"
"我说,我把客户给你,你帮我分成。"
"他说,怎么分?"
"我说,你收服务费,分我一部分。"
"他说,没问题。"
---
派对房里,有人问:"那客户为什么愿意接受你的介绍?"
他说:"因为我给他们做账。"
"我每个月给他们发财务报表。"
"报表里面我会写您的企业今年缴税XX万我们有合作伙伴可以帮您优化税务预计可以节省XX万。"
"这句话一写,客户就会问我。"
"我说,我认识一个做税筹的朋友,很靠谱,要不要我介绍给你?"
"客户说,可以。"
他看着我。
"然后我就把客户介绍过去。"
"客户省了钱,我分了成,那个老板也赚了钱。"
"大家都开心。"
---
有人问:"那你怎么保证那个老板靠谱?"
他说:"我会先自己测试。"
"第一次合作,我不会介绍大客户。"
"我先介绍一个小客户,看他怎么做。"
"如果他做得好,客户满意,我再介绍大客户。"
"如果他做得不好,我就不再合作。"
他停了一下。
"所以我手上的资源,都是经过验证的。"
"客户信任我,是因为我只给他们推荐靠谱的人。"
---
派对房里,又是一阵沉默。
"为什么大部分人做不了资源整合?"
"因为他们不舍得分钱。"
"很多人觉得,我介绍客户给你,你应该感谢我。"
"但其实,应该是我感谢他。"
"因为他提供了服务,客户才满意。"
"我只是做了一个链接。"
他停了一下。
"所以我每次介绍客户,都会主动提出分成。"
"我不等他来找我分钱,我先说,这个项目我们怎么分?"
"这样,大家都觉得我很靠谱。"
派对房里,有人打字:"学到了。"
---
那天聊完已经快9点了。
我在派对房里总结了一下。
"刚才那位老板,给了我们一个很好的示范。"
"什么叫资源整合?"
"第一,你要认识足够多的人。不是泛泛之交,是知道他们手上有什么资源。"
"第二,你要有客户。资源整合的本质,是把需求对接给供给。没有需求,你整合不了。"
"第三,你要舍得分钱。不要想着自己吃肉,别人喝汤。你分得越多,大家越愿意跟你合作。"
我停了一下。
"最重要的是,你要让所有人都觉得,跟你合作是赚钱的,不是被你赚钱的。"
---
早上9点05分老墨说他要去见客户了。
临走前他说了一句话:"我手上没有一个项目,但我年入千万。"
我笑了。
这就是资源整合的魅力。
你不需要自己做项目,你只需要认识做项目的人。
然后把他们链接起来,让每个人都赚到钱。
你链接得越多,大家越信任你。
你越舍得分钱,大家越愿意跟你合作。
这不是什么高深的道理,但能做到的人,真的不多。

View File

@@ -0,0 +1,235 @@
# 1.3 笑声背后的MBTI为什么ENFP/ENTJ适合做资源INTP适合做系统
"你们有没有想过,为什么有些人天生就适合做销售,有些人天生就适合做技术?"
2025年11月7日周五早上7点40分。
那天派对房的气氛特别活跃,一个声音特别有穿透力的女生上了麦。
她一上麦就说:"我是做MBTI咨询的专门帮企业做团队分析。"
"MBTI那个性格测试"
"对,但我不是那种网上随便做做的测试。我是专业的,给企业做人才画像的。"
派对房里有人打字:"MBTI不是玄学吗"
她笑了。
"你觉得是玄学,是因为你没见过它在商业场景里的应用。"
---
我让她分享一下。
她说:"好,我讲一个真实的案例。"
"去年,有一家做私域的公司找我,说他们团队有问题。"
"什么问题?销售业绩很好,但是客户留存率很低。"
"我去做了一次团队诊断,发现一个很有意思的现象。"
她停了一下。
"他们的销售团队清一色都是ENTJ和ESTP。"
"你们知道这意味着什么吗?"
派对房里,有人问:"什么意思?"
她说:"ENTJ是指挥官型人格天生喜欢掌控局面目标导向执行力强。"
"ESTP是企业家型人格喜欢冒险反应快善于抓住机会。"
"这两种人,做销售是一把好手。"
"但是——"
她语气一转。
"他们都有一个共同的问题:不擅长维护关系。"
"他们喜欢的是'成交'那一刻的快感,不喜欢后续的'服务'。"
"所以客户买完东西,就再也找不到人了。"
---
我问:"那怎么解决?"
她说:"我建议他们招几个INFJ和ISFJ。"
"INFJ是提倡者型人格天生擅长理解他人共情能力强。"
"ISFJ是守护者型人格细心、耐心、喜欢照顾人。"
"让这两种人做客户服务,客户留存率立刻就上去了。"
她停了一下。
"三个月后那家公司的客户复购率从12%涨到了38%。"
派对房里,有人打字:"牛逼。"
---
我说:"那你觉得,做私域运营,什么性格最适合?"
她想了几秒。
"私域运营其实是一个复合型的工作。"
"它需要三种人:获客的、转化的、服务的。"
"获客的人需要ENFP或者ESTP他们擅长打开局面建立第一接触。"
"转化的人需要ENTP或者ENFJ他们擅长说服能把陌生人变成客户。"
"服务的人需要INFJ或者ISFJ他们擅长维护关系能把客户变成长期用户。"
她停了一下。
"如果你的团队只有一种类型的人,那你的业务一定是瘸腿的。"
---
派对房里,有人问:"那做技术的呢?什么性格适合?"
她说:"INTP和INTJ。"
"INTP是逻辑学家型人格喜欢分析、喜欢研究、喜欢把事情想透。"
"INTJ是建筑师型人格喜欢规划、喜欢系统、喜欢把事情做到极致。"
"这两种人,做技术、做系统、做产品,都是一把好手。"
她看着我。
"卡若,你是什么类型?"
我笑了。
"INTP。"
"难怪你喜欢做系统。"
---
我说:"那你能不能给大家讲讲,怎么判断一个人适合做什么?"
她说:"最简单的方法,看他的第一反应。"
"比如,你跟一个人说,'我有一个项目,能赚钱'。"
"如果他的第一反应是'怎么赚?'——这是ENTJ他关心的是目标。"
"如果他的第一反应是'为什么能赚?'——这是INTP他关心的是逻辑。"
"如果他的第一反应是'谁在做?'——这是ESFJ他关心的是人,要和靠谱的人做靠谱的事。"
"如果他的第一反应是'有什么风险?'——这是ISTJ他关心的是安全。"
她停了一下。
"每个人的第一反应,就是他的底层逻辑。"
"你知道了他的底层逻辑,就知道怎么跟他合作。"
---
派对房里,有人问:"那如果我是INFP适合做什么"
她说:"INFP是调停者型人格理想主义有创造力喜欢表达。"
"你适合做内容、做创意、做品牌。"
"但你不适合做销售因为你不喜欢push别人。"
"你也不适合做管理,因为你不喜欢冲突。"
她停了一下。
"INFP最好的位置是在一个团队里做'灵魂'。"
"你负责输出价值观,输出理念,让团队有方向感。"
"但具体的执行交给ENTJ和ESTJ。"
---
那天聊完,已经快九点了。
我在派对房里总结了一下。
"刚才那位小姐姐,给了我们一个很好的框架。"
"为什么有些团队做不起来?"
"不是因为能力不行,是因为人不对。"
"你让INTP去做销售他会很痛苦。"
"你让ENTJ去做客服他会很暴躁。"
"每个人都有自己的天赋区间。"
"把对的人放在对的位置,团队才能跑起来。"
---
我停了一下。
"我自己是INTP所以我喜欢做系统、做流程、做分析。"
"我不喜欢跟人聊天,但我喜欢研究人。"
"所以我每天早上6点在Soul开派对不是因为我喜欢社交。"
"是因为我喜欢观察。"
"观察不同的人,怎么思考,怎么表达,怎么做决策。"
"然后把这些观察,变成系统,变成方法论。"
派对房里,有人打字:"卡若,你太清醒了。"
我笑了。
"清醒不是天生的,是被坑出来的。"
---
后来我经常在Soul派对房里讲MBTI。
每次讲完,都有人问:"卡若我是XX类型适合做什么"
我说:"先问自己三个问题。"
"第一,你做什么事情的时候,时间过得最快?那就是你的天赋区间。"
"第二,你做什么事情的时候,最容易进入心流状态?那就是你应该深耕的领域。"
"第三,你做什么事情的时候,别人觉得很难,你觉得很简单?那就是你的核心竞争力。"
我停了一下。
"MBTI只是一个工具帮你认识自己。"
"但认识自己之后,怎么选择,还是要靠你自己。"
---
这本书的真实目的,不是教你怎么成功。
而是告诉你,每个人都有自己的天赋区间。
不要跟自己的天性对抗,不要和人性对抗。
找到你的位置,然后深耕。
ENFP适合做资源整合INTP适合做系统搭建ISFJ适合做客户服务。
每个人都有自己的战场。
找到它,然后打赢它。

View File

@@ -0,0 +1,176 @@
# 1.4 人性的三角结构:利益、情感、价值观
"人和人之间的关系,归根结底就三个东西:利益、情感、价值观。"
2025年11月15日周六早上6点32分。
那天的话题有点深,派对房里聊起了人际关系的本质。
有人问:"为什么有些合作会散伙?"
我说:"因为他们只有利益连接,没有其他的。"
---
派对房里,有人说:"利益连接不好吗?"
我说:"利益连接当然好,但利益连接是脆弱的。"
"为什么?“
”因为利益是会变的。"
"今天你能给我带来利益,我们是朋友。"
"明天你不能给我带来利益了,我们就不是朋友了。"
---
我继续说。
"你看那些商业合作,为什么很多都不长久?"
"因为它们只建立在利益的基础上。"
"一旦利益分配出了问题,或者一方觉得自己吃亏了,关系就破裂了。"
---
派对房里,有人问:"那情感连接呢?"
我说:"情感连接比利益连接稳定一些。"
"因为情感不会因为利益的变化而马上消失。"
"你跟一个人有感情,即使他暂时不能给你带来利益,你也不会马上翻脸。"
---
我停了一下。
"但情感连接也有问题。"
"情感是会消耗的。"
"如果你们之间只有情感,没有利益,也没有共同的价值观,时间长了,情感也会淡。"
---
我举了个例子。
"比如很多大学同学,毕业的时候感情很好。"
"但毕业十年之后,很多人就不联系了。"
"为什么?因为你们之间只有过去的情感,没有现在的利益,也没有共同的追求。"
"情感慢慢就消耗完了。"
---
派对房里,有人问:"那价值观连接呢?"
我说:"价值观连接是最稳定的。"
"什么叫价值观连接?就是你们相信同样的东西,追求同样的东西。"
"这种连接不会因为利益的变化而改变,也不会因为时间的流逝而消退。"
---
"你看那些能长期合作的人,他们之间一定有价值观的连接。"
"他们相信同样的事情,追求同样的目标。"
"即使中间有利益的冲突,他们也能坐下来谈,因为他们知道对方跟自己是同一类人。"
---
派对房里,有人说:"那最好的关系是什么样的?"
我说:"最好的关系,是三者都有。"
"有利益连接,让你们有合作的基础。"
"有情感连接,让你们有信任的基础。"
"有价值观连接,让你们有长期的基础。"
---
我停了一下。
"但现实中,三者都有的关系很少。"
"大部分关系,可能只有一个或者两个。"
"你要做的是什么?是在不同的关系里,识别出它的性质。"
---
我继续说。
"如果一个关系只有利益连接,那你就把它当成生意关系。"
"不要对它有太多情感上的期待,谈好利益分配就行。"
"如果一个关系只有情感连接,那你就把它当成朋友关系。"
"不要跟他谈生意,因为谈生意可能会伤感情。"
"如果一个关系有价值观连接,那你就好好珍惜。"
"这种关系是最稀缺的,也是最有价值的。"
---
派对房里,有人问:"怎么判断一个人跟你有没有价值观连接?"
我说:"很简单,看你们聊天的内容。"
"如果你们只聊利益——怎么赚钱、怎么合作、怎么分钱——那就是利益连接。"
"如果你们只聊情感——最近怎么样、家里怎么样、心情怎么样——那就是情感连接。"
"如果你们会聊理想、聊未来、聊你们相信什么、追求什么,那就是价值观连接。"
---
那天聊完,派对房里有人说:"我发现我身边大部分关系都是利益连接。"
我说:"这很正常。"
"成年人的世界,利益连接是最常见的。"
"但你不能只有利益连接。"
"你需要有几个有情感连接的朋友,让你在低谷的时候有人支持。"
"你需要有几个有价值观连接的伙伴,让你在迷茫的时候有人同行。"
---
我停了一下。
"人生就像一个三角形。"
"利益是底边,让你站得稳。"
"情感是一条边,让你不孤单。"
"价值观是另一条边,让你走得远。"
"三条边都有,三角形才稳定。"
---
那天早上7点15分派对房里的人陆续离开。
有人临走前说了一句:"以后看人,我会先想想这是哪种连接。"
我觉得,这就够了。
不需要你记住什么大道理,只需要在下次遇到一段关系的时候,能多想一层。
这一层,可能就是你避开一个坑,或者抓住一个机会的关键。

View File

@@ -0,0 +1,187 @@
# 1.5 沟通差的问题:为什么你说的别人听不懂
"我发现一个问题,就是我说的话,别人经常听不懂。"
2025年12月3日周三早上6点18分。
那天派对房里来了个程序员,语气有点无奈。
他说他在公司里跟产品经理、跟老板沟通,总是鸡同鸭讲。
我问:"能举个例子吗?"
他说:"比如我跟老板说,这个功能需要重构底层架构,老板就问我,重构是什么意思?需要多长时间?能不能不重构?"
"我解释了半天,他还是不理解为什么要重构。"
---
派对房里,有人说:"那是老板不懂技术。"
我说:"不对。问题不在老板,在你。"
---
我继续说。
"沟通的本质是什么?是让对方理解你的意思。"
"如果对方没理解,那就是你的问题,不是对方的问题。"
"因为沟通的责任在说话的人,不在听话的人。"
---
派对房里,那个程序员说:"但我说的是事实啊,是技术上的事实。"
我说:"事实不重要,重要的是对方能不能理解。"
"你用技术语言跟一个不懂技术的人说话,他当然听不懂。"
"这不是他的问题,是你没有'翻译'。"
---
"什么叫翻译?"
"就是把你的专业语言,翻译成对方能理解的语言。"
---
我举了个例子。
"比如你说'重构底层架构',老板听不懂。"
"你应该怎么说?"
"你应该说:'老板,现在这个系统就像一栋老房子,地基有问题。我们可以继续往上盖,但盖到一定程度就会塌。如果我们现在花两周时间把地基加固一下,以后就不用担心这个问题了。'"
---
派对房里,有人说:"这样说确实更容易理解。"
我说:"对。"
"这就是翻译。"
"你把'重构底层架构'翻译成'加固地基',老板一下就懂了。"
---
我继续说。
"沟通差的人,通常有几个问题。"
"第一,只会用自己的语言说话。"
"他们不会根据听众调整表达方式,对谁都用同样的说法。"
"第二,只说事实,不说意义。"
"他们会告诉你'是什么',但不会告诉你'为什么重要'、'对你有什么影响'。"
"第三,只顾自己说,不管对方听没听懂。"
"他们说完就觉得自己的任务完成了,不会确认对方是否理解。"
---
派对房里,有人问:"那怎么提高沟通能力?"
我说:"有几个方法。"
"第一,了解你的听众。"
"在说话之前,先想想对方是什么背景、什么水平、关心什么。"
"然后根据这些来调整你的表达方式。"
---
我继续说。
"第二,先说结论,再说原因。"
"很多人说话喜欢从头说起,铺垫一大堆,最后才说结论。"
"但对方可能听到一半就走神了。"
"你应该先说结论:'老板,我建议我们花两周时间做一次系统升级。'"
"然后再解释原因:'因为现在的系统有一些隐患,如果不处理,以后可能会出大问题。'"
---
我停了一下。
"第三,用对方熟悉的东西做类比。"
"抽象的概念很难理解,但具体的例子很容易理解。"
"你说'重构架构',对方听不懂。"
"你说'加固地基',对方一下就懂了。"
"因为'地基'是对方熟悉的概念。"
---
我继续说。
"第四,确认对方是否理解。"
"说完之后,问一句:'我说清楚了吗?还有什么其他没解释清楚的问题吗?'"
"如果对方有问题,再解释一遍。"
"不要假设对方听懂了,要确认。"
---
派对房里,那个程序员说:"我明白了,我以前确实没考虑过对方的感受。"
我说:"这不是感受的问题,是效率的问题。"
"你沟通不清楚,对方不理解,你们就要反复沟通。"
"一件事情本来五分钟能说清楚,结果说了一个小时还没说清楚。"
"这是巨大的时间浪费。"
---
那天聊完,派对房里有人说:"沟通能力真的很重要。"
我说:"沟通能力可能是最被低估的能力。"
"很多人觉得,只要我专业能力强,沟通差一点没关系。"
"但实际上,如果你不能把你的专业能力表达出来,别人就不知道你有多厉害。"
"你的能力就被埋没了。"
---
我停了一下。
"反过来,有些人专业能力一般,但沟通能力很强。"
"他们能把自己的想法清晰地表达出来,能说服别人支持他们。"
"结果他们的发展反而比专业能力强的人更好。"
---
早上7点02分那个程序员说他要去上班了。
临走前他说:"今天学到一个词,翻译。以后跟老板说话,我先翻译一下。"
我笑了笑。
其实沟通这件事,没有什么高深的技巧。
核心就一句话:站在对方的角度想问题。
你想让对方理解你,就要先理解对方。
这不只是沟通的道理,也是做人的道理。

View File

@@ -0,0 +1,157 @@
# 2.1 相亲故事:你以为找的是人,实际是在找模式
"相亲这件事90%的人都搞错了方向。"
2025年11月22日周六早上6点15分。
那天的派对房话题有点私密,聊起了相亲这件事。
有人说:"我相了十几次亲,一个都没成。"
我问:"你觉得问题出在哪里?"
他说:"可能是我条件不够好吧。"
我说:"不对。问题不在条件,在思维方式。"
---
派对房里,有人问:"什么意思?"
我说:"大部分人相亲,都在找一个'人'。"
"他们列一堆条件:身高多少、学历多少、收入多少、长相怎么样。"
"然后去相亲,看对方符不符合这些条件。"
"符合就继续聊,不符合就下一个。"
---
我继续说。
"但这种思维方式有一个问题。"
"就是你永远在找一个'完美的人',但完美的人不存在。"
"或者说,完美的人存在,但他凭什么选你?"
---
派对房里,有人说:"那应该怎么找?"
我说:"你不应该找人,你应该找'模式'。"
---
我停了一下。
"什么叫找模式?"
"就是你要想清楚,你想要的是什么样的生活,然后找一个能跟你一起过这种生活的人。"
---
我举了个例子。
"比如你想要的生活是:两个人一起创业,白天各忙各的,晚上一起吃饭聊天,周末一起出去玩。"
"那你找对象的时候,就不应该只看条件,而应该看这个人能不能跟你过这种生活。"
"他愿不愿意支持你创业?他能不能接受你忙?他对生活的期待跟你一不一样?"
---
派对房里,有人说:"但条件不重要吗?"
我说:"条件重要,但条件是筛选器,不是目标。"
"你用条件来筛选,是为了提高效率。"
"但最终决定你们能不能在一起的,不是条件,是'模式匹配'。"
---
我继续说。
"我见过很多条件很好的人,相亲失败。"
"为什么?因为他们只看条件,不看模式。"
"两个人条件都很好,但一个想安稳,一个想折腾。"
"一个想早点结婚生孩子,一个想先拼事业。"
"这种情况,条件再好也没用。"
---
派对房里,有人问:"那怎么找到模式匹配的人?"
我说:"首先,你要想清楚自己想要什么。"
"很多人相亲失败,不是因为找不到人,是因为自己都不知道自己要什么。"
"你问他想找什么样的人,他说'合适的'。"
"什么叫合适?他说不出来。"
---
我停了一下。
"其次,你要学会在聊天中挖掘对方的'模式'。"
"不要只聊表面的东西,要聊深层的东西。"
"比如你可以问:你未来五年有什么规划?你理想的生活是什么样的?你怎么看待工作和家庭的关系?"
"这些问题能帮你快速判断对方的模式跟你匹不匹配。"
---
派对房里,有人说:"但这样聊会不会太严肃了?"
我说:"不会。"
"如果对方觉得这些问题太严肃,那说明他还没准备好认真找对象。"
"你也不用浪费时间了。"
---
那天聊完,派对房里有人说:"我明白了,相亲不是找人,是找生活方式。"
我说:"对。"
"你找的不是一个人,是一个能跟你一起生活的伙伴。"
"这个伙伴的条件可能不是最好的,但他愿意跟你一起走。"
"这比条件重要一万倍。"
---
我停了一下。
"还有一点很重要。"
"就是你自己也要成为别人想要的'模式'的一部分。"
"你想找一个上进的人,那你自己上不上进?"
"你想找一个有趣的人,那你自己有不有趣?"
"相亲是双向选择,你在挑别人的时候,别人也在挑你。"
---
早上7点22分那个相了十几次亲的人说"我回去想想我到底要什么样的生活。"
我说:"这就对了。"
"先想清楚自己要什么,再去找。"
"盲目地找,只会越找越迷茫。"
"清醒地找,才能找到对的人。"

View File

@@ -0,0 +1,149 @@
# 2.2 找工作迷茫者:为什么简历解决不了人生
"我改了二十多版简历,还是找不到工作。"
2025年12月6日周六早上6点28分。
那天派对房里来了个刚毕业的大学生,声音里带着迷茫。
他说他投了几百份简历面试了十几家公司但一个offer都没拿到。
"你觉得问题出在哪里?"
"可能是我简历写得不够好。"
"不对。问题不在简历,在你自己。"
---
派对房里,有人问:"什么意思?"
我说:"简历只是一个载体,它展示的是你这个人。"
"如果你这个人没有亮点,简历写得再好也没用。"
"反过来,如果你这个人有亮点,简历写得差一点也能被看到。"
---
我继续说。
"很多人找工作,把所有精力都放在改简历上。"
"改格式、改措辞、改排版。"
"但他们忽略了一个问题:简历上写的东西,是真的吗?"
---
派对房里,那个大学生说:"当然是真的啊。"
我说:"我不是说你造假。"
"我是说,你简历上写的那些经历,真的能证明你的能力吗?"
---
我举了个例子。
"比如你写'曾在某公司实习三个月'。"
"这三个月你做了什么?学到了什么?有什么成果?"
"如果你只是去打杂、复印、跑腿,那这段经历没有任何价值。"
"但如果你在这三个月里独立完成了一个项目,或者解决了一个问题,那就不一样了。"
---
派对房里,有人说:"但我没有那么厉害的经历啊。"
我说:"那就去创造。"
"你现在没有工作,有的是时间。"
"你可以做一个自己的项目,可以参加一个比赛,可以学一个新技能。"
"这些都是可以写在简历上的。"
---
我继续说。
"很多人找工作的思路是:先找到工作,再去学习。"
"但正确的思路是:先学习,再找工作。"
"你要先让自己变得有价值,然后工作自然会来找你。"
---
派对房里,那个大学生说:"但我不知道学什么啊。"
我说:"这就是你真正的问题。"
"你不是找不到工作,你是不知道自己要什么。"
---
我停了一下。
"你想做什么工作?你擅长什么?你对什么感兴趣?"
"这些问题你想清楚了吗?"
他沉默了一会儿,说:"没有。"
---
我说:"那你先别急着投简历了。"
"先花一个月时间,想清楚这些问题。"
"去尝试不同的事情,去跟不同的人聊天,去探索自己。"
"等你想清楚了,再去找工作。"
---
派对房里,有人问:"但不找工作怎么生活?"
我说:"可以先找一个过渡性的工作。"
"不一定是你理想的工作,但能让你活下去。"
"然后用业余时间去探索、去学习、去准备。"
"等你准备好了,再跳到你真正想做的工作。"
---
那天聊完,派对房里有人说:"我觉得你说得对,但好难啊。"
我说:"当然难。"
"如果容易,大家都能找到好工作了。"
"但难不代表做不到。"
"你只需要比别人多想一步、多做一点,你就能脱颖而出。"
---
我停了一下。
"找工作这件事,本质上是一个'匹配'的过程。"
"公司在找能创造价值的人,你在找能发挥你价值的平台。"
"如果你自己都不知道自己的价值是什么,怎么可能匹配成功?"
---
这本书的真实目的,不是教你怎么写简历。
而是告诉你,找工作的困境,往往不是技巧的问题,而是方向的问题。
你要先知道自己是谁、想要什么,然后才能找到适合你的工作。
简历只是一张纸,真正决定你命运的,是纸背后的那个人。

View File

@@ -0,0 +1,167 @@
# 2.3 撸运费险:小钱困住大脑的真实心理
"我一天能撸两三百块运费险,一个月下来也有小一万。"
2025年11月18日周一早上7点05分。
那天派对房里来了个说自己"撸运费险"的人,语气里带着点得意。
他说他每天的工作就是在淘宝上买东西、退货,赚运费险的差价。
我问:"你做这个多久了?"
他说:"快两年了。"
我说:"两年了,你有没有想过做点别的?"
他沉默了一会儿,说:"想过,但不知道做什么。"
---
派对房里,有人问:"运费险是怎么撸的?"
他说:"很简单。"
"你在淘宝上买一个有运费险的商品,比如衣服。"
"然后你申请退货运费险会赔你一笔钱比如12块。"
"但实际上你退货的快递费可能只要5块、6块。"
"中间的差价就是你赚的。"
---
他继续说。
"一单赚5块、6块听起来不多。"
"但如果你一天撸50单、100单呢"
"一天就能赚两三百,一个月就是小一万。"
---
我问:"那你一天要花多少时间?"
他说:"差不多七八个小时。"
"因为你要选品、下单、收货、退货、寄快递,每个环节都要花时间。"
---
派对房里,有人说:"那不是跟上班一样?"
他说:"是啊,但我自由啊。"
"我想什么时候干就什么时候干,不用看老板脸色。"
---
我说:"但你有没有想过一个问题?"
"你做这个两年了,你的收入有增长吗?"
他说:"没有。"
"两年前一个月赚七八千,现在还是一个月赚七八千。"
"而且现在越来越难做了,平台在打击,运费险的额度也在降。"
---
我继续说。
"你看,这就是问题。"
"你花了两年时间,做一件没有成长性的事情。"
"两年后,你的能力没有提升,你的收入没有增长,你的未来没有任何积累。"
---
派对房里,有人说:"但至少他赚到钱了啊。"
我说:"是赚到钱了,但这是'小钱'。"
"什么叫小钱?就是能让你活下去,但不能让你活得更好的钱。"
---
我停了一下。
"小钱最可怕的地方是什么?"
"是它会困住你的大脑。"
"你每天忙着撸运费险,没有时间去学习、去思考、去尝试新东西。"
"你的大脑被这些小钱占满了,没有空间去想更大的事情。"
---
派对房里,那个人说:"但我不做这个,我能做什么?"
我说:"这就是被小钱困住的典型表现。"
"你已经习惯了这种'低风险、低收益'的模式。"
"你不敢去尝试有风险的事情,因为你怕失去现在的收入。"
"但你不知道的是,你已经在失去更重要的东西——时间和机会。"
---
我继续说。
"我不是说撸运费险不好。"
"如果你只是把它当成一个过渡,一边撸一边学习、一边准备,那没问题。"
"但如果你把它当成一个长期的事业,那就有问题了。"
---
派对房里,有人问:"那什么样的事情值得长期做?"
我说:"有三个特点的事情。"
"第一,有成长性。你做得越久,能力越强,收入越高。"
"第二,有积累性。你今天做的事情,能为明天打基础。"
"第三,有杠杆性。你能用更少的时间,创造更多的价值。"
---
我停了一下。
"撸运费险符合这三个特点吗?"
"不符合。"
"你做两年和做一年,能力没有区别。"
"你今天撸的单,对明天没有任何帮助。"
"你一天只有24小时撸的单是有上限的。"
---
那天聊完,派对房里那个人说:"我要好好想想了。"
我说:"想清楚一个问题就行。"
"你是想赚一辈子小钱,还是想有一天赚到大钱?"
"如果是后者,你就要敢于放弃现在的小钱,去追求更有价值的东西。"
---
这本书的真实目的,不是批评撸运费险的人。
而是告诉你,人生最大的陷阱,不是失败,而是被小成功困住。
小钱能让你活下去,但也能让你永远活在底层。
要想突破,你必须敢于放弃眼前的确定性,去追求更大的可能性。

View File

@@ -0,0 +1,179 @@
# 2.4 游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力
"我每天打游戏十几个小时,我知道这样不好,但我停不下来。"
2025年11月23日周日早上6点52分。
那天派对房里来了个声音很年轻的男生,语气有点低沉。
他说他大学毕业两年了,一直没找工作,就在家打游戏。
我问:"你父母不管你吗?"
他说:"管过,但没用。他们说什么我都听不进去。"
---
派对房里,有人问:"你打的是什么游戏?"
他说:"主要是王者荣耀和原神。"
"王者荣耀打排位,原神做日常。"
"一天下来,基本上除了吃饭睡觉,都在打游戏。"
---
我问:"你觉得打游戏快乐吗?"
他沉默了一会儿,说:"说不上快乐,就是……停不下来。"
我说:"这就是问题所在。"
---
派对房里,有人说:"游戏上瘾是病,得治。"
我说:"不完全对。"
"游戏上瘾是结果,不是原因。"
"你要问的不是'怎么戒游戏',而是'为什么会上瘾'。"
---
我继续说。
"一个人沉迷游戏,通常有两个原因。"
"第一,游戏给了他现实中得不到的东西。"
"第二,现实中没有比游戏更有吸引力的东西。"
---
我停了一下。
"游戏给你什么?"
"成就感。你打赢一局,升一段位,抽到一个好角色,都会有成就感。"
"社交感。你跟队友一起开黑,一起吐槽,有一种归属感。"
"掌控感。在游戏里,你是主角,你能决定很多事情。"
---
我继续说。
"这些东西,你在现实中有吗?"
那个男生说:"没有。"
"我毕业两年,投了很多简历,都没人要。"
"我也不知道自己能做什么,想做什么。"
"在家待着,父母天天念叨,我也烦。"
"只有打游戏的时候,我才觉得自己还行。"
---
派对房里,有人说:"那你就不能努力一下吗?"
我说:"等一下,不要这样说。"
"他不是不想努力,他是不知道往哪里努力。"
"这是两回事。"
---
我继续说。
"很多人觉得,游戏上瘾的人是懒、是堕落、是不求上进。"
"但实际上,很多游戏上瘾的人,是迷茫、是逃避、是找不到方向。"
"他们不是不想改变,是不知道怎么改变。"
---
我停了一下。
"所以解决游戏上瘾的方法,不是强制戒游戏。"
"而是找到一个比游戏更有吸引力的东西。"
---
派对房里,那个男生问:"什么东西能比游戏更有吸引力?"
我说:"这个问题只有你自己能回答。"
"但我可以给你一个思路。"
---
我继续说。
"你想想,游戏为什么吸引你?"
"因为它有目标、有反馈、有成长。"
"你打一局游戏,有明确的目标(赢)。"
"你每一个操作,都有即时的反馈(杀人、被杀、升级)。"
"你打得越多,段位越高,有成长感。"
---
我停了一下。
"现实中也可以找到这样的东西。"
"比如学一个技能。学编程、学设计、学剪辑,都有目标、有反馈、有成长。"
"比如做一个项目。做一个自媒体账号、做一个小生意,也有目标、有反馈、有成长。"
"关键是,你要找到一个你感兴趣的方向,然后像打游戏一样去投入。"
---
派对房里,那个男生说:"但我不知道自己对什么感兴趣。"
我说:"那就去尝试。"
"你不试,永远不知道自己喜欢什么。"
"你可以先从小事开始。比如每天花一个小时,去学一个新东西。"
"不喜欢就换,喜欢就继续。"
"总会找到的。"
---
那天聊完,派对房里有人说:"我觉得他很难改变。"
我说:"不一定。"
"改变的前提是什么?是意识到问题。"
"他今天能来这里聊这个,说明他已经意识到问题了。"
"接下来就看他愿不愿意迈出第一步。"
---
这本书的真实目的,不是批评打游戏的人。
而是告诉你,很多看起来是"自制力"的问题,其实是"方向"的问题。
一个人沉迷游戏,不是因为他意志力薄弱,而是因为他找不到比游戏更值得投入的东西。
解决问题的方法,不是强制戒断,而是找到替代品。
找到一个让你愿意为之努力的目标,游戏自然就放下了。

View File

@@ -0,0 +1,161 @@
# 2.5 健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒
"2018年6月我被确诊糖尿病。那一年我34岁。"
2025年11月27日周四早上7点18分。
那天派对房里聊起了健康话题,气氛有点沉重。
有人问:"你平时怎么保持精力的?每天早上六点开播,不累吗?"
我说:"累。但我没办法,我必须保持规律的作息。"
"因为我有糖尿病。"
---
派对房里,有人说:"你这么年轻就有糖尿病?"
我说:"对。"
"2018年的时候我天天熬夜、喝酒、吃夜宵作息完全没规律。"
"有一天突然觉得不对劲去医院一查空腹血糖17。"
"医生说正常人空腹血糖应该在6以下你这个已经是糖尿病了。"
---
我继续说。
"当时我整个人都懵了。"
"糖尿病那不是老年人才得的病吗我才34岁。"
"医生说,现在糖尿病越来越年轻化了,跟生活方式有很大关系。"
---
派对房里,有人问:"那你现在怎么样了?"
我说:"控制得还行。"
"但我必须一直调节饮食结构、规律作息、配合中医针灸辅助调理。"
"稍微放纵一点,血糖就会上去。"
---
我停了一下。
"但我想说的不是糖尿病本身。"
"我想说的是,这场病给我带来的改变。"
---
我继续说。
"在确诊之前,我觉得自己是无敌的。"
"熬夜?没事,年轻扛得住。"
"喝酒?没事,喝完睡一觉就好了。"
"不运动?没事,等有空了再说。"
"我从来没想过,身体会出问题。"
---
我停了一下。
"但确诊之后,我突然意识到一件事。"
"身体是有极限的。"
"你透支它,它不会马上报复你,但它会记账。"
"等账单来的时候,你就知道厉害了。"
---
派对房里,有人说:"那你现在的生活方式是什么样的?"
我说:"完全变了。"
"以前我晚上两三点睡,现在我十一点之前必须睡。"
"以前我无肉不欢,现在我以蔬菜为主。"
"以前我从不运动,现在我每天至少走一万步。"
"以前我觉得健康是理所当然的,现在我知道健康是需要经营的。"
---
我继续说。
"但最大的改变不是生活方式,是心态。"
"以前我总觉得,赚钱最重要,事业最重要,什么都可以为了这些牺牲。"
"现在我知道,健康才是一切的基础。"
"没有健康,赚再多钱有什么用?"
---
派对房里,有人问:"你后悔吗?"
我说:"后悔没有用。"
"但如果能重来,我一定会更早开始注意健康。"
"不是等到出问题了才改变,而是在出问题之前就预防。"
---
我停了一下。
"我经常跟派对房里的年轻人说,趁年轻,把身体底子打好。"
"不要觉得自己年轻就可以随便造。"
"二十多岁的时候造,三十多岁就要还债。"
"三十多岁的时候造,四十多岁可能就还不起了。"
---
派对房里,有人说:"但年轻的时候,谁会想这些啊。"
我说:"是的,我当年也不想。"
"所以我现在才会跟你们说这些。"
"希望你们能比我更早意识到这个问题。"
---
那天聊完,派对房里有人说:"你这个经历挺有警示意义的。"
我说:"疾病是人生的第一次清醒。"
"在生病之前,我们都觉得自己是特别的,觉得那些坏事不会发生在自己身上。"
"但生病之后,你才会发现,你跟所有人一样,都是普通人。"
"普通人就要遵守普通人的规则:好好吃饭、好好睡觉、好好运动。"
---
这本书的真实目的,不是吓唬你。
而是告诉你,健康是一种投资,而且是回报率最高的投资。
你在健康上投入的每一分钟、每一分钱,都会在未来给你回报。
你在健康上透支的每一分钟、每一分钱,都会在未来向你讨债。
这笔账,越早算清楚越好。

Binary file not shown.

View File

@@ -1,94 +0,0 @@
# 通用支付模块 API 接口定义 (Universal Payment API)
无论后端使用何种语言Python/Node/Go请严格实现以下 RESTful 接口。
## 1. 核心交易接口 (Core Transaction)
### 1.1 创建订单
* **URL**: `POST /api/payment/create_order`
* **Description**: 业务系统通知支付模块创建一个待支付订单。
* **Request Body**:
```json
{
"user_id": "u1001", // 用户ID
"title": "VIP Membership", // 订单标题
"amount": 99.00, // 金额 (法币单位: 元 / 美元)
"currency": "CNY", // 币种: CNY, USD
"product_id": "vip_01", // 商品ID
"extra_params": {} // 扩展参数
}
```
* **Response**:
```json
{
"code": 200,
"data": {
"order_sn": "202310270001", // 支付系统生成的唯一订单号
"status": "created"
}
}
```
### 1.2 发起支付 (收银台)
* **URL**: `POST /api/payment/checkout`
* **Description**: 用户选择支付方式后,获取支付参数。
* **Request Body**:
```json
{
"order_sn": "202310270001",
"gateway": "alipay_qr", // 支付方式: alipay_qr, wechat_jsapi, paypal, usdt, stripe
"return_url": "https://...", // 支付成功后前端跳转地址
"openid": "..." // 微信JSAPI支付必填
}
```
* **Response**:
```json
{
"code": 200,
"data": {
"type": "url", // url (跳转), qrcode (扫码), json (SDK参数), address (USDT)
"payload": "https://...", // 具体内容
"expiration": 1800 // 过期时间(秒)
}
}
```
### 1.3 查询订单状态
* **URL**: `GET /api/payment/status/{order_sn}`
* **Description**: 前端轮询使用。
* **Response**:
```json
{
"code": 200,
"data": {
"status": "paid", // created, paying, paid, closed
"paid_amount": 99.00,
"paid_at": "2023-10-27 10:00:00"
}
}
```
---
## 2. 回调通知接口 (Webhook)
### 2.1 统一回调入口
* **URL**: `POST /api/payment/notify/{gateway}`
* **Description**: 接收第三方支付平台的异步通知。
* **Path Params**:
* `gateway`: `alipay`, `wechat`, `paypal`, `stripe`, `nowpayments`
* **Logic**:
1. 根据 gateway 加载对应驱动。
2. 验签 (Verify Signature)。
3. 幂等性检查 (Idempotency Check)。
4. 更新订单状态。
5. 返回平台所需的响应字符串 (e.g. `success`, `200 OK`).
---
## 3. 辅助接口
### 3.1 获取汇率
* **URL**: `GET /api/payment/exchange_rate`
* **Params**: `from=USD&to=CNY`
* **Response**: `{"rate": 7.21}`

View File

@@ -1,70 +0,0 @@
# 全球支付模块标准配置模板 (Standard Config)
# 无论你使用 Python, Node.js, Go 还是 Java请将此配置映射到你的环境如 .env, config.py, config.js
# -------------------------------------------------------------------
# 1. 基础环境 (Environment)
# -------------------------------------------------------------------
APP_ENV: "production" # development / production
APP_URL: "https://your-site.com" # 你的网站域名 (用于回调)
# -------------------------------------------------------------------
# 2. 数据库 (Database)
# -------------------------------------------------------------------
# 系统会自动生成 order 和 pay_trade 表
DB_CONNECTION: "mysql" # mysql / postgres / sqlite
DB_HOST: "127.0.0.1"
DB_PORT: "3306"
DB_DATABASE: "payment_db"
DB_USERNAME: "root"
DB_PASSWORD: "password"
# -------------------------------------------------------------------
# 3. 支付宝 (Alipay) - CN
# -------------------------------------------------------------------
ALIPAY_ENABLED: true
ALIPAY_APP_ID: "20210001..."
ALIPAY_PRIVATE_KEY: "MIIETv..." # 商户私钥
ALIPAY_PUBLIC_KEY: "MIIBIj..." # 支付宝公钥
# -------------------------------------------------------------------
# 4. 微信支付 (Wechat Pay) - CN
# -------------------------------------------------------------------
WECHAT_ENABLED: true
WECHAT_APP_ID: "wx123456..." # 公众号/小程序 AppID
WECHAT_MCH_ID: "1234567890" # 商户号
WECHAT_API_V3_KEY: "abcdef..." # APIv3 密钥 (32位)
WECHAT_CERT_SERIAL: "45F59C..." # 证书序列号
WECHAT_PRIVATE_KEY_PATH: "./cert/apiclient_key.pem"
WECHAT_CERT_PATH: "./cert/apiclient_cert.pem"
# -------------------------------------------------------------------
# 5. PayPal - Global
# -------------------------------------------------------------------
PAYPAL_ENABLED: true
PAYPAL_MODE: "live" # sandbox / live
PAYPAL_CLIENT_ID: "Af7s8..."
PAYPAL_CLIENT_SECRET: "EKd9..."
# -------------------------------------------------------------------
# 6. Stripe - Global
# -------------------------------------------------------------------
STRIPE_ENABLED: true
STRIPE_PUBLIC_KEY: "pk_live_..."
STRIPE_SECRET_KEY: "sk_live_..."
STRIPE_WEBHOOK_SECRET: "whsec_..."
# -------------------------------------------------------------------
# 7. USDT (Crypto) - Web3
# -------------------------------------------------------------------
USDT_ENABLED: true
USDT_GATEWAY_TYPE: "nowpayments" # nowpayments / native (原生监听)
# 选项 A: NOWPayments (第三方网关)
NOWPAYMENTS_API_KEY: "R1G..."
NOWPAYMENTS_IPN_SECRET: "secret..."
# 选项 B: Native (原生监听 - TRC20)
TRON_NODE_API: "https://api.trongrid.io"
TRON_WALLET_ADDRESS: "T9yD14Nj9..." # 你的收款地址
TRON_CHECK_INTERVAL: 60 # 轮询间隔 (秒)

View File

@@ -1,44 +0,0 @@
# 通用支付模块智能对接指令 (AI Integration Prompt) v3.0
**角色设定**: 你是一位精通全球支付架构Alipay/Wechat/PayPal/Stripe/USDT的资深全栈架构师。
**任务目标**:
我提供了一个**完全配置驱动 (Configuration-Driven)** 的通用支付模块设计。
请你根据我的目标项目环境,将此支付功能无缝集成进去。
**核心资源 (Input)**:
1. **标准配置模板**: `1_核心设计_通用协议/标准配置模板.yaml` (所有支付参数的 Key)
2. **API 接口契约**: `1_核心设计_通用协议/API接口定义.md` (标准 RESTful 接口)
3. **核心业务模型**: `1_核心设计_通用协议/业务逻辑与模型.md` (数据库表结构)
**集成模式 (选择一种)**:
### 模式 A: 嵌入式集成 (Library Mode) - *推荐*
适用于将支付功能直接写在现有的后端项目中 (如 Django app, NestJS module)。
**步骤**:
1. **环境识别**: 检查我的项目语言 (Python/Node/Go/Java)。
2. **依赖安装**: 根据语言推荐 SDK (e.g. `alipay-sdk-python`, `stripe`).
3. **配置加载**: 创建代码读取 `标准配置模板.yaml` 中的环境变量。
4. **模型生成**: 根据 `业务逻辑与模型.md` 生成 ORM 代码 (User/Order/PayTrade)。
5. **接口实现**: 严格按照 `API接口定义.md` 实现 Controller/View。
* *要求*: 使用工厂模式 (`PaymentFactory`) 管理不同网关。
### 模式 B: 微服务集成 (Microservice Mode)
适用于将支付功能独立部署为一个 Docker 容器。
**步骤**:
1. **服务生成**: 用 Go (Gin) 或 Node.js (Express) 生成一个独立服务。
2. **Docker化**: 编写 `Dockerfile``docker-compose.yml`
3. **网关代理**: 配置 Nginx 或 API Gateway 将 `/api/payment` 转发给此服务。
---
**给 AI 的执行指令 (Prompt)**:
> "请读取 `Universal_Payment_Module` 目录下的所有设计文档。
> 我的当前项目是基于 **[你的语言/框架]** 的。
> 请采用 **[模式 A / 模式 B]** 为我集成支付功能。
> 1. 首先生成依赖安装命令。
> 2. 然后生成数据库模型代码。
> 3. 最后实现符合 `API接口定义.md` 的核心接口代码。"

View File

@@ -1,141 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>通用收银台 Demo</title>
<style>
/* 简单的内联样式,实际使用建议用 TailwindCSS */
body { font-family: -apple-system, sans-serif; background: #f5f5f7; padding: 20px; }
.container { max-width: 480px; margin: 0 auto; background: white; border-radius: 12px; padding: 24px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
.order-info { margin-bottom: 24px; border-bottom: 1px solid #eee; padding-bottom: 16px; }
.amount { font-size: 32px; font-weight: bold; color: #333; }
.payment-methods { display: flex; flex-direction: column; gap: 12px; }
.method-btn { display: flex; align-items: center; justify-content: space-between; padding: 16px; border: 1px solid #ddd; border-radius: 8px; background: white; cursor: pointer; transition: all 0.2s; }
.method-btn:hover { border-color: #007aff; background: #f0f7ff; }
.method-btn.active { border-color: #007aff; box-shadow: 0 0 0 2px rgba(0,122,255,0.2); }
.btn-pay { width: 100%; background: #007aff; color: white; border: none; padding: 16px; border-radius: 8px; font-size: 16px; font-weight: bold; margin-top: 24px; cursor: pointer; }
.btn-pay:disabled { background: #ccc; }
.qrcode-area { text-align: center; margin-top: 20px; display: none; }
.qrcode-area img { width: 200px; height: 200px; }
</style>
</head>
<body>
<div class="container">
<div class="order-info">
<div style="color: #666; font-size: 14px;">订单支付</div>
<div class="amount" id="displayAmount">¥ 99.00</div>
<div style="margin-top: 8px; font-size: 14px;">订单号: <span id="orderSn">202310270001</span></div>
</div>
<div class="payment-methods" id="paymentMethods">
<!-- 支付宝 -->
<div class="method-btn" onclick="selectMethod('alipay_qr')">
<span>🔵 支付宝 (Alipay)</span>
<input type="radio" name="method" value="alipay_qr">
</div>
<!-- 微信 -->
<div class="method-btn" onclick="selectMethod('wechat_scan')">
<span>🟢 微信支付 (Wechat)</span>
<input type="radio" name="method" value="wechat_scan">
</div>
<!-- PayPal -->
<div class="method-btn" onclick="selectMethod('paypal')">
<span>🅿️ PayPal (USD)</span>
<input type="radio" name="method" value="paypal">
</div>
<!-- USDT -->
<div class="method-btn" onclick="selectMethod('usdt')">
<span>🪙 USDT (TRC20)</span>
<input type="radio" name="method" value="usdt">
</div>
</div>
<div class="qrcode-area" id="qrcodeArea">
<img id="qrcodeImg" src="" alt="QRCode">
<p id="qrcodeText">请扫描二维码支付</p>
</div>
<button class="btn-pay" onclick="doPay()">确认支付</button>
</div>
<script>
let selectedMethod = null;
const API_BASE = '/api/payment'; // 你的后端接口地址
function selectMethod(method) {
selectedMethod = method;
document.querySelectorAll('.method-btn').forEach(el => el.classList.remove('active'));
event.currentTarget.classList.add('active');
document.querySelector(`input[value="${method}"]`).checked = true;
// 如果选了USDT可能需要先换算汇率模拟
if(method === 'usdt') {
document.getElementById('displayAmount').innerText = '₮ 13.88'; // 模拟 99 CNY -> USDT
} else if(method === 'paypal') {
document.getElementById('displayAmount').innerText = '$ 13.75'; // 模拟 99 CNY -> USD
} else {
document.getElementById('displayAmount').innerText = '¥ 99.00';
}
}
async function doPay() {
if (!selectedMethod) {
alert('请选择支付方式');
return;
}
const orderSn = document.getElementById('orderSn').innerText;
try {
// 调用后端通用接口
const response = await fetch(`${API_BASE}/checkout`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
order_sn: orderSn,
gateway: selectedMethod,
return_url: window.location.href
})
});
const result = await response.json();
if (result.data.type === 'url') {
// 跳转类 (PayPal, H5)
window.location.href = result.data.payload;
} else if (result.data.type === 'qrcode') {
// 扫码类 (Wechat, Alipay)
document.getElementById('qrcodeArea').style.display = 'block';
document.getElementById('qrcodeImg').src = `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(result.data.payload)}`;
startPolling(orderSn);
} else if (result.data.type === 'address') {
// 加密货币类
document.getElementById('qrcodeArea').style.display = 'block';
document.getElementById('qrcodeText').innerText = `请转账至: ${result.data.payload}`;
// 生成地址二维码...
startPolling(orderSn);
}
} catch (error) {
console.error('支付发起失败', error);
alert('支付发起失败,请查看控制台');
}
}
// 轮询查单
function startPolling(orderSn) {
const timer = setInterval(async () => {
const res = await fetch(`${API_BASE}/status/${orderSn}`);
const data = await res.json();
if (data.data.status === 'paid') {
clearInterval(timer);
alert('支付成功!');
window.location.reload();
}
}, 3000);
}
</script>
</body>
</html>

View File

@@ -1,58 +0,0 @@
# 全球通用支付模块 (Universal Payment Module) v3.0
这是一个**配置驱动 (Configuration-Driven)**、**API 优先 (API-First)** 的全球支付解决方案包。
它通过标准化的协议和 AI 指令,让任何语言的项目都能在 5 分钟内接入支付宝、微信、PayPal、Stripe 和 USDT。
## 📂 模块结构 (Directory Structure)
```
Universal_Payment_Module/
├── 1_核心设计_通用协议/ # [灵魂] 定义了支付的“法律”
│ ├── 标准配置模板.yaml # [新增] 填空即可配置所有支付参数
│ ├── API接口定义.md # [新增] 无论用什么语言,接口都长这样
│ ├── 业务逻辑与模型.md # 数据库表结构设计 (Order/PayTrade)
│ └── 接口注册指南.md # 申请 Key 的教程
├── 2_智能对接_AI指令/ # [工具] AI 编译器
│ └── 通用集成指令.md # 发给 AI自动生成代码
├── 3_逻辑参考_通用实现/ # [参考]
│ ├── 前端收银台Demo.html # [新增] 原生 JS 实现的通用收银台
│ ├── 后端源码/ # PHP 参考实现
│ └── 前端模板/ # Twig 参考模板
└── README.md # 本说明文档
```
## 🚀 极速对接 (Integration Guide)
### 第一步:配置 (Config)
1. 打开 `1_核心设计_通用协议/标准配置模板.yaml`
2. 将文件内容复制到你项目的配置文件中(如 `.env``config.py`)。
3. 填入你申请到的 `APP_ID`, `PRIVATE_KEY` 等参数。
### 第二步:生成代码 (Generate)
1. 复制 `2_智能对接_AI指令/通用集成指令.md` 的内容。
2. 打开 AI 助手,发送指令:
> "我的项目是用 **Python FastAPI** 写的。请根据上述文档,采用 **模式 A (嵌入式)** 为我集成支付功能。"
3. AI 会为你生成:
* `pip install ...` 命令
* `models.py` (数据库模型)
* `payment_router.py` (API 接口)
### 第三步:前端接入 (Frontend)
1. 参考 `3_逻辑参考_通用实现/前端收银台Demo.html`
2. 将其中的 `API_BASE` 替换为你后端实际的 API 地址。
3. 即可拥有一个支持 **扫码、跳转、加密货币支付** 的全功能收银台。
## 🌍 支持能力
| 渠道 | 能力 | 适用场景 |
| :--- | :--- | :--- |
| **Alipay / Wechat** | 扫码 / H5 / APP | 中国市场 (CNY) |
| **PayPal / Stripe** | 信用卡 / 订阅 | 全球市场 (USD/EUR...) |
| **USDT (TRC20)** | 链上转账 / 监听 | Web3 / 抗审查支付 |
## ✨ v3.0 优化亮点
* **配置驱动**: 不再需要改代码里的硬编码,所有参数通过配置文件注入。
* **API 契约**: 明确了输入输出格式,前后端对接不再扯皮。
* **前端 Demo**: 提供了一个不依赖任何框架的原生 JS 收银台,复制即用。

View File

@@ -1,152 +0,0 @@
"use client"
import Link from "next/link"
import { ChevronLeft, Clock, MessageCircle, BookOpen, Users, Award, TrendingUp } from "lucide-react"
import { Button } from "@/components/ui/button"
import { useState } from "react"
import { QRCodeModal } from "@/components/modules/marketing/qr-code-modal"
import { useStore } from "@/lib/store"
export default function AboutPage() {
const [showQRModal, setShowQRModal] = useState(false)
const { settings } = useStore()
const authorInfo = settings?.authorInfo || {
name: "卡若",
description: "连续创业者,私域运营专家",
liveTime: "06:00-09:00",
platform: "Soul派对房",
}
const milestones = [
{ year: "2012", event: "开始做游戏推广,从魔兽世界外挂代理起步" },
{ year: "2015", event: "转型电商,做天猫虚拟充值,月流水380万" },
{ year: "2017", event: "团队扩张到200人,年流水3000万" },
{ year: "2018", event: "公司破产,负债数百万,开始全国旅行反思" },
{ year: "2019", event: "重新出发,专注私域运营和个人IP" },
{ year: "2024", event: "在Soul派对房每日直播,分享真实商业故事" },
]
const stats = [
{ icon: BookOpen, value: "55+", label: "真实案例" },
{ icon: Users, value: "10000+", label: "派对房听众" },
{ icon: Award, value: "15年", label: "创业经验" },
{ icon: TrendingUp, value: "3000万", label: "最高年流水" },
]
return (
<div className="min-h-screen bg-[#0a1628] text-white pb-20">
{/* Header */}
<header className="sticky top-0 z-50 bg-[#0a1628]/90 backdrop-blur-md border-b border-gray-800">
<div className="max-w-4xl mx-auto px-4 py-4 flex items-center">
<Link href="/" className="flex items-center gap-2 text-gray-400 hover:text-white transition-colors">
<ChevronLeft className="w-5 h-5" />
<span></span>
</Link>
<h1 className="flex-1 text-center text-lg font-semibold"></h1>
<div className="w-16" />
</div>
</header>
<main className="max-w-4xl mx-auto px-4 py-8">
{/* Author Card */}
<div className="bg-gradient-to-br from-[#38bdac]/20 to-[#0f2137] rounded-2xl p-8 border border-[#38bdac]/30 mb-8">
<div className="flex flex-col md:flex-row items-center gap-6">
<div className="w-24 h-24 rounded-full bg-gradient-to-br from-[#38bdac] to-[#1a5a50] flex items-center justify-center text-4xl font-bold text-white">
{authorInfo.name.charAt(0)}
</div>
<div className="text-center md:text-left flex-1">
<h2 className="text-2xl font-bold text-white mb-2">{authorInfo.name}</h2>
<p className="text-gray-400 mb-4">{authorInfo.description}</p>
<div className="flex items-center justify-center md:justify-start gap-4 text-sm">
<span className="flex items-center gap-1 text-[#38bdac]">
<Clock className="w-4 h-4" />
{authorInfo.liveTime}
</span>
<span className="flex items-center gap-1 text-gray-400">
<MessageCircle className="w-4 h-4" />
{authorInfo.platform}
</span>
</div>
</div>
<Button onClick={() => setShowQRModal(true)} className="bg-[#38bdac] hover:bg-[#2da396] text-white">
<MessageCircle className="w-4 h-4 mr-2" />
</Button>
</div>
</div>
{/* Stats */}
<div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-8">
{stats.map((stat, index) => (
<div
key={index}
className="bg-[#0f2137]/60 backdrop-blur-md rounded-xl p-4 border border-gray-700/50 text-center"
>
<stat.icon className="w-6 h-6 text-[#38bdac] mx-auto mb-2" />
<p className="text-2xl font-bold text-white">{stat.value}</p>
<p className="text-gray-400 text-sm">{stat.label}</p>
</div>
))}
</div>
{/* Introduction */}
<div className="bg-[#0f2137]/60 backdrop-blur-md rounded-xl p-6 border border-gray-700/50 mb-8">
<h3 className="text-lg font-semibold text-white mb-4"></h3>
<div className="space-y-4 text-gray-300 leading-relaxed">
<p>"这不是一本教你成功的鸡汤书。"</p>
<p>
69,Soul派对房和几百个陌生人分享的真实故事 ,,
</p>
<p>
,,
</p>
<p className="text-[#38bdac] font-semibold">"社会不是靠努力,是靠洞察与选择。"</p>
<p>
,,,
</p>
</div>
</div>
{/* Timeline */}
<div className="bg-[#0f2137]/60 backdrop-blur-md rounded-xl p-6 border border-gray-700/50 mb-8">
<h3 className="text-lg font-semibold text-white mb-6"></h3>
<div className="space-y-4">
{milestones.map((item, index) => (
<div key={index} className="flex gap-4">
<div className="flex flex-col items-center">
<div className="w-3 h-3 rounded-full bg-[#38bdac]" />
{index < milestones.length - 1 && <div className="w-0.5 h-full bg-gray-700 mt-1" />}
</div>
<div className="pb-4">
<p className="text-[#38bdac] font-semibold">{item.year}</p>
<p className="text-gray-300">{item.event}</p>
</div>
</div>
))}
</div>
</div>
{/* CTA */}
<div className="bg-gradient-to-r from-[#38bdac]/10 to-[#1a3a4a]/50 rounded-2xl p-6 border border-[#38bdac]/30 text-center">
<h3 className="text-xl font-semibold text-white mb-2">?</h3>
<p className="text-gray-400 mb-6">6-9,Soul派对房免费分享</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<Button onClick={() => setShowQRModal(true)} className="bg-[#38bdac] hover:bg-[#2da396] text-white">
<MessageCircle className="w-4 h-4 mr-2" />
</Button>
<Link href="/chapters">
<Button variant="outline" className="border-gray-600 text-white hover:bg-gray-700/50 bg-transparent">
<BookOpen className="w-4 h-4 mr-2" />
</Button>
</Link>
</div>
</div>
</main>
<QRCodeModal isOpen={showQRModal} onClose={() => setShowQRModal(false)} />
</div>
)
}

BIN
app/admin/.DS_Store vendored

Binary file not shown.

View File

@@ -1,82 +0,0 @@
"use client"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
import { Textarea } from "@/components/ui/textarea"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
export default function ContentPage() {
return (
<div className="space-y-6">
<div className="flex justify-between items-center">
<h2 className="text-3xl font-bold tracking-tight"></h2>
<Button></Button>
</div>
<Tabs defaultValue="chapters" className="space-y-4">
<TabsList>
<TabsTrigger value="chapters"></TabsTrigger>
<TabsTrigger value="articles"></TabsTrigger>
<TabsTrigger value="hooks"></TabsTrigger>
</TabsList>
<TabsContent value="chapters" className="space-y-4">
<Card>
<CardHeader>
<CardTitle></CardTitle>
</CardHeader>
<CardContent>
<div className="rounded-md border p-4 text-center text-muted-foreground">
</div>
</CardContent>
</Card>
</TabsContent>
<TabsContent value="articles" className="space-y-4">
<Card>
<CardHeader>
<CardTitle></CardTitle>
</CardHeader>
<CardContent>
<div className="rounded-md border p-4 text-center text-muted-foreground">
</div>
</CardContent>
</Card>
</TabsContent>
<TabsContent value="hooks" className="space-y-4">
<Card>
<CardHeader>
<CardTitle></CardTitle>
</CardHeader>
<CardContent className="space-y-4">
<div className="grid w-full max-w-sm items-center gap-1.5">
<Label htmlFor="hook-chapter"></Label>
<Select defaultValue="3">
<SelectTrigger id="hook-chapter">
<SelectValue placeholder="选择章节" />
</SelectTrigger>
<SelectContent>
<SelectItem value="1"></SelectItem>
<SelectItem value="2"></SelectItem>
<SelectItem value="3"> ()</SelectItem>
</SelectContent>
</Select>
</div>
<div className="grid w-full gap-1.5">
<Label htmlFor="message"></Label>
<Textarea placeholder="输入引导用户加群的文案..." id="message" defaultValue="阅读更多精彩内容请加入Soul创业实验派对群..." />
</div>
<Button></Button>
</CardContent>
</Card>
</TabsContent>
</Tabs>
</div>
)
}

View File

@@ -1,77 +0,0 @@
"use client"
import Link from "next/link"
import { usePathname } from "next/navigation"
import { LayoutDashboard, FileText, Users, CreditCard, QrCode, Settings, LogOut, ChevronLeft } from "lucide-react"
import { useStore } from "@/lib/store"
import { useRouter } from "next/navigation"
import { useEffect } from "react"
export default function AdminLayout({ children }: { children: React.ReactNode }) {
const pathname = usePathname()
const router = useRouter()
const { user, isLoggedIn } = useStore()
// Simple admin check (in real app, use robust auth)
useEffect(() => {
if (!isLoggedIn) {
// router.push("/my") // Commented out for easier development access
}
}, [isLoggedIn, router])
const menuItems = [
{ icon: LayoutDashboard, label: "数据概览", href: "/admin" },
{ icon: FileText, label: "内容管理", href: "/admin/content" },
{ icon: Users, label: "用户管理", href: "/admin/users" },
{ icon: CreditCard, label: "支付配置", href: "/admin/payment" },
{ icon: QrCode, label: "二维码", href: "/admin/qrcodes" },
{ icon: Settings, label: "系统设置", href: "/admin/settings" },
]
return (
<div className="flex min-h-screen bg-[#0f172a]">
{/* Sidebar */}
<div className="w-64 bg-[#1e293b] text-white flex flex-col border-r border-gray-800">
<div className="p-6 border-b border-gray-800">
<h1 className="text-xl font-bold text-[#38bdac]"></h1>
<p className="text-xs text-gray-400 mt-1">Soul创业实验场</p>
</div>
<nav className="flex-1 p-4 space-y-2">
{menuItems.map((item) => {
const isActive = pathname === item.href
return (
<Link
key={item.href}
href={item.href}
className={`flex items-center gap-3 px-4 py-3 rounded-lg transition-colors ${
isActive
? "bg-[#38bdac]/10 text-[#38bdac] border border-[#38bdac]/20"
: "text-gray-400 hover:bg-gray-800 hover:text-white"
}`}
>
<item.icon className="w-5 h-5" />
<span className="text-sm font-medium">{item.label}</span>
</Link>
)
})}
</nav>
<div className="p-4 border-t border-gray-800">
<Link
href="/my"
className="flex items-center gap-3 px-4 py-3 text-gray-400 hover:text-white rounded-lg hover:bg-gray-800 transition-colors"
>
<LogOut className="w-5 h-5" />
<span className="text-sm font-medium"></span>
</Link>
</div>
</div>
{/* Main Content */}
<div className="flex-1 overflow-auto bg-[#0f172a]">
{children}
</div>
</div>
)
}

View File

@@ -1,3 +0,0 @@
export default function Loading() {
return null
}

View File

@@ -1,82 +0,0 @@
"use client"
import { useState } from "react"
import { useRouter } from "next/navigation"
import { Lock, User } from "lucide-react"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { useStore } from "@/lib/store"
export default function AdminLoginPage() {
const router = useRouter()
const { adminLogin } = useStore()
const [username, setUsername] = useState("")
const [password, setPassword] = useState("")
const [error, setError] = useState("")
const handleLogin = () => {
setError("")
const success = adminLogin(username, password)
if (success) {
router.push("/admin")
} else {
setError("用户名或密码错误")
}
}
return (
<div className="min-h-screen bg-[#0a1628] text-white flex items-center justify-center p-4">
<div className="w-full max-w-md">
{/* Logo */}
<div className="text-center mb-8">
<h1 className="text-2xl font-bold text-white mb-2"></h1>
<p className="text-gray-500">SOUL的创业实验场</p>
</div>
{/* Login form */}
<div className="bg-[#0f2137] rounded-2xl p-8 border border-gray-700/50">
<h2 className="text-xl font-semibold text-white mb-6 text-center"></h2>
<div className="space-y-4">
<div>
<label className="block text-gray-400 text-sm mb-2"></label>
<div className="relative">
<User className="absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-500" />
<Input
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
placeholder="请输入用户名"
className="pl-10 bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500"
/>
</div>
</div>
<div>
<label className="block text-gray-400 text-sm mb-2"></label>
<div className="relative">
<Lock className="absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-500" />
<Input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder="请输入密码"
className="pl-10 bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500"
onKeyDown={(e) => e.key === "Enter" && handleLogin()}
/>
</div>
</div>
{error && <p className="text-red-400 text-sm">{error}</p>}
<Button onClick={handleLogin} className="w-full bg-[#38bdac] hover:bg-[#2da396] text-white py-5">
</Button>
</div>
<p className="text-gray-500 text-xs text-center mt-6">默认账号: admin / key123456</p>
</div>
</div>
</div>
)
}

View File

@@ -1,96 +0,0 @@
"use client"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { useStore } from "@/lib/store"
import { Users, BookOpen, ShoppingBag, TrendingUp } from "lucide-react"
export default function AdminDashboard() {
const { getAllUsers, getAllPurchases } = useStore()
const users = getAllUsers()
const purchases = getAllPurchases()
const totalRevenue = purchases.reduce((sum, p) => sum + p.amount, 0)
const totalUsers = users.length
const totalPurchases = purchases.length
const stats = [
{ title: "总用户数", value: totalUsers, icon: Users, color: "text-blue-500" },
{ title: "总收入", value: `¥${totalRevenue.toFixed(2)}`, icon: TrendingUp, color: "text-green-500" },
{ title: "订单数", value: totalPurchases, icon: ShoppingBag, color: "text-purple-500" },
{ title: "转化率", value: `${totalUsers > 0 ? ((totalPurchases / totalUsers) * 100).toFixed(1) : 0}%`, icon: BookOpen, color: "text-orange-500" },
]
return (
<div className="p-8 max-w-7xl mx-auto text-white">
<h1 className="text-2xl font-bold mb-8"></h1>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
{stats.map((stat, index) => (
<Card key={index} className="bg-[#1e293b] border-gray-700">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<CardTitle className="text-sm font-medium text-gray-400">{stat.title}</CardTitle>
<stat.icon className={`w-4 h-4 ${stat.color}`} />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold text-white">{stat.value}</div>
</CardContent>
</Card>
))}
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
<Card className="bg-[#1e293b] border-gray-700">
<CardHeader>
<CardTitle className="text-white"></CardTitle>
</CardHeader>
<CardContent>
<div className="space-y-4">
{purchases.slice(-5).reverse().map((p) => (
<div key={p.id} className="flex items-center justify-between p-4 bg-[#0f172a] rounded-lg">
<div>
<p className="text-sm font-medium text-white">{p.sectionTitle || "整本购买"}</p>
<p className="text-xs text-gray-400">{new Date(p.createdAt).toLocaleString()}</p>
</div>
<div className="text-right">
<p className="text-sm font-bold text-[#38bdac]">+¥{p.amount}</p>
<p className="text-xs text-gray-500">{p.paymentMethod}</p>
</div>
</div>
))}
{purchases.length === 0 && (
<p className="text-gray-500 text-center py-4"></p>
)}
</div>
</CardContent>
</Card>
<Card className="bg-[#1e293b] border-gray-700">
<CardHeader>
<CardTitle className="text-white"></CardTitle>
</CardHeader>
<CardContent>
<div className="space-y-4">
{users.slice(-5).reverse().map((u) => (
<div key={u.id} className="flex items-center justify-between p-4 bg-[#0f172a] rounded-lg">
<div className="flex items-center gap-3">
<div className="w-8 h-8 rounded-full bg-gray-700 flex items-center justify-center text-xs">
{u.nickname.charAt(0)}
</div>
<div>
<p className="text-sm font-medium text-white">{u.nickname}</p>
<p className="text-xs text-gray-400">{u.phone}</p>
</div>
</div>
<p className="text-xs text-gray-500">{new Date(u.createdAt).toLocaleDateString()}</p>
</div>
))}
{users.length === 0 && (
<p className="text-gray-500 text-center py-4"></p>
)}
</div>
</CardContent>
</Card>
</div>
</div>
)
}

View File

@@ -1,248 +0,0 @@
"use client"
import { useState, useEffect } from "react"
import { useStore } from "@/lib/store"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Switch } from "@/components/ui/switch"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
import { Save, RefreshCw } from "lucide-react"
export default function PaymentConfigPage() {
const { settings, updateSettings, fetchSettings } = useStore()
const [loading, setLoading] = useState(false)
const [localSettings, setLocalSettings] = useState(settings.paymentMethods)
// Sync with store on mount
useEffect(() => {
setLocalSettings(settings.paymentMethods)
}, [settings.paymentMethods])
const handleSave = async () => {
setLoading(true)
// Update store (and local storage)
updateSettings({ paymentMethods: localSettings })
// Simulate API call delay
await new Promise(resolve => setTimeout(resolve, 800))
setLoading(false)
alert("配置已保存!")
}
const handleRefresh = async () => {
setLoading(true)
await fetchSettings()
setLoading(false)
}
const updateWechat = (field: string, value: any) => {
setLocalSettings(prev => ({
...prev,
wechat: { ...prev.wechat, [field]: value }
}))
}
const updateAlipay = (field: string, value: any) => {
setLocalSettings(prev => ({
...prev,
alipay: { ...prev.alipay, [field]: value }
}))
}
const updateUsdt = (field: string, value: any) => {
setLocalSettings(prev => ({
...prev,
usdt: { ...prev.usdt, [field]: value }
}))
}
return (
<div className="p-8 max-w-5xl mx-auto text-white">
<div className="flex justify-between items-center mb-8">
<div>
<h1 className="text-2xl font-bold mb-2"></h1>
<p className="text-gray-400">USDT支付参数</p>
</div>
<div className="flex gap-4">
<Button variant="outline" onClick={handleRefresh} className="border-gray-600 text-gray-300 hover:text-white bg-transparent">
<RefreshCw className={`w-4 h-4 mr-2 ${loading ? 'animate-spin' : ''}`} />
</Button>
<Button onClick={handleSave} className="bg-[#38bdac] hover:bg-[#2da396] text-white">
<Save className="w-4 h-4 mr-2" />
</Button>
</div>
</div>
<div className="grid grid-cols-1 gap-8">
{/* Wechat Pay */}
<Card className="bg-[#1e293b] border-gray-700">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<div className="space-y-1">
<CardTitle className="text-[#07C160] flex items-center gap-2">
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24"><path d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178 1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 0 1 .598.082l1.584.926a.272.272 0 0 0 .14.047c.134 0 .24-.111.24-.247 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 0 1-.023-.156.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.269-.03-.406-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982z"/></svg>
</CardTitle>
<CardDescription className="text-gray-400">API密钥</CardDescription>
</div>
<Switch
checked={localSettings.wechat.enabled}
onCheckedChange={(c) => updateWechat('enabled', c)}
/>
</CardHeader>
<CardContent className="space-y-4">
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label className="text-gray-300"> AppID</Label>
<Input
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="wx..."
value={localSettings.wechat.websiteAppId || ''}
onChange={(e) => updateWechat('websiteAppId', e.target.value)}
/>
</div>
<div className="space-y-2">
<Label className="text-gray-300"> AppSecret</Label>
<Input
type="password"
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="......"
value={localSettings.wechat.websiteAppSecret || ''}
onChange={(e) => updateWechat('websiteAppSecret', e.target.value)}
/>
</div>
<div className="space-y-2">
<Label className="text-gray-300"> (MchId)</Label>
<Input
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="160..."
value={localSettings.wechat.merchantId || ''}
onChange={(e) => updateWechat('merchantId', e.target.value)}
/>
</div>
<div className="space-y-2">
<Label className="text-gray-300">API v3 </Label>
<Input
type="password"
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="......"
value={localSettings.wechat.apiKey || ''}
onChange={(e) => updateWechat('apiKey', e.target.value)}
/>
</div>
</div>
<div className="space-y-2">
<Label className="text-gray-300"> URL ()</Label>
<Input
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="/images/wechat-pay.png"
value={localSettings.wechat.qrCode || ''}
onChange={(e) => updateWechat('qrCode', e.target.value)}
/>
<p className="text-xs text-gray-500"></p>
</div>
</CardContent>
</Card>
{/* Alipay */}
<Card className="bg-[#1e293b] border-gray-700">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<div className="space-y-1">
<CardTitle className="text-[#1677FF] flex items-center gap-2">
<svg className="w-6 h-6" fill="currentColor" viewBox="0 0 24 24"><path d="M8.77 20.62l9.92-4.33c-.12-.33-.24-.66-.38-.99-.14-.33-.3-.66-.47-.99H8.08c-2.2 0-3.99-1.79-3.99-3.99V8.08c0-2.2 1.79-3.99 3.99-3.99h7.84c2.2 0 3.99 1.79 3.99 3.99v2.24h-8.66c-.55 0-1 .45-1 1s.45 1 1 1h10.66c-.18 1.73-.71 3.36-1.53 4.83l-2.76 1.2c-.74-1.69-1.74-3.24-2.93-4.6-.52-.59-1.11-1.13-1.76-1.59H4.09v4.24c0 2.2 1.79 3.99 3.99 3.99h.69v.23z"/></svg>
</CardTitle>
<CardDescription className="text-gray-400">PID及密钥</CardDescription>
</div>
<Switch
checked={localSettings.alipay.enabled}
onCheckedChange={(c) => updateAlipay('enabled', c)}
/>
</CardHeader>
<CardContent className="space-y-4">
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label className="text-gray-300"> (PID)</Label>
<Input
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="2088..."
value={localSettings.alipay.partnerId || ''}
onChange={(e) => updateAlipay('partnerId', e.target.value)}
/>
</div>
<div className="space-y-2">
<Label className="text-gray-300"> (Key)</Label>
<Input
type="password"
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="......"
value={localSettings.alipay.securityKey || ''}
onChange={(e) => updateAlipay('securityKey', e.target.value)}
/>
</div>
</div>
<div className="space-y-2">
<Label className="text-gray-300"> URL ()</Label>
<Input
className="bg-[#0f172a] border-gray-600 text-white"
placeholder="/images/alipay.png"
value={localSettings.alipay.qrCode || ''}
onChange={(e) => updateAlipay('qrCode', e.target.value)}
/>
</div>
</CardContent>
</Card>
{/* USDT */}
<Card className="bg-[#1e293b] border-gray-700">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<div className="space-y-1">
<CardTitle className="text-[#26A17B] flex items-center gap-2">
<span className="font-bold"></span> USDT支付
</CardTitle>
<CardDescription className="text-gray-400"></CardDescription>
</div>
<Switch
checked={localSettings.usdt.enabled}
onCheckedChange={(c) => updateUsdt('enabled', c)}
/>
</CardHeader>
<CardContent className="space-y-4">
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label className="text-gray-300"></Label>
<Input
className="bg-[#0f172a] border-gray-600 text-white"
value={localSettings.usdt.network || 'TRC20'}
onChange={(e) => updateUsdt('network', e.target.value)}
/>
</div>
<div className="space-y-2">
<Label className="text-gray-300"> (USD -&gt; CNY)</Label>
<Input
type="number"
className="bg-[#0f172a] border-gray-600 text-white"
value={localSettings.usdt.exchangeRate || 7.2}
onChange={(e) => updateUsdt('exchangeRate', parseFloat(e.target.value))}
/>
</div>
</div>
<div className="space-y-2">
<Label className="text-gray-300"></Label>
<Input
className="bg-[#0f172a] border-gray-600 text-white font-mono"
placeholder="T..."
value={localSettings.usdt.address || ''}
onChange={(e) => updateUsdt('address', e.target.value)}
/>
</div>
</CardContent>
</Card>
</div>
</div>
)
}

View File

@@ -1,58 +0,0 @@
"use client"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Label } from "@/components/ui/label"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { Separator } from "@/components/ui/separator"
export default function QRCodesPage() {
return (
<div className="space-y-6">
<div>
<h2 className="text-3xl font-bold tracking-tight"></h2>
<p className="text-muted-foreground"></p>
</div>
<div className="grid gap-6 md:grid-cols-2">
<Card>
<CardHeader>
<CardTitle></CardTitle>
<CardDescription>/</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="flex flex-col items-center justify-center border-2 border-dashed rounded-lg p-6 h-48 bg-slate-50">
<span className="text-muted-foreground"></span>
</div>
<div className="grid w-full max-w-sm items-center gap-1.5">
<Label htmlFor="traffic-qr"></Label>
<Input id="traffic-qr" type="file" />
</div>
<Button className="w-full"></Button>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle></CardTitle>
<CardDescription></CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="flex flex-col items-center justify-center border-2 border-dashed rounded-lg p-6 h-48 bg-slate-50">
<span className="text-muted-foreground"></span>
</div>
<div className="grid w-full max-w-sm items-center gap-1.5">
<Label htmlFor="group-qr"></Label>
<Input id="group-qr" type="file" />
</div>
<div className="grid w-full max-w-sm items-center gap-1.5">
<Label htmlFor="group-url"> ()</Label>
<Input id="group-url" placeholder="https://..." defaultValue="https://soul.cn/party" />
</div>
<Button className="w-full"></Button>
</CardContent>
</Card>
</div>
</div>
)
}

View File

@@ -1,66 +0,0 @@
"use client"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Label } from "@/components/ui/label"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { Switch } from "@/components/ui/switch"
export default function SettingsPage() {
return (
<div className="space-y-6">
<div>
<h2 className="text-3xl font-bold tracking-tight"></h2>
<p className="text-muted-foreground"></p>
</div>
<Card>
<CardHeader>
<CardTitle></CardTitle>
<CardDescription></CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="grid gap-2">
<Label htmlFor="site-name"></Label>
<Input id="site-name" defaultValue="一场Soul的创业实验" />
</div>
<div className="grid gap-2">
<Label htmlFor="author"></Label>
<Input id="author" defaultValue="卡若" />
</div>
<Button></Button>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle></CardTitle>
<CardDescription></CardDescription>
</CardHeader>
<CardContent className="space-y-6">
<div className="flex items-center justify-between space-x-2">
<Label htmlFor="maintenance-mode" className="flex flex-col space-y-1">
<span></span>
<span className="font-normal text-xs text-muted-foreground"></span>
</Label>
<Switch id="maintenance-mode" />
</div>
<div className="flex items-center justify-between space-x-2">
<Label htmlFor="payment-enabled" className="flex flex-col space-y-1">
<span></span>
<span className="font-normal text-xs text-muted-foreground"></span>
</Label>
<Switch id="payment-enabled" defaultChecked />
</div>
<div className="flex items-center justify-between space-x-2">
<Label htmlFor="referral-enabled" className="flex flex-col space-y-1">
<span></span>
<span className="font-normal text-xs text-muted-foreground"></span>
</Label>
<Switch id="referral-enabled" defaultChecked />
</div>
</CardContent>
</Card>
</div>
)
}

View File

@@ -1,59 +0,0 @@
"use client"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
export default function UsersPage() {
return (
<div className="space-y-6">
<div className="flex justify-between items-center">
<h2 className="text-3xl font-bold tracking-tight"></h2>
<div className="flex w-full max-w-sm items-center space-x-2">
<Input type="text" placeholder="搜索用户..." />
<Button type="submit"></Button>
</div>
</div>
<Card>
<CardHeader>
<CardTitle></CardTitle>
</CardHeader>
<CardContent>
<Table>
<TableHeader>
<TableRow>
<TableHead className="w-[100px]">ID</TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead className="text-right"></TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell className="font-medium">1001</TableCell>
<TableCell>A</TableCell>
<TableCell className="text-green-600"></TableCell>
<TableCell>2025-12-28</TableCell>
<TableCell className="text-right">
<Button variant="ghost" size="sm"></Button>
</TableCell>
</TableRow>
<TableRow>
<TableCell className="font-medium">1002</TableCell>
<TableCell>_8392</TableCell>
<TableCell className="text-yellow-600"></TableCell>
<TableCell>2025-12-29</TableCell>
<TableCell className="text-right">
<Button variant="ghost" size="sm"></Button>
</TableCell>
</TableRow>
</TableBody>
</Table>
</CardContent>
</Card>
</div>
)
}

View File

@@ -1,135 +0,0 @@
"use client"
import { useState, useEffect } from "react"
import { useStore, type Withdrawal } from "@/lib/store"
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Check, X, Clock } from "lucide-react"
export default function WithdrawalsPage() {
const { withdrawals, completeWithdrawal } = useStore()
const [mounted, setMounted] = useState(false)
useEffect(() => {
setMounted(true)
}, [])
if (!mounted) return null
const pendingWithdrawals = withdrawals?.filter(w => w.status === "pending") || []
const historyWithdrawals = withdrawals?.filter(w => w.status !== "pending").sort((a, b) =>
new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
) || []
const handleApprove = (id: string) => {
if (confirm("确认打款并完成此提现申请吗?")) {
completeWithdrawal(id)
}
}
return (
<div className="p-6 max-w-6xl mx-auto">
<h1 className="text-2xl font-bold mb-6"></h1>
<div className="grid gap-6">
{/* Pending Requests */}
<Card>
<CardHeader>
<CardTitle className="flex items-center gap-2">
<Clock className="w-5 h-5 text-orange-500" />
({pendingWithdrawals.length})
</CardTitle>
</CardHeader>
<CardContent>
{pendingWithdrawals.length === 0 ? (
<p className="text-gray-500 text-center py-8"></p>
) : (
<div className="overflow-x-auto">
<table className="w-full text-sm text-left">
<thead className="bg-gray-50 text-gray-700">
<tr>
<th className="p-3"></th>
<th className="p-3">ID</th>
<th className="p-3"></th>
<th className="p-3"></th>
<th className="p-3"></th>
<th className="p-3"></th>
<th className="p-3 text-right"></th>
</tr>
</thead>
<tbody className="divide-y">
{pendingWithdrawals.map((w) => (
<tr key={w.id} className="hover:bg-gray-50">
<td className="p-3">{new Date(w.createdAt).toLocaleString()}</td>
<td className="p-3 font-mono text-xs">{w.userId.slice(0, 8)}...</td>
<td className="p-3 font-medium">{w.name}</td>
<td className="p-3">
<span className={`px-2 py-1 rounded-full text-xs text-white ${w.method === "wechat" ? "bg-green-600" : "bg-blue-600"}`}>
{w.method === "wechat" ? "微信" : "支付宝"}
</span>
</td>
<td className="p-3 font-mono">{w.account}</td>
<td className="p-3 font-bold text-orange-600">¥{w.amount.toFixed(2)}</td>
<td className="p-3 text-right">
<Button size="sm" onClick={() => handleApprove(w.id)} className="bg-green-600 hover:bg-green-700 text-white">
<Check className="w-4 h-4 mr-1" />
</Button>
</td>
</tr>
))}
</tbody>
</table>
</div>
)}
</CardContent>
</Card>
{/* History */}
<Card>
<CardHeader>
<CardTitle></CardTitle>
</CardHeader>
<CardContent>
{historyWithdrawals.length === 0 ? (
<p className="text-gray-500 text-center py-8"></p>
) : (
<div className="overflow-x-auto">
<table className="w-full text-sm text-left">
<thead className="bg-gray-50 text-gray-700">
<tr>
<th className="p-3"></th>
<th className="p-3"></th>
<th className="p-3"></th>
<th className="p-3"></th>
<th className="p-3"></th>
<th className="p-3"></th>
</tr>
</thead>
<tbody className="divide-y">
{historyWithdrawals.map((w) => (
<tr key={w.id} className="hover:bg-gray-50">
<td className="p-3 text-gray-500">{new Date(w.createdAt).toLocaleString()}</td>
<td className="p-3 text-gray-500">{w.completedAt ? new Date(w.completedAt).toLocaleString() : "-"}</td>
<td className="p-3">{w.name}</td>
<td className="p-3">
{w.method === "wechat" ? "微信" : "支付宝"}
</td>
<td className="p-3 font-medium">¥{w.amount.toFixed(2)}</td>
<td className="p-3">
<span className="px-2 py-1 rounded-full text-xs text-green-600 border border-green-200 bg-green-50">
</span>
</td>
</tr>
))}
</tbody>
</table>
</div>
)}
</CardContent>
</Card>
</div>
</div>
)
}

BIN
app/api/.DS_Store vendored

Binary file not shown.

View File

@@ -1,55 +0,0 @@
import { NextResponse } from 'next/server';
export async function GET() {
const config = {
paymentMethods: {
wechat: {
enabled: true,
qrCode: "/images/wechat-pay.png",
account: "卡若",
appId: process.env.TENCENT_APP_ID || "1251077262", // From .env or default
// 敏感信息后端处理,不完全暴露给前端
},
alipay: {
enabled: true,
qrCode: "/images/alipay.png",
account: "卡若",
appId: process.env.ALIPAY_ACCESS_KEY_ID || "LTAI5t9zkiWmFtHG8qmtdysW", // Using Access Key as placeholder ID
},
usdt: {
enabled: true,
network: "TRC20",
address: process.env.USDT_WALLET_ADDRESS || "TWeq9xxxxxxxxxxxxxxxxxxxx",
exchangeRate: 7.2
},
paypal: {
enabled: false,
email: process.env.PAYPAL_CLIENT_ID || "",
exchangeRate: 7.2
}
},
marketing: {
partyGroup: {
url: "https://soul.cn/party",
liveCodeUrl: "https://soul.cn/party-live",
qrCode: "/images/party-group-qr.png"
},
banner: {
text: "每日早上6-9点Soul派对房不见不散",
visible: true
}
},
authorInfo: {
name: "卡若",
description: "私域运营与技术公司主理人",
liveTime: "06:00-09:00",
platform: "Soul"
},
system: {
version: "1.0.0",
maintenance: false
}
};
return NextResponse.json(config);
}

View File

@@ -1,28 +0,0 @@
import { type NextRequest, NextResponse } from "next/server"
import fs from "fs"
import path from "path"
export async function GET(request: NextRequest) {
const searchParams = request.nextUrl.searchParams
const filePath = searchParams.get("path")
const sectionId = searchParams.get("sectionId")
if (!filePath && !sectionId) {
return NextResponse.json({ error: "Path or sectionId is required" }, { status: 400 })
}
if (filePath?.startsWith("custom/")) {
// Custom sections have their content stored in localStorage on the client
// Return empty content, client will handle it
return NextResponse.json({ content: "", isCustom: true })
}
try {
const fullPath = path.join(process.cwd(), filePath || "")
const content = fs.readFileSync(fullPath, "utf-8")
return NextResponse.json({ content, isCustom: false })
} catch (error) {
console.error("Error reading file:", error)
return NextResponse.json({ error: "File not found" }, { status: 404 })
}
}

View File

@@ -1,55 +0,0 @@
import { NextResponse, type NextRequest } from "next/server"
import { getDocumentationCatalog } from "@/lib/documentation/catalog"
import { captureScreenshots } from "@/lib/documentation/screenshot"
import { renderDocumentationDocx } from "@/lib/documentation/docx"
export const runtime = "nodejs"
function getBaseUrl(request: NextRequest) {
const proto = request.headers.get("x-forwarded-proto") || "http"
const host = request.headers.get("x-forwarded-host") || request.headers.get("host")
if (!host) return null
return `${proto}://${host}`
}
function isAuthorized(request: NextRequest) {
const token = process.env.DOCUMENTATION_TOKEN
// If no token is configured, allow access (internal tool)
if (!token || token === "") return true
const header = request.headers.get("x-documentation-token")
const query = request.nextUrl.searchParams.get("token")
return header === token || query === token
}
export async function POST(request: NextRequest) {
if (!isAuthorized(request)) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
}
const baseUrl = getBaseUrl(request)
if (!baseUrl) {
return NextResponse.json({ error: "Host is required" }, { status: 400 })
}
try {
const pages = getDocumentationCatalog()
const screenshots = await captureScreenshots(pages, {
baseUrl,
timeoutMs: 60000,
viewport: { width: 430, height: 932 },
})
const docxBuffer = await renderDocumentationDocx(screenshots)
return new NextResponse(docxBuffer, {
status: 200,
headers: {
"Content-Type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"Content-Disposition": `attachment; filename="app-documentation.docx"`,
"Cache-Control": "no-store",
},
})
} catch (error) {
const message = error instanceof Error ? error.message : String(error)
return NextResponse.json({ error: message }, { status: 500 })
}
}

View File

@@ -1,12 +0,0 @@
import { NextResponse } from "next/server"
import { getBookStructure } from "@/lib/book-file-system"
export async function GET() {
try {
const structure = getBookStructure()
return NextResponse.json(structure)
} catch (error) {
console.error("Error generating menu:", error)
return NextResponse.json({ error: "Failed to generate menu" }, { status: 500 })
}
}

View File

@@ -1,9 +0,0 @@
import { paymentService } from '../../../services/paymentService';
import { connectDB } from '../../../lib/db';
export async function POST(req) {
await connectDB();
const { orderId, gateway } = await req.json();
const result = await paymentService.pay(orderId, gateway);
return Response.json({ success: true, result });
}

View File

@@ -1,9 +0,0 @@
import { paymentService } from '../../../services/paymentService';
import { connectDB } from '../../../lib/db';
export async function POST(req) {
await connectDB();
const data = await req.json();
const order = await paymentService.createOrder(data);
return Response.json({ success: true, order });
}

View File

@@ -1,20 +0,0 @@
import { Order } from '../../../../models/Order';
import { connectDB } from '../../../../lib/db';
export async function POST(req, { params }) {
await connectDB();
const { gateway } = await params;
const data = await req.json();
// 根据gateway处理通知并更新订单状态
// 这是一个简化版本实际需要验证签名和处理不同gateway的逻辑
const orderId = data.out_trade_no || data.order_id || data.metadata?.order_id;
if (orderId) {
const order = await Order.findById(orderId);
if (order) {
order.status = 'paid';
await order.save();
}
}
return Response.json({ success: true });
}

View File

@@ -1,54 +0,0 @@
import Link from "next/link"
import { ChevronLeft } from "lucide-react"
import { Button } from "@/components/ui/button"
import { specialSections, FULL_BOOK_PRICE } from "@/lib/book-data"
import { getBookStructure } from "@/lib/book-file-system"
import { ChaptersList } from "@/components/chapters-list"
import { BuyFullBookButton } from "@/components/buy-full-book-button"
export const dynamic = 'force-dynamic';
export default async function ChaptersPage() {
const parts = getBookStructure()
// Format special sections for the client component
const specialSectionsData = {
preface: { title: specialSections.preface.title },
epilogue: { title: specialSections.epilogue.title }
}
return (
<div className="min-h-screen bg-[#0a1628] text-white">
{/* Header */}
<header className="sticky top-0 z-50 bg-[#0a1628]/90 backdrop-blur-md border-b border-gray-800">
<div className="max-w-4xl mx-auto px-4 py-4 flex items-center justify-between">
<Link href="/" className="flex items-center gap-2 text-gray-400 hover:text-white transition-colors">
<ChevronLeft className="w-5 h-5" />
<span></span>
</Link>
<h1 className="text-lg font-semibold"></h1>
<BuyFullBookButton size="sm" price={9.9} className="bg-[#38bdac] hover:bg-[#2da396] text-white" />
</div>
</header>
{/* Content */}
<main className="max-w-4xl mx-auto px-4 py-8">
<ChaptersList parts={parts} specialSections={specialSectionsData} />
{/* Bottom CTA */}
<div className="mt-12 bg-gradient-to-r from-[#38bdac]/20 to-[#0f2137] rounded-2xl p-6 border border-[#38bdac]/30">
<div className="flex flex-col md:flex-row items-center justify-between gap-4">
<div>
<h3 className="text-white text-lg font-semibold mb-1">,82%</h3>
<p className="text-gray-400">55,,</p>
</div>
<BuyFullBookButton size="lg" price={9.9} className="bg-[#38bdac] hover:bg-[#2da396] text-white px-8">
¥9.9
</BuyFullBookButton>
</div>
</div>
</main>
</div>
)
}

View File

@@ -1 +0,0 @@
import React from 'react';\nimport { Button } from '@/components/ui/button';\nimport { paymentService } from '../services/paymentService';\n\nexport function PaymentTest() {\n const handleTestPayment = async () => {\n try {\n const order = { amount: 9.9, currency: 'CNY' };\n const result = await paymentService.pay(order);\n console.log('Payment result:', result);\n } catch (error) {\n console.error('Payment error:', error);\n }\n };\n\n return (\n <div>\n <Button onClick={handleTestPayment}>测试支付</Button>\n </div>\n );\n}\n

View File

@@ -1 +0,0 @@
import { render, fireEvent } from '@testing-library/react';\nimport { PaymentTest } from '../PaymentTest';\n\ndescribe('PaymentTest Component', () => {\n it('renders without crashing', () => {\n const { getByText } = render(<PaymentTest />);\n expect(getByText('测试支付')).toBeInTheDocument();\n });\n\n it('calls handleTestPayment on button click', () => {\n const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {});\n const { getByText } = render(<PaymentTest />);\n fireEvent.click(getByText('测试支付'));\n expect(consoleSpy).toHaveBeenCalledWith('Payment result:', expect.anything());\n consoleSpy.mockRestore();\n });\n});\n

View File

@@ -1,112 +0,0 @@
"use client"
import Link from "next/link"
import { ArrowLeft, CreditCard, Share2, FileText, Code } from "lucide-react"
export default function DocsPage() {
return (
<main className="min-h-screen bg-[#0a1628] text-white pb-20">
<div className="sticky top-0 z-10 bg-[#0a1628]/95 backdrop-blur-md border-b border-gray-700/50">
<div className="max-w-2xl mx-auto flex items-center gap-4 p-4">
<Link href="/" className="p-2 -ml-2">
<ArrowLeft className="w-5 h-5" />
</Link>
<h1 className="text-lg font-semibold"></h1>
</div>
</div>
<div className="p-4">
<div className="max-w-2xl mx-auto space-y-6">
{/* Payment Configuration */}
<section className="bg-[#0f2137]/60 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<CreditCard className="w-6 h-6 text-[#38bdac]" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-4 text-gray-300 text-sm">
<div>
<h3 className="text-white font-medium mb-2"></h3>
<p className="mb-2">1. AppID和AppSecret</p>
<p className="mb-2">2. AppID和AppSecret</p>
<p className="mb-2">3. API密钥</p>
<div className="bg-[#0a1628] rounded-lg p-3 mt-2">
<code className="text-xs text-gray-400">
{`网站AppID: wx432c93e275548671
服务号AppID: wx7c0dbf34ddba300d
商户号: 1318592501`}
</code>
</div>
</div>
<div>
<h3 className="text-white font-medium mb-2"></h3>
<p className="mb-2">1. PID</p>
<p className="mb-2">2. Key</p>
<p className="mb-2">3. </p>
<div className="bg-[#0a1628] rounded-lg p-3 mt-2">
<code className="text-xs text-gray-400">
{`合作者身份(PID): 2088511801157159
安全校验码(Key): lz6ey1h3kl9...`}
</code>
</div>
</div>
</div>
</section>
{/* Distribution System */}
<section className="bg-[#0f2137]/60 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<Share2 className="w-6 h-6 text-[#38bdac]" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-4 text-gray-300 text-sm">
<p>(0-100%)</p>
<div className="bg-[#0a1628] rounded-lg p-4">
<p className="text-white mb-2">:</p>
<code className="text-[#38bdac]"> = × %</code>
</div>
<p>: 用户A通过B的邀请码购买¥9.9,90%</p>
<p>B获得 9.9 × 90% = ¥8.91 </p>
</div>
</section>
{/* Withdrawal */}
<section className="bg-[#0f2137]/60 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<FileText className="w-6 h-6 text-[#38bdac]" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3 text-gray-300 text-sm">
<p>1. : ¥10</p>
<p>2. 提现周期: T+1</p>
<p>3. 支持提现方式: 微信</p>
<p>4. 提现手续费: 0%</p>
</div>
</section>
{/* API Reference */}
<section className="bg-[#0f2137]/60 rounded-xl p-6">
<div className="flex items-center gap-3 mb-4">
<Code className="w-6 h-6 text-[#38bdac]" />
<h2 className="text-xl font-semibold">API接口</h2>
</div>
<div className="space-y-4 text-gray-300 text-sm">
<div className="bg-[#0a1628] rounded-lg p-4">
<p className="text-gray-400 mb-2"></p>
<code className="text-[#38bdac]">GET /api/content?id=1.1</code>
</div>
<div className="bg-[#0a1628] rounded-lg p-4">
<p className="text-gray-400 mb-2"></p>
<code className="text-[#38bdac]">POST /api/feishu/sync</code>
</div>
</div>
</section>
</div>
</div>
</main>
)
}

View File

@@ -1,3 +0,0 @@
export default function Loading() {
return null
}

View File

@@ -1,78 +0,0 @@
"use client"
import { useEffect, useMemo, useState } from "react"
import { useSearchParams } from "next/navigation"
export default function DocumentationCapturePage() {
const searchParams = useSearchParams()
const path = searchParams.get("path") || "/"
const [loaded, setLoaded] = useState(false)
const [timeoutReached, setTimeoutReached] = useState(false)
const [loadError, setLoadError] = useState<string | null>(null)
const src = useMemo(() => {
if (!path.startsWith("/")) return `/${path}`
return path
}, [path])
useEffect(() => {
setLoaded(false)
setTimeoutReached(false)
setLoadError(null)
const timer = window.setTimeout(() => {
if (!loaded) {
setTimeoutReached(true)
}
}, 60000)
return () => window.clearTimeout(timer)
}, [src, loaded])
const handleLoad = () => {
setLoaded(true)
setTimeoutReached(false)
}
const handleError = () => {
setLoadError("页面加载失败")
}
return (
<main className="min-h-screen bg-white flex items-center justify-center">
<div className="w-[430px] h-[932px] border border-gray-200 bg-white relative overflow-hidden">
<iframe
data-doc-iframe="true"
data-loaded={loaded ? "true" : "false"}
src={src}
className="w-full h-full border-0"
onLoad={handleLoad}
onError={handleError}
title={`Capture: ${path}`}
sandbox="allow-scripts allow-same-origin allow-forms allow-popups"
/>
{!loaded && !timeoutReached && !loadError && (
<div className="absolute inset-0 bg-white flex items-center justify-center">
<div className="text-center">
<div className="w-8 h-8 border-2 border-gray-300 border-t-gray-600 rounded-full animate-spin mx-auto mb-2" />
<p className="text-sm text-gray-500">...</p>
</div>
</div>
)}
</div>
{(timeoutReached || loadError) && (
<div className="fixed left-0 top-0 right-0 bg-red-600 text-white text-sm px-3 py-2 text-center">
{loadError || "页面加载超时"}
</div>
)}
{loaded && (
<div className="fixed left-0 bottom-0 right-0 bg-green-600 text-white text-xs px-3 py-1 text-center">
: {path}
</div>
)}
</main>
)
}

View File

@@ -1,306 +0,0 @@
"use client"
import { useCallback, useEffect, useMemo, useRef, useState } from "react"
import { getDocumentationCatalog, type DocumentationPage } from "@/lib/documentation/catalog"
import { FileText, Download, Loader2, CheckCircle, XCircle, Eye, RefreshCw } from "lucide-react"
type PageStatus = "pending" | "loading" | "success" | "error"
type PageState = {
page: DocumentationPage
status: PageStatus
error?: string
}
export default function DocumentationToolPage() {
const [isGenerating, setIsGenerating] = useState(false)
const [error, setError] = useState<string | null>(null)
const [progress, setProgress] = useState(0)
const [currentPage, setCurrentPage] = useState<string | null>(null)
const [pageStates, setPageStates] = useState<PageState[]>([])
const [previewPath, setPreviewPath] = useState<string | null>(null)
const [showPreview, setShowPreview] = useState(false)
const iframeRef = useRef<HTMLIFrameElement>(null)
const pages = useMemo(() => getDocumentationCatalog(), [])
const groupedPages = useMemo(() => {
const groups: Record<string, DocumentationPage[]> = {}
for (const page of pages) {
if (!groups[page.group]) groups[page.group] = []
groups[page.group].push(page)
}
return groups
}, [pages])
useEffect(() => {
setPageStates(pages.map((page) => ({ page, status: "pending" })))
}, [pages])
const handleGenerate = async () => {
setError(null)
setIsGenerating(true)
setProgress(0)
setCurrentPage(null)
setPageStates(pages.map((page) => ({ page, status: "loading" })))
try {
// Simulate progress while waiting for the API
let progressValue = 0
const progressInterval = setInterval(() => {
progressValue += 2
const pageIndex = Math.floor((progressValue / 100) * pages.length)
const nextPage = pages[Math.min(pageIndex, pages.length - 1)]
if (nextPage) setCurrentPage(nextPage.title)
setProgress(Math.min(progressValue, 90))
// Update page states to show progress
setPageStates((prev) =>
prev.map((s, idx) => ({
...s,
status: idx < pageIndex ? "success" : idx === pageIndex ? "loading" : "pending",
})),
)
}, 800)
// Get token from URL if provided
const urlParams = new URLSearchParams(window.location.search)
const token = urlParams.get("token") || ""
const response = await fetch(`/api/documentation/generate${token ? `?token=${token}` : ""}`, {
method: "POST",
headers: {
"Content-Type": "application/json",
...(token ? { "x-documentation-token": token } : {}),
},
})
clearInterval(progressInterval)
if (!response.ok) {
const text = await response.text().catch(() => "")
let errorMessage = `生成失败(${response.status})`
try {
const json = JSON.parse(text)
errorMessage = json.error || errorMessage
} catch {
if (text) errorMessage = text
}
throw new Error(errorMessage)
}
setProgress(100)
setCurrentPage("完成")
setPageStates(pages.map((page) => ({ page, status: "success" })))
const blob = await response.blob()
const url = URL.createObjectURL(blob)
const a = document.createElement("a")
a.href = url
a.download = `应用功能文档_${new Date().toISOString().slice(0, 10)}.docx`
document.body.appendChild(a)
a.click()
a.remove()
URL.revokeObjectURL(url)
} catch (e) {
const message = e instanceof Error ? e.message : String(e)
setError(message)
setPageStates((prev) => prev.map((s) => ({ ...s, status: "error" })))
} finally {
setIsGenerating(false)
}
}
const handlePreview = useCallback((path: string) => {
setPreviewPath(path)
setShowPreview(true)
}, [])
const getStatusIcon = (status: PageStatus) => {
switch (status) {
case "pending":
return <div className="w-4 h-4 rounded-full bg-gray-600" />
case "loading":
return <Loader2 className="w-4 h-4 animate-spin text-teal-400" />
case "success":
return <CheckCircle className="w-4 h-4 text-green-500" />
case "error":
return <XCircle className="w-4 h-4 text-red-500" />
}
}
return (
<main className="min-h-screen bg-background text-foreground p-4 pb-24">
<div className="max-w-md mx-auto space-y-4">
{/* Header */}
<div className="flex items-center gap-3 py-2">
<FileText className="w-6 h-6 text-teal-400" />
<div>
<h1 className="text-lg font-semibold"></h1>
<p className="text-xs text-muted-foreground"></p>
</div>
</div>
{/* Info Card */}
<div className="bg-card border border-border rounded-xl p-4 space-y-2">
<div className="flex items-center justify-between text-sm">
<span className="text-muted-foreground"></span>
<span className="font-medium text-teal-400">{pages.length} </span>
</div>
<div className="flex items-center justify-between text-sm">
<span className="text-muted-foreground"></span>
<span className="font-medium">{Object.keys(groupedPages).length} </span>
</div>
<div className="flex items-center justify-between text-sm">
<span className="text-muted-foreground"></span>
<span className="font-medium">Word (.docx)</span>
</div>
</div>
{/* Progress */}
{isGenerating && (
<div className="bg-card border border-border rounded-xl p-4 space-y-3">
<div className="flex items-center justify-between text-sm">
<span className="text-muted-foreground"></span>
<span className="font-medium text-teal-400">{Math.round(progress)}%</span>
</div>
<div className="w-full h-2 bg-muted rounded-full overflow-hidden">
<div
className="h-full bg-gradient-to-r from-teal-500 to-cyan-400 transition-all duration-300"
style={{ width: `${progress}%` }}
/>
</div>
{currentPage && <p className="text-xs text-muted-foreground truncate">: {currentPage}</p>}
</div>
)}
{/* Error */}
{error && (
<div className="bg-destructive/10 border border-destructive/30 text-destructive rounded-xl p-3 text-sm">
<p className="font-medium mb-1"></p>
<p className="text-xs opacity-80">{error}</p>
<p className="text-xs mt-2 opacity-60">提示: 如需授权,URL中添加 ?token=your_token</p>
</div>
)}
{/* Generate Button */}
<button
type="button"
onClick={handleGenerate}
disabled={isGenerating}
className="w-full bg-gradient-to-r from-teal-500 to-cyan-500 text-white rounded-xl py-3.5 font-medium disabled:opacity-60 flex items-center justify-center gap-2 shadow-lg shadow-teal-500/20"
>
{isGenerating ? (
<>
<Loader2 className="w-5 h-5 animate-spin" />
<span>...</span>
</>
) : (
<>
<Download className="w-5 h-5" />
<span> Word </span>
</>
)}
</button>
{/* Page List */}
<div className="space-y-3">
<h2 className="text-sm font-medium text-muted-foreground flex items-center gap-2">
<span></span>
<span className="text-xs opacity-60">({pages.length})</span>
</h2>
{Object.entries(groupedPages).map(([group, groupPages]) => (
<div key={group} className="bg-card border border-border rounded-xl overflow-hidden">
<div className="px-3 py-2 bg-muted/50 border-b border-border">
<h3 className="text-sm font-medium text-teal-400">{group}</h3>
</div>
<div className="divide-y divide-border">
{groupPages.map((page, index) => {
const state = pageStates.find((s) => s.page.path === page.path)
return (
<div
key={page.path}
className="px-3 py-2.5 flex items-center gap-3 hover:bg-muted/30 transition-colors"
>
<span className="text-xs text-muted-foreground w-5">{index + 1}</span>
{state && getStatusIcon(state.status)}
<div className="flex-1 min-w-0">
<p className="text-sm font-medium truncate">{page.title}</p>
{page.subtitle && <p className="text-xs text-muted-foreground truncate">{page.subtitle}</p>}
</div>
<button
type="button"
onClick={() => handlePreview(page.path)}
className="p-1.5 text-muted-foreground hover:text-foreground hover:bg-muted rounded-lg transition-colors"
title="预览页面"
>
<Eye className="w-4 h-4" />
</button>
</div>
)
})}
</div>
</div>
))}
</div>
{/* Features */}
<div className="bg-card border border-border rounded-xl p-4 space-y-3">
<h3 className="text-sm font-medium"></h3>
<ul className="text-xs text-muted-foreground space-y-2">
<li className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-500 flex-shrink-0 mt-0.5" />
<span></span>
</li>
<li className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-500 flex-shrink-0 mt-0.5" />
<span>(iPhone 14 Pro Max尺寸)</span>
</li>
<li className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-500 flex-shrink-0 mt-0.5" />
<span></span>
</li>
<li className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-500 flex-shrink-0 mt-0.5" />
<span></span>
</li>
</ul>
</div>
{/* Note */}
<p className="text-xs text-muted-foreground text-center">30-60</p>
</div>
{/* Preview Modal */}
{showPreview && previewPath && (
<div className="fixed inset-0 bg-black/80 z-50 flex items-center justify-center p-4">
<div className="bg-card rounded-2xl w-full max-w-md overflow-hidden border border-border">
<div className="flex items-center justify-between px-4 py-3 border-b border-border">
<h3 className="font-medium text-sm"></h3>
<div className="flex items-center gap-2">
<button
type="button"
onClick={() => iframeRef.current?.contentWindow?.location.reload()}
className="p-1.5 text-muted-foreground hover:text-foreground rounded-lg"
>
<RefreshCw className="w-4 h-4" />
</button>
<button
type="button"
onClick={() => setShowPreview(false)}
className="p-1.5 text-muted-foreground hover:text-foreground rounded-lg"
>
<XCircle className="w-4 h-4" />
</button>
</div>
</div>
<div className="w-full aspect-[430/932] bg-white">
<iframe ref={iframeRef} src={previewPath} className="w-full h-full" title="Page Preview" />
</div>
</div>
</div>
)}
</main>
)
}

View File

@@ -1,143 +0,0 @@
@import "tailwindcss";
@import "tw-animate-css";
@custom-variant dark (&:is(.dark *));
:root {
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary: oklch(0.205 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.556 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: oklch(0.577 0.245 27.325);
--border: oklch(0.922 0 0);
--input: oklch(0.922 0 0);
--ring: oklch(0.708 0 0);
--chart-1: oklch(0.646 0.222 41.116);
--chart-2: oklch(0.6 0.118 184.704);
--chart-3: oklch(0.398 0.07 227.392);
--chart-4: oklch(0.828 0.189 84.429);
--chart-5: oklch(0.769 0.188 70.08);
--radius: 0.625rem;
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
/* Custom app tokens */
--app-bg: #0a1628;
--app-card: #0f2137;
--app-brand: #38bdac;
--app-brand-hover: #2da396;
--app-text: #ffffff;
--app-text-muted: #9ca3af;
--app-border: rgba(75, 85, 99, 0.5);
}
.dark {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--card: oklch(0.145 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.145 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.985 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.396 0.141 25.723);
--destructive-foreground: oklch(0.637 0.237 25.331);
--border: oklch(0.269 0 0);
--input: oklch(0.269 0 0);
--ring: oklch(0.439 0 0);
--chart-1: oklch(0.488 0.243 264.376);
--chart-2: oklch(0.696 0.17 162.48);
--chart-3: oklch(0.769 0.188 70.08);
--chart-4: oklch(0.627 0.265 303.9);
--chart-5: oklch(0.645 0.246 16.439);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(0.269 0 0);
--sidebar-ring: oklch(0.439 0 0);
}
@theme inline {
--font-sans: "Geist", "Geist Fallback";
--font-mono: "Geist Mono", "Geist Mono Fallback";
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-accent: var(--accent);
--color-accent-foreground: var(--accent-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
--color-sidebar: var(--sidebar);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-ring: var(--sidebar-ring);
/* Custom semantic tokens for app */
--color-app-bg: var(--app-bg);
--color-app-card: var(--app-card);
--color-app-brand: var(--app-brand);
--color-app-brand-hover: var(--app-brand-hover);
--color-app-text: var(--app-text);
--color-app-text-muted: var(--app-text-muted);
--color-app-border: var(--app-border);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
}

View File

@@ -1,47 +0,0 @@
import type React from "react"
import type { Metadata } from "next"
import { Geist, Geist_Mono } from "next/font/google"
import { Analytics } from "@vercel/analytics/next"
import "./globals.css"
import { LayoutWrapper } from "@/components/layout-wrapper"
const _geist = Geist({ subsets: ["latin"] })
const _geistMono = Geist_Mono({ subsets: ["latin"] })
export const metadata: Metadata = {
title: "一场SOUL的创业实验场 - 卡若",
description: "来自Soul派对房的真实商业故事,每天早上6-9点免费分享",
generator: "v0.app",
icons: {
icon: [
{
url: "/icon-light-32x32.png",
media: "(prefers-color-scheme: light)",
},
{
url: "/icon-dark-32x32.png",
media: "(prefers-color-scheme: dark)",
},
{
url: "/icon.svg",
type: "image/svg+xml",
},
],
apple: "/apple-icon.png",
},
}
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode
}>) {
return (
<html lang="zh-CN">
<body className={`bg-[#0a1628]`}>
<LayoutWrapper>{children}</LayoutWrapper>
<Analytics />
</body>
</html>
)
}

View File

@@ -1 +0,0 @@
import mongoose from 'mongoose';\n\nlet isConnected = false;\n\nexport async function connectDB() {\n if (isConnected) return;\n\n try {\n await mongoose.connect(process.env.MONGODB_URI, {\n useNewUrlParser: true,\n useUnifiedTopology: true,\n });\n isConnected = true;\n console.log('MongoDB connected');\n } catch (error) {\n console.error('MongoDB connection error:', error);\n throw error;\n }\n}

View File

@@ -1 +0,0 @@
import mongoose from 'mongoose';\n\nconst orderSchema = new mongoose.Schema({\n userId: { type: String, required: true },\n amount: { type: Number, required: true },\n currency: { type: String, default: 'CNY' },\n status: { type: String, default: 'pending' },\n createdAt: { type: Date, default: Date.now },\n updatedAt: { type: Date, default: Date.now },\n});\n\nexport const Order = mongoose.model('Order', orderSchema);

View File

@@ -1 +0,0 @@
import mongoose from 'mongoose';\n\nconst payTradeSchema = new mongoose.Schema({\n orderId: { type: mongoose.Schema.Types.ObjectId, ref: 'Order', required: true },\n gateway: { type: String, required: true },\n transactionId: String,\n status: { type: String, default: 'initiated' },\n response: Object,\n createdAt: { type: Date, default: Date.now },\n updatedAt: { type: Date, default: Date.now },\n});\n\nexport const PayTrade = mongoose.model('PayTrade', payTradeSchema);

BIN
app/my/.DS_Store vendored

Binary file not shown.

View File

@@ -1,151 +0,0 @@
"use client"
import { useState, useEffect } from "react"
import Link from "next/link"
import { User, ShoppingBag, Share2, LogOut, ChevronRight, BookOpen } from "lucide-react"
import { useStore } from "@/lib/store"
import { AuthModal } from "@/components/modules/auth/auth-modal"
import { getFullBookPrice } from "@/lib/book-data"
export default function MyPage() {
const { user, isLoggedIn, logout } = useStore()
const [showAuthModal, setShowAuthModal] = useState(false)
const [mounted, setMounted] = useState(false)
useEffect(() => {
setMounted(true)
}, [])
if (!mounted) {
return (
<div className="min-h-screen bg-app-bg flex items-center justify-center">
<div className="animate-spin rounded-full h-8 w-8 border-t-2 border-b-2 border-app-brand" />
</div>
)
}
if (!isLoggedIn) {
return (
<main className="min-h-screen bg-app-bg text-app-text pb-20 flex flex-col items-center justify-center">
<div className="p-4 w-full">
<div className="max-w-xs mx-auto text-center">
<div className="w-14 h-14 mx-auto mb-3 rounded-full bg-app-card flex items-center justify-center">
<User className="w-7 h-7 text-app-text-muted" />
</div>
<h2 className="text-base font-semibold mb-1"></h2>
<p className="text-app-text-muted text-xs mb-4"></p>
<button
onClick={() => setShowAuthModal(true)}
className="bg-app-brand hover:bg-app-brand-hover text-white px-6 py-2.5 rounded-full font-medium text-sm"
>
</button>
</div>
</div>
<AuthModal isOpen={showAuthModal} onClose={() => setShowAuthModal(false)} />
</main>
)
}
const fullBookPrice = getFullBookPrice()
return (
<main className="min-h-screen bg-app-bg text-app-text pb-20">
{/* User Profile Header */}
<div className="bg-gradient-to-b from-app-card to-app-bg p-4 pt-8">
<div className="max-w-xs mx-auto">
<div className="flex items-center gap-3 mb-3">
<div className="w-11 h-11 rounded-full bg-app-brand/20 flex items-center justify-center">
<User className="w-5 h-5 text-app-brand" />
</div>
<div>
<h2 className="text-sm font-semibold">{user?.nickname || "用户"}</h2>
<p className="text-app-text-muted text-xs">{user?.phone}</p>
</div>
</div>
{/* Stats */}
<div className="grid grid-cols-2 gap-2">
<div className="bg-app-card/60 rounded-lg p-2.5 text-center">
<p className="text-base font-bold text-app-brand">
{user?.hasFullBook ? "全部" : user?.purchasedSections.length || 0}
</p>
<p className="text-app-text-muted text-xs"></p>
</div>
<div className="bg-app-card/60 rounded-lg p-2.5 text-center">
<p className="text-base font-bold text-app-brand">¥{(user?.earnings || 0).toFixed(1)}</p>
<p className="text-app-text-muted text-xs"></p>
</div>
</div>
</div>
</div>
{/* Menu Items */}
<div className="p-4">
<div className="max-w-xs mx-auto space-y-2">
{/* Purchase prompt */}
{!user?.hasFullBook && (
<Link href="/chapters" className="block">
<div className="bg-gradient-to-r from-app-brand/20 to-app-card rounded-lg p-3 border border-app-brand/30">
<div className="flex items-center justify-between">
<div className="flex items-center gap-2">
<BookOpen className="w-4 h-4 text-app-brand" />
<span className="text-app-text text-sm"></span>
</div>
<span className="text-app-brand font-bold text-sm">¥{fullBookPrice}</span>
</div>
</div>
</Link>
)}
{/* Menu List - simplified, removed settings and docs */}
<div className="bg-app-card/60 rounded-lg overflow-hidden">
<Link href="/my/purchases" className="flex items-center justify-between p-3 border-b border-app-border">
<div className="flex items-center gap-2">
<ShoppingBag className="w-4 h-4 text-app-text-muted" />
<span className="text-sm"></span>
</div>
<ChevronRight className="w-4 h-4 text-app-text-muted" />
</Link>
<Link href="/my/referral" className="flex items-center justify-between p-3">
<div className="flex items-center gap-2">
<Share2 className="w-4 h-4 text-app-text-muted" />
<span className="text-sm"></span>
</div>
<div className="flex items-center gap-1">
<span className="text-app-brand text-xs">¥{(user?.earnings || 0).toFixed(1)}</span>
<ChevronRight className="w-4 h-4 text-app-text-muted" />
</div>
</Link>
</div>
{/* Referral Code */}
<div className="bg-app-card/60 rounded-lg p-3">
<div className="flex items-center justify-between">
<div>
<p className="text-app-text-muted text-xs"></p>
<code className="text-app-brand font-mono text-sm">{user?.referralCode}</code>
</div>
<button
onClick={() => navigator.clipboard.writeText(user?.referralCode || "")}
className="text-app-text-muted text-xs hover:text-app-text px-2 py-1 rounded bg-app-card"
>
</button>
</div>
</div>
{/* Logout */}
<button
onClick={logout}
className="w-full flex items-center justify-center gap-2 p-2.5 text-app-text-muted hover:text-red-400 transition-colors text-sm"
>
<LogOut className="w-4 h-4" />
<span>退</span>
</button>
</div>
</div>
</main>
)
}

View File

@@ -1,109 +0,0 @@
"use client"
import Link from "next/link"
import { ChevronLeft, BookOpen, CheckCircle } from "lucide-react"
import { useStore } from "@/lib/store"
import { bookData, getAllSections } from "@/lib/book-data"
export default function MyPurchasesPage() {
const { user, isLoggedIn } = useStore()
if (!isLoggedIn || !user) {
return (
<div className="min-h-screen bg-[#0a1628] text-white flex items-center justify-center">
<div className="text-center">
<p className="text-gray-400 mb-4"></p>
<Link href="/" className="text-[#38bdac] hover:underline">
</Link>
</div>
</div>
)
}
const allSections = getAllSections()
const purchasedCount = user.hasFullBook ? allSections.length : user.purchasedSections.length
return (
<div className="min-h-screen bg-[#0a1628] text-white">
{/* Header */}
<header className="sticky top-0 z-50 bg-[#0a1628]/90 backdrop-blur-md border-b border-gray-800">
<div className="max-w-4xl mx-auto px-4 py-4 flex items-center">
<Link href="/" className="flex items-center gap-2 text-gray-400 hover:text-white transition-colors">
<ChevronLeft className="w-5 h-5" />
<span></span>
</Link>
<h1 className="flex-1 text-center text-lg font-semibold"></h1>
<div className="w-16" />
</div>
</header>
<main className="max-w-4xl mx-auto px-4 py-8">
{/* Stats */}
<div className="bg-[#0f2137]/60 backdrop-blur-md rounded-xl p-6 border border-gray-700/50 mb-8">
<div className="grid grid-cols-2 gap-6">
<div className="text-center">
<p className="text-3xl font-bold text-white">{purchasedCount}</p>
<p className="text-gray-400 text-sm"></p>
</div>
<div className="text-center">
<p className="text-3xl font-bold text-[#38bdac]">
{user.hasFullBook ? "全书" : `${purchasedCount}/${allSections.length}`}
</p>
<p className="text-gray-400 text-sm">{user.hasFullBook ? "已解锁" : "进度"}</p>
</div>
</div>
</div>
{/* Purchased sections */}
{user.hasFullBook ? (
<div className="bg-gradient-to-r from-[#38bdac]/20 to-[#0f2137] rounded-xl p-6 border border-[#38bdac]/30 text-center mb-8">
<CheckCircle className="w-12 h-12 text-[#38bdac] mx-auto mb-3" />
<h3 className="text-xl font-semibold text-white mb-2"></h3>
<p className="text-gray-400">55,</p>
</div>
) : user.purchasedSections.length === 0 ? (
<div className="text-center py-12">
<BookOpen className="w-16 h-16 text-gray-600 mx-auto mb-4" />
<p className="text-gray-400 mb-4"></p>
<Link href="/chapters" className="text-[#38bdac] hover:underline">
</Link>
</div>
) : (
<div className="space-y-4">
<h2 className="text-gray-400 text-sm mb-4"></h2>
{bookData.map((part) => {
const purchasedInPart = part.chapters.flatMap((c) =>
c.sections.filter((s) => user.purchasedSections.includes(s.id)),
)
if (purchasedInPart.length === 0) return null
return (
<div key={part.id} className="bg-[#0f2137]/40 rounded-xl border border-gray-800/50 overflow-hidden">
<div className="px-4 py-3 bg-[#0a1628]/50">
<p className="text-gray-400 text-sm">{part.title}</p>
</div>
<div className="divide-y divide-gray-800/30">
{purchasedInPart.map((section) => (
<Link
key={section.id}
href={`/read/${section.id}`}
className="flex items-center gap-3 px-4 py-3 hover:bg-[#0f2137]/40 transition-colors"
>
<CheckCircle className="w-4 h-4 text-[#38bdac]" />
<span className="text-gray-400 font-mono text-sm">{section.id}</span>
<span className="text-gray-300">{section.title}</span>
</Link>
))}
</div>
</div>
)
})}
</div>
)}
</main>
</div>
)
}

View File

@@ -1,233 +0,0 @@
"use client"
import { useState, useEffect } from "react"
import Link from "next/link"
import { ChevronLeft, Copy, Share2, Users, Wallet, MessageCircle, ImageIcon } from "lucide-react"
import { Button } from "@/components/ui/button"
import { useStore, type Purchase } from "@/lib/store"
import { PosterModal } from "@/components/modules/referral/poster-modal"
import { WithdrawalModal } from "@/components/modules/referral/withdrawal-modal"
export default function ReferralPage() {
const { user, isLoggedIn, settings, getAllPurchases, getAllUsers } = useStore()
const [copied, setCopied] = useState(false)
const [showPoster, setShowPoster] = useState(false)
const [showWithdrawal, setShowWithdrawal] = useState(false)
const [referralPurchases, setReferralPurchases] = useState<Purchase[]>([])
const [referralUsers, setReferralUsers] = useState<number>(0)
useEffect(() => {
if (user?.referralCode) {
const allPurchases = getAllPurchases()
const allUsers = getAllUsers()
const usersWithMyCode = allUsers.filter((u) => u.referredBy === user.referralCode)
const userIds = usersWithMyCode.map((u) => u.id)
const myReferralPurchases = allPurchases.filter((p) => userIds.includes(p.userId))
setReferralPurchases(myReferralPurchases)
setReferralUsers(usersWithMyCode.length)
}
}, [user, getAllPurchases, getAllUsers])
if (!isLoggedIn || !user) {
return (
<div className="min-h-screen bg-app-bg text-app-text flex items-center justify-center pb-20">
<div className="text-center">
<p className="text-app-text-muted mb-4"></p>
<Link href="/" className="text-app-brand hover:underline">
</Link>
</div>
</div>
)
}
const referralLink = `${typeof window !== "undefined" ? window.location.origin : ""}?ref=${user.referralCode}`
const distributorShare = settings?.distributorShare || 90
const totalEarnings = user.earnings || 0
const pendingEarnings = user.pendingEarnings || 0
const handleCopy = () => {
navigator.clipboard.writeText(referralLink)
setCopied(true)
setTimeout(() => setCopied(false), 2000)
}
const handleShare = async () => {
const shareText = `我正在读《一场SOUL的创业实验场》每天6-9点的真实商业故事推荐给你${referralLink}`
try {
if (typeof navigator.share === 'function' && typeof navigator.canShare === 'function') {
await navigator.share({
title: "一场SOUL的创业实验场",
text: "来自Soul派对房的真实商业故事",
url: referralLink,
})
} else {
await navigator.clipboard.writeText(shareText)
alert("分享文案已复制快去朋友圈或Soul派对分享吧")
}
} catch {
await navigator.clipboard.writeText(shareText)
alert("分享文案已复制!")
}
}
const handleShareToWechat = async () => {
const shareText = `📖 推荐一本好书《一场SOUL的创业实验场》
这是卡若每天早上6-9点在Soul派对房分享的真实商业故事55个真实案例讲透创业的底层逻辑。
👉 点击阅读: ${referralLink}
#创业 #商业思维 #Soul派对`
await navigator.clipboard.writeText(shareText)
alert("朋友圈文案已复制!\n\n打开微信 → 发朋友圈 → 粘贴即可")
}
const handleShareToSoul = async () => {
const shareText = `在Soul派对房听卡若讲了好多真实的创业故事他把这些故事整理成了一本书《一场SOUL的创业实验场》推荐给你们
每天早上6-9点直播这本书就是直播内容的精华版。
链接: ${referralLink}`
await navigator.clipboard.writeText(shareText)
alert("Soul分享文案已复制\n\n打开Soul → 发动态 → 粘贴即可")
}
return (
<div className="min-h-screen bg-app-bg text-app-text pb-24">
{/* Header */}
<header className="sticky top-0 z-50 bg-app-bg/90 backdrop-blur-md border-b border-app-border">
<div className="max-w-xs mx-auto px-4 py-3 flex items-center">
<Link href="/my" className="flex items-center gap-1 text-app-text-muted hover:text-app-text">
<ChevronLeft className="w-5 h-5" />
</Link>
<h1 className="flex-1 text-center text-sm font-semibold"></h1>
<div className="w-5" />
</div>
</header>
<main className="max-w-xs mx-auto px-4 py-4">
{/* Earnings Card */}
<div className="bg-gradient-to-br from-app-brand/20 to-app-card rounded-xl p-4 border border-app-brand/30 mb-3">
<div className="flex items-center justify-between mb-3">
<div className="flex items-center gap-2">
<Wallet className="w-4 h-4 text-app-brand" />
<span className="text-app-text-muted text-xs"></span>
</div>
<span className="text-app-brand text-xs">{distributorShare}%</span>
</div>
<p className="text-2xl font-bold text-app-text mb-0.5">¥{totalEarnings.toFixed(2)}</p>
<p className="text-app-text-muted text-xs mb-3">: ¥{pendingEarnings.toFixed(2)}</p>
<Button
disabled={totalEarnings < 10}
onClick={() => setShowWithdrawal(true)}
className="w-full bg-app-brand hover:bg-app-brand-hover text-white h-8 text-xs"
>
{totalEarnings < 10 ? `满10元可提现` : "申请提现"}
</Button>
</div>
{/* Stats */}
<div className="grid grid-cols-2 gap-2 mb-3">
<div className="bg-app-card/60 rounded-lg p-2.5 text-center">
<Users className="w-4 h-4 text-app-brand mx-auto mb-1" />
<p className="text-base font-bold text-app-text">{referralUsers}</p>
<p className="text-app-text-muted text-xs"></p>
</div>
<div className="bg-app-card/60 rounded-lg p-2.5 text-center">
<Share2 className="w-4 h-4 text-app-brand mx-auto mb-1" />
<p className="text-base font-bold text-app-text">{referralPurchases.length}</p>
<p className="text-app-text-muted text-xs"></p>
</div>
</div>
{/* Referral link */}
<div className="bg-app-card/60 rounded-xl p-3 border border-app-border mb-3">
<p className="text-app-text text-xs font-medium mb-2"></p>
<div className="flex gap-2 mb-2">
<div className="flex-1 bg-app-bg rounded-lg px-2.5 py-1.5 text-app-text-muted text-xs truncate font-mono">
{referralLink}
</div>
<Button
onClick={handleCopy}
size="sm"
variant="outline"
className="border-app-border text-app-text hover:bg-app-card bg-transparent text-xs h-7 px-2"
>
<Copy className="w-3 h-3 mr-1" />
{copied ? "已复制" : "复制"}
</Button>
</div>
<p className="text-app-text-muted text-xs">
: <span className="text-app-brand font-mono">{user.referralCode}</span>
</p>
</div>
{/* Share buttons - improved for WeChat/Soul */}
<div className="space-y-2 mb-3">
<Button
onClick={() => setShowPoster(true)}
className="w-full bg-indigo-600 hover:bg-indigo-700 text-white py-4 text-xs"
>
<ImageIcon className="w-4 h-4 mr-2" />
广
</Button>
<Button
onClick={handleShareToWechat}
className="w-full bg-green-600 hover:bg-green-700 text-white py-4 text-xs"
>
<MessageCircle className="w-4 h-4 mr-2" />
</Button>
<Button
onClick={handleShare}
variant="outline"
className="w-full border-app-border text-app-text hover:bg-app-card bg-transparent py-4 text-xs"
>
</Button>
</div>
<PosterModal
isOpen={showPoster}
onClose={() => setShowPoster(false)}
referralLink={referralLink}
referralCode={user.referralCode}
nickname={user.nickname}
/>
<WithdrawalModal
isOpen={showWithdrawal}
onClose={() => setShowWithdrawal(false)}
availableAmount={totalEarnings}
/>
{/* Recent earnings */}
{referralPurchases.length > 0 && (
<div className="bg-app-card/60 rounded-xl border border-app-border">
<div className="p-2.5 border-b border-app-border">
<p className="text-app-text text-xs font-medium"></p>
</div>
<div className="divide-y divide-app-border max-h-40 overflow-auto">
{referralPurchases.slice(0, 5).map((purchase) => (
<div key={purchase.id} className="p-2.5 flex items-center justify-between">
<div>
<p className="text-app-text text-xs">{purchase.type === "fullbook" ? "整本书" : "单节"}</p>
<p className="text-app-text-muted text-xs">
{new Date(purchase.createdAt).toLocaleDateString("zh-CN")}
</p>
</div>
<p className="text-app-brand text-sm font-semibold">
+¥{(purchase.referrerEarnings || 0).toFixed(2)}
</p>
</div>
))}
</div>
</div>
)}
</main>
</div>
)
}

View File

@@ -1,96 +0,0 @@
"use client"
import { useState } from "react"
import Link from "next/link"
import { ArrowLeft, Phone, Bell, Shield, HelpCircle } from "lucide-react"
import { useStore } from "@/lib/store"
export default function SettingsPage() {
const { user, updateUser } = useStore()
const [nickname, setNickname] = useState(user?.nickname || "")
const [saved, setSaved] = useState(false)
const handleSave = () => {
if (user) {
updateUser(user.id, { nickname })
setSaved(true)
setTimeout(() => setSaved(false), 2000)
}
}
return (
<main className="min-h-screen bg-[#0a1628] text-white pb-20">
<div className="sticky top-0 z-10 bg-[#0a1628]/95 backdrop-blur-md border-b border-gray-700/50">
<div className="max-w-md mx-auto flex items-center gap-4 p-4">
<Link href="/my" className="p-2 -ml-2">
<ArrowLeft className="w-5 h-5" />
</Link>
<h1 className="text-lg font-semibold"></h1>
</div>
</div>
<div className="p-4">
<div className="max-w-md mx-auto space-y-4">
{/* Profile Settings */}
<div className="bg-[#0f2137]/60 rounded-xl p-4">
<h3 className="text-gray-400 text-sm mb-4"></h3>
<div className="space-y-4">
<div>
<label className="text-gray-400 text-xs"></label>
<input
type="text"
value={nickname}
onChange={(e) => setNickname(e.target.value)}
className="w-full bg-[#0a1628] border border-gray-700 rounded-lg px-4 py-3 text-white mt-1"
/>
</div>
<div>
<label className="text-gray-400 text-xs"></label>
<div className="flex items-center gap-2 mt-1">
<Phone className="w-4 h-4 text-gray-500" />
<span className="text-gray-400">{user?.phone}</span>
</div>
</div>
</div>
<button
onClick={handleSave}
className="w-full mt-4 bg-[#38bdac] hover:bg-[#2da396] text-white py-3 rounded-lg font-medium"
>
{saved ? "已保存" : "保存修改"}
</button>
</div>
{/* Other Settings */}
<div className="bg-[#0f2137]/60 rounded-xl overflow-hidden">
<div className="flex items-center justify-between p-4 border-b border-gray-700/30">
<div className="flex items-center gap-3">
<Bell className="w-5 h-5 text-gray-400" />
<span></span>
</div>
<div className="w-10 h-5 bg-[#38bdac] rounded-full relative">
<div className="w-4 h-4 bg-white rounded-full absolute right-0.5 top-0.5" />
</div>
</div>
<div className="flex items-center justify-between p-4 border-b border-gray-700/30">
<div className="flex items-center gap-3">
<Shield className="w-5 h-5 text-gray-400" />
<span></span>
</div>
</div>
<Link href="/docs" className="flex items-center justify-between p-4">
<div className="flex items-center gap-3">
<HelpCircle className="w-5 h-5 text-gray-400" />
<span></span>
</div>
</Link>
</div>
</div>
</div>
</main>
)
}

View File

@@ -1,26 +0,0 @@
import { BookCover } from "@/components/book-cover"
import { BookIntro } from "@/components/book-intro"
import { TableOfContents } from "@/components/table-of-contents"
import { PurchaseSection } from "@/components/purchase-section"
import { Footer } from "@/components/footer"
import { getBookStructure } from "@/lib/book-file-system"
// Force dynamic rendering if we want it to update on every request without rebuild
// or use revalidation. For now, we can leave it default (static if no dynamic functions used, but fs usage makes it dynamic in dev usually).
// Actually, in App Router, using fs directly in a Server Component usually makes it static at build time unless using dynamic functions.
// To ensure it updates when files change in dev, it should be fine.
export const dynamic = 'force-dynamic';
export default async function HomePage() {
const parts = getBookStructure()
return (
<main className="min-h-screen bg-[#0a1628] text-white pb-20">
<BookCover />
<BookIntro />
<TableOfContents parts={parts} />
<PurchaseSection />
<Footer />
</main>
)
}

View File

@@ -1,42 +0,0 @@
import { notFound } from "next/navigation"
import { ChapterContent } from "@/components/chapter-content"
import { getSectionBySlug, getChapterBySectionSlug, getSectionContent } from "@/lib/book-file-system"
import { specialSections } from "@/lib/book-data"
interface ReadPageProps {
params: Promise<{ id: string }>
}
export const dynamic = 'force-dynamic';
export default async function ReadPage({ params }: ReadPageProps) {
const { id } = await params
// Check special sections first
// Note: Special sections might not have file paths in the dynamic system yet unless mapped
// For now, we keep the hardcoded specialSections check but maybe we should map them to files too
if (id === "preface") {
return <ChapterContent section={specialSections.preface} partTitle="序言" chapterTitle="" />
}
if (id === "epilogue") {
return <ChapterContent section={specialSections.epilogue} partTitle="尾声" chapterTitle="" />
}
// Find regular section from dynamic file system
const section = getSectionBySlug(id)
if (!section) {
notFound()
}
const context = getChapterBySectionSlug(id)
if (!context) {
notFound()
}
// Read content from file
const content = getSectionContent(section.filePath)
const sectionWithContent = { ...section, content }
return <ChapterContent section={sectionWithContent} partTitle={context.part.title} chapterTitle={context.chapter.title} />
}

View File

@@ -1 +0,0 @@
import { Order, PayTrade } from '../models/Order';\nimport { PayTrade as PayTradeModel } from '../models/PayTrade';\nimport AlipaySDK from 'alipay-sdk';\nimport WeChatPay from 'wechatpay-node-v3';\nimport Stripe from 'stripe';\nimport * as Paypal from '@paypal/checkout-server-sdk';\nimport Web3 from 'web3';\n\nclass AlipayAdapter {\n constructor() {\n this.sdk = new AlipaySDK({\n appId: process.env.ALIPAY_APP_ID,\n privateKey: process.env.ALIPAY_PRIVATE_KEY,\n alipayPublicKey: process.env.ALIPAY_PUBLIC_KEY,\n gateway: 'https://openapi.alipay.com/gateway.do',\n });\n }\n\n async pay(order) {\n const result = await this.sdk.exec('alipay.trade.app.pay', {\n bizContent: {\n subject: `Payment for order ${order._id}`,\n out_trade_no: order._id.toString(),\n total_amount: order.amount.toString(),\n product_code: 'QUICK_MSECURITY_PAY',\n },\n });\n\n const trade = new PayTradeModel({ orderId: order._id, gateway: 'alipay', response: result });\n await trade.save();\n\n return result;\n }\n}\n\nclass WechatAdapter {\n constructor() {\n this.pay = new WeChatPay({\n appid: process.env.WECHAT_APPID,\n mchid: process.env.WECHAT_MCHID,\n private_key: process.env.WECHAT_PRIVATE_KEY,\n serial_no: process.env.WECHAT_SERIAL_NO,\n apiv3_key: process.env.WECHAT_APIV3_KEY,\n });\n }\n\n async pay(order) {\n const params = {\n out_trade_no: order._id.toString(),\n appid: process.env.WECHAT_APPID,\n description: `Payment for order ${order._id}`,\n amount: { total: Math.floor(order.amount * 100) },\n payer: { openid: 'user_openid' } // 需要替换为实际openid\n };\n const result = await this.pay.jsapi(params);\n\n const trade = new PayTradeModel({ orderId: order._id, gateway: 'wechat', response: result });\n await trade.save();\n\n return result;\n }\n}\n\nclass PaypalAdapter {\n constructor() {\n const environment = new Paypal.core.SandboxEnvironment(process.env.PAYPAL_CLIENT_ID, process.env.PAYPAL_CLIENT_SECRET);\n this.client = new Paypal.core.PayPalHttpClient(environment);\n }\n\n async pay(order) {\n const request = new Paypal.orders.OrdersCreateRequest();\n request.requestBody({\n intent: 'CAPTURE',\n purchase_units: [{\n amount: {\n currency_code: order.currency,\n value: order.amount.toString(),\n }\n }]\n });\n const response = await this.client.execute(request);\n\n const trade = new PayTradeModel({ orderId: order._id, gateway: 'paypal', response: response.result });\n await trade.save();\n\n return response.result;\n }\n}\n\nclass StripeAdapter {\n constructor() {\n this.stripe = new Stripe(process.env.STRIPE_SECRET_KEY);\n }\n\n async pay(order) {\n const paymentIntent = await this.stripe.paymentIntents.create({\n amount: Math.floor(order.amount * 100),\n currency: order.currency,\n metadata: { order_id: order._id.toString() },\n });\n\n const trade = new PayTradeModel({ orderId: order._id, gateway: 'stripe', response: paymentIntent });\n await trade.save();\n\n return paymentIntent;\n }\n}\n\nclass UsdtAdapter {\n async pay(order) {\n // 实现USDT支付逻辑使用web3\n // 示例: 生成支付地址或交易\n const web3 = new Web3(process.env.WEB3_PROVIDER || 'https://mainnet.infura.io/v3/YOUR_INFURA_KEY');\n // TODO: 实现USDT ERC20转账或支付请求\n const result = { paymentAddress: 'generated_usdt_address', amount: order.amount };\n\n const trade = new PayTradeModel({ orderId: order._id, gateway: 'usdt', response: result });\n await trade.save();\n\n return result;\n }\n}\n\nclass PaymentService {\n async createOrder(data) {\n const order = new Order(data);\n await order.save();\n return order;\n }\n\n async pay(orderId, gateway) {\n const order = await Order.findById(orderId);\n if (!order) throw new Error('Order not found');\n\n let adapter;\n switch (gateway) {\n case 'alipay':\n adapter = new AlipayAdapter();\n break;\n case 'wechat':\n adapter = new WechatAdapter();\n break;\n case 'paypal':\n adapter = new PaypalAdapter();\n break;\n case 'stripe':\n adapter = new StripeAdapter();\n break;\n case 'usdt':\n adapter = new UsdtAdapter();\n break;\n default:\n throw new Error('Unsupported gateway');\n }\n\n const result = await adapter.pay(order);\n\n order.status = 'paid'; // 根据实际结果更新\n await order.save();\n\n return result;\n }\n}\n\nexport const paymentService = new PaymentService();

View File

@@ -1,24 +0,0 @@
#!/bin/bash
# 自动同步脚本:添加所有更改 -> 提交 -> 推送到 soul-content 分支
echo "⏳ 开始同步到 GitHub (soul-content)..."
# 确保在项目根目录
cd "$(dirname "$0")"
# 添加所有更改
git add .
# 检查是否有更改需要提交
if git diff-index --quiet HEAD --; then
echo "✅ 本地没有需要提交的更改。"
else
# 提交更改,包含时间戳
git commit -m "Auto-sync: $(date '+%Y-%m-%d %H:%M:%S')"
echo "✅ 已提交本地更改。"
fi
# 推送到远程
git push origin soul-content
echo "🎉 同步完成!"
echo "GitHub 地址: https://github.com/fnvtk/Mycontent/tree/soul-content"

BIN
book/.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@@ -1,209 +0,0 @@
"在这个城市,只要跟自行车有关的生意,都绕不开一个人。"
2024年12月的一个早上,七点三十二分,我在Soul派对房讲到一半的时候,有人突然打断我。
"卡若,你说的那种把一个行业做到极致的人,厦门有吗?"
我笑了。
"有,而且就在派对房里。"
那天早上6点,我像往常一样打开Soul派对房。
进来一个人,声音很稳,不像大多数人那样急着表达自己。
他先听了十分钟。
然后说了一句话:"卡若,你讲的私域运营,我做了18年。"
我愣了一下。
Soul上什么人都有,但能说出这句话的不多。
我说:"那你是做什么的?"
他说:"自行车。"
我说:"自行车?卖车的?"
他说:"不只是卖车,维修、租赁、政府采购,都做。"
我问:"做了多久?"
他说:"18年。厦门所有学校的自行车业务,80%都是我做的。"
派对房里,突然安静了。
我问:"你怎么做到80%的?"
他声音很平静,但能听出自信。
"2005年,我刚开始做自行车生意的时候,厦门有七八家同行。"
"大家都是卖车、修车、做租赁。"
"竞争很激烈。"
他停了一下。
"我当时就想,怎么才能让客户记住我?"
派对房里,有人打字:"靠价格?"
他说:"不是。"
"我花了半年时间,走了厦门50多所学校。"
"每个学校,我都去找总务处,找后勤主任,找体育老师。"
"问他们,学生的自行车最常出什么问题。"
"问他们,学校需要什么样的维修服务。"
"问他们,租赁业务怎么做才能让学生满意。"
我听得很认真。
这不是在卖车。
这是在做调研。
他继续说:"我发现所有学校的痛点都是一样的。"
"第一,维修不及时。学生的车坏了,要等两三天。"
"第二,零件不齐全。老旧型号的配件找不到。"
"第三,服务不专业。有些师傅态度不好,乱收费。"
派对房里,有人问:"那你怎么解决?"
他说:"我做了三件事。"
"第一,在每个学校附近都设服务点。学生打电话,半小时内到。"
"第二,把厦门市场上所有型号的零件全部备齐。冷门的、老旧的、进口的,我都有。"
"第三,给所有师傅做培训。服务态度、收费标准、维修流程,全部标准化。"
他停了一下。
"三个月之后,厦门大学找我合作了。"
"再三个月,集美大学也来了。"
"再半年,厦门所有高校的自行车业务,全是我的。"
我沉默了。
这不是运气。
这是系统。
有人问:"那政府的公共自行车项目,你是怎么拿到的?"
他笑了。
"2017年,政府要做公共自行车项目,招标。"
"当时有五家公司竞标。"
"前面四家都在讲价格、讲方案、讲资质。"
"轮到我的时候,我只说了一句话。"
派对房里,所有人都在等。
他说:"我说:我在厦门做了12年自行车生意,这个城市的每一条街道,哪里坡多、哪里人流大、哪里容易出故障,我闭着眼睛都知道。"
"你们要的不是一个供应商,你们要的是一个真正懂这个城市的人。"
他停了一下。
"一周后,政府给我打电话,说项目给我了。"
派对房里,有人打字:"牛逼。"
我问:"你觉得,什么叫把一个行业做到极致?"
他想了几秒。
"不是把现有的事情做到100分。"
"而是不断往前走,走到别人看不见的地方。"
他继续说:"比如智能锁。"
"市面上的锁,要么太贵,要么不稳定。"
"我们自己研发了一套系统,成本降低了40%,故障率降到了0.8%。"
我问:"你们还做研发?"
他说:"不做研发,怎么保持领先?"
"这个行业,技术更新很快的。"
"如果我还停留在修车、卖车的层面,早就被淘汰了。"
那天聊完,已经快九点了。
我在派对房里总结了一下。
"刚才那位老板,给了我们一个很好的示范。"
"什么叫把一个行业做到极致?"
"第一,深度调研。不是坐在办公室里想,是走出去,一个一个客户聊。"
"第二,建立系统。不是靠个人能力,是把经验变成流程,把流程变成标准。"
"第三,持续创新。不是守着现有的业务,是不断往前走。"
我停了一下。
"最重要的是,你要让客户觉得,在这个领域,除了你,找不到第二个人。"
派对房里,很安静。
过了几秒,有人打字:"卡若,这个人是谁?"
我笑了。
"一个做自行车的。"
"在厦门,只要跟自行车有关的生意,都绕不开他。"
后来,我经常在Soul派对房里讲这个案例。
每次讲完,都有人问:"卡若,我也想在我的行业做到极致,怎么办?"
我说:"先问自己三个问题。"
"第一,你对这个行业的了解,是停留在表面,还是深入到了骨子里?"
"第二,你的客户为什么要选你?是因为你便宜,还是因为你专业?"
"第三,你能不能让客户觉得,在这个领域,除了你,找不到第二个人?"
我停了一下。
"如果这三个问题你都回答不出来,那你还没到极致。"
派对房里,又是一阵沉默。
我继续说:"那位老板做自行车18年,厦门80%的业务都是他的。"
"他不是靠低价,不是靠关系。"
"他是靠'我比所有人都懂这件事'。"
"这就是极致。"
这本书的真实目的,不是教你怎么成功。
而是告诉你,做到极致,不是把一件事做到100分,而是走到别人看不见的地方。
深度调研、建立系统、持续创新。
这三件事,缺一不可。

View File

@@ -1,225 +0,0 @@
"有些人手上没有一个项目,但他认识所有有项目的人。"
这是我对老墨的第一印象。
2024年12月的一个早上,八点十五分,Soul派对房里进来一个人。
声音很稳,不像大多数人那样急着表达自己。
他上麦之后,先听了十分钟。
然后说了一句话:"卡若,你讲的资源整合,我做了15年。"
我愣了一下。
Soul上什么人都有,但能说出这句话的不多。
我说:"那你是做什么的?"
他说:"财务。"
我说:"财务公司?"
他说:"对,但我不是做账的,我是做资源整合的。"
这句话,让我来了兴趣。
我问:"什么叫做资源整合?"
他笑了。
"你看,一家企业需要做账,对吧?"
"但做账只是一个入口。"
"企业还需要什么?税筹、退税、融资、供应链、客户资源。"
"我手上有很多企业客户,每一家都有不同的需求。"
他停了一下。
"我的生意,就是把A的需求,对接给B的资源。"
"中间抽几个点。"
派对房里,有人打字:"这不就是中介吗?"
他说:"你可以这么理解。"
"但我不是普通的中介。"
"我是有背书的中介。"
我问:"那你怎么找到这些资源的?"
他说:"我每天花三个小时,在Soul派对房里听人聊天。"
我有点惊讶。
"Soul?"
他点点头。
"Soul上什么人都有。做税筹的,做退税的,做供应链的,做融资的。"
"我每天上麦,不说话,就听。"
"听他们在讲什么项目,讲什么资源,讲什么需求。"
"然后我加他们微信,进飞书,慢慢聊。"
他停了一下。
"三个月,我在Soul上认识了80个老板。"
"每个老板手上都有不同的资源。"
"我的工作,就是把他们链接起来。"
派对房里,有人问:"他们为什么愿意给你分钱?"
他说:"因为我给他们带客户。"
他给我们讲了一个案例。
"今年年初,我在Soul上认识了一个做退税的老板。"
"他说,他的退税业务,只针对年流水比较大的企业。"
"但他找不到客户。"
他停了一下。
"我手上有很多企业客户,我一筛选,发现有一些符合条件。"
"我说,我把客户给你,你帮我分成。"
"他说,怎么分?"
"我说,你收服务费,分我一部分。"
"他说,没问题。"
派对房里,有人问:"那客户为什么愿意接受你的介绍?"
他说:"因为我给他们做账。"
"我每个月给他们发财务报表。"
"报表里面,我会写:您的企业今年缴税XX万,我们有合作伙伴可以帮您优化税务,预计可以节省XX万。"
"这句话一写,客户就会问我。"
"我说,我认识一个做税筹的朋友,很靠谱,要不要我介绍给你?"
"客户说,可以。"
他看着我。
"然后我就把客户介绍过去。"
"客户省了钱,我分了成,那个老板也赚了钱。"
"大家都开心。"
有人问:"那你怎么保证那个老板靠谱?"
他说:"我会先自己测试。"
"第一次合作,我不会介绍大客户。"
"我先介绍一个小客户,看他怎么做。"
"如果他做得好,客户满意,我再介绍大客户。"
"如果他做得不好,我就不再合作。"
他停了一下。
"所以我手上的资源,都是经过验证的。"
"客户信任我,是因为我只给他们推荐靠谱的人。"
派对房里,又是一阵沉默。
我问:"为什么大部分人做不了资源整合?"
他说:"因为他们不舍得分钱。"
"很多人觉得,我介绍客户给你,你应该感谢我。"
"但其实,应该是我感谢他。"
"因为他提供了服务,客户才满意。"
"我只是做了一个链接。"
他停了一下。
"所以我每次介绍客户,都会主动提出分成。"
"我不等他来找我分钱,我先说,这个项目我们怎么分?"
"这样,大家都觉得我很靠谱。"
派对房里,有人打字:"学到了。"
那天聊完,已经快九点了。
我在派对房里总结了一下。
"刚才那位老板,给了我们一个很好的示范。"
"什么叫资源整合?"
"第一,你要认识足够多的人。不是泛泛之交,是知道他们手上有什么资源。"
"第二,你要有客户。资源整合的本质,是把需求对接给供给。没有需求,你整合不了。"
"第三,你要舍得分钱。不要想着自己吃肉,别人喝汤。你分得越多,大家越愿意跟你合作。"
我停了一下。
"最重要的是,你要让所有人都觉得,跟你合作是赚钱的,不是被你赚钱的。"
派对房里,很安静。
过了几秒,有人打字:"卡若,这个人太厉害了。"
我笑了。
"一个做财务的。"
"他手上没有一个项目,但他年入千万。"
后来,我经常在Soul派对房里讲这个案例。
每次讲完,都有人问:"卡若,我也想做资源整合,怎么开始?"
我说:"先问自己三个问题。"
"第一,你认识谁?把你认识的所有人列一个表,写清楚他们手上有什么资源。"
"第二,你的客户需要什么?把他们的需求列出来,看看能不能对接。"
"第三,你能不能舍得分钱?如果你还在想着自己赚多少,你做不了资源整合。"
我停了一下。
"那位老板做资源整合15年,他从来不想着自己能赚多少。"
"他只想着,怎么让A和B都赚到钱。"
"A和B都赚到钱了,自然会分钱给他。"
这本书的真实目的,不是教你怎么成功。
而是告诉你,资源整合的本质,不是你有多少资源。
而是你能不能把资源链接起来,让每个人都赚到钱。
你链接得越多,大家越信任你。
你越舍得分钱,大家越愿意跟你合作。
记住:手上没项目不可怕,可怕的是你不知道怎么链接有项目的人。

View File

@@ -1,399 +0,0 @@
# 1.3 笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统
"招人不看简历,看性格。"
2024年11月15日,晚上八点半。
我在Soul派对房讲完团队管理,有人突然问了一个问题。
"卡若,你招人的时候,怎么判断一个人适合什么岗位?"
我笑了。
"我不看简历,我看他的性格。"
派对房里,瞬间安静了。
过了几秒,有人打字:"卡若,你怎么看性格?"
我说:"我让他测MBTI。"
又有人问:"MBTI是什么?"
我说:"一种性格测试,16种人格,每种人格适合做不同的事情。"
我停了一下。
"你们知道吗?在Soul派对房里,你听一个人说话三分钟,就能判断出他是什么性格。"
我说这话的时候,派对房里有47个人在线。
其中至少有十几个人,我已经通过声音判断出了他们的MBTI。
第一次用MBTI招人,是在2019年。
那时候公司刚从破产中缓过来,我在重新组建团队。
我招了一个项目负责人。
能力很强,经验丰富,简历漂亮。
面试的时候,他讲了一个多小时他之前做的项目。
我觉得这人太牛了,当场就给了offer。
结果干了两个月,团队天天吵架。
他跟其他人完全合不来。
我问他:"你为什么不按照团队的计划做?"
他说:"我有更好的想法。"
我说:"那你为什么不跟团队沟通?"
他说:"我觉得没必要。"
我当时就愣住了。
后来我才明白,这个人是INTJ。
INTJ的特点是什么?
独立思考,有自己的想法,不喜欢被管。
他们脑子里有一套完整的系统,不需要别人的意见。
但团队需要的是执行,不是独立思考。
一个月后,他离职了。
自己出去创业了。
那次之后,我开始认真研究MBTI。
我发现,每个性格都有自己擅长的事情。
ENTJ,适合做资源整合,带团队,做操盘手。
他们天生就是领导者,果断,有执行力,能快速拿结果。
他们喜欢制定目标,拆解目标,分配任务。
他们关注的是结果,不是过程。
但ENTJ有一个问题:容易叛变。
为什么?
因为他们有自己的想法,不喜欢被管。
当他们觉得自己能做得更好的时候,他们就会离开。
所以我们公司,内部员工基本没有ENTJ。
所有ENTJ,都是合作关系。
我提前跟他们讲清楚:"你迟早会叛变,我们合作的形式是什么,你在这个阶段给我带来什么价值,我给你什么回报,都要说清楚。"
这样,大家都舒服。
INTP,适合做系统,做架构,做战略。
他们天生就是思考者,逻辑性强,喜欢深度思考。
他们不喜欢执行,喜欢设计流程。
他们关注的是底层逻辑,不是表面现象。
我自己就是INTP。
但我在公司,是ENTJ的影子人格。
什么叫影子人格?
就是你内心是INTP,但你经历了很多痛苦之后,你会披上ENTJ的外衣。
你会逼自己变成一个执行者,一个领导者。
但你的内心,还是INTP。
所以我每天早上4点起床,做复盘。
5点写文章。
6点到9点在Soul开播。
这些都是ENTJ的行为。
但我的本质,还是喜欢躺着,喜欢思考,喜欢睡懒觉。
2018年破产之后,我被逼着变成了ENTJ。
我必须带团队,必须拿结果,必须快速决策。
但每次回到家,我就变回了INTP。
我喜欢一个人坐着发呆,喜欢看书,喜欢想事情。
这就是影子人格。
晚上九点,有个小伙伴上麦了。
他说:"卡若,我测出来是ENTJ,但我又测出来是INTP,还测出来是ENTP。"
我说:"你有可能是INFJ。"
他说:"INFJ是什么?"
我说:"绿老头。"
他愣了。
"什么是绿老头?"
我说:"INFJ是16种人格里最稀缺的一种,只占人口的1%到2%。"
"他们的特点是:洞察力极强,共情能力极强,但能量消耗很快。"
"他们会对不同的人戴不同的面具。"
"他们能让所有人都舒服。"
"但他们自己很累。"
我停了一下。
"Soul上有个6号小姐姐,她就是INFJ。"
"她看人一眼,就能知道这个人有多少钱,有什么能力,心里想什么。"
"洞察能力是所有人当中最强的。"
派对房里,又是一阵沉默。
有人打字:"那我怎么知道自己是不是INFJ?"
我说:"INFJ有个特点,他们测MBTI的时候,经常测出不同的结果。"
"因为他们太擅长适应环境了。"
"他们在工作中是一个样子,在家里是另一个样子,在朋友面前又是一个样子。"
"所以测试结果不稳定。"
后来,我开始在Soul派对房里观察每个人的性格。
有人上麦,声音很稳,不急不躁,说话逻辑清晰。
我一听,这是T人。
T人关注逻辑,关注事情本身,不太关注人的感受。
有人上麦,声音很热情,说话很快,喜欢讲故事。
我一听,这是F人。
F人关注感受,关注人,喜欢照顾团队氛围。
有人上麦,说话天马行空,喜欢讲未来,讲可能性。
我一听,这是N人。
N人喜欢想象,喜欢思考未来。
有人上麦,说话很实在,喜欢讲具体的事情,讲数字。
我一听,这是S人。
S人喜欢实感,喜欢确定性。
三分钟,我就能判断一个人的性格。
然后我就知道,这个人适合做什么。
有个小伙伴问我:"卡若,你怎么判断一个人适合做什么?"
我说:"很简单。"
"ENTJ、ENFJ、ESTP,适合做管理,做操盘手,带团队。"
"ISTJ、ISTP、ISFJ,适合做执行,做基础工作。"
"INTJ、INTP,适合做系统,做架构,做战略。"
"ENFP、ENTP,适合做招商,做销售,做商务。"
我停了一下。
"每个性格都有自己擅长的事情。"
"你不能让INTP去做销售,也不能让ENFP去做财务。"
"人一定要在适合自己的位置上,才能发挥最大的价值。"
有人问我:"卡若,那你们公司怎么组建团队?"
我说:"我会先找一个ENTJ或ENFJ做项目负责人。"
"然后配两三个ISTJ或ISTP做执行。"
"再配一个ENFP做快乐小组,负责调节团队氛围。"
"这样,团队就不容易出问题。"
他问:"为什么?"
我说:"因为ENTJ能拿结果,ISTJ能执行,ENFP能让团队开心。"
"三种性格互补,团队就和谐了。"
我停了一下。
"但如果你找一个INTJ做项目负责人,团队就容易出问题。"
"因为INTJ有自己的想法,不听指挥。"
"他会隐忍,会铺垫,会在背后做自己的事情。"
"最后,他会叛变。"
后来,我在Soul上分享过一个案例。
我说:"我之前招过一个INTJ,能力很强,但他总是有自己的想法。"
"团队让他往东,他偏要往西。"
"他说他的方案更好。"
"但他从来不跟团队沟通。"
"他就自己做自己的。"
我停了一下。
"三个月后,他离职了。"
"自己出去创业了。"
"带走了一批客户。"
派对房里,有人问:"卡若,那INTJ不能用吗?"
我说:"能用。"
"但只能在小项目的时候用。"
"当项目做大的时候,INTJ就不适合了。"
"因为他的目标和公司的目标,不一样。"
有个小伙伴问我:"卡若,那你怎么判断一个人是什么性格?"
我说:"我会让他测MBTI。"
"测完之后,我会跟他聊天,验证一下。"
"因为测试不一定准。"
"有些人带着面具测试,测出来的结果就不对。"
我停了一下。
"比如你在工作状态下测试,你可能测出来是ENTJ。"
"但你在家里测试,你可能测出来是INTP。"
"这就是影子人格。"
"你的内心是INTP,但你在工作中是ENTJ。"
他问:"那怎么办?"
我说:"找懂的人,聊一聊。"
"他会给你更准确的判断。"
后来,我发现一个更有趣的事情。
从面相,也能推断MBTI。
我说:"你看一个人的颧骨,如果比较高,他大概率是ESTJ或ENTJ。"
"因为颧骨高,代表权威。"
"这种人天生就有威严,容易让别人产生尊重。"
"所以他们适合做管理。"
我停了一下。
"中国的面相学,和西方的MBTI,是互通的。"
"都是在研究人的性格。"
"只是一个从外在看,一个从内在看。"
派对房里,有人打字:"卡若,你太神了。"
我笑了。
"这不是神,这是经验。"
"我带过两次200人的团队,一次破产了,一次成功了。"
"我知道什么样的人适合什么样的位置。"
晚上十点,我在Soul派对房又讲了一次MBTI。
有人问我:"卡若,你为什么这么关注性格?"
我说:"因为我之前破产过一次。"
"2018年,我们公司做天猫,人太多了,200多人。"
"业务一下滑,我砍掉一批人,负面情绪到处飞。"
"我扛不住了。"
我停了一下。
"那次破产之后,我才明白,团队不是越多越好,是要匹配。"
"人和人之间的协调,性格的搭配,太重要了。"
"就像配衣服一样。"
派对房里,很安静。
我继续说:"所以我现在招人,第一件事就是让他测MBTI。"
"测完之后,我会判断他适合什么岗位,适合跟谁合作。"
"这样,团队就不会出问题。"
后来,我把MBTI落地成了一套简单的方法。
招人的时候,先测MBTI,再用三分钟语音验证。
试岗两周,看他在团队里的表现。
复盘的时候,回写他的性格和岗位匹配度。
这样,招人就不会靠直觉,而是靠系统。
每个人都在适合自己的位置上。
团队自然就顺了。
这本书的真实目的,不是教你怎么成功。
而是告诉你,人和人之间的差异,是真实存在的。
ENTJ适合做资源,因为他们果断、有执行力、能拿结果。
INTP适合做系统,因为他们逻辑性强、喜欢深度思考、能设计流程。
每个人都有自己的天赋。
你要做的,就是找到自己的天赋,然后在适合自己的位置上,发挥最大的价值。

View File

@@ -1,379 +0,0 @@
# 1.4 人性的三角结构:情绪、价值、利益
"聊得再嗨,不涉及钱,就不会有合作。"
2024年11月16日,晚上九点。
Soul派对房里有人问了我一个问题。
他说:"卡若,我在Soul上认识了很多人,聊得都挺好的,但就是没有一个能合作成功的。"
我说:"因为你只触达了情绪,没有触达价值和利益。"
他愣了。
"什么意思?"
我说:"人和人之间的关系,有三个层次:情绪、价值、利益。"
"大部分人,只停留在第一层。"
我在Soul上开播28场,认识了几百个人。
有人上麦聊得很嗨,下麦就忘了。
有人加了微信,聊了半天,最后什么都没发生。
也有人,聊了三分钟,就直接转账1000块。
为什么?
因为他们触达的层次不一样。
第一层,是情绪。
你们聊得很开心,很有共鸣,很舒服。
但这只是情绪。
情绪会消失。
你下麦之后,他就不记得你是谁了。
我在Soul派对房见过太多这样的人。
上麦的时候热热闹闹,下麦之后各过各的。
你问他还记不记得昨天那个人。
他说:"哪个人?"
这就是情绪关系的特点。
来得快,去得也快。
第二层,是价值。
你能给他提供什么?
他能给你提供什么?
这是价值交换。
比如,有人在Soul上找我。
他说:"卡若,我想学私域。"
我说:"你会什么?"
他说:"我会剪辑。"
我说:"那你帮我剪视频,我教你私域。"
他说:"可以。"
这就是价值交换。
他用他的技能,换我的知识。
我用我的知识,换他的时间。
双方都有收获。
这是第二层关系。
第三层,是利益。
你们能不能一起赚钱?
这是最核心的。
很多人在Soul上聊项目,聊得天花乱坠。
但一说到钱,就没下文了。
为什么?
因为他们没有想清楚,怎么分钱。
合作的本质,就是分钱。
你不把分钱的逻辑讲清楚,就不会有合作。
前几天,有个小伙伴在Soul上找我。
他说:"卡若,我有个项目,你能不能帮我看看?"
我说:"可以,你先说说你的项目。"
他说了十分钟。
我听完,问了他一个问题:"你想让我帮你做什么?"
他愣了。
"我想让你帮我推广。"
我说:"那我能得到什么?"
他又愣了。
"我...我还没想好。"
我笑了。
"你没想好,我怎么跟你合作?"
他沉默了。
很多人找我合作,都是这样。
他们只想到自己的需求,没想到对方的利益。
他们以为,只要项目好,别人就会帮他。
但其实,项目好不好,不重要。
重要的是,合作之后,大家能不能都赚到钱。
我经常在Soul上讲一个案例。
有个人做游戏金币倒卖,一个月能赚20万。
他找到我,说:"卡若,你能不能帮我推广?"
我说:"你打算怎么分?"
他说:"我给你20%。"
我说:"不够。"
他惊了:"20%还不够?"
我说:"我帮你推广,你的业务量会翻倍。"
"你现在一个月赚20万,我帮你推广之后,你能赚50万。"
"但我只拿20%,就是10万。"
"我为什么要帮你?"
他想了想,说:"那你要多少?"
我说:"我要40%。"
他说:"太多了。"
我说:"那我们不合作。"
他又沉默了。
过了两天,他又找我。
他说:"卡若,我想通了,40%可以。"
我说:"现在不行了。"
他愣了:"为什么?"
我说:"因为你犹豫了两天,说明你不是真心想合作。"
"真心想合作的人,当场就会答应。"
他说:"那现在怎么办?"
我说:"现在我要50%。"
他说:"为什么又涨了?"
我说:"因为你浪费了我两天时间。"
最后,我们没有合作。
但这个案例,我经常在Soul上讲。
为什么?
因为很多人不懂,合作的本质是什么。
合作的本质,是分钱。
你不舍得分钱,就不会有合作。
你犹豫分钱,说明你不信任对方。
你不信任对方,对方也不会信任你。
Soul上有个小姐姐,她讲了一个故事。
她说,有个客户在Soul上认识她,聊了七八分钟。
她说她要出去相亲,没时间聊。
客户说:"那你先加我微信吧。"
她说:"等会再加。"
客户说:"我怕断了之后找不到你。"
她说:"好吧。"
加了微信,客户直接转了1000块给她。
她惊了:"大哥你没毛病吧?"
"我们才聊了几分钟,你就转1000块给我?"
客户说:"我在外面闯荡这么多年了,看人的眼光还是有的。"
"我觉得你这个小姑娘信得过。"
听到这个故事,派对房里炸了。
所有人都在问:"为什么他这么信任你?"
小姐姐说:"因为我没有目的性。"
"我当时在化妆,手机在另一边充电。"
"我根本没有用心跟他聊。"
"就是随便聊两句。"
"但他感觉到我不是来骗他的。"
我听完,说了一句话:"这就是情绪价值。"
"你不带目的性,对方就会信任你。"
"你越想从对方身上得到什么,对方越不会给你。"
后来,我在Soul上总结了一个公式:
情绪+价值+利益=合作。
缺任何一个,都不会有合作。
只有情绪,没有价值和利益,你们聊得再嗨,也不会有结果。
只有价值,没有情绪和利益,对方不会信任你。
只有利益,没有情绪和价值,合作不会长久。
三个都有,才是真正的合作。
有人问我:"卡若,怎么才能做到三个都有?"
我说:"很简单。"
"第一,先建立情绪。让对方觉得跟你聊天很舒服。"
"第二,展示价值。让对方知道你能帮他解决什么问题。"
"第三,讲清楚利益。把分钱的逻辑说明白,大家都能赚到钱。"
我停了一下。
"但大部分人,第一步就做错了。"
"他们上来就讲项目,讲利益,讲怎么赚钱。"
"但对方根本不认识你,不信任你。"
"你讲再多,也没用。"
昨天晚上,有个小伙伴问我:"卡若,我怎么知道对方是不是真心想合作?"
我说:"很简单,看他分不分钱。"
"真心想合作的人,会主动提分钱。"
"他会说,这个项目我们怎么分?你要多少?"
"不真心的人,永远在说,这个项目很好,但从不提钱。"
他说:"那我怎么办?"
我说:"你主动提。"
"你说,这个项目如果合作,我们怎么分?"
"如果他犹豫,说再考虑考虑,那就不要合作了。"
"真正想合作的人,当场就会给你答案。"
我在Soul上见过太多人。
有些人,聊得很嗨,但从不谈钱。
有些人,一上来就谈钱,但从不建立信任。
有些人,既建立信任,又谈价值,还谈钱。
只有最后一种人,才是真正会合作的人。
前几天,有个老板来找我。
他说:"卡若,我有287个人的财务团队,你能不能帮我做私域?"
我说:"可以,你打算怎么合作?"
他说:"你帮我搭系统,我给你分成。"
我说:"分多少?"
他说:"你要多少?"
我说:"我要30%。"
他说:"可以。"
我说:"那我们什么时候开始?"
他说:"现在。"
三个月后,他的私域有了5000个精准客户。
我分了165万。
这就是合作。
后来,我在Soul派对房里讲这个案例。
有人问我:"卡若,你为什么要30%?"
我说:"因为我知道我的价值。"
"我帮他搭系统,他的业务能翻倍。"
"他赚的钱,足够分给我30%。"
"如果我要得太少,他反而不会重视我。"
"如果我要得太多,他会犹豫。"
"30%,刚刚好。"
派对房里,很安静。
我继续说:"合作的本质,不是你帮我,也不是我帮你。"
"而是我们一起赚钱。"
"你赚到钱了,我才能赚到钱。"
"我赚到钱了,你才会继续跟我合作。"
这本书的真实目的,不是教你怎么成功。
而是告诉你,人和人之间的关系,是怎么建立的。
情绪,让你们认识。
价值,让你们信任。
利益,让你们合作。
三个都有,才是长久的关系。
缺任何一个,都只是过客。

View File

@@ -1,417 +0,0 @@
# 1.5 为什么99%的合作死在沟通差而不是能力差
"你们不是方向不同,是根本没在一个频道上说话。"
2024年11月17日,早上七点半。
Soul派对房里有个小伙伴问我一个问题。
他说:"卡若,我们团队有个INTJ,能力很强,但所有人都说他要叛变。"
我笑了。
"不是他要叛变,是你们根本没在一个频道上说话。"
他愣了。
"什么意思?"
我说:"合作失败,99%不是因为能力差,是因为沟通差。"
"你们说的话,他听不懂。"
"他说的话,你们也听不懂。"
"这怎么合作?"
2018年,我们公司破产的时候,我复盘了很久。
我发现,团队里200多个人,能力都不差。
但为什么还是做垮了?
因为沟通出了问题。
我举个例子。
有一次,我让一个项目负责人去做推广。
我说:"你去把这个项目推广出去,越快越好。"
他说:"好的。"
一个月后,我问他进度。
他说:"我在做了。"
我说:"做了什么?"
他说:"我在研究怎么推广。"
我当场就炸了。
"你研究了一个月?我要的是结果,不是研究!"
他也炸了。
"你又没说具体怎么做,我怎么知道你要什么?"
那次之后,我意识到一个问题。
我们说的话,根本不在一个频道上。
我说"越快越好",他理解的是"我要先研究清楚再做"。
我要的是"先干起来,边做边调整"。
他要的是"先想清楚,再一步到位"。
这就是沟通差。
不是他能力不行。
是我们对"越快越好"的理解,完全不一样。
后来,我开始研究MBTI。
我发现,不同性格的人,说话的方式完全不一样。
ENTJ说话,直接、果断,关注结果。
他会说:"这个项目,三天内上线,有问题吗?"
INTP说话,逻辑、细致,关注过程。
他会说:"这个项目的底层逻辑是什么?我们需要先梳理清楚。"
如果你是ENTJ,你跟INTP沟通,你会觉得他磨蹭。
如果你是INTP,你跟ENTJ沟通,你会觉得他粗暴。
但其实,你们只是说话的方式不一样。
晚上八点,Soul派对房里有个小伙伴分享了一个案例。
他说,他们团队有个INTJ,总是有自己的想法。
团队让他往东,他偏要往西。
他说他的方案更好。
但他从来不跟团队沟通。
他就自己做自己的。
三个月后,他离职了。
自己出去创业了。
带走了一批客户。
我听完,说了一句话:"这不是叛变,这是沟通失败。"
"为什么?"
小伙伴问。
我说:"因为你们从一开始,就没有把话说清楚。"
"INTJ是什么性格?独立思考,有自己的想法,不喜欢被管。"
"但你们给他的是什么?执行任务。"
"他的目标是做自己想做的事,你们的目标是完成公司的任务。"
"这两个目标,从一开始就是冲突的。"
"你们没有在合作之前,把这个冲突讲清楚。"
"所以他就走了。"
我停了一下。
"这不是他的问题,也不是你们的问题。"
"这是沟通的问题。"
很多人以为,合作失败是因为对方能力不行。
但其实,大部分合作失败,是因为沟通不到位。
你以为你说清楚了,其实对方根本没听懂。
对方以为他听懂了,其实他理解的跟你想的完全不一样。
这就是沟通差。
前几天,有个老板来找我。
他说:"卡若,我们团队天天吵架,怎么办?"
我说:"你先告诉我,你们吵什么?"
他说:"他们总是不按我的要求做。"
我说:"你的要求是什么?"
他说:"我说了,要把这个项目做好。"
我说:"什么叫做好?"
他愣了。
"做好就是...做好啊。"
我笑了。
"你看,你自己都说不清楚什么叫做好,他们怎么知道你要什么?"
这就是大部分合作失败的原因。
老板说"做好",员工理解的是"做完"。
老板要的是"超预期",员工以为"及格就行"。
老板说"越快越好",员工理解的是"不能出错"。
这些词,听起来都一样。
但每个人的理解,完全不一样。
后来,我在Soul上总结了一个方法:
沟通的三个层次。
第一层:说清楚你要什么。
不是"做好",而是"三天内上线,日活要达到1000"。
不是"越快越好",而是"今天下午六点之前给我方案"。
具体,明确,有标准。
第二层:确认对方听懂了。
不是"你懂了吗?",而是"你复述一下我刚才说的"。
让对方用自己的话,把你的要求说一遍。
你就知道,他是不是真的听懂了。
第三层:定期确认进度。
不是"有问题找我",而是"每天下午五点,给我发一个进度汇报"。
主动确认,不要等对方来找你。
有人问我:"卡若,这样不是很累吗?"
我说:"累,但有效。"
"你前期花时间把话说清楚,后期就不会出问题。"
"你前期不说清楚,后期就是一堆矛盾。"
我停了一下。
"合作的本质,就是把话说清楚。"
"说清楚你要什么,对方能给什么,大家怎么分钱。"
"这三个问题不说清楚,就不要合作。"
晚上九点,Soul派对房里有个小姐姐分享了一个故事。
她说,有个客户在Soul上找她合作。
聊了半天,客户突然说:"你能不能帮我做这个?"
她说:"可以,但你要给我多少钱?"
客户说:"你先做,我们再谈。"
她说:"不行,我们现在就要谈清楚。"
客户说:"你这么现实啊?"
她说:"不是现实,是负责。"
"我不想做到一半,你说我做得不对。"
"我也不想做完了,你说我要得太多。"
"所以我们现在就要说清楚。"
最后,他们没有合作。
但小姐姐说,她不后悔。
"因为如果连钱都说不清楚,后面一定会出问题。"
我听完,说了一句话:"这就是沟通。"
"很多人以为,沟通就是聊得开心。"
"但其实,沟通就是把话说清楚。"
"说清楚你要什么,我要什么,我们怎么合作。"
"这才是真正的沟通。"
派对房里,很安静。
我继续说:"99%的合作失败,不是因为能力差。"
"是因为大家根本没在一个频道上说话。"
"你说A,他理解成B。"
"他做了C,你要的是D。"
"这怎么合作?"
后来,我在Soul上分享了一个案例。
我说:"我之前有个合作伙伴,能力很强。"
"但我们合作了三个月,就散了。"
"为什么?"
"因为我们对'成功'的定义不一样。"
"我觉得,三个月做到100万流水,就是成功。"
"他觉得,三个月做到盈利,才是成功。"
"我们从来没有讨论过这个问题。"
"所以三个月后,我说'我们成功了',他说'我们还没成功'。"
"然后,就散了。"
我停了一下。
"这不是谁对谁错的问题。"
"这是沟通的问题。"
"我们从一开始,就应该把'成功'的定义说清楚。"
有人问我:"卡若,那怎么才能把话说清楚?"
我说:"很简单,用数字。"
"不要说'做好',要说'三天内上线,日活1000'。"
"不要说'尽快',要说'今天下午六点之前'。"
"不要说'成功',要说'三个月做到100万流水'。"
"用数字,用标准,用时间。"
"这样,大家才知道你要什么。"
后来,我发现一个更有趣的事情。
沟通不只是说话。
还有倾听。
很多人沟通的时候,只顾着自己说。
根本不听对方在说什么。
对方说:"我觉得这个方案有问题。"
他说:"没问题,按我说的做。"
对方说:"但是..."
他说:"没有但是,就这样。"
这不是沟通。
这是单向输出。
真正的沟通,是双向的。
你说,他听。
他说,你听。
你们互相理解,互相确认。
最后达成共识。
这才是沟通。
晚上十点,我在Soul上讲了一个德国兄弟的故事。
那是2012年,我做魔兽世界外挂的时候。
有个德国人开发了一个外挂,叫Boss Name。
我想做他的全国总代。
但我不会德语。
我以为他只会德语。
所以我就用谷歌翻译,把中文翻译成德语,发给他。
谷歌翻译很垃圾,翻译出来的德语,他根本看不懂。
我们沟通了一个月,什么都没谈成。
后来,他跟我说:"I can speak English."
我当场就笑了。
原来他会英语。
我也会英语。
我们之前一个月的沟通,全是在鸡同鸭讲。
从那以后,我每次合作,第一件事就是确认:
我们说的是同一种语言吗?
不是指英语、中文、德语。
而是指,我们对同一个词的理解,是不是一样的。
比如,"做好"。
你理解的"做好"是什么?
他理解的"做好"是什么?
如果不一样,那就先统一定义。
再开始合作。
这本书的真实目的,不是教你怎么成功。
而是告诉你,合作失败,99%不是因为能力差。
是因为沟通差。
你们根本没在一个频道上说话。
你说A,他理解成B。
他做了C,你要的是D。
所以,下次合作之前,先把话说清楚。
说清楚你要什么,对方能给什么,大家怎么分钱。
用数字,用标准,用时间。
然后,让对方复述一遍。
确认他真的听懂了。
这样,合作才不会死在沟通上。

View File

@@ -1,381 +0,0 @@
# 2.1 相亲故事:你以为找的是人,实际是在找模式
"真正赚钱的不是撮合成功,是让他们一直相亲。"
2024年11月18日,晚上八点。
Soul派对房里来了一个做相亲的小姐姐。
她说她做一对一相亲市场,维护了两个微信群,几百个客户。
但转化很差。
她问我:"卡若,我该怎么做流量?"
我说:"你先告诉我,你的商业模式是什么?"
她愣了。
"什么叫商业模式?"
我说:"你是靠撮合成功赚钱,还是靠持续服务赚钱?"
她说:"撮合成功收几K。"
我笑了。
"那你死定了。"
相亲这个生意,我在Soul上见过太多人做。
有人做线下派对,收茶水费。
有人做会员活动,收会员费。
有人做高端相亲,一单收几万。
但99%的人,都死在一个问题上:撮合成功了,就没钱赚了。
这不是商业模式。
这是一锤子买卖。
我在Soul上认识一个做婚介的朋友,他跟我讲过一个故事。
他说:"我之前做一对一相亲,成功率很高。"
"十对里面,能成三对。"
"但我亏钱。"
我问:"为什么?"
他说:"因为成功之后,他们就不来了。"
"我只能赚那一次几千块的服务费。"
"但我为了撮合他们,花了大量的时间和精力。"
"成本算下来,根本不赚钱。"
我问:"那后来呢?"
他说:"后来我改了模式。"
"我不再追求撮合成功。"
"我追求让他们一直相亲。"
"什么意思?"
我问。
他说:"你看,一个人来相亲,是因为他想找对象。"
"但他真的想找对象吗?"
"不一定。"
"有些人只是想找个人聊聊天,找个人陪着吃个饭。"
"有些人只是想找个人填补空虚。"
"有些人只是想找个人证明自己还有市场。"
他停了一下。
"所以我的模式变了。"
"我不再给他们介绍'最合适'的人。"
"我给他们介绍'感觉还行'的人。"
我皱了眉头。
"这不是骗人吗?"
他说:"不是骗人,是满足需求。"
"如果我给他们介绍最合适的人,他们见一次就成了。"
"我就赚一次钱。"
"但如果我给他们介绍'感觉还行'的人,他们就会一直相亲。"
"每次相亲,我都收费。"
"一个客户,我能赚十次、二十次的钱。"
听到这里,派对房里炸了。
所有人都在打字:"这不是骗人吗?"
他说:"不是骗人,是商业模式。"
"你们以为相亲是什么?是找真爱吗?"
"不是。"
"相亲是一种服务,是一种体验。"
"客户需要的不是结婚,是过程。"
他停了一下。
"如果你把相亲当成'撮合成功',你就死定了。"
"因为撮合成功了,客户就不需要你了。"
"但如果你把相亲当成'持续体验',你就赚钱了。"
"因为客户会一直需要你。"
那天晚上,我们在Soul上聊了两个小时相亲市场。
我发现,所有做相亲的人,都分成两类。
第一类:追求撮合成功。
他们觉得,相亲的目的就是让两个人在一起。
所以他们拼命给客户介绍最合适的人。
成功率很高,但赚不到钱。
因为成功之后,客户就不来了。
第二类:追求持续服务。
他们觉得,相亲的目的是提供一种社交体验。
所以他们给客户介绍"感觉还行"的人,让客户一直相亲。
成功率不高,但一直赚钱。
因为客户会一直来。
后来,我在Soul上见到了八戒。
他做相亲+交友的模式。
早期,他也在抖音拍IP,做一对一相亲。
效果很差。
后来他改了模式。
他不再做一对一相亲。
他做线下读书会,做高端交友。
目标人群锁定得非常清楚:年收入50万以上,有车有房,想扩展社交圈。
他不追求撮合成功。
他追求"让这些人一直来参加活动"。
每次活动收300块茶水费。
一个月办10场,一场30人,就是9万。
一年下来,100多万。
还有一个叶姐,她走的是高端相亲路线。
她老公是上市公司老板,资源很强。
她的客户,都是年收入百万以上的企业主、高管。
她不收撮合费。
她收会员费,一年5万。
会员可以参加她的所有活动:读书会、沙龙、旅游、高端饭局。
她每年维护200个会员,就是1000万。
她的商业模式,不是撮合成功。
而是"提供一个高端社交圈"。
客户来不是为了找对象。
是为了认识更多同层次的人。
第二天下午,那个做相亲的小姐姐约我线下见面。
我们在湖滨南路一家咖啡馆聊了两个小时。
她问我:"卡若,那我该怎么改?"
我说:"你先想清楚一个问题。"
"你的客户,真的是来找对象的吗?"
她说:"是啊。"
我说:"不一定。"
"有些人是来找对象的,有些人是来找陪伴的,有些人是来找社交的。"
"你要分清楚,他们到底想要什么。"
我停了一下。
"如果你把所有客户都当成'想找对象'的,你就会拼命撮合他们。"
"撮合成功了,你就没钱赚了。"
"但如果你把客户分成'想找对象'和'想社交'两类,你就知道怎么做了。"
"怎么做?"
她问。
我说:"很简单。"
"对于'想找对象'的客户,你就做高端定制,一单收1万。"
"对于'想社交'的客户,你就做会员制,一年收5000,可以参加所有活动。"
"这样,你的客户就分层了。"
"想找对象的,你赚一次大钱。"
"想社交的,你赚长期的钱。"
她沉默了。
过了几秒,她说:"我明白了。"
"我之前一直以为,相亲就是撮合成功。"
"但其实,相亲只是一个入口。"
"真正赚钱的,是后面的服务。"
我说:"对。"
"相亲只是个入口。"
"真正的生意,是持续的关系。"
后来,我在Soul上总结了一个公式:
相亲市场的商业模式=入口x留存x复购。
入口:用"相亲"这个需求,吸引客户进来。
留存:用"社交圈"这个价值,让客户留下来。
复购:用"持续活动"这个体验,让客户一直付费。
如果你只做入口,不做留存和复购,你就是一锤子买卖。
如果你把三个都做好,你就是持续赚钱。
派对房里,有人问我:"卡若,那王婆说媒为什么这么火?"
我说:"因为她做的不是相亲,是内容。"
"她的商业模式,不是撮合成功赚钱。"
"而是用'王婆说媒'这个IP,吸引流量,然后变现。"
"她的客户,不是来找对象的。"
"是来看热闹的。"
我停了一下。
"但她的账号转化率很差。"
"我朋友负责过她的公众号两个月,转化非常差。"
"因为她的流量是泛流量,不是精准流量。"
"所以她虽然火,但不一定赚钱。"
有人又问:"那精准流量怎么来?"
我说:"不是靠打粉。"
"是靠定位。"
"你要让你的客户知道,你是干什么的,你能提供什么价值。"
"比如,你是做高端相亲的,你的客户就是年收入50万以上的人。"
"你在抖音上发的内容,就要针对这个人群。"
"不要发那些大众化的内容。"
我停了一下。
"精准流量的成本,比泛流量高。"
"但转化率,比泛流量高十倍。"
"一个精准粉丝,价值1000块。"
"一个泛粉丝,价值10块。"
后来,我发现一个很有意思的现象。
所有做相亲的人,都在说"我要帮客户找到真爱"。
但真正赚钱的,都不是靠"找到真爱"。
而是靠"持续提供社交体验"。
因为"找到真爱"是低频的。
一个人一辈子,只会找一次真爱。
但"社交体验"是高频的。
一个人一辈子,会参加无数次社交活动。
低频的生意,赚一次钱。
高频的生意,赚一辈子的钱。
一周后,那个小姐姐又找我。
她说:"卡若,我想明白了。"
"我不做一对一相亲了。"
"我做交友+相亲的模式。"
"每个月办两场线下活动,一场收300块茶水费。"
"同时,我也做会员制,一年5000块,可以参加所有活动。"
"这样,我既有短期收入,又有长期收入。"
我说:"对,这就是商业模式。"
"你不是在找对象,你是在建立一个社交圈。"
"对象只是附加值,社交圈才是核心价值。"
这本书的真实目的,不是教你怎么成功。
而是告诉你,很多生意,表面上看是一回事,实际上是另一回事。
相亲,表面上是找对象。
实际上,是提供社交体验。
你以为客户要的是结果。
其实客户要的是过程。
你以为你在卖"撮合成功"。
实际上你在卖"持续陪伴"。
搞清楚这个,你就知道怎么赚钱了。
真正赚钱的不是撮合成功,是让他们一直相亲。

View File

@@ -1,363 +0,0 @@
# 2.2 找工作迷茫者:为什么简历解决不了人生
"你连自己擅长什么都不知道,简历有什么用?"
2024年11月19日,早上七点。
Soul派对房里有个小伙伴问我这个问题。
他说他上一份工作是做剪辑,老板嫌他剪得不好,把他开了。
现在很迷茫。
不知道该做什么。
我说:"你先回答我一个问题,你最赚钱的一个月,做的是什么?"
他愣了。
"我...我没有赚过钱,我一直在打工。"
我说:"那你最有成就感的一件事,是什么?"
他沉默了。
过了几秒,他说:"我不知道。"
我说:"你连自己擅长什么都不知道,简历有什么用?"
他又愣了。
"那我该怎么办?"
这种人,我在Soul上见过太多。
每天都有人在派对房里问:"卡若,我该找什么工作?"
他们以为,找工作就是投简历,面试,然后拿offer。
但其实,找工作是人生规划的一部分。
你连自己想要什么都不知道,怎么找工作?
前几天,有个小伙伴在Soul上分享。
他说他想做"全媒体运营师"。
包括电商、直播、自媒体、短视频剪辑,都想做。
我听完,说了一句话:"等你全部学完,黄花菜都凉了。"
他说:"那我该怎么办?"
我说:"你一定要找准你自己的定位。"
"你擅长什么就做什么,你不擅长的就不要碰。"
"你不擅长播,你就不要播。"
"就这么简单。"
派对房里,有人问:"那我怎么知道自己擅长什么?"
我说:"你做过什么事情,让你觉得很有成就感?"
"这就是你的能力。"
很多人以为,能力就是学历,就是证书,就是技能。
但其实,能力是你能创造价值的东西。
你会剪辑,这不是能力。
你能通过剪辑,帮别人的视频播放量提升10倍,这才是能力。
你会写文案,这不是能力。
你能通过文案,帮别人的转化率提升20%,这才是能力。
昨天晚上,有个小伙伴说,他很迷茫。
他说:"我一没有手艺,二没有人脉,什么都没有,就剩10万到15万的钱了。"
"但我想干点生意,干点什么?"
我说:"你之前做什么的?"
他说:"我之前在北京,给老板开车。"
"接待过很多领导,除了副国以下基本都见过。"
我说:"那你有资源啊。"
"你有开车的能力,你有接待的能力,你还认识这么多人。"
"这不叫没有能力。"
他说:"但这些能力,我不知道怎么用。"
这就是大部分人的问题。
不是没有能力。
是不知道自己的能力能用在哪里。
我说:"你可以做三件事。"
"第一,回溯你之前做过的最有成就感的事情。"
"那个时刻,你为什么有成就感?那就是你的爽点,也是你的能力。"
"第二,问AI。"
"你把你会的东西,你做过的事情,都告诉AI。"
"让AI给你五个方向,你挑一个。"
"第三,先做起来。"
"不要光想不做,先走出第一步。"
派对房里,有人说:"我想做主播,但我不知道怎么开始。"
我说:"你播过吗?"
他说:"播过,讲故事,在线能到2000人。"
我说:"那你还迷茫什么?"
他说:"但那个公司倒了,我现在不知道该去哪。"
我笑了。
"你知道为什么那个公司倒了吗?"
"因为风向不对了。"
"去年4月,抖音给读书类、历史类主播很多流量。"
"但后来,大家都去卖货,把风向带偏了。"
"现在,这个赛道已经不好做了。"
我停了一下。
"你现在要做的,不是找一个新公司。"
"而是找一个新赛道。"
很多人找工作,只看公司,不看赛道。
他们以为,进了一个好公司,就有好未来。
但其实,赛道比公司重要。
你在一个上行的赛道里,随便做做都能赚钱。
你在一个下行的赛道里,再努力也没用。
前几天,Soul上有个小伙伴说,他在做物流。
每天晚上10点到12点才睡觉,早上10点才起来。
基本天天待在自己的一亩三分地,也没时间出去。
他说:"我想换工作,但不知道该换什么。"
我说:"你为什么要换?"
他说:"因为我觉得这份工作没前途。"
我说:"那你觉得什么工作有前途?"
他说:"我不知道。"
我说:"那你还换什么?"
这就是大部分人的问题。
他们不知道自己想要什么。
但他们知道自己不要什么。
所以他们一直在换工作。
从A公司换到B公司。
从B公司换到C公司。
但每一份工作,都做不长。
因为他们不知道自己想要什么。
我在Soul上经常讲一个故事。
2018年,我破产之后,全国各地找工作。
边旅游,边面试,边投简历。
每个城市,我都去面试。
但我不是真的想找工作。
我是想认识老板。
每次面试完,我都会跟老板说:"我如果做成这个项目,你就给我正常的钱加分润。"
"如果做不成,我一块钱就走。"
大部分老板,都会同意。
因为他们觉得,这个人很靠谱。
干两个月,只要一块钱。
做不成,他只损失一块钱。
做成了,他赚大了。
后来,我认识了很多老板。
他们成了我的资源。
2019年,我重新创业的时候,这些老板给了我很大的支持。
一下子,我就签了很多单子。
但如果我当时只是找工作,投简历,面试,拿offer。
我不会有这些资源。
我也不会有今天。
晚上八点,Soul派对房里有人问:"卡若,我刚毕业,该找什么工作?"
我说:"你先回答我三个问题。"
"第一,你最擅长什么?"
"第二,你最想做什么?"
"第三,你能给别人创造什么价值?"
"如果这三个问题你都回答不出来,那你先不要找工作。"
"你先去做一些事情,找到这三个问题的答案。"
很多人以为,找工作就是为了赚钱。
但其实,找工作是为了找到自己的位置。
你在这个社会上,能做什么。
你能给别人创造什么价值。
这才是找工作的意义。
Soul上有个小伙伴,他做了18年游戏。
他说,现在开发行业下行很厉害。
他们后台有8000份简历,都是开发的。
但他们筛选程序员,极其严格。
我问他:"为什么?"
他说:"因为大部分程序员,只会写代码,不会创造价值。"
"他们以为,学了一门技术,就能找到工作。"
"但其实,技术只是工具,不是能力。"
"能力是你用技术创造价值的能力。"
后来,我在Soul上总结了一个公式:
找工作=能力x赛道x资源。
能力,是你能创造价值的东西。
赛道,是你选择的行业和方向。
资源,是你能调动的人和钱。
三个都有,才能找到好工作。
缺任何一个,都只是打工。
派对房里,有人问:"卡若,那我该怎么提升能力?"
我说:"不要学技能,要学创造价值。"
"你去找几家公司,免费帮他们干活。"
"剪一个视频,看他们觉得怎么样。"
"写一个文案,看转化率能不能提升。"
"这样,你就知道自己的能力在哪了。"
我停了一下。
"简历解决不了人生。"
"能力才能。"
晚上九点,Soul上有个小姐姐,她开了个派对房。
她做"厦门找工作"。
我一看,直接私聊她,邀约她来公司面试。
第二天早上9点半,她就来了。
我们聊了不到10分钟,我就决定录用她。
为什么?
因为她敢在Soul上开派对房找工作。
这说明她有执行力,有想法,有行动力。
这比简历重要得多。
后来,我跟她说:"你知道吗?Soul上有多少人没工作?"
"你能在Soul上开派对房找工作,你就能帮他们找工作。"
"这就是一个生意。"
她愣了。
"什么意思?"
我说:"你帮别人介绍工作,到岗一个,我给你500块。"
"这就是人力资源的生意。"
"优秀的人找不到匹配的工作,优秀的企业找不到匹配的人。"
"你把他们连接起来,就能赚钱。"
这本书的真实目的,不是教你怎么成功。
而是告诉你,找工作不是找一份薪水。
是找一个位置。
找到你能创造价值的位置。
简历解决不了人生。
能力才能。
你连自己擅长什么都不知道,简历写得再漂亮,也没用。
先找到自己的能力。
再找到能发挥能力的赛道。
最后,用资源放大你的能力。
这才是找工作的正确方式。

View File

@@ -1,461 +0,0 @@
# 2.3 撸运费险:小钱困住大脑的真实心理
"你不是在赚钱,你是在消耗自己。"
2024年11月20日,早上六点四十。
派对房里上来一个女生。
声音很年轻,有点急促。
"卡若,我最近在撸运费险,一个月能赚几百块。"
我问:"你一天花多少时间?"
她说:"三到四个小时,有时候会更久,因为流程卡住了。"
我笑了。
"你知道你现在的小时价值是多少吗?"
她沉默了。
每天早上六点到九点,我在Soul派对房开播。
三个小时里,总会遇到几个"正在赚小钱"的人。
有的在撸运费险。
有的在刷单。
有的在做问卷调查。
有的在薅平台羊毛。
他们的共性只有一个:
短期确定性强,但长期成长性为零。
你越做,越依赖它。
越依赖,越失去学习新技能的时间和耐心。
这就是"小钱陷阱"。
我让她算了一个账。
"三小时赚30块,你的小时价值10块。"
"如果你把这三小时拿来练一个可交易的技能,比如基础剪辑、手机摄影、短文案,两周后接第一单,一单100到300。"
"同样三小时,你的小时价值就从10块,变成50到100。"
她问:"但我现在就能赚到钱,为什么要等两周?"
我说:"因为你要从'确定的小钱'跳到'可成长的钱'。"
"确定的小钱让你焦虑缓解,但不会改变你的人生结构。"
"可成长的钱前期慢,但一旦掌握,会越做越快,越做越值钱。"
派对房里,有人打字:"我也是这样,每天刷单,刷到凌晨两点。"
我说:"你不是在赚钱,你是在消耗自己。"
第二天早上七点十分,她在派对房里给我发消息。
"卡若,能不能线下聊一下?"
我说可以。
我们约在思明区一家咖啡馆。
她穿着白T,背一个小包,脸上有点憔悴。
她说:"我昨天又撸运费险到两点,今天四点才睡。"
我看着她。
"你不是在赚钱,你是在消耗自己。"
她低下头。
"我知道,但我停不下来。"
我问:"为什么停不下来?"
她说:"因为我怕。"
"我怕没有收入。"
"我怕一停下来,就没钱了。"
我点点头。
"这就是小钱陷阱的本质。"
"它给你的不是钱,是安全感。"
"你依赖的不是收入,是'我今天还能赚到钱'的感觉。"
线下聊的时候,我只做三件事。
第一,把她现在的时间结构画出来。
早上起床到睡觉,哪些时间可控,哪些不可控。
我让她把一天的时间写出来:
早上9点起床。
10点-12点:撸运费险。
12点-1点:吃饭。
1点-3点:撸运费险。
3点-5点:刷手机。
5点-7点:吃饭,休息。
7点-10点:撸运费险。
10点-2点:撸运费险+刷手机。
2点睡觉。
我看完,说了一句话:"你一天有8个小时在撸运费险,但你赚了多少?"
她说:"30到50块。"
我说:"你的小时价值是4到6块。"
"比你楼下超市收银员的时薪还低。"
她沉默了。
第二,把她能上手的技能列出来。
剪辑、字幕、封面、写文案、做账号起号,选一个最容易起飞的。
她说她之前学过一点剪辑,但没坚持。
我说:"那我们就从剪辑开始。"
"不是学剪辑,是学'能卖的剪辑'。"
"你做的东西,要有人愿意付钱。"
第三,把两周的目标量化。
"两周后,你必须接到第一单,哪怕是100块,必须成交。"
"这个目标不是为了赚钱,是为了证明你能靠技能赚钱。"
她点头。
她选了"短视频字幕+封面"。
理由很简单:
门槛低。
交付快。
客户群体广。
我给了她一个最小执行版本的路径。
第一天:
装工具(剪映、PS或Canva)。
把热键记熟。
照着教程做三个练习文件。
第二天:
找素材(从抖音热门视频里找)。
做10个练习作品。
发到朋友圈和派对房,要反馈。
第三天:
在派对房上麦。
公开说:"我能做字幕和封面,100块一条,今天接三单。"
她听完,问我:"真的有人会找我吗?"
我说:"你不试,怎么知道?"
第三天晚上,派对房里她上麦说:"卡若,我接到两单了,一单100,一单150。"
我问:"感觉如何?"
她说:"很累,但开心。"
我说:"你现在的小时价值,已经不是10块了。"
"两单250块,你花了多少时间?"
她说:"大概四个小时。"
我说:"你的小时价值是62块。"
"比撸运费险高了10倍。"
派对房里,有人打字:"太厉害了。"
她笑了。
我说:"这不是厉害,这是结构变化。"
"你从'薅平台羊毛'变成了'做服务'。"
"平台羊毛是有限的,服务是无限的。"
一周后,我们又线下见面。
她把手机递给我看,飞书里有个小表格:
客户列表。
交付时间。
回款金额。
复购记录。
我看见有三个客户复购了。
"为什么复购?"
"他们说我回复快,交付准时,还会主动给优化建议。"
我笑了。
"这就是从'薅平台羊毛'到'做服务'的分界线。"
"薅羊毛是一次性的,服务是可复购的。"
"你做得好,客户会一直找你。"
她说:"我现在不想撸运费险了。"
我说:"为什么?"
她说:"因为我知道我能靠技能赚钱。"
"运费险给我的是安全感,但技能给我的是成长。"
在派对房里,我经常讲小钱为什么会困住大脑。
小钱困住大脑,有三个原因。
第一,即时奖励。
今天动手,今天到账。
多巴胺一来,你的大脑就会把它标记为"有效路径"。
你会上瘾。
第二,确定性错觉。
看起来很稳定,但实际上高度依赖平台规则和漏洞,不可控。
平台一改规则,你的收入就归零。
第三,机会成本隐形化。
你以为只花了三小时。
但真实成本是:你没有成长的三小时。
这三小时,你本来可以学一个技能,接一个单子,认识一个客户。
但你没有。
你把时间花在了"确定的小钱"上。
我在派对房里给了她一个"反小钱SOP"。
1. 每天固定一小时学习可交易技能。
不是随便学,是学"能卖的东西"。
剪辑、字幕、封面、文案,选一个。
2. 每天固定半小时做输出与求反馈。
把作品发出去。
问别人:这个值多少钱?哪里可以改?
3. 每天固定半小时找单与跟进。
在派对房、朋友圈、社群里找客户。
主动说:我能做什么,多少钱一单。
4. 把"薅羊毛类任务"限定在每天30分钟内,当作过渡现金流。
不是完全停,是限时。
30分钟到了,立刻停。
5. 两周一个里程碑:有成交、有复盘、有升级。
两周后,你必须接到第一单。
两周后,你必须复盘一次。
两周后,你必须升级一次(涨价、换品类、找新客户)。
一个月后,她上麦。
"卡若,我现在不撸运费险了。"
"我在做字幕+封面的套餐,月入三千多。"
"我准备把套餐升到'基础剪辑+封面+字幕',目标五千。"
我说:"很好,你从'确定的小钱'跨到了'可成长的钱'。"
派对房里安静了几秒。
我补了一句。
"别怕慢,怕的是一直停在原地。"
第二个月,派对房里另一个女生上麦。
她说:"卡若,我也在撸运费险,但我不敢停,因为停了就没钱了。"
我没有劝停。
我让她先把"保底现金流"与"成长现金流"分开。
"你每天留30分钟做运费险,这是保底现金流。"
"你每天拿90分钟练一个能接单的技能,这是成长现金流。"
"先把结构搭起来,再讨论停不停。"
她松了一口气。
"我以为你会让我马上停。"
我说:"不会。"
"我不会让你断掉现金流。"
"我只会让你建立新的现金流。"
"等新的现金流超过旧的,你自然就停了。"
一周后,我们线下见面。
她带了三份作品来:字幕、封面、剪辑各一份。
我说:"你的字幕是能卖的,封面也能卖,剪辑先别卖。"
她问:"为什么?"
我说:"剪辑的交付时间长,反馈周期慢,很容易打击士气。"
"先从'快交付'开始,建立成交感。"
"等你成交感稳了,再做剪辑。"
我给她做了一个"价格阶梯"。
第一档:字幕100。
第二档:封面100。
第三档:字幕+封面套餐180。
她说:"能不能200?"
我说:"可以,但要给出'为什么值200'的理由。"
"比如24小时内交付+两次免费微调。"
她点头。
第三周,她在派对房复盘。
"我还是会想回去多做运费险,因为它太确定了。"
我说:"正常。"
"人都会回到确定性。"
"所以我们要用'结构的确定性'替代'小钱的确定性'。"
我把她的日程表重新排了一次。
早上6:30到7:00:运费险保底。
7:00到8:30:成长现金流练习与接单。
晚上21:30到22:00:复盘与改进。
她按照这个节奏走了两周。
第四周线下见面,她说:"我有三个复购客户了。"
我问:"你现在还想每天撸运费险吗?"
她笑了。
"我只做早上的30分钟了,其他时间不做了。"
"因为我知道我在成长。"
我说:"这就够了。"
"小钱不是敌人,它是过渡。"
"但你不能一直过渡,你要跨过去。"
我把这段流程总结成"三问法"。
判断一件事值不值得做。
第一问:它能不能复制?
运费险可以复制,字幕也可以复制。
但运费险是复制平台漏洞,字幕是复制你的技能。
第二问:它能不能被替换?
运费险很容易被替换,平台一改规则就没了。
字幕不容易被替换,你的技能是你的。
第三问:它能不能增长?
运费险很难增长,天花板很低。
字幕能增长,你可以涨价、加品类、找大客户。
答案很清楚。
这本书的真实目的,不是教你怎么成功。
而是告诉你,即时的小钱,治不了长期的焦虑。
让自己从"赚钱的感觉"走向"赚钱的结构"。
选择比努力重要。
别被"马上到账"绑住。
被绑定的不是手,是你的时间。

View File

@@ -1,233 +0,0 @@
"不是游戏吸引他,是生活没有吸引力。"
2024年12月的一个早上,七点零五分,派对房里一个父亲上麦。
他说:"卡若,我儿子沉迷游戏,大学快毕业了还整天排位。"
我问:"他每天玩多久?"
他说:"五个小时起。"
我问:"现实里,他有什么让自己感到'厉害'的事吗?"
他说:"没有。"
我停了一下。
"不是游戏吸引他。"
"是生活没有吸引力。"
派对房里,我让他把儿子叫上来。
几分钟后,一个男生上麦。
声音很干净。
他说:"我只是不知道现实里做什么,游戏至少能让我赢。"
我说:"很正常。"
"人会选择能够快速给到'确定反馈'的事情。"
"游戏每一局都有反馈,现实很多事情没有反馈。"
他沉默了。
我没有劝他戒。
我让他先加一个"现实反馈环"。
"选一件现实里可在七天内完成的小事,并且能看到结果。"
他问:"什么事?"
我说:"做三个'字幕+封面'作品,发到派对房要反馈。"
"或者去打三次羽毛球,每次记录心率、步数和发球成功率。"
"关键不是内容,关键是你在现实里能看见自己在进步。"
他问:"能线下见一面吗?"
我说可以。
我们约在周末下午,在湖滨南路的球馆见。
那天下午三点,他准时到了。
穿着一件黑色T恤,背着一个双肩包,脸上有点紧张。
我带了两个朋友一起打。
第一局他很紧张。
发球老是失误,接球也接不住。
我没说什么,就让他继续打。
第二局开始敢抢网前。
他发现自己能抢到一两个球,眼睛亮了。
第三局,他主动要求练发球。
练了二十分钟,从十次进四次到十次进七次。
他笑了。
"比排位上分还开心。"
线下结束,我们在球馆的休息区坐下。
我给他倒了一杯水,问他:"你现在感觉怎么样?"
他说:"累,但开心。"
我说:"为什么开心?"
他想了想:"因为我能看到自己在变厉害。"
我点点头。
"这就是'现实反馈'。"
"游戏里,你打一局就能看到自己涨了多少分。"
"现实里,你练二十分钟发球,也能看到自己从四次进变成七次进。"
"这两种反馈是一样的。"
"只是现实里的反馈,很多人不知道怎么找。"
我给他一个"四步替代法"。
第一步,缩短游戏时间到每天90分钟,固定在晚上。
第二步,每天60分钟现实任务,要可记录、可反馈。
第三步,找一个同伴,每晚互发进度截图。
第四步,每周一次线下,让身体记住现实的成就感。
他点头。
"我试试。"
一周后,他在派对房复盘。
"我把游戏放到晚上九点到十点半了。"
"白天我做了四个字幕+封面,其中两个有人给了建议。"
"周末又去打了一次球,发球从七次进变成八次进。"
我问:"你现在还能五小时起吗?"
他笑了。
"不想了。"
"因为我白天有事做。"
第二周,我们又线下见面。
还是在那个球馆。
他把飞书打开给我看。
每天都有两张截图。
一张是作品缩略图。
一张是运动记录。
我说:"这就是现实的'升级反馈'。"
"不是你做得多漂亮,而是你看到自己变厉害。"
他说:"我现在理解你说的了。"
"游戏里,我每天都在变厉害,所以我停不下来。"
"现实里,我以前不知道自己在变厉害,所以我觉得无聊。"
"现在我知道怎么找反馈了,现实也变有趣了。"
派对房里,有人问:"卡若,为什么很多人戒不了游戏?"
我说:"因为他们在现实里没有竞争。"
"或者说,没有'能赢的场景'。"
"你给他一个可赢的场景,他自然就把时间搬过来了。"
第三周,他主动提出接一单。
我让他在派对房公开说:"字幕+封面,100块一条,今天接两单。"
他有点紧张。
"真的有人会找我吗?"
我说:"你不试,怎么知道?"
他咬了咬牙,上麦了。
晚上十点,他发来消息。
"接到一单。"
"客户说如果交付好,下次还找我。"
我说:"你现在不是在戒游戏。"
"你是在把'成就感的来源'从虚拟搬到现实。"
他说:"我明白了。"
"游戏里的成就感是假的,但现实里的成就感是真的。"
"真的成就感可以变成钱,可以变成能力,可以变成更多的可能性。"
我笑了。
"对,这就是区别。"
一个月后,他跟我说:"我还是会玩,但我不会躺一天了。"
"我白天要打球、要做作品、要交付。"
"游戏像甜点,不是主食。"
我笑了。
"这就够了。"
后来,他在派对房里分享他的经历。
有人问他:"你是怎么戒掉游戏的?"
他说:"我没有戒。"
"我只是找到了比游戏更有意思的事情。"
"游戏给我反馈,现实也能给我反馈。"
"现实的反馈还能变成钱。"
"你说我选哪个?"
派对房里,有人打字:"太对了。"
这本书的真实目的,不是教你怎么成功。
而是告诉你,游戏上瘾的本质,不是游戏太好玩。
是现实太无聊。
你给他一个可赢的场景,他自然就把时间搬过来了。
不要强行戒,要给替代。
让他在现实里找到比游戏更有成就感的事。

View File

@@ -1,211 +0,0 @@
"2018年查出糖尿病,2024年查出肝硬化,赚钱很重要,活着更重要。"
2024年12月的一个早上,六点二十分,派对房里有人问我。
"卡若,你每天四点起,不累吗?"
我说:"我以前不这样。"
"2018年查出糖尿病之后,我才开始认真过日子。"
派对房里另一个人补了一句。
"我爸也是糖尿病,现在每天都焦虑。"
我说:"焦虑是正常的。"
"但焦虑不能解决问题。"
"你要把'焦虑'换成'结构'。"
我把我的结构讲了一遍。
第一,监测。
每天固定两次血糖,早起与晚饭后。
每周一次体重与腰围。
每月一次肝功能指标复查。
数据全在飞书里,用表格记录,用折线图看趋势。
第二,饮食。
低GI,定时餐,少量多次。
三件事不能碰:暴食、酒精、熬夜之后的宵夜。
第三,运动。
快走40分钟或羽毛球60分钟,心率区间120-140。
第四,睡眠。
晚上22:30前睡,早上4:30起,固定午休20分钟。
有人问:"你怎么坚持?"
我说:"我不是靠意志,我靠流程。"
"起床,测血糖,喝水,拉伸,写30分钟,六点开播。"
"这套流程每天都一样。"
"人靠流程活下去,不是靠激情。"
派对房里有个小姐姐上麦。
她说:"我也想改作息,但我晚上很难睡。"
我说:"我们线下见一次。"
第二天中午,我们约在湖滨的一家咖啡馆。
她穿着一件白色的衬衫,脸上有点憔悴。
她把最近两周的睡眠截图给我看。
平均入睡时间1:20。
我看了一眼,说:"你的问题不是睡不着,是睡前的流程没有。"
她愣了:"什么叫睡前的流程?"
我把她的晚间流程改了三件事。
第一,睡前90分钟不看手机。
第二,固定20分钟的拉伸与泡脚。
第三,把"明天要做的三件事"写在纸上,脑子就不会一直转。
她按照这个流程走了五天。
第六天,她在派对房说:"我23:10睡着了,早上6:50起。"
我笑了。
"这就是流程的力量。"
"你不是睡不着,是你没有告诉你的身体'现在要睡了'。"
有人问我:"查出肝硬化之后,你最害怕的是什么?"
我说:"不是怕死。"
"是怕我还没把事情交代清楚。"
"怕我的团队不知道该怎么跑。"
"怕我的家人不知道我在忙什么。"
所以我把生活做成了SOP。
吃饭SOP。
运动SOP。
工作SOP。
陪伴SOP。
每一条SOP都写在飞书里,有人能接得上。
有个老哥在派对房说:"卡若,你说'疾病是第一次清醒',什么意思?"
我说:"清醒不是你知道自己病了。"
"清醒是你知道什么重要。"
"赚钱很重要,但活着更重要。"
"活着不是苟且,是'在场'。"
"你在场,家人才有依靠,团队才有方向。"
后来,有个做夜班的司机来线下找我。
我们约在思明区的一家茶馆。
他说他晚上10点到早上6点开车,白天睡不着,血糖乱成一团。
我看了一眼他的脸色,有点蜡黄。
我说:"你的问题不是血糖,是节奏。"
"夜班的人,节奏和普通人不一样。"
"你不能用普通人的作息来要求自己。"
我帮他把节奏改成"夜班版"。
第一,下班后固定30分钟快走,再睡。
第二,睡前不吃,起床第一餐低GI。
第三,每周两天换白天班,给身体一个重启点。
他照做了两周。
他在派对房说:"我现在血糖稳定了,精神也好一点。"
我笑了。
"这就是结构的力量。"
"你不是控制不了血糖,是你没有找到适合自己的节奏。"
我把健康这件事的做法,最后收束成一个"四格表"。
格一,监测。
格二,作息。
格三,饮食与运动。
格四,关系与托底。
关系很重要。
有人盯着你,你就不会放任自己。
托底也很重要。
你知道最坏的情况是什么,你就不会焦虑到失控。
派对房里,有人问:"卡若,你现在身体怎么样?"
我说:"血糖稳定,肝功能在恢复。"
"每天四点起,六点开播,九点结束。"
"然后去打球,去遛狗,去陪家人。"
"这就是我的生活。"
他问:"你不累吗?"
我说:"累。"
"但我知道,这种累是值得的。"
"因为我知道什么重要。"
这本书的真实目的,不是教你怎么成功。
而是告诉你,疾病是人生的第一次清醒。
它让你知道,什么重要,什么不重要。
赚钱很重要,但活着更重要。
活着不是苟且,是在场。
你在场,家人才有依靠,团队才有方向。
把焦虑换成结构。
把激情换成流程。
人靠流程活下去,不是靠激情。

View File

@@ -1,170 +0,0 @@
# 尾声|终极答案:努力不是关键,选择才是
写到这里,这本书差不多要结束了。
我想在最后,把我这18年来最深的一个认知告诉你。
---
**大部分人不是不努力,是选错了方向。**
我见过太多人,每天工作12个小时,熬夜加班,拼命努力。
但三年过去,五年过去,他们还在原地。
不是因为他们不够努力。
是因为他们努力的方向,一开始就错了。
---
我给你讲一个故事。
2018年,我们公司做天猫,200多人的团队。
那时候我觉得,人越多越好,规模越大越厉害。
所有人都在拼命干活,每天加班到凌晨。
结果呢?
业务一下滑,我砍掉一批人,公司差点倒闭。
后来我才明白——
**不是人多就能赢,而是选对了事情才能赢。**
---
我在Soul派对房里,经常问进来的人一个问题:
"你现在做的事情,是你真正想做的吗?"
80%的人会沉默。
然后说:"我也不知道。"
我说:"那你先想清楚这个问题,再来问我怎么赚钱。"
**如果你连自己要什么都不知道,再努力也是白费。**
---
这本书讲了很多案例,很多方法,很多赚钱的逻辑。
但我希望你记住的,不是那些技巧。
而是这三句话:
---
**第一句:选择比努力重要。**
你选对了赛道,做对了事情,努力才有意义。
你选错了方向,再努力也是南辕北辙。
在做任何事情之前,先问自己:这件事,值不值得我投入时间?
---
**第二句:人比事重要。**
这本书里讲了很多案例:荷总、老墨、做相亲的八戒、做退税的财税老板。
你会发现,所有成功的故事,都离不开"人"。
找对了人,事情就成了一半。
找错了人,再好的项目也会做砸。
**在做任何事情之前,先问自己:我要跟谁一起做?**
---
**第三句:活下来比做大重要。**
我破产过一次。
那次破产让我明白,什么规模、什么增长、什么融资,都是虚的。
**活下来,才是最重要的。**
不要为了面子,去做超出能力的事情。
不要为了规模,去承担承受不起的风险。
先活下来,再谈发展。
---
这个世界上,永远不缺机会。
缺的是能抓住机会的人。
而能抓住机会的人,往往不是最聪明的,也不是最努力的。
而是那些**看得清、想得明、忍得住**的人。
---
我不知道你读完这本书,会有什么感受。
也许你会觉得,卡若讲的这些,我早就知道了。
也许你会觉得,这些道理很简单,但做起来很难。
没关系。
知道和做到之间,永远隔着一条鸿沟。
**而跨过这条鸿沟的方法,只有一个:去做。**
---
最后,我想对你说:
如果你正在迷茫,不要焦虑。
迷茫说明你在思考,说明你还没放弃。
如果你正在困境中,不要绝望。
困境是人生的必修课,所有人都会经历。
如果你正在寻找方向,不要急躁。
方向不是找出来的,是在行动中慢慢清晰的。
---
这本书的名字叫《晨间社会学》。
因为这些故事,都是在每天早上6点到9点,在Soul派对房里发生的。
那是一天中最安静的时刻。
也是最清醒的时刻。
我希望你读完这本书,也能在某个清晨醒来的时候,
突然想明白一些事情。
---
感谢你读到这里。
我们后会有期。
如果你想找我聊聊,每天早上6点,我都在Soul派对房等你。
---
**努力不是关键,选择才是。**
**选对了,一切都对了。**
---
卡若
2025年于厦门

View File

@@ -1,142 +0,0 @@
# 📘《晨间社会学:一个创业者每天6-9点的100个真实案例》
> 一本从Soul派对房里诞生的商业实战手册
---
## 关于这本书
这是一本用365天、1000场直播换来的商业洞察。
每天早上6点我都会在Soul上开一个派对房。来的人五花八门刚毕业的大学生、创业失败的老板、大厂离职的程序员、小镇里开奶茶店的年轻人……
他们带着各自的困惑和故事我带着22年的创业经验。我们在派对房里碰撞、交流、复盘。
这本书,就是这些对话的结晶。
---
## 目录
### 序言
- [为什么我每天早上6点在Soul开播](./序言为什么我每天早上6点在Soul开播?.md)
---
### 第一篇|真实的人
**第1章人与人之间的底层逻辑**
- [1.1 荷包的电动车王国:派对房里的供应链高手](./第一篇|真实的人/第1章人与人之间的底层逻辑/1.1 自行车荷总:一个行业做到极致是什么样.md)
- [1.2 税筹大咖的287人财务帝国如何用30块钱撬动整个市场](./第一篇|真实的人/第1章人与人之间的底层逻辑/1.2 老墨:资源整合高手的社交方法.md)
- [1.3 笑声背后的MBTI为什么ENTJ适合做资源INTP适合做系统](./第一篇|真实的人/第1章人与人之间的底层逻辑/1.3 笑声背后的MBTI为什么ENTJ适合做资源INTP适合做系统.md)
- [1.4 人性的三角结构:情绪、价值、利益](./第一篇|真实的人/第1章人与人之间的底层逻辑/1.4 人性的三角结构:情绪、价值、利益.md)
- [1.5 为什么99%的合作死在沟通差而不是能力差](./第一篇|真实的人/第1章人与人之间的底层逻辑/1.5 为什么99%的合作死在沟通差而不是能力差.md)
**第2章人性困境案例**
- [2.1 相亲故事:你以为找的是人,实际是在找模式](./第一篇|真实的人/第2章人性困境案例/2.1 相亲故事:你以为找的是人,实际是在找模式.md)
- [2.2 找工作迷茫者:为什么简历解决不了人生](./第一篇|真实的人/第2章人性困境案例/2.2 找工作迷茫者:为什么简历解决不了人生.md)
- [2.3 撸运费险:小钱困住大脑的真实心理](./第一篇|真实的人/第2章人性困境案例/2.3 撸运费险:小钱困住大脑的真实心理.md)
- [2.4 游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力](./第一篇|真实的人/第2章人性困境案例/2.4 游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力.md)
- [2.5 健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒](./第一篇|真实的人/第2章人性困境案例/2.5 健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒.md)
---
## [第二篇|真实的行业](./第二篇|真实的行业/)
### [第3章电商篇](./第二篇|真实的行业/第3章电商篇/)
- [3.1 电商财税窗口:我错过的第一桶金](./第二篇|真实的行业/第3章电商篇/3.1 电商财税窗口:我错过的第一桶金.md)
- [3.2 3000万流水如何跑出来(退税模式解析)](./第二篇|真实的行业/第3章电商篇/3.2 3000万流水如何跑出来(退税模式解析).md)
- [3.3 供应链之王 vs 打工人:利润不在前端](./第二篇|真实的行业/第3章电商篇/3.3 供应链之王 vs 打工人:利润不在前端.md)
- [3.4 社区团购的底层逻辑](./第二篇|真实的行业/第3章电商篇/3.4 社区团购的底层逻辑.md)
- [3.5 跨境电商与退税套利](./第二篇|真实的行业/第3章电商篇/3.5 跨境电商与退税套利.md)
### [第4章内容商业篇](./第二篇|真实的行业/第4章内容商业篇/)
- [4.1 旅游号:30天10万粉的真实逻辑](./第二篇|真实的行业/第4章内容商业篇/4.1 旅游号:30天10万粉的真实逻辑.md)
- [4.2 做号工厂:如何让一个号变成一个机器](./第二篇|真实的行业/第4章内容商业篇/4.2 做号工厂:如何让一个号变成一个机器.md)
- [4.3 情绪内容为什么比专业内容更赚钱](./第二篇|真实的行业/第4章内容商业篇/4.3 情绪内容为什么比专业内容更赚钱.md)
- [4.4 猫与宠物号:为什么宠物赛道永不过时](./第二篇|真实的行业/第4章内容商业篇/4.4 猫与宠物号:为什么宠物赛道永不过时.md)
- [4.5 直播间里的三种人:演员、技术工、系统流](./第二篇|真实的行业/第4章内容商业篇/4.5 直播间里的三种人:演员、技术工、系统流.md)
### [第5章传统行业篇](./第二篇|真实的行业/第5章传统行业篇/)
- [5.1 羽毛球馆:为什么体育培训是最稳定的现金流](./第二篇|真实的行业/第5章传统行业篇/5.1 羽毛球馆:为什么体育培训是最稳定的现金流.md)
- [5.2 旅游供应链:资源越老越值钱](./第二篇|真实的行业/第5章传统行业篇/5.2 旅游供应链:资源越老越值钱.md)
- [5.3 景区联盟:门票不是目的,是流量入口](./第二篇|真实的行业/第5章传统行业篇/5.3 景区联盟:门票不是目的,是流量入口.md)
- [5.4 拍卖行抱朴:我人生错过的4件大钱机会(完整版)](./第二篇|真实的行业/第5章传统行业篇/5.4 拍卖行抱朴:我人生错过的4件大钱机会(完整版).md)
- [5.5 飞机票供应链:为什么越便宜越亏](./第二篇|真实的行业/第5章传统行业篇/5.5 飞机票供应链:为什么越便宜越亏.md)
---
## [第三篇|真实的错误](./第三篇|真实的错误/)
### [第6章他人踩过的4个致命大坑](./第三篇|真实的错误/第6章我人生错过的4件大钱/)
- [6.1 老陈的电商财税窗口眼睁睁看着1000万从指缝溜走](./第三篇|真实的错误/第6章我人生错过的4件大钱/6.1 错过电商财税(2016-2017).md)
- [6.2 阿强的供应链觉醒从月薪8000到身价千万只差一个认知](./第三篇|真实的错误/第6章我人生错过的4件大钱/6.2 错过供应链(2017-2018).md)
- [6.3 小美的内容红利100万粉丝账号卖了50万她后悔了三年](./第三篇|真实的错误/第6章我人生错过的4件大钱/6.3 错过内容红利(2018-2019).md)
- [6.4 老王的资源困局:手握千人脉,却一分钱没变现](./第三篇|真实的错误/第6章我人生错过的4件大钱/6.4 错过资源资产化(2019-2020).md)
### [第7章别人犯的错误](./第三篇|真实的错误/第7章别人犯的错误/)
- [7.1 投资房年轻人的迷茫:资金 vs 能力](./第三篇|真实的错误/第7章别人犯的错误/7.1 投资房年轻人的迷茫:资金 vs 能力.md)
- [7.2 信息差骗局:永远有人靠卖学习赚钱](./第三篇|真实的错误/第7章别人犯的错误/7.2 信息差骗局:永远有人靠卖学习赚钱.md)
- [7.3 在Soul找恋爱但想赚钱的人](./第三篇|真实的错误/第7章别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md)
- [7.4 创业者的三种死法:冲动、轻信、没结构](./第三篇|真实的错误/第7章别人犯的错误/7.4 创业者的三种死法:冲动、轻信、没结构.md)
- [7.5 人情生意的终点:关系越多亏得越多](./第三篇|真实的错误/第7章别人犯的错误/7.5 人情生意的终点:关系越多亏得越多.md)
---
## [第四篇|真实的赚钱](./第四篇|真实的赚钱/)
### [第8章底层结构](./第四篇|真实的赚钱/第8章底层结构/)
- [8.1 流量杠杆:抖音、Soul、飞书](./第四篇|真实的赚钱/第8章底层结构/8.1 流量杠杆:抖音、Soul、飞书.md)
- [8.2 价格杠杆:供应链与信息差](./第四篇|真实的赚钱/第8章底层结构/8.2 价格杠杆:供应链与信息差.md)
- [8.3 时间杠杆:自动化 + AI](./第四篇|真实的赚钱/第8章底层结构/8.3 时间杠杆:自动化 + AI.md)
- [8.4 情绪杠杆:咨询、婚恋、生意场](./第四篇|真实的赚钱/第8章底层结构/8.4 情绪杠杆:咨询、婚恋、生意场.md)
- [8.5 社交杠杆:认识谁比你会什么更重要](./第四篇|真实的赚钱/第8章底层结构/8.5 社交杠杆:认识谁比你会什么更重要.md)
### [第9章我在Soul上亲访的赚钱案例](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/)
- [9.1 游戏账号私域:账号即资产](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/9.1 游戏账号私域:账号即资产.md)
- [9.2 健康包模式:高复购、高毛利](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/9.2 健康包模式:高复购、高毛利.md)
- [9.3 药物私域:长期关系赛道](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md)
- [9.4 残疾机构合作:退税 × AI × 人力成本](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md)
- [9.5 私域银行:粉丝即小股东](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md)
- [9.6 Soul派对房:陌生人成交的最快场景](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/9.6 Soul派对房:陌生人成交的最快场景.md)
- [9.7 飞书中台:从聊天到成交的流程化体系](./第四篇|真实的赚钱/第9章我在Soul上亲访的赚钱案例/9.7 飞书中台:从聊天到成交的流程化体系.md)
---
## [第五篇|真实的社会](./第五篇|真实的社会/)
### [第10章未来职业的变化趋势](./第五篇|真实的社会/第10章未来职业的变化趋势/)
- [10.1 AI代聊与岗位替换](./第五篇|真实的社会/第10章未来职业的变化趋势/10.1 AI代聊与岗位替换.md)
- [10.2 系统化工作 vs 杂乱工作](./第五篇|真实的社会/第10章未来职业的变化趋势/10.2 系统化工作 vs 杂乱工作.md)
- [10.3 为什么链接能力会成为第一价值](./第五篇|真实的社会/第10章未来职业的变化趋势/10.3 为什么链接能力会成为第一价值.md)
- [10.4 新型公司:Soul-飞书-线下的三位一体](./第五篇|真实的社会/第10章未来职业的变化趋势/10.4 新型公司:Soul-飞书-线下的三位一体.md)
### [第11章中国社会商业生态的未来](./第五篇|真实的社会/第11章中国社会商业生态的未来/)
- [11.1 城市之间的模式差](./第五篇|真实的社会/第11章中国社会商业生态的未来/11.1 城市之间的模式差.md)
- [11.2 厦门样本:低成本高效率经济](./第五篇|真实的社会/第11章中国社会商业生态的未来/11.2 厦门样本:低成本高效率经济.md)
- [11.3 流量红利的终局](./第五篇|真实的社会/第11章中国社会商业生态的未来/11.3 流量红利的终局.md)
- [11.4 大模型 + 供应链的组合拳](./第五篇|真实的社会/第11章中国社会商业生态的未来/11.4 大模型 + 供应链的组合拳.md)
- [11.5 社会分层的最终逻辑](./第五篇|真实的社会/第11章中国社会商业生态的未来/11.5 社会分层的最终逻辑.md)
---
## [尾声](./尾声|终极答案:努力不是关键,选择才是.md)
---
## [附录](./附录/)
- [附录ASoul派对房直播逐字稿精选](./附录/附录ASoul派对房每天6-9点语音直播逐字稿精选.md)
- [附录B商业案例复盘思维导图](./附录/附录B商业案例复盘图(思维导图).md)
- [附录C私域运营工具箱SOP、话术、系统](./附录/附录C私域运营工具箱(SOP、话术、系统).md)
- [附录DMBTI分工模型如何识别一个人适合做什么](./附录/附录DSoul上的MBTI分工模型(如何识别一个人适合做什么).md)
- [附录ESoul上链接的100个人人物小传与MBTI](./附录/附录E我在Soul上链接的100个人(人物小传).md)

Binary file not shown.

View File

@@ -1,90 +0,0 @@
# 6.1 老陈的电商财税窗口眼睁睁看着1000万从指缝溜走
> "我当时就站在金矿旁边,却在挖沙子。"——老陈前电商运营总监ISTJ
---
## 一个在派对房里崩溃的中年男人
2024年11月的一个清晨Soul派对房里来了一个声音沙哑的男人。
"卡若,我能说两句吗?"
他叫老陈42岁曾经是某电商代运营公司的运营总监。他说自己"错过了人生中最大的一笔钱"。
2016年他所在的公司帮商家做天猫代运营每天经手的流水少则几十万多则上百万。当时他注意到一个现象很多商家的财税管理一塌糊涂进项票不够、成本核算混乱、税负率居高不下。
"我当时就想,这不就是个巨大的需求吗?"老陈说。
但他只是想了想,就继续去优化详情页、调直通车了。
---
## 窗口期只有18个月
同一时期,另一个人看到了同样的问题。
那个人叫小李,只是个普通的会计,在一家小型电商公司做财务。他发现老板每个月为税的事情焦头烂额,就主动研究起了电商财税的门道。
2016年底小李辞职创业专门帮电商企业做财税优化。
他的切入点很简单:帮商家把"刷单成本"合规化。当时很多商家刷单的钱走的是私账,既不能抵税,还有法律风险。小李找到了一套合规的解决方案,把这些成本变成合法的"推广费用"。
18个月后小李的公司年营收突破3000万净利润超过1000万。
而老陈,还在代运营公司里"优化详情页"。
---
## 老陈的三个致命错误
**第一个错误:只看到问题,没看到机会**
老陈每天都能接触到商家的财税痛点,但他把这些当成"商家自己的问题",而不是"我可以解决的机会"。
他的思维模式是:我是做运营的,财税是财务的事。
**第二个错误:等待"完美时机"**
老陈曾经想过要不要做财税咨询,但他觉得"时机不成熟"——自己不够懂、市场不够大、政策不够明朗。
结果等他"看明白"的时候,市场已经被瓜分完毕。
**第三个错误:低估了信息差的价值**
老陈知道的信息,他以为所有人都知道。
"我以为财税这些东西,随便找个会计都懂。"他说,"后来才知道90%的会计连电商的业务模式都搞不清楚。"
---
## 电商财税的黄金窗口
2016-2017年是电商财税服务的黄金窗口期。这个窗口期的形成有三个原因
1. **电商行业爆发式增长**淘宝、天猫、京东的GMV每年翻倍但配套的财税服务严重滞后
2. **政策逐步收紧**:金税三期上线,电商企业的财税风险急剧上升
3. **专业人才稀缺**:懂电商又懂财税的人凤毛麟角
抓住这个窗口的人,都赚到了第一桶金。错过的人,只能在派对房里叹息。
---
## 复盘清单
**老陈错过的核心原因:**
- 把"发现问题"和"解决问题"分开了
- 等待完美时机,而不是边做边学
- 高估竞争,低估自己的信息优势
**如果你正在经历类似的困境:**
- 你每天接触到的"麻烦事",可能就是别人愿意付费的"需求"
- 不要等到"完全准备好"才开始18个月的窗口期不会等你
- 你以为的"常识"可能是别人愿意付1000块/小时咨询的"专业知识"
**这个案例的MBTI视角**
老陈是典型的ISTJ检查者擅长执行既定任务但不擅长发现新机会。而小李是ENTP辩论家天生对商业机会敏感敢于快速行动。
---
*"机会就像窗户,开着的时候你不跳,关了就再也打不开了。"*

View File

@@ -1,94 +0,0 @@
# 6.2 阿强的供应链觉醒从月薪8000到身价千万只差一个认知
> "我天天在工厂里转,却从来没想过工厂才是最赚钱的。"——阿强前电商采购经理ISFJ
---
## 派对房里的后悔药
"卡若,你说我是不是傻?"
凌晨6点半一个带着浓重潮汕口音的声音在派对房里响起。
他叫阿强35岁曾经是某电商公司的采购经理。他的工作就是每天跟工厂打交道下单、验货、催货、砍价。
2017年阿强发现一个有趣的现象他合作的十几家工厂里最赚钱的不是那些规模最大的而是那些"能搞定特殊需求"的小厂。
"比如我们要一款定制包装,大厂嫌量小不接,但有个小厂能做,而且利润率高得吓人。"阿强说。
他当时只是把这个当成"工作经验"记在脑子里。
---
## 另一个采购员的觉醒
同一时期,另一个采购员小吴也发现了这个规律。
但小吴做了一件阿强没做的事:他把这些"能搞定特殊需求"的工厂信息整理成了一个资源库,然后开始帮其他电商公司对接。
一开始是免费帮忙积累口碑。半年后他开始收服务费帮你找到合适的工厂收1%的采购金额。
看起来比例不高但架不住量大。电商公司的采购动辄几十万、上百万1%就是几千、上万块。
2018年底小吴辞职创业专门做供应链撮合。他没有一个工人、一台机器却在供应链里赚到了比工厂老板还多的钱。
---
## 阿强的认知盲区
**盲区一:只看到"采购",没看到"资源"**
阿强每天接触几十家工厂,手里握着的是一座金矿。但他只把这些当成"工作关系",而不是"可以变现的资产"。
他的思维是:我是帮公司采购的,工厂资源是公司的。
小吴的思维是:工厂资源是我建立的关系,这是我的核心竞争力。
**盲区二:只看到"执行",没看到"连接"**
阿强的工作模式是:公司告诉我要采购什么,我去找工厂。
小吴的工作模式是:我知道哪些工厂能做什么,我来连接有需求的人。
一个是"被动执行",一个是"主动连接"。
**盲区三:低估了"中间商"的价值**
阿强曾经觉得"中间商赚差价"是不道德的。
"我当时想,我又不生产东西,凭什么赚钱?"他说。
但他后来才明白:在信息不对称的市场里,能帮别人节省时间和降低风险的人,就是在创造价值。
---
## 供应链的认知升级
2017-2018年是电商供应链服务爆发的时期。这个窗口的形成有几个原因
1. **电商竞争白热化**:商家开始拼供应链效率,谁能更快、更便宜地拿到货,谁就能赢
2. **柔性供应链崛起**:小批量、多批次、快反应的需求越来越多,传统大厂搞不定
3. **信息仍然高度不对称**:很多商家找不到合适的工厂,很多工厂找不到合适的客户
抓住这个机会的人,成了"没有工厂的工厂老板"。
---
## 复盘清单
**阿强错过的核心原因:**
- 把工作资源当成公司资产,而不是个人能力
- 用"执行者"思维做事,而不是"连接者"思维
- 道德洁癖阻碍了商业判断
**如果你正在做类似的工作:**
- 你的"人脉"和"资源"是你最值钱的东西,要有意识地积累和维护
- 思考一下:你能连接谁和谁,创造什么价值?
- "中间商赚差价"不是贬义词,是商业社会的基本规则
**这个案例的MBTI视角**
阿强是ISFJ守护者忠诚可靠但缺乏商业野心。小吴是ESTP企业家善于发现机会并快速行动。
---
*"你以为自己是打工的,但你手里的资源,可能比老板的还值钱。"*

View File

@@ -1,99 +0,0 @@
# 6.3 小美的内容红利100万粉丝账号卖了50万她后悔了三年
> "我当时觉得做号太累了,不如卖掉。现在才知道,那是我这辈子最傻的决定。"——小美前抖音达人ESFP
---
## 一个卖掉百万粉账号的女孩
2024年的一个周末派对房里来了一个声音甜美的女生。
"卡若哥,我能问你一个问题吗?我三年前把我的抖音号卖了,现在后悔死了,你觉得我还有机会吗?"
她叫小美28岁。2019年她在抖音上做美妆内容粉丝做到了100万。那时候她觉得"涨粉太难了"、"拍视频太累了"、"变现太慢了"。
于是她以50万的价格把账号卖给了一家MCN机构。
三年后那个账号的粉丝涨到了500万年带货GMV超过1个亿。
而小美还在一家公司做着月薪1万的工作。
---
## 内容红利的真相
2018-2019年是内容创业的黄金时期。抖音日活突破4亿每天有几千万人在上面刷视频。
那时候做内容有多容易?
一个做旅游的朋友告诉我他随便拍了几条云南的风景视频一个月涨了10万粉丝。
一个做美食的大姐说她就是拍自己做饭三个月涨到50万粉丝。
但大部分人都像小美一样,在红利期"撤退"了。
---
## 小美的三个错误判断
**错误一:用"今天的收入"评估"未来的价值"**
2019年小美的账号每个月能变现2-3万块。她觉得"也就这样了"。
但她没有看到100万粉丝的账号是一个可以持续增值的资产。三年后同样的账号可以变现2-3百万。
她用"当下的收入"给账号定价,而买家用"未来的潜力"定价。
**错误二:高估了"创作"的难度,低估了"积累"的价值**
小美觉得拍视频很累,每天要选题、拍摄、剪辑、发布。
但她没有意识到:这些"累",恰恰是门槛。正因为累,大部分人做不到,能坚持下来的人才能吃到红利。
她在最应该坚持的时候,选择了放弃。
**错误三:把"工具"当成了"目的"**
小美做抖音的目的是"赚钱"。当她觉得赚钱太慢的时候,就想卖掉。
但更聪明的做法是:把账号当成"流量入口",用来连接其他的变现方式。
100万粉丝的账号可以接广告、做直播、卖课程、做私域、孵化新号……变现路径有无数条。
她只看到了一条路,就觉得此路不通。
---
## 内容创业的时间窗口
每一波内容红利都有时间窗口:
- 微信公众号的红利期2013-2016
- 抖音的红利期2018-2020
- 视频号的红利期2021-2023
- Soul的红利期2024-
错过窗口期的人要付出10倍的努力才能得到1/10的结果。
小美在窗口期建立了优势,却在窗口期结束前把优势卖掉了。
---
## 复盘清单
**小美错过的核心原因:**
- 短视思维:用今天的收入评估资产价值
- 怕累:在需要积累的时候选择了套现
- 单一思维:只看到一种变现方式
**如果你正在做内容:**
- 粉丝是资产,不到万不得已不要卖
- 内容创业是"熬"出来的,前期的"累"是在建护城河
- 多想几种变现方式,不要被一条路堵死
**这个案例的MBTI视角**
小美是ESFP表演者喜欢即时满足对长期坚持缺乏耐心。而那些能把账号做大的人往往是INTJ战略家或ENTJ指挥官他们能为长期目标牺牲短期利益。
---
*"红利期建立的优势,足够你吃十年。但如果你在红利期卖掉,就什么都没有了。"*

View File

@@ -1,103 +0,0 @@
# 6.4 老王的资源困局:手握千人脉,却一分钱没变现
> "我认识的人,比任何人都多。但我赚的钱,比谁都少。"——老王前商会秘书长ESFJ
---
## 一个"人脉王"的困惑
老王在派对房里开口的时候,声音里带着一丝苦涩。
"卡若,你说人脉到底有没有用?我认识几千个老板,但我自己穷得叮当响。"
老王45岁曾经是某地商会的秘书长。他的工作就是"认识人":组织商会活动、对接政企资源、撮合商业合作。
十年下来他的微信好友超过8000人其中企业老板不下2000个。
但他自己呢还是拿着每月1万多的工资住着租来的房子。
---
## 另一个"资源整合者"的故事
同样是做"资源对接"的工作,另一个人的结局完全不同。
他叫老墨,也是在商会圈子里混的。但老墨做了一件老王没做的事:他把自己的人脉资源"产品化"了。
老墨发现:很多老板有钱,但不知道往哪里投;很多项目缺钱,但不知道怎么找投资人。
于是他做了一个"资源撮合服务"
- 帮投资人筛选项目,收项目方的服务费
- 帮项目方对接投资人,成功后收佣金
- 组织高质量的小型饭局每人收3000块的"入场费"
三年下来老墨的公司年营收超过500万自己也买了房买了车。
而老王,还在免费帮别人"牵线搭桥"。
---
## 老王的资源困境
**困境一:把"关系"当成"资源"**
老王认识很多人,但这些人对他来说只是"认识"而已。
真正的资源,是"能为你创造价值的关系"。老王和那些老板之间,缺少利益纽带。
他帮别人介绍了生意,别人请他吃顿饭就完了。没有持续的合作关系,就没有持续的收益。
**困境二:免费的服务不值钱**
老王做的事情,本质上是有价值的:信息撮合、资源对接、人脉引荐。
但因为他一直免费做,所以没有人觉得这件事"值钱"。
更糟糕的是,免费久了,他自己也不好意思收费了。
**困境三:没有建立"资源变现"的系统**
老王的人脉都散落在微信里,没有分类、没有标签、没有维护计划。
他想起谁就联系谁,想不起来就丢在那里。
这不是"资源管理",这是"资源浪费"。
---
## 资源资产化的方法论
老墨教会我一个道理:**资源只有"产品化"之后,才能变成"资产"。**
怎么产品化?三步走:
**第一步:分类和筛选**
把你的人脉分成几类:投资人、项目方、服务商、媒体资源……每一类人的需求是什么?你能提供什么?
**第二步:建立服务模式**
不要"免费帮忙",要设计一套收费的服务。哪怕只是"咨询费"、"对接费"、"服务费",有了价格,你的服务才有价值。
**第三步:持续经营**
定期和关键人脉保持联系,了解他们的最新需求。你不联系,别人就忘了你。
---
## 复盘清单
**老王错过的核心原因:**
- 把"认识人"等同于"有资源"
- 免费服务降低了自己的价值感
- 没有系统化管理和经营人脉
**如果你也有丰富的人脉:**
- 思考一下:这些人脉能创造什么价值?你能提供什么服务?
- 开始收费,哪怕只是象征性的收费
- 建立人脉管理系统,定期维护关键关系
**这个案例的MBTI视角**
老王是ESFJ执政官热心助人但不擅长把服务变成产品。老墨是ENTJ指挥官天生懂得如何把资源变成收益。
---
*"人脉不是你认识多少人,而是多少人愿意为你创造价值。"*

View File

@@ -1,163 +0,0 @@
# 7.1 投资房年轻人的迷茫:资金 vs 能力
钱不是答案,能守住才是能力。
晚上八点四十,派对房里一个年轻人上麦。
他说:“卡若,我手上有 50 万,是投房还是创业?”
我问:“你能守住这 50 万吗?”
他愣了。
——
在派对房的聊天里,我们经常聊资本与现金流的区别。
资本不看利润,看增长与打包。
现金流不看估值,看当天的收支与稳定。
你拿 50 万去投房,
不是买房子。
是买现金流、买周期、买位置与人脉的复杂组合。
你如果不具备这四件事,
投房会变成“在涨跌中消耗心理与资金”。
——
我讲了一个派对房里关于别墅的聊天。
有人说十年前某个项目有红利,
他叔在里面赚到了钱。
现在很多人以为“复制当年的红利”。
但今天的市场与政策都不同了。
你复制的是故事,
不是结构。
——
我们第二天线下见面,在咖啡馆。
我让他用飞书画一张“投资能力表”。
四项:
现金流能力、信息与渠道能力、风控能力、运营与增值能力。
每一项用三个问题自测。
现金流:现有收入是否稳定?抗波动能力如何?能否承担 12 个月空置或利率上升?
信息与渠道:是否有本地成交链路?是否认识靠谱中介与房东?是否有真实成交数据?
风控:最坏的情况是什么?退出路径是什么?是否有托底资金与替代方案?
运营与增值:是否有改造方案?是否能做社群与活动提高出租率?是否懂得打包出售?
测完他沉默了。
四项里,他只具备“现金流稳定”。
其他为零。
——
我说:“先别投。”
“先把‘能力表’补齐两项。”
“否则,你拿 50 万去买‘焦虑与无眠’。”
——
派对房里我们聊到资本逻辑。
资本不看你今天赚多少,
看你能不能打包资产与用户。
银行为什么让你 30 年还款?
因为它 30 小时就把你的债券化卖出去。
这段聊天让我告诉他:
“如果你不具备打包与退出能力,
请不要把自己当资本。”
——
他问:“那我该怎么做?”
我给他一个“两周训练表”。
第一周,做“现金流与信息链路”。
把你所在城市的三个板块做“成交数据与空置率”看板;
认识三位靠谱中介与两个房东;
每天花一个小时看真实挂牌与成交记录。
第二周,做“风控与运营”。
写出“最坏情况与退出路径”清单;
做一份“出租提升方案”:改造、社群、活动与合作商户;
测算“总成本与总收益”,不是“买入价与卖出价”。
——
两周后,他在派对房复盘。
“我改了目标。”
“我先做运营与现金流,不投房。”
“我用 10 万做一个‘内容+线下’的小项目。”
“等两项能力补齐,再谈房。”
我说:“很好。”
“房子不是不可以投。”
“是要在你具备‘守住钱与增值钱’的能力之后。”
——
派对房里我把“投资房的三问”写成清单。
第一问,你要买的是房还是现金流?
第二问,你是资本还是现金流创业者?
第三问,你能不能定义最坏情况并接受它?
三问过了再投。
过不了的,
先训练。
——
最后,我对他和派对房的人说:
“钱不是用来‘证明你厉害’的。”
“钱是用来‘守住与放大’的。”
“没有能力,不要让钱成为你焦虑的来源。”

View File

@@ -1,141 +0,0 @@
# 7.2 信息差骗局:永远有人靠卖学习赚钱
学习不是收钱,是能交付能复盘。
晚上九点十分,派对房里一个朋友上麦。
他说:“有人让我交 3000 学费,说能月入过万。”
我问:“他自己月入过万吗?”
他沉默了。
——
在派对房的真实聊天里,
我们经常遇到“卖学习”的人。
他们擅长话术与故事,
但不擅长“交付与复盘”。
我说:“学习不是不能卖。”
“不能卖的是‘没有落地的学习’。”
——
那天的聊天很激烈。
我对着一个麦友说:
“你讲的是空手套白狼,不是项目。”
“你的逻辑落不了地。”
“先做成一个闭环再来讲。”
这段话现在我也经常拿出来提醒派对房的人。
——
第二天线下,我在会议室见了这个朋友。
我让他写“落地闭环四问”。
第一问,真实成交在哪里?
第二问,交付流程是什么?
第三问,复盘指标是什么?
第四问,最坏情况如何退出?
把这四问写不出来的“学习”,不要买。
——
派对房里我们复盘“卖学习”的十个套路。
一,晒流水无交付。
二,讲故事无闭环。
三,堆案例无验证。
四,培训结束无跟进。
五,把风险说成运气。
六,把合规说成聪明。
七,把门槛说成捷径。
八,把努力说成玄学。
九,把数据说成感觉。
十,把成败说成命运。
这十条在派对房的聊天中频繁出现。
——
我给他一个“两周验证表”。
第一周,做“真实成交验证”。
看三家客户与三次交付过程,
拿到一个可联系的复盘人,
问他“你当下用到的是什么”。
第二周,做“行动输出验证”。
把学习中的三条具体动作在你的场景里跑一遍,
写“结果—问题—改法”三行复盘。
两周后再决定是否付钱。
——
派对房里有人问:“那真正的学习是什么?”
我说:“是可复制的行动与复盘。”
“是当下可用的清单,而不是玄学。”
“是可追踪的指标,而不是感觉。”
——
两周后他在派对房复盘。
“我没有交那 3000 学费。”
“我找到了另一个‘交付清晰’的训练营。”
“每天有三条动作,每周有一次复盘。”
“我觉得值。”
我说:“学习不是不该花钱。”
“不该花的是‘没有闭环的学习’。”
——
我把这章收尾成一个“反信息差清单”。
1. 四问闭环:成交/交付/指标/退出。
2. 两周验证:真实交付/三条动作复盘。
3. 看交付不看流水,看复盘不看故事。
4. 合规与风控写进学习,拒绝“聪明的边缘”。
5. 当下可用的清单,大于宏大的叙事。

Some files were not shown because too many files have changed in this diff Show More