- Bao gồm các tính năng tạo kế hoạch tập luyện, theo dõi tiến độ và cung cấp cơ sở dữ liệu bài tập đồ sộ
- Được khởi đầu từ kinh nghiệm thất bại của workout.lol, với mục tiêu trở thành một dự án tiến hóa bền vững dành cho cộng đồng mã nguồn mở
- Sử dụng kiến trúc dựa trên Feature-Sliced Design và Next.js, nhấn mạnh tính độc lập theo từng tính năng, khả năng mở rộng và khả năng bảo trì mã nguồn
- Cơ sở dữ liệu bài tập có thể nhập dễ dàng bằng tệp CSV, bao gồm thông tin chi tiết như đặc tính bài tập, video, nhóm cơ chính được tác động và nhiều dữ liệu khác
- Trong tương lai, dự án dự kiến sẽ tiếp tục mở rộng tính năng dựa trên sự tham gia của cộng đồng như ứng dụng di động, huy hiệu/gamification, tích hợp thiết bị đeo, diễn đàn cộng đồng
Tổng quan và giá trị của Workout-Cool
- Workout-Cool là một nền tảng huấn luyện thể hình mã nguồn mở hiện đại, cho phép người dùng tạo kế hoạch tập luyện tùy chỉnh, ghi lại tiến độ của mình và sử dụng rộng rãi cơ sở dữ liệu bài tập phong phú (bao gồm mô tả, video, v.v.)
- Nhà phát triển từng trực tiếp trải qua việc dự án workout.lol bị bỏ bê và khai tử, nên đã tái sinh nó thành một nền tảng thể hình mã nguồn mở bền vững và hiện đại hơn cho cộng đồng tập luyện
Khởi đầu dự án và động lực
- Với vai trò là người đóng góp chính của dự án workout.lol, tác giả từng gặp khó khăn do thất bại trong hợp tác với đối tác cung cấp video và vấn đề chi phí bản quyền video
- Sau khi dự án bị bán cho người khác rồi nhanh chóng bị khai tử, tác giả đã cố gắng liên lạc với chủ sở hữu mới trong hơn 9 tháng nhưng không nhận được phản hồi
- Để không lãng phí giá trị của dự án cũ, tác giả quyết định xây dựng mới một nền tảng hiện đại được cải thiện toàn diện
- Đây không phải là dự án vì mục đích thương mại. Nó mang ý nghĩa của sự tiến hóa, với cam kết bảo trì và phát triển đáng tin cậy cho cộng đồng mã nguồn mở
Triết lý vận hành dựa trên cộng đồng
- Với tư cách vừa là nhà phát triển vừa là người dùng thực tế, tác giả trực tiếp phản ánh các tính năng và trải nghiệm mà cộng đồng cần
- Nếu từng là người dùng workout.lol, bạn sẽ được chào đón; nếu là người dùng mới, bạn có thể trải nghiệm giá trị của một nền tảng thể hình hướng tới tương lai
- Bất kỳ ai cũng có thể trực tiếp đóng góp và gửi ý kiến cải thiện
Cơ sở dữ liệu bài tập và nhập dữ liệu
- Dự án được tích hợp cơ sở dữ liệu bài tập phong phú
- Dưới định dạng CSV mẫu, có thể tùy biến việc import nhiều loại thông tin như id, tên, mô tả, URL video, ảnh, nhóm cơ chính, thuộc tính của từng bài tập
- Ví dụ các cột chính: id, name, name_en, description, description_en, full_video_url, full_video_image_url, introduction, slug, attribute_name, attribute_value, v.v.
- Ví dụ các loại thuộc tính: TYPE(sức mạnh/cardio/plyometrics/giãn cơ), PRIMARY_MUSCLE, SECONDARY_MUSCLE, EQUIPMENT, MECHANICS_TYPE, v.v.
- Có thể import dữ liệu ngay bằng lệnh một dòng, giúp khả năng mở rộng dữ liệu rất cao
Kiến trúc dự án
- Dựa trên Next.js App Router với nguyên tắc Feature-Sliced Design (FSD)
- Triển khai cấu trúc độc lập theo từng tính năng và dễ tái sử dụng
- Phân tách tầng domain rõ ràng: shared → entities → features → widgets → app
- Duy trì tính nhất quán giữa UI, logic nghiệp vụ và tầng dữ liệu
- Ví dụ phân tách tệp:
app/ - route và layout của Next.js
processes/ - luồng nghiệp vụ tổng hợp
widgets/ - UI lắp ghép (ví dụ: Sidebar, Header)
features/ - các đơn vị chính (xác thực, quản lý bài tập, v.v.)
entities/ - người dùng, bài tập, workout, v.v.
shared/ - mã và kiểu dùng chung
styles/ - CSS/toàn cục/chủ đề
Phát triển và triển khai
- Cần Node.js 18+, PostgreSQL (Docker hoặc tự thiết lập), pnpm hoặc npm
- Sau khi clone thì cài dependency, thiết lập biến môi trường, thiết lập cơ sở dữ liệu (tự động hoặc thủ công), rồi truy cập http://localhost:3000 trên trình duyệt
- Có thể tự chạy migration cơ sở dữ liệu và khởi động máy chủ phát triển
- Build image Docker và chạy container (dự kiến)
Tính năng dự kiến
- Thêm bài tập/video
- Ứng dụng di động (dựa trên React Native)
- Gamification (hệ thống huy hiệu, v.v.)
- Thống kê tiến độ nâng cao và trực quan hóa
- Tích hợp thiết bị đeo (đồng hồ/tracker)
- Hỗ trợ đa ngôn ngữ
- Xác thực OAuth (Google, Apple, v.v.)
- Diễn đàn cộng đồng tích hợp sẵn
1 bình luận
Ý kiến trên Hacker News
workout.lolở đâyTôi đã bán app cho một người, rồi rơi vào tình huống người đó cứ bỏ mặc nó
Tôi đã nhắn tin nhiều lần bảo rằng nếu cần hỗ trợ thì cứ liên hệ, nhưng chưa từng nhận được một hồi âm nào
Dù vậy, thấy giờ nó lại được quản lý tiếp khiến tôi thật sự rất vui
Phần UI cũng cải thiện rất tốt, làm tuyệt lắm
Bạn không thể tưởng tượng nổi tôi đã vui thế nào khi thấy tên bạn hiện ra đâu
Tôi cũng từng có cảm giác tan nát khi chỉ biết nhìn dự án bị đình trệ mà chẳng thu lại được gì
Rốt cuộc chính điều đó đã trở thành động lực để tôi đập đi làm lại toàn bộ, đồng thời giữ tinh thần cởi mở mà bạn từng có khi bắt đầu
Cảm ơn lời khen về UI, nghe được điều đó từ bạn thật sự rất có ý nghĩa
Nếu bạn muốn quay lại lúc nào thì luôn được chào đón
Chỉ cần có ý tưởng, góp ý, hay đơn giản là sự hiện diện của bạn thôi cũng đã rất đáng quý
Tôi đang làm một API tự động lên lịch lịch biểu tích hợp với Apple CalDAV(iCal)
Tôi xây tính năng quản lý lịch trình xoay quanh mục tiêu của người dùng (dùng Google ORTools để tính một mô hình ràng buộc CP-SAT cực lớn rất nhanh, xử lý cả kế hoạch 1 năm cũng dưới 5 giây)
Trong đó cũng có cả tính năng thực đơn đáp ứng mục tiêu dinh dưỡng
Thật ra tôi rất muốn đưa kiểu hệ thống kế hoạch tập luyện này vào, nhưng hoàn toàn chưa biết nên dùng gì
Giờ thì đã rõ nên dùng cái gì rồi
Cảm ơn vì đã làm ra dự án này
Giờ tôi muốn theo dõi xem tương lai dự án này sẽ ra sao
error loading exercisesKhông biết bạn nghĩ gì về dự án wger
https://github.com/wger-project là một nền tảng tự host để quản lý fitness/tập luyện/dinh dưỡng, FLOSS theo giấy phép AGPL
Có lẽ đã gần 10 năm tuổi, là ứng dụng Django, và còn có app Flutter chính thức nên dùng được trên Android/iOS/Windows/Linux/macOS
Hỗ trợ nhiều người dùng, thậm chí còn có thể dùng để vận hành phòng gym
body.build là một dự án FLOSS mới hơn, chạy trên trình duyệt và tập trung vào việc xây dựng chương trình tập tạ
Tác giả của body.build cũng có đóng góp cho wger
Sau khá nhiều lần thử và sai, tôi hiện đang dùng wger ổn trong homelab
Có khá nhiều yếu tố cần cân nhắc trong quá trình tự host, nhưng nó hoạt động tốt
Điểm yếu lớn nhất là độ bao phủ của cơ sở dữ liệu bài tập, nhưng may là các contributor đang dần mở rộng thêm
Nếu có ai có thể đóng góp dữ liệu bài tập (và media bài tập), dự án AGPL này chắc chắn sẽ rất cảm kích
UX của website rất tệ, còn app mobile thì (trên iOS) đầy lỗi
Bấm vào bắt đầu bài tập/chỉnh mức tạ/ghi lại buổi tập chỗ nào cũng cứ crash hoặc treo, rồi liên tục bị đăng xuất
Giờ tôi đang dùng LiftLog, có đủ mọi thứ tôi cần và là FOSS
https://github.com/LiamMorrow/LiftLog
Dù fitness và tập tạ giờ là sở thích rất phổ biến, thật lạ là gần như không có app phi thương mại nào vừa dùng được vừa được duy trì tốt
Đó là kết luận của tôi sau khi tự thử vài chục dự án trên Github
Khi đã có kinh nghiệm, thứ quan trọng hơn tính năng của app rốt cuộc vẫn là bạn ghi chép đều đặn đến đâu để quản lý progressive overload
App này là một lựa chọn tốt để người mới bắt đầu
Nếu muốn được dùng rộng hơn thì có đúng 2 thứ nhất định phải có
https://json-schema.app/view/#?url=https%3A%2F%2Fgist.githubusercontent.com%2Fgavmor%2Fb74c4746aa9f3f63b0f50863a5e62d52%2Fraw%2F01318d1107f67ac83387a905d6556736fa7797ff%2Flifting.json
Tôi không đồng ý rằng đây là lựa chọn tốt cho người mới
Tôi hoan nghênh công sức bỏ ra, nhưng phần sắp xếp bài tập được đề xuất hơi đáng lo
Ví dụ: chọn “lưng/tay trước” thì hiện ra 9 bài tập rất lộn xộn
Không có sự cân nhắc về thứ tự hay cách sắp xếp bài, compound lift xuất hiện ngay giữa danh sách hoặc chin-up bị lặp đến ba lần
Không có tính toán 1RM liên quan đến rep/set/trọng lượng
Lại còn gợi ý bro split không chuẩn, khiến mọi thứ càng rời rạc hơn
Tôi nghĩ chỉ cần làm một app PPL tối giản theo thiết bị thôi cũng có thể tốt hơn nhiều
Tôi cũng giống bạn, càng có kinh nghiệm càng thấy thứ quan trọng nhất thật ra là sự đều đặn và việc ghi lại tiến trình (với tôi thì để quản lý tinh thần, nên giờ tập trung vào theo dõi trạng thái hơn là thành tích)
Tính năng lưu routine + theo dõi dài hạn đã có trong roadmap
Vì thế kiến trúc
workout sessionđược thiết kế hoàn toàn khác app cũTôi muốn để người dùng tạo từng khối training riêng lẻ, rồi tối ưu trải nghiệm tái sử dụng, chia sẻ, phân tích và phát triển dần chúng
Nếu được, tôi rất muốn nghe cách bạn tiếp cận việc quản lý routine trong PWA bạn làm
Có vẻ chúng ta đã đi qua con đường khá giống nhau, nên tôi rất muốn nghe bạn chia sẻ
https://wrkout.xyz/ (API cơ sở dữ liệu bài tập mở, có cả hình ảnh/video)
https://github.com/wrkout/exercises.json (dataset bài tập mã nguồn mở)
Khuyên bạn tận dụng nếu cần
Lần này tôi và đối tác đã dựng lại dataset hoàn toàn từ đầu để tránh rõ ràng các vấn đề bản quyền liên quan đến video
Nhờ vậy chúng tôi kiểm soát được dữ liệu để có thể chỉnh thuộc tính, bản dịch và mọi thứ theo đúng ý muốn
Dù vậy, tôi rất vui khi thấy có nhiều dự án mở trong lĩnh vực này
Nếu cả hai cộng đồng đều có thể phát triển thì tôi rất muốn tìm cách tạo ra cộng hưởng
DM luôn được chào đón
Không chỉ ném ra ý tưởng, mà còn gom sẵn dataset để người mới có thể bắt đầu ngay
Thật sự cảm ơn
Điều tôi muốn là tính năng gợi ý mức tạ/số rep cho từng bài tập
Bạn có thể tham khảo chương trình fitness “100 Pushups”
Nếu bạn hứng thú, tôi cũng sẵn sàng bàn thêm về UI
Toàn bộ dữ liệu người dùng được lưu trong PDS, không cần server riêng
Kể cả nếu dự án lại bị bỏ hoang thì dữ liệu vẫn tiếp tục tồn tại lâu dài
Tôi biết app này, nó thực sự đơn giản và cách tiến triển mang tính thích ứng rất xuất sắc trong việc tạo động lực cho người mới
Tôi rất muốn bàn về UI để triển khai routine kiểu tự điều chỉnh ~ tăng tiến như vậy
Tôi sẽ thử nghĩ trước một thuật toán (còn thô sơ) nên hãy DM cho tôi nhé
0:{"a":"$@1","f":"","b":"eETmgndxtv4Ar0i8Wync1"}
1:{"serverError":"An unexpected error occurred."}
Tôi còn chia sẻ cả mã request nữa (đã điền đầy đủ header và thông tin chi tiết)
Lượng truy cập từ HN tăng đột biến đã làm server quá tải ngoài dự kiến
Tôi sẽ sớm ổn định lại và sửa lỗi
Cảm ơn bạn một lần nữa vì đã test và phản hồi
Về căn bản thì hệ thống gợi ý bài tập chưa xét đến các yếu tố cốt lõi của việc thiết kế chương trình fitness
Ở trạng thái hiện tại, tôi khó có thể khuyên dùng nó cho mục đích xây dựng chương trình tập luyện
Có lẽ nên tập trung vào việc import nhật ký tập/routine template đã được kiểm chứng thay vì tạo routine ngay từ đầu (và tôi thấy bạn cũng đã thể hiện sự quan tâm đến hướng này)
Đây là các vấn đề chính tôi gặp phải
UI và phần mô tả rất tốt, nhưng khâu chọn bài tập thì mơ hồ hoặc phi lý ngay cả khi nó có hiện ra
Hay là trước tiên cứ đưa đầy đủ các bài primary/secondary tiêu chuẩn (bar, dumbbell, machine) vào database, rồi để người dùng tự tạo routine
Sẽ càng tốt hơn nếu có cả tùy chọn thay thế cho từng bài cụ thể
Sau khi chuẩn bị xong những điều này rồi mới triển khai tính năng tạo routine, và sẽ rất tuyệt nếu có huấn luyện viên thực tế góp ý
Thiết bị nên giữ đơn giản/chuẩn hóa, hạn chế tối đa các máy mang thương hiệu riêng
Những ý kiến chi tiết thế này đặc biệt quý giá ở giai đoạn sớm
Logic chương trình tập hiện tại đúng là còn rất sơ khai
Nó vẫn chưa phản ánh tốt các nguyên tắc tập luyện như volume, movement pattern, chu kỳ hồi phục, compound/isolation
Phiên bản hiện tại thật sự chỉ để “khám phá”, hoàn toàn chưa phải một huấn luyện viên thông minh
Có lẽ tôi nên nói rõ điều này trong UI
Trả lời từng ý cụ thể
Tôi hoàn toàn hiểu nhu cầu kiểu có dumbbell/thanh xà nhưng không muốn dùng cable/machine, và sẽ cụ thể hóa phần UI này
(Bây giờ phải lặp lại 2 lần, là lỗi render)
Tôi muốn cải thiện nó theo những nguyên tắc tốt, nên nếu được tôi rất muốn bạn cùng góp ý định hướng
Tôi còn hứng thú hơn nếu đó là giải pháp có thể triển khai và dùng trực tiếp trên phần cứng tiêu dùng
Ví dụ, tôi có thanh xà nhưng không biết có thể tập cơ nào với nó
Hay là thay vào đó dùng kiểu bộ lọc “dễ cho người mới bắt đầu” thì sao
Người khác cũng đã phản hồi tương tự
Tôi sẽ chuyển các tùy chọn lọc thành không bắt buộc, và thêm các gợi ý như “thân thiện với người mới”, “bài tập phổ biến”, “calisthenics”
Cảm ơn bạn đã nói ra
Ở phần onboarding ban đầu, việc chọn cơ là bắt buộc, mà với người mới không biết routine nào nhắm vào cơ nào thì đây là một rào cản
Tôi biết đại khái “push”, “pull”, “leg”, nhưng tên các nhóm cơ cụ thể thì quá xa lạ
Rốt cuộc app này giống như chỉ phù hợp cho người sẵn sàng học giải phẫu
Cần nghĩ cách để người dùng có thể vào dễ hơn một chút
Ví dụ: nhóm cơ được gợi ý, preset
Phần onboarding hiện tại đang mặc định người dùng đã có quá nhiều kiến thức (nhiều hơn tôi tưởng)
Người mới đâu phải muốn biết “cơ delta sau” hay “cơ xô”, họ chỉ muốn khỏe hơn và trông đẹp hơn thôi
Trong bản cập nhật tiếp theo
Mục tiêu là tạo ra trải nghiệm thân thiện để người dùng có thể bắt đầu ngay mà không phải học giải phẫu từ đầu
Phản hồi của bạn thật sự giúp ích rất nhiều
Chúc bạn thuận lợi trên hành trình fitness