Build complete AI creator partnership prototype
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
import Link from "next/link";import { PageHero } from "../../components/PageHero";import { SiteShell } from "../../components/SiteShell";
|
||||
const cards=[["01","保留你的独特性","从形象、语气到内容边界共同设定,让 AI 分身延续你的表达。"],["02","内容产能可扩展","把一个创意延展到短视频、图文、语音与多语言版本。"],["03","关系持续被经营","从评论到私聊建立连续体验,让高意向粉丝得到自然回应。"],["04","变现不止一种","组合订阅、付费内容、打赏、专属互动等收入路径。"],["05","全程授权可控","合作前明确授权范围、内容红线与审核机制。"],["06","每一步可复盘","围绕内容触达、互动深度与粉丝价值建立指标。"]];
|
||||
export default function Advantages(){return <SiteShell><main><PageHero eyebrow="WHY PARTNER WITH US" title={<>你的影响力不该被<br/><span className="accent">时间与平台</span>限制。</>} description="我们把 AI 技术、内容运营与粉丝商业化合成一套服务,让创作者专注于真正不可替代的部分:表达、审美与信任。" extra={<Link className="link" href="/process">查看合作流程 <b>→</b></Link>}/><section className="section shell"><div className="adv-grid">{cards.map(x=><article key={x[0]}><span>{x[0]}</span><h2>{x[1]}</h2><p>{x[2]}</p></article>)}</div></section><section className="section comparison"><div className="shell"><div className="title-row"><div><p className="kicker">A BETTER MODEL</p><h2>把分散工作,变成同一条增长链路</h2></div></div><div className="table"><div><b>关键环节</b><b>传统运营</b><b>AI 创作者合作</b></div>{[["内容生产","依赖单次拍摄与个人时间","一次创意,多形态持续延展"],["粉丝互动","容易漏掉重要回应","分层承接评论与私聊关系"],["商业化","以广告和平台分成为主","建立多元、可持续粉丝收入"],["增长复盘","数据分散","围绕粉丝旅程持续优化"]].map(r=><div key={r[0]}>{r.map((c,i)=><span className={i===2?"positive":""} key={c}>{c}</span>)}</div>)}</div></div></section><Cta/></main></SiteShell>}
|
||||
function Cta(){return <section className="cta compact shell"><div><p className="kicker">FIND YOUR GROWTH LEVER</p><h2>先从最适合你的一个增长点开始。</h2></div><Link className="btn primary" href="/contact">获取合作建议 <b>→</b></Link></section>}
|
||||
@@ -0,0 +1,3 @@
|
||||
import Link from "next/link";import { PageHero } from "../../components/PageHero";import { SiteShell } from "../../components/SiteShell";
|
||||
const cases=[["CASE 01","成熟个人创作者","把经典形象延展为持续更新的 AI 内容 IP","拥有稳定粉丝基础,但个人时间有限,内容频率和覆盖市场难以扩大。",["建立授权 AI 分身","扩展多语言内容","承接高意向互动"],["内容产能","跨市场触达","互动进入率"],"purple"],["CASE 02","关系型内容 IP","让一次内容互动,走向长期粉丝关系","评论活跃、私聊需求高,但人工无法持续回应,商业机会自然流失。",["评论分层运营","连续私聊体验","付费内容与订阅"],["关系深度","用户留存","单粉丝价值"],"coral"],["CASE 03","MCN / Agency","为多个创作者建立可复制的增长基础设施","不同账号依赖不同团队,内容、互动和收入数据分散,经验难复制。",["标准化创作者上架","共享运营规则","统一数据复盘"],["上架效率","运营一致性","矩阵收入"],"blue"]] as const;
|
||||
export default function Cases(){return <SiteShell><main><PageHero eyebrow="PARTNERSHIP CASES" title={<>不同起点,<br/>同一件事:<span className="accent">放大价值</span>。</>} description="以下为原型阶段的典型合作场景,用于展示方法与指标结构;正式上线时可替换为已授权案例和可核验数据。"/><section className="section shell case-list">{cases.map(x=><article className="case" key={x[0]}><div className={`case-art ${x[6]}`}><span>{x[0]}</span><div><i/><i/><i/></div><strong>{x[1]}</strong></div><div className="case-copy"><small>{x[1]}</small><h2>{x[2]}</h2><section><b>合作挑战</b><p>{x[3]}</p></section><section><b>合作方案</b><p className="tags">{x[4].map(t=><span key={t}>{t}</span>)}</p></section><section><b>重点指标</b><p className="metrics">{x[5].map(t=><span key={t}>↗ {t}</span>)}</p></section></div></article>)}</section><section className="cta compact shell"><div><p className="kicker">YOUR CASE STARTS HERE</p><h2>你的合作路径,从真实资源出发。</h2></div><Link className="btn primary" href="/contact">聊聊你的情况 <b>→</b></Link></section></main></SiteShell>}
|
||||
@@ -0,0 +1,86 @@
|
||||
import { headers } from "next/headers";
|
||||
import { redirect } from "next/navigation";
|
||||
|
||||
export type ChatGPTUser = {
|
||||
displayName: string;
|
||||
email: string;
|
||||
fullName: string | null;
|
||||
};
|
||||
|
||||
const USER_EMAIL_HEADER = "oai-authenticated-user-email";
|
||||
const USER_FULL_NAME_HEADER = "oai-authenticated-user-full-name";
|
||||
const USER_FULL_NAME_ENCODING_HEADER =
|
||||
"oai-authenticated-user-full-name-encoding";
|
||||
const PERCENT_ENCODED_UTF8 = "percent-encoded-utf-8";
|
||||
const SIGN_IN_PATH = "/signin-with-chatgpt";
|
||||
const SIGN_OUT_PATH = "/signout-with-chatgpt";
|
||||
const CALLBACK_PATH = "/callback";
|
||||
|
||||
export async function getChatGPTUser(): Promise<ChatGPTUser | null> {
|
||||
const requestHeaders = await headers();
|
||||
const email = requestHeaders.get(USER_EMAIL_HEADER);
|
||||
if (!email) return null;
|
||||
|
||||
const encodedFullName = requestHeaders.get(USER_FULL_NAME_HEADER);
|
||||
const fullName =
|
||||
encodedFullName &&
|
||||
requestHeaders.get(USER_FULL_NAME_ENCODING_HEADER) === PERCENT_ENCODED_UTF8
|
||||
? safeDecodeURIComponent(encodedFullName)
|
||||
: null;
|
||||
|
||||
return {
|
||||
displayName: fullName ?? email,
|
||||
email,
|
||||
fullName,
|
||||
};
|
||||
}
|
||||
|
||||
export async function requireChatGPTUser(
|
||||
returnTo: string,
|
||||
): Promise<ChatGPTUser> {
|
||||
const user = await getChatGPTUser();
|
||||
if (user) return user;
|
||||
|
||||
redirect(chatGPTSignInPath(returnTo));
|
||||
}
|
||||
|
||||
export function chatGPTSignInPath(returnTo: string): string {
|
||||
const safeReturnTo = safeRelativeReturnPath(returnTo);
|
||||
return `${SIGN_IN_PATH}?return_to=${encodeURIComponent(safeReturnTo)}`;
|
||||
}
|
||||
|
||||
export function chatGPTSignOutPath(returnTo = "/"): string {
|
||||
const safeReturnTo = safeRelativeReturnPath(returnTo);
|
||||
return `${SIGN_OUT_PATH}?return_to=${encodeURIComponent(safeReturnTo)}`;
|
||||
}
|
||||
|
||||
function safeRelativeReturnPath(value: string): string {
|
||||
if (!value.startsWith("/") || value.startsWith("//")) return "/";
|
||||
|
||||
let url: URL;
|
||||
try {
|
||||
url = new URL(value, "https://app.local");
|
||||
} catch {
|
||||
return "/";
|
||||
}
|
||||
if (url.origin !== "https://app.local") return "/";
|
||||
if (isReservedAuthPath(url.pathname)) return "/";
|
||||
|
||||
return `${url.pathname}${url.search}${url.hash}`;
|
||||
}
|
||||
|
||||
function isReservedAuthPath(pathname: string): boolean {
|
||||
return (
|
||||
pathname === SIGN_IN_PATH ||
|
||||
pathname === SIGN_OUT_PATH ||
|
||||
pathname === CALLBACK_PATH
|
||||
);
|
||||
}
|
||||
|
||||
function safeDecodeURIComponent(value: string): string | null {
|
||||
try {
|
||||
return decodeURIComponent(value);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
import { ContactForm } from "../../components/ContactForm";import { PageHero } from "../../components/PageHero";import { SiteShell } from "../../components/SiteShell";
|
||||
export default function Contact(){return <SiteShell><main><PageHero eyebrow="START A PARTNERSHIP" title={<>下一条增长曲线,<br/>从一次<span className="accent">认真沟通</span>开始。</>} description="留下基本信息与合作目标。我们会先判断最值得验证的场景,再决定是否进入更深入的合作设计。"/><section className="section shell contact"><aside><p className="kicker">WHAT HAPPENS NEXT</p><h2>提交后,你会得到什么?</h2><ol>{[["01","合作适配判断","判断现阶段是否适合。"],["02","优先场景建议","给出最值得先测试的场景。"],["03","下一步沟通安排","有合作空间时进入具体方案。"]].map(x=><li key={x[0]}><span>{x[0]}</span><div><strong>{x[1]}</strong><p>{x[2]}</p></div></li>)}</ol><div className="privacy"><strong>隐私提示</strong><p>请勿提交身份证件、账号密码或未公开的敏感商业数据。</p></div></aside><ContactForm/></section></main></SiteShell>}
|
||||
@@ -0,0 +1,3 @@
|
||||
import Link from "next/link";import { PageHero } from "../../components/PageHero";import { SiteShell } from "../../components/SiteShell";
|
||||
const qs=[["什么样的创作者适合合作?","更适合已经形成明确形象、内容风格或粉丝基础的个人创作者、艺人、关系型 IP,以及希望为旗下创作者增加运营与变现能力的机构。"],["AI 分身会不会取代创作者本人?","不会。AI 分身延展创作者已经建立的形象与表达;核心创意、授权边界与重大商业决策仍由创作者掌握。"],["如何确保 AI 内容符合我的形象?","合作初期会共同建立创作者 AI 手册,包含语气、价值观、视觉规范、禁区和审核机制。"],["我的肖像、声音和内容版权归谁?","具体权利与使用范围会在正式合作协议中清晰约定。默认仅在获得授权的场景和期限内使用。"],["合作一定要同时做所有服务吗?","不需要。可以从 AI 内容、评论运营、私聊关系或付费内容中的一个场景开始。"],["可以覆盖哪些平台和市场?","合作可适配主流内容、社交与粉丝平台;跨市场扩展会结合账号基础、用户画像与当地条件判断。"],["如何衡量合作是否有效?","不同阶段关注内容触达、互动进入率、粉丝留存、关系深度、付费转化与单粉丝价值。"],["第一步需要准备什么?","提供主要账号、粉丝规模、内容类型,以及当前最想解决的一个问题即可。"]];
|
||||
export default function FAQ(){return <SiteShell><main><PageHero eyebrow="FREQUENTLY ASKED QUESTIONS" title={<>在开始之前,<br/>先把<span className="accent">重要问题</span>说清楚。</>} description="关于 AI 分身、合作边界、版权与效果衡量,这里整理了创作者最常问的问题。" extra={<Link className="link" href="/contact">还有其他问题?联系团队 <b>→</b></Link>}/><section className="section shell faq"><aside><p className="kicker">8 QUESTIONS</p><h2>透明,是长期合作的开始。</h2><p>点击问题查看详细回答。</p></aside><div>{qs.map((x,i)=><details key={x[0]} open={i===0}><summary><span>{String(i+1).padStart(2,"0")}</span>{x[0]}<i>+</i></summary><p>{x[1]}</p></details>)}</div></section><section className="cta compact shell"><div><p className="kicker">LET'S TALK</p><h2>真实情况不同,最好的答案也会不同。</h2></div><Link className="btn primary" href="/contact">联系合作团队 <b>→</b></Link></section></main></SiteShell>}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,41 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Geist, Geist_Mono } from "next/font/google";
|
||||
import "./globals.css";
|
||||
|
||||
const geistSans = Geist({
|
||||
variable: "--font-geist-sans",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
const geistMono = Geist_Mono({
|
||||
variable: "--font-geist-mono",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "COZCREATOR|AI 创作者合作服务",
|
||||
description: "为创作者与机构提供 AI 分身、内容增长、粉丝关系运营与商业化服务。",
|
||||
other: {
|
||||
"codex-preview": "development",
|
||||
},
|
||||
icons: {
|
||||
icon: "/favicon.svg",
|
||||
shortcut: "/favicon.svg",
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html lang="zh-CN">
|
||||
<body
|
||||
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
||||
>
|
||||
{children}
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import Link from "next/link";
|
||||
import { SiteShell } from "../components/SiteShell";
|
||||
|
||||
const services = [
|
||||
["01", "AI 分身", "在创作者授权与边界内,建立可持续更新的数字形象。"],
|
||||
["02", "内容增长", "把一次创意延展为多平台、多语言、多形态内容资产。"],
|
||||
["03", "关系运营", "承接评论与私聊,让粉丝被回应、被理解、愿意留下。"],
|
||||
["04", "粉丝变现", "组合订阅、付费内容、打赏与专属互动,构建长期收入。"],
|
||||
];
|
||||
|
||||
export default function Home() {
|
||||
return <SiteShell><main>
|
||||
<section className="hero paper">
|
||||
<div className="shell hero-grid">
|
||||
<div className="hero-copy">
|
||||
<p className="eyebrow">AI CREATOR PARTNERSHIP</p>
|
||||
<h1>让你的影响力,<br/>拥有第二条<span className="accent">增长曲线</span></h1>
|
||||
<p className="lead">为成熟创作者与机构打造专属 AI 分身,持续生产内容、经营粉丝关系,让每一次互动都沉淀为长期价值。</p>
|
||||
<div className="actions"><Link className="btn primary" href="/contact">申请合作 <b>→</b></Link><Link className="link" href="/cases">查看合作案例 <b>→</b></Link></div>
|
||||
</div>
|
||||
<div className="hero-art" aria-label="AI 创作者增长系统示意">
|
||||
<div className="portrait-card"><span>CREATOR</span><div className="portrait-shape"><i/><i/><i/></div><strong>真实影响力</strong><small>表达 · 审美 · 信任</small></div>
|
||||
<div className="twin-card"><span>AI TWIN</span><strong>持续放大</strong><small>内容 · 关系 · 商业化</small></div>
|
||||
<div className="orbit-label">AI 分身已连接 <i/></div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="shell proof"><div><i>✦</i>一套完整的创作者增长系统</div><div><strong>1:1</strong><span>专属合作方案</span></div><div><strong>4</strong><span>核心增长模块</span></div><div><strong>∞</strong><span>可扩展场景</span></div></div>
|
||||
</section>
|
||||
|
||||
<section className="section shell">
|
||||
<div className="split"><div><p className="kicker">OUR MODEL</p><h2>不是替代创作者,<br/>而是放大创作者。</h2></div><p>你的形象、表达与粉丝信任是核心。AI 负责把这些珍贵资产延展到更多内容、更多互动和更多可持续收入中。</p></div>
|
||||
<div className="service-grid">{services.map(([no,title,text])=><article key={no}><span>{no}</span><div/><h3>{title}</h3><p>{text}</p></article>)}</div>
|
||||
</section>
|
||||
|
||||
<section className="section dark"><div className="shell"><div className="split light"><div><p className="kicker">PARTNERSHIP VALUE</p><h2>从“做更多内容”,<br/>到“经营更多价值”。</h2></div><Link className="btn pale" href="/advantages">了解合作优势 <b>→</b></Link></div><div className="flow">{[["01","内容被看见","扩大触达"],["02","互动被回应","建立关系"],["03","信任被沉淀","形成资产"],["04","影响力变现","持续增长"]].map((x,i)=><article className={i===3?"hot":""} key={x[0]}><span>{x[0]}</span><strong>{x[1]}</strong><small>{x[2]}</small></article>)}</div></div></section>
|
||||
|
||||
<section className="section shell">
|
||||
<div className="title-row"><div><p className="kicker">USE CASES</p><h2>适配不同阶段的合作方式</h2></div><Link className="link" href="/cases">查看全部案例 <b>→</b></Link></div>
|
||||
<div className="scenario-grid">{[
|
||||
["个人创作者","把个人影响力变成可持续经营的品牌资产","AI 分身 · 多平台内容 · 粉丝私域","purple"],
|
||||
["关系型 IP","从内容关注走向更深、更长期的粉丝关系","评论运营 · 私聊体验 · 付费内容","coral"],
|
||||
["MCN / Agency","用一套系统承接多个创作者增长与变现","批量上架 · 标准流程 · 数据复盘","blue"],
|
||||
].map(([label,title,tags,color])=><article className={`scenario ${color}`} key={label}><span>{label}</span><h3>{title}</h3><p>{tags}</p><Link href="/cases">↗</Link></article>)}</div>
|
||||
</section>
|
||||
|
||||
<section className="cta shell"><div><p className="kicker">START A PARTNERSHIP</p><h2>你带来影响力,<br/>我们把它经营得更远。</h2></div><div><p>告诉我们你的创作者类型、粉丝规模与当前目标,我们会据此设计第一版合作路径。</p><Link className="btn primary" href="/contact">开始合作 <b>→</b></Link></div></section>
|
||||
</main></SiteShell>;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import Link from "next/link";import { PageHero } from "../../components/PageHero";import { SiteShell } from "../../components/SiteShell";
|
||||
const steps=[["01","合作诊断","了解内容资产、核心粉丝、平台分布与商业目标,找到最值得优先验证的机会。","合作机会地图"],["02","形象与边界","共同定义 AI 分身的人设、表达方式、授权范围和审核规则。","创作者 AI 手册"],["03","AI 分身制作","完成形象、声音与对话能力校准,并准备首批内容样本。","可测试版本"],["04","小范围验证","选择一个平台或场景开始,观察触达、互动、留存与付费信号。","验证数据"],["05","规模化增长","扩展内容形态、渠道和变现路径,形成可复用运营节奏。","长期增长计划"]];
|
||||
export default function Process(){return <SiteShell><main><PageHero eyebrow="HOW WE WORK" title={<>从第一次沟通,<br/>到一套<span className="accent">长期增长系统</span>。</>} description="我们从小范围验证开始,让每一步都可看、可控、可复盘。合作范围随真实结果逐步扩展。" extra={<Link className="btn primary small" href="/contact">开始合作评估 <b>→</b></Link>}/><section className="section shell process-list">{steps.map(x=><article key={x[0]}><span>{x[0]}</span><h2>{x[1]}</h2><p>{x[2]}</p><strong>输出:{x[3]}</strong></article>)}</section><section className="section dark"><div className="shell principles"><div><p className="kicker">OUR PRINCIPLES</p><h2>合作过程中,<br/>你始终拥有决定权。</h2></div><div>{[["01","先验证,再扩大","用真实反馈决定投入。"],["02","先定边界,再创作","内容与互动在授权范围内运行。"],["03","长期价值优先","不透支粉丝信任。"]].map(x=><article key={x[0]}><span>{x[0]}</span><strong>{x[1]}</strong><p>{x[2]}</p></article>)}</div></div></section><section className="cta compact shell"><div><p className="kicker">READY WHEN YOU ARE</p><h2>告诉我们你现在最想解决的问题。</h2></div><Link className="btn primary" href="/contact">提交合作意向 <b>→</b></Link></section></main></SiteShell>}
|
||||
Reference in New Issue
Block a user