Labs · ผลิตภัณฑ์ทั้งชิ้น
Web และ App จากแกนกลางเดียว สร้างครั้งเดียว มาตรฐานเดียว
เว็บไซต์ที่ลูกค้าของท่านอ่าน และแอปที่ทีมงานของท่านพาไปด้วย ไม่ใช่สองโครงการ — แต่เป็นสองด้านของระบบเดียวกัน เราสร้างทั้งคู่บนแกนกลางเดียวที่วัดผลได้ จึงไม่มีวันเคลื่อนห่างจากกัน และมีมือเดียวรับผิดชอบงานทั้งหมด
เว็บไซต์และแอปอ่านความจริงชุดเดียวกัน แก้ครั้งเดียว ทั้งสองขยับไปพร้อมกัน
สี่ตัวเลขจากแพลตฟอร์มที่สร้างขึ้นเป็นงานเดียว
สี่ชิ้นส่วนเดียวกันที่ทำให้สิ่งนี้เป็นจริง อ่านตามลำดับดังนี้: ความจริง สองด้านที่เชื่อฟังความจริงนั้น และประตูที่ไม่ปล่อยให้ด้านใดออกไปอย่างเชื่องช้า
// 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")
เหตุใดบ้านเดียวที่ดูแลงานทั้งหมดจึงเหนือกว่าผู้ให้บริการสองรายที่เย็บต่อกันตรงรอยตะเข็บ
นี่ไม่ใช่ส่วนลดจากการซื้อสองสิ่งพร้อมกัน แต่เป็นรูปทรงที่ต่างออกไปโดยสิ้นเชิง: ระบบเดียวที่มีสองด้าน ไม่ใช่สองระบบที่เอาเทปแปะไว้ด้วยกัน ร้านที่ขายเว็บไซต์ แล้วส่งงานแอปต่อให้ผู้รับเหมาช่วง ไม่สามารถมอบแกนกลางเดียวให้ท่านได้ — เพราะเขาไม่มี และนั่นคือส่วนที่ไม่มีใครตัดราคาแข่งได้
ก่อนจะเขียนโค้ดบรรทัดแรก นี่คือวิธีที่เรารักษางานของท่าน ส่วนนี้ไม่มีการต่อรอง
ที่นี่ NDA เป็นค่าเริ่มต้น ไม่ใช่รายการขายเพิ่ม สิ่งที่ท่านส่งมามีวิศวกรเพียงคนเดียวได้อ่าน ไม่มีผู้อื่น — ไม่มีการขาย ไม่มีการแบ่งปัน และไม่มีการส่งต่อ
ข้อมูลรับรองและบันทึกทั้งหมดอยู่ในบ้านของท่าน ภายใต้สิทธิ์ขั้นต่ำที่จำเป็น เราไม่เก็บสำเนาที่ไม่จำเป็น และไม่มีสิ่งใดออกไปพ้นมือท่านโดยไม่มีคำอนุญาตของท่าน
สิ่งที่ทำงานอยู่ในบ้านของท่าน ท่านอ่านและตรวจสอบได้ — ไม่มีกล่องดำที่ต้องเชื่อโดยไม่ได้เห็น ห้องเครื่องยังเป็นของเรา สิ่งที่ท่านใช้งานเป็นของท่าน
ผลิตภัณฑ์ทั้งชิ้น ในสองบรรทัด เราอ่านเองและตอบเอง — ไม่มีคิวอยู่หลังหน้าต่างบานนี้
ข้อความอยู่บนหน้าจอในซูริกแล้ว — ไม่ใช่ในคิว ไม่ใช่ในระบบตั๋วงาน วิศวกรผู้จะสร้างงานนี้เป็นผู้อ่าน และเขียนตอบกลับด้วยตัวเอง
·