collavre 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 (410) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +221 -0
  3. data/Rakefile +8 -0
  4. data/app/assets/stylesheets/collavre/actiontext.css +577 -0
  5. data/app/assets/stylesheets/collavre/activity_logs.css +99 -0
  6. data/app/assets/stylesheets/collavre/comments_popup.css +692 -0
  7. data/app/assets/stylesheets/collavre/creatives.css +559 -0
  8. data/app/assets/stylesheets/collavre/dark_mode.css +118 -0
  9. data/app/assets/stylesheets/collavre/mention_menu.css +43 -0
  10. data/app/assets/stylesheets/collavre/popup.css +160 -0
  11. data/app/assets/stylesheets/collavre/print.css +37 -0
  12. data/app/assets/stylesheets/collavre/slide_view.css +79 -0
  13. data/app/assets/stylesheets/collavre/user_menu.css +34 -0
  14. data/app/channels/collavre/comments_presence_channel.rb +54 -0
  15. data/app/channels/collavre/slide_view_channel.rb +11 -0
  16. data/app/channels/collavre/topics_channel.rb +12 -0
  17. data/app/components/collavre/avatar_component.html.erb +15 -0
  18. data/app/components/collavre/avatar_component.rb +59 -0
  19. data/app/components/collavre/inbox/badge_component.html.erb +6 -0
  20. data/app/components/collavre/inbox/badge_component.rb +18 -0
  21. data/app/components/collavre/plans_timeline_component.html.erb +14 -0
  22. data/app/components/collavre/plans_timeline_component.rb +56 -0
  23. data/app/components/collavre/popup_menu_component.html.erb +6 -0
  24. data/app/components/collavre/popup_menu_component.rb +30 -0
  25. data/app/components/collavre/progress_filter_component.html.erb +5 -0
  26. data/app/components/collavre/progress_filter_component.rb +10 -0
  27. data/app/components/collavre/user_mention_menu_component.html.erb +3 -0
  28. data/app/components/collavre/user_mention_menu_component.rb +8 -0
  29. data/app/controllers/collavre/application_controller.rb +15 -0
  30. data/app/controllers/collavre/attachments_controller.rb +44 -0
  31. data/app/controllers/collavre/calendar_events_controller.rb +15 -0
  32. data/app/controllers/collavre/comment_read_pointers_controller.rb +80 -0
  33. data/app/controllers/collavre/comments/activity_logs_controller.rb +26 -0
  34. data/app/controllers/collavre/comments/reactions_controller.rb +82 -0
  35. data/app/controllers/collavre/comments_controller.rb +464 -0
  36. data/app/controllers/collavre/contacts_controller.rb +10 -0
  37. data/app/controllers/collavre/creative_expanded_states_controller.rb +27 -0
  38. data/app/controllers/collavre/creative_imports_controller.rb +24 -0
  39. data/app/controllers/collavre/creative_plans_controller.rb +69 -0
  40. data/app/controllers/collavre/creative_shares_controller.rb +79 -0
  41. data/app/controllers/collavre/creatives_controller.rb +535 -0
  42. data/app/controllers/collavre/devices_controller.rb +19 -0
  43. data/app/controllers/collavre/email_verifications_controller.rb +16 -0
  44. data/app/controllers/collavre/emails_controller.rb +11 -0
  45. data/app/controllers/collavre/github_auth_controller.rb +25 -0
  46. data/app/controllers/collavre/google_auth_controller.rb +43 -0
  47. data/app/controllers/collavre/inbox_items_controller.rb +64 -0
  48. data/app/controllers/collavre/invites_controller.rb +27 -0
  49. data/app/controllers/collavre/notion_auth_controller.rb +25 -0
  50. data/app/controllers/collavre/passwords_controller.rb +37 -0
  51. data/app/controllers/collavre/plans_controller.rb +110 -0
  52. data/app/controllers/collavre/sessions_controller.rb +57 -0
  53. data/app/controllers/collavre/topics_controller.rb +58 -0
  54. data/app/controllers/collavre/user_themes_controller.rb +58 -0
  55. data/app/controllers/collavre/users_controller.rb +390 -0
  56. data/app/helpers/collavre/application_helper.rb +4 -0
  57. data/app/helpers/collavre/comments_helper.rb +9 -0
  58. data/app/helpers/collavre/creatives_helper.rb +343 -0
  59. data/app/helpers/collavre/navigation_helper.rb +163 -0
  60. data/app/helpers/collavre/user_themes_helper.rb +4 -0
  61. data/app/javascript/collavre.js +26 -0
  62. data/app/javascript/components/InlineLexicalEditor.jsx +889 -0
  63. data/app/javascript/components/LinkPopup.jsx +112 -0
  64. data/app/javascript/components/creative_tree_row.js +503 -0
  65. data/app/javascript/components/plugins/attachment_cleanup_plugin.jsx +95 -0
  66. data/app/javascript/components/plugins/image_upload_plugin.jsx +162 -0
  67. data/app/javascript/controllers/click_target_controller.js +13 -0
  68. data/app/javascript/controllers/comment_controller.js +162 -0
  69. data/app/javascript/controllers/comments/__tests__/popup_controller.test.js +68 -0
  70. data/app/javascript/controllers/comments/form_controller.js +530 -0
  71. data/app/javascript/controllers/comments/list_controller.js +715 -0
  72. data/app/javascript/controllers/comments/mention_menu_controller.js +41 -0
  73. data/app/javascript/controllers/comments/popup_controller.js +385 -0
  74. data/app/javascript/controllers/comments/presence_controller.js +311 -0
  75. data/app/javascript/controllers/comments/topics_controller.js +338 -0
  76. data/app/javascript/controllers/common_popup_controller.js +55 -0
  77. data/app/javascript/controllers/creatives/drag_drop_controller.js +45 -0
  78. data/app/javascript/controllers/creatives/expansion_controller.js +222 -0
  79. data/app/javascript/controllers/creatives/import_controller.js +116 -0
  80. data/app/javascript/controllers/creatives/row_editor_controller.js +8 -0
  81. data/app/javascript/controllers/creatives/select_mode_controller.js +231 -0
  82. data/app/javascript/controllers/creatives/set_plan_modal_controller.js +107 -0
  83. data/app/javascript/controllers/creatives/tree_controller.js +218 -0
  84. data/app/javascript/controllers/index.js +79 -0
  85. data/app/javascript/controllers/link_creative_controller.js +91 -0
  86. data/app/javascript/controllers/popup_menu_controller.js +82 -0
  87. data/app/javascript/controllers/progress_filter_controller.js +35 -0
  88. data/app/javascript/controllers/reaction_picker_controller.js +107 -0
  89. data/app/javascript/controllers/share_invite_controller.js +15 -0
  90. data/app/javascript/controllers/share_user_search_controller.js +121 -0
  91. data/app/javascript/controllers/tabs_controller.js +43 -0
  92. data/app/javascript/creatives/drag_drop/dom.js +170 -0
  93. data/app/javascript/creatives/drag_drop/event_handlers.js +846 -0
  94. data/app/javascript/creatives/drag_drop/indicator.js +35 -0
  95. data/app/javascript/creatives/drag_drop/operations.js +116 -0
  96. data/app/javascript/creatives/drag_drop/state.js +31 -0
  97. data/app/javascript/creatives/tree_renderer.js +248 -0
  98. data/app/javascript/lib/api/__tests__/queue_manager.test.js +153 -0
  99. data/app/javascript/lib/api/creatives.js +79 -0
  100. data/app/javascript/lib/api/csrf_fetch.js +22 -0
  101. data/app/javascript/lib/api/drag_drop.js +31 -0
  102. data/app/javascript/lib/api/queue_manager.js +423 -0
  103. data/app/javascript/lib/apply_lexical_styles.js +15 -0
  104. data/app/javascript/lib/common_popup.js +195 -0
  105. data/app/javascript/lib/lexical/__tests__/action_text_attachment_node.test.jsx +91 -0
  106. data/app/javascript/lib/lexical/__tests__/attachment_payload.test.js +194 -0
  107. data/app/javascript/lib/lexical/action_text_attachment_node.js +459 -0
  108. data/app/javascript/lib/lexical/attachment_node.jsx +170 -0
  109. data/app/javascript/lib/lexical/attachment_payload.js +293 -0
  110. data/app/javascript/lib/lexical/dom_attachment_utils.js +66 -0
  111. data/app/javascript/lib/lexical/image_node.jsx +159 -0
  112. data/app/javascript/lib/lexical/style_attributes.js +40 -0
  113. data/app/javascript/lib/responsive_images.js +54 -0
  114. data/app/javascript/lib/turbo_stream_actions.js +33 -0
  115. data/app/javascript/lib/utils/markdown.js +23 -0
  116. data/app/javascript/modules/creative_guide.js +53 -0
  117. data/app/javascript/modules/creative_row_editor.js +1841 -0
  118. data/app/javascript/modules/creative_row_swipe.js +43 -0
  119. data/app/javascript/modules/creatives.js +15 -0
  120. data/app/javascript/modules/export_to_markdown.js +34 -0
  121. data/app/javascript/modules/inbox_panel.js +226 -0
  122. data/app/javascript/modules/lexical_inline_editor.jsx +133 -0
  123. data/app/javascript/modules/mention_menu.js +77 -0
  124. data/app/javascript/modules/plans_menu.js +39 -0
  125. data/app/javascript/modules/plans_timeline.js +397 -0
  126. data/app/javascript/modules/share_modal.js +73 -0
  127. data/app/javascript/modules/share_user_popup.js +77 -0
  128. data/app/javascript/modules/slide_view.js +163 -0
  129. data/app/javascript/services/cable.js +32 -0
  130. data/app/javascript/slide_view.js +2 -0
  131. data/app/javascript/utils/caret_position.js +42 -0
  132. data/app/javascript/utils/clipboard.js +40 -0
  133. data/app/jobs/collavre/ai_agent_job.rb +27 -0
  134. data/app/jobs/collavre/inbox_summary_job.rb +24 -0
  135. data/app/jobs/collavre/notion_export_job.rb +30 -0
  136. data/app/jobs/collavre/notion_sync_job.rb +48 -0
  137. data/app/jobs/collavre/permission_cache_cleanup_job.rb +36 -0
  138. data/app/jobs/collavre/permission_cache_job.rb +71 -0
  139. data/app/jobs/collavre/push_notification_job.rb +86 -0
  140. data/app/mailers/collavre/application_mailer.rb +17 -0
  141. data/app/mailers/collavre/creative_mailer.rb +9 -0
  142. data/app/mailers/collavre/email_verification_mailer.rb +20 -0
  143. data/app/mailers/collavre/inbox_mailer.rb +19 -0
  144. data/app/mailers/collavre/invitation_mailer.rb +16 -0
  145. data/app/mailers/collavre/passwords_mailer.rb +10 -0
  146. data/app/models/collavre/activity_log.rb +13 -0
  147. data/app/models/collavre/application_record.rb +5 -0
  148. data/app/models/collavre/calendar_event.rb +20 -0
  149. data/app/models/collavre/comment.rb +307 -0
  150. data/app/models/collavre/comment_presence_store.rb +30 -0
  151. data/app/models/collavre/comment_reaction.rb +11 -0
  152. data/app/models/collavre/comment_read_pointer.rb +26 -0
  153. data/app/models/collavre/contact.rb +23 -0
  154. data/app/models/collavre/creative.rb +413 -0
  155. data/app/models/collavre/creative_expanded_state.rb +11 -0
  156. data/app/models/collavre/creative_share.rb +122 -0
  157. data/app/models/collavre/creative_shares_cache.rb +18 -0
  158. data/app/models/collavre/current.rb +14 -0
  159. data/app/models/collavre/device.rb +13 -0
  160. data/app/models/collavre/email.rb +14 -0
  161. data/app/models/collavre/github_account.rb +10 -0
  162. data/app/models/collavre/github_repository_link.rb +19 -0
  163. data/app/models/collavre/inbox_item.rb +95 -0
  164. data/app/models/collavre/invitation.rb +22 -0
  165. data/app/models/collavre/label.rb +47 -0
  166. data/app/models/collavre/mcp_tool.rb +30 -0
  167. data/app/models/collavre/notion_account.rb +17 -0
  168. data/app/models/collavre/notion_block_link.rb +10 -0
  169. data/app/models/collavre/notion_page_link.rb +19 -0
  170. data/app/models/collavre/plan.rb +20 -0
  171. data/app/models/collavre/session.rb +24 -0
  172. data/app/models/collavre/system_setting.rb +144 -0
  173. data/app/models/collavre/tag.rb +10 -0
  174. data/app/models/collavre/task.rb +10 -0
  175. data/app/models/collavre/task_action.rb +10 -0
  176. data/app/models/collavre/topic.rb +12 -0
  177. data/app/models/collavre/user.rb +174 -0
  178. data/app/models/collavre/user_theme.rb +10 -0
  179. data/app/models/collavre/variation.rb +5 -0
  180. data/app/models/collavre/webauthn_credential.rb +11 -0
  181. data/app/services/collavre/ai_agent_service.rb +193 -0
  182. data/app/services/collavre/ai_client.rb +183 -0
  183. data/app/services/collavre/ai_system_prompt_renderer.rb +38 -0
  184. data/app/services/collavre/auto_theme_generator.rb +198 -0
  185. data/app/services/collavre/comment_link_formatter.rb +60 -0
  186. data/app/services/collavre/comments/action_executor.rb +262 -0
  187. data/app/services/collavre/comments/action_validator.rb +58 -0
  188. data/app/services/collavre/comments/calendar_command.rb +97 -0
  189. data/app/services/collavre/comments/command_processor.rb +37 -0
  190. data/app/services/collavre/comments/mcp_command.rb +109 -0
  191. data/app/services/collavre/comments/mcp_command_builder.rb +32 -0
  192. data/app/services/collavre/creatives/filter_pipeline.rb +196 -0
  193. data/app/services/collavre/creatives/filters/assignee_filter.rb +30 -0
  194. data/app/services/collavre/creatives/filters/base_filter.rb +24 -0
  195. data/app/services/collavre/creatives/filters/comment_filter.rb +21 -0
  196. data/app/services/collavre/creatives/filters/date_filter.rb +58 -0
  197. data/app/services/collavre/creatives/filters/progress_filter.rb +25 -0
  198. data/app/services/collavre/creatives/filters/search_filter.rb +28 -0
  199. data/app/services/collavre/creatives/filters/tag_filter.rb +16 -0
  200. data/app/services/collavre/creatives/importer.rb +47 -0
  201. data/app/services/collavre/creatives/index_query.rb +191 -0
  202. data/app/services/collavre/creatives/path_exporter.rb +131 -0
  203. data/app/services/collavre/creatives/permission_cache_builder.rb +194 -0
  204. data/app/services/collavre/creatives/permission_checker.rb +42 -0
  205. data/app/services/collavre/creatives/plan_tagger.rb +53 -0
  206. data/app/services/collavre/creatives/progress_service.rb +89 -0
  207. data/app/services/collavre/creatives/reorderer.rb +187 -0
  208. data/app/services/collavre/creatives/tree_builder.rb +231 -0
  209. data/app/services/collavre/creatives/tree_formatter.rb +36 -0
  210. data/app/services/collavre/gemini_parent_recommender.rb +77 -0
  211. data/app/services/collavre/github/client.rb +112 -0
  212. data/app/services/collavre/github/pull_request_analyzer.rb +280 -0
  213. data/app/services/collavre/github/pull_request_processor.rb +181 -0
  214. data/app/services/collavre/github/webhook_provisioner.rb +130 -0
  215. data/app/services/collavre/google_calendar_service.rb +149 -0
  216. data/app/services/collavre/link_preview_fetcher.rb +230 -0
  217. data/app/services/collavre/markdown_importer.rb +202 -0
  218. data/app/services/collavre/mcp_service.rb +217 -0
  219. data/app/services/collavre/notion_client.rb +231 -0
  220. data/app/services/collavre/notion_creative_exporter.rb +296 -0
  221. data/app/services/collavre/notion_service.rb +249 -0
  222. data/app/services/collavre/ppt_importer.rb +76 -0
  223. data/app/services/collavre/ruby_llm_interaction_logger.rb +34 -0
  224. data/app/services/collavre/system_events/context_builder.rb +41 -0
  225. data/app/services/collavre/system_events/dispatcher.rb +19 -0
  226. data/app/services/collavre/system_events/router.rb +72 -0
  227. data/app/services/collavre/tools/creative_retrieval_service.rb +138 -0
  228. data/app/views/admin/shared/_tabs.html.erb +4 -0
  229. data/app/views/collavre/comments/_activity_log_details.html.erb +23 -0
  230. data/app/views/collavre/comments/_comment.html.erb +147 -0
  231. data/app/views/collavre/comments/_comments_popup.html.erb +46 -0
  232. data/app/views/collavre/comments/_list.html.erb +10 -0
  233. data/app/views/collavre/comments/_presence_avatars.html.erb +8 -0
  234. data/app/views/collavre/comments/_reaction_picker.html.erb +15 -0
  235. data/app/views/collavre/comments/_read_receipts.html.erb +19 -0
  236. data/app/views/collavre/creatives/_add_button.html.erb +20 -0
  237. data/app/views/collavre/creatives/_delete_button.html.erb +12 -0
  238. data/app/views/collavre/creatives/_github_integration_modal.html.erb +77 -0
  239. data/app/views/collavre/creatives/_import_upload_zone.html.erb +10 -0
  240. data/app/views/collavre/creatives/_inline_edit_form.html.erb +89 -0
  241. data/app/views/collavre/creatives/_mobile_actions_menu.html.erb +24 -0
  242. data/app/views/collavre/creatives/_notion_integration_modal.html.erb +90 -0
  243. data/app/views/collavre/creatives/_set_plan_modal.html.erb +25 -0
  244. data/app/views/collavre/creatives/_share_button.html.erb +55 -0
  245. data/app/views/collavre/creatives/edit.html.erb +4 -0
  246. data/app/views/collavre/creatives/index.html.erb +192 -0
  247. data/app/views/collavre/creatives/new.html.erb +4 -0
  248. data/app/views/collavre/creatives/show.html.erb +29 -0
  249. data/app/views/collavre/creatives/slide_view.html.erb +20 -0
  250. data/app/views/collavre/email_verification_mailer/verify.html.erb +4 -0
  251. data/app/views/collavre/email_verification_mailer/verify.text.erb +2 -0
  252. data/app/views/collavre/emails/index.html.erb +19 -0
  253. data/app/views/collavre/emails/show.html.erb +5 -0
  254. data/app/views/collavre/inbox_items/_item.html.erb +18 -0
  255. data/app/views/collavre/inbox_items/_items.html.erb +3 -0
  256. data/app/views/collavre/inbox_items/_list.html.erb +7 -0
  257. data/app/views/collavre/inbox_items/index.html.erb +1 -0
  258. data/app/views/collavre/inbox_mailer/daily_summary.html.erb +11 -0
  259. data/app/views/collavre/inbox_mailer/daily_summary.text.erb +8 -0
  260. data/app/views/collavre/invitation_mailer/invite.html.erb +5 -0
  261. data/app/views/collavre/invitation_mailer/invite.text.erb +3 -0
  262. data/app/views/collavre/invites/show.html.erb +8 -0
  263. data/app/views/collavre/passwords/edit.html.erb +12 -0
  264. data/app/views/collavre/passwords/new.html.erb +17 -0
  265. data/app/views/collavre/passwords_mailer/reset.html.erb +4 -0
  266. data/app/views/collavre/passwords_mailer/reset.text.erb +2 -0
  267. data/app/views/collavre/sessions/new.html.erb +27 -0
  268. data/app/views/collavre/sessions/providers/_google.html.erb +7 -0
  269. data/app/views/collavre/sessions/providers/_passkey.html.erb +3 -0
  270. data/app/views/collavre/shared/_link_creative_modal.html.erb +6 -0
  271. data/app/views/collavre/shared/_navigation.html.erb +37 -0
  272. data/app/views/collavre/shared/navigation/_help_button.html.erb +1 -0
  273. data/app/views/collavre/shared/navigation/_inbox_button.html.erb +5 -0
  274. data/app/views/collavre/shared/navigation/_mobile_inbox_button.html.erb +3 -0
  275. data/app/views/collavre/shared/navigation/_mobile_plans_button.html.erb +1 -0
  276. data/app/views/collavre/shared/navigation/_panels.html.erb +18 -0
  277. data/app/views/collavre/shared/navigation/_plans_button.html.erb +3 -0
  278. data/app/views/collavre/shared/navigation/_search_form.html.erb +6 -0
  279. data/app/views/collavre/user_themes/index.html.erb +75 -0
  280. data/app/views/collavre/users/_app_header.html.erb +5 -0
  281. data/app/views/collavre/users/_contact_management.html.erb +77 -0
  282. data/app/views/collavre/users/_id_pwd_fields.html.erb +27 -0
  283. data/app/views/collavre/users/edit_ai.html.erb +79 -0
  284. data/app/views/collavre/users/edit_password.html.erb +27 -0
  285. data/app/views/collavre/users/index.html.erb +80 -0
  286. data/app/views/collavre/users/new.html.erb +33 -0
  287. data/app/views/collavre/users/new_ai.html.erb +87 -0
  288. data/app/views/collavre/users/passkeys.html.erb +43 -0
  289. data/app/views/collavre/users/show.html.erb +143 -0
  290. data/app/views/inbox/badge_component/_count.html.erb +2 -0
  291. data/app/views/layouts/collavre/slide.html.erb +29 -0
  292. data/config/locales/comments.en.yml +114 -0
  293. data/config/locales/comments.ko.yml +110 -0
  294. data/config/locales/contacts.en.yml +16 -0
  295. data/config/locales/contacts.ko.yml +16 -0
  296. data/config/locales/creatives.en.yml +183 -0
  297. data/config/locales/creatives.ko.yml +164 -0
  298. data/config/locales/invites.en.yml +19 -0
  299. data/config/locales/invites.ko.yml +17 -0
  300. data/config/locales/notifications.en.yml +8 -0
  301. data/config/locales/notifications.ko.yml +8 -0
  302. data/config/locales/plans.en.yml +12 -0
  303. data/config/locales/plans.ko.yml +19 -0
  304. data/config/locales/themes.en.yml +29 -0
  305. data/config/locales/themes.ko.yml +27 -0
  306. data/config/locales/users.en.yml +151 -0
  307. data/config/locales/users.ko.yml +146 -0
  308. data/config/routes.rb +92 -0
  309. data/db/migrate/20241201000000_create_notion_integrations.rb +29 -0
  310. data/db/migrate/20250128110017_create_creatives.rb +11 -0
  311. data/db/migrate/20250128120122_create_users.rb +11 -0
  312. data/db/migrate/20250128120123_create_sessions.rb +11 -0
  313. data/db/migrate/20250128123633_create_subscribers.rb +10 -0
  314. data/db/migrate/20250312000000_create_notion_block_links.rb +16 -0
  315. data/db/migrate/20250312010000_allow_multiple_notion_blocks_per_creative.rb +5 -0
  316. data/db/migrate/20250522115048_remove_name_from_creatives.rb +5 -0
  317. data/db/migrate/20250522190651_add_parent_id_to_creatives.rb +5 -0
  318. data/db/migrate/20250523133100_rename_inventory_count_to_progress.rb +13 -0
  319. data/db/migrate/20250523133101_add_sequence_to_creatives.rb +5 -0
  320. data/db/migrate/20250525205100_add_user_id_to_creatives.rb +10 -0
  321. data/db/migrate/20250527014217_create_creative_shares.rb +12 -0
  322. data/db/migrate/20250528142349_add_origin_id_to_creatives.rb +5 -0
  323. data/db/migrate/20250530060200_create_tags.rb +9 -0
  324. data/db/migrate/20250531105150_add_value_to_tags.rb +5 -0
  325. data/db/migrate/20250531140142_create_labels.rb +12 -0
  326. data/db/migrate/20250531140145_change_tag_to_label_reference.rb +6 -0
  327. data/db/migrate/20250601000000_create_comments.rb +10 -0
  328. data/db/migrate/20250601061830_drop_plans_and_variations.rb +6 -0
  329. data/db/migrate/20250604122600_add_owner_to_labels.rb +5 -0
  330. data/db/migrate/20250606000000_rename_email_address_to_email_in_users.rb +7 -0
  331. data/db/migrate/20250606150329_create_creative_hierarchies.rb +16 -0
  332. data/db/migrate/20250610142000_create_creative_expanded_states.rb +11 -0
  333. data/db/migrate/20250611030138_create_invitations.rb +15 -0
  334. data/db/migrate/20250611105524_create_inbox_items.rb +14 -0
  335. data/db/migrate/20250612150000_update_permissions.rb +43 -0
  336. data/db/migrate/20250612232913_add_email_verified_at_to_users.rb +5 -0
  337. data/db/migrate/20250616065905_add_avatar_to_users.rb +5 -0
  338. data/db/migrate/20250617092111_add_display_level_to_users.rb +5 -0
  339. data/db/migrate/20250620004558_create_emails.rb +13 -0
  340. data/db/migrate/20250621000000_create_comment_read_pointers.rb +11 -0
  341. data/db/migrate/20250622000000_add_completion_mark_to_users.rb +5 -0
  342. data/db/migrate/20250623000000_add_theme_to_users.rb +5 -0
  343. data/db/migrate/20250624000000_add_name_to_users.rb +18 -0
  344. data/db/migrate/20250714190000_create_devices.rb +17 -0
  345. data/db/migrate/20250715120000_add_notifications_enabled_to_users.rb +5 -0
  346. data/db/migrate/20250823000000_add_no_access_permission.rb +25 -0
  347. data/db/migrate/20250826000000_add_calendar_id_to_users.rb +5 -0
  348. data/db/migrate/20250827000000_add_google_oauth_tokens_to_users.rb +8 -0
  349. data/db/migrate/20250827061238_add_timezone_to_users.rb +5 -0
  350. data/db/migrate/20250828000000_create_calendar_events.rb +16 -0
  351. data/db/migrate/20250828060000_add_creative_to_calendar_events.rb +5 -0
  352. data/db/migrate/20250830141052_add_locale_to_users.rb +5 -0
  353. data/db/migrate/20250830141101_add_message_key_to_inbox_items.rb +6 -0
  354. data/db/migrate/20250902025423_remove_description_and_featured_image_from_creatives.rb +6 -0
  355. data/db/migrate/20250910000000_add_private_to_comments.rb +5 -0
  356. data/db/migrate/20250910105640_migrate_write_permissions_to_admin.rb +17 -0
  357. data/db/migrate/20250911084338_backfill_creative_in_comment_inbox_items.rb +27 -0
  358. data/db/migrate/20250923002959_deduplicate_device_fcm_tokens.rb +25 -0
  359. data/db/migrate/20250924000000_add_system_admin_to_users.rb +6 -0
  360. data/db/migrate/20250925000000_create_github_integrations.rb +26 -0
  361. data/db/migrate/20250927000000_add_webhook_secret_to_github_repository_links.rb +29 -0
  362. data/db/migrate/20250928000000_add_action_and_approver_to_comments.rb +6 -0
  363. data/db/migrate/20250928010000_add_action_execution_tracking_to_comments.rb +6 -0
  364. data/db/migrate/20250928105957_add_github_gemini_prompt_to_creatives.rb +5 -0
  365. data/db/migrate/20250929000000_add_comment_and_creative_refs_to_inbox_items.rb +6 -0
  366. data/db/migrate/20251001000001_create_contacts.rb +71 -0
  367. data/db/migrate/20251002000000_add_shared_by_to_creative_shares.rb +14 -0
  368. data/db/migrate/20251124120902_add_ai_fields_to_users.rb +7 -0
  369. data/db/migrate/20251124122218_add_created_by_id_to_users.rb +5 -0
  370. data/db/migrate/20251124124521_add_llm_api_key_to_users.rb +5 -0
  371. data/db/migrate/20251124130000_add_searchable_to_users.rb +6 -0
  372. data/db/migrate/20251125072705_migrate_linked_creative_children_to_origin.rb +28 -0
  373. data/db/migrate/20251126040752_add_description_to_creatives.rb +75 -0
  374. data/db/migrate/20251127000000_move_comments_from_linked_creatives_to_origins.rb +18 -0
  375. data/db/migrate/20251201073823_add_tools_to_users.rb +5 -0
  376. data/db/migrate/20251202062715_create_mcp_tools.rb +16 -0
  377. data/db/migrate/20251204125754_create_tasks_and_task_actions.rb +23 -0
  378. data/db/migrate/20251204125756_add_routing_expression_to_users.rb +5 -0
  379. data/db/migrate/20251204161133_set_default_routing_expression_for_ai_agents.rb +13 -0
  380. data/db/migrate/20251211033025_nullify_self_referencing_origins.rb +9 -0
  381. data/db/migrate/20251211080040_create_topics_and_add_topic_to_comments.rb +15 -0
  382. data/db/migrate/20251215143500_create_activity_logs.rb +16 -0
  383. data/db/migrate/20251222125727_create_webauthn_credentials.rb +14 -0
  384. data/db/migrate/20251222125839_add_webauthn_id_to_users.rb +5 -0
  385. data/db/migrate/20251223022315_create_comment_reactions.rb +13 -0
  386. data/db/migrate/20251223072625_create_user_themes.rb +11 -0
  387. data/db/migrate/20251230074456_add_creative_id_to_labels.rb +5 -0
  388. data/db/migrate/20251230113607_refactor_labels.rb +38 -0
  389. data/db/migrate/20251231010012_backfill_tags_for_labels.rb +15 -0
  390. data/db/migrate/20251231013234_drop_subscribers.rb +9 -0
  391. data/db/migrate/20260106090544_allow_null_user_id_in_creative_shares.rb +6 -0
  392. data/db/migrate/20260106160643_create_system_settings.rb +11 -0
  393. data/db/migrate/20260116000000_create_creative_shares_cache.rb +15 -0
  394. data/db/migrate/20260116000001_populate_creative_shares_cache.rb +23 -0
  395. data/db/migrate/20260119022933_make_source_share_id_nullable_in_creative_shares_caches.rb +7 -0
  396. data/db/migrate/20260119023446_populate_owner_cache_entries.rb +25 -0
  397. data/db/migrate/20260119100000_add_account_lockout_to_users.rb +6 -0
  398. data/db/migrate/20260119110000_add_last_active_at_to_sessions.rb +6 -0
  399. data/db/migrate/20260120045354_encrypt_oauth_tokens.rb +60 -0
  400. data/db/migrate/20260120162259_remove_fk_from_creative_shares_caches.rb +7 -0
  401. data/db/migrate/20260120163856_remove_timestamps_from_creative_shares_caches.rb +6 -0
  402. data/lib/collavre/configuration.rb +14 -0
  403. data/lib/collavre/engine.rb +77 -0
  404. data/lib/collavre/user_extensions.rb +29 -0
  405. data/lib/collavre/version.rb +3 -0
  406. data/lib/collavre.rb +26 -0
  407. data/lib/generators/collavre/install/install_generator.rb +105 -0
  408. data/lib/generators/collavre/install/templates/build.cjs.tt +100 -0
  409. data/lib/tasks/collavre_assets.rake +15 -0
  410. metadata +591 -0
