Labs · produk yang lengkap
Web dan aplikasi daripada satu teras. Satu binaan, satu standard.
Laman yang dibaca oleh pelanggan anda dan aplikasi yang dibawa oleh kakitangan anda bukanlah dua projek — kedua-duanya ialah dua wajah bagi satu sistem. Kami membinanya atas satu teras yang terukur, supaya kedua-duanya tidak pernah menyimpang, dan satu tangan bertanggungjawab ke atas keseluruhannya.
Laman dan aplikasi membaca kebenaran yang sama. Ubah sekali sahaja, dan kedua-duanya bergerak bersama.
Empat angka daripada platform yang dibina sebagai satu.
Empat bahagian yang menjadikan semua ini nyata. Bacalah mengikut urutan: kebenarannya, dua wajah yang mematuhinya, dan pintu yang tidak membenarkan mana-mana satu dilepaskan dalam keadaan perlahan.
// MatchTop · the core — one definition both surfaces obey. // Written once. The portal and the field app read the same truth — they cannot drift. type Case = { id: Uuid, status: "open" | "review" | "closed", locale: Locale, // one language list, honoured by both surfaces updated: Instant, // stamped at the edge — one clock for web and app } service Portal { get case(id) -> Case list cases(for: Holder) -> Case[] }
<!-- the web surface · server-rendered at the edge, zero JS to read a case --> <article class="case" lang="{{ case.locale }}"> <h1>{{ t("case.title", case.id) }}</h1> <p class="status status--{{ case.status }}">{{ t("status." + case.status) }}</p> <time datetime="{{ case.updated }}">{{ t.date(case.updated) }}</time> </article> // same Case. same locale list. no bundle to boot before the page can be read.
// the app surface · the same contract, compiled. A wrong field will not build. #[derive(Deserialize)] struct Case { id: Uuid, status: Status, // an enum, not a loose string — the compiler holds the line locale: Locale, updated: Instant, } impl Case { /// Works offline: the last truth we fetched is still the same shape. fn is_open(&self) -> bool { matches!(self.status, Status::Open | Status::Review) } }
"""MatchTop · the gate — one standard over both surfaces. Standard library only. It runs in your pipeline, and it can say no to either face.""" import sys BUDGET = {"first_paint_ms": 100, "js_kb": 0, "a11y": "AA"} # promised, so measured def gate(surface: str, got: dict) -> None: fails = [k for k, limit in BUDGET.items() if _worse(got[k], limit)] # every promise is a test if fails: print(f"HELD · {surface} · " + ", ".join(fails)) sys.exit(1) # neither the site nor the app ships below the line print(f"GREEN · {surface} · measured, and worthy of your name on it")
Mengapa satu rumah untuk keseluruhannya mengalahkan dua vendor yang dicantum pada satu sambungan.
Ini bukan diskaun kerana membeli dua perkara serentak. Ini bentuk yang berbeza: satu sistem dengan dua wajah, bukan dua sistem yang dilekatkan bersama. Syarikat yang menjual laman dan memberikan aplikasi kepada subkontraktor tidak mampu menyerahkan satu teras kepada anda — mereka tidak memilikinya. Itulah bahagian yang tidak boleh dikalahkan dengan tawaran harga.
Sebelum satu baris pun ditulis, inilah cara kerja anda dijaga. Bahagian ini tidak boleh dirunding.
NDA ialah kebiasaan di sini, bukan jualan tambahan. Apa yang anda kongsikan dibaca oleh satu jurutera dan tiada orang lain — tiada apa-apa yang dijual, dikongsi atau diserahkan kepada pihak lain.
Kelayakan akses dan rekod kekal di dalam rumah anda, di bawah hak akses minimum. Kami tidak menyimpan salinan yang tidak kami perlukan, dan tiada apa-apa yang keluar daripada jangkauan anda tanpa kebenaran anda.
Apa yang berjalan di dalam rumah anda adalah milik anda untuk dibaca dan diaudit — tiada kotak hitam yang perlu anda percayai tanpa melihatnya. Bilik enjin kekal milik kami; apa yang anda jalankan adalah milik anda.
Produk yang lengkap, dalam dua baris. Kami sendiri yang membacanya dan kami sendiri yang menjawab — tiada barisan menunggu di sebalik tingkap ini.
Ia sudah berada pada satu skrin di Zürich — bukan dalam barisan menunggu, bukan dalam tiket. Jurutera yang akan membinanya membacanya sendiri, dan membalas sendiri.
·