Initial Paprika Next.js implementation
This commit is contained in:
771
working/01-项目功能内容.md
Normal file
771
working/01-项目功能内容.md
Normal file
@@ -0,0 +1,771 @@
|
||||
# 01-项目功能内容
|
||||
|
||||
## 1. 项目基线
|
||||
|
||||
- 项目名称:MeetPaprika / Paprika
|
||||
- 当前对标文件:`/home/mes123456/MeetPaprika/doc/index.html`
|
||||
- 原始对标形态:单文件静态网站 mockup,HTML、CSS、页面数据、页面渲染脚本全部内联在 `doc/index.html`
|
||||
- 品牌主张:Attorney Curated Evidence Building for O-1 Talent
|
||||
- 业务定位:面向 O-1 人才的证据建设服务,帮助 founders、engineers、researchers、executives、creators 等提前建设媒体报道、评审机会、学术文章和完整证据包
|
||||
- 页面运行方式:读取 URL 查询参数 `?page=...`,将对应页面 HTML 字符串写入 `<main id="app"></main>`
|
||||
|
||||
## 2. 技术路线基准
|
||||
|
||||
### 当前静态实现
|
||||
|
||||
- 入口文件:`doc/index.html`
|
||||
- 样式:内联 `<style>`
|
||||
- 脚本:内联 `<script>`
|
||||
- 状态:作为旧版静态 mockup 和视觉对标基线保留;正式工程已在根目录新增
|
||||
- 路由:查询参数路由,不依赖 History API
|
||||
|
||||
### 已落地的正式开发技术架构
|
||||
|
||||
已明确采用:
|
||||
|
||||
- 前端框架:Next.js + React
|
||||
- 数据库:PostgreSQL
|
||||
- 数据访问层:Prisma ORM
|
||||
- 表单处理:Next.js Route Handler `POST /api/submissions` 承接 Start Here 和 Ask a Question
|
||||
- 部署端口:Next.js 服务或反向代理后的应用服务监听 `8082`
|
||||
- HTTPS:由 Nginx/Caddy/云服务反向代理终止 TLS,转发到本机 `8082`
|
||||
|
||||
架构目标:
|
||||
|
||||
- 将当前 `doc/index.html` 的视觉和内容完整迁移到 Next.js 页面/组件。
|
||||
- 将 `start` 和 `ask` 从视觉 mockup 改为真实表单。
|
||||
- 将提交数据保存到 PostgreSQL。
|
||||
- 预留 CV/resume 文件上传能力,但必须先明确存储方案、文件大小、访问权限和隐私规则。
|
||||
- 保留所有 legal disclaimer,防止用户误以为提交表单会创建 attorney-client relationship。
|
||||
|
||||
当前代码状态:
|
||||
|
||||
- 根目录已存在 Next.js App Router 工程。
|
||||
- `app/[page]/page.tsx` 渲染从 `doc/index.html` 抽取的静态页面内容。
|
||||
- `app/start/page.tsx` 和 `app/ask/page.tsx` 已替换为真实 React 表单。
|
||||
- `app/api/submissions/route.ts` 已实现 JSON 提交、Zod 校验和 Prisma 写入。
|
||||
- `prisma/schema.prisma` 和 `prisma/migrations/20260706120000_init/migration.sql` 已建立 `Submission`、`SubmissionFile` 表。
|
||||
- `.env.example` 已提供 `DATABASE_URL` 和 `NEXT_PUBLIC_SITE_URL` 模板,不包含真实密码。
|
||||
- 成功入库尚需生产或本地 PostgreSQL `DATABASE_URL`。
|
||||
|
||||
建议工程结构:
|
||||
|
||||
```text
|
||||
app/
|
||||
page.tsx
|
||||
press/page.tsx
|
||||
judging/page.tsx
|
||||
scholarly/page.tsx
|
||||
services/page.tsx
|
||||
why/page.tsx
|
||||
resources/page.tsx
|
||||
faq/page.tsx
|
||||
start/page.tsx
|
||||
ask/page.tsx
|
||||
thanks/page.tsx
|
||||
terms/page.tsx
|
||||
privacy/page.tsx
|
||||
disclaimer/page.tsx
|
||||
api/
|
||||
submissions/route.ts
|
||||
components/
|
||||
SiteHeader.tsx
|
||||
SiteFooter.tsx
|
||||
Hero.tsx
|
||||
ServiceCard.tsx
|
||||
ServicesCta.tsx
|
||||
LegalPage.tsx
|
||||
forms/
|
||||
StartForm.tsx
|
||||
AskForm.tsx
|
||||
lib/
|
||||
db.ts
|
||||
validators.ts
|
||||
submissions.ts
|
||||
prisma/
|
||||
schema.prisma
|
||||
```
|
||||
|
||||
### 目标发布环境
|
||||
|
||||
- 目标域名:`https://paprikalaw.com/`
|
||||
- 云服务器:`170.106.192.152`
|
||||
- 登录用户:`ubuntu`
|
||||
- 目标端口:`8082`
|
||||
- 可用端口段:`8080-8099`
|
||||
- PostgreSQL:用户确认已在服务器安装完成,待验证服务状态、版本、应用数据库和应用用户
|
||||
- SSH 凭据:用户已在交接信息中提供;长期文档不保存明文密码,后续应改为 SSH key、部署密钥或受控密钥库
|
||||
- 目标发布形态:HTTPS 对外访问,服务内部监听 `8082` 或由反向代理转发至 `8082`
|
||||
|
||||
### 邮箱系统需求
|
||||
|
||||
- 普通用户网页登录:`https://mail.paprikalaw.com/webmail/`
|
||||
- 管理员网页登录:`https://mail.paprikalaw.com/admin/`
|
||||
- 管理员邮箱:`admin@paprikalaw.com`
|
||||
- 普通公司邮箱:
|
||||
- `info@paprikalaw.com`
|
||||
- `contact@paprikalaw.com`
|
||||
- `support@paprikalaw.com`
|
||||
- `sales@paprikalaw.com`
|
||||
- `marketing@paprikalaw.com`
|
||||
- `hr@paprikalaw.com`
|
||||
- `finance@paprikalaw.com`
|
||||
- `billing@paprikalaw.com`
|
||||
- `legal@paprikalaw.com`
|
||||
- `service@paprikalaw.com`
|
||||
- 凭据规则:用户已提供统一初始密码;长期文档不保存明文密码。创建后应要求首次登录修改,或为每个邮箱生成独立强密码。
|
||||
|
||||
邮件系统与网站的关系:
|
||||
|
||||
- 表单通知邮箱建议使用 `support@paprikalaw.com` 或 `contact@paprikalaw.com`。
|
||||
- 法务和隐私页面中的联系邮箱目前是 `support@meetpaprika.com`,上线前需统一为 `paprikalaw.com` 域名邮箱或保留现状并记录理由。
|
||||
- 若 Next.js 表单提交后发送邮件通知,需要配置 SMTP 凭据、发件地址、收件地址和退信策略。
|
||||
|
||||
## 3. 当前页面路由清单
|
||||
|
||||
| 路由 | 页面 | 导航入口 | 当前用途 | 状态 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `?page=home` | Home | 品牌 logo 默认入口 | 品牌主张、三大核心服务、提前建设证据、工作流程、价格起点 | 已实现 mockup |
|
||||
| `?page=press` | Press | 顶部导航 Press | 媒体报道服务、证据标准、应避免的 press 类型、代表性 outlet 网络 | 已实现 mockup |
|
||||
| `?page=judging` | Judging | 顶部导航 Judging | 评审机会服务、哪些 judging counts、judging network、证据包内容 | 已实现 mockup |
|
||||
| `?page=scholarly` | Scholarly Articles | 顶部导航 Scholarly Articles | 学术文章服务、发表策略、证据包价值 | 已实现 mockup |
|
||||
| `?page=services` | Services | 顶部导航 Services | 6 类服务卡片和服务转化 CTA | 已实现 mockup |
|
||||
| `?page=why` | Why Paprika | 顶部导航 Why Paprika、footer About | 差异化说明、证据质量、时间节奏、完整证据记录 | 已实现 mockup |
|
||||
| `?page=resources` | Resources / O-1A Criteria | Resources 下拉 | 8 项 O-1A criteria 的 plain-English overview | 已实现 mockup |
|
||||
| `?page=faq` | FAQ | Resources 下拉、footer FAQ | Paprika、O-1、timeline、pricing/refund FAQ | 已实现 mockup |
|
||||
| `?page=start` | Start Here | 顶部 CTA、各页面 CTA | 背景资料提交视觉 mockup | 已实现视觉,未实现提交 |
|
||||
| `?page=ask` | Ask a Question | 各页面 secondary CTA | 简短问题提交视觉 mockup | 已实现视觉,未实现提交 |
|
||||
| `?page=thanks` | Thank You | 提交按钮跳转 | 感谢页 | 已实现 mockup |
|
||||
| `?page=terms` | Terms | footer Terms | 服务条款草稿 | 已实现草稿,需法务确认 |
|
||||
| `?page=privacy` | Privacy | footer Privacy | 隐私政策草稿 | 已实现草稿,需法务确认 |
|
||||
| `?page=disclaimer` | Disclaimer | footer Disclaimer | 法律免责声明草稿 | 已实现草稿,需法务确认 |
|
||||
| `?page=blog` | Blog | 无公开导航 | Field notes 文章卡片占位 | 代码存在,未公开 |
|
||||
| `?page=about` | About | 无公开导航;footer About 实际指向 `why` | 公司说明占位 | 代码存在,未公开 |
|
||||
|
||||
未识别路由会回退到 `home`,页面标题为 `Paprika - ${selected}`。
|
||||
|
||||
## 4. 全站公共模块
|
||||
|
||||
### Header
|
||||
|
||||
- 品牌区:
|
||||
- `Paprika`
|
||||
- `Attorney Curated Evidence Building for O-1 Talent`
|
||||
- 顶部导航:
|
||||
- Press
|
||||
- Judging
|
||||
- Scholarly Articles
|
||||
- Services
|
||||
- Why Paprika
|
||||
- Resources 下拉
|
||||
- Start Here CTA
|
||||
- Resources 下拉:
|
||||
- Frequently Asked Questions -> `?page=faq`
|
||||
- O-1A Criteria Overview -> `?page=resources`
|
||||
- 当前页高亮:
|
||||
- 根据 `data-page` 和当前 `selected` 页面添加 `active`
|
||||
- 当 `selected` 为 `faq` 或 `resources` 时,Resources 触发器高亮
|
||||
|
||||
### Footer
|
||||
|
||||
- 链接:
|
||||
- About -> `?page=why`
|
||||
- FAQ -> `?page=faq`
|
||||
- Terms -> `?page=terms`
|
||||
- Privacy -> `?page=privacy`
|
||||
- Disclaimer -> `?page=disclaimer`
|
||||
- 固定声明:
|
||||
- Paprika is not a law firm and does not provide legal advice or immigration representation.
|
||||
- Use of our services does not create an attorney-client relationship.
|
||||
|
||||
## 5. 首页内容
|
||||
|
||||
### Hero
|
||||
|
||||
- H1:O-1 evidence should not be built in a panic.
|
||||
- Subhead:帮助高成就人才提前建设 credible public recognition
|
||||
- Primary CTA:Send Us Your Profile -> `?page=start`
|
||||
- Secondary CTA:Ask a Question -> `?page=ask`
|
||||
- Microcopy:提交 LinkedIn 或 CV 后 review background,并推荐 evidence path
|
||||
- 时间主张:The only thing you cannot buy later is time.
|
||||
|
||||
### Core services
|
||||
|
||||
三张服务卡片:
|
||||
|
||||
1. Press:Editorial feature in a recognized publication in your field.
|
||||
2. Judging:Opportunities to judge work that matters.
|
||||
3. Scholarly Articles:Scholarly articles in credible, peer-reviewed publications.
|
||||
|
||||
### Start Early
|
||||
|
||||
- 强调证据不能临近 filing 时集中出现
|
||||
- 目标是构建 natural publication and judging timeline
|
||||
- 输出给用户或 immigration attorney 使用的 stronger materials
|
||||
|
||||
### Our standard
|
||||
|
||||
提出推荐前要判断的 8 个问题:
|
||||
|
||||
1. 文章是否关于个人而不只是公司或产品
|
||||
2. 是否连接特定专业领域和 O-1 criteria
|
||||
3. outlet 是否 credible、independent、documentable
|
||||
4. timing 是否自然
|
||||
5. judging 是否真实 evaluative
|
||||
6. authorship 是否体现 expertise
|
||||
7. 是否能清晰整理进 evidence package
|
||||
8. 是否补强其他 existing criteria
|
||||
|
||||
### How it works
|
||||
|
||||
四步流程:
|
||||
|
||||
1. Send us your profile
|
||||
2. Assess background and recommend evidence path
|
||||
3. Build credible public record
|
||||
4. Receive documented evidence package
|
||||
|
||||
价格带:
|
||||
|
||||
- Packages start at `$1,699+`
|
||||
- final pricing depends on outlet level, timeline, field, evidence goals
|
||||
|
||||
## 6. Press 页面内容
|
||||
|
||||
### 核心主张
|
||||
|
||||
- Attorney-Curated Press for O-1 Talent
|
||||
- Press that works as evidence, not just visibility
|
||||
- 关注 outlet、format、field relevance、documentation
|
||||
|
||||
### Cadence note
|
||||
|
||||
- 避免 filing 前突然集中出现的 uncurated evidence
|
||||
- 构建 natural cadence of press over time
|
||||
|
||||
### What Paprika looks for
|
||||
|
||||
Press 推荐前检查:
|
||||
|
||||
1. 文章是否关于本人
|
||||
2. headline 是否出现姓名并连接领域
|
||||
3. 是否 genuine editorial coverage
|
||||
4. outlet 是否有真实 readership、editorial standards、clean track record
|
||||
5. 是否存在 contributor、sponsored、editorial-staff-not-involved 等 disclosure
|
||||
6. timing 是否自然
|
||||
7. 是否 complement other O-1 criteria
|
||||
|
||||
结论句:The outlet name is not the evidence. The editorial independence is.
|
||||
|
||||
### What to avoid
|
||||
|
||||
当前展示三类不推荐 press:
|
||||
|
||||
- Contributor content
|
||||
- Editorial staff not involved
|
||||
- Sponsored or promotional placement
|
||||
|
||||
原因:
|
||||
|
||||
- outlet 没有 editorially choose to cover this person
|
||||
- third party produced or paid for content
|
||||
- 不体现 independent recognition
|
||||
|
||||
### Representative outlets
|
||||
|
||||
页面列出代表性 outlet 网络,包括 Forbes、Bloomberg、Vogue、Business Insider、USA Today、TechCrunch、VentureBeat、Los Angeles Times、Newsweek、Fast Company Mexico、Time 等。正式上线前需要确认是否拥有真实合作网络、是否允许展示、是否需要增加免责声明。
|
||||
|
||||
## 7. Judging 页面内容
|
||||
|
||||
### 核心主张
|
||||
|
||||
- Judging roles should show that your field trusts your expertise.
|
||||
- 服务目标:source and vet selective evaluation opportunities
|
||||
|
||||
### What counts as judging
|
||||
|
||||
当前列出 6 类:
|
||||
|
||||
1. Startup pitch competitions
|
||||
2. Hackathon & innovation judging
|
||||
3. Industry award committees
|
||||
4. Academic & conference peer review
|
||||
5. Grant review panels
|
||||
6. Research competition judging
|
||||
|
||||
### Judging network examples
|
||||
|
||||
当前展示示例 chips:Y Combinator Demo Day Adjacent、TechCrunch Disrupt、SXSW Pitch、Web Summit、Slush、Collision、Startup Grind Global、MassChallenge、Plug and Play、500 Global、Berkeley SkyDeck、Techstars、Founder Institute、academic journal review、conference TPCs、design competition juries、arts award panels、research grant committees 等。
|
||||
|
||||
正式上线前需要确认名称使用风险、真实性、合作关系或改为“示例类型”。
|
||||
|
||||
### Evidence package
|
||||
|
||||
Judging package 当前包含:
|
||||
|
||||
- Signed organizer recommendation letter
|
||||
- Judge selection documentation
|
||||
- Organizer correspondence
|
||||
- Agenda & event page
|
||||
- Panel agenda & bio listing
|
||||
- Ready-to-use packet
|
||||
|
||||
## 8. Scholarly Articles 页面内容
|
||||
|
||||
核心内容:
|
||||
|
||||
- Scholarly articles in credible, peer-reviewed publications
|
||||
- 服务覆盖 peer-reviewed、Scopus-indexed、Google-verified journals
|
||||
- 两个 panel:
|
||||
- Attorney-curated strategy
|
||||
- Complete evidence packet
|
||||
|
||||
正式上线前需确认:
|
||||
|
||||
- 是否能承诺具体 indexing 或 journal 类型
|
||||
- 是否需要补充 publication ethics、authorship、conflict disclosure
|
||||
- 是否避免暗示 pay-to-publish 或不当 authorship arrangement
|
||||
|
||||
## 9. Services 页面内容
|
||||
|
||||
六张服务卡:
|
||||
|
||||
| 编号 | 服务 | 当前标题 | CTA |
|
||||
| --- | --- | --- | --- |
|
||||
| 01 | Press | Editorial feature in a recognized publication in your field. | Explore Press |
|
||||
| 02 | Judging | Opportunities to judge work that matters. | Explore Judging |
|
||||
| 03 | Scholarly Articles | Scholarly articles in credible, peer-reviewed publications. | Explore Articles |
|
||||
| 04 | Expert consultation | Know where you stand before you commit. | Start Here |
|
||||
| 05 | Agency representation | Useful when you have multiple engagements or no single employer. | Start Here |
|
||||
| 06 | Attorney Referral | The right attorney, when you need one. | Start Here |
|
||||
|
||||
注意:服务 04、05、06 曾经传入不存在的 `contact` 路由;R007 已改为 `start`。
|
||||
|
||||
## 10. Why Paprika 页面内容
|
||||
|
||||
五个差异化理由:
|
||||
|
||||
1. Attorney-curated. Built to matter.
|
||||
2. Built before you need it.
|
||||
3. A coherent profile, tailored to you.
|
||||
4. A complete evidence record.
|
||||
5. Everything in one place.
|
||||
|
||||
结尾 peace of mind:
|
||||
|
||||
- You do not have to second-guess what you are building.
|
||||
- You just build.
|
||||
|
||||
## 11. Resources / O-1A Criteria 页面内容
|
||||
|
||||
页面解释 O-1A 8 项 criteria:
|
||||
|
||||
1. Awards
|
||||
2. Memberships
|
||||
3. Published Material About You
|
||||
4. Judging the Work of Others
|
||||
5. Original Contributions of Major Significance
|
||||
6. Scholarly Articles
|
||||
7. Critical or Essential Role
|
||||
8. High Salary or Remuneration
|
||||
|
||||
每项都包含:
|
||||
|
||||
- subtitle
|
||||
- plain-English body
|
||||
- stronger examples
|
||||
- watch out for
|
||||
- bottom line
|
||||
|
||||
页面有 disclaimer:此 overview 是 general information,不是 legal advice,Paprika 不是 law firm。
|
||||
|
||||
## 12. FAQ 页面内容
|
||||
|
||||
FAQ 分组:
|
||||
|
||||
- About Paprika
|
||||
- O-1 Basics
|
||||
- Timeline
|
||||
- Pricing, scope, and refunds
|
||||
|
||||
关键问答覆盖:
|
||||
|
||||
- Paprika 是否 law firm
|
||||
- Paprika 做什么
|
||||
- 适合谁
|
||||
- process 如何工作
|
||||
- 何时开始
|
||||
- 是否 guarantee visa approval
|
||||
- 是否需要 immigration attorney
|
||||
- evidence-building 是否 legitimate
|
||||
- 信息安全
|
||||
- O-1A 基础
|
||||
- 更多证据是否总是更好
|
||||
- top-tier outlet 是否必须
|
||||
- hackathon judging 是否有帮助
|
||||
- timeline 和 rush concerns
|
||||
- pricing、refund、scope
|
||||
|
||||
## 13. Start Here 表单现状
|
||||
|
||||
当前不是实际 `<form>`,只是视觉字段。
|
||||
|
||||
字段视觉:
|
||||
|
||||
- Name required
|
||||
- Email required
|
||||
- LinkedIn
|
||||
- Company Website
|
||||
- Current Role / Company
|
||||
- Field or Industry
|
||||
- Attach Resume or CV optional
|
||||
- What brings you to Paprika? required
|
||||
- What recognition have you already built, if any?
|
||||
- Is there a timeline on your mind?
|
||||
|
||||
提交按钮:
|
||||
|
||||
- `<a class="button primary" href="?page=thanks">Submit Profile</a>`
|
||||
|
||||
边界:
|
||||
|
||||
- 无输入控件
|
||||
- 无校验
|
||||
- 无上传
|
||||
- 无提交接口
|
||||
- 无邮件通知
|
||||
- 无 CRM/数据库记录
|
||||
|
||||
## 14. Ask a Question 表单现状
|
||||
|
||||
当前不是实际 `<form>`,只是视觉字段。
|
||||
|
||||
字段视觉:
|
||||
|
||||
- Name required
|
||||
- Email required
|
||||
- LinkedIn optional
|
||||
- Attach Resume or CV optional
|
||||
- Your question required
|
||||
|
||||
提交按钮:
|
||||
|
||||
- `<a class="button primary" href="?page=thanks">Send Question</a>`
|
||||
|
||||
边界同 Start Here。
|
||||
|
||||
## 15. Legal 页面内容
|
||||
|
||||
已有页面:
|
||||
|
||||
- Terms of Service
|
||||
- Privacy Policy
|
||||
- Disclaimer
|
||||
|
||||
当前固定日期:
|
||||
|
||||
- `Last updated: July 6, 2026`
|
||||
|
||||
风险:
|
||||
|
||||
- 日期已修正为当前工作日期;正式发布前仍需确认是否应改为实际发布日期。
|
||||
- 法务文本涉及 immigration、attorney referral、not a law firm、privacy、refund、payment、third-party services 等高风险内容,必须由负责人或法律顾问确认。
|
||||
|
||||
## 16. 当前已知缺陷和风险
|
||||
|
||||
| 编号 | 问题 | 影响 | 建议 |
|
||||
| --- | --- | --- | --- |
|
||||
| RISK-001 | Services 中 04/05/06 CTA 指向不存在的 `contact` 页面 | 点击后回退首页,转化断点 | 改为 `start` 或新增 `contact` |
|
||||
| RISK-002 | Start/Ask 不是表单 | 无法收集线索 | 改成真实 `<form>` 并接后端或第三方表单服务 |
|
||||
| RISK-003 | 法务页面日期晚于当前日期 | 发布可信度和合规风险 | 发布前确认日期 |
|
||||
| RISK-004 | outlet/network 名称可能暗示合作关系 | 法律和商业陈述风险 | 确认授权或改为“representative examples/types” |
|
||||
| RISK-005 | 无 SEO/OG/sitemap/robots | 正式站收录和分享效果弱 | 上线前补齐 |
|
||||
| RISK-006 | 无截图回归和移动端验收 | 可能存在响应式问题 | 引入 Playwright 或人工截图台账 |
|
||||
| RISK-007 | 无部署配置 | 不能可重复发布 | 建立服务、反向代理、HTTPS 和部署脚本 |
|
||||
| RISK-008 | PostgreSQL schema 尚未设计 | 表单无法稳定入库和追踪 | 建立 `submissions`、`submission_files` 等数据表 |
|
||||
| RISK-009 | 文件上传存储未定 | CV/resume 涉及隐私和访问控制 | 先确定本地磁盘、对象存储或禁用上传 |
|
||||
| RISK-010 | 邮箱统一初始密码 | 多账号共用弱初始密码有安全风险 | 首次登录强制修改或生成独立强密码 |
|
||||
| RISK-011 | 网站联系邮箱域名不一致 | `support@meetpaprika.com` 与 `paprikalaw.com` 品牌不统一 | 上线前统一 contact/support/legal 邮箱 |
|
||||
|
||||
## 17. 视觉设计对标
|
||||
|
||||
`doc/index.html` 的视觉风格不是通用模板,而是一套完整的 Paprika 品牌 mockup。后续重构或拆分必须保持以下基线,除非在 `06-决策记录.md` 新增变更决策。
|
||||
|
||||
### 17.1 CSS 变量
|
||||
|
||||
| 变量 | 值 | 用途 |
|
||||
| --- | --- | --- |
|
||||
| `--red` | `#d9432f` | 主品牌红、按钮、kicker、编号 |
|
||||
| `--deep-red` | `#a9372d` | 深红强调、active、结论句 |
|
||||
| `--ink` | `#241b14` | 主文字色 |
|
||||
| `--text` | `#5c5249` | 正文灰褐色 |
|
||||
| `--muted` | `#8d847a` | 次级文字 |
|
||||
| `--line` | `#e9e1d8` | 边线 |
|
||||
| `--paper` | `#fffdfa` | 页面底色 |
|
||||
| `--panel` | `rgba(255,255,255,.86)` | 卡片背景 |
|
||||
| `--green` | `#4f7d61` | 少量绿色标签 |
|
||||
| `--header-text` | `#41505a` | 导航文字 |
|
||||
|
||||
### 17.2 字体和排版
|
||||
|
||||
- 全站主字体:`Avenir`, `"Avenir Next"`, system sans-serif。
|
||||
- 强调语句和 italic accent 使用 `Georgia`, `"Times New Roman"`, serif。
|
||||
- 页面不使用图片资源,视觉主要由排版、红色强调、浅纸色背景、网格纹理、卡片阴影组成。
|
||||
- `h1` 首页字号范围为 `clamp(54px, 6.3vw, 74px)`。
|
||||
- 子页 `h1` 字号范围为 `clamp(44px, 5.2vw, 66px)`。
|
||||
- 主要 section title 使用 `clamp(34px, 4vw, 46px)` 或更大的 `clamp(48px, 6vw, 74px)`。
|
||||
|
||||
### 17.3 背景和布局
|
||||
|
||||
- `body` 背景由两层浅网格线、中心 radial glow 和 `--paper` 组成。
|
||||
- Header 高度 `92px`,sticky top,半透明纸色背景,`backdrop-filter: blur(14px)`。
|
||||
- 主内容容器常用:
|
||||
- `.hero`:`width: min(1040px, calc(100% - 56px))`
|
||||
- `.cards/.section/.form-wrap`:`width: min(1160px, calc(100% - 72px))`
|
||||
- `.legal-doc`:`width: min(920px, calc(100% - 72px))`
|
||||
- 卡片圆角主要是 `4px` 或 `8px`,按钮和 chip 使用 `999px`。
|
||||
|
||||
### 17.4 响应式规则
|
||||
|
||||
唯一显式断点:`@media (max-width: 1080px)`。
|
||||
|
||||
断点内行为:
|
||||
|
||||
- Header 允许换行,`.nav` 占满宽度并 flex-wrap。
|
||||
- `.cards`、`.two-col`、`.grid`、`.split-feature`、`.avoid-grid`、`.why-v2-grid`、`.criteria-grid`、`.faq-section`、`.form-wrap`、`.questions`、`.steps` 等多列布局统一变为单列。
|
||||
- `.field.large`、`.form-note` 从跨两列改为单列。
|
||||
- `.pricing-band` 改为单列并居中。
|
||||
- `.press-check-item` 从 `46px 1fr` 调整为 `38px 1fr`。
|
||||
|
||||
注意:当前只有一个 1080px 断点,未针对窄屏 header 高度、FAQ hero nowrap、长 outlet chip、法务长段落做更细处理,移动端必须截图验收。
|
||||
|
||||
## 18. 组件和 CSS 类对标
|
||||
|
||||
| 模块 | 关键类 | 当前用途 |
|
||||
| --- | --- | --- |
|
||||
| Header | `.site-header`, `.brand`, `.brand-name`, `.brand-tag`, `.nav`, `.nav-dropdown`, `.resources-menu`, `.start` | 顶部品牌、导航、下拉和 CTA |
|
||||
| Hero | `.hero`, `.subpage`, `.hero-kicker`, `.subhead`, `.actions`, `.button`, `.microcopy`, `.time-line` | 首页和子页首屏 |
|
||||
| 服务卡 | `.cards`, `.card`, `.meta`, `.num`, `.label`, `.explore` | 首页和 Services 入口 |
|
||||
| 通用内容 | `.section`, `.section-head`, `.section-title`, `.section-copy`, `.two-col`, `.grid`, `.panel`, `.mini`, `.article` | 双栏、四栏、文章卡片 |
|
||||
| CTA | `.services-cta`, `.services-cta-inner`, `.button-arrow` | 服务转化横幅 |
|
||||
| Why | `.why-v2`, `.why-v2-grid`, `.why-card`, `.why-v2-peace`, `.why-card-line` | Why Paprika 页面 |
|
||||
| Resources | `.criteria-page`, `.criteria-intro`, `.criteria-grid`, `.criterion-card`, `.criterion-block`, `.criteria-disclaimer` | O-1A criteria 页面 |
|
||||
| FAQ | `.faq-page`, `.faq-section`, `.faq-section-head`, `.faq-list`, `.faq-item`, `.faq-num` | FAQ 页面 |
|
||||
| Press | `.press-cadence`, `.press-standard`, `.press-check-card`, `.outlet-network`, `.outlet-grid`, `.avoid-section`, `.avoid-card`, `.avoid-explain` | Press 页面 |
|
||||
| Judging | `.judging-counts`, `.judging-counts-grid`, `.judging-network`, `.judging-network-chip`, `.judging-package`, `.check-dot` | Judging 页面 |
|
||||
| Process | `.process-section`, `.steps`, `.step`, `.step-num`, `.pricing-band` | 首页四步流程和价格 |
|
||||
| Form mockup | `.form-wrap`, `.field`, `.upload`, `.upload-inline`, `.large`, `.question-field`, `.start-question-field`, `.form-note`, `.req` | Start/Ask 视觉表单 |
|
||||
| Legal | `.legal-doc`, `.legal-doc-head`, `.legal-date`, `.legal-sections`, `.legal-section` | Terms/Privacy/Disclaimer |
|
||||
| Footer | `footer`, `.footer-links` | 底部链接和固定声明 |
|
||||
|
||||
已存在但当前页面未使用或未公开使用的样式/函数相关模块:
|
||||
|
||||
- `.resource-hub`, `.resource-tabs`, `.resource-group`, `.resource-card`:对应 `resourcesHub()`,当前 `pageData.resources` 使用的是 `o1CriteriaPage()`,未使用 hub。
|
||||
- `.why-proof`, `.why-reason`, `.why-closing`:疑似旧版 Why 结构,当前 `whyPaprikaProof()` 使用 `.why-v2`。
|
||||
- `pressQuality()`:旧版 press 对比区块,当前 `pressPage()` 未调用。
|
||||
- `standardGrid()`:标准 mini grid,当前未调用。
|
||||
|
||||
## 19. JavaScript 函数对标
|
||||
|
||||
| 函数/常量 | 当前状态 | 作用 |
|
||||
| --- | --- | --- |
|
||||
| `serviceCards` | 使用中 | 首页三张服务卡 HTML 片段 |
|
||||
| `pageData` | 使用中 | 所有路由页面数据表 |
|
||||
| `hero()` | 使用中 | 通用子页 hero,含 Start/Ask CTA |
|
||||
| `heroWithKicker()` | 使用中 | 带 kicker 的 hero,可关闭 actions |
|
||||
| `servicesCta()` | 使用中 | 红色服务 CTA 横幅 |
|
||||
| `card()` | 使用中 | 服务卡片 |
|
||||
| `panel()` | 使用中 | 双栏 panel |
|
||||
| `productPage()` | 当前未调用 | 通用产品页工厂 |
|
||||
| `judgingPage()` | 使用中 | Judging 页面组合 |
|
||||
| `scholarlyPage()` | 使用中 | Scholarly 页面组合 |
|
||||
| `productPageWithKicker()` | 当前未调用 | 带 kicker 的产品页工厂 |
|
||||
| `pressPage()` | 使用中 | Press 页面组合 |
|
||||
| `pressHero()` | 使用中 | Press 专属 hero |
|
||||
| `judgingCounts()` | 使用中 | Judging counts 区块 |
|
||||
| `judgingCountCard()` | 使用中 | Judging count card |
|
||||
| `judgingNetwork()` | 使用中 | Judging network chips |
|
||||
| `judgingNetworkGroup()` | 当前未调用 | 分组 network chips |
|
||||
| `judgingPackage()` | 使用中 | Judging evidence package |
|
||||
| `judgingPackageCard()` | 使用中 | Package card |
|
||||
| `pressLookFor()` | 使用中 | Press standards checklist |
|
||||
| `outletNetwork()` | 使用中 | Representative outlet chips |
|
||||
| `pressCheck()` | 使用中 | Press checklist item |
|
||||
| `pressCadenceNote()` | 使用中 | Press cadence note |
|
||||
| `pressAvoidSection()` | 使用中 | Press avoid section |
|
||||
| `avoidCard()` | 使用中 | Avoid card |
|
||||
| `miniGrid()` | 使用中 | mini card grid |
|
||||
| `articleGrid()` | 使用中 | blog article grid |
|
||||
| `o1CriteriaPage()` | 使用中 | O-1A 8 criteria 页面 |
|
||||
| `criterionCard()` | 使用中 | Criteria card |
|
||||
| `faqPage()` | 使用中 | FAQ 页面 |
|
||||
| `faqGroup()` | 使用中 | FAQ 分组 |
|
||||
| `faqItem()` | 使用中 | FAQ 单项 |
|
||||
| `resourcesHub()` | 当前未调用 | Resource hub 草稿 |
|
||||
| `resourceGroup()` | 当前未调用 | Resource group 草稿 |
|
||||
| `legalPage()` | 当前未调用 | 旧版 legal page 工厂 |
|
||||
| `legalTermsPage()` | 使用中 | Terms 页面 |
|
||||
| `legalPrivacyPage()` | 使用中 | Privacy 页面 |
|
||||
| `legalDisclaimerPage()` | 使用中 | Disclaimer 页面 |
|
||||
| `disclaimerSection()` | 使用中 | Disclaimer section |
|
||||
| `disclaimerPart()` | 使用中 | Disclaimer p/ul 渲染 |
|
||||
| `whyEarlySection()` | 使用中 | 首页 Start Early |
|
||||
| `servicesIntro()` | 使用中 | 首页 Core services intro |
|
||||
| `standardPreview()` | 使用中 | 首页标准问题 |
|
||||
| `question()` | 使用中 | 标准问题 item |
|
||||
| `howItWorks()` | 使用中 | 首页四步流程和价格 |
|
||||
| `step()` | 使用中 | 流程 step |
|
||||
| `standardGrid()` | 当前未调用 | 标准 grid 草稿 |
|
||||
| `whyPaprikaProof()` | 使用中 | Why 页面 v2 内容 |
|
||||
| `whyV2Card()` | 使用中 | Why card |
|
||||
| `pressQuality()` | 当前未调用 | 旧版 Press quality 对比 |
|
||||
|
||||
最终渲染逻辑:
|
||||
|
||||
```js
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const page = params.get("page") || "home";
|
||||
const selected = pageData[page] ? page : "home";
|
||||
document.title = `Paprika - ${selected}`;
|
||||
document.getElementById("app").innerHTML = pageData[selected].body;
|
||||
```
|
||||
|
||||
active 逻辑:
|
||||
|
||||
- `[data-page]` 与 `selected` 相同时添加 `.active`。
|
||||
- `selected` 为 `faq` 或 `resources` 时,额外给 `.nav-trigger` 添加 `.active`。
|
||||
|
||||
## 20. CTA 和链接全量映射
|
||||
|
||||
| 位置 | 文案 | 目标 |
|
||||
| --- | --- | --- |
|
||||
| Header brand | Paprika | `?page=home` |
|
||||
| Header nav | Press | `?page=press` |
|
||||
| Header nav | Judging | `?page=judging` |
|
||||
| Header nav | Scholarly Articles | `?page=scholarly` |
|
||||
| Header nav | Services | `?page=services` |
|
||||
| Header nav | Why Paprika | `?page=why` |
|
||||
| Header Resources | Resources | `?page=resources` |
|
||||
| Resources menu | Frequently Asked Questions | `?page=faq` |
|
||||
| Resources menu | O-1A Criteria Overview | `?page=resources` |
|
||||
| Header CTA | Start Here | `?page=start` |
|
||||
| Footer | About | `?page=why` |
|
||||
| Footer | FAQ | `?page=faq` |
|
||||
| Footer | Terms | `?page=terms` |
|
||||
| Footer | Privacy | `?page=privacy` |
|
||||
| Footer | Disclaimer | `?page=disclaimer` |
|
||||
| Home hero | Send Us Your Profile | `?page=start` |
|
||||
| Home hero | Ask a Question | `?page=ask` |
|
||||
| 通用 hero | Start Here | `?page=start` |
|
||||
| 通用 hero | Ask a Question | `?page=ask` |
|
||||
| Services CTA | Send Us Your Profile | `?page=start` |
|
||||
| Home pricing band | See Services | `?page=services` |
|
||||
| Start mockup | Submit Profile | `?page=thanks` |
|
||||
| Ask mockup | Send Question | `?page=thanks` |
|
||||
| Thanks | Back to Homepage | `?page=home` |
|
||||
| Service card 01 | Explore Press | `?page=press` |
|
||||
| Service card 02 | Explore Judging | `?page=judging` |
|
||||
| Service card 03 | Explore Articles | `?page=scholarly` |
|
||||
| Service card 04 | Start Here | 原为 `?page=contact`,已修复为 `?page=start` |
|
||||
| Service card 05 | Start Here | 原为 `?page=contact`,已修复为 `?page=start` |
|
||||
| Service card 06 | Start Here | 原为 `?page=contact`,已修复为 `?page=start` |
|
||||
|
||||
## 21. FAQ 完整编号对标
|
||||
|
||||
当前 FAQ 共 4 组、20 个问题。
|
||||
|
||||
| 编号范围 | 分组 kicker | 分组标题 | 问题数量 |
|
||||
| --- | --- | --- | --- |
|
||||
| 01-09 | About Paprika | How Paprika works. | 9 |
|
||||
| 10-14 | O1 Visa | O-1 Basics | 5 |
|
||||
| 15-18 | Timeline | How long things take. | 4 |
|
||||
| 19-20 | Pricing Structure | Pricing, scope, and refunds | 2 |
|
||||
|
||||
需要注意的原文问题:
|
||||
|
||||
- `O1 Visa` kicker 少了 hyphen,是否改为 `O-1 Visa` 需产品确认。
|
||||
- FAQ 15 中原文 `Coverage spaced out over time demonstrate...` 主谓可能不一致。
|
||||
- FAQ 20 写了 “If we are unable to secure the agreed-upon media placements...” 可能只覆盖 media placements,不覆盖 judging/scholarly,应由法务或产品确认。
|
||||
|
||||
## 22. Legal 页面逐项结构对标
|
||||
|
||||
### Terms of Service
|
||||
|
||||
当前 Terms 共 18 个 section,但编号为 1-16、18、19,缺少 17。
|
||||
|
||||
| 编号 | 标题 |
|
||||
| --- | --- |
|
||||
| 1 | Agreement to These Terms |
|
||||
| 2 | What Paprika Provides |
|
||||
| 3 | Not a Law Firm — No Legal Advice |
|
||||
| 4 | No Attorney-Client Relationship |
|
||||
| 5 | No Guarantee of Immigration Outcomes |
|
||||
| 6 | Attorney Referrals |
|
||||
| 7 | Fees, Payment, and Refunds |
|
||||
| 8 | Client Responsibilities and Accuracy of Information |
|
||||
| 9 | Evidence Integrity |
|
||||
| 10 | Third-Party Decisions |
|
||||
| 11 | Your Materials |
|
||||
| 12 | Work Product |
|
||||
| 13 | Prohibited Uses |
|
||||
| 14 | Disclaimer of Warranties |
|
||||
| 15 | Limitation of Liability |
|
||||
| 16 | Changes to These Terms |
|
||||
| 18 | Governing Law |
|
||||
| 19 | Contact |
|
||||
|
||||
### Privacy Policy
|
||||
|
||||
当前 Privacy 共 12 个 section:
|
||||
|
||||
1. Introduction
|
||||
2. Information We Collect
|
||||
3. How We Use Your Information
|
||||
4. How We Share Your Information
|
||||
5. Data Storage and Security
|
||||
6. Data Retention
|
||||
7. Your Rights
|
||||
8. Cookies
|
||||
9. Children's Privacy
|
||||
10. International Users
|
||||
11. Changes to This Policy
|
||||
12. Contact
|
||||
|
||||
### Disclaimer
|
||||
|
||||
当前 Disclaimer 共 9 个 section:
|
||||
|
||||
1. Not a Law Firm
|
||||
2. What "Attorney-Curated" Means
|
||||
3. No Attorney-Client Relationship
|
||||
4. Independent Counsel
|
||||
5. Attorney Referral Disclosure
|
||||
6. No Outcome Guarantee
|
||||
7. User Responsibility
|
||||
8. General Information Only
|
||||
9. Questions
|
||||
|
||||
需要注意的原文问题:
|
||||
|
||||
- Disclaimer 中 `Paprika's evidence-building services is shaped...` 主谓不一致。
|
||||
- Disclaimer 中 `Use of Paprika's does not create...` 语句不完整。
|
||||
- 三个 legal 页面日期已由 `Last updated: July 10, 2026` 修正为 `Last updated: July 6, 2026`。
|
||||
- 当前日期为 `2026-07-06`,发布前仍需法务确认文本内容和最终发布日期。
|
||||
|
||||
## 23. 源码级对标结论
|
||||
|
||||
- `doc/index.html` 共 3423 行。
|
||||
- 前 2261 行主要是 CSS 和 HTML shell。
|
||||
- 2262 行后进入 body、header、main、footer、script。
|
||||
- 2300 行后定义 `serviceCards` 和 `pageData`。
|
||||
- 2428 行后定义组件/页面函数。
|
||||
- 3410 行后执行路由选择、渲染和 active 状态设置。
|
||||
- 当前没有外部依赖、图片、字体文件、构建脚本、后端接口或测试。
|
||||
|
||||
## 24. 后续推进入口
|
||||
|
||||
- 任务领取:`04-任务矩阵.md`
|
||||
- 每轮记录:`03-推进台账.md`
|
||||
- 验收证据:`05-验收证据.md`
|
||||
- 决策依据:`06-决策记录.md`
|
||||
- 开发步骤:`02-项目程序开发详细步骤.md`
|
||||
Reference in New Issue
Block a user