Chuyển đến nội dung chính
cutty.dev
All posts

Công nghệ stack của cutty.dev — những lựa chọn có ý thức

Bên dưới cutty.dev là gì và tại sao? Không lan truyền giáo điều: triết lý sử dụng một ngăn xếp công nghệ ổn định nhưng nhàm chán, lưu trữ trong EU và quyền riêng tư được tích hợp sẵn vào kiến trúc mà một người có thể duy trì.

Hầu hết các bài viết về “tech stack của tôi” đều là một danh sách tự hào những xu hướng mới nhất. Bài này nói về điều khác — về triết lý đằng sau những lựa chọn của cutty.dev: nhàm chán và ổn định thay vì thời thượng, châu Âu thay vì Mỹ, riêng tư ngay từ đầu, và đủ đơn giản để một người có thể duy trì.

Khung công tác: Astro (rendering phía máy chủ)

cutty.dev là một ứng dụng Astro được hiển thị phía máy chủ. Mỗi yêu cầu đều đi qua máy chủ, tạo trang động và trả về HTML hoàn chỉnh.

Lý do: Tôi muốn có khả năng render phía máy chủ mà không cần đến các công cụ phức tạp, hỗ trợ tốt nhiều ngôn ngữ được tích hợp sẵn trong chính framework, và tốc độ xử lý nhanh mà không có chi phí phát sinh. Astro cung cấp tất cả những điều này, đồng thời giữ cho mã nguồn dễ đọc — điều này vô cùng giá trị khi làm việc độc lập, hơn bất kỳ tính năng "hot" nào khác.

Cơ sở dữ liệu: SQLite

Một cơ sở dữ liệu, một tệp tin. Thêm vào đó là một lớp truy vấn thân thiện với TypeScript, giúp việc thay đổi cấu trúc dữ liệu ngay lập tức hiển thị lỗi trong mã nguồn thay vì chỉ phát hiện khi chạy sản phẩm.

Lý do: cutty.dev chủ yếu là ứng dụng "đọc nhiều" — mỗi lần nhấp vào liên kết đều là một thao tác đọc và làm tăng bộ đếm. SQLite thực hiện điều này xuất sắc, ngay cả với lưu lượng truy cập lớn hàng ngày. Sao lưu chỉ đơn giản là sao chép một tệp duy nhất — không cần nghi thức nhân bản, không cần các kịch bản phức tạp. Sự đơn giản ở đây không phải là sự tiết kiệm về chất lượng; đó là một quyết định có ý thức rằng ít thành phần chuyển động hơn nghĩa là ít thứ có thể hỏng hóc hơn.

Lưu trữ: máy chủ tại Liên minh Châu Âu

Máy chủ chuyên dụng tại EU, chứng chỉ TLS riêng, reverse proxy với HTTPS tự động, ứng dụng trong container.

Lý do: Đây là nền tảng cách mà cutty.dev xử lý dữ liệu. Kiểm soát hoàn toàn vị trí lưu trữ (quan trọng đối với khách hàng ở EU và tuân thủ RODO), không phụ thuộc vào một nhà cung cấp duy nhất, không sao chép tự động sang Hoa Mỹ như các nền tảng đám mây lớn cung cấp, và chi phí dự đoán được thay vì hóa đơn phụ thuộc vào lưu lượng truy cập. Các nền tảng phương Tây tiện lợi sẽ giúp khởi động nhanh hơn — nhưng với cái giá là nơi dữ liệu của người dùng bạn thực sự được lưu trữ.

Dịch thuật: mô hình AI cục bộ

cutty.dev hỗ trợ 25 ngôn ngữ, và các bản dịch được thực hiện bởi mô hình AI mã nguồn mở, chạy cục bộ trên cơ sở hạ tầng riêng của chúng tôi.

Lý do: không có văn bản nào từ giao diện được gửi ra bên ngoài — chúng tôi không truyền dữ liệu đó đến bất kỳ nhà cung cấp AI bên thứ ba nào. Điều này mang lại chi phí bằng không cho mỗi lần dịch và kiểm soát hoàn toàn chất lượng: chúng tôi có thể làm mới bản dịch bất cứ khi nào muốn. Dịch máy luôn cần sự kiểm tra của con người — và mọi ngôn ngữ đều đã trải qua quá trình rà soát như vậy — nhưng việc tự thực hiện nghĩa là quyền riêng tư không phải là một tùy chọn trong bảng giá, mà là một đặc tính cố hữu của kiến trúc hệ thống.

CSS: ưu tiên tiện ích (Tailwind)

Một hệ thống kiểu duy nhất, không có CSS-in-JS, không có các tệp kiểu riêng biệt. Tất cả đều trực tiếp trong các mẫu.

Lý do: tốc độ lặp lại. Tôi không lãng phí thời gian để nghĩ tên cho các lớp, và các kiểu dáng không được sử dụng cũng sẽ không xuất hiện trên trang cuối cùng. Thiết kế đồng nhất được áp đặt bởi chính hệ thống. Đối với một người, mỗi phút không dành cho những việc phụ đều quan trọng.

Triển khai: container

Ứng dụng trong container (Docker), được triển khai theo cách lặp lại và di động.

Lý do: cùng một môi trường cục bộ và trên production, không còn tình trạng "trên máy tôi chạy tốt", và khả năng di chuyển toàn bộ hệ thống sang máy chủ khác trong vòng nửa giờ nếu cần. Tính di động là một hình thức của sự độc lập.

Những điều tôi đã học được

  • Bộ công cụ nhàm chán chiến thắng. Astro, SQLite, Tailwind, container — tất cả đều trưởng thành, được tài liệu hóa tốt và ổn định. Không có gì bị hỏng vào thời điểm không mong đợi nhất.
  • Lưu trữ tại EU đã sẵn sàng cho sản xuất. Quan niệm "bạn phải dùng đám mây lớn của Mỹ thì mới nghiêm túc" chỉ là một quan niệm sai lầm.
  • AI cục bộ là thực tế. Bạn không cần gửi dữ liệu của mình cho API bên ngoài để có bản dịch tốt.
  • Một người có thể phát hành thứ gì đó trông như sản phẩm của cả đội. Thời gian là tài nguyên đắt giá hơn tiền bạc, vì vậy mọi lựa chọn ở đây đều nhằm bảo vệ thời gian.

Xem trực tiếp. Các câu hỏi về khía cạnh kỹ thuật — hello@cutty.dev, tôi phản hồi trong cùng ngày.