Tasteful — product voice
Purpose: End decision fatigue for your next meal.
Tagline (canonical): Decide what to eat.
In-app hero line: Decide what to eat. — AppCopy.productLine on boot (InitializingView) and onboarding. Marketing may add —without the endless loop.
Register: Calm kitchen friend. Not wellness app, not recipe SEO site, not AI demo.
Segall check: Home asks one question ("What should I eat?"). Meals batch select is Mail-style—not a second product inside the product. Pricing page is one honest price, not tier grid.
Research (not voice spec): intrinsicvalue-llc/tasteful → docs/product/EMOTIONAL_CORE.md
Personality
| We are | We are not |
|---|---|
| Calm, direct, slightly understated | Hypey, exclamatory, "journey" |
| Respectful of a tired person at 6 p.m. | Engagement-optimized |
| Honest about limits (sync, delete, Maps) | "Magical" or "powered by AI" |
| One library for food life | Feature-bucket software |
Reference copy (do emulate):
- Marketing hero:
apps/www→MainLanding.tsx - Pricing candor:
pricing-content.ts - Restraint:
UnderstatedLanding.tsx("Mostly a notebook for food.")
Do / Don't
| Do | Don't |
|---|---|
| "Decide what to eat" | "Intelligent food companion" |
| "From your library" | "Personalized recommendations" |
| "Meal suggestions" | "Recommendation engine" |
| "Add a meal" | "Start tracking your meals" |
| "Add a few meals first" | "Nothing to suggest yet" |
| "Why this meal?" | "Why This Meal Was Recommended" |
| "Meal saved." | "Meal saved successfully!" |
| "Couldn't sync meals. They're still on this phone." | "Sync failed. Error 503." |
| "Delete 12 meals? This can't be undone." | "Permanently delete selected items?" |
Domain vocabulary
Locked terms — see ENTITY_NAMES.md § Tasteful.
| Term | Use |
|---|---|
| Meal | Logged eating occasion |
| Recipe | Saved recipe (import or manual) |
| Restaurant | Place in your library |
| Household | Shared billing + planning group |
| Reader Mode | In-app calm recipe view |
| Suggestions | Meal ideas from library (not "AI picks") |
Trust moments (Tasteful-specific)
| Moment | Copy direction |
|---|---|
| Batch delete | Count + name preview; "This can't be undone." |
| Select Without Photos | Favorites excluded — say so in UI |
| Sync failure | Local safety first (TRUST_COPY.md) |
| Trial / $10/yr | Match pricing-content.ts — no maze |
| Photo import | On-device scan; user chooses each photo |
| MapKit discovery | "Not in your library" — not verified dish truth |
| Sign out | Only "Saving changes…" when offline queue non-empty |
| Transactional email | One subject, one link — docs/runbooks/TRANSACTIONAL_EMAIL_TEMPLATES.md |
Surfaces
Full inventory: tasteful-surfaces.md
Priority order for audits:
- Home + Mini Recommender +
MealRecommendationView - Meals (empty, batch select, delete)
- Auth + Account + Subscribe
- Onboarding + Photo import
- tasteful.to + app.tasteful.to
- RELEASE_NOTES (user voice)
iOS button capitalization
Title Case on primary actions per Apple HIG — see archived tasteful DESIGN_SYSTEM.md § buttons, enforced via patterns/PRIMARY_ACTION.md.
Sentence case for body, footers, and alert messages.