0

[Open Source] #152 - SharedMoments: Nền tảng lưu giữ hành trình lứa đôi với kiến trúc Flask, MySQL và hệ thống điều phối thông báo đa kênh

Trong thời đại của các mạng xã hội công cộng, việc tìm kiếm một không gian riêng tư, bảo mật để lưu trữ những khoảnh khắc quý giá của hai người là một nhu cầu thiết yếu. SharedMoments ra đời như một giải pháp tự lưu trữ (self-hosted), cho phép các cặp đôi xây dựng "nhật ký số" riêng biệt với đầy đủ tính năng: từ dòng thời gian kỷ niệm, danh sách phim cần xem, đến các mốc đếm ngược tình yêu.

Dưới góc độ kỹ thuật, SharedMoments là một bài học mẫu mực về việc ứng dụng Flask, kỹ thuật Background Worker để quản lý tác vụ định kỳ và tư duy Localization (Bản địa hóa) toàn diện.

Github: https://github.com/v8u7/SharedMoments


🛠️ 1. Nền tảng công nghệ: Sự ổn định và Tính di động

SharedMoments ưu tiên tính thực dụng và khả năng triển khai nhanh trên các máy chủ cá nhân hoặc NAS:

  • Backend Core (Python 3.9 & Flask): Sử dụng Flask làm Micro-framework để điều phối các RESTful API. Cấu trúc mã nguồn được module hóa qua các Blueprint, giúp việc mở rộng các tính năng như "Gallery" hay "Bucket List" trở nên dễ dàng.
  • Persistent Storage (MySQL): Lựa chọn cơ sở dữ liệu quan hệ đảm bảo tính toàn vẹn cho các dữ liệu đan xen giữa người dùng, kỷ niệm và các thiết lập hệ thống.
  • Frontend (Materialize CSS & Vanilla JS): Xây dựng giao diện dựa trên ngôn ngữ thiết kế Material Design của Google. Dự án hạn chế các framework nặng, thay vào đó sử dụng jQuery và Vanilla JS để đạt tốc độ phản hồi tức thì.
  • Infrastructure (Docker & Shell Scripting): Đóng gói toàn bộ hệ sinh thái (App + DB) vào Docker. Script docker_startup.sh đảm nhiệm vai trò tự động hóa việc khởi tạo schema, tạo khóa bảo mật VAPID và kích hoạt dịch vụ.

🏗️ 2. Trụ cột kiến trúc: Decoupled Logic và Middleware-based Security

Kiến trúc của SharedMoments tập trung vào sự phân tách trách nhiệm (Separation of Concerns):

  • Decoupled Background Worker: Đây là một điểm sáng. Dự án tách biệt luồng xử lý Web và luồng xử lý tác vụ ngầm (background_worker.py). Worker này chạy độc lập, chịu trách nhiệm dọn dẹp session cũ và kiểm tra các mốc kỷ niệm để gửi thông báo mà không làm ảnh hưởng đến hiệu năng của người dùng đang truy cập.
  • Database Controller Pattern: Toàn bộ truy vấn SQL được đóng gói trong lớp DBController. Cách tiếp cận này tạo ra một lớp trừu tượng phía trên database, giúp logic nghiệp vụ ở Route sạch sẽ và dễ bảo trì hơn.
  • Session-in-DB Security: Thay vì dùng JWT đơn thuần, SharedMoments quản lý Session ID trực tiếp trong MySQL. Kết hợp với Middleware kiểm tra quyền truy cập cho từng request, hệ thống đảm bảo tính bảo mật "Zero-Trust" cho dữ liệu cá nhân.

🔄 3. Workflow: Từ Sự kiện Kỷ niệm đến Thông báo Đẩy (Sequence Diagram)

Sơ đồ mô tả quy trình tự động hóa thông báo khi đến ngày kỷ niệm của cặp đôi:

image.png


⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. Orphaned File Cleanup: Hệ thống có logic đối soát tự động giữa các tệp tin trong thư mục uploads và các bản ghi trong database. Những tệp tin "mồ côi" (không được liên kết với bất kỳ bài đăng nào) sẽ bị xóa định kỳ để tối ưu dung lượng đĩa cứng.
  2. Multichannel Notification Orchestration: SharedMoments tích hợp cùng lúc Telegram Bot, WebPush API và SMTP. Kỹ thuật này sử dụng các lớp Utility riêng biệt, cho phép người dùng tùy biến nhận thông báo trên thiết bị nào họ cảm thấy thuận tiện nhất.
  3. JSON-based Localization (i18n): Hệ thống đa ngôn ngữ được xử lý tinh tế thông qua các file JSON trong thư mục locales. Việc chuyển đổi ngôn ngữ không chỉ diễn ra ở giao diện mà còn ở các thông báo tự động từ backend, dựa trên biến môi trường LOCALE.
  4. CSV Portability: Dự án cung cấp tính năng Import/Export toàn bộ dữ liệu qua định dạng CSV. Đây là kỹ thuật quan trọng cho các ứng dụng tự lưu trữ, giúp người dùng không bao giờ bị "khóa chặt" vào một instance duy nhất và có thể dễ dàng sao lưu thủ công.

⚖️ 5. So sánh chiến lược

Tiêu chí SharedMoments Day One / Journey (SaaS) Notion / Google Photos
Quyền riêng tư Tuyệt đối (Self-host) Thấp (Dữ liệu trên Cloud) Trung bình
Tính chuyên biệt Cao (Dành riêng cho cặp đôi) Chung cho nhật ký Đa mục đích
Thông báo Đa kênh (Telegram/Push) Chỉ App Push Tùy chọn
Chi phí Miễn phí (Chỉ tốn phí vận hành server) Thuê bao hàng tháng Miễn phí/Trả phí dung lượng

✅ Kết luận: Tại sao SharedMoments là lựa chọn lý tưởng cho cặp đôi Tech-savvy?

SharedMoments chứng minh rằng việc xây dựng một không gian số cá nhân không cần đến những công nghệ quá phức tạp nhưng cần một tư duy hướng người dùng sâu sắc. Sự kết hợp giữa tính riêng tư của Docker và tính chủ động của hệ thống thông báo đa kênh đã biến dự án này thành một bảo tàng kỷ niệm sống động cho bất kỳ cặp đôi nào.

Đối với các lập trình viên Backend, nghiên cứu SharedMoments giúp bạn hiểu sâu về:

  • Cách vận hành Background Workers trong hệ sinh thái Python.
  • Kỹ thuật Localization hệ thống từ Backend đến Frontend.
  • Tư duy thiết kế Hệ thống tệp tin và Cơ sở dữ liệu nhất quán.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.