Lịch An
Giới thiệu
Lịch An là app lịch âm Việt Nam tính toàn bộ trên máy: không mạng, không quảng cáo, không thu thập dữ liệu.
Kết quả
Tôi làm một mình toàn bộ vòng đời: nghiên cứu thị trường, viết engine âm lịch, thiết kế 5 màn hình, dựng nhận diện thương hiệu, rồi đưa app lên cả Google Play và App Store — kèm hệ thống ủng hộ qua RevenueCat. Engine âm lịch được bảo vệ bằng bộ kiểm chứng riêng: 73/73 assertion đi qua, gồm mốc Tết 2000–2026, tháng nhuận và round-trip âm → dương → âm cho toàn bộ giai đoạn 2000–2030.
Vấn đề
Người Việt tra lịch âm mỗi ngày — rằm, mùng 1, giỗ chạp, ngày tốt để cưới hỏi hay động thổ. Nhóm app dẫn đầu có hàng chục triệu lượt cài nhưng đổi trải nghiệm lấy doanh thu quảng cáo: banner phủ kín màn hình, popup toàn trang, và một danh sách quyền truy cập không ai giải thích nổi tại sao một cuốn lịch lại cần.
Vấn đề không phải thiếu app xem lịch âm — mà là không có cuốn lịch nào sạch.
Nghiên cứu
Trước khi viết dòng code đầu tiên, tôi quét ba hướng ý tưởng và đối chiếu số liệu thị trường thật (SensorTower, báo cáo subscription của RevenueCat) để chọn thứ một người làm được:
- Các ngách toàn cầu (báo thức, blocker) phụ thuộc API native nặng và phải đấu với studio có vốn — sai sân chơi cho một người.
- Việt Nam là vùng ARPU thấp nhất khu vực: thắng bằng chi phí tiếp cận gần bằng không ở sân nhà và mở khóa trọn đời giá rẻ, không phải bằng giá thuê bao.
- Lớp nghi lễ (rằm, mùng 1, giỗ, xem ngày) mang tính văn hóa Việt — đối thủ nước ngoài dịch được chuỗi ký tự, không dịch được phong tục.
Kết luận: một cuốn lịch âm tính được bằng thuật toán — không cần kho nội dung, không cần quyền đặc biệt — là giao điểm tốt nhất giữa tốc độ ship và lợi thế sân nhà.
Hệ thống sản phẩm
Trái tim sản phẩm là một engine âm lịch thuần túy: hàm tất định, không phụ thuộc timezone của máy, múi giờ +7 được truyền vào tường minh. Mọi thứ hiển thị đều được tính ra, không tải về.
- Đổi dương ↔ âm (kể cả tháng nhuận), can chi ngày/tháng/năm/giờ, 24 tiết khí, giờ hoàng đạo và ngày hoàng đạo/hắc đạo.
- Năm màn hình: Hôm nay (tờ lịch, giờ đang trôi, nên/không nên), Lịch tháng, Chi tiết ngày, Sự kiện âm lịch, Khác.
- Sự kiện giỗ/cúng theo âm lịch, tự tính lần kế tiếp và nhắc bằng thông báo cục bộ — cùng cơ chế nhắc rằm, mùng 1.
- Chia sẻ tờ lịch dạng ảnh sang Zalo/Messenger, render ngay trên máy.
- Ủng hộ tự nguyện qua RevenueCat, khởi tạo lười — chỉ chạy khi người dùng chạm nút ủng hộ, nên không có gì rời khỏi máy trước đó.
Cam kết "không thu thập dữ liệu" được giữ đúng ở tầng build: một plugin
prebuild tự gỡ các quyền truy cập bộ nhớ mà thư viện kéo vào, và bản
APK được kiểm lại bằng aapt2 dump permissions trước mỗi lần
phát hành.
Vai trò
- Nghiên cứu thị trường và chọn concept dựa trên số liệu
- Thiết kế và kiểm chứng engine âm lịch (TypeScript, bộ test riêng)
- Thiết kế UI/UX và bộ nhận diện (icon, splash, feature graphic)
- Phát triển toàn bộ app React Native / Expo, hai nền tảng
- Phát hành: ký AAB, Play Console, App Store Connect, IAP, ASO tiếng Việt
Bài học
Chỗ khó nhất không nằm trong code
Phần logic âm lịch xong sớm và ổn định. Phần tốn thời gian là hạ tầng phát hành: quy trình thử nghiệm khép kín, khai báo an toàn dữ liệu, sản phẩm mua trong ứng dụng, thuế và hợp đồng — thứ chỉ học được bằng cách đi qua nó một lần.
Riêng tư là một quyết định kiến trúc
"Không thu thập dữ liệu" chỉ đúng nếu code làm đúng như vậy. Việc dời khởi tạo SDK thanh toán vào đúng lúc người dùng chạm nút là thay đổi nhỏ về code nhưng là khác biệt lớn về lời hứa.
Test xanh không thay được mắt người
Có bản build vượt qua typecheck và toàn bộ test lịch nhưng vẫn hiển thị một tiêu đề trống trên ảnh chia sẻ. Từ đó tôi luôn kiểm tra trên máy thật trước khi bấm phát hành.