Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · EmailService

    Chei DKIM și un autograf relaxat/relaxat rsa-sha256 pentru domeniile de trimitere ale organizațiilor

    DkimKeys generează un domeniu RSA-2048 cheie (păstrat în blogul furnizor de vrac criptat al org) și TXT valoarea pe care un membru o publică la kamoXXXXXX. domainkey.<domain>. DkimSigner semnează un mesaj exact ca transport va trimite-l sunt prezente receptoarele de antete și utilizarea buclelor de feedback (inclusiv Feedback-ID, niciodată un antet X, deoarece benzile de releu X-Kamo-Ref). Verificat în teste de Apache jDKIM, o implementare independentă: o campanie- mesaj în formă verifică, încă verifică o dată releu benzi X-Kamo-Ref, și nu reușește pe un corp schimbat sau Subiect.

  2. · EmailService

    DNS pentru trimiterea de domenii

    LiveDnsRezolvator cere numele de autor al zonei (găsit prin 1.1.1.1/8.8.8.8), astfel încât un record a membru salvat la furnizorul lor DNS este văzut la o dată decât după cache-ul negativ al unui rezolver expiră; acesta revine rezolvatorilor publici la o sesizare sau la o pauză, și retries peste TCP atunci când o răspuns nu se potrivește cu o datagramă (dnsjava 3.5 nu reușește să parse google. COM este trunchiat TXT altfel). SpfEvaluator evaluează politica unui domeniu pentru o adresă IPv4 ca un server receptor ar (RFC 7208: ************* redirectionare, 10-privire si 2-vizita-privire limite), deci un CNAME la contact.kamocrm.com, un include, sau un ip4 gol toate citit la fel. DnsProviders denumește compania care rulează DNS dintr-o zonă din serverele sale, pentru instrucțiuni specifice furnizorului.

  3. · EmailService

    Releul comun de org (47.181.8.86) este însămânțat pentru fiecare organizație; releul platformei rămâne KamoCRM lui

    PlatformRelayProperties cunoaște acum ambele relee in-cluster: postfix-bulk (47.1818.8.87, hello.kamocrm.com) și postfix-orgs (47.181.8.86), cu adresa de ieșire, selectorul DKIM și organizațiile țintă DNS" trimiterea domeniilor CNAME către (contact.kamocrm.com). Ambele numere ca relee, astfel încât ambele obține rapoarte de livrare. Startup backfill seeds k3m1-org-relay as a SHARED platforma gazdă (STARTTLS + PLAIN sign-in from the opțional Secret vrac-org-relay-auth, auto-semnat așa tlsVerificați off), oprit în propria rotație KamoCRM Astfel, e-mailul său rămâne pe .87; însămânțat până când un sign-in este configurat, iar acreditările sale urmează config pe la fiecare început. k3m1-bulk-relay se face PLATFORM ONLY o singură dată.

  4. · KlusterServices

    Postfix-orgs, releul comun în vrac fiecare organizație trimite prin 47.181.8.86

    Poşta de campanie a KamoCRM continuă să plece prin postfix-bulk (47.181.8.87) şi prin poştă obişnuită Postfix (47.181.8.84). Posta de campanie a oricărei alte organizaţii are propriul IP: postfix-orgs rulează pe rețeaua gazdă a k3m1 și leagă SMTP-ul de ieșire la eno1 (k3m1-ext), care ganglionează/k3m1-următoarele rute în acel port şi nimic altceva. HELO este contact.kamocrm.com, numele Frontier este setarea ca PTR IP. Un gazdăNetwork ascultător nu are NetworkPolitica, astfel încât depunerea este SASL peste necesar STARTTLS pe portul 587 din adresa internă a nodului, numai de la adresele de grup (secrete în mail/SECRETS.md). Se transmite doar ca domeniile de trimitere EmailService a verificat, reîmprospătat fiecare minut Același garda de ieșire ca postfix-bulk deține livrarea până când eno1 este confirmat să plece ca .86, și Aceleaşi rapoarte de livrare şi evenimente. Fiecare refuz este un 4xx, niciodată un 5xx. Adaptat la fișiere fluxul de lucru de implementare deja se aplică, astfel încât fluxul de lucru (și o reconciliere completă a fiecare componentă) este neatinsă.

  5. · kamo-internal

    Taburile de campanie obține săgeți defilare înapoi, fără a ascunde fila selectat

    Pe un ecran prea îngust pentru cele cinci sub-tabe, banda arată acum stânga și dreapta Săgețile de lângă ea, așa cum face banda de filă cu fereastră maximă. Nu mai avea de când prima versiune, în cazul în care butoanele de defilare "auto" MUI taie o filă deschisă prin link (?tab=arhivă) în jumătate: ele apar numai după ce MUI a defilat selectat fila în vedere, să ia 80px din banda, și propria animație de pergamentul MUI atunci Am trecut peste orice corecţie. CampaignTabStrip pune filele într-un suller simplu, fără bar propriu (data-kamo-scrollbar="off"), arată săgețile numai în timp ce filele deversa, și pergamentează fila selectată înapoi în vedere ori de câte ori se schimbă și ori de câte ori Săgețile vin sau pleacă schimbă lățimea. ARROW SCROLL FRACTION provin din TabStripModel maximizat, astfel încât ambele benzi sunt de acord cu atunci când o săgeată este Trăieşte şi cât de departe se mişcă. Verificat în Chrome: la 1600px nici săgeți; la 700px și 520px fiecare filă deschisă de link-ul este pe deplin vizibil cu indicatorul de sub el, inclusiv cele din mijloc; săgețile pagina banda fiecare mod; ArrowRight se mișcă focus de-a lungul filelor și păstrează fila concentrată în vedere, și Introduceți o selectează. Etichetele sale sunt componente. Pergament, reparat manual în fiecare locaţie kamo-translation-dictionary cc484906 (Arabic a avut "la naiba" pentru Scroll dreapta). Vitest Reds aici nu sunt de la această schimbare și nu reușesc identic pe principal: un Scrollbar.test.ts (on NavTopMenuPanel.tsx) și destinatarStatus.test.ts (4; a rămas între 98156e52).

  6. · kamo-internal

    Un mesaj live în campania de e-mail widget devine o carte de reflector

    Cu un singur mesaj în curs, fila In-Progress a fost un singur rând subțire într-o vedere cu cameră pentru mult mai mult, în acest moment widget-ul contează cel mai mult. Când fiecare campanie pe tab este trimiterea sau pauză, și panoul dă fiecare la cel puţin înălţimea minimă, fiecare primeşte acum o carte: - cât de departe prin listă este, într-un număr mare rotunjit în jos, astfel încât nu spune niciodată 100% cu nimic rămas; - banda sa la 10px, capul şi luciul vizibil; - ritmul şi timpul rămase şi "N din total"; - livrate, deschise, click si saritura, ca o pâlnie lângă ritm diagramă pe o carte cu înălțime de rezervă (Lungimi și rate de bare reale) sau un rând de cifre pe una mai scurtă sau mai îngustă; - ritmul său în ultimele 5 minute, un bar pe 15 secunde pe propriul ceas limite. Barul încă se umple este aprins, și timp înainte de panoul a văzut Trimite este un ciot, nu un zero. Cardul are link-ul rândului și pauză/resumare (ambele acum partajate, de la CampaignRow). Se ţine prin finisajul pe care îl sărbătoreşte. Două trimite sta partea una lângă alta într-un geam larg. Alegerea citeste doar dimensiunea panoului, pe care nimic din interior nu se poate schimba, Deci nu poate pâlpâi. O carte care se revarsă oricum este amintit pentru că dimensiunea panoului, care apoi prezintă rânduri. Aranjamentele din interiorul cardului sunt Intrebari de containere pe dimensiunea cardului. Model: paceBuckets răspândește ceea ce sa mutat între două cadre în timp între ei. impinge Sample ia o fereastră, iar cârligul păstrează cinci minute per Trimite în direct, printr-o pauză şi un final. Verificat fără cap pe un ceas 10x cu un ritm diferit, în mod regulat, larg, ferestre înalte, 460 și 668x420, și cu două trimite în geamurile largi și înalte: carduri se potrivesc cu nici o revărsare, iar barele de ritm urmează cadrele, inclusiv O întindere liniştită. Nimic nu se mişcă sub mişcare redusă.

  7. · kamo-internal

    E-mail campanii tab-uri widget sunt etapele de campanie ecran

    Widget a depus campanii sub propria / Live trimis / Proiecte, care a pus un Anulare campanie sub Trimis și unul programat sub Live. Filele sale sunt acum In-Progress, Not Started, Paused and Complete, depus de campanieTabof și numit cu marketing.bulkEmail.tabs.*, astfel încât launchpad și /marketing/email niciodată Pune o campanie în două locuri. Counts provin de la EmailService's noile etape (7481f15); răspunsul unui server mai vechi este numărat din campaniile trimise. Alegerea filei: - Până când membrul alege unul, panoul aterizează pe ceea ce se întâmplă și rămâne în timp ce fila încă deține nimic. Se mișcă doar pentru a arăta un trimis care doar a început, sau atunci când propria filă se termină. Un mesaj care tocmai a terminat. In-Progress pentru celebrarea sa, apoi panoul trece mai departe. - Un rând membrul pauze sau CV-uri rămâne în cazul în care au apăsat, cu sale Reluați, până când părăsesc fila. - Numele scenei arată unde se potrivesc alături de "N mai mult," măsurată împotriva unui ascuns copiere în limba membrului; în caz contrar, fiecare etapă arată pictograma sa, cu denumirea în vârful său de unelte și denumirea accesibilă. Fixe găsite în timpul verificării în browser: - Sparks de la noi deschideri și clicuri pe o campanie terminată nu au fost niciodată vizibile: Linia de cifre le-a tăiat. Acum clipuri doar sub și lângă sine, Şi scânteile zboară de la capătul contorului, aşa că supravieţuiesc gratiilor care cad. - Un rând prea îngust pentru cifrele sale a atras contorul deschis peste Clicked. ă baruri merge primul sub 340px, și nimic care încă nu se potrivește se încheie de vedere intreaga. - O placă KPI prea îngustă pentru numele său și rata eliportat numele ("Ope..."). În schimb, rata nu se vede. - "Nu mai mult" a numărat rândurile care au părăsit fila anterioară. Verificat fără cap la lățimile geamului 322 până la 1360: nici o tăiere rând, nici o scurgere fila, nume/icoane comutator cu și fără "N mai mult," tastele săgeată, un finisaj ținut atunci a trecut mai departe, și scântei deconectat la 668 și 460. Serverul testului de pauză acum răspunde cu campania întreruptă. A eșuat sub sarcină atunci când widget-ul Re-citește 400ms după o pauză returnat campania încă trimiterea.

  8. · EmailService

    Campaniile widget citește pe etape, etapele campaniile ecran fișiere de

    Widget-ul launchpad citit acum grupuri și contează campanii de etape /Utilizarea filelor de introducere pe piață/email: In-Progress (trimitere), Not Started (draft sau programat), întrerupt (ă sau anulat), complet (trimis). Fișiere eșuate după cum Departe a ajuns, aşa cum face campania TabOf acolo. Fiecare etapă este limitată pe cont propriu: programate înainte de schițe și cel mai curând prima; oprit înainte de anulare. este desfăşurată. Înainte de aceasta, o campanie anulată a fost considerată terminată, care este unde utilizatorul a decis astăzi că nu aparţine.

  9. · kamo-internal

    Lista campaniilor urmează ceea ce colegii fac pentru o campanie, live

    BulkEmailWorkspace ia cadrele de schimbare utilizaţiEmailCampaniiWebSocket acum (onChanged, d0b56adf). Un cadru nume o campanie și ce sa întâmplat cu ea, Niciodată campania în sine, astfel încât lista citește că o campanie din nou prin GET /campanii / {id} și pune-l în loc. Arhiva unui coleg sau restabilirea mișcărilor rândul dintre file aici, așa cum se întâmplă, o campanie nouă sau duplicate apare, și unul șters, sau unul care răspunde acum 404, lasă lista. Înscenat Outbox conta urmează aceleași cadre. creeCampaignChangeFollower păstrează câte o citire pe campanie la un moment dat. Rame care ajunge în timp ce o campanie este citită (o listă încărcată în felii anunță fiecare felie) cere pentru o citire mai mult o dată ce se întoarce, astfel încât o explozie costă două citește și o Răspunsul mai vechi nu aterizează niciodată deasupra unuia mai nou. O campanie ştearsă în timp ce citeşte A fost pe drum nu este pus înapoi atunci când se întoarce. Verificat în Chrome împotriva componentei reale prin împingerea ramelor prin cârlig: o restaurare mutat rândul din Arhivat cu o citire, o ștergeți rândul său cu nici unul, un proiect creat a apărut sub Not Started, și cinci cadre pentru unul campanie costa doua citiri.

  10. · kamo-internal

    Campanie de e-mail widget, live pe tabla de lansare

    Un nou widget acasă, e-mail.campanii, pe tabla de lansare a tuturor celor care pot deschide campaniile. Cele cinci drepturi ale sale (EMAIL CAMPAIGNS WIDGET, 321-325) sunt suspendate REVIZUIRE BULK EMAIL, și ADDED, OPTIONAL și semințe mobile din ea în Serviciul de Securitate, așa că ajunge pe și este membrul de a elimina. Poarta de asemenea solicită aplicația de marketing și view BULK EMAIL în sine. Ce arată, citind EmailService nou /api/email/widget/campaigns o dată și se deplasează în direct după aceea: - Patru cifre pentru ultimele două săptămâni (trimis, deschis, clicuri, salturi), fiecare cu un bar pe zi care citește cu pointer sau taste săgeată, și deschide și faceți clic pe rate afară de poștă livrată prin regula utilizării cardului de livrare (angagementRate, acum împărtășit de ambele). - Live / Trimis / Proiecte, cu numere. O campanie de trimitere este o bandă care se mișcă, cu ritmul și timpul rămas; deschide și clicuri se ridică de pe ea pe măsură ce aterizează. A o pauză spune de ce nu poate trimite; unul programat contează în jos; unul trimis arată ratele deschise și click. Pauză și reluați stau pe rând pentru un membru cu MANAGE BULK EMAIL. - O campanie care se termină în timp ce panoul se uită la live pentru moment, cu o explozie, înainte de a trece la Trimis. - Linia de jos poartă știri așa cum se întâmplă; un geam larg îl păstrează într-o coloana cu totalul de astăzi. - Se întinde pentru camera sa: două cifre și rânduri compacte la o coloană, întreg rânduri numai la orice înălțime (lista se încheie mai degrabă decât bucăți), și două coloane de campanii într-un geam larg doar o singură dată ar ascunde unele. Jumatate de calatorie live /topic /campaigns / <orgId>. useEmailCampaignsWebSocket citește fiecare cadru prin intermediul citirii CampaignFrame și câștiguri pe Angajament, pe Changed și onSnapshot, plus cereriSnapshot, care widget-ul se oprește astfel încât un launchpad Niciodată nu cere întregii organizații pentru un instantaneu. pe Progress încă vede doar cadre de progres. Clopotul final trage acum asupra unei tranziţii către SENT, nu mai departe fiecare cadru mai târziu care încă mai spune SENT (reportări întârziate și de livrare republish-l timp de ore), și cârligul nu mai scrie handers ref în timpul Redă. Verificat cu TSC, script-uri de pază, noi și afectate vitest fișiere, și un ham fără cap peste componenta reală la 1x1, 2x1, 2x2, 2x3 și lățimea completă.

  11. · kamo-internal

    In-Progress, Not Started, Paused, Complete and Archived files, and the

    /marketing/email împarte campaniile în cinci sub-tabe, fiecare cu un număr live, Și fiecare campanie este sub exact una: - In-Progress: trimiterea - Nu a început: proiecte și campanii programate - Pauză: campanii întrerupte şi anulate - Complet: trimis - Arhivat: orice ar fi arhivat un membru Eșecul nu este o etapă proprie: beneficiarii nu reușesc, o campanie nu și Serviciul de e-mail nu-l stabileşte niciodată. O campanie care o are este depusă de cât de departe se trimite Am înţeles. Tabula trăiește în ?tab=, astfel încât o reîncărcare, butonul din spate și un link comun păstra ea; o campanie se schimbă de la sine pe măsură ce statutul său se schimbă live; și un gol Tab spune pentru ce este. Archive and Restore sunt în meniul fiecărei campanii (emailservice 39ffa54). Doar o campanie cu nimic pentru a trimite poate fi arhivat: un proiect, sau un trimis sau Anulat unul. Butonul AG Grid fires rowClicked de la propriul ascultător nativ pe containerul rând, care rulează înainte de React lui delegat peClick, astfel încât opritorul celuleiPropagation a venit prea târziu și Rândul navigat la editor sub meniu. Manipulatorul de rând permite acum prin face clic în interiorul unui control de date-campaign-propriu-clic, așa cum face grila de coduri de urmărire, și un click pe numele campaniei nu mai împinge ruta editorului de două ori. Verificat în Chrome împotriva componentei reale: pe origine/main click a mers la Cu această schimbare deschide meniul şi pleacă. nicăieri. Taburi, numere, arhivă și restaurare, file goale și o bandă 520px au fost Am verificat la fel. Formularea este în kamo-translation-dictionary 02109cfc, împins prima și scrisă de mână în fiecare locaţie.

  12. · EmailService

    Arhiva o campanie, și widget-ul lasă cele arhivate

    POST ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Eliberează arhiva campaniei, iar campania DTO o poartă. /marketing/email Screen fișiere o campanie arhivată sub propria filă Arhivată. Doar o campanie care nu mai are nimic de trimis poate fi arhivată. Un programat, trimiterea sau o pauză este refuzată: anulați mai întâi. Arhivarea din nou păstrează prima întâlnire. - Trimite acum, Program și Trimite la cele mai recente arhivadAt clar, astfel încât o campanie trimis din nou este din nou pe filele de lucru. - Ambele sunt anunțate ca cadru de schimbare ARHIVED / UNARHIVED, astfel încât fiecare deschis Ecranul campaniilor și actualizarea widget-ului live. - CampaniaWidgetReads lasă campanii arhivate din recente, inStatuses și Conte byStatus. Construiește pe kamo-împărtășit-library ebdd15f1 *************** și arhivat at coloană, ambele deja în loc. TranzactionalSendRatchetTest a fost roșu pe principal înainte de acest angajament și este încă; Nimic nu atinge aici trimite către User. Celelalte 1554 teste trec.

  13. · kamo-shared-library

    O campanie poate fi arhivată

    EmailCampaignEntity gins archivedAt (archived at): atunci când un membru a arhivat campanie, nul în timp ce nu este. Ecranul /marketing/email primeste o fila arhivata Și widget acasă lasă campanii arhivate afară. Coloana este deja pe cluster, aplicata manual ca fiecare schimbare schema este: ALTER Table email campaign.email campanii ADD COLUMN DACĂ NU EXISTĂ archived at timestamp (6) cu fus orar; Nulable cu nici un implicit, cum ar fi celelalte momente de pe masă, astfel încât codul construit înainte ca această comitere să citească tabelul neschimbat.

  14. · EmailService

    O citire live și cadru live pentru e-mail campanie acasă widget

    GET /api/email/widget/campaigns is the launchpad widget's one read, built for a vedere care stă pe pagina de start a fiecărui telespectator de campanie toată ziua: rânduri slabe cu nu organism (CampaignLine), campanii live primul (trimitere, pauză, programat cel mai curând); apoi cel mai recent terminat și cele mai recente proiecte editate, fiecare grup plafonate; numere exacte per grup; fiecare campanie afișată se deschide, clicuri și rapoarte releu într-o singură conductă Redis citit; ultimele paisprezece organizației zile; alegerea sa de urmărire; și ceasul serverului pentru numărătoare inversă. Este nevoie de VEDE BULK EMAIL, așa cum face lista campaniilor. Trei tipuri de cadru acum plimbare /topic/campanii / <orgId> pe lângă progres: - angajament: CampaignEngagement Pulse coalescesces deschide primul, primul click si releu rapoarte pe campanie și trimite cel mult un cadru pe secundă per pod, cu ceea ce este nou de la ultimul cadru și totalul ca Redis le deține. - modificat: CampaignController anunţă crearea, editarea, ştergerea, duplicat, program, trimitere, pauză, reluare, anulare, audiență și destinatar modificări după ce apelul de serviciu a comis, ca un id și doar un verb. - Nici nu poartă o campanie la nivel înalt Id. Fiecare ecran de campanii citește un cadru cu unul ca progres și copii contoare sale pe rând, astfel încât un cadru de o altă formă care transportă una ar goli conta pe ecrane încă rulează codul vechi. De asemenea, expeditorul numără mesajele acceptate o dată pe lot (stats.zi "trimis"), care widget's sparklines două săptămâni trage din. Apartamentul complet este de 1534 teste cu un eșec, TranzactionalSendRatchetTest, care numără trei supraîncărcări de la c47fcf6 și nu are legătură.

  15. · SecurityService

    Campanie e-mail widget-ul ajunge pe pentru oricine care poate deschide campaniile

    EMAIL CAMPAIGNS WIDGET și semințele sale de politici ADDED, OPȚIONALE și mobile din VECHI BULK EMAIL pe boot care le introduce, astfel încât panoul aterizează pe Launchpad de fiecare membru care poate deja citi campaniile, și este al lor pentru a elimina sau muta. REquired does not seed, as for every widget: a Desfasurarea niciodata nu prinde un geam pe pagina de start a cuiva.

  16. · kamo-shared-library

    Campania de Email are cinci drepturi

    EMAIL CAMPAIGNS WIDGET (321) și cei patru copii politici (322-325), spânzurați Off view BULK EMAIL: fiecare citit în spatele widget, lista de campanie, sale Contoare și cadre de progres live, ia deja acest drept, astfel încât Widget nu poate fi niciodată o cale de ocolire. 326 este următorul ID gratuit.

  17. · kamo-internal

    Campania de email este prima filă de marketing

    Banda de file de instrumente de marketing citește acum campanii de e-mail, materiale de marketing, Social Media, Coduri de urmărire. Bulk Email se mută în față sub noul său nume, şi Materialele iau numele complet propria pagină deja arată. Indexul /marketing aterizează pe prima filă pe care un membru o poate deschide, astfel încât comanda sa mută cu banda: campanii de e-mail în mod implicit, Materiale de marketing pentru a membru fără e-mail dreapta. Traseul, tastele etichetei și view BULK EMAIL Păstraţi-le numele. Textul este în kamo-translation-dictionary 98a21a21, împins în primul rând, cu două etichete scrise manual în fiecare locaţie.

  18. · kamo-marketing

    Solutiile se misca sub resurse, un nivel mai jos

    Rândul de sus purta cinci categorii înainte de numărul de telefon, limba selector și trei CTA. Soluţiile sunt acum primul obiect din interiorul Resurselor, de mai sus cele două link-uri articol, și păstrează cele opt pagini industriale ca o Flyout de nivelul trei. Nimic nu s-a schimbat: NavChild deja îşi poartă propria armă. pe desktop şi în acordeonul mobil. Astea sunt doar datele. "Toate Industriile" rămâne ca primul nepot mai degrabă decât să fie pliate în rândul părintelui, deoarece părintele mobil este un buton de comutare, nu un link-ul /soluțiile în sine este imposibil de găsit pe un telefon fără ea. Paginile de soluţii încă îşi aprind categoria: esteCategoriaActive deja plimbă nepoţii, aşa că Resursele evidenţiază unde obişnuiau Soluţiile. Confirmat pe /en/solutions/real-estate Rgba (107,142,58,0.1) și celelalte patru sejururi #9a9a9a. Verificat împotriva paginii de rulare, nu sursa. Rândul de sus citește Caracteristici, Servicii, Prețuri, Companie, Resurse; resurse plutitoare atunci Soluţiile deschid cele opt industrii cu prefixele lor. Flyout este lat de 200 px si la marginea dreapta la 1001, 1001, 1076 si 1316 pentru punctele de vedere din 1024 (punct de reper Ig în cazul în care acest nav apare la toate), 1280, 1440 și 1920 Deversare. Pe un telefon la nivel 390 se deschide Resurse, Solutii se deschide sub ea, şi toate cele opt legături sunt acolo. TSC, navigare-control-client și Cheile sunt curate.

  19. · kamo-marketing

    Dezvoltarea aplicatiilor, web design si web marketing

    *************** susţine că o afacere care plăteşte o agenţie pe scaun se plătește pentru software-ul pe care agenția nu l-a construit, găzduit sau păstrat Alergând. Se termină prin a întreba cine ar trebui să ia banii şi nu a avut niciodată un Din uşă în punct. Asta e uşa. 59 pagini sub /servicii: un hub, trei piloni, 30 pagini capacitate, 12 Pagini de dovezi, 5 comparaţii, şi şase despre cum un angajament de fapt Alerga. Structura în TipScript, proza în dicţionar 37 de industrii, 45 de integrări și 41 de termeni glosari utilizați deja, astfel încât traducător poate rescrie fiecare propoziție și nu poate deteriora un glonț sau o Traseu. Patru colecții noi, cu poarta pe mai mult de o zecimală: acesta din urmă este deja tradus în mai multe localităţi și refolosind-o ar pretinde o pagină franceză de serviciu există înainte de un cuvânt de Aşa e. Astăzi fiecare pagină de serviciu canonicals la limba engleză și apare în numai sitemap în limba engleză, care este ceea ce utilajele deja face pentru o pagina a cărei copie nu a fost tradusă. Portofoliu este propria noastră platformă, pentru că este singura putem lăsa un vizitator inspecta: serverele de mail, comutatoarele de telefon, WebRTC stiva media, conducta de atribuire, grupul, și acest site. Fiecare număr de pe acele pagini poartă comanda de la şi ziua a fost citit, și script-uri / check-services.ts nu se bazează pe un fapt că nu are nici un glonţ de stâlp împreună cu un copil static /service ar umbra, o referință dovadă atârna, o pagină de lucru orfan, și o comparație care nu poate numi un caz împotriva sa. Ultima regulă nu este decorare: o pagină de comparație care nu poate argumenta împotriva sine este o Publicitate care poartă o masă. Preţurile publică mecanismul mai degrabă decât un tabel. Cităm după descoperirea şi fixarea numărului mai întâi; ceea ce se mişcă, ceea ce nu este niciodată în ea (nici un procent de cheltuieli de publicitate, nici un semn pe nimic cumpărat pentru tine) și Când afli totul sunt pe /servicii / cum-am-quote. /servicii/pornire postează un subiect existent în mod deliberat topicTitlu împotriva subiectelor care există deja și răspunsuri 400 altfel, Astfel încât un subiect "Web Design" ar fi compilat, implementat, uitat corect, şi le-a socotit minciuni. Două dispozitive de accesibilitate care nu sunt strict această caracteristică, dar pe navă Fiecare pagină. Globals.css:52 spune să nu foloseşti niciodată o primă -- color-primar pentru text mic; bannerul de consimțământ cookie a făcut, la 2.18:1, pe fiecare pagină a site-ului, și LegateContent a făcut același lucru pe soluții, integrări; alternative și glosar. Ambele folosesc acum accentul lizibil, și link-urile de politică ale banner-ului sunt albe --color-accent-on-canvas este calculată la lovit exact 4.5:1 împotriva pânzei, care nu lasă loc pentru capul uÅ or ridicat suprafaÅ£a bannerul sta pe. Toate cele 19 pagini de serviciu, homepage, / pricing and /solutions/* now pass topor at WCAG 2.2 AA with zero încălcări; taxele propriile tabele de conținut insigne încă nu și sunt lăsaţi în pace.

  20. · kamo-marketing

    Un articol de numărare abonamente software, și banner indică la ea

    /all-in-one-business-software-uri întreabă cât de multe abonamente o afacere plătește pentru: o listă de verificare care le numără și totalizează luna și anul în care cititorul ticăie, cât costă un stiva dincolo de ei facturile, ceea ce all-in-one trebuie să însemne să fie în valoare de nimic, întrebările de a pune înainte de consolidarea, şi cum KamoCRM acoperă acelaşi teren. Două cifre exterioare, fiecare menţionate în copie şi legate la Picior: Indexul de management al programului Zylo din 2026 SaaS privind licențele neutilizate și care controlează cheltuielile de software și Raportul de cheltuieli al Software-ului din 2025 al Cledarei privind măsura în care întreprinderile își subestimează numărul de instrumente. Anunțul de serviciu public al bannerului arată acum aici, mai degrabă decât la articolul "scaun-fee." Este eticheta este o cheie nouă, nu o valoare nouă pentru cel vechi: conducta dicționar sare peste o cheie a cărui Traducerea diferă deja de limba engleză, astfel încât orice altă limbă ar fi păstrat vechi întrebări cu privire la un link la acest articol. Listat în meniul Resurse, hub-ul Resurse și harta site-ului.

  21. · kamo-internal

    Benzile de lansare se deschid în propria suprafaţă a barei

    Barul administratorului şi benzile de aplicaţie sunt pictate cu bara de sus gradient, și apoi a răspuns un hover cu ceva dintr-o altă aplicație în întregime: a alb instrument tip card plutind doisprezece pixeli sub banda, și pe o aplicație blocată Chip Nouă dintre ele, fiecare apărând şi dispărând pe cont propriu. Paleta greşită, greşit. formă, care sosesc de la locul greșit. Acum se deschid spre suprafaţa SAME pe care o folosesc meniurile barului superior. Acesta este pictat în marca organizației, marginea sa de sus ia culoarea exactă banda are la fața locului lasă de la, fileurile sudați-l la acea margine, și o suprafață alunecă și redimensionează de la intrare la intrare ca pointer calatoreste randul se deschide mai degrabă decât ca o carte pusă pe tabla de lansare. • NavTopMenuHost ia orice element de tip bar, nu doar antetul NavTop: un Atât panoul cât şi fileul trebuie să se întâlnească cu formaţia pictată. Camera pe care o are un panou să crească în este măsurată de unde începe de fapt (-- kmenu-max-înălţimea) Mai degrabă decât de la înălţimea navei, ceea ce nu înseamnă nimic la jumătatea paginii. • NavTopMenuPanel câștigă care poartă proza despre declanșator în loc de opțiuni. Pretinde nici un rol meniu şi nu se concentrează, aşa că descrierile barului de administrator rămân descrieri și Enter urmează încă link-ul pe care îl descriu. • Un cip de aplicație fixat desenează chiar rândurile de nav extrage (NavToolSectionsPanel, ridicat din NavToolBarMenu), astfel o opțiune răspunde cu un meniu oriunde Acesta este oferit grupuri cuib, insigne, cutia de filtrare și toate. • Ambele benzi citesc gradient lor de la navTopSeam.ts. O copie literală a Oprirea este exact ceea ce plutește, și cusătura este invizibil doar în timp ce Panoul şi trupa sunt de acord. Teste: bara de administrator redat și a lucrat cu un mouse, un deget și tastatură (o suprafață, predată de la intrare la intrare, fără a fura focus), plus o sursă de pază că nici o bandă ajunge pentru un popover sau o a doua copie a Din nou gradientul.

  22. · kamo-marketing

    Încorporează video de marketing pe alb eticheta CRM taxe articol

    Oferă cititorilor aceeași rolă de produs de pe prima pagină după introducerea, înainte de secțiunea resold-software.

  23. · kamo-shared-library

    WebinarNotificare membre, lista suplimentară notificată a unei organizații

    Un rând per (organizare, membru al echipei) în webinar notify member, creat de KamoInitializerService WebinarNotificareMigrare membre și deja aplicate. ă Depozitul aduce-se membru al echipei, deoarece fiecare cititor vrea persoana. Nicio cheie străină, care să se potrivească cu migraţia, aşa că iniţializatorul e la curent. Niciodată nu adaugă unul.

  24. · MediaService

    Blind-copy membrii echipei suplimentare notificate pe e-mailuri prezentator

    GET/PUT /api/webinar/notify-members (MANAGE SUPPORT) citește și înlocuiește un lista adiţională a organizaţiei; fiecare act de identitate trebuie să fie membru al echipei acea organizaţie, cel mult 25. WebinarEmailNotifier adaugă deţinerea lista organizaţiei ca copii oarbe pe fiecare scrisoare către un prezentator rezervat, participant s-au alăturat, participant anulat, sesiune anulată, memento niciodată pe o scrisoarea participantului, niciodata adresa prezentatorului, fiecare persoana o data, si doar oamenii încă eligibile pentru a fi scrise.

  25. · EmailService

    Copii oarbe pe șablonul de serviciu la serviciu trimite

    SendTransactionalRequest takes a optional bcclist, carryed through sendToUser și livra pe plicul SMTP o persoană copiată primeşte exact mesajul primit de destinatar. blindCopies tapiterie, scade destinatarul și duplicatele și se aplică lista la 25. Niciun apelant existent modificări: fără BCC trimisul ia calea pe care a făcut-o întotdeauna.

  26. · InitializerService

    Webinar notify member, membrii echipei copiat pe e-mailuri prezentator

    Un rând per (organizare, membru al echipei): lista notificată suplimentar pe Name MediaService orb-copii aceste adrese pe fiecare e-mail webinar trimis unui prezentator pentru organizația care deține Tipul Webinar. O nouă masă, astfel încât nici o altă masă citită nu este modificată; nici un rând Înseamnă că nimeni nu este copiat. Aplicate la producția 2026-09-13.

  27. · kamo-internal

    Lasă un admin să aleagă cine este copiat pe e-mailuri prezentator

    Fila Webinars programată câștigă o secțiune "În plus notificate" lângă lista tipurilor de Webinar. Membrii echipei alese acolo obține o copie oarbă a fiecare e-mail automat trimis unui prezentator (rezervare nouă, participant alăturat sau anulata, sesiune anulata, memento) pentru toate organizatiile Webinarii. Citeste si inlocuieste lista prin /api/webinar/notify-mambers, picks persoane cu același multi-select director culegător tab-ul Presenters folosește, și salvează în mod explicit cu un indiciu nesalvat-schimbări și o confirmare salvată. O 403 ascunde secțiunea, o sarcină eșuată oferă o rejudecată mai degrabă decât un gol lista, o salvare refuzată arată motivul serverului, și o altă schimbare admin lui Ajunge în direct peste subiectul de schimbare org Webinar.

  28. · kamo-shared-library

    Șabloane canonice pentru fiecare scrisoare de rezervare webinară

    Seven meet.webinar * teancuri participantul a anulat anunțurile, confirmarea și anularea participantului, sesiune-anulată scrisoare și memento programat înregistrat în CANONIC KEYS, cu WebinarEmail clădire o hartă variabilă care le umple: ori în zona cititorului, forma Booker-ului răspunde pentru prezentator, se alătură link-ului și se anulează link-ul personal pentru participanți, link-ul consola pentru Prezentator, şi blochează prăbuşirea când nu e nimic de arătat.

  29. · kamo-marketing

    Lasă un vizitator să-şi anuleze înregistrarea de pe link-ul prin e-mail

    /webinar/cancel/<token> este locul unde un e-mail de confirmare webinar trimite pe cineva care nu mai poate veni. Se pare înregistrarea prin public Webinar API, arată webinar, prezentator, data și ora (în vizitatorilor propriul local și fus orar, cu zona numită) și lungime, și o anulează în spatele unui pas de confirmare. Un link necunoscut, o înregistrare deja anulată şi un webinar care a fost deja ţinut, fiecare îşi primeşte propriul stat, şi un refuzul de la API este arătat ca API cuvintele. noindex/no follow, and not in the sitemap: the trail is dinamic, so the sitemap Walker sare peste ea și nimic nu generează intrări pentru ea. Copiază viața în noul spaţiu de nume WebinarCancel.

  30. · KlusterServices

    Semnează Feedback-ID în semnăturile DKIM

    Gmail numără un mesaj de campanie către feedback-ul său Loop numai atunci când antetul Feedback-ID este acoperite de semnătura DKIM a domeniului de trimitere. local.d/dkim.conf păstrează semnătura implicită a Rspamd antetele și adaugă feedback-ID.

Universul tău te așteaptă.

Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.

Gratuit pentru totdeauna — nu este necesar un card de credit