@@ -0,0 +1,183 @@
1
+ ---
2
+ en:
3
+ collavre:
4
+ creatives:
5
+ index:
6
+ up: Up
7
+ new_creative: Add
8
+ new_creative_shortcut: Add (Enter)
9
+ new_sub_creative: New sub-creative
10
+ edit: Edit
11
+ append_as_parent_creative: New upper-creative
12
+ append_below_creative: Add below
13
+ delete: Delete
14
+ delete_only_this: Delete only this Creative
15
+ delete_with_children: Delete this Creative and all its children
16
+ are_you_sure: Are you sure?
17
+ are_you_sure_delete_only_this: Are you sure you want to delete only this Creative?
18
+ Its children will be preserved and re-linked.
19
+ are_you_sure_delete_with_children: Are you sure you want to delete this Creative
20
+ and ALL its children? This cannot be undone.
21
+ link: Link
22
+ unlink: Unlink
23
+ are_you_sure_unlink: Are you sure you want to unlink this Creative?
24
+ unconvert: Unconvert
25
+ unconvert_confirm: Convert this Creative and its descendants into a markdown
26
+ comment on the parent? This Creative and its descendants will be deleted.
27
+ unconvert_failed: Failed to unconvert this Creative.
28
+ unconvert_no_parent: Cannot unconvert because this Creative has no parent.
29
+ delete_selection: Delete selected
30
+ are_you_sure_delete_selection: Are you sure you want to delete selected Creatives?
31
+ This cannot be undone.
32
+ creatives: Creatives
33
+ slide_view: Slide View
34
+ recalculate_progress: Recalculate Progress
35
+ recalculate_all_parent_progress: Recalculate all parent progress?
36
+ no_creatives: No creatives found.
37
+ no_sub_creatives: No sub-creatives found.
38
+ no_search_results: No creatives match your search.
39
+ search_placeholder: Search creatives...
40
+ recommend_parent: Recommend Category
41
+ import_uploading: Uploading...
42
+ import_success: Import successful! Reloading...
43
+ import_failed: Import failed.
44
+ export_markdown: Export to Markdown
45
+ export_failed: Failed to export
46
+ only_markdown: Only markdown (.md) or PowerPoint (.pptx) files are allowed.
47
+ drop_or_click_markdown: Drop or click here to select a markdown or PowerPoint
48
+ file
49
+ import_markdown: Import Markdown/PPT
50
+ request_permission: Request Access
51
+ no_permission: You do not have permission to view this Creative.
52
+ view_origin: Open origin creative
53
+ share_creative: Share Creative
54
+ shared_with: Shared With
55
+ unknown_user: Unknown user
56
+ public_share: Public Share
57
+ user_email: User Email
58
+ permission: Permission
59
+ permission_read: Read
60
+ permission_write: Write
61
+ permission_feedback: Feedback
62
+ permission_no_access: No access
63
+ permission_admin: Admin
64
+ share: Share
65
+ invite: Invite
66
+ invite_link: Invite Link
67
+ invite_link_copied: Invite link copied.
68
+ invite_link_copied_permission: Invite link copied with %{permission} permission.
69
+ invite_link_no_access: Cannot create invitation for No access permission.
70
+ integrations: Integrations
71
+ github_integration_title: Configure Github integration
72
+ github_integration_connect: Sign in with your Github account to start linking.
73
+ github_login_button: Sign in with Github
74
+ github_integration_choose_org: Select the organization that owns the repositories.
75
+ github_integration_choose_repo: Select repositories to link. You can choose
76
+ multiple.
77
+ github_integration_summary: 'The following repositories will be linked to
78
+ this Creative:'
79
+ github_integration_webhook_instructions: Webhooks are created automatically.
80
+ Use the details below if you ever need to configure them manually.
81
+ github_integration_webhook_url_label: Webhook URL
82
+ github_integration_webhook_secret_label: Webhook secret
83
+ github_integration_summary_empty: No repositories selected.
84
+ github_integration_saved: Github integration saved successfully.
85
+ github_integration_login_required: Sign in with your Github account to start
86
+ the integration.
87
+ github_integration_existing_message: You're already connected to the repositories
88
+ below.
89
+ github_integration_delete_select_warning: Select at least one repository to
90
+ remove.
91
+ github_integration_missing_creative: No Creative selected for integration.
92
+ github_integration_delete_confirm: Do you want to remove the Github integration?
93
+ github_integration_delete_success: Github integration removed successfully.
94
+ github_integration_delete_error: Failed to remove the Github integration.
95
+ github_integration_delete_button: Remove integration
96
+ github_integration_existing_intro: Already connected repositories
97
+ github_integration_prompt_title: Review the Gemini analysis prompt and edit
98
+ it if needed.
99
+ github_integration_prompt_help: 'Use the placeholders below to inject runtime
100
+ details as needed:'
101
+ notion_integration_saved: Notion integration saved successfully.
102
+ notion_integration_login_required: Sign in with your Notion account to start
103
+ the integration.
104
+ notion_integration_missing_creative: No Creative selected for integration.
105
+ notion_integration_existing_message: You're already connected to Notion pages
106
+ below.
107
+ notion_integration_delete_confirm: Do you want to remove the Notion integration?
108
+ notion_integration_delete_success: Notion integration removed successfully.
109
+ notion_integration_delete_error: Failed to remove the Notion integration.
110
+ notion_integration_delete_button: Remove integration
111
+ notion_export_success: Creative exported to Notion successfully.
112
+ notion_sync_success: Creative synced to Notion successfully.
113
+ notion_integration_title: Configure Notion integration
114
+ notion_integration_connect: Sign in with your Notion account to start exporting.
115
+ notion_login_button: Sign in with Notion
116
+ notion_integration_existing_intro: 'Linked Notion pages:'
117
+ notion_sync_button: Sync to Notion
118
+ notion_integration_workspace: Your Notion workspace is connected. Choose how
119
+ to export your creative.
120
+ notion_export_option: 'Export option:'
121
+ notion_export_new_page: Create new page
122
+ notion_export_under_page: Create as subpage under existing page
123
+ notion_parent_page: 'Parent page:'
124
+ notion_loading: Loading pages...
125
+ notion_integration_summary: 'Ready to export your creative tree to Notion:'
126
+ notion_creative_title: 'Root Creative:'
127
+ notion_workspace: 'Workspace:'
128
+ notion_export_as: 'Export as:'
129
+ notion_tree_note: This will export the selected creative and all its descendants
130
+ as a structured document.
131
+ notion_export_button: Export to Notion
132
+ plan_tags_applied: Plan tags applied to selected creatives.
133
+ plan_tag_failed: Please select a plan and at least one creative.
134
+ plan_tags_removed: Plan tag removed from selected creatives.
135
+ plan_tag_remove_failed: Please select a plan and at least one creative.
136
+ select_plan: Select Plan
137
+ remove_plan: Remove Plan
138
+ add_plan: Add Plan
139
+ set_plan_title: Set Plan for Selected Creative
140
+ are_you_sure_delete_share: Are you sure delete share?
141
+ share_deleted: The share are deleted.
142
+ select_one_creative: Please select at least one Creative.
143
+ select_plan_to_remove: Please select a Plan to remove.
144
+ inline_move_up_tooltip: Move to previous creative (Arrow Up / Ctrl+P)
145
+ inline_move_down_tooltip: Move to next creative (Arrow Down / Ctrl+N)
146
+ inline_add_sibling_tooltip: Add sibling (Shift+Enter)
147
+ inline_level_down_tooltip: Indent / add as child (Ctrl/Cmd+Shift+.)
148
+ inline_level_up_tooltip: Outdent / move up a level (Ctrl/Cmd+Shift+,)
149
+ inline_close_tooltip: Close editor (Esc)
150
+ share:
151
+ shared: Creative shared successfully.
152
+ already_shared_in_parent: Creative already shared in parent creative.
153
+ can_not_share_by_no_access_in_parent: You can not share by no access in parent
154
+ creative.
155
+ notices:
156
+ progress_recalculated: All parent progress recalculated.
157
+ errors:
158
+ no_permission: You do not have permission to perform this action.
159
+ inline_editor:
160
+ placeholder: Describe the creative…
161
+ edit_title: Edit creative
162
+ edit:
163
+ inline_editor_only_html: Editing creatives now happens directly in the inline
164
+ editor.
165
+ new:
166
+ inline_editor_only_html: Create creatives from the inline editor in the creative
167
+ tree.
168
+ help:
169
+ add_child_creative: Add child creative
170
+ inventory:
171
+ progress: "%{value} Progress"
172
+ completed: Completed
173
+ todo: Todo
174
+ notify_me: Email me when is progressing.
175
+ placeholder_email: you@example.com
176
+ submit: Submit
177
+ slide_view:
178
+ go_to_creative: Go to Creative
179
+ creative_mailer:
180
+ in_stock:
181
+ subject: Good news!
182
+ message_html: "%{creative} is back in stock."
183
+ unsubscribe: Unsubscribe
@@ -0,0 +1,164 @@
1
+ ---
2
+ ko:
3
+ collavre:
4
+ creatives:
5
+ index:
6
+ up: 위로
7
+ new_creative: 추가
8
+ new_creative_shortcut: 추가 (Enter)
9
+ new_sub_creative: 하위에 추가
10
+ edit: 수정
11
+ append_as_parent_creative: 상위에 추가
12
+ append_below_creative: 아래에 추가
13
+ delete: 삭제
14
+ delete_only_this: 이 항목만 삭제
15
+ delete_with_children: 이 항목과 모든 하위 항목 삭제
16
+ are_you_sure: 정말 삭제하시겠습니까?
17
+ are_you_sure_delete_only_this: 이 항목만 삭제하시겠습니까? 하위 항목은 보존되고 부모에 연결됩니다.
18
+ are_you_sure_delete_with_children: 이 항목과 모든 하위 항목을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.
19
+ link: 링크
20
+ unlink: 링크 해제
21
+ are_you_sure_unlink: 링크된 크리에이티브를 삭제하시겠습니까?
22
+ unconvert: 역전환
23
+ unconvert_confirm: 현재 크리에이티브와 모든 하위 항목을 마크다운 코멘트로 변환해 상위 크리에이티브에 추가하고 삭제할까요?
24
+ unconvert_failed: 역전환에 실패했습니다.
25
+ unconvert_no_parent: 상위 크리에이티브가 없어 역전환할 수 없습니다.
26
+ delete_selection: 선택 항목 삭제
27
+ are_you_sure_delete_selection: 선택된 크리에이티브를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.
28
+ creatives: 크리에이티브 목록
29
+ slide_view: 슬라이드 뷰
30
+ recalculate_progress: 진행률 다시 계산
31
+ recalculate_all_parent_progress: 모든 상위 진행률을 다시 계산하시겠습니까?
32
+ no_creatives: 크리에이티브가 없습니다.
33
+ no_sub_creatives: 하위 크리에이티브가 없습니다.
34
+ no_search_results: 검색 결과가 없습니다.
35
+ recommend_parent: 카테고리 추천
36
+ import_uploading: 업로드 중...
37
+ import_success: 가져오기 성공! 새로고침 중...
38
+ import_failed: 가져오기 실패
39
+ export_markdown: 마크다운 내보내기
40
+ export_failed: 내보내기에 실패했습니다
41
+ only_markdown: 마크다운(.md) 또는 파워포인트(.pptx) 파일만 가능합니다.
42
+ drop_or_click_markdown: 여기에 파일을 드롭하거나 클릭하여 마크다운 또는 파워포인트 파일을 선택하세요
43
+ import_markdown: 마크다운/PPT 가져오기
44
+ request_permission: 권한 요청
45
+ no_permission: 이 크리에이티브를 볼 권한이 없습니다.
46
+ view_origin: 원본 크리에이티브로 이동
47
+ share_creative: 크리에이티브 공유
48
+ shared_with: 공유 대상
49
+ unknown_user: 알 수 없는 사용자
50
+ public_share: 전체 공개
51
+ user_email: 사용자 이메일
52
+ permission: 권한
53
+ permission_read: 읽기
54
+ permission_write: 쓰기
55
+ permission_feedback: 피드백
56
+ permission_no_access: 접근 금지
57
+ permission_admin: 관리자
58
+ share: 공유하기
59
+ invite: 초대하기
60
+ invite_link: 초대 링크
61
+ invite_link_copied: 초대 링크가 복사되었습니다.
62
+ invite_link_copied_permission: "%{permission} 권한으로 초대 링크가 복사되었습니다."
63
+ invite_link_no_access: 접근 금지 권한으로는 초대할 수 없습니다.
64
+ integrations: 연동
65
+ github_integration_title: Github 연동 설정
66
+ github_integration_connect: Github 계정으로 로그인하여 연동을 시작하세요.
67
+ github_login_button: Github 계정으로 로그인
68
+ github_integration_choose_org: 연동할 Organization을 선택하세요.
69
+ github_integration_choose_repo: 연동할 Repository를 선택하세요. 여러 개 선택할 수 있습니다.
70
+ github_integration_summary: '다음 Repository가 현재 Creative와 연동됩니다:'
71
+ github_integration_webhook_instructions: Webhook은 자동으로 생성됩니다. 문제가 생겨 수동으로
72
+ 설정해야 할 때 아래 정보를 참고하세요.
73
+ github_integration_webhook_url_label: Webhook URL
74
+ github_integration_webhook_secret_label: Webhook 비밀값
75
+ github_integration_summary_empty: 선택된 Repository가 없습니다.
76
+ github_integration_saved: Github 연동이 저장되었습니다.
77
+ github_integration_login_required: Github 계정으로 로그인하여 연동을 시작하세요.
78
+ github_integration_existing_message: 이미 아래 Repository와 연동 중입니다.
79
+ github_integration_delete_select_warning: 삭제할 Repository를 선택하세요.
80
+ github_integration_missing_creative: 연동할 Creative가 선택되지 않았습니다.
81
+ github_integration_delete_confirm: Github 연동을 삭제하시겠습니까?
82
+ github_integration_delete_success: Github 연동이 삭제되었습니다.
83
+ github_integration_delete_error: Github 연동 삭제에 실패했습니다.
84
+ github_integration_delete_button: 연동 삭제
85
+ github_integration_existing_intro: '이미 연동된 Repository 목록입니다:'
86
+ github_integration_prompt_title: Gemini 분석 프롬프트를 확인하고 필요시 수정하세요.
87
+ github_integration_prompt_help: '아래 플레이스홀더를 사용하여 런타임 정보를 삽입할 수 있습니다:'
88
+ notion_integration_saved: Notion 연동이 저장되었습니다.
89
+ notion_integration_login_required: Notion 계정으로 로그인하여 연동을 시작하세요.
90
+ notion_integration_missing_creative: 연동할 Creative가 선택되지 않았습니다.
91
+ notion_integration_existing_message: 이미 아래 Notion 페이지와 연동 중입니다.
92
+ notion_integration_delete_confirm: Notion 연동을 삭제하시겠습니까?
93
+ notion_integration_delete_success: Notion 연동이 삭제되었습니다.
94
+ notion_integration_delete_error: Notion 연동 삭제에 실패했습니다.
95
+ notion_integration_delete_button: 연동 삭제
96
+ notion_export_success: Creative가 Notion으로 내보내기 되었습니다.
97
+ notion_sync_success: Creative가 Notion과 동기화되었습니다.
98
+ notion_integration_title: Notion 연동 설정
99
+ notion_integration_connect: Notion 계정으로 로그인하여 내보내기를 시작하세요.
100
+ notion_login_button: Notion 계정으로 로그인
101
+ notion_integration_existing_intro: '연동된 Notion 페이지:'
102
+ notion_sync_button: Notion으로 동기화
103
+ notion_integration_workspace: Notion 워크스페이스가 연결되었습니다. 내보내기 방법을 선택하세요.
104
+ notion_export_option: '내보내기 옵션:'
105
+ notion_export_new_page: 새 페이지 생성
106
+ notion_export_under_page: 기존 페이지 하위에 생성
107
+ notion_parent_page: '상위 페이지:'
108
+ notion_loading: 페이지 로딩 중...
109
+ notion_integration_summary: 'Creative 트리를 Notion으로 내보낼 준비가 되었습니다:'
110
+ notion_creative_title: '루트 Creative:'
111
+ notion_workspace: '워크스페이스:'
112
+ notion_export_as: '내보내기 형태:'
113
+ notion_tree_note: 선택한 크리에이티브와 모든 하위 항목이 구조화된 문서로 내보내집니다.
114
+ notion_export_button: Notion으로 내보내기
115
+ search_placeholder: 크리에이티브 검색...
116
+ plan_tags_applied: 선택한 크리에이티브에 플랜 태그가 적용되었습니다.
117
+ plan_tag_failed: 플랜과 하나 이상의 크리에이티브를 선택하세요.
118
+ plan_tags_removed: 선택한 크리에이티브에서 플랜 태그가 제거되었습니다.
119
+ plan_tag_remove_failed: 플랜과 하나 이상의 크리에이티브를 선택하세요.
120
+ select_plan: 계획 선택
121
+ remove_plan: 계획 제거
122
+ add_plan: 계획 추가
123
+ set_plan_title: 선택된 크리에이티브에 대한 계획 설정
124
+ are_you_sure_delete_share: 공유를 삭제하시겠습니까?
125
+ share_deleted: 공유가 삭제 되었습니다.
126
+ select_one_creative: 하나 이상의 크리에이티브를 선택하세요.
127
+ select_plan_to_remove: 제거할 플랜을 선택하세요.
128
+ inline_move_up_tooltip: 이전 크리에이티브로 이동 (위쪽 화살표 / Ctrl+P)
129
+ inline_move_down_tooltip: 다음 크리에이티브로 이동 (아래쪽 화살표 / Ctrl+N)
130
+ inline_add_sibling_tooltip: 형제 크리에이티브 추가 (Shift+Enter)
131
+ inline_level_down_tooltip: 들여쓰기 / 자식으로 이동 (Ctrl/Cmd+Shift+.)
132
+ inline_level_up_tooltip: 내어쓰기 / 상위로 이동 (Ctrl/Cmd+Shift+,)
133
+ inline_close_tooltip: 편집기 닫기 (Esc)
134
+ share:
135
+ shared: 크리에이티브가 성공적으로 공유되었습니다.
136
+ already_shared_in_parent: 크리에이티브가 상위 크리에이티브에 이미 공유되었습니다.
137
+ can_not_share_by_no_access_in_parent: 상위 크리에이티브에 접근 금지가 있어서 공유할 수 없습니다.
138
+ notices:
139
+ progress_recalculated: 진행률을 다시 계산 했습니다.
140
+ errors:
141
+ no_permission: 이 작업을 수행할 권한이 없습니다.
142
+ inline_editor:
143
+ placeholder: 크리에이티브를 설명해주세요…
144
+ edit_title: 크리에이티브 수정
145
+ edit:
146
+ inline_editor_only_html: 크리에이티브 수정은 인라인 편집기에서 바로 진행하세요.
147
+ new:
148
+ inline_editor_only_html: 크리에이티브 추가는 트리의 인라인 편집기에서 진행하세요.
149
+ help:
150
+ add_child_creative: 하위 크리에이티브 추가
151
+ inventory:
152
+ progress: "%{value} 진행률"
153
+ completed: 완료됨
154
+ todo: 할 일
155
+ notify_me: 진행 상황을 이메일로 알려주세요.
156
+ placeholder_email: you@example.com
157
+ submit: 제출
158
+ slide_view:
159
+ go_to_creative: 현재 크리에이티브로 이동
160
+ creative_mailer:
161
+ in_stock:
162
+ subject: 좋은 소식!
163
+ message_html: "%{creative} 이 다시 이용 가능합니다."
164
+ unsubscribe: 구독 취소
@@ -0,0 +1,19 @@
1
+ ---
2
+ en:
3
+ collavre:
4
+ invites:
5
+ invalid: Invitation link is invalid or has expired.
6
+ invite_sent: Invitation email sent.
7
+ show:
8
+ title: Invitation
9
+ invited_by: '%{inviter} (%{email}) invited you to the "%{creative}" creative.'
10
+ prompt: To accept the invitation, please log in or sign up.
11
+ login: Log in
12
+ sign_up: Sign up
13
+ invitation_mailer:
14
+ invite:
15
+ subject: You're invited to Collavre
16
+ message_html: You have been invited to collaborate on "%{creative}". Click
17
+ %{link} to accept within 15 days.
18
+ message_text: 'You have been invited to collaborate on "%{creative}". Join
19
+ using this link: %{link}'
@@ -0,0 +1,17 @@
1
+ ---
2
+ ko:
3
+ collavre:
4
+ invites:
5
+ invalid: 초대 링크가 잘못되었거나 만료되었습니다.
6
+ invite_sent: 초대 이메일을 보냈습니다.
7
+ show:
8
+ title: 초대
9
+ invited_by: '%{inviter} (%{email})님이 "%{creative}" 크리에이티브에 초대했습니다.'
10
+ prompt: 초대를 수락하려면 로그인하거나 회원 가입을 해주세요.
11
+ login: 로그인
12
+ sign_up: 회원 가입
13
+ invitation_mailer:
14
+ invite:
15
+ subject: 콜라브에 초대되었습니다
16
+ message_html: '"%{creative}" 협업에 초대되었습니다. %{link} 링크를 클릭해 15일 이내에 수락하세요.'
17
+ message_text: '"%{creative}" 협업에 초대되었습니다. 이 링크로 참여하세요: %{link}'
@@ -0,0 +1,8 @@
1
+ ---
2
+ en:
3
+ collavre:
4
+ notifications:
5
+ permission_prompt: We would like to send you notifications about updates.
6
+ allow: Allow
7
+ deny: Don't allow
8
+ confirm_deny: Are you sure you do not want to allow notifications?
@@ -0,0 +1,8 @@
1
+ ---
2
+ ko:
3
+ collavre:
4
+ notifications:
5
+ permission_prompt: 업데이트에 대한 알림을 보내드려도 될까요?
6
+ allow: 허용
7
+ deny: 허용 안 함
8
+ confirm_deny: 알림을 허용하지 않겠습니까?
@@ -0,0 +1,12 @@
1
+ ---
2
+ en:
3
+ collavre:
4
+ plans:
5
+ add_plan: Add Plan
6
+ target_date: Target Date
7
+ plan_name: Plan Name
8
+ created: Plan was successfully created.
9
+ deleted: Plan deleted.
10
+ delete_confirm: Are you sure you want to delete this plan?
11
+ today: Today
12
+ select_creative: Select Creative
@@ -0,0 +1,19 @@
1
+ ---
2
+ ko:
3
+ collavre:
4
+ plans:
5
+ add_plan: 계획 추가
6
+ target_date: 목표 날짜
7
+ plan_name: 계획 이름
8
+ created: 계획이 성공적으로 생성되었습니다.
9
+ deleted: 계획이 삭제되었습니다.
10
+ delete_confirm: 이 계획을 삭제하시겠습니까?
11
+ today: 오늘
12
+ select_creative: 크리에이티브 선택
13
+ activerecord:
14
+ errors:
15
+ models:
16
+ plan:
17
+ attributes:
18
+ target_date:
19
+ blank: 목표 날짜를 입력하세요.
@@ -0,0 +1,29 @@
1
+ ---
2
+ en:
3
+ collavre:
4
+ themes:
5
+ manage: Manage Themes
6
+ manage_themes: Manage Themes
7
+ create_new: Create New Theme
8
+ description_prompt: Describe your theme (e.g. "Cyberpunk Neon with dark pulsing
9
+ colors")
10
+ generate: Generate Theme
11
+ your_themes: Your Themes
12
+ name: Name
13
+ preview: Preview
14
+ created_at: Created At
15
+ actions: Actions
16
+ active: Active
17
+ apply: Apply
18
+ delete: Delete
19
+ confirm_delete: Are you sure?
20
+ no_themes: No custom themes created yet.
21
+ alerts:
22
+ description_empty: Theme description cannot be empty.
23
+ generation_failed: Failed to generate theme. AI might be unavailable or returned
24
+ invalid data.
25
+ success: Theme generated successfully!
26
+ save_failed: Failed to save theme.
27
+ deleted: Theme deleted.
28
+ applied: Theme applied!
29
+ apply_failed: 'Failed to apply theme: %{errors}'
@@ -0,0 +1,27 @@
1
+ ---
2
+ ko:
3
+ collavre:
4
+ themes:
5
+ manage: 테마 관리
6
+ manage_themes: 테마 관리
7
+ create_new: 새 테마 만들기
8
+ description_prompt: '테마를 설명해주세요 (예: "어두운 네온 사이버펑크 스타일")'
9
+ generate: 테마 생성
10
+ your_themes: 내 테마
11
+ name: 이름
12
+ preview: 미리보기
13
+ created_at: 생성일
14
+ actions: 관리
15
+ active: 사용 중
16
+ apply: 적용
17
+ delete: 삭제
18
+ confirm_delete: 정말 삭제하시겠습니까?
19
+ no_themes: 생성된 테마가 없습니다.
20
+ alerts:
21
+ description_empty: 테마 설명을 입력해주세요.
22
+ generation_failed: 테마 생성에 실패했습니다. AI 서비스를 사용할 수 없거나 잘못된 데이터가 반환되었습니다.
23
+ success: 테마가 성공적으로 생성되었습니다!
24
+ save_failed: 테마 저장에 실패했습니다.
25
+ deleted: 테마가 삭제되었습니다.
26
+ applied: 테마가 적용되었습니다!
27
+ apply_failed: '테마 적용 실패: %{errors}'
@@ -0,0 +1,151 @@
1
+ ---
2
+ en:
3
+ collavre:
4
+ users:
5
+ app_header:
6
+ your_creativeness_is_coming: Your Creativeness Is Coming!
7
+ a_tracker_of_your_creatives: Document the specs. Watch progress unfold.
8
+ new:
9
+ enter_your_name: Enter your name
10
+ enter_your_email: Enter your email
11
+ enter_your_password: Enter your password
12
+ confirm_your_password: Confirm your password
13
+ sign_up: Sign Up
14
+ back_to_sign_in: Back to Sign In
15
+ success_sign_up: Account created successfully! Please check your email to
16
+ verify.
17
+ add_ai_user: Add AI User
18
+ details_ai_notice: This is an AI Agent. You can configure its settings and tools.
19
+ new_ai:
20
+ title: Add AI User
21
+ id_label: ID
22
+ name_label: Name
23
+ system_prompt_label: System Prompt
24
+ vendor_label: LLM Vendor
25
+ model_label: Model
26
+ api_key_label: API Key
27
+ api_key_help: If provided, this key will be used instead of the system default.
28
+ Stored encrypted.
29
+ searchable_label: Allow this AI to be searchable and mentionable
30
+ searchable_help: When enabled, others can find and mention this AI by name.
31
+ submit: Add AI Agent
32
+ tools_note: You can check and test available tools after creating the agent.
33
+ create_ai:
34
+ success: AI User created successfully.
35
+ edit_ai:
36
+ title: Edit AI Agent
37
+ link: Edit
38
+ not_an_ai: This user is not an AI agent.
39
+ tools_title: Available Tools
40
+ tools_description: These tools are available for the agent to use.
41
+ no_tools_found: No tools found.
42
+ chat_title: Chat with Agent
43
+ chat_placeholder: Type a message to test the agent...
44
+ update_ai:
45
+ success: AI Agent updated successfully.
46
+ sessions:
47
+ new:
48
+ forgot_password: Forgot password?
49
+ try_again_later: Try again later.
50
+ try_another_email_or_password: Try another email address or password.
51
+ email_not_verified: You must verify your email before signing in.
52
+ provider_disabled: This authentication method is currently disabled.
53
+ account_locked: Account is locked due to too many failed login attempts.
54
+ Please try again in %{minutes} minute(s).
55
+ account_locked_now: Account has been locked due to too many failed login
56
+ attempts. Please try again in %{minutes} minute(s).
57
+ sign_in_with_google: Sign in with Google
58
+ sign_in_with_webauthn: Sign in with Passkey
59
+ webauthn:
60
+ passkeys: Passkeys
61
+ add: Add Passkey
62
+ manage: Manage Passkeys
63
+ nickname: Device Name
64
+ register: Register
65
+ registered_on: Registered on %{date}
66
+ credential_not_found: Passkey not found. Please register a passkey in your
67
+ profile settings after logging in with password.
68
+ not_supported: Passkeys are not supported on this device or browser.
69
+ date: Date
70
+ list_empty: No passkeys registered.
71
+ confirm_delete: Are you sure you want to delete this passkey?
72
+ delete: Delete
73
+ deleted: Passkey deleted.
74
+ details: User Details
75
+ name: Name
76
+ email: Email
77
+ change_password: Change password
78
+ tabs:
79
+ profile: Profile
80
+ user_management: User management
81
+ profile: Profile
82
+ avatar: Avatar
83
+ avatar_url: Avatar URL
84
+ current_avatar: Current avatar
85
+ new_avatar_preview: New avatar preview
86
+ update_profile: Update Profile
87
+ delete: Delete
88
+ make_system_admin: Make system admin
89
+ make_normal_user: Make normal user
90
+ confirm_grant_system_admin: Grant system admin access to this user?
91
+ confirm_destroy: Are you sure you want to delete all of this user's data?
92
+ index_title: Users
93
+ push_token_present: Push token present
94
+ push_token_absent: No push token
95
+ display_level: Max Display Level
96
+ completion_mark: Completion Mark
97
+ theme: Theme
98
+ calendar_id: Calendar ID
99
+ notifications_enabled: Enable notifications
100
+ locale: Language
101
+ locales:
102
+ en: English
103
+ ko: Korean
104
+ timezone: Timezone
105
+ profile_updated: Profile updated successfully.
106
+ avatar_updated: Avatar updated successfully.
107
+ password_updated: Password updated successfully.
108
+ password_update_failed: Failed to update password.
109
+ current_password: Current Password
110
+ new_password: New Password
111
+ confirm_new_password: Confirm New Password
112
+ password_min_length_hint: Minimum %{count} characters
113
+ back: Back
114
+ current_password_incorrect: Current password is incorrect.
115
+ forgot_password: Forgot your password?
116
+ send_password_reset_instructions: Email reset instructions
117
+ email_verified: Email verified successfully.
118
+ verification_invalid: Verification link is invalid or has expired.
119
+ email_verification:
120
+ invalid_token: Verification link is invalid or has expired.
121
+ admin_required: You must be a system administrator to access that page.
122
+ system_admin:
123
+ granted: System admin access granted.
124
+ revoked: System admin access removed.
125
+ failed: Could not update the user's system admin status.
126
+ destroy:
127
+ success: The user and all associated data have been deleted.
128
+ failure: Could not delete the user.
129
+ cannot_delete_self: You cannot delete your own account.
130
+ not_authorized: You can only delete AI Users you created or be a system administrator.
131
+ delete_ai_user: Delete AI User
132
+ confirm_ai: Delete all data for this AI Agent?
133
+ table:
134
+ avatar: Avatar
135
+ name: Name
136
+ email: Email
137
+ last_login_at: Last login
138
+ last_login_unknown: Never
139
+ push_token: Push token
140
+ notifications: Notifications
141
+ notifications_enabled: Enabled
142
+ notifications_disabled: Disabled
143
+ notifications_unset: Not configured
144
+ actions: Actions
145
+ current_user: This is you
146
+ system_admin: System admin
147
+ user_mailer:
148
+ email_verification:
149
+ subject: Verify your email
150
+ message_html: Please verify your email by clicking %{link}.
151
+ message_text: 'Please verify your email by visiting the following link: %{link}'