- 数据集
【免费下载链接】remote-jobs
Source for remoteintech.company — a community-maintained directory of remote-friendly tech companies
本文以 src/companies/fly-io.md 这份 Fly.io 公司档案为线索,拆解 Remote In Tech(remoteintech.company)目录中一条完整公司条目的结构化数据模型:从 YAML frontmatter 字段、正文章节,到这些字段被标签映射、集合分组、页面模板与构建流程消费的完整链路。读完本文,你将掌握如何读懂任何一条公司档案、如何按社区规范新增自己的条目,以及该目录在 Eleventy 站点中的底层运作方式。
一、一条公司条目的完整构成:frontmatter + 正文两段式
Fly.io 的档案位于 src/companies/fly-io.md,它遵循本仓库所有公司档案的统一格式:文件头部是一段 YAML frontmatter,用于承载可被机器消费的结构化元数据;frontmatter 之后是 Markdown 正文,用于承载面向读者的叙述性内容。
该档案的 frontmatter 完整内容如下:
--- title: "Fly.io" slug: fly-io website: https://Fly.io careers_url: https://fly.io/jobs/ region: worldwide remote_policy: hybrid company_size: small technologies: - elixir - ruby addedAt: 2022-10-14 updatedAt: 2022-10-16 ---其中title、slug、website、careers_url、region、remote_policy、company_size、technologies是社区约定俗成的核心字段,而addedAt与updatedAt两个日期字段则由仓库维护者统一管理(详见 CONTRIBUTING.md 的说明),通常不随普通 PR 提交。
正文部分则包含## Company blurb、## Company size、## Remote status、## Region、## Company technologies、## Office locations、## How to apply七个##小节。这与 CONTRIBUTING.md 中"必需章节 + 常用可选章节"的规范完全对应:Company blurb、Remote status、How to apply是硬性要求,其余小节属于推荐的扩展信息。
二、核心字段逐项解读:取值语义与合法范围
要真正读懂一份档案,关键在于理解每个枚举字段的取值语义。仓库将这些取值集中定义在 src/_data/labels.js,作为标签映射的单一事实来源(single source of truth),同时被 JS 侧(经 src/_data/companyHelpers.js 再导出)和 Nunjucks 模板(全局数据级联中的labels.*)共同消费。
Fly.io 档案中各字段的语义如下:
| 字段 | 档案取值 | 标签映射(来自 labels.js) | 说明 |
|---|---|---|---|
region | worldwide | Worldwide | 岗位面向全球招聘,参见正文## Region节 |
remote_policy | hybrid | Hybrid | 全员远程但提供芝加哥办公室,见正文## Remote status节 |
company_size | small | 11-50 employees | 对应档案记录的 33 人规模(截至 2022 年 10 月) |
technologies | elixir,ruby | Elixir、Ruby | 档案正文## Company technologies节还补充了 Rust |
完整的合法取值见 CONTRIBUTING.md 的"Valid Field Values"表:region允许worldwide、americas、europe、americas-europe、asia-pacific、other;remote_policy允许fully-remote、remote-first、hybrid、remote-friendly;company_size覆盖tiny(1-10)、small(11-50)、medium(51-200)、large(201-1000)、enterprise(1000+)五档;technologies则从 JavaScript、TypeScript、React、Node.js、Python、Ruby、Go、Java、PHP、Rust、.NET、Elixir、Scala、Swift、Cloud、DevOps、Docker、Kubernetes、Mobile、Data、ML/AI、SQL、PostgreSQL、NoSQL、Search 等受控词表中选择。
从实现细节看,labels.js 中region、remotePolicy、companySize三个映射表分别对应getRegionLabel、getRemotePolicyLabel、getCompanySizeLabel三个辅助函数(定义于 companyHelpers.js),函数采用"命中映射则返回标签、未命中则原样返回、缺失则回退默认值"的安全策略。这意味着即使某个字段值超出词表,页面渲染也不会崩溃,只会显示原始取值——这保证了目录在演进过程中的健壮性。
三、正文七节的内容骨架:一份档案讲了哪些事实
Fly.io 档案的正文以精炼的七个小节回答了求职者最关心的问题:
- Company blurb(公司简介):一句话定位——"Fly.io 是一个在全球范围内、尽可能靠近用户的边缘(edge computing)位置运行全栈应用与数据库的平台"。这也是全档案最重要的描述性文本,因为它会被站点自动抽取为 SEO meta description(详见下一节)。
- Company size(公司规模):33 人(截至 2022 年 10 月),与 frontmatter 中
company_size: small(11-50 人区间)互相印证。 - Remote status(远程状态):全员远程,但芝加哥设有办公室供自愿使用——这正是
remote_policy: hybrid的语义来源。 - Region(招聘区域):当前开放岗位面向全球任何地点的远程职位,对应
region: worldwide。 - Company technologies(技术栈):Elixir、Rust、Ruby,frontmatter 的
technologies列表取了其中两项用于标签化筛选。 - Office locations(办公室):伊利诺伊州芝加哥。
- How to apply(如何申请):指向官方招聘页面。
这里有一个值得注意的设计:frontmatter 的technologies仅列出elixir与ruby,而正文的Company technologies节提到了三者(含 Rust)。这是因为 frontmatter 中的技术字段承担的是"可枚举、可筛选"的机器标签职责,必须严格从 labels.js 的受控词表取值;而正文可以更自由地叙述完整技术栈。这种"结构化字段负责检索、正文负责叙事"的分工正是整个目录条目设计的核心思想。
四、字段如何被站点消费:从标签映射到集合分组的源码链路
一份档案的价值不在于文件本身,而在于它如何被站点程序化地组织与呈现。Fly.io 档案中的每个 frontmatter 字段,都对应着 src/_config/collections.js 中一个明确的消费逻辑:
- 按地区浏览:
getCompaniesByRegion(collections.js)读取每条档案的region字段,将worldwide归入对应分组,并按 labels.js 渲染出 "Worldwide" 标签。 - 按技术栈浏览:
getCompaniesByTech(collections.js)遍历每条档案的technologies数组,使 Fly.io 同时出现在 "Elixir" 与 "Ruby" 两个技术分组下。 - 公司列表与最新条目:
getAllCompanies按title做字母序排序,getRecentCompanies则按addedAt倒序取最近 12 家——Fly.io 的addedAt: 2022-10-14正是这类"最近新增"聚合的数据来源。 - 标签聚合页:
getCompanyTags(collections.js)把每条档案的technologies、region、remote_policy汇总成带计数与公司列表的标签数据,直接驱动浏览页与标签页。 - 页面渲染:这些集合在 eleventy.config.js 中通过
addCollection注册为 Eleventy 集合,最终由 src/_layouts/company.njk 模板渲染。
在模板层,company.njk 有两点值得关注:其一,careers_url or website决定主按钮文案是 "Apply Now" 还是 "Visit Website"——Fly.io 档案同时提供了careers_url与website,因此求职者看到的是直达招聘页的 "Apply Now" 按钮;其二,region与remote_policy会被渲染为可点击的筛选标签,链接指向/browse/{region}/与/browse/{remote_policy}/对应分组页,而technologies数组则在页面底部的 "Tech Stack" 区块逐一渲染(company.njk)。
五、meta description 自动生成:blurb 的机器再利用
档案正文的## Company blurb小节不仅面向读者,还被 src/companies/companies.11tydata.js 自动加工为页面 meta description。其实现逻辑是(companies.11tydata.js):
- 通过正则
/##\s*Company\s*blurb\s*\n+([\s\S]*?)(?=\n##|$)/i从原始 Markdown 中截取 blurb 小节内容;若缺失则回退到 frontmatter 之后的第一段文本; - 依次剥离 Markdown 链接语法、
*、_、`等符号,把换行与连续空白压缩为单个空格; - 以 155 字符为上限截断,并优先在句号或空格边界处收尾,保证搜索引擎摘要的整洁。
也就是说,Fly.io 档案中那句"运行全栈应用和数据库、贴近用户的边缘计算平台"的简介,会直接成为该条目在搜索引擎结果页中的描述文字。这提醒维护者:写好 blurb 不只是文案工作,更是 SEO 工作。此外模板会在页脚展示updatedAt(经formatDate过滤器格式化为 "MMMM D, YYYY" 样式,见 dates.js 与 company.njk),Fly.io 档案的updatedAt: 2022-10-16即对应页面上 "Last updated" 的时间来源。
六、如何新增与维护一份类似的公司档案
Fly.io 档案是社区规范下的标准产物。如果你想为其他远程友好公司贡献条目,CONTRIBUTING.md 给出了完整的四步流程:
- 在
src/companies/{slug}.md创建文件,文件名必须与 frontmatter 中的slug一致(如slug: fly-io→src/companies/fly-io.md); - 按 CONTRIBUTING.md 的 frontmatter 模板填写元数据,正文至少包含
## Company blurb、## Remote status、## How to apply三个必需小节; - 本地运行
npm run build验证构建通过; - 提交 Pull Request,由仓库的 "Validate Company Profiles" GitHub Action 自动校验并给出修改意见。
在提交前还应注意目录的收录标准:公司须属于半远程至全远程的科技公司、直接雇佣员工而非中介、提供真实的远程职位(佣金制或独立承包商销售类岗位不计数)、careers_url必须指向公司自己的招聘页而非服务销售页。同时,重复条目、内容过于单薄的档案、以及业务变更后不再符合收录标准的公司,都会被维护者处理。addedAt与updatedAt日期字段由维护者管理,PR 中不需要也不应包含。
七、本地构建与运行环境
整个目录基于 Eleventy 静态站点构建,Fly.io 档案经由 eleventy.config.js 注册的companies等集合进入站点。构建流程只需三条命令(见 README.md):
npm install # 安装依赖 npm run start # 启动带热重载的开发服务器 npm run build # 生产构建,输出到 dist/环境要求为 Node.js 22+。构建前,eleventy.config.js 会先通过eleventy.before事件编译 CSS 与 JS;YAML frontmatter 由 js-yaml 解析(eleventy.config.js),公司档案默认使用company布局(见 companies.json 中的{"layout": "company"}),并叠加 companies.11tydata.js 提供的计算数据(computed data)自动生成 meta description。
总结
从一份小小的 fly-io.md 出发,可以看到 Remote In Tech 目录背后的完整数据工程:frontmatter 提供可枚举、可筛选的结构化字段,labels.js 提供统一的标签语义,collections.js 负责按地区、技术栈、时间与字母序组织条目,company.njk 完成页面呈现,而 companies.11tydata.js 则把 blurb 自动转化为 SEO 描述。理解这条链路,既是读懂任意一条公司档案的钥匙,也是按社区规范贡献新条目、甚至扩展站点功能(如新增标签类型或聚合视图)的起点。
- 数据集
【免费下载链接】remote-jobs
Source for remoteintech.company — a community-maintained directory of remote-friendly tech companies
相关推荐
Continu 公司档案解读:remoteintech.company 远程友好公司目录的条目结构与数据组织
Continu 公司档案解读:remoteintech.company 远程友好公司目录的条目结构与数据组织 导读 :本文以 Continu 公司档案 http
数据集CodingCops 公司档案全解析:remoteintech.company 远程友好科技公司目录的数据模型与 Eleventy 渲染流程
CodingCops 公司档案全解析:remoteintech.company 远程友好科技公司目录的数据模型与 Eleventy 渲染流程 本文以仓库中 Co
数据集Deel 公司档案解读:远程友好科技公司目录中的全球 HR 平台条目
Deel 公司档案解读:远程友好科技公司目录中的全球 HR 平台条目 本文以 remoteintech.company 开源仓库中的 deel.md https
数据集
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考