kasy-cli 1.37.1 → 1.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/lib/scaffold/CHANGELOG.json +23 -0
  2. package/lib/scaffold/backends/api/patch/README.md +15 -0
  3. package/lib/scaffold/backends/api/patch/lib/core/data/api/user_api.dart +18 -0
  4. package/lib/scaffold/backends/api/patch/lib/features/notifications/api/device_api.dart +11 -6
  5. package/lib/scaffold/backends/api/patch/lib/features/settings/ui/components/admin/admin_users_api.dart +9 -1
  6. package/lib/scaffold/backends/api/pubspec.yaml.tpl +1 -0
  7. package/lib/scaffold/backends/patch-base-hashes.json +6 -6
  8. package/lib/scaffold/backends/supabase/edge-functions/admin-list-users/index.ts +3 -1
  9. package/lib/scaffold/backends/supabase/edge-functions/send-push-notification/index.ts +3 -0
  10. package/lib/scaffold/backends/supabase/migrations/20240101000012_welcome_decouple_from_push.sql +62 -0
  11. package/lib/scaffold/backends/supabase/patch/lib/core/data/api/user_api.dart +8 -0
  12. package/lib/scaffold/backends/supabase/patch/lib/features/notifications/api/device_api.dart +11 -6
  13. package/lib/scaffold/backends/supabase/patch/lib/features/settings/ui/components/admin/admin_users_api.dart +7 -0
  14. package/lib/scaffold/backends/supabase/pubspec.yaml.tpl +1 -0
  15. package/lib/scaffold/shared/generator-utils.js +12 -6
  16. package/package.json +1 -1
  17. package/templates/firebase/.firebase/hosting.YnVpbGQvd2Vi.cache +23 -23
  18. package/templates/firebase/AGENTS.md +7 -1
  19. package/templates/firebase/DESIGN_SYSTEM.md +35 -8
  20. package/templates/firebase/assets/icons/apple_black.svg +3 -0
  21. package/templates/firebase/assets/icons/apple_white.svg +4 -0
  22. package/templates/firebase/assets/icons/facebook.svg +49 -0
  23. package/templates/firebase/assets/icons/google.svg +1 -0
  24. package/templates/firebase/functions/src/admin/functions.ts +2 -0
  25. package/templates/firebase/functions/src/authentication/functions.ts +13 -7
  26. package/templates/firebase/functions/src/notifications/triggers.ts +6 -2
  27. package/templates/firebase/lib/components/components.dart +1 -1
  28. package/templates/firebase/lib/components/kasy_app_bar.dart +361 -20
  29. package/templates/firebase/lib/components/kasy_bottom_sheet.dart +283 -66
  30. package/templates/firebase/lib/components/kasy_card.dart +4 -0
  31. package/templates/firebase/lib/components/kasy_date_picker.dart +61 -46
  32. package/templates/firebase/lib/components/kasy_drop_down.dart +584 -0
  33. package/templates/firebase/lib/components/kasy_sidebar.dart +412 -31
  34. package/templates/firebase/lib/components/kasy_tabs.dart +31 -10
  35. package/templates/firebase/lib/components/kasy_text_field.dart +29 -7
  36. package/templates/firebase/lib/core/bottom_menu/bottom_menu.dart +29 -231
  37. package/templates/firebase/lib/core/bottom_menu/sidebar_focus.dart +224 -0
  38. package/templates/firebase/lib/core/bottom_menu/web_content_wrapper.dart +19 -9
  39. package/templates/firebase/lib/core/chrome/app_bar_config.dart +214 -0
  40. package/templates/firebase/lib/core/chrome/app_bar_scope.dart +102 -0
  41. package/templates/firebase/lib/core/data/api/user_api.dart +15 -0
  42. package/templates/firebase/lib/core/data/repositories/user_repository.dart +5 -0
  43. package/templates/firebase/lib/core/dev_inspector/dev_inspector.dart +525 -65
  44. package/templates/firebase/lib/core/dev_inspector/dev_inspector_info.dart +47 -0
  45. package/templates/firebase/lib/core/dev_inspector/dev_inspector_service.dart +55 -15
  46. package/templates/firebase/lib/core/icons/kasy_icons.dart +16 -1
  47. package/templates/firebase/lib/core/rating/widgets/review_popup.dart +18 -35
  48. package/templates/firebase/lib/core/shared_preferences/shared_preferences.dart +11 -0
  49. package/templates/firebase/lib/core/states/logout_action.dart +11 -1
  50. package/templates/firebase/lib/core/states/user_state_notifier.dart +69 -1
  51. package/templates/firebase/lib/core/theme/texts.dart +21 -6
  52. package/templates/firebase/lib/core/theme/type_scale.dart +34 -15
  53. package/templates/firebase/lib/core/theme/universal_theme.dart +9 -0
  54. package/templates/firebase/lib/core/web_device_preview/png_clipboard.dart +14 -0
  55. package/templates/firebase/lib/core/web_device_preview/png_clipboard_io.dart +9 -0
  56. package/templates/firebase/lib/core/web_device_preview/png_clipboard_web.dart +36 -0
  57. package/templates/firebase/lib/core/web_device_preview/png_export_result.dart +2 -0
  58. package/templates/firebase/lib/core/web_device_preview/web_device_preview.dart +547 -483
  59. package/templates/firebase/lib/core/web_viewport_scale.dart +64 -35
  60. package/templates/firebase/lib/core/widgets/kasy_pressable_depth.dart +14 -3
  61. package/templates/firebase/lib/core/widgets/responsive_layout.dart +8 -0
  62. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_chat_composer.dart +1 -1
  63. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_chat_conversation_view.dart +52 -35
  64. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_conversation_list.dart +1 -1
  65. package/templates/firebase/lib/features/ai_chat/ui/widgets/ai_conversation_tile.dart +18 -8
  66. package/templates/firebase/lib/features/authentication/ui/signin_page.dart +11 -61
  67. package/templates/firebase/lib/features/authentication/ui/signup_page.dart +11 -61
  68. package/templates/firebase/lib/features/authentication/ui/widgets/auth_card_scaffold.dart +7 -5
  69. package/templates/firebase/lib/features/authentication/ui/widgets/social_auth_tile.dart +83 -0
  70. package/templates/firebase/lib/features/feedbacks/ui/widgets/feature_card.dart +4 -4
  71. package/templates/firebase/lib/features/home/home_components_page.dart +264 -126
  72. package/templates/firebase/lib/features/home/home_components_preview_registry.dart +231 -57
  73. package/templates/firebase/lib/features/home/home_feed.dart +2 -2
  74. package/templates/firebase/lib/features/home/home_image_grid.dart +3 -3
  75. package/templates/firebase/lib/features/local_reminders/providers/reminder_notifier.dart +8 -1
  76. package/templates/firebase/lib/features/local_reminders/ui/reminder_page.dart +118 -57
  77. package/templates/firebase/lib/features/notifications/api/device_api.dart +11 -3
  78. package/templates/firebase/lib/features/notifications/ui/notifications_page.dart +19 -4
  79. package/templates/firebase/lib/features/notifications/ui/widgets/empty_notifications.dart +7 -56
  80. package/templates/firebase/lib/features/notifications/ui/widgets/notification_tile.dart +5 -5
  81. package/templates/firebase/lib/features/notifications/ui/widgets/push_permission_banner.dart +163 -0
  82. package/templates/firebase/lib/features/notifications/ui/widgets/web_notifications_bell.dart +262 -0
  83. package/templates/firebase/lib/features/onboarding/providers/onboarding_model.dart +9 -0
  84. package/templates/firebase/lib/features/onboarding/providers/onboarding_provider.dart +28 -0
  85. package/templates/firebase/lib/features/onboarding/ui/onboarding_page.dart +51 -12
  86. package/templates/firebase/lib/features/onboarding/ui/widgets/selectable_row_tile.dart +90 -32
  87. package/templates/firebase/lib/features/settings/settings_page.dart +99 -65
  88. package/templates/firebase/lib/features/settings/ui/components/admin/admin_page.dart +1379 -422
  89. package/templates/firebase/lib/features/settings/ui/components/admin/admin_routes.dart +14 -4
  90. package/templates/firebase/lib/features/settings/ui/components/admin/admin_users_api.dart +7 -0
  91. package/templates/firebase/lib/features/settings/ui/components/admin/admin_users_tab.dart +445 -233
  92. package/templates/firebase/lib/features/settings/ui/components/admin/send_push_notification_page.dart +404 -149
  93. package/templates/firebase/lib/features/settings/ui/components/avatar_component.dart +24 -31
  94. package/templates/firebase/lib/features/settings/ui/components/delete_user_component.dart +9 -1
  95. package/templates/firebase/lib/features/settings/ui/components/language_switcher.dart +77 -95
  96. package/templates/firebase/lib/features/settings/ui/widgets/settings_bottom_sheet_option_tile.dart +21 -18
  97. package/templates/firebase/lib/features/settings/ui/widgets/settings_tile.dart +25 -10
  98. package/templates/firebase/lib/i18n/en.i18n.json +749 -698
  99. package/templates/firebase/lib/i18n/es.i18n.json +749 -698
  100. package/templates/firebase/lib/i18n/pt.i18n.json +749 -698
  101. package/templates/firebase/lib/main.dart +20 -7
  102. package/templates/firebase/lib/router.dart +70 -46
  103. package/templates/firebase/pubspec.yaml +2 -1
  104. package/templates/firebase/test/admin_shell_chrome_test.dart +110 -0
  105. package/templates/firebase/test/components/kasy_text_field_height_test.dart +77 -0
  106. package/templates/firebase/test/core/web_viewport_scale_test.dart +23 -16
  107. package/templates/firebase/test/features/authentication/data/api/user_api_fake.dart +3 -0
  108. package/templates/firebase/tool/design_check.dart +9 -0
  109. package/templates/firebase/assets/icons/apple.png +0 -0
  110. package/templates/firebase/assets/icons/facebook.png +0 -0
  111. package/templates/firebase/assets/icons/google.png +0 -0
  112. package/templates/firebase/assets/icons/google_play_games.png +0 -0
  113. package/templates/firebase/lib/components/kasy_web_header.dart +0 -210
  114. package/templates/firebase/lib/features/authentication/ui/components/apple_signin.dart +0 -19
  115. package/templates/firebase/lib/features/authentication/ui/components/google_signin.dart +0 -32
  116. package/templates/firebase/lib/features/authentication/ui/widgets/round_signin.dart +0 -73
  117. package/templates/firebase/lib/features/feedbacks/ui/widgets/add_feature_button.dart +0 -66
  118. package/templates/firebase/lib/features/notifications/ui/components/notification_settings_sheet.dart +0 -169
  119. package/templates/firebase/lib/features/notifications/ui/components/push_notification_switcher.dart +0 -106
  120. package/templates/firebase/lib/features/settings/ui/components/admin/admin_paywalls.dart +0 -53
