0

[Open Source] #8 - Quản lý chi phí đăng ký định kỳ (Subscriptions) hiệu quả với Wallos

Trong kỷ nguyên của "nền kinh tế đăng ký", hầu hết chúng ta đều sở hữu ít nhất một vài dịch vụ trả phí hàng tháng như Netflix, Spotify, iCloud, hay các gói SaaS cho công việc. Tuy nhiên, việc kiểm soát thời hạn và chi phí thực tế của chúng thường bị bỏ qua. Hôm nay, mình muốn chia sẻ về Wallos — một giải pháp mã nguồn mở giúp quản lý tài chính cá nhân theo phong cách "Self-hosted" rất đáng trải nghiệm.

📌 Tổng quan về dự án

Wallos không chỉ là một trình theo dõi chi tiêu thông thường. Dự án này được thiết kế để giải quyết bài toán: Làm sao để quản lý các khoản phí định kỳ một cách riêng tư nhất? Thay vì gửi dữ liệu tài chính lên các ứng dụng đám mây của bên thứ ba, bạn có thể tự vận hành Wallos trên hạ tầng của chính mình (Docker, NAS, hoặc VPS).

  • Mã nguồn tại: github.com/ellite/wallos
  • Công nghệ sử dụng: PHP 8.3 (Backend), JavaScript Vanilla (Frontend), SQLite (Database).
  • Triển khai: Hỗ trợ Docker hoàn chỉnh.

🏗️ Phân tích kiến trúc kỹ thuật

1. Sự kết hợp giữa PHP 8.3 và SQLite

Wallos là một minh chứng cho thấy không cần những framework quá đồ sộ để tạo ra một ứng dụng tốt.

  • PHP 8.3: Tận dụng tối đa hiệu năng và các tính năng mới của phiên bản PHP hiện đại nhất.
  • SQLite: Việc sử dụng SQLite thay vì MySQL/Postgres giúp quá trình tự triển khai (self-hosted) trở nên cực kỳ đơn giản. Người dùng chỉ cần quản lý duy nhất một file .db để thực hiện backup hoặc di chuyển dữ liệu.

2. Cơ chế Database Migration ổn định

Dự án sở hữu một hệ thống migration khá thực dụng tại thư mục /migrations. Các script PHP được đánh số thứ tự giúp việc nâng cấp cấu trúc bảng dữ liệu diễn ra tự động và an toàn mỗi khi người dùng cập nhật phiên bản ứng dụng qua Docker.

3. Tự động hóa và tích hợp AI

Wallos tích hợp các tác vụ chạy ngầm (Cronjobs) để thực hiện:

  • Đồng bộ tỷ giá hối đoái thực tế qua API (Fixer, APILayer).
  • Gửi thông báo nhắc hẹn thanh toán qua Telegram, Discord hoặc Email.
  • Đặc biệt, dự án cho phép kết nối với các mô hình ngôn ngữ lớn (OpenAI, Gemini, hoặc Ollama) để phân tích thói quen tiêu dùng.

🔄 Luồng hoạt động hệ thống (Workflow)

Sơ đồ dưới đây mô tả cách Wallos xử lý một khoản chi phí từ khi người dùng nhập liệu cho đến lúc thông báo nhắc nợ:

image.png

1. Luồng ghi dữ liệu: Từ PWA đến SQLite (Bước 1 - 3)

Đây là giai đoạn "đầu vào", nơi trải nghiệm người dùng (UX) được ưu tiên hàng đầu.

  • Bước 1 & 2 (Giao tiếp API): Khi người dùng thêm một dịch vụ (ví dụ: Netflix - $15), Wallos UI (được xây dựng dưới dạng PWA) không gửi dữ liệu thô. Nó đóng gói các Metadata (bao gồm: tên dịch vụ, số tiền, loại tiền tệ, chu kỳ thanh toán, ngày bắt đầu và danh mục). Yêu cầu này được gửi đến các Endpoints (REST API) xử lý bằng PHP 8.3.
  • Bước 3 (Persistence Layer): Tại đây, logic Backend sẽ kiểm tra tính hợp lệ (Validation) và xử lý bảo mật (Sanitize dữ liệu để chống SQL Injection). Dữ liệu sau đó được ghi vào SQLite (wallos.db).
    • Tại sao lại là SQLite? Vì Wallos ưu tiên sự tinh gọn. Việc ghi dữ liệu vào một file local giúp tốc độ phản hồi gần như tức thì (Zero-latency) đối với người dùng cá nhân, đồng thời cực kỳ dễ dàng để Docker hóa.

2. Hệ thống tự động hóa: "Trái tim" của sự tiện lợi (Bước 4 - 10)

