instant instant PricingExamplesEssaysDocsDiscordGitHubLogin Sign up

创始 TypeScript 工程师

Instant 是一个可以在前端使用的实时数据库。我们为您提供 Firebase 和 Supabase 的最佳特性,一个支持关系的同步引擎。这是一种像 Figma、Notion 和 Linear 这样的公司在内部构建,用来驱动其产品的技术 (试用 demo)

我们正在寻找一位创始 TypeScript 工程师加入我们在旧金山的 4 人团队。如果您:

  1. 对类型人体工程学(甚至包括类型在智能感知中的显示方式)非常痴迷
  2. 享受构建人们会花费数小时使用的 UI
  3. 想要构建一个同步引擎,以支持下一个 Figma 或 Notion

那么我们想和您聊聊!那么,为什么是这三点?让我们解释一下:

1. 您对类型人体工程学非常痴迷

在库中使用 TypeScript 的好处之一是可以为用户提供优秀的开发者体验。类型不仅仅可以捕获拼写错误,它们还是一个工具。它们能提供自动完成和良好的反馈;在合适的时机出现,它们可以让人心情愉悦。我们不仅仅想构建一个优秀的数据库,我们还想让人们喜欢使用它。

Instant 是 typed。这需要一些严肃的 type fu,但最终用户可以获得自动完成和类型安全。而现在,这些类型只是一个初步版本。以下是一些未来的计划:

类型化的 where 子句

想象一下,您正在构建一个类似 goodreads 的应用。您想要编写一个如下的查询:给我书架中包含 "基督山伯爵" 的个人资料。在 Instant 中,它会看起来像这样:

{
profiles:{
$:{where:{"bookshelves.books.title":"Count of Monte Cristo"}},
}
};

通过它,您可以获得这些个人资料。但是 bookshelves.books.title 的类型太宽泛了:允许任何字符串。这意味着用户可能会出现拼写错误,或者忘记 profiles 上存在哪些关系。

但是,我们已经可以访问 schema 了。我们_可以_对 where 子句进行类型化。这样,当用户开始编写 "booksh" 时,我们可以使用 profiles 上存在的所有关系进行自动完成!

这很棘手(在查询中可以做 很多事情),但这对用户来说是一个巨大的好处。

改进智能感知

或者说说 schemas:当您将鼠标悬停在一个 schema 上时,您将在 TypeScript 中看到以下内容:

const schema: InstantSchemaDef<EntitiesWithLinks<{
 profiles: EntityDef<{
  name: DataAttrDef<string,true>;
},{},void>;
 bookshelves: EntityDef<{
  title: DataAttrDef<string,true>;
},{},void>;
},{
...;
}>, LinksDef<...>, RoomsDef>

现在,复杂的类型在智能感知中可能看起来非常令人生畏。一些复杂性是不可避免的,但是可以做_很多_事情来改进它。例如,悬停显示中真的需要包含 EntitiesWithLinksEntityDefDataAttrDef 吗?

有些人可能认为不值得为智能感知输出而烦恼。但是您知道这会区分最好的库。优秀的类型会带来巨大的好处。

性能、实用类型...

等等。我们想为类型输出添加更多测试(我们正在考虑的一个项目是编写一个测试 智能感知 输出的库)。我们想编写基准测试,以了解类型在更大的代码库中的性能如何。我们想改进您定义 schema 和编写事务的方式。我们想添加更多实用类型,以便用户可以在 Instant 之上构建自己的库。

2. 您享受构建人们会花费数小时使用的 UI

如今,Instant 附带一个 CLI 工具 和一个 Dashboard

由于 Instant 是我们用户基础设施的核心部分,他们最终每天花费数小时与之交互。我们有责任使他们的体验尽可能愉快。UI 在这里发挥着真正的作用。人们可能不会有意识地注意到它,但是每个细节都会累积起来。有很多工作要做:

CLI 中的迁移

目前,您可以使用 CLI 推送您的 schema,但是我们不支持任何破坏性操作。您可以添加一列,但是无法删除它(您可以手动执行此操作)。我们推迟了在 CLI 中进行破坏性操作,因为我们想制作正确的 UX:一种感觉自然,但又不会让您自食其果的体验。您可以帮助设计和实现它吗?也许是时候添加迁移,或者从 terraform 中获取灵感了。

更好的 Sandbox

在 dashboard 中,我们有一个 sandbox,可让您运行查询和事务:

Sandbox

您可以试运行事务,进行查询,并查看您的权限如何工作。用户在这个工具中花费数小时。但是这里缺少很多东西。例如,您可以保存代码片段,或者拥有对 sandbox 所做更改的历史记录吗?

更好的 Explorer

或者看一下 Explorer。它使您能够以可视化方式查询和更改数据。这通常取代了用户需要为管理面板编写的自定义代码。您已经可以进行查询、创建行、链接对象和上传文件:

Sandbox

但这仅仅是开始。用户还用管理面板做什么,我们如何直接提供给他们?我们想创建一个与 Airtable 相同级别的编辑体验,在他们开始构建应用程序之前,每个开发人员都可以使用。

Rules, Examples...

还有更多。我们想改进我们的 permissions 语言,并使其更易于内省。我们的 examples 页面显示了您可以使用 Instant 的几种方法,但是如果它有数百个示例并且可以搜索呢?这个列表还在继续!

3. 您想构建一个同步引擎,以支持下一个 Figma 或 Notion

Instant 的客户端 SDK 实现了同步引擎:

Sync Engine

在 SDK 内部,有一个客户端数据库,可以像服务器一样运行查询。客户端 DB 使 Instant 能够脱机工作,并开箱即用地获得乐观更新。它充满了让计算机科学教科书变得生动的问题:

如果我们做对了,我们就有机会构建一个既_简单_又可扩展到像 Figma 或 Notion 这样的应用程序的复杂性的抽象 —— 您可以使用它快速构建任何应用程序。

题外话:后端

Backend

客户端 SDK 与用 Clojure 和 Postgres 编写的后端通信。有时,您最终可能会接触 Clojure。我们不希望您成为 Clojure 专家,但是如果您也对破解该语言感到兴奋,我们将很高兴让您加入。

关于我们

您可能会对自己说...这是很多职责。从 TypeScript 类型、到客户端数据库、再到 UI。

我们希望这能像我们一样让您感到兴奋:很多难题是我们喜欢在 Instant 上工作的原因之一。

我们是一个 4 人的团队。我们中的三个人在旧金山(DanielJoeStopa),我们中的一个人在柏林(Niki)。Joe 和 Stopa(创始人)已经认识 10 多年了,并在 Facebook 和 Airbnb 合作过。Daniel(第一位工程师)和 Stopa 曾在 Wit.ai 和 Facebook 合作过,并且是 10 年的朋友。Niki 发布了 datascript,并撰写了最早的 essays 之一,关于 Instant 想要支持的 web 应用程序类型。

我们喜欢一起工作。我们的目标是与我们将成为一生的朋友的人一起工作。我们热爱那些热爱自己所做的事情,具有高度正直、乐观和以原则为导向的黑客。在内部,我们有一种黑客心态 —— 我们快速构建、我们彼此友善,并且坚定地致力于让我们的用户满意。

更多信息

申请

如果您已经读到这里并且感到兴奋,我们真的应该谈谈🙂。向我们发送一封电子邮件:founders@instantdb.com,其中包含一些关于您自己的信息,以及您从事过的项目。如果您构建过 TypeScript 库,那将是一个很大的优势,但不是必需的。

Instant Engineered in San Francisco ExamplesEssaysDocsDiscordGitHubPrivacy PolicyTermsLogin Signup