@@ -1,728 +1,779 @@
1
1
  {
2
- "common": {
3
- "close": "Close",
4
- "copied": "Copied",
5
- "saved": "Saved",
6
- "error": "Error",
7
- "unavailable": "Unavailable",
8
- "native_only_title": "Native app only"
2
+ "common": {
3
+ "close": "Close",
4
+ "copied": "Copied",
5
+ "saved": "Saved",
6
+ "error": "Error",
7
+ "unavailable": "Unavailable",
8
+ "native_only_title": "Native app only"
9
+ },
10
+ "admin_console": {
11
+ "tabs": {
12
+ "overview": "Overview",
13
+ "users": "Users",
14
+ "requests": "Requests",
15
+ "tools": "Tools",
16
+ "debug": "Debug"
9
17
  },
10
- "admin_console": {
11
- "tabs": {
12
- "overview": "Overview",
13
- "users": "Users",
14
- "requests": "Requests",
15
- "kit": "Kit",
16
- "tools": "Tools"
17
- },
18
- "overview": {
19
- "section": "Project",
20
- "backend": "Backend",
21
- "account": "Account",
22
- "guest": "Guest",
23
- "user_id": "User ID",
24
- "build": "Build",
25
- "session_title": "Current session",
26
- "requests_metric": "Feature requests",
27
- "users_hint": "Open the Users tab to manage every account.",
28
- "debug_note": "Debug console — visible only in development builds."
29
- },
30
- "users": {
31
- "title": "Users",
32
- "search_hint": "Search by name or e-mail",
33
- "col_user": "User",
34
- "col_status": "Status",
35
- "col_plan": "Plan",
36
- "col_joined": "Joined",
37
- "status_active": "Active",
38
- "status_inactive": "Inactive",
39
- "plan_subscriber": "Subscriber",
40
- "plan_free": "Free",
41
- "empty": "No users found",
42
- "error": "Couldn't load users. Make sure you are an admin.",
43
- "page": "Page $page of $total",
44
- "prev": "Previous",
45
- "next": "Next",
46
- "anonymous": "Anonymous",
47
- "filter_all": "All users",
48
- "filter_subscribers": "Subscribers",
49
- "loading": "Loading users…",
50
- "results": "Showing $from to $to of $total",
51
- "truncated": "Showing the $count most recent. Search covers the loaded set.",
52
- "empty_search": "No users match your search",
53
- "empty_search_hint": "Try a different name or e-mail.",
54
- "refresh": "Refresh",
55
- "retry": "Try again"
56
- },
57
- "requests": {
58
- "title": "Feature requests",
59
- "empty": "No feature requests yet",
60
- "votes": "$count votes",
61
- "visible": "Visible",
62
- "hidden": "Hidden",
63
- "edit": "Edit translations",
64
- "error": "Couldn't load feature requests",
65
- "saved": "Feature request updated",
66
- "editor_title": "Edit feature request",
67
- "field_title": "Title",
68
- "field_description": "Description",
69
- "lang_en": "English",
70
- "lang_pt": "Portuguese",
71
- "lang_es": "Spanish",
72
- "visibility": "Visible to users",
73
- "save": "Save",
74
- "cancel": "Cancel"
75
- },
76
- "groups": {
77
- "features": "Features",
78
- "showcase": "Showcase",
79
- "preview": "Preview",
80
- "debug_actions": "Debug actions",
81
- "identity": "Identity"
82
- },
83
- "settings_entry": {
84
- "title": "Admin",
85
- "caption": "Only visible to administrators and in development mode."
86
- },
87
- "requires_admin": "You need to be an admin to view this."
18
+ "back_to_app": "Back to app",
19
+ "overview": {
20
+ "section": "Project",
21
+ "summary": "Summary",
22
+ "backend": "Backend",
23
+ "account": "Account",
24
+ "guest": "Guest",
25
+ "user_id": "User ID",
26
+ "build": "Build",
27
+ "session_title": "Current session",
28
+ "requests_metric": "Feature requests",
29
+ "total_users": "Total users",
30
+ "subscribers": "Subscribers",
31
+ "new_7d": "New (7 days)",
32
+ "signups_title": "New sign-ups",
33
+ "signups_subtitle": "Last 14 days",
34
+ "signups_total": "$count in 14 days",
35
+ "signups_empty": "No sign-ups in this period.",
36
+ "plan_split_title": "Plan breakdown",
37
+ "free": "Free",
38
+ "subscriber": "Subscriber",
39
+ "conversion": "$percent subscribers",
40
+ "loaded_note": "Based on the $count most recent users.",
41
+ "users_hint": "Open the Users tab to manage every account.",
42
+ "debug_note": "Debug console — visible only in development builds."
88
43
  },
89
- "home": {
90
- "title": "Kasy example",
91
- "welcome": "Welcome to the Kasy demo",
92
- "cards": {
93
- "paywall_title": "Paywall",
94
- "paywall_description": "Show the paywall page",
95
- "notification_title": "Local notification test",
96
- "notification_description": "Fires an on-device alert only. It won't appear in the Notifications tab (push).",
97
- "feedback_title": "Feedback",
98
- "feedback_description": "Feature request or vote page",
99
- "signup_title": "Signup",
100
- "signup_description": "Anonymous user can signup using real email or other social login",
101
- "assistant_title": "AI Assistant",
102
- "assistant_description": "Chat with the AI assistant"
103
- },
104
- "features_page": {
105
- "title": "Kit features",
106
- "assistant_title": "Chat with AI",
107
- "assistant_description": "Ready-made AI chat for questions, ideas, and in-app help",
108
- "feedback_title": "Vote & suggest",
109
- "feedback_description": "Join the roadmap—vote on ideas or submit your own",
110
- "notification_title": "Test notification",
111
- "notification_description": "Fires a local alert on this device only (not push)",
112
- "notification_demo_title": "Test alert",
113
- "notification_demo_body": "Local notification from the kit demo",
114
- "send_push_title": "Send push notification",
115
- "send_push_description": "Send a push to specific users or everyone",
116
- "paywall_title": "Plans & subscription",
117
- "paywall_description": "Paywall, trial, and RevenueCat subscription flows"
118
- },
119
- "dashboard": {
120
- "brand": "kasy",
121
- "components_title": "Components",
122
- "components_subtitle": "Explore design tokens and UI building blocks",
123
- "features_title": "Features",
124
- "features_subtitle": "AI, feedback, alerts, and subscription",
125
- "count_total": "$count total"
126
- },
127
- "components_preview": {
128
- "nav_title": "Components",
129
- "pro_badge": "PRO"
130
- }
44
+ "users": {
45
+ "title": "Users",
46
+ "search_hint": "Search by name or e-mail",
47
+ "col_user": "User",
48
+ "col_status": "Status",
49
+ "col_plan": "Plan",
50
+ "col_joined": "Joined",
51
+ "status_active": "Active",
52
+ "status_inactive": "Inactive",
53
+ "plan_subscriber": "Subscriber",
54
+ "plan_free": "Free",
55
+ "empty": "No users found",
56
+ "error": "Couldn't load users. Make sure you are an admin.",
57
+ "page": "Page $page of $total",
58
+ "prev": "Previous",
59
+ "next": "Next",
60
+ "anonymous": "Anonymous",
61
+ "filter_all": "All users",
62
+ "filter_subscribers": "Subscribers",
63
+ "loading": "Loading users…",
64
+ "results": "Showing $from to $to of $total",
65
+ "truncated": "Showing the $count most recent. Search covers the loaded set.",
66
+ "empty_search": "No users match your search",
67
+ "empty_search_hint": "Try a different name or e-mail.",
68
+ "refresh": "Refresh",
69
+ "retry": "Try again"
131
70
  },
132
- "auth": {
133
- "signin": {
134
- "title": "Welcome back",
135
- "subtitle": "Sign in to continue your experience",
136
- "email_hint": "bruce@wayne.com",
137
- "email_label": "Email",
138
- "password_hint": "Password",
139
- "password_label": "Password",
140
- "forgot_password": "Forgot your password?",
141
- "submit": "Continue with email",
142
- "create_account": "Create my account",
143
- "no_account": "Don't have an account?",
144
- "signup_link": "Sign up",
145
- "continue_without": "Continue without account",
146
- "or_sign_in_with": "or",
147
- "google": "Gmail",
148
- "apple": "Apple",
149
- "facebook": "Facebook",
150
- "error_title": "Error",
151
- "error_text": "Wrong email, password or this email is not registered",
152
- "email_invalid": "Email not valid",
153
- "password_required": "You must provide a password",
154
- "password_too_short": "Your password must be at least 5 characters long",
155
- "social_error": "Couldn't sign in with $provider",
156
- "email_already_registered": "This email already has an account with a different sign-in method. Use the method you signed up with."
157
- },
158
- "signup": {
159
- "title": "Signup now",
160
- "subtitle": "Create your account to get started",
161
- "submit": "Create my account",
162
- "have_account": "Already have an account?",
163
- "signin_link": "Sign in",
164
- "already_have_account": "I already have an account",
165
- "error_title": "Error",
166
- "error_text": "This email already exists or is invalid"
167
- },
168
- "recover": {
169
- "title": "Recover password",
170
- "subtitle": "Enter your email and we'll send you a link to set a new password.",
171
- "email_label": "Email",
172
- "submit": "Recover password",
173
- "remember": "Remembered your password?",
174
- "signin_link": "Sign in",
175
- "error_title": "Error",
176
- "error_text": "Fill a valid email"
177
- }
71
+ "requests": {
72
+ "title": "Feature requests",
73
+ "empty": "No feature requests yet",
74
+ "votes": "$count votes",
75
+ "visible": "Visible",
76
+ "hidden": "Hidden",
77
+ "edit": "Edit translations",
78
+ "error": "Couldn't load feature requests",
79
+ "saved": "Feature request updated",
80
+ "editor_title": "Edit feature request",
81
+ "field_title": "Title",
82
+ "field_description": "Description",
83
+ "lang_en": "English",
84
+ "lang_pt": "Portuguese",
85
+ "lang_es": "Spanish",
86
+ "visibility": "Visible to users",
87
+ "save": "Save",
88
+ "cancel": "Cancel"
178
89
  },
179
- "rate_popup": {
180
- "title": "Would you have 15s to rate us?",
181
- "description": "It's fast and very helpful! Thanks a lot!",
182
- "cancel_button": "Maybe later",
183
- "rate_button": "Yes, with pleasure!"
90
+ "groups": {
91
+ "actions": "Actions",
92
+ "features": "Features",
93
+ "preview": "Preview",
94
+ "debug_actions": "Debug actions",
95
+ "identity": "Identity",
96
+ "notification_test": "Notification test"
184
97
  },
185
- "premium": {
186
- "title_1": "Unlock full access",
187
- "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
188
- "feature_1": "Feature 1 lorem ipsum ",
189
- "feature_2": "Feature 2 mop issum ",
190
- "feature_3": "Feature 3 lorem ",
191
- "duration_weekly": "Week",
192
- "duration_annual": "Year",
193
- "duration_monthly": "Month",
194
- "duration_monthly_description": "Cancel anytime",
195
- "duration_lifetime": "Lifetime",
196
- "duration_lifetime_description": "One time payment",
197
- "restore_action": "Restore",
198
- "coupon_title": "Have a coupon?",
199
- "payment_cancel_reassurance": "Easy 1-click cancel, always",
200
- "payment_cancel_reassurance_free_trial": "No payment now, cancel anytime",
201
- "payment_action": "Start free trial",
202
- "payment_action_trial": "7-day free trial, then $money",
203
- "try_free_btn_action": "Try free for $days days",
204
- "duration_recuring_label_annual": "Annual",
205
- "duration_recuring_label_monthly": "Monthly",
206
- "duration_recuring_label_weekly": "Weekly",
207
- "action_button": "Continue",
208
- "terms": "Terms",
209
- "privacy": "Privacy",
210
- "error_loading": "Error while loading the offers",
211
- "no_products_title": "Subscription options are not available yet",
212
- "no_products_description": "Please try again in a moment. If this keeps happening, the store products may still be finishing setup.",
213
- "restore_success_title": "Subscription restored",
214
- "restore_success_text": "Thank you for your trust",
215
- "purchase_success_title": "Subscription successful",
216
- "purchase_success_text": "Thank you for your trust",
217
- "error_title": "Error",
218
- "error_text": "An error occurred. Please try again",
219
- "web_checkout_timeout_title": "Payment not confirmed",
220
- "web_checkout_timeout_text": "We did not receive payment confirmation. If you already paid, tap Restore.",
221
- "restore_none_title": "No subscription found",
222
- "restore_none_text": "We could not find an active subscription to restore.",
223
- "comparison": {
224
- "title": "Premium plan comparison",
225
- "features_label": "Features",
226
- "free_version": "Free",
227
- "premium_version": "Premium",
228
- "no_ads": "No ads",
229
- "premium_themes": "Premium themes",
230
- "advanced_customization": "Advanced customization",
231
- "priority_support": "Priority support",
232
- "home_widget": "Home widgets",
233
- "talk_with_assistant": "AI Assistant"
234
- }
98
+ "paywalls": {
99
+ "subtitle": "Tap a paywall to preview it. Copy its code to tell the assistant which one to use.",
100
+ "copy_code": "Copy code",
101
+ "code_copied": "Code copied to clipboard",
102
+ "with_switch_title": "Free trial toggle",
103
+ "with_switch_desc": "Plans with a switch to turn the free-trial offer on or off.",
104
+ "basic_title": "Plan list",
105
+ "basic_desc": "Vertical list of plans for the user to choose from.",
106
+ "basic_row_title": "Plans in a row",
107
+ "basic_row_desc": "Plans shown side by side for quick comparison.",
108
+ "minimal_title": "Minimal",
109
+ "minimal_desc": "Benefits and a single button. Best for one-plan apps."
235
110
  },
236
- "activePremium": {
237
- "title": "You are a premium user",
238
- "description": "Enjoy all the features",
239
- "unsubscribe_button": "Unsubscribe",
240
- "early_bird_description": "You used a coupon that provided you access to the premium features for free without any subscription. Enjoy!",
241
- "unsubscribe_feedback_title": "Help us improve",
242
- "unsubscribe_feedback_description": "We're sorry to see you go. Could you briefly tell us why you're unsubscribing?",
243
- "unsubscribe_feedback_hint": "Tell us your reason...",
244
- "unsubscribe_feedback_min_chars": "Minimum 6 characters required",
245
- "unsubscribe_confirm_button": "Continue",
246
- "lifetime_user_description": "You are a lifetime user",
247
- "managed_elsewhere_title": "Subscription on another platform",
248
- "managed_elsewhere_description": "This subscription was made on another platform and can't be managed or cancelled here. Sign in to your account on the platform where you purchased it.",
249
- "restore_button": "Restore purchases",
250
- "cancel_button": "Close",
251
- "billing_title": "Billing",
252
- "plan_label": "Account plan",
253
- "plan_fallback": "Premium",
254
- "manage_subscription": "Manage subscription",
255
- "restore_purchases": "Restore purchases",
256
- "renews_on": "Renews on $date",
257
- "expires_on": "Expires on $date",
258
- "trial_label": "Free trial",
259
- "trial_until": "Free trial until $date",
260
- "charges_from": "$price starting $date"
111
+ "settings_entry": {
112
+ "title": "Admin",
113
+ "caption": "Only visible to administrators and in development mode."
261
114
  },
262
- "paywallWithSwitch": {
263
- "withTrial": {
264
- "title": "Try Free for $days days",
265
- "btnAction": "Try for free",
266
- "details": "$days days free, then $price",
267
- "trial_switch_title": "$days-day free trial"
268
- },
269
- "noTrial": {
270
- "title": "Enjoy Your Premium Experience",
271
- "btnAction": "Continue",
272
- "trial_switch_title": "Not sure yet?",
273
- "trial_switch_subtitle": "Enable free trial"
274
- },
275
- "features": [
276
- "Lorem feature 1",
277
- "Lorem feature 2",
278
- "Lorem feature 3",
279
- "Cancel anytime"
280
- ]
115
+ "requires_admin": "You need to be an admin to view this."
116
+ },
117
+ "home": {
118
+ "title": "Kasy example",
119
+ "welcome": "Welcome to the Kasy demo",
120
+ "cards": {
121
+ "paywall_title": "Paywall",
122
+ "paywall_description": "Show the paywall page",
123
+ "notification_title": "Local notification test",
124
+ "notification_description": "Fires an on-device alert only. It won't appear in the Notifications tab (push).",
125
+ "feedback_title": "Feedback",
126
+ "feedback_description": "Feature request or vote page",
127
+ "signup_title": "Signup",
128
+ "signup_description": "Anonymous user can signup using real email or other social login",
129
+ "assistant_title": "AI Assistant",
130
+ "assistant_description": "Chat with the AI assistant"
281
131
  },
282
- "onboarding": {
283
- "feature_1": {
284
- "title": "Monetize from day one",
285
- "description": "Production-ready paywalls, subscriptions and free trials. No billing backend to build.",
286
- "action": "Continue",
287
- "skip": "Skip",
288
- "login": "Already have an account? Log in"
289
- },
290
- "feature_2": {
291
- "title": "Sign-in, already built",
292
- "description": "Email, social login and password recovery. Secure and ready to ship.",
293
- "action": "Continue"
294
- },
295
- "feature_3": {
296
- "title": "Bring your users back",
297
- "description": "Push, in-app alerts and permissions, wired up and ready to engage.",
298
- "action": "Continue"
299
- },
300
- "mockups": {
301
- "paywall": {
302
- "title": "Premium",
303
- "annual": "Annual",
304
- "monthly": "Monthly",
305
- "save_badge": "-40%",
306
- "price_year": "\\$39.99 / yr",
307
- "price_month": "\\$4.99 / mo",
308
- "cta": "Start free trial"
309
- },
310
- "auth": {
311
- "welcome": "Welcome back",
312
- "email_hint": "you@email.com",
313
- "sign_in": "Sign in",
314
- "divider": "or"
315
- },
316
- "notification": {
317
- "title": "New message",
318
- "time": "now"
319
- },
320
- "push_permission": {
321
- "title": "Enable notifications?",
322
- "allow": "Allow",
323
- "deny": "Don't allow"
324
- },
325
- "tracking_permission": {
326
- "title": "Allow tracking?",
327
- "allow": "Allow",
328
- "deny": "Ask app not to track"
329
- }
330
- },
331
- "ageQuestion": {
332
- "title": "How old are you?",
333
- "description": "This helps us tailor your experience.",
334
- "options(map)": {
335
- "age18_30": "18 to 30",
336
- "age31_40": "31 to 40",
337
- "age41_50": "41 to 50",
338
- "age51_60": "Over 50",
339
- "none": "I'd rather not say"
340
- },
341
- "action": "Continue"
342
- },
343
- "genderQuestion": {
344
- "title": "How do you identify?",
345
- "description": "Pick what fits you best. You can skip this.",
346
- "options(map)": {
347
- "male": "Male",
348
- "female": "Female",
349
- "none": "I'd rather not say"
350
- },
351
- "action": "Continue"
352
- },
353
- "notifications": {
354
- "title": "Stay in the loop",
355
- "description": "We only reach out when it truly matters. No spam, ever.",
356
- "continue_button": "Turn on notifications",
357
- "skip_button": "Not now"
358
- },
359
- "att": {
360
- "title": "You're in control",
361
- "description": "Allow tracking for more relevant ads. The choice is always yours.",
362
- "continue_button": "Continue"
363
- },
364
- "loading": {
365
- "title": "Setting everything up",
366
- "subtitle": "This will only take a moment"
367
- }
132
+ "features_page": {
133
+ "title": "Kit features",
134
+ "assistant_title": "Chat with AI",
135
+ "assistant_description": "Ready-made AI chat for questions, ideas, and in-app help",
136
+ "feedback_title": "Vote & suggest",
137
+ "feedback_description": "Join the roadmap—vote on ideas or submit your own",
138
+ "notification_title": "Test notification",
139
+ "notification_description": "Fires a local alert on this device only (not push)",
140
+ "notification_demo_title": "Test alert",
141
+ "notification_demo_body": "Local notification from the kit demo",
142
+ "send_push_title": "Send push notification",
143
+ "send_push_description": "Send a push to specific users or everyone",
144
+ "paywall_title": "Plans & subscription",
145
+ "paywall_description": "Paywall, trial, and RevenueCat subscription flows"
368
146
  },
369
- "feature_requests": {
370
- "title": "Ideas",
371
- "description": "Vote on ideas or share your own. Every voice shapes the roadmap.",
372
- "community_ideas": "Community ideas",
373
- "no_requests": "No ideas yet. Be the first to suggest one.",
374
- "vote_success": {
375
- "title": "Vote registered",
376
- "description": "Thanks for helping us prioritize"
377
- },
378
- "vote_error": {
379
- "title": "Already voted",
380
- "description": "You have already voted for this idea"
381
- },
382
- "add_feature": {
383
- "chip_label": "Add",
384
- "title": "Submit an idea",
385
- "description": "Tell us what you'd like to see built next.",
386
- "save_button": "Submit",
387
- "title_label": "Title",
388
- "title_hint": "A short, descriptive title",
389
- "description_label": "Description",
390
- "description_hint": "Describe the feature or improvement in detail...",
391
- "error_title": "Error",
392
- "error_required": "Title and description are required",
393
- "error_sending": "Something went wrong. Please try again.",
394
- "error_too_short": "Description is too short. Please add more detail",
395
- "toast_success": {
396
- "title": "Idea submitted",
397
- "description": "We'll review it and keep you posted"
398
- }
399
- }
147
+ "dashboard": {
148
+ "brand": "kasy",
149
+ "components_title": "Components",
150
+ "components_subtitle": "Explore design tokens and UI building blocks",
151
+ "features_title": "Features",
152
+ "features_subtitle": "AI, feedback, alerts, and subscription",
153
+ "count_total": "$count total",
154
+ "search_hint": "Search components",
155
+ "search_empty": "No components found"
400
156
  },
401
- "update_bottom_sheet": {
402
- "title": "What's new?",
403
- "description": "We made some improvements",
404
- "highlights": [
405
- "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
406
- "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
407
- "- Lorem ipsum dolor sit amet, consectetur adipiscing elit."
408
- ],
409
- "continue_button": "Got it"
157
+ "components_preview": {
158
+ "nav_title": "Components",
159
+ "pro_badge": "PRO"
160
+ }
161
+ },
162
+ "auth": {
163
+ "signin": {
164
+ "title": "Welcome back",
165
+ "subtitle": "Sign in to continue your experience",
166
+ "email_hint": "bruce@wayne.com",
167
+ "email_label": "Email",
168
+ "password_hint": "Password",
169
+ "password_label": "Password",
170
+ "forgot_password": "Forgot your password?",
171
+ "submit": "Continue with email",
172
+ "create_account": "Create my account",
173
+ "no_account": "Don't have an account?",
174
+ "signup_link": "Sign up",
175
+ "continue_without": "Continue without account",
176
+ "or_sign_in_with": "or",
177
+ "google": "Gmail",
178
+ "apple": "Apple",
179
+ "facebook": "Facebook",
180
+ "error_title": "Error",
181
+ "error_text": "Wrong email, password or this email is not registered",
182
+ "email_invalid": "Email not valid",
183
+ "password_required": "You must provide a password",
184
+ "password_too_short": "Your password must be at least 5 characters long",
185
+ "social_error": "Couldn't sign in with $provider",
186
+ "email_already_registered": "This email already has an account with a different sign-in method. Use the method you signed up with."
410
187
  },
411
- "update_available": {
412
- "title": "Update available",
413
- "description": "A newer version of the app is available. Update to get the latest improvements and fixes.",
414
- "forced_title": "Update required",
415
- "forced_description": "This version is no longer supported. Please update to keep using the app.",
416
- "update_button": "Update now",
417
- "later_button": "Not now"
188
+ "signup": {
189
+ "title": "Signup now",
190
+ "subtitle": "Create your account to get started",
191
+ "submit": "Create my account",
192
+ "have_account": "Already have an account?",
193
+ "signin_link": "Sign in",
194
+ "already_have_account": "I already have an account",
195
+ "error_title": "Error",
196
+ "error_text": "This email already exists or is invalid"
418
197
  },
419
- "request_notification_permission": {
420
- "title": "Enable notifications?",
421
- "description": "Get real-time updates and stay on top of what matters.",
422
- "continue_button": "Enable",
423
- "skip_button": "Not now"
198
+ "recover": {
199
+ "title": "Recover password",
200
+ "subtitle": "Enter your email and we'll send you a link to set a new password.",
201
+ "email_label": "Email",
202
+ "submit": "Recover password",
203
+ "remember": "Remembered your password?",
204
+ "signin_link": "Sign in",
205
+ "error_title": "Error",
206
+ "error_text": "Fill a valid email"
207
+ }
208
+ },
209
+ "rate_popup": {
210
+ "title": "Would you have 15s to rate us?",
211
+ "description": "It's fast and very helpful! Thanks a lot!",
212
+ "cancel_button": "Maybe later",
213
+ "rate_button": "Yes, with pleasure!"
214
+ },
215
+ "premium": {
216
+ "title_1": "Unlock full access",
217
+ "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
218
+ "feature_1": "Feature 1 lorem ipsum ",
219
+ "feature_2": "Feature 2 mop issum ",
220
+ "feature_3": "Feature 3 lorem ",
221
+ "duration_weekly": "Week",
222
+ "duration_annual": "Year",
223
+ "duration_monthly": "Month",
224
+ "duration_monthly_description": "Cancel anytime",
225
+ "duration_lifetime": "Lifetime",
226
+ "duration_lifetime_description": "One time payment",
227
+ "restore_action": "Restore",
228
+ "coupon_title": "Have a coupon?",
229
+ "payment_cancel_reassurance": "Easy 1-click cancel, always",
230
+ "payment_cancel_reassurance_free_trial": "No payment now, cancel anytime",
231
+ "payment_action": "Start free trial",
232
+ "payment_action_trial": "7-day free trial, then $money",
233
+ "try_free_btn_action": "Try free for $days days",
234
+ "duration_recuring_label_annual": "Annual",
235
+ "duration_recuring_label_monthly": "Monthly",
236
+ "duration_recuring_label_weekly": "Weekly",
237
+ "action_button": "Continue",
238
+ "terms": "Terms",
239
+ "privacy": "Privacy",
240
+ "error_loading": "Error while loading the offers",
241
+ "no_products_title": "Subscription options are not available yet",
242
+ "no_products_description": "Please try again in a moment. If this keeps happening, the store products may still be finishing setup.",
243
+ "restore_success_title": "Subscription restored",
244
+ "restore_success_text": "Thank you for your trust",
245
+ "purchase_success_title": "Subscription successful",
246
+ "purchase_success_text": "Thank you for your trust",
247
+ "error_title": "Error",
248
+ "error_text": "An error occurred. Please try again",
249
+ "web_checkout_timeout_title": "Payment not confirmed",
250
+ "web_checkout_timeout_text": "We did not receive payment confirmation. If you already paid, tap Restore.",
251
+ "restore_none_title": "No subscription found",
252
+ "restore_none_text": "We could not find an active subscription to restore.",
253
+ "comparison": {
254
+ "title": "Premium plan comparison",
255
+ "features_label": "Features",
256
+ "free_version": "Free",
257
+ "premium_version": "Premium",
258
+ "no_ads": "No ads",
259
+ "premium_themes": "Premium themes",
260
+ "advanced_customization": "Advanced customization",
261
+ "priority_support": "Priority support",
262
+ "home_widget": "Home widgets",
263
+ "talk_with_assistant": "AI Assistant"
264
+ }
265
+ },
266
+ "activePremium": {
267
+ "title": "You are a premium user",
268
+ "description": "Enjoy all the features",
269
+ "unsubscribe_button": "Unsubscribe",
270
+ "early_bird_description": "You used a coupon that provided you access to the premium features for free without any subscription. Enjoy!",
271
+ "unsubscribe_feedback_title": "Help us improve",
272
+ "unsubscribe_feedback_description": "We're sorry to see you go. Could you briefly tell us why you're unsubscribing?",
273
+ "unsubscribe_feedback_hint": "Tell us your reason...",
274
+ "unsubscribe_feedback_min_chars": "Minimum 6 characters required",
275
+ "unsubscribe_confirm_button": "Continue",
276
+ "lifetime_user_description": "You are a lifetime user",
277
+ "managed_elsewhere_title": "Subscription on another platform",
278
+ "managed_elsewhere_description": "This subscription was made on another platform and can't be managed or cancelled here. Sign in to your account on the platform where you purchased it.",
279
+ "restore_button": "Restore purchases",
280
+ "cancel_button": "Close",
281
+ "billing_title": "Billing",
282
+ "plan_label": "Account plan",
283
+ "plan_fallback": "Premium",
284
+ "manage_subscription": "Manage subscription",
285
+ "restore_purchases": "Restore purchases",
286
+ "renews_on": "Renews on $date",
287
+ "expires_on": "Expires on $date",
288
+ "trial_label": "Free trial",
289
+ "trial_until": "Free trial until $date",
290
+ "charges_from": "$price starting $date"
291
+ },
292
+ "paywallWithSwitch": {
293
+ "withTrial": {
294
+ "title": "Try Free for $days days",
295
+ "btnAction": "Try for free",
296
+ "details": "$days days free, then $price",
297
+ "trial_switch_title": "$days-day free trial"
424
298
  },
425
- "notification_permission_denied": {
426
- "title": "Permission Required",
427
- "description": "To receive notifications, please enable notification permissions in your device settings.",
428
- "allow_button": "Allow notifications",
429
- "open_settings_button": "Open Settings",
430
- "cancel_button": "Cancel"
299
+ "noTrial": {
300
+ "title": "Enjoy Your Premium Experience",
301
+ "btnAction": "Continue",
302
+ "trial_switch_title": "Not sure yet?",
303
+ "trial_switch_subtitle": "Enable free trial"
431
304
  },
432
- "review_popup": {
433
- "title": "Your feedback matters",
434
- "description": "If the app has been helpful, a quick review goes a long way. Got ideas to improve it? We'd love to hear them.",
435
- "cancel_button": "Suggest improvements",
436
- "rate_button": "Write a review"
305
+ "features": [
306
+ "Lorem feature 1",
307
+ "Lorem feature 2",
308
+ "Lorem feature 3",
309
+ "Cancel anytime"
310
+ ]
311
+ },
312
+ "onboarding": {
313
+ "feature_1": {
314
+ "title": "Monetize from day one",
315
+ "description": "Production-ready paywalls, subscriptions and free trials. No billing backend to build.",
316
+ "action": "Continue",
317
+ "skip": "Skip",
318
+ "login": "Already have an account? Log in"
437
319
  },
438
- "navigation": {
439
- "home": "Home",
440
- "support": "Support",
441
- "notifications": "Notifications",
442
- "settings": "Config.",
443
- "logout": "Sign out",
444
- "skip_to_content": "Skip to content"
320
+ "feature_2": {
321
+ "title": "Sign-in, already built",
322
+ "description": "Email, social login and password recovery. Secure and ready to ship.",
323
+ "action": "Continue"
445
324
  },
446
- "reminderPage": {
447
- "title": "Reminders",
448
- "toggleLabel": "Enable reminder",
449
- "typeLabel": "Repeat",
450
- "daily": "Every day",
451
- "weekly": "Every week",
452
- "specificDate": "Specific date",
453
- "timeLabel": "Time",
454
- "dayLabel": "Day of week",
455
- "dateLabel": "Date and time",
456
- "selectDate": "Select date and time"
325
+ "feature_3": {
326
+ "title": "Bring your users back",
327
+ "description": "Push, in-app alerts and permissions, wired up and ready to engage.",
328
+ "action": "Continue"
457
329
  },
458
- "dailyReminder": {
459
- "title": "Reminder",
460
- "body": "Time to drink a glass of water."
330
+ "mockups": {
331
+ "paywall": {
332
+ "title": "Premium",
333
+ "annual": "Annual",
334
+ "monthly": "Monthly",
335
+ "save_badge": "-40%",
336
+ "price_year": "\\$39.99 / yr",
337
+ "price_month": "\\$4.99 / mo",
338
+ "cta": "Start free trial"
339
+ },
340
+ "auth": {
341
+ "welcome": "Welcome back",
342
+ "email_hint": "you@email.com",
343
+ "sign_in": "Sign in",
344
+ "divider": "or"
345
+ },
346
+ "notification": {
347
+ "title": "New message",
348
+ "time": "now"
349
+ },
350
+ "push_permission": {
351
+ "title": "Enable notifications?",
352
+ "allow": "Allow",
353
+ "deny": "Don't allow"
354
+ },
355
+ "tracking_permission": {
356
+ "title": "Allow tracking?",
357
+ "allow": "Allow",
358
+ "deny": "Ask app not to track"
359
+ }
461
360
  },
462
- "settings": {
463
- "title": "Settings",
464
- "avatar": {
465
- "take_photo": "Take photo",
466
- "choose_library": "Photo library",
467
- "remove_photo": "Remove photo",
468
- "cancel": "Cancel"
469
- },
470
- "language_title": "Languages",
471
- "theme_title": "Theme",
472
- "theme_option_system": "System",
473
- "theme_option_light": "Light",
474
- "theme_option_dark": "Dark",
475
- "haptic_feedback_title": "Haptic feedback",
476
- "hide_chrome_on_scroll_title": "Hide bars when scrolling",
477
- "section_preferences_label": "PREFERENCES",
478
- "section_security_label": "SECURITY",
479
- "section_support_label": "SUPPORT",
480
- "biometric_title": "App lock",
481
- "biometric_subtitle_ios": "Require Face ID or Touch ID each time you open the app while signed in.",
482
- "biometric_subtitle_ios_face": "Require Face ID each time you open the app while signed in.",
483
- "biometric_subtitle_ios_touch": "Require Touch ID each time you open the app while signed in.",
484
- "biometric_subtitle_android": "We ask you to verify on this device when you open the app while signed in.",
485
- "biometric_subtitle_android_face": "Require face unlock when you open the app while signed in.",
486
- "biometric_subtitle_android_fingerprint": "Require fingerprint unlock when you open the app while signed in.",
487
- "biometric_subtitle_android_face_and_fingerprint": "Require fingerprint or face unlock when you open while signed in.",
488
- "biometric_disable_title": "Turn off App Lock?",
489
- "biometric_disable_message": "Anyone with your unlocked phone can open the app until you sign out.",
490
- "biometric_disable_confirm": "Turn off",
491
- "biometric_disable_cancel": "Cancel",
492
- "biometric_enable_reason_ios": "Confirm with Face ID or Touch ID to turn on App Lock",
493
- "biometric_enable_reason_ios_face": "Confirm with Face ID to turn on App Lock",
494
- "biometric_enable_reason_ios_touch": "Confirm with Touch ID to turn on App Lock",
495
- "biometric_enable_reason_android": "Confirm on this phone to turn on App Lock",
496
- "biometric_enable_reason_android_face": "Confirm with face unlock to turn on App Lock",
497
- "biometric_enable_reason_android_fingerprint": "Confirm with fingerprint to turn on App Lock",
498
- "biometric_enable_reason_android_face_and_fingerprint": "Confirm with fingerprint or face unlock to turn on App Lock",
499
- "biometric_login_reason_ios": "Unlock with Face ID or Touch ID",
500
- "biometric_login_reason_ios_face": "Unlock with Face ID",
501
- "biometric_login_reason_ios_touch": "Unlock with Touch ID",
502
- "biometric_login_reason_android": "Verify it's you",
503
- "biometric_login_reason_android_face": "Unlock using face unlock",
504
- "biometric_login_reason_android_fingerprint": "Unlock using fingerprint",
505
- "biometric_login_reason_android_face_and_fingerprint": "Unlock with fingerprint or face",
506
- "biometric_unavailable_message_ios": "Enable Face ID, Touch ID, or a device passcode in Settings.",
507
- "biometric_unavailable_message_ios_face": "Turn on Face ID or a device passcode in Settings.",
508
- "biometric_unavailable_message_ios_touch": "Turn on Touch ID or a device passcode in Settings.",
509
- "biometric_unavailable_message_android": "Turn on biometric unlock or a screen lock in Settings.",
510
- "biometric_unavailable_message_android_face": "Add face unlock or a secure screen lock in system settings.",
511
- "biometric_unavailable_message_android_fingerprint": "Add a fingerprint or a secure screen lock in system settings.",
512
- "biometric_unavailable_message_android_face_and_fingerprint": "Add a fingerprint or face unlock in Settings.",
513
- "biometric_not_enabled_message": "App Lock wasn't enabled.",
514
- "feedback": "Send feedback",
515
- "premium": "Premium",
516
- "billing": "Billing",
517
- "privacy": "Privacy policy",
518
- "support": "Support",
519
- "disconnect": "Yes, sign out",
520
- "disconnect_confirm_title": "Sign out of your account?",
521
- "disconnect_confirm_message": "Are you sure you want to sign out?",
522
- "disconnect_cancel": "Cancel",
523
- "logout": "Sign out",
524
- "my_account": "My account",
525
- "not_signed_in": "Not signed in",
526
- "register": "Register",
527
- "name_label": "Name",
528
- "email_label": "Email",
529
- "connected_with_label": "Connected with",
530
- "provider_email": "Email & password",
531
- "provider_phone": "Phone",
532
- "create_password_title": "Create password",
533
- "create_password_subtitle": "Set a password so you can also sign in with email and password, on top of social login.",
534
- "create_password_field": "New password",
535
- "create_password_confirm_label": "Confirm password",
536
- "create_password_success": "Password created",
537
- "create_password_error": "Couldn't create the password. Please try again.",
538
- "create_password_too_short": "Password must be at least 6 characters",
539
- "create_password_mismatch": "Passwords don't match",
540
- "link_social": "Link $provider",
541
- "link_social_success": "$provider linked",
542
- "link_social_error": "Couldn't link the account. Please try again.",
543
- "edit_name_title": "Edit name",
544
- "edit_name_hint": "Your name",
545
- "edit_name_save": "Save",
546
- "edit_name_cancel": "Cancel",
547
- "edit_name_success": "Name updated",
548
- "edit_name_error": "Couldn't update your name. Please try again.",
549
- "reminders": "Reminders",
550
- "admin_panel": "Admin Panel",
551
- "admin_debug_section_label": "ADMIN (DEBUG ONLY)",
552
- "admin_panel_debug_notice": "This entire Admin section (header, panel, and all options below) only exists in debug builds. It is not included in release; people who install from the store or a production APK never see any of it.",
553
- "delete_account": {
554
- "button": "I want to delete my account",
555
- "title": "Delete your account?",
556
- "content": "Warning: this action is permanent and cannot be undone.",
557
- "content_subscriber": "Warning: this is permanent. You will lose your active subscription, and creating a new account later (even with the same email) will not restore it.",
558
- "cancel": "Cancel",
559
- "confirm": "Yes, delete",
560
- "error": "Something went wrong. Please try again."
561
- },
562
- "admin": {
563
- "update_bottom_sheet": "Preview what's new",
564
- "preview_update_available": "Preview update available",
565
- "paywalls": "Paywalls",
566
- "test_onboarding": "Test onboarding",
567
- "copy_user_id": "Copy user id",
568
- "user_id_copied": "User id copied to clipboard",
569
- "copy_fcm_token": "Copy FCM Token",
570
- "fcm_token_copied": "FCM Token copied to clipboard",
571
- "fcm_token_unavailable": "Token unavailable (notifications disabled?)",
572
- "ask_notification": "Ask for notification",
573
- "native_only": "Available only in the native app (iOS / Android)",
574
- "ask_review": "Ask for review",
575
- "home_widgets_panel": "Home Widgets panel",
576
- "home_widgets_title": "Home Widgets Panel",
577
- "inspector_fab_title": "Widget inspector",
578
- "inspector_fab_subtitle_prefix": "Global shortcut:",
579
- "update_mywidget_title": "Update MyWidget Widget",
580
- "update_mywidget_desc": "Call manual update for MyWidget widget",
581
- "paywalls_title": "Paywalls Admin Panel",
582
- "send_push_title": "Send notification",
583
- "send_push_to_all": "Send to all",
584
- "send_push_email_hint": "Add e-mail",
585
- "send_push_title_label": "Title",
586
- "send_push_title_hint": "e.g. New update available",
587
- "send_push_body_label": "Message",
588
- "send_push_body_hint": "Write the notification content",
589
- "send_push_image_label": "Image URL (optional)",
590
- "send_push_image_hint": "https://...",
591
- "send_push_email_label": "Recipient e-mails",
592
- "send_push_success": "Notification sent!",
593
- "send_push_user_not_found": "User not found: $email",
594
- "send_push_send_button": "Send",
595
- "send_push_required": "Title and message are required",
596
- "send_push_no_emails": "Add at least one e-mail",
597
- "send_push_route_label": "Route on open (optional)",
598
- "send_push_route_hint": "e.g. /premium, /notifications",
599
- "send_push_preview_label": "Preview",
600
- "send_push_preview_now": "now",
601
- "send_push_preview_title_placeholder": "Notification title",
602
- "send_push_preview_body_placeholder": "Your message body shows here",
603
- "device_preview_title": "Device Preview (web only)"
604
- }
361
+ "ageQuestion": {
362
+ "title": "How old are you?",
363
+ "description": "This helps us tailor your experience.",
364
+ "options(map)": {
365
+ "age18_30": "18 to 30",
366
+ "age31_40": "31 to 40",
367
+ "age41_50": "41 to 50",
368
+ "age51_60": "Over 50",
369
+ "none": "I'd rather not say"
370
+ },
371
+ "action": "Continue"
605
372
  },
606
- "rate_banner": {
607
- "title": "Do you like our app?",
608
- "text": "Do you have a minute to leave us a review on the store?",
609
- "rate_button": "Yes sure!",
610
- "later_button": "Later..."
373
+ "genderQuestion": {
374
+ "title": "How do you identify?",
375
+ "description": "Pick what fits you best. You can skip this.",
376
+ "options(map)": {
377
+ "male": "Male",
378
+ "female": "Female",
379
+ "none": "I'd rather not say"
380
+ },
381
+ "action": "Continue"
611
382
  },
612
383
  "notifications": {
613
- "title": "Notifications",
614
- "empty_title": "No notifications yet",
615
- "empty_subtitle": "Stay tuned for updates",
616
- "error_fetching": "Error fetching notifications",
617
- "push_title": "Push notifications",
618
- "push_subtitle_enabled": "You are receiving alerts",
619
- "push_subtitle_disabled": "Tap to enable in Settings",
620
- "push_subtitle_waiting": "Enable to stay in the loop",
621
- "mark_all_read": "Mark as read",
622
- "group_today": "Today",
623
- "group_yesterday": "Yesterday",
624
- "group_older": "Older",
625
- "empty_cta": "Enable notifications",
626
- "empty_cta_open_settings": "Open settings",
627
- "delete_all": "Delete all",
628
- "delete_all_confirm_title": "Delete all notifications?",
629
- "delete_all_confirm_message": "This will permanently remove every notification from your account. This cannot be undone.",
630
- "delete_action": "Yes, delete",
631
- "cancel_action": "Cancel",
632
- "deleted_one": "Notification deleted",
633
- "deleted_all": "All notifications deleted"
384
+ "title": "Stay in the loop",
385
+ "description": "We only reach out when it truly matters. No spam, ever.",
386
+ "continue_button": "Turn on notifications",
387
+ "skip_button": "Not now"
634
388
  },
635
- "bottom_router": {
636
- "fake_page_text": "This is a fake page"
389
+ "att": {
390
+ "title": "You're in control",
391
+ "description": "Allow tracking for more relevant ads. The choice is always yours.",
392
+ "continue_button": "Continue"
637
393
  },
638
- "ai_chat": {
639
- "title": "AI Assistant",
640
- "empty_state": "Start a conversation with your assistant.",
641
- "hint": "Ask something...",
642
- "error_not_configured": "The assistant isn't available yet. Please try again later.",
643
- "error_no_reply": "We couldn't get a reply. Please try again.",
644
- "error_network": "Could not reach the AI assistant.",
645
- "new_conversation": "New conversation",
646
- "conversations_empty": "No conversations yet",
647
- "no_conversation_selected": "Pick a conversation, or start a new one.",
648
- "delete_title": "Delete conversation?",
649
- "delete_message": "This conversation and all its messages will be permanently deleted.",
650
- "delete_cancel": "Cancel",
651
- "delete_confirm": "Yes, delete"
652
- },
653
- "phone_auth": {
654
- "title_input": "Phone Authentication",
655
- "subtitle_input": "Enter your phone number",
656
- "description_input": "We will send you a verification code to confirm your identity",
657
- "phone_label": "Phone Number",
658
- "phone_hint": "+1 (555) 123-4567",
659
- "error_empty": "Please enter a phone number",
660
- "error_invalid": "Please enter a valid phone number",
661
- "continue_btn": "Continue",
662
- "title_verify": "Verify code",
663
- "verification_code": "Verification Code",
664
- "code_sent": "We have sent a verification code to $phone",
665
- "signin_success_title": "All set",
666
- "signin_success_text": "You're now signed in with your phone number",
667
- "verify_code": "Verify Code",
668
- "resend_code": "Resend Code",
669
- "enter_all_digits": "Please enter all 6 digits"
670
- },
671
- "recover_password_result": {
672
- "title": "Email sent",
673
- "description": "We sent you an email with a link to reset your password",
674
- "back_to_signin": "Get back to Sign in",
675
- "note": "Note: If you don't receive an email, please check your spam folder"
676
- },
677
- "page_not_found": {
678
- "title": "404 - Page not found"
394
+ "loading": {
395
+ "title": "Setting everything up",
396
+ "subtitle": "This will only take a moment"
397
+ }
398
+ },
399
+ "feature_requests": {
400
+ "title": "Ideas",
401
+ "description": "Vote on ideas or share your own. Every voice shapes the roadmap.",
402
+ "community_ideas": "Community ideas",
403
+ "no_requests": "No ideas yet. Be the first to suggest one.",
404
+ "vote_success": {
405
+ "title": "Vote registered",
406
+ "description": "Thanks for helping us prioritize"
679
407
  },
680
- "devInspector": {
681
- "copied": "$widget copied to clipboard",
682
- "activate": "Activate widget inspector",
683
- "deactivate": "Deactivate widget inspector",
684
- "copyForAi": "Copy for AI",
685
- "selectWidgetFirst": "Select a widget on screen first, then tap Copy.",
686
- "inspectorHint": "Tap the UI to select a widget (purple outline). Then copy for your AI prompt.",
687
- "statusActive": "Inspecting"
408
+ "vote_error": {
409
+ "title": "Already voted",
410
+ "description": "You have already voted for this idea"
688
411
  },
689
- "webDevicePreview": {
690
- "frame": "Frame",
691
- "darkBackground": "Dark background",
692
- "darkTheme": "Dark theme",
693
- "landscape": "Landscape",
694
- "textScale": "Text scale",
695
- "screenshot": "Screenshot"
412
+ "add_feature": {
413
+ "chip_label": "Add",
414
+ "title": "Submit an idea",
415
+ "description": "Tell us what you'd like to see built next.",
416
+ "save_button": "Submit",
417
+ "title_label": "Title",
418
+ "title_hint": "A short, descriptive title",
419
+ "description_label": "Description",
420
+ "description_hint": "Describe the feature or improvement in detail...",
421
+ "error_title": "Error",
422
+ "error_required": "Title and description are required",
423
+ "error_sending": "Something went wrong. Please try again.",
424
+ "error_too_short": "Description is too short. Please add more detail",
425
+ "toast_success": {
426
+ "title": "Idea submitted",
427
+ "description": "We'll review it and keep you posted"
428
+ }
429
+ }
430
+ },
431
+ "update_bottom_sheet": {
432
+ "title": "What's new?",
433
+ "description": "We made some improvements",
434
+ "highlights": [
435
+ "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
436
+ "- Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
437
+ "- Lorem ipsum dolor sit amet, consectetur adipiscing elit."
438
+ ],
439
+ "continue_button": "Got it"
440
+ },
441
+ "update_available": {
442
+ "title": "Update available",
443
+ "description": "A newer version of the app is available. Update to get the latest improvements and fixes.",
444
+ "forced_title": "Update required",
445
+ "forced_description": "This version is no longer supported. Please update to keep using the app.",
446
+ "update_button": "Update now",
447
+ "later_button": "Not now"
448
+ },
449
+ "request_notification_permission": {
450
+ "title": "Enable notifications?",
451
+ "description": "Get real-time updates and stay on top of what matters.",
452
+ "continue_button": "Enable",
453
+ "skip_button": "Not now"
454
+ },
455
+ "notification_permission_denied": {
456
+ "title": "Permission Required",
457
+ "description": "To receive notifications, please enable notification permissions in your device settings.",
458
+ "allow_button": "Allow notifications",
459
+ "open_settings_button": "Open Settings",
460
+ "cancel_button": "Cancel"
461
+ },
462
+ "review_popup": {
463
+ "title": "Enjoying the app?",
464
+ "description": "If the app has been helpful, a store review makes all the difference. It takes a few seconds and really helps us grow.",
465
+ "rate_button": "Write a review"
466
+ },
467
+ "navigation": {
468
+ "home": "Home",
469
+ "support": "Help",
470
+ "notifications": "Notifications",
471
+ "settings": "Config.",
472
+ "logout": "Sign out",
473
+ "skip_to_content": "Skip to content"
474
+ },
475
+ "reminderPage": {
476
+ "title": "Reminders",
477
+ "toggleLabel": "Enable reminder",
478
+ "typeLabel": "Repeat",
479
+ "daily": "Every day",
480
+ "weekly": "Every week",
481
+ "specificDate": "Once",
482
+ "timeLabel": "Time",
483
+ "dayLabel": "Day of week",
484
+ "dateLabel": "Date",
485
+ "selectDate": "Select date",
486
+ "hint": "Get reminded to come back to the app",
487
+ "summaryDaily": "Every day at $time",
488
+ "summaryWeekly": "Every $day at $time",
489
+ "summaryDate": "On $date at $time"
490
+ },
491
+ "dailyReminder": {
492
+ "title": "Reminder",
493
+ "body": "Time to drink a glass of water."
494
+ },
495
+ "settings": {
496
+ "title": "Settings",
497
+ "avatar": {
498
+ "take_photo": "Take photo",
499
+ "choose_library": "Photo library",
500
+ "remove_photo": "Remove photo",
501
+ "cancel": "Cancel"
696
502
  },
697
- "biometric_prompt": {
698
- "title_ios_face": "Turn on Face ID for App Lock?",
699
- "title_ios_touch": "Turn on Touch ID for App Lock?",
700
- "title_ios_mixed": "Turn on Face ID/Touch ID for App Lock?",
701
- "title_android_face": "Turn on App Lock with face unlock?",
702
- "title_android_fingerprint": "Turn on App Lock with fingerprint?",
703
- "title_android_mixed": "Protect the app with your phone?",
704
- "message_ios_face": "You'll confirm with Face ID when you open the app—you stay signed in.",
705
- "message_ios_touch": "You'll confirm with Touch ID when you open the app—you stay signed in.",
706
- "message_ios_mixed": "When you launch you'll confirm with Face ID or Touch ID—you stay signed in.",
707
- "message_android_face": "You'll confirm with face unlock when you open—you stay signed in.",
708
- "message_android_fingerprint": "You'll confirm with fingerprint when you open—you stay signed in.",
709
- "title_android_face_and_fingerprint": "Turn on App Lock with fingerprint or face?",
710
- "message_android_face_and_fingerprint": "Either works—you stay signed in.",
711
- "message_android_mixed": "A quick check when you open—you stay signed in.",
712
- "not_now": "Not now",
713
- "enable": "Turn on"
503
+ "language_title": "Languages",
504
+ "theme_title": "Theme",
505
+ "theme_option_system": "System",
506
+ "theme_option_light": "Light",
507
+ "theme_option_dark": "Dark",
508
+ "haptic_feedback_title": "Haptic feedback",
509
+ "hide_chrome_on_scroll_title": "Hide bars when scrolling",
510
+ "section_preferences_label": "PREFERENCES",
511
+ "section_security_label": "SECURITY",
512
+ "section_support_label": "HELP",
513
+ "biometric_title": "App lock",
514
+ "biometric_subtitle_ios": "Require Face ID or Touch ID each time you open the app while signed in.",
515
+ "biometric_subtitle_ios_face": "Require Face ID each time you open the app while signed in.",
516
+ "biometric_subtitle_ios_touch": "Require Touch ID each time you open the app while signed in.",
517
+ "biometric_subtitle_android": "We ask you to verify on this device when you open the app while signed in.",
518
+ "biometric_subtitle_android_face": "Require face unlock when you open the app while signed in.",
519
+ "biometric_subtitle_android_fingerprint": "Require fingerprint unlock when you open the app while signed in.",
520
+ "biometric_subtitle_android_face_and_fingerprint": "Require fingerprint or face unlock when you open while signed in.",
521
+ "biometric_disable_title": "Turn off App Lock?",
522
+ "biometric_disable_message": "Anyone with your unlocked phone can open the app until you sign out.",
523
+ "biometric_disable_confirm": "Turn off",
524
+ "biometric_disable_cancel": "Cancel",
525
+ "biometric_enable_reason_ios": "Confirm with Face ID or Touch ID to turn on App Lock",
526
+ "biometric_enable_reason_ios_face": "Confirm with Face ID to turn on App Lock",
527
+ "biometric_enable_reason_ios_touch": "Confirm with Touch ID to turn on App Lock",
528
+ "biometric_enable_reason_android": "Confirm on this phone to turn on App Lock",
529
+ "biometric_enable_reason_android_face": "Confirm with face unlock to turn on App Lock",
530
+ "biometric_enable_reason_android_fingerprint": "Confirm with fingerprint to turn on App Lock",
531
+ "biometric_enable_reason_android_face_and_fingerprint": "Confirm with fingerprint or face unlock to turn on App Lock",
532
+ "biometric_login_reason_ios": "Unlock with Face ID or Touch ID",
533
+ "biometric_login_reason_ios_face": "Unlock with Face ID",
534
+ "biometric_login_reason_ios_touch": "Unlock with Touch ID",
535
+ "biometric_login_reason_android": "Verify it's you",
536
+ "biometric_login_reason_android_face": "Unlock using face unlock",
537
+ "biometric_login_reason_android_fingerprint": "Unlock using fingerprint",
538
+ "biometric_login_reason_android_face_and_fingerprint": "Unlock with fingerprint or face",
539
+ "biometric_unavailable_message_ios": "Enable Face ID, Touch ID, or a device passcode in Settings.",
540
+ "biometric_unavailable_message_ios_face": "Turn on Face ID or a device passcode in Settings.",
541
+ "biometric_unavailable_message_ios_touch": "Turn on Touch ID or a device passcode in Settings.",
542
+ "biometric_unavailable_message_android": "Turn on biometric unlock or a screen lock in Settings.",
543
+ "biometric_unavailable_message_android_face": "Add face unlock or a secure screen lock in system settings.",
544
+ "biometric_unavailable_message_android_fingerprint": "Add a fingerprint or a secure screen lock in system settings.",
545
+ "biometric_unavailable_message_android_face_and_fingerprint": "Add a fingerprint or face unlock in Settings.",
546
+ "biometric_not_enabled_message": "App Lock wasn't enabled.",
547
+ "feedback": "Send feedback",
548
+ "premium": "Premium",
549
+ "billing": "Billing",
550
+ "privacy": "Privacy policy",
551
+ "support": "Help center",
552
+ "disconnect": "Yes, sign out",
553
+ "disconnect_confirm_title": "Sign out of your account?",
554
+ "disconnect_confirm_message": "Are you sure you want to sign out?",
555
+ "disconnect_cancel": "Cancel",
556
+ "logout": "Sign out",
557
+ "my_account": "My account",
558
+ "not_signed_in": "Not signed in",
559
+ "register": "Register",
560
+ "name_label": "Name",
561
+ "email_label": "Email",
562
+ "connected_with_label": "Connected with",
563
+ "provider_email": "Email & password",
564
+ "provider_phone": "Phone",
565
+ "create_password_title": "Create password",
566
+ "create_password_subtitle": "Set a password so you can also sign in with email and password, on top of social login.",
567
+ "create_password_field": "New password",
568
+ "create_password_confirm_label": "Confirm password",
569
+ "create_password_success": "Password created",
570
+ "create_password_error": "Couldn't create the password. Please try again.",
571
+ "create_password_too_short": "Password must be at least 6 characters",
572
+ "create_password_mismatch": "Passwords don't match",
573
+ "link_social": "Link $provider",
574
+ "link_social_success": "$provider linked",
575
+ "link_social_error": "Couldn't link the account. Please try again.",
576
+ "edit_name_title": "Edit name",
577
+ "edit_name_hint": "Your name",
578
+ "edit_name_save": "Save",
579
+ "edit_name_cancel": "Cancel",
580
+ "edit_name_success": "Name updated",
581
+ "edit_name_error": "Couldn't update your name. Please try again.",
582
+ "reminders": "Reminders",
583
+ "admin_panel": "Admin Panel",
584
+ "admin_debug_section_label": "ADMIN (DEBUG ONLY)",
585
+ "admin_panel_debug_notice": "This entire Admin section (header, panel, and all options below) only exists in debug builds. It is not included in release; people who install from the store or a production APK never see any of it.",
586
+ "delete_account": {
587
+ "button": "I want to delete my account",
588
+ "title": "Delete your account?",
589
+ "content": "Warning: this action is permanent and cannot be undone.",
590
+ "content_subscriber": "Warning: this is permanent. You will lose your active subscription, and creating a new account later (even with the same email) will not restore it.",
591
+ "cancel": "Cancel",
592
+ "confirm": "Yes, delete",
593
+ "error": "Something went wrong. Please try again."
714
594
  },
715
- "home_widget": {
716
- "greeting_morning": "Good morning",
717
- "greeting_afternoon": "Good afternoon",
718
- "greeting_evening": "Good evening",
719
- "title_with_name": "Hi, $name!",
720
- "title_default": "Hi there!",
721
- "title_logged_out": "We'll be here when you're back",
722
- "plan_free": "Free plan",
723
- "plan_pro": "PRO",
724
- "quote": "Your time is limited.\nDon't live someone else's life.\nHave the courage to follow your intuition.\nEverything else is secondary.",
725
- "quote_author": "Steve Jobs"
595
+ "admin": {
596
+ "update_bottom_sheet": "Preview what's new",
597
+ "preview_update_available": "Preview update available",
598
+ "paywalls": "Paywalls",
599
+ "test_onboarding": "Test onboarding",
600
+ "copy_user_id": "Copy user id",
601
+ "user_id_copied": "User id copied to clipboard",
602
+ "copy_fcm_token": "Copy FCM Token",
603
+ "fcm_token_copied": "FCM Token copied to clipboard",
604
+ "fcm_token_unavailable": "Token unavailable (notifications disabled?)",
605
+ "ask_notification": "Ask for notification",
606
+ "native_only": "Available only in the native app (iOS / Android)",
607
+ "ask_review": "Ask for review",
608
+ "home_widgets_panel": "Home Widgets panel",
609
+ "home_widgets_title": "Home Widgets Panel",
610
+ "inspector_fab_title": "Widget inspector",
611
+ "inspector_fab_subtitle_prefix": "Global shortcut:",
612
+ "update_mywidget_title": "Update MyWidget Widget",
613
+ "update_mywidget_desc": "Call manual update for MyWidget widget",
614
+ "paywalls_title": "Paywalls Admin Panel",
615
+ "send_push_title": "Send notification",
616
+ "send_push_to_all": "Send to all",
617
+ "send_push_email_hint": "Add e-mail",
618
+ "send_push_title_label": "Title",
619
+ "send_push_title_hint": "e.g. New update available",
620
+ "send_push_body_label": "Message",
621
+ "send_push_body_hint": "Write the notification content",
622
+ "send_push_image_label": "Image URL (optional)",
623
+ "send_push_image_hint": "https://...",
624
+ "send_push_email_label": "Recipient e-mails",
625
+ "send_push_success": "Notification sent!",
626
+ "send_push_user_not_found": "User not found: $email",
627
+ "send_push_send_button": "Send",
628
+ "send_push_required": "Title and message are required",
629
+ "send_push_no_emails": "Add at least one e-mail",
630
+ "send_push_route_label": "Page to open",
631
+ "send_push_route_description": "Screen opened when the user taps the notification.",
632
+ "send_push_route_notifications": "Notifications",
633
+ "send_push_route_home": "Home",
634
+ "send_push_route_settings": "Settings",
635
+ "send_push_route_premium": "Premium",
636
+ "send_push_route_reminder": "Reminders",
637
+ "send_push_route_feedback": "Feedback",
638
+ "send_push_preview_label": "Preview",
639
+ "send_push_preview_now": "now",
640
+ "send_push_preview_title_placeholder": "Notification title",
641
+ "send_push_preview_body_placeholder": "Your message body shows here",
642
+ "device_preview_title": "Device Preview (web only)",
643
+ "send_push_section_recipients": "Recipients",
644
+ "send_push_section_content": "Content",
645
+ "send_push_section_advanced": "Advanced",
646
+ "send_push_audience_all": "Everyone",
647
+ "send_push_audience_specific": "Specific",
648
+ "send_push_audience_all_hint": "The notification will be sent to every subscribed user."
726
649
  }
650
+ },
651
+ "rate_banner": {
652
+ "title": "Do you like our app?",
653
+ "text": "Do you have a minute to leave us a review on the store?",
654
+ "rate_button": "Yes sure!",
655
+ "later_button": "Later..."
656
+ },
657
+ "notifications": {
658
+ "title": "Notifications",
659
+ "empty_title": "No notifications yet",
660
+ "empty_subtitle": "Stay tuned for updates",
661
+ "error_fetching": "Error fetching notifications",
662
+ "push_title": "Push notifications",
663
+ "push_subtitle_enabled": "You are receiving alerts",
664
+ "push_subtitle_disabled": "Tap to enable in Settings",
665
+ "push_subtitle_waiting": "Enable to stay in the loop",
666
+ "mark_all_read": "Mark as read",
667
+ "see_all": "See all",
668
+ "group_today": "Today",
669
+ "group_yesterday": "Yesterday",
670
+ "group_older": "Older",
671
+ "empty_cta": "Enable notifications",
672
+ "empty_cta_open_settings": "Open settings",
673
+ "delete_all": "Delete all",
674
+ "options": "Options",
675
+ "delete_all_confirm_title": "Delete all notifications?",
676
+ "delete_all_confirm_message": "This will permanently remove every notification from your account. This cannot be undone.",
677
+ "delete_action": "Yes, delete",
678
+ "cancel_action": "Cancel",
679
+ "deleted_one": "Notification deleted",
680
+ "deleted_all": "All notifications deleted"
681
+ },
682
+ "bottom_router": {
683
+ "fake_page_text": "This is a fake page"
684
+ },
685
+ "ai_chat": {
686
+ "title": "AI Assistant",
687
+ "empty_state": "Start a conversation with your assistant.",
688
+ "hint": "Ask something...",
689
+ "error_not_configured": "The assistant isn't available yet. Please try again later.",
690
+ "error_no_reply": "We couldn't get a reply. Please try again.",
691
+ "error_network": "Could not reach the AI assistant.",
692
+ "new_conversation": "New conversation",
693
+ "conversations_empty": "No conversations yet",
694
+ "no_conversation_selected": "Pick a conversation, or start a new one.",
695
+ "delete_title": "Delete conversation?",
696
+ "delete_message": "This conversation and all its messages will be permanently deleted.",
697
+ "delete_cancel": "Cancel",
698
+ "delete_confirm": "Yes, delete"
699
+ },
700
+ "phone_auth": {
701
+ "title_input": "Phone Authentication",
702
+ "subtitle_input": "Enter your phone number",
703
+ "description_input": "We will send you a verification code to confirm your identity",
704
+ "phone_label": "Phone Number",
705
+ "phone_hint": "+1 (555) 123-4567",
706
+ "error_empty": "Please enter a phone number",
707
+ "error_invalid": "Please enter a valid phone number",
708
+ "continue_btn": "Continue",
709
+ "title_verify": "Verify code",
710
+ "verification_code": "Verification Code",
711
+ "code_sent": "We have sent a verification code to $phone",
712
+ "signin_success_title": "All set",
713
+ "signin_success_text": "You're now signed in with your phone number",
714
+ "verify_code": "Verify Code",
715
+ "resend_code": "Resend Code",
716
+ "enter_all_digits": "Please enter all 6 digits"
717
+ },
718
+ "recover_password_result": {
719
+ "title": "Email sent",
720
+ "description": "We sent you an email with a link to reset your password",
721
+ "back_to_signin": "Get back to Sign in",
722
+ "note": "Note: If you don't receive an email, please check your spam folder"
723
+ },
724
+ "page_not_found": {
725
+ "title": "404 - Page not found"
726
+ },
727
+ "devInspector": {
728
+ "copied": "$widget copied to clipboard",
729
+ "activate": "Activate widget inspector",
730
+ "deactivate": "Deactivate widget inspector",
731
+ "copyForAi": "Copy for AI",
732
+ "selectWidgetFirst": "Select a widget on screen first, then tap Copy.",
733
+ "inspectorHint": "Tap the UI to select a widget (purple outline). Then copy for your AI prompt.",
734
+ "statusActive": "Inspecting",
735
+ "fieldSize": "Size",
736
+ "fieldColor": "Color",
737
+ "copyJson": "Copy JSON"
738
+ },
739
+ "webDevicePreview": {
740
+ "frame": "Frame",
741
+ "darkBackground": "Dark background",
742
+ "darkTheme": "Dark theme",
743
+ "landscape": "Landscape",
744
+ "textScale": "Text scale",
745
+ "screenshot": "Screenshot",
746
+ "imageCopied": "Image copied — paste it in chat",
747
+ "imageDownloaded": "Image downloaded"
748
+ },
749
+ "biometric_prompt": {
750
+ "title_ios_face": "Turn on Face ID for App Lock?",
751
+ "title_ios_touch": "Turn on Touch ID for App Lock?",
752
+ "title_ios_mixed": "Turn on Face ID/Touch ID for App Lock?",
753
+ "title_android_face": "Turn on App Lock with face unlock?",
754
+ "title_android_fingerprint": "Turn on App Lock with fingerprint?",
755
+ "title_android_mixed": "Protect the app with your phone?",
756
+ "message_ios_face": "You'll confirm with Face ID when you open the app—you stay signed in.",
757
+ "message_ios_touch": "You'll confirm with Touch ID when you open the app—you stay signed in.",
758
+ "message_ios_mixed": "When you launch you'll confirm with Face ID or Touch ID—you stay signed in.",
759
+ "message_android_face": "You'll confirm with face unlock when you open—you stay signed in.",
760
+ "message_android_fingerprint": "You'll confirm with fingerprint when you open—you stay signed in.",
761
+ "title_android_face_and_fingerprint": "Turn on App Lock with fingerprint or face?",
762
+ "message_android_face_and_fingerprint": "Either works—you stay signed in.",
763
+ "message_android_mixed": "A quick check when you open—you stay signed in.",
764
+ "not_now": "Not now",
765
+ "enable": "Turn on"
766
+ },
767
+ "home_widget": {
768
+ "greeting_morning": "Good morning",
769
+ "greeting_afternoon": "Good afternoon",
770
+ "greeting_evening": "Good evening",
771
+ "title_with_name": "Hi, $name!",
772
+ "title_default": "Hi there!",
773
+ "title_logged_out": "We'll be here when you're back",
774
+ "plan_free": "Free plan",
775
+ "plan_pro": "PRO",
776
+ "quote": "Your time is limited.\nDon't live someone else's life.\nHave the courage to follow your intuition.\nEverything else is secondary.",
777
+ "quote_author": "Steve Jobs"
778
+ }
727
779
  }
728
-