Đây là phần làm nên sự khác biệt của Wallos. Hệ thống Cronjob chạy ngầm (thường được cấu hình qua Docker hoặc crontab) thực hiện các tác vụ định kỳ mà không cần sự can thiệp của con người.

A. Đồng bộ tỷ giá hối đoái (Bước 4 - 6)

  • Logic: Wallos hỗ trợ đa tiền tệ. Nếu bạn đăng ký một dịch vụ bằng USD nhưng tiền tệ chính của bạn là VND, hệ thống cần biết giá trị thực tế.
  • Thực thi: Cronjob sẽ gọi đến các External Rate APIs (như Fixer.io hoặc APILayer). Sau khi nhận kết quả, nó thực hiện tính toán quy đổi và cập nhật lại toàn bộ tổng chi phí trong Database. Điều này giúp biểu đồ tài chính của bạn luôn chính xác theo biến động thị trường.

B. Kiểm tra hạn thanh toán và Cảnh báo (Bước 7 - 10)

  • Thuật toán quét (D-3): Đây là một kỹ thuật thông minh. Cronjob không chỉ kiểm tra ngày hôm nay. Nó thực hiện các truy vấn SQL để tìm kiếm các bản ghi có next_payment_date nằm trong khoảng 3 ngày tới (D-3).
  • Notification Dispatcher (Bộ điều phối thông báo): Khi phát hiện có dịch vụ sắp đến hạn (như Netflix), hệ thống sẽ kích hoạt các Webhooks hoặc Integrations.
    • Nó sẽ gọi đến các dịch vụ bên ngoài như Telegram Bot API, Discord Webhook hoặc SMTP Server để gửi thông báo.
  • Kết quả: Bạn nhận được thông báo: "Bạn có khoản thanh toán Netflix sau 3 ngày nữa". Điều này cho bạn đủ thời gian để quyết định có nên hủy dịch vụ hoặc chuẩn bị tiền trong thẻ, tránh việc bị trừ tiền bất ngờ.

3. Những điểm kỹ thuật "đáng đồng tiền bát gạo"

  1. Sự tách biệt giữa UI và Endpoints: Wallos tách biệt hoàn toàn giao diện và logic xử lý API. Điều này giúp dự án dễ dàng mở rộng trong tương lai, ví dụ như xây dựng một ứng dụng Mobile Native thay vì PWA mà vẫn dùng chung hệ thống Endpoints hiện có.
  2. Xử lý Metadata thông minh: Wallos không chỉ lưu số tiền, nó lưu cả logo (được tìm kiếm tự động qua search.php) và các ghi chú tùy chỉnh, giúp việc quản lý không chỉ là những con số khô khan mà là một dashboard trực quan.
  3. Cơ chế Fail-safe cho Cronjob: Nếu một lần chạy Cronjob bị lỗi (ví dụ: API tỷ giá bị sập), hệ thống sẽ sử dụng tỷ giá cũ gần nhất để đảm bảo ứng dụng không bị crash, thể hiện tư duy thiết kế hệ thống ổn định (Resilience).

📱 Trải nghiệm và Tiện ích

Wallos được xây dựng theo chuẩn PWA (Progressive Web App), cho phép người dùng "cài đặt" trực tiếp lên điện thoại từ trình duyệt. Giao diện được tối ưu hóa với biểu đồ trực quan (Chart.js) và hỗ trợ Dark Mode hoàn chỉnh.

So sánh sơ bộ với các giải pháp khác:

Đặc điểm Wallos Bảng tính (Excel/Sheets) App tài chính thương mại
Tính tự động Tự động nhắc hạn, cập nhật tỷ giá Thủ công hoàn toàn Tự động nhưng thường thu phí
Quyền riêng tư Tuyệt đối (Self-host) Trung bình (Cloud-based) Thấp (Dữ liệu do nhà phát triển nắm)
AI Support Có tích hợp LLM Phụ thuộc vào kỹ năng người dùng Hầu như không có
Chi phí Miễn phí (Mã nguồn mở) Miễn phí Thường trả phí định kỳ

✅ Kết luận

Wallos là một công cụ tuyệt vời cho những ai yêu thích việc tự làm chủ dữ liệu cá nhân. Với kiến trúc đơn giản, hiệu quả và khả năng tự động hóa tốt, đây là một dự án mã nguồn mở rất đáng để triển khai trên các thiết bị như Raspberry Pi hoặc NAS.

Hy vọng bài chia sẻ này mang lại một lựa chọn mới cho việc quản lý tài chính của bạn. Nếu bạn quan tâm đến các dự án Open Source tương tự, hãy Follow mình để cùng thảo luận ở những bài viết tiếp theo nhé!



All Rights Reserved

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