rothzerg 0.1.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 (341) hide show
  1. package/dist/cli.js +949 -0
  2. package/package.json +27 -0
  3. package/readme.md +0 -0
  4. package/templates/_base-website/App.tsx +59 -0
  5. package/templates/_base-website/InitialDataContext.tsx +21 -0
  6. package/templates/_base-website/_gitignore +5 -0
  7. package/templates/_base-website/client.tsx +26 -0
  8. package/templates/_base-website/components/DeepLinkLayout.css +41 -0
  9. package/templates/_base-website/components/DeepLinkLayout.tsx +39 -0
  10. package/templates/_base-website/components/DownloadSection.css +60 -0
  11. package/templates/_base-website/components/DownloadSection.tsx +61 -0
  12. package/templates/_base-website/components/SiteFeaturesSection.tsx +68 -0
  13. package/templates/_base-website/components/SiteFooter.tsx +29 -0
  14. package/templates/_base-website/components/SiteHeroSection.tsx +30 -0
  15. package/templates/_base-website/components/SiteHighlightsSection.tsx +38 -0
  16. package/templates/_base-website/components/SiteLanguageSwitcher.tsx +9 -0
  17. package/templates/_base-website/components/SiteNavigation.tsx +24 -0
  18. package/templates/_base-website/config.ts +78 -0
  19. package/templates/_base-website/data/blog/authors.json +18 -0
  20. package/templates/_base-website/data/blog/categories.json +53 -0
  21. package/templates/_base-website/data/blog/posts.json +29 -0
  22. package/templates/_base-website/data/blog/tags.json +86 -0
  23. package/templates/_base-website/i18n/config.ts +60 -0
  24. package/templates/_base-website/i18n/sections/blog/_index.ts +41 -0
  25. package/templates/_base-website/i18n/sections/blog/ar.ts +24 -0
  26. package/templates/_base-website/i18n/sections/blog/de.ts +24 -0
  27. package/templates/_base-website/i18n/sections/blog/en.ts +24 -0
  28. package/templates/_base-website/i18n/sections/blog/es.ts +24 -0
  29. package/templates/_base-website/i18n/sections/blog/fr.ts +24 -0
  30. package/templates/_base-website/i18n/sections/blog/hi.ts +24 -0
  31. package/templates/_base-website/i18n/sections/blog/id.ts +24 -0
  32. package/templates/_base-website/i18n/sections/blog/it.ts +24 -0
  33. package/templates/_base-website/i18n/sections/blog/ja.ts +24 -0
  34. package/templates/_base-website/i18n/sections/blog/ko.ts +24 -0
  35. package/templates/_base-website/i18n/sections/blog/nl.ts +24 -0
  36. package/templates/_base-website/i18n/sections/blog/pl.ts +24 -0
  37. package/templates/_base-website/i18n/sections/blog/pt.ts +24 -0
  38. package/templates/_base-website/i18n/sections/blog/ru.ts +24 -0
  39. package/templates/_base-website/i18n/sections/blog/sv.ts +24 -0
  40. package/templates/_base-website/i18n/sections/blog/th.ts +24 -0
  41. package/templates/_base-website/i18n/sections/blog/tr.ts +24 -0
  42. package/templates/_base-website/i18n/sections/blog/vi.ts +24 -0
  43. package/templates/_base-website/i18n/sections/blog/zh.ts +24 -0
  44. package/templates/_base-website/i18n/sections/common/_index.ts +41 -0
  45. package/templates/_base-website/i18n/sections/common/ar.ts +29 -0
  46. package/templates/_base-website/i18n/sections/common/de.ts +29 -0
  47. package/templates/_base-website/i18n/sections/common/en.ts +29 -0
  48. package/templates/_base-website/i18n/sections/common/es.ts +29 -0
  49. package/templates/_base-website/i18n/sections/common/fr.ts +29 -0
  50. package/templates/_base-website/i18n/sections/common/hi.ts +29 -0
  51. package/templates/_base-website/i18n/sections/common/id.ts +29 -0
  52. package/templates/_base-website/i18n/sections/common/it.ts +29 -0
  53. package/templates/_base-website/i18n/sections/common/ja.ts +29 -0
  54. package/templates/_base-website/i18n/sections/common/ko.ts +29 -0
  55. package/templates/_base-website/i18n/sections/common/nl.ts +29 -0
  56. package/templates/_base-website/i18n/sections/common/pl.ts +29 -0
  57. package/templates/_base-website/i18n/sections/common/pt.ts +29 -0
  58. package/templates/_base-website/i18n/sections/common/ru.ts +29 -0
  59. package/templates/_base-website/i18n/sections/common/sv.ts +29 -0
  60. package/templates/_base-website/i18n/sections/common/th.ts +29 -0
  61. package/templates/_base-website/i18n/sections/common/tr.ts +29 -0
  62. package/templates/_base-website/i18n/sections/common/vi.ts +29 -0
  63. package/templates/_base-website/i18n/sections/common/zh.ts +29 -0
  64. package/templates/_base-website/i18n/sections/deepLink/_index.ts +41 -0
  65. package/templates/_base-website/i18n/sections/deepLink/ar.ts +14 -0
  66. package/templates/_base-website/i18n/sections/deepLink/de.ts +14 -0
  67. package/templates/_base-website/i18n/sections/deepLink/en.ts +14 -0
  68. package/templates/_base-website/i18n/sections/deepLink/es.ts +14 -0
  69. package/templates/_base-website/i18n/sections/deepLink/fr.ts +14 -0
  70. package/templates/_base-website/i18n/sections/deepLink/hi.ts +14 -0
  71. package/templates/_base-website/i18n/sections/deepLink/id.ts +14 -0
  72. package/templates/_base-website/i18n/sections/deepLink/it.ts +14 -0
  73. package/templates/_base-website/i18n/sections/deepLink/ja.ts +14 -0
  74. package/templates/_base-website/i18n/sections/deepLink/ko.ts +14 -0
  75. package/templates/_base-website/i18n/sections/deepLink/nl.ts +14 -0
  76. package/templates/_base-website/i18n/sections/deepLink/pl.ts +14 -0
  77. package/templates/_base-website/i18n/sections/deepLink/pt.ts +14 -0
  78. package/templates/_base-website/i18n/sections/deepLink/ru.ts +14 -0
  79. package/templates/_base-website/i18n/sections/deepLink/sv.ts +14 -0
  80. package/templates/_base-website/i18n/sections/deepLink/th.ts +14 -0
  81. package/templates/_base-website/i18n/sections/deepLink/tr.ts +14 -0
  82. package/templates/_base-website/i18n/sections/deepLink/vi.ts +14 -0
  83. package/templates/_base-website/i18n/sections/deepLink/zh.ts +14 -0
  84. package/templates/_base-website/i18n/sections/home/_index.ts +41 -0
  85. package/templates/_base-website/i18n/sections/home/ar.ts +85 -0
  86. package/templates/_base-website/i18n/sections/home/de.ts +85 -0
  87. package/templates/_base-website/i18n/sections/home/en.ts +85 -0
  88. package/templates/_base-website/i18n/sections/home/es.ts +85 -0
  89. package/templates/_base-website/i18n/sections/home/fr.ts +85 -0
  90. package/templates/_base-website/i18n/sections/home/hi.ts +85 -0
  91. package/templates/_base-website/i18n/sections/home/id.ts +85 -0
  92. package/templates/_base-website/i18n/sections/home/it.ts +85 -0
  93. package/templates/_base-website/i18n/sections/home/ja.ts +85 -0
  94. package/templates/_base-website/i18n/sections/home/ko.ts +85 -0
  95. package/templates/_base-website/i18n/sections/home/nl.ts +85 -0
  96. package/templates/_base-website/i18n/sections/home/pl.ts +85 -0
  97. package/templates/_base-website/i18n/sections/home/pt.ts +85 -0
  98. package/templates/_base-website/i18n/sections/home/ru.ts +85 -0
  99. package/templates/_base-website/i18n/sections/home/sv.ts +85 -0
  100. package/templates/_base-website/i18n/sections/home/th.ts +85 -0
  101. package/templates/_base-website/i18n/sections/home/tr.ts +85 -0
  102. package/templates/_base-website/i18n/sections/home/vi.ts +85 -0
  103. package/templates/_base-website/i18n/sections/home/zh.ts +85 -0
  104. package/templates/_base-website/i18n/sections/support/_index.ts +41 -0
  105. package/templates/_base-website/i18n/sections/support/ar.ts +37 -0
  106. package/templates/_base-website/i18n/sections/support/de.ts +37 -0
  107. package/templates/_base-website/i18n/sections/support/en.ts +37 -0
  108. package/templates/_base-website/i18n/sections/support/es.ts +37 -0
  109. package/templates/_base-website/i18n/sections/support/fr.ts +37 -0
  110. package/templates/_base-website/i18n/sections/support/hi.ts +37 -0
  111. package/templates/_base-website/i18n/sections/support/id.ts +37 -0
  112. package/templates/_base-website/i18n/sections/support/it.ts +37 -0
  113. package/templates/_base-website/i18n/sections/support/ja.ts +37 -0
  114. package/templates/_base-website/i18n/sections/support/ko.ts +37 -0
  115. package/templates/_base-website/i18n/sections/support/nl.ts +37 -0
  116. package/templates/_base-website/i18n/sections/support/pl.ts +37 -0
  117. package/templates/_base-website/i18n/sections/support/pt.ts +37 -0
  118. package/templates/_base-website/i18n/sections/support/ru.ts +37 -0
  119. package/templates/_base-website/i18n/sections/support/sv.ts +37 -0
  120. package/templates/_base-website/i18n/sections/support/th.ts +37 -0
  121. package/templates/_base-website/i18n/sections/support/tr.ts +37 -0
  122. package/templates/_base-website/i18n/sections/support/vi.ts +37 -0
  123. package/templates/_base-website/i18n/sections/support/zh.ts +37 -0
  124. package/templates/_base-website/i18n/translations.ts +25 -0
  125. package/templates/_base-website/index.ts +460 -0
  126. package/templates/_base-website/pages/404.tsx +35 -0
  127. package/templates/_base-website/pages/blog/author.tsx +97 -0
  128. package/templates/_base-website/pages/blog/category.tsx +89 -0
  129. package/templates/_base-website/pages/blog/index.tsx +81 -0
  130. package/templates/_base-website/pages/blog/post.tsx +110 -0
  131. package/templates/_base-website/pages/blog/tag.tsx +86 -0
  132. package/templates/_base-website/pages/custom-pages/example.tsx +54 -0
  133. package/templates/_base-website/pages/index.tsx +29 -0
  134. package/templates/_base-website/pages/privacy.tsx +45 -0
  135. package/templates/_base-website/pages/support.tsx +154 -0
  136. package/templates/_base-website/pages/terms.tsx +68 -0
  137. package/templates/_base-website/public/images/16.png +0 -0
  138. package/templates/_base-website/public/images/apple-touch-icon.png +0 -0
  139. package/templates/_base-website/public/images/favicon-32x32.png +0 -0
  140. package/templates/_base-website/public/images/favicon.png +0 -0
  141. package/templates/_base-website/public/images/logo_dark.svg +6 -0
  142. package/templates/_base-website/public/images/logo_light.svg +6 -0
  143. package/templates/_base-website/public/images/og-image.png +0 -0
  144. package/templates/_base-website/public/images/screenshots/ar_dashboard.jpg +0 -0
  145. package/templates/_base-website/public/images/screenshots/de_dashboard.jpg +0 -0
  146. package/templates/_base-website/public/images/screenshots/en_dashboard.jpg +0 -0
  147. package/templates/_base-website/public/images/screenshots/es_dashboard.jpg +0 -0
  148. package/templates/_base-website/public/images/screenshots/fr_dashboard.jpg +0 -0
  149. package/templates/_base-website/public/images/screenshots/hi_dashboard.jpg +0 -0
  150. package/templates/_base-website/public/images/screenshots/id_dashboard.jpg +0 -0
  151. package/templates/_base-website/public/images/screenshots/it_dashboard.jpg +0 -0
  152. package/templates/_base-website/public/images/screenshots/ja_dashboard.jpg +0 -0
  153. package/templates/_base-website/public/images/screenshots/ko_dashboard.jpg +0 -0
  154. package/templates/_base-website/public/images/screenshots/nl_dashboard.jpg +0 -0
  155. package/templates/_base-website/public/images/screenshots/pl_dashboard.jpg +0 -0
  156. package/templates/_base-website/public/images/screenshots/pt_dashboard.jpg +0 -0
  157. package/templates/_base-website/public/images/screenshots/ru_dashboard.jpg +0 -0
  158. package/templates/_base-website/public/images/screenshots/sv_dashboard.jpg +0 -0
  159. package/templates/_base-website/public/images/screenshots/th_dashboard.jpg +0 -0
  160. package/templates/_base-website/public/images/screenshots/tr_dashboard.jpg +0 -0
  161. package/templates/_base-website/public/images/screenshots/vi_dashboard.jpg +0 -0
  162. package/templates/_base-website/public/images/screenshots/zh_dashboard.jpg +0 -0
  163. package/templates/_base-website/rothzerg.template.json +63 -0
  164. package/templates/_base-website/styles/404.css +32 -0
  165. package/templates/_base-website/styles/_app.css +131 -0
  166. package/templates/_base-website/styles/_shared.css +194 -0
  167. package/templates/_base-website/styles/index.css +1 -0
  168. package/templates/_base-website/styles/privacy.css +1 -0
  169. package/templates/_base-website/styles/support.css +148 -0
  170. package/templates/_base-website/styles/terms.css +22 -0
  171. package/templates/mobile-app/_gitignore +46 -0
  172. package/templates/mobile-app/analysis_options.yaml +28 -0
  173. package/templates/mobile-app/android/app/build.gradle.kts +56 -0
  174. package/templates/mobile-app/android/app/google-services.json +29 -0
  175. package/templates/mobile-app/android/app/src/debug/AndroidManifest.xml +7 -0
  176. package/templates/mobile-app/android/app/src/main/AndroidManifest.xml +54 -0
  177. package/templates/mobile-app/android/app/src/main/kotlin/com/example/{{projectNameSnake}}/MainActivity.kt +5 -0
  178. package/templates/mobile-app/android/app/src/main/res/drawable/launch_background.xml +12 -0
  179. package/templates/mobile-app/android/app/src/main/res/drawable-v21/launch_background.xml +12 -0
  180. package/templates/mobile-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  181. package/templates/mobile-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  182. package/templates/mobile-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  183. package/templates/mobile-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  184. package/templates/mobile-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  185. package/templates/mobile-app/android/app/src/main/res/values/styles.xml +18 -0
  186. package/templates/mobile-app/android/app/src/main/res/values-night/styles.xml +18 -0
  187. package/templates/mobile-app/android/app/src/profile/AndroidManifest.xml +7 -0
  188. package/templates/mobile-app/android/build.gradle.kts +24 -0
  189. package/templates/mobile-app/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  190. package/templates/mobile-app/android/gradle.properties +2 -0
  191. package/templates/mobile-app/android/settings.gradle.kts +31 -0
  192. package/templates/mobile-app/assets/icons/logo.png +0 -0
  193. package/templates/mobile-app/assets/icons/logo_dark.svg +5 -0
  194. package/templates/mobile-app/assets/icons/logo_light.svg +5 -0
  195. package/templates/mobile-app/assets/lottie/tick.json +1 -0
  196. package/templates/mobile-app/devtools_options.yaml +3 -0
  197. package/templates/mobile-app/ios/Flutter/AppFrameworkInfo.plist +26 -0
  198. package/templates/mobile-app/ios/Flutter/Debug.xcconfig +2 -0
  199. package/templates/mobile-app/ios/Flutter/Release.xcconfig +2 -0
  200. package/templates/mobile-app/ios/Podfile +46 -0
  201. package/templates/mobile-app/ios/Podfile.lock +1807 -0
  202. package/templates/mobile-app/ios/Runner/AppDelegate.swift +16 -0
  203. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +122 -0
  204. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png +0 -0
  205. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png +0 -0
  206. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png +0 -0
  207. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png +0 -0
  208. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png +0 -0
  209. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png +0 -0
  210. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png +0 -0
  211. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png +0 -0
  212. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png +0 -0
  213. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png +0 -0
  214. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png +0 -0
  215. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png +0 -0
  216. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png +0 -0
  217. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png +0 -0
  218. package/templates/mobile-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png +0 -0
  219. package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +23 -0
  220. package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png +0 -0
  221. package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png +0 -0
  222. package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png +0 -0
  223. package/templates/mobile-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +5 -0
  224. package/templates/mobile-app/ios/Runner/Base.lproj/LaunchScreen.storyboard +37 -0
  225. package/templates/mobile-app/ios/Runner/Base.lproj/Main.storyboard +26 -0
  226. package/templates/mobile-app/ios/Runner/GoogleService-Info.plist +30 -0
  227. package/templates/mobile-app/ios/Runner/Info.plist +70 -0
  228. package/templates/mobile-app/ios/Runner/Runner-Bridging-Header.h +1 -0
  229. package/templates/mobile-app/ios/Runner.xcodeproj/project.pbxproj +772 -0
  230. package/templates/mobile-app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  231. package/templates/mobile-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  232. package/templates/mobile-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
  233. package/templates/mobile-app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +101 -0
  234. package/templates/mobile-app/ios/Runner.xcworkspace/contents.xcworkspacedata +10 -0
  235. package/templates/mobile-app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  236. package/templates/mobile-app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
  237. package/templates/mobile-app/ios/RunnerTests/RunnerTests.swift +12 -0
  238. package/templates/mobile-app/l10n.yaml +5 -0
  239. package/templates/mobile-app/lib/core/config/app_config.dart +76 -0
  240. package/templates/mobile-app/lib/core/constants/app_colors.dart +13 -0
  241. package/templates/mobile-app/lib/core/constants/app_constants.dart +123 -0
  242. package/templates/mobile-app/lib/core/constants/countries.dart +199 -0
  243. package/templates/mobile-app/lib/core/constants/keys.dart +46 -0
  244. package/templates/mobile-app/lib/core/constants/languages.dart +51 -0
  245. package/templates/mobile-app/lib/core/services/admin_service.dart +271 -0
  246. package/templates/mobile-app/lib/core/services/analytics_service.dart +296 -0
  247. package/templates/mobile-app/lib/core/services/auth_service.dart +185 -0
  248. package/templates/mobile-app/lib/core/services/device_service.dart +228 -0
  249. package/templates/mobile-app/lib/core/services/firebase_service.dart +490 -0
  250. package/templates/mobile-app/lib/core/services/in_app_messaging_service.dart +166 -0
  251. package/templates/mobile-app/lib/core/services/logging_service.dart +451 -0
  252. package/templates/mobile-app/lib/core/services/messaging_service.dart +460 -0
  253. package/templates/mobile-app/lib/core/services/remote_config_service.dart +167 -0
  254. package/templates/mobile-app/lib/core/services/revenue_cat_service.dart +364 -0
  255. package/templates/mobile-app/lib/core/services/storage_service.dart +313 -0
  256. package/templates/mobile-app/lib/core/theme/dark_theme.dart +295 -0
  257. package/templates/mobile-app/lib/core/theme/light_theme.dart +296 -0
  258. package/templates/mobile-app/lib/core/utils/formatters.dart +236 -0
  259. package/templates/mobile-app/lib/core/utils/image_picker_helper.dart +78 -0
  260. package/templates/mobile-app/lib/core/utils/validators.dart +292 -0
  261. package/templates/mobile-app/lib/firebase_options.dart +19 -0
  262. package/templates/mobile-app/lib/l10n/app_en.arb +1371 -0
  263. package/templates/mobile-app/lib/l10n/app_localizations.dart +2042 -0
  264. package/templates/mobile-app/lib/l10n/app_localizations_en.dart +1033 -0
  265. package/templates/mobile-app/lib/main.dart +152 -0
  266. package/templates/mobile-app/lib/models/device_model.dart +90 -0
  267. package/templates/mobile-app/lib/models/news_banner.dart +53 -0
  268. package/templates/mobile-app/lib/models/user_model.dart +120 -0
  269. package/templates/mobile-app/lib/providers/admin_provider.dart +67 -0
  270. package/templates/mobile-app/lib/providers/auth_provider.dart +328 -0
  271. package/templates/mobile-app/lib/providers/remote_config_provider.dart +81 -0
  272. package/templates/mobile-app/lib/providers/subscription_provider.dart +67 -0
  273. package/templates/mobile-app/lib/providers/theme_provider.dart +51 -0
  274. package/templates/mobile-app/lib/screens/admin/admin_panel_screen.dart +436 -0
  275. package/templates/mobile-app/lib/screens/admin/admin_panel_user_details_screen.dart +942 -0
  276. package/templates/mobile-app/lib/screens/admin/admin_panel_users_screen.dart +344 -0
  277. package/templates/mobile-app/lib/screens/auth/auth_home_screen.dart +266 -0
  278. package/templates/mobile-app/lib/screens/auth/forgot_password_screen.dart +214 -0
  279. package/templates/mobile-app/lib/screens/auth/login_screen.dart +312 -0
  280. package/templates/mobile-app/lib/screens/auth/profile_setup_screen.dart +157 -0
  281. package/templates/mobile-app/lib/screens/auth/register_screen.dart +288 -0
  282. package/templates/mobile-app/lib/screens/developer/developer_panel_screen.dart +436 -0
  283. package/templates/mobile-app/lib/screens/developer/remote_config_screen.dart +315 -0
  284. package/templates/mobile-app/lib/screens/developer/remote_config_test_screen.dart +461 -0
  285. package/templates/mobile-app/lib/screens/home/home_screen.dart +270 -0
  286. package/templates/mobile-app/lib/screens/legal/privacy_policy_screen.dart +63 -0
  287. package/templates/mobile-app/lib/screens/legal/terms_screen.dart +82 -0
  288. package/templates/mobile-app/lib/screens/main_navigation_screen.dart +85 -0
  289. package/templates/mobile-app/lib/screens/premium/subscription_screen.dart +516 -0
  290. package/templates/mobile-app/lib/screens/profile/edit_profile_screen.dart +246 -0
  291. package/templates/mobile-app/lib/screens/settings/about_app_screen.dart +200 -0
  292. package/templates/mobile-app/lib/screens/settings/cache_manager_screen.dart +400 -0
  293. package/templates/mobile-app/lib/screens/settings/change_password_screen.dart +269 -0
  294. package/templates/mobile-app/lib/screens/settings/delete_account_screen.dart +261 -0
  295. package/templates/mobile-app/lib/screens/settings/settings_screen.dart +400 -0
  296. package/templates/mobile-app/lib/screens/splash/splash_screen.dart +125 -0
  297. package/templates/mobile-app/lib/widgets/app_button.dart +255 -0
  298. package/templates/mobile-app/lib/widgets/app_drawer.dart +207 -0
  299. package/templates/mobile-app/lib/widgets/bottom_sheet_selector.dart +79 -0
  300. package/templates/mobile-app/lib/widgets/button_banner.dart +177 -0
  301. package/templates/mobile-app/lib/widgets/country_picker.dart +169 -0
  302. package/templates/mobile-app/lib/widgets/custom_app_bar.dart +30 -0
  303. package/templates/mobile-app/lib/widgets/email_verification_banner.dart +163 -0
  304. package/templates/mobile-app/lib/widgets/empty_screen.dart +42 -0
  305. package/templates/mobile-app/lib/widgets/language_picker.dart +145 -0
  306. package/templates/mobile-app/lib/widgets/news_banner_widget.dart +264 -0
  307. package/templates/mobile-app/lib/widgets/remote_config/remote_config_widgets.dart +294 -0
  308. package/templates/mobile-app/lib/widgets/section_header.dart +23 -0
  309. package/templates/mobile-app/lib/widgets/success_overlay.dart +117 -0
  310. package/templates/mobile-app/lib/widgets/top_notification.dart +263 -0
  311. package/templates/mobile-app/lib/widgets/user_avatar_picker.dart +58 -0
  312. package/templates/mobile-app/pubspec.yaml +97 -0
  313. package/templates/mobile-app/rothzerg.template.json +43 -0
  314. package/templates/web-app/_gitignore +4 -0
  315. package/templates/web-app/index.html +12 -0
  316. package/templates/web-app/package.json +23 -0
  317. package/templates/web-app/rothzerg.template.json +41 -0
  318. package/templates/web-app/src/App.css +6 -0
  319. package/templates/web-app/src/App.tsx +12 -0
  320. package/templates/web-app/src/index.css +14 -0
  321. package/templates/web-app/src/main.tsx +10 -0
  322. package/templates/web-app/tsconfig.app.json +20 -0
  323. package/templates/web-app/tsconfig.json +7 -0
  324. package/templates/web-app/tsconfig.node.json +18 -0
  325. package/templates/web-app/vite.config.ts +6 -0
  326. package/templates/website-blog/overrides/config.ts +76 -0
  327. package/templates/website-blog/overrides/pages/index.tsx +63 -0
  328. package/templates/website-blog/rothzerg.template.json +29 -0
  329. package/templates/website-business/overrides/App.tsx +49 -0
  330. package/templates/website-business/overrides/components/SiteHeroSection.tsx +33 -0
  331. package/templates/website-business/overrides/config.ts +76 -0
  332. package/templates/website-business/overrides/pages/about.tsx +50 -0
  333. package/templates/website-business/overrides/pages/contact.tsx +61 -0
  334. package/templates/website-business/overrides/pages/index.tsx +37 -0
  335. package/templates/website-business/overrides/pages/services.tsx +70 -0
  336. package/templates/website-business/rothzerg.template.json +18 -0
  337. package/templates/website-mobile/overrides/App.tsx +62 -0
  338. package/templates/website-mobile/overrides/components/SiteHeroSection.tsx +18 -0
  339. package/templates/website-mobile/overrides/config.ts +76 -0
  340. package/templates/website-mobile/overrides/pages/index.tsx +34 -0
  341. package/templates/website-mobile/rothzerg.template.json +64 -0
