Base inicial até $10 em cada termo
69 / 59 / 49, de 59 / 49 / 39. A escada de compromisso não é tocada pelo design — ainda exatamente $10 de desconto para um ano e $20 para três — que é o padrão ...
Ofereça o prazo de cobrança adiantado, e pare de escondê-lo na Enterprise
Duas maneiras separadas desta página reteve a escolha. O console org tinha um controle de três períodos, mas foi dobrado para o direito do "Escolher plano" que...
Citar o compromisso economizando em dólares nas cartas do plano
O desconto é de $10 por ano e $20 em três anos, que é como o catálogo define-o e como é anunciado em qualquer outro lugar. Renderizado em percentagem deixou de ...
Say which subscription the launchpad pill's gate is about
"Not already paying" means the VIEWER's own seat — the same question the Plans & billing page answers when it decides whether to offer them one. Worth stating, ...
Stop offering the internal platform-owner plan for sale
listPlansForMarket filtered on isActive alone, and active is not the same as on the menu. OWNER_UNLIMITED ("Platform Owner — Internal") is active, carries no pr...
A oferta em execução, em Planos e faturamento e na plataforma de lançamento
O console citado lista preços enquanto kamocrm.com anunciou um terceiro fora do mesmo plano, porque nada no kamo-interno podia ver que uma oferta existia. Agora...
Servir a oferta de corrida, e dizer se um assento é realmente PAID para
Adiciona GET /markets/{id}/promoção. Não havia nenhuma maneira de uma superfície de compra no aplicativo para saber que uma oferta estava em andamento — o site ...
Definir "/sede/mês" à direita da sua própria linha
O preço mantém a borda esquerda e a unidade toma a direita, então o parêntese dois a largura do cartão em vez de empilhar o flush à esquerda — que deixou o núme...
A oferta atinge o herói ea faixa de preços
O herói já tinha uma fita de contagem regressiva, e não tinha nada desde então. o catálogo foi movido para uma porcentagem: `pickHeroOffer` filtrado em FLAT PER...
Coloque "/sentar/mês" abaixo do preço, não ao lado dele
Taxas de três dígitos e "/seat/mês" não compartilham uma linha em um cartão de quatro-across. Inline em 1rem o rótulo embrulhado no meio do texto ou espremeu o ...
Uma promoção que não resolve não deve alargar-se a todos os planos
Um EMPTY aplicávelPlanids significa "sem restrição" a jusante, então uma restrição que falha em TRANSLATE não deve ser permitido tornar-se uma lista vazia. A Ap...
Reconstruir para pegar BillingCycle. Trienal
Nenhuma mudança de fonte. SecurityService clona a biblioteca kamo-shared no tempo de construção de imagens, e o catálogo que serve está prestes a carregar linha...
Um código promocional funciona no seu último dia
A data final é o último dia em que um código funciona, não o primeiro dia em que não funciona — SubscriptionPromotions.check lê-lo dessa forma no servidor, ea o...
Um trilho de compromisso de três prazos, e uma promoção a página pode provar
Preços novos: Inicio $59/$49/$39 and Business $119/$109/$99 por assento por mês on Mensal, anual e trienal. O trilho substitui o par mensal/anual e sua pílula "...
Vender o prazo de três anos, e parar quatro cópias do ciclo à deriva
Os ciclos de faturamento foram digitados à mão em cinco lugares. Um deles, o editor de preço de plano, oferecido "BIENNIAL" — um valor que o servidor nunca teve...
Contar o prazo de três anos, e citar a sua taxa para o console
BillingCycles ganha TRIENNIAL, expresso à Stripe como três ANOS em vez de trinta e seis meses para que a renovação acompanhe o aniversário de inscrição — a mesm...
Um período de três anos, e as regras de promoção que nunca foram lidos
Adiciona BillingCycle.TRIENNIAL para que um assinante possa se comprometer por três anos. A coluna é varchar sem restrição de verificação em qualquer lugar, ent...
Mostrar o título do relatório em Enviar para IA, editável
A janela permite que um operador edite a instrução e a descrição, mas nunca mostrou o título, e o título também não estava na mensagem — a sessão em a outra ext...
Coloque o título do relatório na mensagem e deixe-o ser corrigido
Uma expedição compôs as instruções do operador e a descrição do erro com o separador entre eles. O título nunca esteve nele, então a sessão abrindo o mensagem l...
Carry the report title through a Send To AI dispatch
The dispatch sent the operator's instruction and the bug description and nothing else, so the one line saying what the report is ABOUT never reached the session...
Determine os botões Texto, Conversa e Nota do cabeçalho na aba que nomeiam
A visão principal mantém sua seleção de abas na URL — `tab` para a aba principal, `commsTab` para a Sub-tab de comunicações — e uma ação rápida de cabeçalho def...
Dizer por que um número não pôde ser aberto, em vez de um mostrador vazio
Abrir a ferramenta SMS em um número de telefone resolve uma conversa para ele primeiro, e essa solução pode ser recusado — VOIPService responde "sem número de t...
Responder a uma mensagem, e levar o leitor para o que ele responde
MediaService carregou um pai de resposta e a citação para desenhar para ele desde "enviar a citação com um responder, não apenas o ponteiro"; esta é a metade qu...
Parar de oferecer uma edição uma vez que alguém tenha lido a mensagem
Cada janela de chat que desenha um MessageBubble — os popups de chat dos membros, o social e o ticket conversas que partilham ChatBox — oferecidas Editar na pró...
Recusar uma edição uma vez que outro membro tenha lido a mensagem
PATCH /api/media/mensages/{id} foi deliberadamente ungido em recibos, ao contrário do DELETE ao lado dele. O raciocínio escrito nele foi que não enviar faz pala...
Escurecer a marca xAI para que ela apareça no dropdown do provedor
Ícones simples envia o glifo xAI preenchido #FFFFFF, que é a sua marca cor numa superfície escura. O dropdown do provedor de IA é branco e o aplicativo força o ...
Offer Move on a right-clicked message, not only on a ticked one
Right-clicking a message offered Reply, Reply all, Forward, Report Spam, Archive, Label and Delete. Filing it anywhere other than Archive meant dismissing the m...
Ir para Configurações lidera o menu Configurações, acima da lista de aplicativos
Relatado com duas capturas de tela — uma org com onze aplicativos habilitados, uma com dois — cada um circulando "Ir para Configurações" na parte inferior da su...
Deixe um movimento em massa chegar às pastas que o membro fez
A janela "Mover para a pasta" por detrás da barra de selecção foi construída a partir de um texto literal ['INBOX', 'Archive', 'Trash', 'Junk', 'Drafts'], por i...
Nunca deixe uma aba em branco quando um KamoDesktop for lançado
A aba é aberta em branco dentro do gesto de clique e só navega uma vez um link Volta. Então, qualquer coisa lenta upstream mostrado como uma página branca em br...
O agente de saúde pré-voo deve falhar em segundos, não vinte
health() herdou o padrão de 20 segundos do cliente. É um check-in de vida diante de cada lançamento KamoDesktop, e quando a máquina de dev ficou sem memória 202...
Troca 64G na máquina de dev, e acesso de captura que falha intermitentemente
A página branca em branco era a VM fora de memória. 16Gi de convidado RAM com NO swap significa "fora de memória" vai direto para o assassino OOM: aplicações mo...
Faça pastas inteligentes alcançáveis, e faça clicar em um trabalho
Uma pasta inteligente é uma pesquisa salva que fica onde uma pasta está: nomeie uma pergunta uma vez ("não lido, com um anexo") e está a um clique de distância,...
Serve pastas e rótulos inteligentes como mensagens, não como linhas de índice
Ambos os endpoints responderam fora do email metadata.search index e entregaram o cliente O que a mesa guarda. Uma pasta inteligente retornou SearchIndexEntity ...
Enviar a citação com uma resposta, não apenas o ponteiro
media objs msg.parent id esteve lá o tempo todo e este endpoint aceito paiId no caminho desde threading foi modelado, mas uma resposta cruzou o fio carregando a...
Fazer o eslint realmente correr
`eslint.` não relatou absolutamente nada — não uma árvore limpa, mas um acidente antes dele carregado um único arquivo: TipoErro: Convertendo a estrutura circu...
As perguntas do formulário de relatório saem da fronteira do campo
Um membro apresentou isto contra o próprio relatório: "O que aconteceu?" — e "O que você gostaria de ver?" no lado realce — tinha a fronteira do campo Correndo ...
Um selo que diz que dia, uma vez que o dia está em dúvida
Reportado por um membro: chats passados não podem ser identificados ou verificados pelo data em que foram enviados ou recebidos — apenas uma hora está presente....
Uma nova conversa mostra a troca em vez de ficar em branco
Abra um novo chat de IA, digite uma mensagem, e as balas pensantes apareceram e então nada — nenhuma mensagem enviada, nenhuma resposta, apenas o painel de conv...
Deixar as caixas de seleção do calendário da barra lateral realmente desligar
A caixa de seleção ao lado de cada calendário foi vinculada a `calendar.isVisible` e sua no Change foi 'fetchEvents'. `isVisible` é enviado por EmailService e r...
Passe o site apaga antes que as substituições sejam escritas
A edição de um relatório voltou "O erro não pôde ser salvo: Servidor Interno Erro" sempre que o repórter deixou um site marcado — então cada edição sobre o títu...
Deixe uma conversa em grupo, e mantenha a linha que grava
Saindo é oferecido no pé da lista popover, separado das fileiras acima dele porque pertence ao membro em vez de a qualquer pessoa na lista, e Confirmado com uma...
Deixe um bate-papo em grupo e mantenha as linhas de entrada/saída na transcrição
Sair é DELETE /sessions/{guid}/membership, não removerMembro destinado você mesmo — essa rota recusa auto-remoção de propósito. Remoção é feita TO alguém e nome...
Uma linha de adesão/saída tem de levar o nome de quem é
O ID sozinho não pode ser resolvido no único caso para o qual estas linhas existem. A "removido" ou "esquerda" nomeia alguém que, até lá, já não está na sessão,...
O cabeçalho Favoritos deve controlar um elemento existente
Colapsing a seção desmontou a lista que ele nomeou através de `aria-controls', deixando o cabeçalho apontando para nada. Em seguida, descreve-se uma divulgação ...
Encaminhar removidoPorMembroId para o navegador
O relé copia campos nomeados fora do ChatMessageDto para o quadro STOMP, então um campo que não copia é deixado cair mesmo quando o DTO declara. MEMBRO REMOVED ...
Declare removidoByMemberId, ou o relé deixa-o em silêncio
A carga útil NATS para MEMBRO REMOVED carrega quem fez a remoção, mas o NATS→Relê STOMP projeta cada frame através do ChatMessageDto — então um campo isso class...
Uma regra de título, um limite de grupo, e um renomear a lista ouve
Revisão da filial Chats, quatro descobertas. Ambas as superfícies estavam compondo o nome da conversa à mão em vez de através os helpers @kamo/chat-core export...
Nenhum texto de erro a montante atinge um membro, seja qual for o fornecedor que falhou
membroTexto Porque caiu para obterMessage() por qualquer coisa que não fosse um AiProviderException. Apenas o adaptador HuggingFace classifica as suas recusas; ...
Abra em Chats, uma seção Favoritos e uma conversa em grupo que você pode gerenciar
Cinco pedidos de um membro, todos eles sobre a mesma lacuna: o painel de Chats podia mostrar-te conversas mas não te deu nada a ver com elas. Chats agora é a p...
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.