Risolto
This Privacy Policy explains what information Risolto collects, how we use it, and your rights with respect to it. By using the Service, you agree to the practices described here. If you do not agree, please do not use the Service.
1. Who We Are
Risolto is operated by Risolto, LLC. References to "Risolto," "we," "us," or "our" mean Risolto, LLC. You can reach us at hello@risolto.app.
2. Information We Collect
We collect the following categories of information:
Account information (via Clerk)
- Email address and name — provided when you create an account directly, or received from Google when you sign up via Google OAuth.
- Authentication data — managed by Clerk, our authentication provider. We do not store your password; Clerk handles credential management. If you sign up via Google, Clerk also receives your Google profile photo as part of the OAuth flow; this is stored by Clerk but is not used by Risolto.
Preferences and meal data (stored in our database)
- Household preferences (required for generation) — household size, dinners per week, and dietary style. If not provided, the system applies defaults (household of 2, 4 dinners per week, omnivore diet), which may reduce the relevance of generated menus.
- Dietary and ingredient information (optional) — dietary notes, avoided ingredients, spice level, loved cuisines, cuisine adherence setting, and any custom notes. This may include allergen-relevant information you choose to provide. Omitting these fields will result in more generic menus; providing them improves personalization.
Important — allergen and dietary data: Allergen and dietary restriction information you provide is used solely as a recipe preference signal to guide AI-generated menu suggestions. It is not treated as, and does not constitute, medical information. Risolto does not verify, validate, or guarantee that generated menus or shopping lists are free from any allergen or ingredient you have listed. You must independently verify all ingredients before preparing or consuming any meal. If you have a serious food allergy or medical dietary requirement, do not rely on Risolto as a safety control.
- Menu history (optional) — approved menus and individual meal ratings (thumbs up/down). Ratings are entirely optional but feed the preference-learning system over time; the more you rate, the better future menus reflect your tastes.
- Pantry contents (optional) — ingredient names you add to your persistent pantry. When provided, the system avoids repeating pantry staples in shopping lists and can factor them into generation. Omitting has no effect on basic functionality.
- Saved recipes / Cookbook (optional) — recipes you save from approved menus. Used as style context for future generation when three or more recipes are saved. Entirely optional with no effect on core functionality.
- Menu notes (optional) — freeform bullet notes you add to steer generation. Each note is injected into every generation prompt. Omitting has no effect on basic functionality.
Usage data
- Rate limit counters — we track the number of menus generated and ingredient swaps made per user per rolling time window, via Upstash Redis. These counters are keyed to your user ID, not your IP address.
- IP address — used for rate limiting unauthenticated trial usage only. Not stored persistently or linked to authenticated accounts.
Grocery integration data (users who connect a grocery account)
- OAuth authorization tokens — when you connect a grocery account (such as a Kroger-family store including Harris Teeter, Fred Meyer, and King Soopers), we store your OAuth access and refresh tokens in our database. These tokens are encrypted at rest using AES-256-GCM before storage and are never stored in plaintext.
- Store preference — your chosen grocery store location ID and store name are stored alongside your tokens to route shopping list items to the correct store.
- Shopping list items — when you use the grocery cart feature, the ingredient strings from your generated shopping list are transmitted to the grocery provider's API for product matching. These items are not retained by Risolto after the request completes.
- Grocery substitute suggestions — if the grocery provider cannot match a shopping list item, that ingredient name is also transmitted to Anthropic (Claude API) to suggest common supermarket alternatives. Only the unmatched ingredient name is sent; no other personal data is included in this request.
3. How We Use Your Information
We use the information we collect to:
- Generate personalized weekly dinner menus and ingredient swaps via AI.
- Restore your most recent approved menu when you return to the app.
- Respond to support requests and communicate service updates.
- Enforce rate limits to ensure fair use of the Service.
We do not use your data for advertising. We do not sell your data to third parties.
4. AI Generation and Anthropic
Risolto generates menus and recipes using the Anthropic Claude API. When you request a menu or swap, your preference profile — including dietary style, avoided ingredients, household size, pantry contents, and meal history context — is transmitted to Anthropic as part of the generation request.
By default, Anthropic's API data retention policy may allow inputs and outputs to be used for safety review. We recommend reviewing Anthropic's privacy policy at anthropic.com/privacy if this is a concern. We do not share your data with Anthropic for any purpose other than generating your menu.
Dietary preference and allergen information you provide is transmitted to Anthropic solely to generate recipe suggestions. This data is used as a creative preference input, not as a medical or safety instruction. Risolto cannot and does not guarantee that Anthropic's AI model will exclude any specific ingredient from every generated output. This information is not sent to any other third party.
Anthropic is also used during grocery cart matching: when an ingredient cannot be matched to a product at your connected store, that ingredient name is sent to Anthropic to suggest common supermarket alternatives. No preference profile or other personal data is included in these requests.
Pantry shelf photos — if you use the pantry scan feature, your photo is converted to a base64 string in your browser and transmitted to Anthropic for ingredient identification. The image is processed ephemerally and is never written to Risolto's database, logged, or retained on our servers after the request completes.
Dish inspiration photos — if you upload a photo to generate a flavour-profile note (available on Pro and Founding Member plans), the same ephemeral handling applies: the image is sent directly to Anthropic for processing and is never stored by Risolto.
5. Third-Party Services
We work with the following third-party service providers:
Clerk (authentication)
- Manages account creation, login, and session tokens. Clerk stores your email address and authentication credentials. See clerk.com/privacy.
Supabase (database)
- Stores your preferences, meal history, pantry, and account data in a PostgreSQL database with row-level security. Data is isolated per user. See supabase.com/privacy.
Upstash (rate limiting)
- Stores per-user counters to enforce monthly menu and daily swap limits. See upstash.com/privacy.
Vercel (hosting)
- Hosts the application. Vercel may collect standard web server logs including IP addresses and request metadata. We do not log request bodies. See vercel.com/legal/privacy-policy.
Kroger (grocery cart integration)
- Users who connect a Kroger-family store account (Harris Teeter, Fred Meyer, King Soopers, and others) will have their shopping list items submitted to Kroger's API for product matching and cart population. Risolto stores encrypted OAuth tokens and your store location preference to facilitate this. Kroger is an independent company; your cart and checkout remain entirely within Kroger's platform. See kroger.com/i/privacy-policy.
Additional third-party services, including payment processing, are planned and will be described here prior to activation.
6. Data We Do Not Collect
We do not collect or store:
- Payment card numbers, bank account details, or billing addresses.
- Precise geolocation data.
- Information from social media profiles beyond what Google provides at sign-up.
- Any data from children under 18. If we become aware that a user is under 18, we will terminate the account and delete associated data.
7. Data Retention
We retain your account data for as long as your account is active. Meal history and approved menus are retained indefinitely to support preference learning, but you may request deletion at any time (see Section 9).
Menus not approved within 7 days expire from active display but remain in the database for history purposes.
Rate limit counters in Upstash are automatically purged on a rolling 30-day window.
8. Data Security
We implement the following security measures:
- Row-level security (RLS) on all database tables, enforced at the database level, ensuring each user can only access their own data.
- All API routes require authentication via Clerk before any data is read or written, with the exception of the rate-limited unauthenticated trial endpoint.
- Secret keys and credentials are stored as server-side environment variables and are never exposed to the client.
- All data in transit is encrypted via TLS.
- OAuth tokens for connected grocery accounts (once shopping capability is enabled) are encrypted at rest using AES-256-GCM before storage. Tokens are decrypted only within server-side API routes and are never exposed to the client.
No security measure is perfect. In the event of a data breach affecting your personal information, we will notify you in accordance with applicable state law, which for most US states requires notification within 30–72 hours of discovery.
9. Your Rights and Choices
You may contact us at hello@risolto.app to:
- Request a copy of the personal data we hold about you.
- Request correction of inaccurate data.
- Request deletion of your account and associated data. We will process deletion requests within a reasonable timeframe. Note that some data may be retained by third-party processors (Clerk, Upstash) subject to their own retention policies.
- Opt out of any future email communications (other than transactional notices).
Residents of certain US states (including California, Virginia, Colorado, and others) may have additional rights under applicable privacy law, including the right to know, the right to delete, and the right to opt out of the sale of personal information. We do not sell personal information. To exercise any applicable rights, contact us at hello@risolto.app.
10. Cookies and Local Storage
Risolto uses browser localStorage to store functional app state on your device. This data is never transmitted to our servers. The following values are stored:
- risolto_preview_meals — a summary of your most recently approved menu, used to display a preview on the landing page. Contains meal names, cuisines, and cook times only.
- risolto_loading_phrases — AI-generated loading messages personalized to your cuisine preferences, cached to avoid redundant API calls.
- risolto_dismissed_week_ratings — a list of menu IDs for which you have dismissed the weekly rating prompt.
- risolto_guide_seen — a flag indicating whether you have completed the introductory guide.
- risolto_checked_<menuId> — your checked-off (on hand) items in the shopping list for a given menu. Cleared automatically when a new menu is generated.
None of these values contain sensitive personal information. They persist across sessions and can be cleared at any time by clearing your browser's site data for risolto.app.
Clerk uses cookies to manage authenticated sessions. These are strictly necessary for the Service to function and cannot be opted out of while using the Service.
Once shopping capability is enabled, a short-lived cookie named kroger_verifier is set during the Kroger OAuth authorization flow. It contains a PKCE code verifier, is marked HttpOnly and Secure, expires after 5 minutes, and is deleted immediately after authorization completes. It is not used for tracking.
We do not use advertising cookies or third-party tracking cookies.
11. Children's Privacy
The Service is not directed to individuals under the age of 18. We do not knowingly collect personal information from minors. If you believe we have inadvertently collected information from a minor, please contact us at hello@risolto.app and we will promptly delete it.
12. Changes to This Policy
We may update this Privacy Policy from time to time. When we do, we will revise the effective date at the top of this document. For material changes, we will notify you by email or by a notice in the Service. Your continued use of the Service after the effective date constitutes acceptance of the updated Policy.
13. Contact
If you have questions or concerns about this Privacy Policy or our data practices, please contact us at hello@risolto.app.