@@ -0,0 +1,53 @@
1
+ [
2
+ {
3
+ "slug": "web-development",
4
+ "name": {
5
+ "en": "Web Development"
6
+ },
7
+ "description": {
8
+ "en": "Deep-dives into modern web development patterns, frameworks, and best practices."
9
+ },
10
+ "seo": {
11
+ "pageTitle": {
12
+ "en": "Web Development Articles and Tutorials"
13
+ },
14
+ "metaDescription": {
15
+ "en": "In-depth articles on modern web development patterns, frameworks, and best practices for building fast, scalable applications."
16
+ }
17
+ }
18
+ },
19
+ {
20
+ "slug": "performance",
21
+ "name": {
22
+ "en": "Performance"
23
+ },
24
+ "description": {
25
+ "en": "Techniques and tools for building faster, more efficient web applications."
26
+ },
27
+ "seo": {
28
+ "pageTitle": {
29
+ "en": "Web Performance Optimization Guides"
30
+ },
31
+ "metaDescription": {
32
+ "en": "Learn techniques and tools for building faster, more efficient web applications with measurable performance improvements."
33
+ }
34
+ }
35
+ },
36
+ {
37
+ "slug": "seo",
38
+ "name": {
39
+ "en": "SEO"
40
+ },
41
+ "description": {
42
+ "en": "Strategies for improving search engine visibility and organic traffic."
43
+ },
44
+ "seo": {
45
+ "pageTitle": {
46
+ "en": "SEO Strategies for Modern Web Apps"
47
+ },
48
+ "metaDescription": {
49
+ "en": "Practical SEO strategies to improve search engine visibility and drive organic traffic to your web application."
50
+ }
51
+ }
52
+ }
53
+ ]
@@ -0,0 +1,29 @@
1
+ [
2
+ {
3
+ "slug": "fast-multi-site-platform-bun-react",
4
+ "title": {
5
+ "en": "Building a Fast Multi-Site Platform with Bun and React 19"
6
+ },
7
+ "excerpt": {
8
+ "en": "Learn how to architect a blazing-fast, SEO-friendly multi-site web platform using Bun's native HTTP server, React 19 server-side rendering, and a domain-based routing strategy — all without a single framework dependency."
9
+ },
10
+ "content": {
11
+ "en": "<p>Most web frameworks force you into their conventions. Routing, bundling, middleware, deployment — it all happens their way. But what if you could build a multi-site platform that's as fast as a native server, as flexible as raw Node.js, and as ergonomic as the best modern frameworks? That's exactly what we built using <strong>Bun</strong> and <strong>React 19</strong>.</p>\n\n<p>In this post I'll walk through the architecture, the key decisions, and why this stack is a genuinely compelling alternative to Next.js or Remix for hosting multiple sites under one codebase.</p>\n\n<h2>Why Bun?</h2>\n<p>Bun is a JavaScript runtime that ships its own HTTP server, bundler, test runner, and package manager. Compared to Node.js, it starts faster, executes JavaScript faster, and handles file I/O significantly faster — benchmarks consistently show 2–4× better throughput for server-rendered pages.</p>\n<p>More importantly, <code>Bun.serve()</code> is a dead-simple, high-performance HTTP server that lets you handle every request in a single <code>fetch()</code> function — no Express, no Fastify, no middleware stack to configure.</p>\n\n<h2>The Multi-Site Architecture</h2>\n<p>The platform hosts multiple websites under a single Bun process. Each site lives in its own directory under <code>websites/</code> and exports a <code>handleRequest</code> function. The main server uses the incoming hostname to route the request to the right site handler.</p>\n\n<h2>Server-Side Rendering with React 19</h2>\n<p>Each site uses React's <code>renderToString</code> to produce fully-rendered HTML on every request. This gives us several key advantages:</p>\n<ul>\n <li><strong>SEO:</strong> Search engine crawlers receive complete HTML — no JavaScript required.</li>\n <li><strong>Performance:</strong> First Contentful Paint is immediate; no client-side waterfall.</li>\n <li><strong>Hydration:</strong> React takes over on the client for subsequent navigation.</li>\n</ul>\n\n<h2>Getting Started</h2>\n<p>Clone this boilerplate, run <code>bun install</code>, and start the dev server with <code>bun --watch index.ts</code>. Each website folder is self-contained — you can duplicate the boilerplate directory, update the config, and have a new site live in minutes.</p>"
12
+ },
13
+ "coverImage": "https://picsum.photos/seed/tech-coding/1200/630",
14
+ "authorSlug": "emma-rodriguez",
15
+ "categorySlug": "web-development",
16
+ "tagSlugs": [
17
+ "bun",
18
+ "react",
19
+ "ssr",
20
+ "typescript",
21
+ "multi-tenant",
22
+ "seo"
23
+ ],
24
+ "publishedAt": "2026-03-10T10:00:00Z",
25
+ "updatedAt": "2026-03-10T10:00:00Z",
26
+ "status": "published",
27
+ "readingTimeMinutes": 7
28
+ }
29
+ ]
@@ -0,0 +1,86 @@
1
+ [
2
+ {
3
+ "slug": "bun",
4
+ "name": {
5
+ "en": "Bun"
6
+ },
7
+ "seo": {
8
+ "pageTitle": {
9
+ "en": "Bun Runtime Guides and Tutorials"
10
+ },
11
+ "metaDescription": {
12
+ "en": "Learn how to use the Bun JavaScript runtime for fast server-side rendering, bundling, and API development."
13
+ }
14
+ }
15
+ },
16
+ {
17
+ "slug": "react",
18
+ "name": {
19
+ "en": "React"
20
+ },
21
+ "seo": {
22
+ "pageTitle": {
23
+ "en": "React Development Tips and Tutorials"
24
+ },
25
+ "metaDescription": {
26
+ "en": "Explore React development patterns, hooks, server components, and best practices for building modern web applications."
27
+ }
28
+ }
29
+ },
30
+ {
31
+ "slug": "ssr",
32
+ "name": {
33
+ "en": "SSR"
34
+ },
35
+ "seo": {
36
+ "pageTitle": {
37
+ "en": "Server-Side Rendering Guides"
38
+ },
39
+ "metaDescription": {
40
+ "en": "Learn server-side rendering techniques for better SEO, faster initial loads, and improved user experience."
41
+ }
42
+ }
43
+ },
44
+ {
45
+ "slug": "typescript",
46
+ "name": {
47
+ "en": "TypeScript"
48
+ },
49
+ "seo": {
50
+ "pageTitle": {
51
+ "en": "TypeScript Tips and Best Practices"
52
+ },
53
+ "metaDescription": {
54
+ "en": "TypeScript guides, tips, and best practices for building type-safe, maintainable web applications."
55
+ }
56
+ }
57
+ },
58
+ {
59
+ "slug": "multi-tenant",
60
+ "name": {
61
+ "en": "Multi-Tenant"
62
+ },
63
+ "seo": {
64
+ "pageTitle": {
65
+ "en": "Multi-Tenant Architecture Patterns"
66
+ },
67
+ "metaDescription": {
68
+ "en": "Explore multi-tenant architecture patterns for hosting multiple sites or customers from a single codebase."
69
+ }
70
+ }
71
+ },
72
+ {
73
+ "slug": "seo",
74
+ "name": {
75
+ "en": "SEO"
76
+ },
77
+ "seo": {
78
+ "pageTitle": {
79
+ "en": "SEO for Developers"
80
+ },
81
+ "metaDescription": {
82
+ "en": "Technical SEO tips and strategies for developers building search-engine-friendly web applications."
83
+ }
84
+ }
85
+ }
86
+ ]
@@ -0,0 +1,60 @@
1
+ import i18n, { createInstance } from "i18next";
2
+ import { initReactI18next } from "react-i18next";
3
+ import { translations } from "./translations";
4
+ import { DEFAULT_LANGUAGE, SUPPORTED_LANGUAGES } from "../config";
5
+
6
+ export type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number];
7
+ export const RTL_LANGUAGES: SupportedLanguage[] = ["ar"];
8
+
9
+ // Client-side singleton instance
10
+ let clientInstance: typeof i18n | null = null;
11
+
12
+ export function getI18nInstance(language: SupportedLanguage = DEFAULT_LANGUAGE) {
13
+ // For client-side, use singleton
14
+ // @ts-ignore - window check for client vs server detection
15
+ const isClient = typeof globalThis !== 'undefined' && typeof globalThis.window !== 'undefined';
16
+
17
+ if (isClient) {
18
+ if (!clientInstance) {
19
+ clientInstance = i18n.createInstance();
20
+ clientInstance
21
+ .use(initReactI18next)
22
+ .init({
23
+ resources: translations,
24
+ lng: language,
25
+ fallbackLng: DEFAULT_LANGUAGE,
26
+ interpolation: {
27
+ escapeValue: false,
28
+ },
29
+ react: {
30
+ useSuspense: false,
31
+ },
32
+ showSupportNotice: false,
33
+ });
34
+ }
35
+ return clientInstance;
36
+ }
37
+
38
+ // For server-side, create a new instance for each request
39
+ const serverInstance = createInstance();
40
+ serverInstance
41
+ .use(initReactI18next)
42
+ .init({
43
+ resources: translations,
44
+ lng: language,
45
+ fallbackLng: DEFAULT_LANGUAGE,
46
+ interpolation: {
47
+ escapeValue: false,
48
+ },
49
+ react: {
50
+ useSuspense: false,
51
+ },
52
+ showSupportNotice: false,
53
+ });
54
+
55
+ return serverInstance;
56
+ }
57
+
58
+ export function isValidLanguage(lang: string): lang is SupportedLanguage {
59
+ return SUPPORTED_LANGUAGES.includes(lang as SupportedLanguage);
60
+ }
@@ -0,0 +1,41 @@
1
+ import { blogEN } from "./en.ts";
2
+ import { blogDE } from "./de.ts";
3
+ import { blogFR } from "./fr.ts";
4
+ import { blogIT } from "./it.ts";
5
+ import { blogJA } from "./ja.ts";
6
+ import { blogKO } from "./ko.ts";
7
+ import { blogTR } from "./tr.ts";
8
+ import { blogZH } from "./zh.ts";
9
+ import { blogES } from "./es.ts";
10
+ import { blogPT } from "./pt.ts";
11
+ import { blogHI } from "./hi.ts";
12
+ import { blogAR } from "./ar.ts";
13
+ import { blogRU } from "./ru.ts";
14
+ import { blogPL } from "./pl.ts";
15
+ import { blogNL } from "./nl.ts";
16
+ import { blogID } from "./id.ts";
17
+ import { blogVI } from "./vi.ts";
18
+ import { blogTH } from "./th.ts";
19
+ import { blogSV } from "./sv.ts";
20
+
21
+ export const blogTranslations: Record<string, any> = {
22
+ "en": blogEN,
23
+ "de": blogDE,
24
+ "fr": blogFR,
25
+ "it": blogIT,
26
+ "ja": blogJA,
27
+ "ko": blogKO,
28
+ "tr": blogTR,
29
+ "zh": blogZH,
30
+ "es": blogES,
31
+ "pt": blogPT,
32
+ "hi": blogHI,
33
+ "ar": blogAR,
34
+ "ru": blogRU,
35
+ "pl": blogPL,
36
+ "nl": blogNL,
37
+ "id": blogID,
38
+ "vi": blogVI,
39
+ "th": blogTH,
40
+ "sv": blogSV,
41
+ };
@@ -0,0 +1,24 @@
1
+ export const blogAR: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← المدونة",
4
+ "readArticle": "اقرأ المقال →",
5
+ "minRead": "دقيقة قراءة",
6
+ "post": "مقال",
7
+ "posts": "مقالات",
8
+ "indexSubtitle": "مقالات ودروس تعليمية ورؤى حول بناء تطبيقات الويب الحديثة.",
9
+ "noPostsYet": "لا توجد مقالات بعد. تحقق مجدداً قريباً.",
10
+ "noPostsTag": "لم يتم العثور على مقالات لهذا الوسم.",
11
+ "noPostsCategory": "لم يتم العثور على مقالات في هذه الفئة.",
12
+ "noPostsAuthor": "لا توجد مقالات لهذا الكاتب بعد.",
13
+ "postNotFound": "المقال غير موجود",
14
+ "authorNotFound": "الكاتب غير موجود",
15
+ "tagLabel": "وسم",
16
+ "categoryLabel": "فئة",
17
+ "authorLabel": "كاتب",
18
+ "unknownTag": "وسم غير معروف",
19
+ "unknownCategory": "فئة غير معروفة",
20
+ "sidebarRecentPosts": "المنشورات الأخيرة",
21
+ "sidebarCategories": "الفئات",
22
+ "sidebarTags": "العلامات"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogDE: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Artikel lesen →",
5
+ "minRead": "Min. Lesezeit",
6
+ "post": "Beitrag",
7
+ "posts": "Beiträge",
8
+ "indexSubtitle": "Artikel, Tutorials und Einblicke zur Entwicklung moderner Webanwendungen.",
9
+ "noPostsYet": "Noch keine Beiträge. Schau bald wieder vorbei.",
10
+ "noPostsTag": "Keine Beiträge für dieses Tag gefunden.",
11
+ "noPostsCategory": "Keine Beiträge in dieser Kategorie gefunden.",
12
+ "noPostsAuthor": "Noch keine Beiträge von diesem Autor.",
13
+ "postNotFound": "Beitrag nicht gefunden",
14
+ "authorNotFound": "Autor nicht gefunden",
15
+ "tagLabel": "Etikett",
16
+ "categoryLabel": "Kategorie",
17
+ "authorLabel": "Autor",
18
+ "unknownTag": "Unbekanntes Tag",
19
+ "unknownCategory": "Unbekannte Kategorie",
20
+ "sidebarRecentPosts": "Neueste Beiträge",
21
+ "sidebarCategories": "Kategorien",
22
+ "sidebarTags": "Tags"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogEN: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Read article →",
5
+ "minRead": "min read",
6
+ "post": "post",
7
+ "posts": "posts",
8
+ "indexSubtitle": "Articles, tutorials, and insights on building modern web applications.",
9
+ "noPostsYet": "No posts yet. Check back soon.",
10
+ "noPostsTag": "No posts found for this tag.",
11
+ "noPostsCategory": "No posts found in this category.",
12
+ "noPostsAuthor": "No posts by this author yet.",
13
+ "postNotFound": "Post not found",
14
+ "authorNotFound": "Author not found",
15
+ "tagLabel": "Tag",
16
+ "categoryLabel": "Category",
17
+ "authorLabel": "Author",
18
+ "unknownTag": "Unknown Tag",
19
+ "unknownCategory": "Unknown Category",
20
+ "sidebarRecentPosts": "Recent Posts",
21
+ "sidebarCategories": "Categories",
22
+ "sidebarTags": "Tags"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogES: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Leer artículo →",
5
+ "minRead": "min de lectura",
6
+ "post": "artículo",
7
+ "posts": "artículos",
8
+ "indexSubtitle": "Artículos, tutoriales e insights sobre el desarrollo de aplicaciones web modernas.",
9
+ "noPostsYet": "Sin artículos aún. Vuelve pronto.",
10
+ "noPostsTag": "No se encontraron artículos para esta etiqueta.",
11
+ "noPostsCategory": "No se encontraron artículos en esta categoría.",
12
+ "noPostsAuthor": "Sin artículos de este autor aún.",
13
+ "postNotFound": "Artículo no encontrado",
14
+ "authorNotFound": "Autor no encontrado",
15
+ "tagLabel": "Etiqueta",
16
+ "categoryLabel": "Categoría",
17
+ "authorLabel": "Autor",
18
+ "unknownTag": "Etiqueta desconocida",
19
+ "unknownCategory": "Categoría desconocida",
20
+ "sidebarRecentPosts": "Artículos recientes",
21
+ "sidebarCategories": "Categorías",
22
+ "sidebarTags": "Etiquetas"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogFR: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Lire l'article →",
5
+ "minRead": "min de lecture",
6
+ "post": "article",
7
+ "posts": "articles",
8
+ "indexSubtitle": "Articles, tutoriels et insights sur la création d'applications web modernes.",
9
+ "noPostsYet": "Aucun article pour l'instant. Revenez bientôt.",
10
+ "noPostsTag": "Aucun article trouvé pour ce tag.",
11
+ "noPostsCategory": "Aucun article trouvé dans cette catégorie.",
12
+ "noPostsAuthor": "Aucun article de cet auteur pour l'instant.",
13
+ "postNotFound": "Article non trouvé",
14
+ "authorNotFound": "Auteur non trouvé",
15
+ "tagLabel": "Tag",
16
+ "categoryLabel": "Catégorie",
17
+ "authorLabel": "Auteur",
18
+ "unknownTag": "Tag inconnu",
19
+ "unknownCategory": "Catégorie inconnue",
20
+ "sidebarRecentPosts": "Articles récents",
21
+ "sidebarCategories": "Catégories",
22
+ "sidebarTags": "Tags"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogHI: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← ब्लॉग",
4
+ "readArticle": "लेख पढ़ें →",
5
+ "minRead": "मिनट पढ़ें",
6
+ "post": "पोस्ट",
7
+ "posts": "पोस्ट",
8
+ "indexSubtitle": "आधुनिक वेब अनुप्रयोग बनाने पर लेख, ट्यूटोरियल और अंतर्दृष्टि।",
9
+ "noPostsYet": "अभी तक कोई पोस्ट नहीं। जल्द वापस आएं।",
10
+ "noPostsTag": "इस टैग के लिए कोई पोस्ट नहीं मिली।",
11
+ "noPostsCategory": "इस श्रेणी में कोई पोस्ट नहीं मिली।",
12
+ "noPostsAuthor": "इस लेखक की अभी तक कोई पोस्ट नहीं।",
13
+ "postNotFound": "पोस्ट नहीं मिली",
14
+ "authorNotFound": "लेखक नहीं मिला",
15
+ "tagLabel": "टैग",
16
+ "categoryLabel": "श्रेणी",
17
+ "authorLabel": "लेखक",
18
+ "unknownTag": "अज्ञात टैग",
19
+ "unknownCategory": "अज्ञात श्रेणी",
20
+ "sidebarRecentPosts": "हाल की पोस्ट",
21
+ "sidebarCategories": "श्रेणियाँ",
22
+ "sidebarTags": "टैग"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogID: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Baca artikel →",
5
+ "minRead": "menit baca",
6
+ "post": "artikel",
7
+ "posts": "artikel",
8
+ "indexSubtitle": "Artikel, tutorial, dan wawasan tentang membangun aplikasi web modern.",
9
+ "noPostsYet": "Belum ada artikel. Kunjungi lagi nanti.",
10
+ "noPostsTag": "Tidak ada artikel ditemukan untuk tag ini.",
11
+ "noPostsCategory": "Tidak ada artikel ditemukan dalam kategori ini.",
12
+ "noPostsAuthor": "Penulis ini belum memiliki artikel.",
13
+ "postNotFound": "Artikel tidak ditemukan",
14
+ "authorNotFound": "Penulis tidak ditemukan",
15
+ "tagLabel": "Tag",
16
+ "categoryLabel": "Kategori",
17
+ "authorLabel": "Penulis",
18
+ "unknownTag": "Tag tidak dikenal",
19
+ "unknownCategory": "Kategori tidak dikenal",
20
+ "sidebarRecentPosts": "Postingan Terbaru",
21
+ "sidebarCategories": "Kategori",
22
+ "sidebarTags": "Tag"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogIT: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Leggi l'articolo →",
5
+ "minRead": "min di lettura",
6
+ "post": "articolo",
7
+ "posts": "articoli",
8
+ "indexSubtitle": "Articoli, tutorial e approfondimenti sullo sviluppo di applicazioni web moderne.",
9
+ "noPostsYet": "Nessun articolo ancora. Torna presto.",
10
+ "noPostsTag": "Nessun articolo trovato per questo tag.",
11
+ "noPostsCategory": "Nessun articolo trovato in questa categoria.",
12
+ "noPostsAuthor": "Nessun articolo di questo autore ancora.",
13
+ "postNotFound": "Articolo non trovato",
14
+ "authorNotFound": "Autore non trovato",
15
+ "tagLabel": "Tag",
16
+ "categoryLabel": "Categoria",
17
+ "authorLabel": "Autore",
18
+ "unknownTag": "Tag sconosciuto",
19
+ "unknownCategory": "Categoria sconosciuta",
20
+ "sidebarRecentPosts": "Articoli recenti",
21
+ "sidebarCategories": "Categorie",
22
+ "sidebarTags": "Tag"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogJA: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← ブログ",
4
+ "readArticle": "記事を読む →",
5
+ "minRead": "分で読める",
6
+ "post": "記事",
7
+ "posts": "記事",
8
+ "indexSubtitle": "モダンなウェブアプリケーション構築に関する記事、チュートリアル、インサイト。",
9
+ "noPostsYet": "まだ記事はありません。後でまたご確認ください。",
10
+ "noPostsTag": "このタグの記事が見つかりませんでした。",
11
+ "noPostsCategory": "このカテゴリの記事が見つかりませんでした。",
12
+ "noPostsAuthor": "この著者の記事はまだありません。",
13
+ "postNotFound": "記事が見つかりません",
14
+ "authorNotFound": "著者が見つかりません",
15
+ "tagLabel": "タグ",
16
+ "categoryLabel": "カテゴリ",
17
+ "authorLabel": "著者",
18
+ "unknownTag": "不明なタグ",
19
+ "unknownCategory": "不明なカテゴリ",
20
+ "sidebarRecentPosts": "最近の投稿",
21
+ "sidebarCategories": "カテゴリー",
22
+ "sidebarTags": "タグ"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogKO: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← 블로그",
4
+ "readArticle": "기사 읽기 →",
5
+ "minRead": "분 읽기",
6
+ "post": "게시물",
7
+ "posts": "게시물",
8
+ "indexSubtitle": "현대적인 웹 애플리케이션 구축에 관한 기사, 튜토리얼, 인사이트.",
9
+ "noPostsYet": "아직 게시물이 없습니다. 나중에 다시 확인하세요.",
10
+ "noPostsTag": "이 태그에 대한 게시물을 찾을 수 없습니다.",
11
+ "noPostsCategory": "이 카테고리에서 게시물을 찾을 수 없습니다.",
12
+ "noPostsAuthor": "이 작성자의 게시물이 아직 없습니다.",
13
+ "postNotFound": "게시물을 찾을 수 없습니다",
14
+ "authorNotFound": "작성자를 찾을 수 없습니다",
15
+ "tagLabel": "태그",
16
+ "categoryLabel": "카테고리",
17
+ "authorLabel": "작성자",
18
+ "unknownTag": "알 수 없는 태그",
19
+ "unknownCategory": "알 수 없는 카테고리",
20
+ "sidebarRecentPosts": "최근 글",
21
+ "sidebarCategories": "카테고리",
22
+ "sidebarTags": "태그"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogNL: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Artikel lezen →",
5
+ "minRead": "min lezen",
6
+ "post": "artikel",
7
+ "posts": "artikelen",
8
+ "indexSubtitle": "Artikelen, tutorials en inzichten over het bouwen van moderne webapplicaties.",
9
+ "noPostsYet": "Nog geen artikelen. Kom snel terug.",
10
+ "noPostsTag": "Geen artikelen gevonden voor dit label.",
11
+ "noPostsCategory": "Geen artikelen gevonden in deze categorie.",
12
+ "noPostsAuthor": "Deze auteur heeft nog geen artikelen.",
13
+ "postNotFound": "Artikel niet gevonden",
14
+ "authorNotFound": "Auteur niet gevonden",
15
+ "tagLabel": "Label",
16
+ "categoryLabel": "Categorie",
17
+ "authorLabel": "Auteur",
18
+ "unknownTag": "Onbekend label",
19
+ "unknownCategory": "Onbekende categorie",
20
+ "sidebarRecentPosts": "Recente berichten",
21
+ "sidebarCategories": "Categorieën",
22
+ "sidebarTags": "Tags"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogPL: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Czytaj artykuł →",
5
+ "minRead": "min czytania",
6
+ "post": "artykuł",
7
+ "posts": "artykułów",
8
+ "indexSubtitle": "Artykuły, samouczki i spostrzeżenia na temat tworzenia nowoczesnych aplikacji webowych.",
9
+ "noPostsYet": "Brak artykułów. Sprawdź ponownie wkrótce.",
10
+ "noPostsTag": "Nie znaleziono artykułów dla tego tagu.",
11
+ "noPostsCategory": "Nie znaleziono artykułów w tej kategorii.",
12
+ "noPostsAuthor": "Ten autor nie ma jeszcze artykułów.",
13
+ "postNotFound": "Artykuł nie znaleziony",
14
+ "authorNotFound": "Autor nie znaleziony",
15
+ "tagLabel": "Tag",
16
+ "categoryLabel": "Kategoria",
17
+ "authorLabel": "Autor",
18
+ "unknownTag": "Nieznany tag",
19
+ "unknownCategory": "Nieznana kategoria",
20
+ "sidebarRecentPosts": "Najnowsze posty",
21
+ "sidebarCategories": "Kategorie",
22
+ "sidebarTags": "Tagi"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogPT: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blog",
4
+ "readArticle": "Ler artigo →",
5
+ "minRead": "min de leitura",
6
+ "post": "artigo",
7
+ "posts": "artigos",
8
+ "indexSubtitle": "Artigos, tutoriais e insights sobre o desenvolvimento de aplicações web modernas.",
9
+ "noPostsYet": "Sem artigos ainda. Volte em breve.",
10
+ "noPostsTag": "Nenhum artigo encontrado para esta tag.",
11
+ "noPostsCategory": "Nenhum artigo encontrado nesta categoria.",
12
+ "noPostsAuthor": "Sem artigos deste autor ainda.",
13
+ "postNotFound": "Artigo não encontrado",
14
+ "authorNotFound": "Autor não encontrado",
15
+ "tagLabel": "Tag",
16
+ "categoryLabel": "Categoria",
17
+ "authorLabel": "Autor",
18
+ "unknownTag": "Tag desconhecida",
19
+ "unknownCategory": "Categoria desconhecida",
20
+ "sidebarRecentPosts": "Artigos recentes",
21
+ "sidebarCategories": "Categorias",
22
+ "sidebarTags": "Tags"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogRU: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Блог",
4
+ "readArticle": "Читать статью →",
5
+ "minRead": "мин чтения",
6
+ "post": "статья",
7
+ "posts": "статей",
8
+ "indexSubtitle": "Статьи, руководства и инсайты о создании современных веб-приложений.",
9
+ "noPostsYet": "Статей пока нет. Заходите позже.",
10
+ "noPostsTag": "Статьи с этим тегом не найдены.",
11
+ "noPostsCategory": "Статьи в этой категории не найдены.",
12
+ "noPostsAuthor": "У этого автора пока нет статей.",
13
+ "postNotFound": "Статья не найдена",
14
+ "authorNotFound": "Автор не найден",
15
+ "tagLabel": "Тег",
16
+ "categoryLabel": "Категория",
17
+ "authorLabel": "Автор",
18
+ "unknownTag": "Неизвестный тег",
19
+ "unknownCategory": "Неизвестная категория",
20
+ "sidebarRecentPosts": "Последние статьи",
21
+ "sidebarCategories": "Категории",
22
+ "sidebarTags": "Теги"
23
+ }
24
+ };
@@ -0,0 +1,24 @@
1
+ export const blogSV: Record<string, any> = {
2
+ "blog": {
3
+ "backToBlog": "← Blogg",
4
+ "readArticle": "Läs artikeln →",
5
+ "minRead": "min läsning",
6
+ "post": "artikel",
7
+ "posts": "artiklar",
8
+ "indexSubtitle": "Artiklar, handledningar och insikter om att bygga moderna webbapplikationer.",
9
+ "noPostsYet": "Inga artiklar än. Kom tillbaka snart.",
10
+ "noPostsTag": "Inga artiklar hittades för den här taggen.",
11
+ "noPostsCategory": "Inga artiklar hittades i den här kategorin.",
12
+ "noPostsAuthor": "Den här författaren har inga artiklar än.",
13
+ "postNotFound": "Artikel hittades inte",
14
+ "authorNotFound": "Författare hittades inte",
15
+ "tagLabel": "Tagg",
16
+ "categoryLabel": "Kategori",
17
+ "authorLabel": "Författare",
18
+ "unknownTag": "Okänd tagg",
19
+ "unknownCategory": "Okänd kategori",
20
+ "sidebarRecentPosts": "Senaste inlägg",
21
+ "sidebarCategories": "Kategorier",
22
+ "sidebarTags": "Taggar"
23
+ }
24
+ };