The 8.5-second case opening makes a tiny decision feel deliberate
Trưa Nay Ăn Gì answers one question: what should I eat for lunch? Instead of returning a plain random row, it sends food cards across a case-opening reel, plays tick and reveal sounds, and lands on a dish. The normal motion profile lasts 8,500 milliseconds and crosses 35 tiles. A reduced-motion profile still takes 4,500 milliseconds across 12 tiles, which keeps the result readable without copying the full animation.
The choice can be filtered by a spending target and vegetarian status. You may disable built-in dishes, add your own, switch between Vietnamese and English, mute audio, and reopen the case. The catalog covers Vietnamese staples alongside other lunch options, and a result links to Google Maps or GrabFood only after a user clicks. This is a playful decision aid, not a recommendation engine backed by restaurant availability or current menu prices.
The spending control targets an average, not a hard limit
Budget choices run from 30 to 180 thousand Vietnamese đồng. The selection code adjusts probabilities so the pool's expected price approaches the chosen target. That is mathematically different from excluding every dish above the number. Open issue 6 gives the concrete consequence: with a 30k setting, the reporter still received a 35k dish. An open pull request proposes a hard cap, but it was not merged in the code we reviewed.
The tests cover useful boundaries in the selector. They check empty and single-item pools, removed identifiers, target prices, feasible expected means, and selection from a two-item set. Those checks support the current average-target behavior. They do not turn the setting into a maximum. The interface calls it the usual lunch spend, which is more accurate than calling it a budget cap, but a cost-sensitive user could still read it that way.
What happened when we ran it
Our fresh Debian sandbox installed commit 2e10968 in 11 seconds with Node 22 and pnpm. The install added 61 packages and used 167 MB on disk. The checkout itself contained 75 files, about 2,021 source lines, and occupied 13.2 MB. No credentials or elevated privileges were present.
The production build succeeded in 6 seconds. The test step finished in 4 seconds with 7 node:test cases passed and 0 failed. Those cases exercise cookie behavior and motion profiles, while the command also checks personal-pool selection logic. We did not measure browser paint speed, network loading, sound playback, or the visual result on multiple devices, so the green suite should not be stretched into those claims.
Cookies make it private and keep it on one browser
There is no login, application backend, database client, or analytics tool in the community version. Preferences, custom foods, language, spin count, mute state, and recent choices live in cookies. The cookie helper rejects oversized values, treats malformed data as absent, and reports blocked writes instead of telling the user a choice was saved. Cookies may last up to 1 year according to the included privacy page.
That design keeps setup small, but it also fixes the product's boundary. Clearing cookies resets the data, and nothing syncs to another device. Issues 18 and 19 request weekly meal calendars and group spins; neither feature exists in the current source. A group that wants to share lists, assign meals, or plan shopping should use a meal planner with accounts rather than building synchronization around browser cookies.
GitHub Pages redirects to a different production product
The local app binds Vite to 127.0.0.1 on port 5173, with preview on port 4173. Its README explicitly says not to publish this build to the project's GitHub Pages branch. That branch contains a redirect to truanayangi.com, whose production frontend, API, and login live in private repositories. The public community edition has no access to those services and should not be described as the source of the hosted product.
For self-hosting, the compiled frontend is technically simple, but the repository provides no Dockerfile or deployment recipe. Its 0 CI workflow files are intentional according to AGENTS.md, which says not to add a CI pipeline for the MVP. More importantly, GitHub exposes no repository license. The attribution file says third-party sounds and game assets retain their owners' rights and that public visibility grants no blanket license. Review those rights before publishing a fork.
September activity is busy, but the project has no tagged release
GitHub redirected the original nagisanzenin/truanayangi path to truanayangi-com/truanayangi after a documented transfer. On October 1, the current repository showed 635 stars and 19 combined issues and pull requests. The last source push was September 10, 2026, while issue and pull-request discussion continued through September 20. There is no GitHub release record.
The open queue includes a desktop animation report, a stale geographic list, image-size work, group spinning, weekly planning, and a mute-state fix. That is healthy evidence of people trying the app, but it also describes an MVP still deciding its edges. For a personal lunch picker, our 11-second install and fully passing 7-test run make it easy to try. Keep it local until the license, open fixes, and deployment responsibility fit what you intend to do.

