実際の API への HTTP 電子メールTemplateEdit
TemplateApi.get から水素化し、templateApi.update 経由で保存します。 カテゴリー dropdown は、インラインのカテゴリ作成の手頃な価格の API 主導です。 変数 picker は変数Contracts.ts (REQUIRED の宣言契約) から読み込みます。 テンプレートキー...
Wire EmailTemplateBrowser を API に + System Defaults タブを追加する
TemplateApi.list() 呼び出しでモックデータの~140行を置き換えます。 コンテンツ 5番目のタブ「システムデフォルト」は、トップレベルの管理とレンダリングのみ表示されます response.systemTemplates から カテゴリApi.list() から入力されたカテゴリフィルタ。 すべての行...
メールを追加するTemplatePreview modal
行アクションプレビューで開きます。 templateApi.preview(); でバックエンドレンダリング スタイル分離のためのサンドボックスされたiframeに表示された結果。 マッチする 使用を送る正確なコードパスなので、プレビューは受信者の受信者です。 SP2の一部.
未使用のメールGeneralManager.tsx(デッドコードの~560行)を削除
部品はどこにでも輸入されませんでした。 トグル(バウンスハンドリング) 購読解除, 配信追跡, 電子メールからのデフォルト) バックエンドがなかったし、 純粋に化粧品の setTimeout スタブでした。 各機能が発送されます 対応するバックエンドが存在すると、独自の仕様を介して。 SP2の一部.
TemplateApi +カテゴリApi +変数Contracts クライアントモジュールを追加
SP1の/api/email/templates/*および************************を包みます 型付きTypeScriptヘルパーでエンドポイント。 変数ContractsはSP1のミラーを映します TemplateKeys Javadoc なので、エディタの変数ピッカーが宣言されている REQU...
Wire EmailTemplateSeedClient into ****************
Thin RestTemplate client that POSTs to EmailService's **************** after an org + owner TeamMember are persisted. Retries twice with backoff; failure throws...
Add EmailTemplateCategoryController REST endpoints
**************** CRUD. Delete response includes reassignedCount — the number of templates that became uncategorized as a result of removing the category. Sessio...
Add EmailTemplateController REST endpoints + DTOs
Exposes /api/email/templates/* CRUD + preview + duplicate + reset-to-default + service-to-service /send + /seed-org/{orgId}. Top-level orgs (no parent) addition...
サービスツーサービスエンドポイントに内部AuthFilter を追加
/api/email/templates/send の X-Internal-Auth ヘッダーを有効化し、 /api/email/templates/seed-org/* パス。 他のパスはこのフィルターをバイパスします (ユーザセッションのauthはそれらを処理します)。 シークレットはINTERNAL AUTH ...
メールを追加するテンプレートカテゴリのCRUD
サービスのレイヤーで強制される org ごとのケースインセンティブな名前の独自性 (DBの部分的なユニークなインデックスにマッチ) 削除 nulls カテゴリ id カテゴリ行を削除する前に影響を受けるテンプレート。 SP1の部分.
Add EmailTemplateService — CRUD + シード + デフォルトへのリセット
トランザクションメールのコアオーケストレーター。 sendToUser はテンプレートを解決します。 対象となる/body をレンダーし、組織から org のプライマリドメインを選択します。 ドメイン, そして、電子メールSmtpService に noReply@{org.domain} を from-address...
NoReplySenderService を 'NoReply@{domain}' のアドレスから追加
アドレスからトランザクション電子メールのための真理の単一ソース。 受け入れる ドメイン文字列、小文字を正規化し、「NoReply@<domain>」を返します。 発信者は、org のドメインを解決しなければなりません(Organization.domains の検索または 同様に)それを渡して下さい。 SP1の部分.
{{var}} 置換用の TemplateRenderer を追加
Stateless regex ベースのレンダラー。 vars が空の文字列を置換し、 属性のテンプレートキー + orgId で WARN ログを出力します。 HTMLエスケープなし v1 — 値がサーバー制御です。 SP1の部分.
Append Z to dateCommitted so JS parses it as UTC
LocalDateTime.toString() produces no timezone designator, causing JavaScript's new Date() to treat the UTC value as local time and display timestamps 7-8 hours ...
Add EmailTemplateSeedRunner for SYSTEM + per-org seeding
Runs at @Order(20) on KamoInitializerService startup. Loads canonical templates from kamo-shared-library resources; upserts SYSTEM rows (no clobber); backfills ...
Convert PT midnight cutoff to UTC for today-count query
Commits are stored in UTC but the cutoff was a naive LocalDateTime in PT, causing yesterday-evening PT commits (00:00–06:59 UTC) to be counted as today.
Add partial unique indexes + CHECK constraints for email_templates
Hibernate ddl-auto can't generate partial unique indexes or computed-CHECK constraints. This commit adds them via the existing idempotent DDL runner pattern aft...
Bump kamo-shared-library version から SP1 への追加
メールテンプレート、メールテンプレートカテゴリ、テンプレートステータス、テンプレートキー、 CanonicalTemplate、CanonicalTemplateLoader、およびcanonical HTMLリソース.
CanonicalTemplateLoader + CanonicalTemplateレコードを追加
3つのREQUIREDテンプレート(WELCOME, PASSWORD RESET)を読みます。 EMAIL VERIFICATION のクラスパスリソースから メニュー によって消費される KamoInitializerシステム・ロー・シード向けサービス SP1の部分.
WELCOME、PASSWORD RESET、EMAIL VERIFICATION 用のcanonical HTML + JSONを追加
システム行のソース・オブ・ツルスコンテンツ。 KamoInitializerServiceでロード CanonicalTemplateLoader と UPSERTed の起動をメール templates に送信します。 SP1の部分.
MailboxId→id と ProviderStatus→status をメールボックスリストの応答で名前変更する
メンバーのメールボックスのリストに対するフロントエンドの期待を持つフィールド名を一直線化します.
メールテンプレートのエンティティティ + リポジトリを追加
テンプレートごとの1つのシステム列を格納 key(org id NULL, is system TRUE)プラス template key ごとの org ごとの 1 つのクローン。 ソフトリファレンス org id/category id. データベース ドライブタイムスタンプ、ボディブロックやタグのJSONB。 リ...
EmailTemplateCategory 実体 + リポジトリを追加
電子メールテンプレートのOrg-scopedカテゴリ。 ソフトBIGINT org id(FKなし) 既存のパターンにマッチします。 ケース・インセンティブ・ネーム・パー・オーガニゼーション KamoInitializerService に追加された部分インデックス経由で強制されます。 SP1の部分.
Add TemplateStatus enum + TemplateKeys 取引テンプレートの定数
REQUIRED/CUSTOM/ARCHIVED のライフサイクル状態と 3 を宣言 必要なテンプレートキー(WELCOME、PASSWORD RESET、EMAIL VERIFICATION)。 各 REQUIRED テンプレートの変数契約は、Javadoc として記述されています。 定数クラス、SP3、SP4 の呼...
Seed KamoCRM with ALL_WORK_ELIGIBLE on fresh installs
The createOrg() helper applies this single argument to both ageReqTypeMember and ageReqTypeTeamMember; consistent with platform convention. Pairs with KamoCRMAg...
Tighten KamoCRMAgeReqUpdateRunner per review
- Restore Javadoc paragraph explaining @Order(10) rationale. - Test now references the UPDATE_SQL constant directly instead of duplicating the SQL string, so ...
Add one-time runner to migrate KamoCRM agereq to ALL_WORK_ELIGIBLE
Conditional idempotent UPDATE runs on service startup; WHERE clause checks the expected old value so re-runs are no-ops. Errors are logged and swallowed — start...
すべてのCSS-filterロゴインスタンスをWhite SVGに置き換える
運行、SubNavigation、Footer、SubFooterおよびPreloaderはすべて使用しました 同じ壊れたフィルタの明るさ-0 の反転パターン。 交換する ボード全体にロゴフルホワイト.svg.
CSS フィルターの代わりにフッターでホワイトSVGロゴを使用する
Nav と同じ修正 — バックドロップフィルタ内の img の CSS フィルターは、iOS Safari では信頼できません.
テーマCSSのオーバーライドに対する!importantでカラースキームを監視する
DynamicMetaLoaderは、カスケードに勝つリモートCSSを注入することができます。 追加する !importantはカラースキームを保証します。ダークはテーマのスタイルシートで上書きすることはできません.
TouchOptimized min-heightの執行からフッターとnvのリンクを除外
TouchOptimized は minHeight:44px を全ての <a> 要素の短い値に設定しました。 フットナフリンク(〜20px)を含む44px。 水分補給時のこのラン 硬いリフレッシュ、各<li>の屈曲項目を高さ44pxにし、作り出す フッターリンク列のダブルスピアリング。 Footer/navリンクは...
CSSフィルタではなく、あらかじめレンダリングされたホワイトSVGロゴを使用する
バックドロップフィルタ内の img の CSS フィルターは、iOS Safari では信頼できません。 #ffffff にセットされているすべての塗りつぶしでロゴ-full-white.svg を生成し、それをロードします 直接 — フィルター無し、すべての装置で白く保証されるブラウザのquirks無し.
テイルウィンド ダーク モード バリアントをクラスベースにロックし、OS のメディア クエリは不要
Tailwind v4 デフォルトダーク: 優先色スキーム (OS 設定) に対応するユーティリティ。 @variant のオーバーライドにより、 .dark のクラスが .dark のときにのみ有効になります。 DOMに存在するOSは、任意のデバイス上の色をフリップすることはできません.
信頼できる白いレンダリングのためのロゴ リンクのインライン フィルター様式を使用して下さい
Img 要素の Tailwind フィルタクラスは、モバイルブラウザ全体で矛盾しています。 アンカー要素上のインラインスタイルは、いつでも明るさ(0) invert(1)を保証します.
ダークカラースキームを強制するので、ブラウザはライトモードレンダリングを適用しません
'light' から 'dark' まで、globals.css、generateViewport、および html 要素スタイル — これは、SVG とネイティブ UI のレンダリングからブラウザーを停止します。 暗い背景にロゴが黒く見えるようにしたライトモードで.
モバイル上のnav行の後ろのレンダリングからロゴを防止
CSSフィルタ付きのdiv wrapperは、競合する新しいスタックコンテキストを作成しました モバイルブラウザのヘッダーのバックドロップフィルタで、ロゴをペイントする ヘッダーの背景の後ろ。 Image 要素に直接フィルタークラスを適用します.
JumpToBarとPreviewBannerでスクロールバーとモバイルクリップを解決
- オーバーフローを追加する: 垂直スクロールバーを防ぐためにJumpToBar内部コンテナに隠される - PreviewBannerコンテンツをモバイルでラップできるようにするため、テキストがポートレート電話にクリップされていない
スペースY-4をフッターリンクリストにインラインフレックスギャップで置き換える
Tailwind スペース-y-4 は :where() (特異性 0) を使用して、CSS でレースします。 不連続な縦の間隔を引き起こしている堅い更新のローディング。 インライン スタイルはSSR HTMLに埋め込まれ、すぐに適用し、独立します 外部CSSロード注文.
Set Traefik externalTrafficPolicy=Local to preserve client IP
With the default "Cluster" policy, kube-proxy SNATs external traffic to the node IP before forwarding to Traefik. That caused Traefik to see the node IP as the ...
すべてのロケールに欠落したインテグレーションi18nキーを追加
「カスタムインテグレーションが必要?」の下の「リクエストの送信」ボタン ログイン ***************************************************** キーがどこにも定義されていないため。 全22ロケールにキーを追加 また、まだステープルカスタムCtaSubheadingコピーをク...
インテグレーションロゴ+正確な/インテグレーションメタデータ
インテグレーションページとハブは、ベンダーのロゴを表示できるようになりました(既存のロゴを使用する) **************************** ウェブサイトのアセット TechStackBannerは既に使用しています。 ストールのマーケティング言語の削除 /integrations サブタイトル、OG...
すべてのホームページリストプロバイダに/integrationsを拡大
/integrationsページを実際の統合と関連付ける ホームページ(TechStackBanner) Add 28新しい統合ページマッチング 製品が実際に提供するもの: 音声と電話: - RingCentral(音声への再分類) - FreePBX(近日公開、リクエスト駆動) SMS: - トゥリオ - ヴォナ...
ホーム Mortgageブローカー業界ページを追加
/solutions/mortgage-brokersの新産業ソリューションページ 仲介業者および融資先 正直なプラットフォームをフォロー: コアCRM + comms + docs + 借り手と紹介パートナーに適用されるAI 関係の層、mortgage固有の機能性(LOSの統合、 クレジットプル、レートシートの自動化...
正直なマーケティング — 実際のプラットフォーム機能にページを揃える
実際のKamoCRM製品の機能に対するマーケティングページの完全なレビュー. 今日のビルドされていない機能について製造されたクレームを削除し、再配置 要求可能な業界固有の統合固有の製造 新機能リクエストシステムによる機能。 実際にKamoCRMが提供するもの(現在正確に反映されています): - カスタマイズ可能なパイ...
Add 92 SEOページ — 業界、統合、用語集
SEOコンテンツ拡張計画の層1を実装: 3つの新しいコンテンツ 92の新しいクロール可能なURLと3ハブページを合計したサブシステム。 1. /solutions — 36 業界のランディングページ 不動産、代理店、専門サービス、金融サービス、法律、 保険、フィットネススタジオ、サロン、スパ、ホームサービス、清掃 サ...
Add geo-database-url to analytics-secret for CockroachDB geolite lookup
Kamo Analytics uses this URL to look up visitor IP→country/region/city from the **************** tables. Uses kamo user with password auth and sslmode=require (...
