diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md
index eac2e65..ab229c6 100644
--- a/DEPLOYMENT.md
+++ b/DEPLOYMENT.md
@@ -4,7 +4,7 @@
### 1. Vercel部署
-```bash
+\`\`\`bash
# 安装Vercel CLI
npm install -g vercel
@@ -13,7 +13,7 @@ vercel login
# 部署项目
vercel --prod
-```
+\`\`\`
### 2. 环境变量配置
@@ -71,7 +71,7 @@ vercel --prod
## 本地开发
-```bash
+\`\`\`bash
# 安装依赖
npm install
@@ -79,7 +79,7 @@ npm install
npm run dev
# 访问 http://localhost:3000
-```
+\`\`\`
## 注意事项
diff --git a/app/my/page.tsx b/app/my/page.tsx
index e6bc295..1ade62e 100644
--- a/app/my/page.tsx
+++ b/app/my/page.tsx
@@ -2,149 +2,177 @@
import { useState, useEffect } from "react"
import Link from "next/link"
-import { User, ShoppingBag, Share2, LogOut, ChevronRight, BookOpen } from "lucide-react"
+import { User, ShoppingBag, Share2, LogOut, ChevronRight, BookOpen, Copy, Check } from "lucide-react"
import { useStore } from "@/lib/store"
import { AuthModal } from "@/components/modules/auth/auth-modal"
-import { getFullBookPrice } from "@/lib/book-data"
+import { getFullBookPrice, getAllSections } from "@/lib/book-data"
export default function MyPage() {
const { user, isLoggedIn, logout } = useStore()
const [showAuthModal, setShowAuthModal] = useState(false)
const [mounted, setMounted] = useState(false)
+ const [copied, setCopied] = useState(false)
useEffect(() => {
setMounted(true)
}, [])
+ const copyCode = () => {
+ if (user?.referralCode) {
+ navigator.clipboard.writeText(user.referralCode)
+ setCopied(true)
+ setTimeout(() => setCopied(false), 2000)
+ }
+ }
+
if (!mounted) {
return (
-
-
+
)
}
if (!isLoggedIn) {
return (
-
-
-
-
-
-
-
登录后查看更多
-
查看购买记录、分销收益
-
-
+
+
+
+ 登录后查看更多
+ 查看购买记录、分销收益
+
setShowAuthModal(false)} />
)
}
+ const totalSections = getAllSections().length
+ const purchasedCount = user?.hasFullBook ? totalSections : user?.purchasedSections.length || 0
+ const purchaseProgress = Math.round((purchasedCount / totalSections) * 100)
const fullBookPrice = getFullBookPrice()
return (
-
- {/* User Profile Header */}
-
-
-
-
-
-
-
-
{user?.nickname || "用户"}
-
{user?.phone}
-
+
+ {/* 用户信息头部 */}
+
+
+
+
-
- {/* Stats */}
-
-
-
- {user?.hasFullBook ? "全部" : user?.purchasedSections.length || 0}
-
-
已购章节
-
-
-
¥{(user?.earnings || 0).toFixed(1)}
-
累计收益
-
+
+
{user?.nickname || "用户"}
+
{user?.phone}
+
+ {/* 数据统计卡片 */}
+
+ {/* 购买进度 */}
+
+
+ 购买进度
+ {purchaseProgress}%
+
+
+
+ {user?.hasFullBook ? "全书" : `${purchasedCount}/${totalSections}`}
+
+
已购章节
+
+
+ {/* 分销收益 */}
+
+
+ 累计收益
+
+
+
¥{(user?.earnings || 0).toFixed(2)}
+
推荐{user?.referralCount || 0}人
+
+
+
+ {/* 购买整本书提示 */}
+ {!user?.hasFullBook && (
+
+
+
+
+
+
+
购买整本书
+
解锁全部{totalSections}章内容
+
+
+
¥{fullBookPrice}
+
+
+
+ )}
- {/* Menu Items */}
-
-
- {/* Purchase prompt */}
- {!user?.hasFullBook && (
-
-
-
-
-
- 购买整本书
-
-
¥{fullBookPrice}
-
-
-
- )}
-
- {/* Menu List - simplified, removed settings and docs */}
-
-
-
-
- 我的购买
-
-
-
-
-
-
-
- 分销收益
-
-
- ¥{(user?.earnings || 0).toFixed(1)}
-
-
-
-
-
- {/* Referral Code */}
-
-
-
-
我的邀请码
-
{user?.referralCode}
-
-
+ {/* 菜单列表 */}
+
+
+
+ {purchasedCount}章
+
+
+
- {/* Logout */}
-
+
+
+
+ 分销收益
+
+
+ ¥{(user?.earnings || 0).toFixed(1)}
+
+
+
+
+ {/* 邀请码 */}
+
+
+
+
我的邀请码
+
{user?.referralCode}
+
+
+
+
分享给好友,好友购买你获得90%佣金
+
+
+ {/* 退出登录 */}
+
)
diff --git a/app/page.tsx b/app/page.tsx
index 1432dc3..028beb2 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,31 +1,133 @@
-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"
+"use client"
-// 强制动态渲染,确保内容实时更新
-export const dynamic = 'force-dynamic';
+import { useState, useEffect } from "react"
+import Link from "next/link"
+import { ChevronRight, Sparkles, User } from "lucide-react"
+import { bookData, getAllSections, getFullBookPrice } from "@/lib/book-data"
+import { useStore } from "@/lib/store"
+import { AuthModal } from "@/components/modules/auth/auth-modal"
-export default async function HomePage() {
- const parts = getBookStructure()
+export default function HomePage() {
+ const [sectionsCount, setSectionsCount] = useState(64)
+ const [isAuthOpen, setIsAuthOpen] = useState(false)
+ const { isLoggedIn, user } = useStore()
+
+ useEffect(() => {
+ const sections = getAllSections()
+ setSectionsCount(sections.length)
+ }, [])
+
+ // 计算每篇的章节数
+ const partsWithCount = bookData.map((part) => ({
+ ...part,
+ chaptersCount: part.chapters.length,
+ sectionsCount: part.chapters.reduce((acc, c) => acc + c.sections.length, 0),
+ }))
return (
-
- {/* 背景渐变效果 */}
-
-
- {/* 装饰性光晕 */}
-
-
-
-
-
-
- {/* 隐藏派对功能 */}
- {/* */}
-
+
+ {/* 背景 */}
+
+
+
+ {/* 顶部用户状态栏 */}
+
+
+
+
+ Soul · 派对房
+
+ {isLoggedIn ? (
+
+
+
{user?.nickname}
+
+ ) : (
+
+ )}
+
+
+
+ {/* 书籍信息头部 */}
+
+
+ 一场SOUL的
+ 创业实验场
+
+
来自Soul派对房的真实商业故事
+
+ {/* 统计数据 */}
+
+
+ {sectionsCount}
+ 章节
+
+
+
+ 5
+ 大篇
+
+
+
+ 作者
+ 卡若
+
+
+
+
+ {/* 目录列表 - 紧凑显示在首页 */}
+
+
+ {partsWithCount.map((part, index) => (
+
+
+ {/* 序号 */}
+
+ {part.number}
+
+
+ {/* 内容 */}
+
+
+
{part.title}
+ {part.sectionsCount}章
+
+
{part.subtitle}
+
+
+
+
+
+ ))}
+
+
+ {/* 序言和尾声 */}
+
+
+
+
序言
+
为什么我每天早上6点在Soul开播?
+
+
+
+
+
+
+
+ {/* 底部提示 */}
+
首章免费 · 单章¥1 · 全书¥{getFullBookPrice()}
+
+
+ setIsAuthOpen(false)} />
)
}
diff --git a/book/.cursor/rules/soul.mdc b/book/.cursor/rules/soul.mdc
index 7275947..eb6b2f8 100644
--- a/book/.cursor/rules/soul.mdc
+++ b/book/.cursor/rules/soul.mdc
@@ -234,4 +234,4 @@ github地址:https://github.com/fnvtk/Mycontent/tree/soul-content (上传仅
-每小节的时间都以文档的时间为主
\ No newline at end of file
+每小节的时间都以文档的时间为主
diff --git a/book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 荷包:电动车出租的被动收入模式.md b/book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 荷包:电动车出租的被动收入模式.md
index 0c9173b..85fb324 100644
--- a/book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 荷包:电动车出租的被动收入模式.md
+++ b/book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 荷包:电动车出租的被动收入模式.md
@@ -219,4 +219,3 @@ Soul上吹牛的人太多,但这个人的语气不像吹牛。
两个人在Soul上认识,在现实中落地。
这就是资源整合最简单的样子。
-
diff --git a/book/第三篇|真实的错误/第7章|别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md b/book/第三篇|真实的错误/第7章|别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md
index 34295d4..85d4000 100644
--- a/book/第三篇|真实的错误/第7章|别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md
+++ b/book/第三篇|真实的错误/第7章|别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md
@@ -109,5 +109,3 @@
4. 每晚复盘“有没有混用”:一旦混用,第二天调整。
5. 只在“分轨完成”之后尝试“场景链接”,否则继续分开。
-
-
diff --git a/book/第二篇|真实的行业/第5章|传统行业篇/5.1 拍卖行抱朴:一天240万的摇号生意.md b/book/第二篇|真实的行业/第5章|传统行业篇/5.1 拍卖行抱朴:一天240万的摇号生意.md
index 0e8b512..c13acdd 100644
--- a/book/第二篇|真实的行业/第5章|传统行业篇/5.1 拍卖行抱朴:一天240万的摇号生意.md
+++ b/book/第二篇|真实的行业/第5章|传统行业篇/5.1 拍卖行抱朴:一天240万的摇号生意.md
@@ -209,4 +209,3 @@ Soul派对房里,抱朴开始分享他的拍卖行生意。
"能抓住的就抓,抓不住的就复盘。"
"下一次,准备得更好就行了。"
-
diff --git a/book/第二篇|真实的行业/第5章|传统行业篇/5.2 土地拍卖:招拍挂背后的游戏规则.md b/book/第二篇|真实的行业/第5章|传统行业篇/5.2 土地拍卖:招拍挂背后的游戏规则.md
index 61cc584..04c5129 100644
--- a/book/第二篇|真实的行业/第5章|传统行业篇/5.2 土地拍卖:招拍挂背后的游戏规则.md
+++ b/book/第二篇|真实的行业/第5章|传统行业篇/5.2 土地拍卖:招拍挂背后的游戏规则.md
@@ -215,4 +215,3 @@ Soul派对房里,抱朴继续讲他的拍卖行故事。
"以前赚钱靠风口,现在赚钱靠能力。"
"这是好事,说明行业在成熟。"
-
diff --git a/book/第二篇|真实的行业/第5章|传统行业篇/5.3 地摊经济数字化:一个月900块的餐车生意.md b/book/第二篇|真实的行业/第5章|传统行业篇/5.3 地摊经济数字化:一个月900块的餐车生意.md
index 716870c..b749a3f 100644
--- a/book/第二篇|真实的行业/第5章|传统行业篇/5.3 地摊经济数字化:一个月900块的餐车生意.md
+++ b/book/第二篇|真实的行业/第5章|传统行业篇/5.3 地摊经济数字化:一个月900块的餐车生意.md
@@ -179,4 +179,3 @@ Soul派对房里聊起了地摊经济。
"只是要想清楚,这个活又脏又累。"
"能吃苦的来,想躺赚的就算了。"
-
diff --git a/book/第二篇|真实的行业/第5章|传统行业篇/5.4 不良资产拍卖:我错过的一个亿佣金.md b/book/第二篇|真实的行业/第5章|传统行业篇/5.4 不良资产拍卖:我错过的一个亿佣金.md
index d8357f7..b40c57d 100644
--- a/book/第二篇|真实的行业/第5章|传统行业篇/5.4 不良资产拍卖:我错过的一个亿佣金.md
+++ b/book/第二篇|真实的行业/第5章|传统行业篇/5.4 不良资产拍卖:我错过的一个亿佣金.md
@@ -191,4 +191,3 @@ Soul派对房里,抱朴讲完了土地拍卖的故事。
"至少让大家知道,什么叫错过。"
"知道了错过,才会珍惜机会。"
-
diff --git a/book/第二篇|真实的行业/第5章|传统行业篇/5.5 桶装水李总:跟物业合作的轻资产模式.md b/book/第二篇|真实的行业/第5章|传统行业篇/5.5 桶装水李总:跟物业合作的轻资产模式.md
index 379f102..a651c0a 100644
--- a/book/第二篇|真实的行业/第5章|传统行业篇/5.5 桶装水李总:跟物业合作的轻资产模式.md
+++ b/book/第二篇|真实的行业/第5章|传统行业篇/5.5 桶装水李总:跟物业合作的轻资产模式.md
@@ -167,4 +167,3 @@
你分享一个模式,别人觉得好,就成了你的客户。
分享即获客,这是最低成本的销售。
-
diff --git a/book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.2 一人公司:为什么越来越多人选择单干.md b/book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.2 一人公司:为什么越来越多人选择单干.md
index 071aeba..8ce947a 100644
--- a/book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.2 一人公司:为什么越来越多人选择单干.md
+++ b/book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.2 一人公司:为什么越来越多人选择单干.md
@@ -184,4 +184,4 @@
关键是,你要知道每个选择的代价和收益,然后做出适合自己的决定。
-我们能做的,就是帮你看清楚这些代价和收益。
\ No newline at end of file
+我们能做的,就是帮你看清楚这些代价和收益。
diff --git a/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.1 私域经济:为什么流量越来越贵.md b/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.1 私域经济:为什么流量越来越贵.md
index 92742ff..35b433f 100644
--- a/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.1 私域经济:为什么流量越来越贵.md
+++ b/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.1 私域经济:为什么流量越来越贵.md
@@ -190,4 +190,4 @@
这就是私域经济的本质。
-我们能做的,就是帮你建立这个池子。
\ No newline at end of file
+我们能做的,就是帮你建立这个池子。
diff --git a/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.2 银发经济与孤独经济:两个被忽视的万亿市场.md b/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.2 银发经济与孤独经济:两个被忽视的万亿市场.md
index 82d7ee7..620ea89 100644
--- a/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.2 银发经济与孤独经济:两个被忽视的万亿市场.md
+++ b/book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.2 银发经济与孤独经济:两个被忽视的万亿市场.md
@@ -196,4 +196,4 @@
这就是找到商业机会的底层逻辑。
-我们能做的,就是帮你发现这些机会。
\ No newline at end of file
+我们能做的,就是帮你发现这些机会。
diff --git a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.10 淘客大佬:损耗30%的白色通道.md b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.10 淘客大佬:损耗30%的白色通道.md
index dd46125..cd64026 100644
--- a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.10 淘客大佬:损耗30%的白色通道.md
+++ b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.10 淘客大佬:损耗30%的白色通道.md
@@ -311,4 +311,3 @@
"如果你想聊聊,可以加到群里,我们有专门做这块的人。"
有时候,找到一个能帮你理清结构的人,比找到一个好项目更重要。
-
diff --git a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.12 美业整合:一个人的公司如何月入十万.md b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.12 美业整合:一个人的公司如何月入十万.md
index ef20544..c3d312c 100644
--- a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.12 美业整合:一个人的公司如何月入十万.md
+++ b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.12 美业整合:一个人的公司如何月入十万.md
@@ -247,4 +247,3 @@
但前提是,你要有整合的能力。
没有能力,再好的模式也跟你没关系。
-
diff --git a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.13 AI工具推广:一个隐藏的高利润赛道.md b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.13 AI工具推广:一个隐藏的高利润赛道.md
index 50e584e..4777d4c 100644
--- a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.13 AI工具推广:一个隐藏的高利润赛道.md
+++ b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.13 AI工具推广:一个隐藏的高利润赛道.md
@@ -219,4 +219,3 @@
第二,你要有让别人信任你的资本。
有了这两个前提,你就能在任何一个信息差的缝隙里找到机会。
-
diff --git a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md
index c834b44..0508bda 100644
--- a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md
+++ b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md
@@ -187,4 +187,3 @@
不愿意的人,只能一直找新客户。
而找新客户,永远是最累的事。
-
diff --git a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md
index a883509..49d77fd 100644
--- a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md
+++ b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md
@@ -209,4 +209,3 @@ AI代聊只做轻动作。
在于你有没有把"确定性"当成产品。
有了这三个,政策就不是负担,而是机会。
-
diff --git a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md
index 7f0e738..3feaf0a 100644
--- a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md
+++ b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md
@@ -217,4 +217,3 @@
是规则清楚,是利益共享,是每一次承诺都能兑现。
做到这三点,私域就不是流量池,而是合伙人池。
-
diff --git a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.8 餐饮女孩:6万营收、1万利润的死撑生意.md b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.8 餐饮女孩:6万营收、1万利润的死撑生意.md
index 14f82a0..fa11d8c 100644
--- a/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.8 餐饮女孩:6万营收、1万利润的死撑生意.md
+++ b/book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.8 餐饮女孩:6万营收、1万利润的死撑生意.md
@@ -508,4 +508,3 @@
如果有一天你也走进我的soul房间,愿意在麦上讲出这些真实的数字和情绪,那一刻,你已经不是一个人在死撑了。
有时候,找到一群能听懂你的人,比找到一个好项目更重要。
-
diff --git a/book/附录/附录2|创业者自检清单.md b/book/附录/附录2|创业者自检清单.md
index 3480482..9fc8b60 100644
--- a/book/附录/附录2|创业者自检清单.md
+++ b/book/附录/附录2|创业者自检清单.md
@@ -113,4 +113,3 @@
---
*这份清单不是标准答案,而是思考的起点。每个人的情况不同,请根据自己的实际情况调整。*
-
diff --git a/book/附录/附录3|本书提到的工具和资源.md b/book/附录/附录3|本书提到的工具和资源.md
index 748d3ab..b93858a 100644
--- a/book/附录/附录3|本书提到的工具和资源.md
+++ b/book/附录/附录3|本书提到的工具和资源.md
@@ -126,4 +126,3 @@
---
*注:以上工具和资源仅供参考,不构成推荐。请根据自己的实际需求选择使用。工具会不断更新,请以最新版本为准。*
-
diff --git a/check_deployment.sh b/check_deployment.sh
old mode 100755
new mode 100644
diff --git a/components/bottom-nav.tsx b/components/bottom-nav.tsx
index c5f3689..36e5900 100644
--- a/components/bottom-nav.tsx
+++ b/components/bottom-nav.tsx
@@ -2,60 +2,56 @@
import Link from "next/link"
import { usePathname } from "next/navigation"
-import { Home, User } from "lucide-react"
+import { Home, User, Handshake } from "lucide-react"
+import { useState } from "react"
+import { MatchModal } from "@/components/match-modal"
export function BottomNav() {
const pathname = usePathname()
+ const [showMatch, setShowMatch] = useState(false)
- // 在文档页面和管理后台不显示底部导航
- if (pathname.startsWith("/documentation") || pathname.startsWith("/admin")) {
+ // 在管理后台不显示底部导航
+ if (pathname.startsWith("/admin")) {
return null
}
- const navItems = [
- { href: "/", icon: Home, label: "首页" },
- { href: "/match", emoji: "🤝", label: "匹配合作" },
- { href: "/my", icon: User, label: "我的" },
- ]
-
return (
<>
- {/* iOS风格底部导航 - 只有3个按钮 */}
-