Web app HTML thuần một tệp, có thể di động và tự động cập nhật
(hyperclay.com)- Hyperclay hỗ trợ tạo web app theo cách toàn bộ UI, logic và dữ liệu được tích hợp vào một tệp HTML duy nhất
- Có thể chỉnh sửa tức thì và chia sẻ theo thời gian thực ngay trên chính tệp đó, đồng thời tự kiểm soát giao diện, hành vi và cả cách chỉnh sửa của ứng dụng
- Cung cấp cấu trúc chạy ngay và lưu ngay mà không cần quy trình build/deploy riêng, cơ sở dữ liệu hay backend phức tạp
- Chỉ với một tệp HTML, có thể chạy app ở bất kỳ đâu như trình duyệt, máy chủ, ngoại tuyến, và mọi thay đổi đều được quản lý phiên bản cũng như khôi phục
- Được thiết kế để giảm độ phức tạp của phát triển web hiện đại và giúp bất kỳ ai cũng có thể dễ dàng tạo các ứng dụng tương tác sống động theo thời gian thực
Giới thiệu: Hyperclay, web app sống động tạo từ một tệp HTML duy nhất
- Hyperclay mang lại trải nghiệm để lập trình viên tạo web app như đang nặn nên một sản phẩm bằng một tệp HTML có thể di động, không cần quản lý hạ tầng phức tạp
- Nó hướng tới cấu trúc hoàn chỉnh chỉ với một tệp, loại bỏ những thứ vốn được xem là bắt buộc trong phát triển web truyền thống như tệp cấu hình, build, framework, pipeline triển khai
Khái niệm cốt lõi và ưu điểm
- Ứng dụng được cấu thành từ một tệp HTML duy nhất
- Có thể chỉnh sửa trực tiếp chính tệp đó theo thời gian thực thông qua UI trực quan, và nội dung chỉnh sửa sẽ được lưu vĩnh viễn thành trạng thái của ứng dụng
- UI, logic và dữ liệu đều được chứa động trong cùng một tệp
- Người dùng có thể chỉnh sửa app ngay lập tức như một tài liệu, rồi chia sẻ/tải xuống thay đổi ngay để dùng ngoại tuyến
- Tương tự cách ví von là "Google Docs for interactive code", việc chia sẻ, chỉnh sửa và kiểm soát quyền sở hữu đều rất linh hoạt
Tóm tắt tính năng chính
- Thao tác trực tiếp: Có thể chỉnh sửa ngay khi app đang chạy. Thay đổi được phản ánh tức thì mà không cần biên dịch hay tải lại
- What you see is what you build: Chỉnh UI hoặc sửa trực tiếp mã nguồn là app thay đổi ngay, không có lớp trung gian
- Tính di động thực sự: Có thể xuất app thành tệp HTML để chạy giống hệt ở bất kỳ đâu (máy chủ hoặc ngoại tuyến). Mỗi lần lưu đều được áp dụng quản lý phiên bản để có thể khôi phục
- Tất cả những điều này được thực hiện không cần công nghệ đặc biệt nào, chỉ với đúng một tệp HTML chuẩn
Cấu trúc kỹ thuật
- Hyperclay gồm máy chủ NodeJS và thư viện JS phía client
- Khi trang HTML tự sửa DOM của nó, phần
document.body.outerHTMLđã thay đổi sẽ được gửi lên máy chủ, và chính tệp HTML đó sẽ được cập nhật - Các thay đổi trong app như thuộc tính checked của checkbox được lưu vĩnh viễn vào mã HTML, nhờ đó có thể tái hiện cùng trạng thái ở lần truy cập sau
- Hỗ trợ quản lý phiên bản và quản lý quyền đọc/ghi
Ví dụ thực tế
- Có thể viết và lưu mọi loại app như blog có thể chỉnh sửa trực tiếp, checklist chấm công... chỉ trong một tệp HTML
- Ghi trạng thái của app trực tiếp vào tài liệu bằng thuộc tính
contenteditablehoặc dạng ``
Bối cảnh và vấn đề đặt ra
- Trong quá trình tạo hàng chục website mỗi năm, đã xuất hiện nhu cầu rằng việc code web app giá như tự nhiên như viết lách
- Website tĩnh truyền thống có thay đổi mang tính tạm thời (hành vi người dùng không được lưu)
- Để triển khai tính bền vững dữ liệu trên web, thường phải làm quá nhiều việc như xây cơ sở dữ liệu, API, template, hệ thống tài khoản...
- Điều đó kém hiệu quả với các nhu cầu muốn tạo nhanh, sửa theo thời gian thực và chia sẻ ngay như prototype, công cụ đơn giản, nhật ký phát triển cá nhân hay blog
Cách Hyperclay giải quyết
- UI, trạng thái và hành vi được tích hợp trong một tệp HTML
- Có thể mở ra dễ dàng và sửa ngay như mở một ứng dụng desktop, rồi phản ánh kết quả trực tiếp lên mạng
- Đưa ra khái niệm đối tượng số bền vững (shared, cloneable, persistent)
- Có thể áp dụng cho nhiều công cụ như website builder, công cụ tài liệu/sơ đồ/thuyết trình, dashboard, blog, tạo khảo sát/quiz, trực quan hóa dữ liệu...
Tóm tắt toàn bộ khái niệm
- Phần lớn web app vốn đã sử dụng HTML
- Nếu lược bỏ các bước trung gian, tệp HTML có thể đóng vai trò toàn bộ database/API/UI, giúp stack được đơn giản hóa chỉ còn vài dòng
- Lập trình viên có thể giảm độ phức tạp và tạo ra ứng dụng dễ dùng, dễ bảo trì chỉ với lượng mã tối thiểu
Ví dụ sử dụng Hyperclay
- Dù là blog, checklist hay bất kỳ app nào, đều có thể được viết/phát hành/chia sẻ/chỉnh sửa chỉ bằng một tệp HTML duy nhất
- Có thể dùng ngay ở dạng `내 블로그!
`, và dùng `` để ghi vĩnh viễn từng trạng thái vào tài liệu
Kết luận
- Hyperclay đưa ra một cách làm mới để bất kỳ ai cũng có thể tạo web app tương tác nhẹ, linh hoạt và có tính di động cao, đồng thời chia sẻ/lưu/khôi phục theo thời gian thực mà không vướng sự phiền toái của phát triển web truyền thống
- Đây là nền tảng web app thế hệ mới mà không chỉ lập trình viên hay designer, mà bất kỳ ai cũng có thể dễ dàng sử dụng
7 bình luận
Thú vị đấy.
Cái này có nguyên lý hoạt động tương tự với những trình biên tập web từng rất phổ biến trước đây, nhưng việc nó có thể chạy chỉ với một file HTML duy nhất thì khá thú vị. Cá nhân tôi cũng thấy cái này có phần giống một dạng Proof-of-Concept, nhưng thành thật mà nói, nếu biết tận dụng tốt thì tôi cũng khá tò mò không biết nó có thể đi đến đâu.
Cách hoạt động này chẳng phải giống hệt với cách hoạt động của editor từng được đăng trước đây trên https://vi.news.hada.io/topic?id=19611 sao? Ở đây tôi cũng gắn thêm một backend đơn giản bằng nodejs trên server để tự host, cho phép lưu các bài viết được tạo bằng editor, rồi thêm 2 chức năng là tải danh sách trong
index.htmlvà hiển thị ra, nên tôi đang dùng nó như một bảng tin blog đơn giản; xem qua thì cảm giác đúng là y hệt.Thú vị đấy! Tôi cũng tò mò không biết bảo mật sẽ ra sao.
Ý tưởng thú vị đấy. TiddlyWiki trước đây cũng khá vui.
Thú vị đấy..
Ý kiến trên Hacker News
.htmlđã thay đổiVí dụ, khi nhấp vào một checkbox thì thuộc tính
checkedsẽ được thêm vào, rồidocument.body.outerHTMLở trạng thái đó được lưu toàn cục bằng Hyperclay để lần truy cập sau vẫn phản ánh nguyên trạngNó cũng hỗ trợ quản lý phiên bản tự động và quản lý quyền đọc/ghi
Tôi nghĩ nó hữu ích nhất khi vai trò nhà phát triển và biên tập nội dung là một, vì nếu nhiều biên tập viên dùng cùng lúc thì có thể ghi đè thay đổi của nhau
Nhân tiện, tôi đang triển khai cách để có thể đẩy "migration schema dựa trên DOM" tới mọi ứng dụng mà nhà phát triển đã fork
Thực tế khi làm webapp đơn giản thì đúng là sẽ đến lúc cần máy chủ, nhưng việc vừa theo cách tiếp cận không máy chủ vừa gắn với máy chủ vẫn hơi có cảm giác mâu thuẫn
Dù vậy, ưu điểm là khả năng truy cập đa thiết bị tốt hơn và có vẻ việc chỉnh sửa trực tuyến sẽ dễ hơn
Trường hợp của tôi là chỉnh sửa trên điện thoại bằng trình soạn thảo văn bản rồi đồng bộ sang laptop bằng ứng dụng sync
file://Mỗi lần làm một mini-app HTML/Vue đơn giản là tôi lại gặp đủ kiểu vấn đề và luôn phải tìm cách lách
Ví dụ, file HTML cục bộ không import được module JS cục bộ hoặc không mở được file cục bộ khác như audio
Tôi hiểu là cần hạn chế để ngăn truy cập bừa bãi, nhưng sẽ hay hơn nếu có cách cho phép bằng cách chỉ định phần mở rộng hoặc thư mục cụ thể
Việc phải dựng web server mỗi lần thật quá phiền và có cảm giác quá mức, lý tưởng nhất là chỉ cần nhập URL là ứng dụng chạy ngay
file:///thì chức năng sao chép không hoạt độngNgay cả ứng dụng hoàn toàn offline, không build, không dependency cũng phải thay nút bằng vùng văn bản chỉ vì giới hạn này nên khá bất tiện
Nếu chạy máy chủ cục bộ thì có thể tận dụng VS Code devcontainer để server tự khởi động, và thêm lệnh để có HTTPS ngay trên máy local
Về bảo mật thì khá yếu, nhưng thời nay một phiên bản hiện đại kiểu Electron, có thể truy cập thư mục hay
sqlite db, có lẽ cũng dùng đượcMột lựa chọn khác là trình dựng ứng dụng wasm như Orca, chỉ cung cấp canvas mà không có browser hay DOM
Có thể không phải giải pháp hoàn hảo, nhưng đủ hữu ích vì nó cho phép dùng trình duyệt như một local server bị giới hạn theo cách đơn giản và trực quan
Dù vậy, audio, JavaScript và vài thứ khác vẫn chạy được ở mức nào đó, còn việc dựng web server thì cũng không quá khó vì có thể chạy ngay bằng python/node
Chỉ cần thêm lệnh
webserver_herevào terminal hoặc để nó chạy thường trực là xongThậm chí chính vì rủi ro của HTML local ngày càng lớn nên tôi lại muốn ranh giới nghiêm ngặt hơn
Hiện tại chỉ còn
localStoragevà xuất/nhập thủ công là phương án thay thếTôi lấy cảm hứng từ Hyperclay và thấy hứng thú với ý tưởng một ứng dụng Electron chỉ cần cài một lần rồi nạp nhiều mini-app, giống Electron Fiddle
Không rõ nó chỉ đang nói đến
localStorage, hay là ghi đè file trực tiếp bằng FileSystemAPI, v.v., vì phần giải thích về cơ chế hoạt động chi tiết còn thiếuTôi cũng muốn biết khi người dùng lưu thì thay đổi có được áp dụng tự động mà không hiện hộp thoại "Lưu thành" hay không
/savecủa riêng mình để lưu và ghi đè HTML, đồng thời có sao lưu và quản lý phiên bản/saveđể có sao lưu, và có thể tự chỉnh máy chủ để tự host (chỉ cần tự triển khai auth)Tôi có cảm giác đây là một vòng lặp mà hệ thống ngày càng chồng chất và phức tạp hơn, làm tăng gánh nặng hơn là mang lại cải thiện thực chất
Trải nghiệm tôi muốn là phần giải thích cốt lõi, câu chuyện hậu trường có mạch, và sơ đồ chỉ ở những chỗ thực sự cần
Tức là không phải kiểu JSON chỉ lưu riêng phần thay đổi, mà giống như lưu toàn bộ HTML ở từng thời điểm
Những thay đổi ở form, thuộc tính, tag, v.v. được phản ánh trực tiếp vào mã nguồn HTML
Trình duyệt web thời kỳ đầu tiên của Tim Berners-Lee dành cho NeXT vốn cũng tích hợp chức năng biên tập
Lý do việc chỉnh sửa HTML ban đầu biến mất khỏi web là
Tự xây bộ công cụ riêng cho từng trang như Hyperclay cũng hay, nhưng điều thực sự đáng mong muốn là có các công cụ chuẩn ở cấp trình duyệt (user agent), dùng được ở mọi nơi
Tôi nghĩ đó là một ý tưởng hay và cũng làm rất tốt vai trò testbed
Thật tiếc là nó biến mất, nhưng rõ ràng rất phù hợp với tầm nhìn ban đầu
Trên workstation ở trường đại học, người ta dùng chia sẻ mạng như NFS để file thực tế được lưu công khai và có thể truy cập bằng cùng địa chỉ máy
Trên workstation SGI, chỉ cần cấu hình networking là mọi thứ hoạt động hoàn hảo ngay lập tức
Ngoài ra, trọng tâm của web là cấu trúc hóa thông tin, và nội dung quan trọng hơn hình thức
Theo thời gian, mọi thứ dần ám ảnh với bề ngoài qua mô hình WYSIWYG và lạm dụng table/div, khiến tinh thần ban đầu bị phai nhạt
Thiết kế một hệ thống đơn giản mà ai cũng hiểu thực sự rất khó, còn hiện tại nó đã thành một cấu trúc khá phức tạp mà chỉ một nhóm nhỏ chuyên gia mới hiểu
Thật tiếc khi HTML vẫn có thể dễ dùng nhưng trong phát triển hiện đại lại trở thành kỹ thuật chuyên môn phức tạp
Có vẻ chỉ còn số ít người thật sự hiểu bối cảnh mà TBL ban đầu hướng tới
Dạo này các trình duyệt đều cho phép sửa HTML/JS/CSS trực tiếp qua developer tools, nên tôi lại nghĩ chẳng phải tất cả đều là editor sao
Tôi tự hỏi mọi người có phải không dùng devtools, hay là chỉ dùng React hoặc TS thay vì vanilla JS/HTML
Chrome, Firefox và dòng Safari đều cung cấp tính năng gần như IDE tích hợp sẵn trong trình duyệt, nên viết code trực tiếp cũng được
Sẽ còn tốt hơn nếu bổ sung thêm phần chính sách và thông báo pháp lý kiểu Shopify
Nếu xem hồ sơ HN của tôi thì sẽ hiểu vì sao tôi thấy thứ này hay nhưng vẫn nghĩ cần phần pháp lý
Dòng đầu tiên có dạng
<!DOCTYPE html><html><head><script>const rawData =, dòng thứ hai chứa toàn bộ trạng tháiKhi nhấn nút lưu, tôi lấy
document.documentElement.outerHTML, thay dòng thứ hai bằng trạng thái mới nhất rồi tải xuốngNó hoạt động mà không cần máy chủ
Đoạn mã liên quan
Sau khi sửa văn bản thì có thể lưu thành một phiên bản local mới
Nó chạy tốt trên Android + Brave, nhưng không được hỗ trợ trên iOS + Safari
Có vẻ Hyperclay tập trung nhiều hơn vào multi-user/multi-tenancy và tính bền vững dựa trên DB
TiddlyWiki cũng đáng để tham khảo
Wiki về HTA
Chỉ là trong môi trường IE ngày xưa, việc debug thật sự là địa ngục
Nó trông như một trang web bình thường, nhưng chỉ dành cho IE và còn có quyền chạy tiến trình cục bộ
Quản lý tính bền vững là vấn đề lớn, và mức độ tương đồng thực ra rất hạn chế
Outlook on the web
Xem qua trang web thì tổng thể tôi khá thích, nhưng về mặt thực tế tôi muốn biết giới hạn sẽ lộ ra ở đâu
Về bảo mật: nếu tôi có thể thay đổi trang thì người khác cũng làm được không? Quyền được quản lý thế nào?
Khi lượng mã và logic tăng lên thì từ lúc nào việc quản lý sẽ trở nên khó khăn? Khi dữ liệu tăng thì sẽ ra sao?
Ví dụ, nếu tôi làm một ứng dụng quản lý bia, người khác có thể sao chép riêng ứng dụng đó để dùng mà không mang theo dữ liệu của tôi không?
Người dùng có thể tự do thay đổi trang của chính mình
Nếu người dùng vi phạm niềm tin đó thì họ sẽ mất quyền truy cập tài khoản trả phí, và nếu gây thiệt hại cho người khác thì phải chịu trách nhiệm
Nếu bật tính năng
signupsthì người dùng khác cũng có thể dễ dàng fork ứng dụng, và có thể truy ngược về bản gốcTính năng đẩy cập nhật sang ứng dụng fork cũng đang được triển khai
index.php, nên cuối cùng vẫn là cách bạn sắp xếp mã và bạn chịu đựng những phần không cần thiết ra saoVề sau tôi dự định thêm tính năng cộng tác, nhưng hiện tại nó phù hợp nhất với người dùng đơn lẻ
Dự án Webstrates cũng đang thử nghiệm điều tương tự
Họ dùng DOM như một lớp bền vững để xây dựng phần mềm cộng tác cho các nhóm nhỏ, còn Hyperclay khác ở chỗ nó áp dụng trực tiếp cơ chế này vào các trang web truyền thống
Gần đây họ còn thử cách tiếp cận local-first như MyWebstrates
Tôi tò mò liệu Hyperclay có thể hỗ trợ chỉnh sửa offline bằng Webworker không
Tôi chỉ mới biết đến nó khi nghĩ ra Hyperclay vào năm ngoái
Tôi thực sự muốn làm một phiên bản local-first của Hyperclay, và nghĩ rằng chỉnh sửa offline là trụ cột của phần mềm cá nhân
Không biết chúng ta có thể trao đổi ý tưởng qua video call không