Repository navigation
Savor: a full-stack food-delivery sample and Initializr template - #6045
Conversation
Ride becomes Delivery, Rider Customer, Driver Courier and Driving Onboarding; the order domain is built on top in the commits that follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…amples The MERCHANT role sits beside the courier and admin switches but is not one of them: it comes with a place on a restaurant's staff. Nav opens a restaurant home for it, and /api/merchant/** is the role's alone. scripts/sync-initializr-wayline.py becomes sync-initializr-template.py, which takes the sample's name; Wayline's resources are byte-for-byte what the old script made. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ens, couriers Orders and their deliveries are two coupled state machines under one id: the card is held at checkout, the kitchen accepts and cooks, a courier is sent for from the restaurant, and the hold is taken when the order arrives. The demo kitchen and fleet run a customer-only demo end to end on a development server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e tracking Grub's look in plain Java and CSS: a Deliver-to header, cuisines, restaurant cards, a restaurant's menu by section, dishes with extras, a single-kitchen cart, checkout priced by the server (promo, tip, payment) and a tracker that follows the courier on the map over four steps. Ride-era preferences and styles are gone; every Wl style is now Sv, with a dark twin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The kitchen gets a queue of incoming orders (beside the order on a wide screen, over it on a phone) with accept-with-prep-time, reject with a reason and mark ready, a live alert for a new order, a pause switch, a menu editor with sold-out toggles and dish photos, store details and sales. The courier mode is retold for food: to the restaurant, collect, deliver to the door. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…empty fetchAsMapped and fetchAsMappedList looked the type up with Mappers.get and, finding no mapper, answered null or an empty list. A record missing @mapped then showed as "nothing found" -- Savor's restaurant list was empty in the browser for exactly that reason. Mappers.require throws, naming @mapped, and both paths use it, so the mistake surfaces as the request's error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…chapters - Admin restaurants and promos, merchant-mode simulator test, receipts that show the hold before a delivery exists. - Initializr: the SAVOR template with its brand color, preview and fixtures; savor.yml CI; the copyright gate skips scripts/savor. - Developer guide: Savor-Users-Guide and Savor-Implementors-Guide, with the simulator's screenshots. - Look: painted per-cuisine covers in place of a pale tint when a restaurant or dish has no photo; lists relayout their whole screen so they are not clipped to the placeholder's height; the merchant header and queue rows fit a phone. - Translations of the food-delivery strings in es/fr/de/he; leftover ride and car wording replaced, unused bundle keys dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A four-dimensional array type translated into C naming class_array4__..., which the translator never emits, so the build failed in the C compiler on an undeclared identifier in generated code. The runtime has array classes for one to three dimensions; the translator now says so, naming the type. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion note - The demo restaurants' and dishes' photographs are image files in backend/photos, read into a binary photo column the first time the development server starts and stored under the restaurant that uses them. The photo column is BLOB/BYTEA/LONGBLOB; Base64 is only the JSON wire form. Photographs are rounded with their card. - The implementor's guide gains "A restaurant's own delivery service": one brand and a few branches, no restaurant applications, own couriers or a courier company, pickup, and an outline for table bookings. - The translations say they are unreviewed machine-generated samples. - The compiled server builds: no String.split, menus as three-dimensional arrays, and options as name/price pairs needing no parsing. - Trips' kitchen cache is tied to the running app, so compiled tests that run after an app restart no longer reuse restaurants of a database gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2776dbed87
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Cloudflare Preview
|
|
Compared 170 screenshots: 170 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 185 screenshots: 185 matched. Benchmark ResultsDetailed Performance Metrics
|
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 185 screenshots: 185 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: Intel64 Family 6 Model 207 Stepping 2, GenuineIntel (baseline 2 performance regressions:
1 improvement past the baseline, which fails until rebaselined:
Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 15% (time) / 15% (RAM) away from its baseline in
A change that moves performance ON PURPOSE records the new baseline in Result: performance regression |
|
Compared 206 screenshots: 206 matched. |
|
Compared 185 screenshots: 185 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 15% (time) / 15% (RAM) away from its baseline in
Result: no regression |
|
Compared 185 screenshots: 185 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: AMD EPYC 7763 64-Core Processor (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 15% (time) / 15% (RAM) away from its baseline in
Result: no regression |
|
Compared 185 screenshots: 185 matched. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 15% (time) / 15% (RAM) away from its baseline in
Result: no regression |
|
Compared 168 screenshots: 168 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
|
Compared 163 screenshots: 163 matched. |
…iew fixes The CSS compiler's incremental build reloads the theme it wrote last time to keep the rules that did not change. Resources only built a TrueType font when the platform says it can draw one, and the headless compiler cannot, so every unchanged rule's native font came back as its system fallback. EditableResources now keeps such fonts as written; regression test in CN1CSSCLIEndToEndTest. Also: map tiles for the e2e, courier status card, tracking steps and route, safe-area strips painted by the header and tab bar, ellipsis on truncated lines, checkout fields, merchant order layout, refreshed guide figures; RequestBuilder reports a missing @mapped through the error path; iOS-skin bold fonts in the JavaSE port; backend review fixes; README and translations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 12 screenshots: 12 matched. |
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fd42300498
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- A suspended restaurant with no staff left cannot be listed again. - Merchant sales count only orders whose payment was taken. - Favorites out of delivery range are left out, as the nearby list does. - Checkout cannot place an order until the quote for the current cart is back, and ignores answers to quotes a later change overtook. - savor-css.zip regenerated without a stray checksums file. - LanguageTool findings in the Savor chapters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e40a298478
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…sition, saved addresses Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 554447e7c3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…h on socket close, fee docs; perf rebaselines Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 66f2af83cf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…e address lookup with its home, three-letter search, template in browser IDE links; windows-x64 translator rebaseline Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 737188fac3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… an enabled merchant Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1e19750f89
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… limit, merchant mode after approval, tip from the server's prices, server currency on menus, honest deletion notice Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 80ce49b1b0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ix, no leaving a taken delivery, cart quantities capped; RequestBuilder requires the mapper whatever the body Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f5f9ae534f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…closing suspends the restaurant, history filtered before its limit, sign-in pinned to its server, honest privacy notice, MIT-0 pom metadata, short search clears Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00e5d36ce0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… be retried, a withdrawn courier approval is rechecked Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: eb3df18b4b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…l its delivery is known, menu items appended after the last, address writes locked against closure, push owner reconciled after a failure Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Savor is a food-delivery sample in the shape of Wayline: one Maven project with a shared contract, the app and a Codename One Backend server. It replaces the Grub template Wayline retired, and it is offered by the Initializr as a full-stack template.
What it covers
Framework changes found along the way
RequestBuilder: a@RestClientresponse type without@Mappednow fails with an error naming@Mapped, instead of answering null or an empty list.Docs: a user's guide and an implementor's guide chapter, including running Savor as a restaurant's own delivery service. The non-English translations are marked as unreviewed machine-generated samples.
Verified locally: backend tests (113) on the JVM and compiled, simulator end-to-end (12) and browser end-to-end runs, the template check, template sync parity, Vale. Android and iOS builds run in
savor.yml.🤖 Generated with Claude Code