Reconstruir a actualização da biblioteca partilhada com kamo (modelos de e- mail de sinais)
Pega os novos modelos canônicos esign.signer verification + esign.signe invite para que a sementeForOrg possa semeá-los no primeiro envio.
Modelos de sinais eletrónicos canônicos (verificação + convite)
Adicione dois modelos de email canônicos de larga plataforma semeados por org: - esign.signer verification (step-up OTP: {{code}}, {{name}}) - esign.signe invi...
Registo de repositórios de sinais para o bean de apresentação de contadores
EsignMeterSubmissionService needs EsignUsageRecordRepository, but @EnableJpaRepositórios não escanearam com.kamo.z.shared.esign.repos, então o contexto falhou a...
Medição de uso do sinal eletrônico + verificação de auto-serve do consumidor
#4 medição: - EsignMeterSubmissionService (@Scheduled daily): agregado API-origin EsignUsageRecords per org+period; primeiro 40/period included, the rest submet...
Expor o escopo da chave API SIGNATURE (E-Signnature API)
Adicione o escopo da API E-Signnature ao gerenciador de chaves da API org para que a equipe possa conceder Acesso a e-sign programático de orgs empresariais. Ut...
Gateway e-sign público de API (API SIGNATURE)
Adicionar /api/public/esign/** ao PublicApiController: valida a chave org API, requer o escopo API SIGNATURE, limites de taxa, e encaminha para ESigService API ...
API de envelope programático interno (origem=API) para Negócios
- EsignInternalController (/api/esig/internal/*): X-Internal- Auth + X-Org-Id authed, chamado pelo APIService depois de validar a chave de API SIGNATURE; reutil...
API SIGNATURE api-key escopo + EsignGenericEnvelope.origin
Aditivo, sem bump de versão: - ApiKeyScope.API SIGNATURE — porta a API de assinatura eletrônica programática (Business) - EsignGenericEnvelope.origin (EsignUsag...
Ação Enviar-para-assinatura + status do envelope no editor de documentos
Adicionar um botão 'Enviar para assinatura' ao cabeçalho do editor de modelos que abre um diálogo para enviar o documento para os destinatários e rastrear o sta...
Envelope genérico criar/enviar motor (sender side)
Adicionar as unidades OTK-authed /api/esig/envelopes API kamo-internal para enviar Documentos para assinatura, reutilizando as mesmas entidades de lib partilhad...
Motor de API de assinatura pública para sign.sign.pink
Implementar a API de assinatura /api/esig/public/* que o aplicativo kamo-signer chama, transformando o assinante ao vivo da pré-visualização em uma infraestrutu...
Preços adicionais retrodimensionados com um medidor de faturamento
Stripe (>= 2025-03-31.basil) rejeita o legado use type+aggregate usage modelo medido ('preços medidos devem ser apoiados por metros'), então USAGE BASED add-on ...
Alternar o produto da plataforma na aba Organizações
Superfície a designação plataforma-produto onde pertence — Plataforma → Organizações. Adiciona um interruptor fechado por org (desactivado para o org de topo), ...
Gerenciar Organization.isPlatformProduto da Plataforma → Orgs
PlatformAccountResumo expõe isPlatformProduct + hasSubscription Mercado; novo Põe-te a andar. (plataforma-admin fechado) fixa a bandeira e invalida os direitos ...
Explicit Organization.isPlatformProduto como sinal de raiz de direito
Substitua a heurística derivada de «donos de um mercado SUBSCRIPTION» por uma heurística explícita, Marca de propriedade do administrador. Um produto de platafo...
Selecione o mercado SUBSCRIPTION para configuração de plataforma
KamoCRM possui vários mercados ********************** resolveProductMarket deve escolher o mercado do tipo SUBSCRIPTION (plataforma de acesso) em vez do primeir...
Raíz do produto = próprio mercado SUBSCRIPTION, não qualquer mercado
Uma organização de clientes (por exemplo, BluEleven) detém os seus próprios mercados de negócios (RETAIL/MORTGAGE) gerir a sua empresa enquanto continua a ser c...
Direitos dos membros do âmbito de aplicação à raiz do produto, não KamoCRM
DireitoO serviço resolve agora a raiz do direito de cada membro através DireitoRootResolver (novo ancestral-ou-se-próprio do mercado) em vez de a caminhar para ...
Resolver os direitos por org de raiz de produto, não plataforma de nível superior
Introduzir o direitoRootResolver: o ancestral-ou-se-próprio do mercado mais próximo de uma org (sua raiz de produto), que volta para a plataforma de nível super...
Manter a lista de orgs ao refazer as chamadas de sessão; dedupe
/network re-fired fetchNetworks em cada atualização de sessão de fundo e escondeu a lista inteira em qualquer erro de busca, então um blip transitório ou um vel...
Adicionar o destinatário do envelope, o valor do campo, as entidades de estado do destinatário
Verificar no modelo de sinais de entrada em progresso: EsignEnveleRecipiente (+repo), EsignFieldValue (+repo), EsignRecipientStatus, e uma atualização ESignSign...
Adicionar EsignUsageRecord para medição por assinatura
Nova entidade de uso somente do anexo (mirrors AiUsageRecord) emitida na assinatura conclusão. Apenas assinaturas de origem API contam para um plano incluído me...
Reverter e-mail link clic manipuladores, isolar causa
Relatórios do usuário e-mail-preview cliques de link ainda não fazem nada E texto a seleção é morta no meio do drag. Botão direito do mouse e pairar ambos funci...
Preservar relação de aspecto, nunca esticar logotipos não-quadrados
Frames Favicon PNG/ICO foram produzidos com keepAspectRatio(false), alongamento qualquer logótipo não quadrado num quadrado distorcido. Centrar o logótipo numa ...
Regenerar favicons na rotulagem salvar; sniff tipo de logotipo real
dispositionUpdate (run on every custom-laking save) writed config/css/manifest mas nunca regenerados favicons — que só foram produzidos por provisãoFull. An org...
Seed globals.css do template quando a pasta org não tem
provisionUpdate (run on every color save) reescreveu o css/globals.css da org no lugar, mas esse objeto só existe uma vez provisão O Full copiou- o de o modelo ...
Mostrar logotipo completo com sua extensão real, não hardcoded .svg
A aba de branding construiu logoFullUrl como logo-full.svg na montagem, ignorando o logo de orgFullExt. Logotipos completos carregados como png/jpg/etc ao vivo ...
Atualizar TLSStore cada loop tão recém-emitidos certificados ser servido
update tls store() só foi executado na inicialização e em importações de armazenamento compartilhado, então a cert recentemente emitido pelo cert-manager (HTTP-...
Dar uma infra- estrutura apenas de redirecionamento para que o Traefik v3 o habilite
Traefik v3 desactiva um router IngressRoute com serviços: [] quando allowEmptyServices está desligada (como está aqui), então o domínio- diagnóstico HTTP->Rotea...
Redirecionar todos os hosts HTTP para HTTPS + gate auto-cert para domínios org reais
Domínios org personalizados (por exemplo, login.sign.pink) devolveu o Traefik nu "404 page not found" sobre HTTP simples: o único roteador de redirecionamento p...
Sign.pink + www.sign.pink em STATIC DOMAINS
sign.pink é um novo domínio apex (consumer e-assinature brand / white-label Kamo locatário org). Pré-seed apex + www para que exista um certificado de criptogra...
Persista conversion error em vez de falhar silenciosamente
Tanto o modelo como os gasodutos de conversão de upload regulares engoliram Docs falhas de conversão (logged only), deixando is converted=false sem registro raz...
Instale o turbo via npm no estágio do podador Docker; pin pnpm; adicione .dockerignore
O estágio do podador rodava `pnpm add -g turbo` antes de qualquer package.json existir, então o corepack agarrou o pnpm 11 e falhou com o "global bin directory ...
Novo aplicativo monorepo + mobile-primeiro e-assinatura assinatura
Turborepo + espaços de trabalho pnpm monorepo caixas reutilizáveis e-sign extraído do kamo-internal mais um novo aplicativo kamo-signer ultrapolido - a segunda ...
Reescrever empresa de largura total com visualização ao vivo
LoanProductForm foi uma única coluna estreita (máx. Largura: 880) com codificação Inglês por todo o lado. Agora usa o mesmo padrão empresarial que a página de o...
Layout de duas colunas com painel de visualização ao vivo
A página nova-oferta era uma coluna estreita alta em telas largas — metade desperdiçada O viewport. Agora usa CSS Grid com o formulário à esquerda (5fr) e um pa...
Redesenhar página de nova oferta como espaço de trabalho de duas colunas + visualização ao vivo
Você pediu para imóveis completos, modernos, polidos — último refator colocar um forma de coluna única dentro de uma concha de largura total, que é exatamente a...
Página da nova oferta polaca — estado vazio, crachá LOC, termos personalizados
Três lacunas UX que a página da oferta teve após o refator anterior: 1. Estado vazio. Quando um mercado ainda não tem Produtos de Empréstimo, o dropdown utiliz...
Por oferta substitui por taxa, APR e taxa de origem
LoanOfferCreateO pedido ganha três campos opcionais — interestRateBpsOverride, aprBpsOverride, originationFeeAmountOverride. createDraft aplica- os quando ajust...
Padrão vazio STRIPE CONNECT WEBHOOK SECRET para botas KamoLOS
O mapa de configuração refere-se a: então o placeholder da Spring lançou antes de atingir o nível Java O que já trata o valor como opcional. A inicialização do ...
Track shared-lib LoanRepository → PersonalLoanRepository renomear
Atualiza cada importação e tipo de campo do Repositório de Empréstimos para PersonalLoanRepository através de 20 arquivos fonte KamoLOS + 1 teste (Lombok-injete...
Renomear Repositório de Empréstimos → PersonalRepositório de Empréstimos
Spring Data JPA deriva o nome do bean do repositório da interface nome de classe simples, não do @Repository("...") valor qualificador, então o a solução prévia...
Adicionar /commerce/empréstimos pessoais/nova entrada + página de oferta polida de mercado
A ação QuickActionsBar "Nova Oferta de Empréstimo" apontou para /commerce/empréstimos pessoais/novo mas tal página não existia, então Next.js encaminhado para a...
Polimento empresarial de largura total em 10 páginas
Adota o padrão empresarial moderno (cabeçalho gradual + broadcrumbs + seta traseira + escudo flex de altura completa + conteúdo agrupado com cartão em cinza cla...
Reconstrução do gatilho para obter a entidade PersonalLoan renomeada
A imagem SecurityService em 761019b foi construída antes de compartilhar-lib d14dc54 (que renomeou a entidade de empréstimos pessoais para o nome JPA "PersonalL...
Expor os LOADORES PESSOAIS em catadores de comércio e engajamento
Adiciona PESSOAL LOANS às listas COMMERCE TYPES e tipo de envolvimento para que o novo mercado de empréstimos pessoais KamoLOS pode ser criado a partir dos merc...
Evite Empréstimo / EmpréstimoRepositório colisão com aplicativo hipotecário
O KamoInitializerService falhou ao inicializar porque duas classes @Entity nomeadas 'Empréstimo' e duas classes de repositório chamadas 'LoanRepository' ambas q...
T6+T7 frontend polish + org reports + auto-pay UI
Polimento frontal (T6): - Novo lib/format.ts: helpers Intl locale-aware — formatMoeda / formatoData / formatoDataTime / formatoPercentBps. Substitui o código rí...
Tier 6+7+9+10 — frontend polish, org reports, OpenAPI, JaCoCo
T6 (frontend polish): - New /lib/format.ts: locale-aware formatCurrency / formatDate / formatDateTime / formatPercentBps via Intl APIs (replaces hardcoded t...
Como o que vês no transporte?
Cada uma dessas atualizações pousa automaticamente em seu espaço de trabalho. Comece grátis e veja crescer semana após semana.