Saved recipes: Magpie data flywheel hook — anonymized rating/tag contribution (Cloud opt-in) #28

Open
opened 2026-04-07 21:54:09 -07:00 by pyr0ball · 0 comments
Owner

Summary

Cloud opt-in extension of #24. When a user saves/updates a recipe rating or style tags, an anonymized signal is posted to the Magpie aggregation endpoint. This is the first upstream data contributor for Magpie (planned cross-product collection/sharing layer).

Depends on: #24. Blocks: Magpie recipe quality signal feature (no Magpie ticket yet).

Behavior

  • Only fires when CLOUD_MODE=true AND user setting magpie_opt_in = "true"
  • Runs as an async background task (non-blocking)
  • Payload contains no PII (personally identifiable information):
    {
      "product": "kiwi",
      "event": "recipe_saved",
      "recipe_external_id": "<food.com external_id>",
      "rating": 4,
      "style_tags": ["comforting", "hands-off"],
      "timestamp": "2026-04-07T..."
    }
    
  • Uses recipe.external_id (food.com ID), not the local integer primary key, so the signal is portable across installations
  • When Magpie endpoint is unreachable: log locally, do not block save, do not retry immediately

Settings

  • Settings key: magpie_opt_in — defaults to "false"
  • Add toggle in SettingsView.vue under a "Data & Privacy" section, with plain-language explanation of what is shared
  • Feature flag: magpie_data_sharing — only active when CLOUD_MODE=true

Magpie Endpoint

Not yet defined. Kiwi side should stub the HTTP call and log when Magpie is unreachable so this ships independently of Magpie having a live endpoint.

Spec

circuitforge-plans/kiwi/superpowers/specs/2026-04-07-saved-recipes-browser-design.md section 7

## Summary Cloud opt-in extension of #24. When a user saves/updates a recipe rating or style tags, an anonymized signal is posted to the Magpie aggregation endpoint. This is the first upstream data contributor for Magpie (planned cross-product collection/sharing layer). **Depends on:** #24. **Blocks:** Magpie recipe quality signal feature (no Magpie ticket yet). ## Behavior - Only fires when `CLOUD_MODE=true` AND user setting `magpie_opt_in = "true"` - Runs as an async background task (non-blocking) - Payload contains no PII (personally identifiable information): ```json { "product": "kiwi", "event": "recipe_saved", "recipe_external_id": "<food.com external_id>", "rating": 4, "style_tags": ["comforting", "hands-off"], "timestamp": "2026-04-07T..." } ``` - Uses `recipe.external_id` (food.com ID), not the local integer primary key, so the signal is portable across installations - When Magpie endpoint is unreachable: log locally, do not block save, do not retry immediately ## Settings - Settings key: `magpie_opt_in` — defaults to `"false"` - Add toggle in `SettingsView.vue` under a "Data & Privacy" section, with plain-language explanation of what is shared - Feature flag: `magpie_data_sharing` — only active when `CLOUD_MODE=true` ## Magpie Endpoint Not yet defined. Kiwi side should stub the HTTP call and log when Magpie is unreachable so this ships independently of Magpie having a live endpoint. ## Spec `circuitforge-plans/kiwi/superpowers/specs/2026-04-07-saved-recipes-browser-design.md` section 7
pyr0ball added the
enhancement
backlog
labels 2026-04-07 21:54:09 -07:00
pyr0ball added this to the Public Launch milestone 2026-04-07 22:09:35 -07:00
pyr0ball modified the milestone from Public Launch to Post-Launch 2026-04-16 07:55:00 -07:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/kiwi#28
No description provided.