Changelog

Release Notes

Every feature, every improvement, every fix since v1.0.0.

Page 19 of 20 — 576 releases, newest first.

v2.3.17

Newsletter Email: Branded Dark Header

  • Email design now has a real branded identity — the previous version rendered too plain in clients that strip CSS backgrounds. The header is now a solid dark band with the brand wordmark and an accent eyebrow, plus a thin accent rule under it, a card frame, and a tinted footer band. Backgrounds use both inline CSS and bgcolor attributes so the design survives in Gmail/Outlook. Auto-applied to system templates via a schema bump
v2.3.16

Redesigned Newsletter Email Templates

  • Professional, brand-consistent email templates — the newsletter emails (confirmation, welcome, campaign, unsubscribe, new-post) were replaced with a polished, English, email-safe design: a clean white card on a soft background, branded header with an accent eyebrow, strong typographic hierarchy, a proper rounded brand CTA button, and a complete footer (unsubscribe, website, copyright). Table-based + inline CSS for reliable rendering across email clients; all placeholders preserved
  • Auto-applied across all installs via a plugin schema-version bump — system templates refresh automatically on the next load, while any template you customized is left untouched
v2.3.15

Blog Editor: Featured Post & Empty-Content Fix

  • Blog post editor opened empty for the featured post — the editor treated ?id=0 (the featured post, which carries id 0) as "new post" because of a id > 0 check, so it never loaded it. It now loads any post when an id is present (0 included); a truly new post is one with no id parameter. Additionally, if a row's body is empty (legacy posts whose content lived only in the static blog data file), the editor pre-fills the form from that source by slug/id for review — saving persists it into the database (display-only, non-destructive, never overwrites existing edits)
v2.3.14

Plugin System Restored on the Main Install (Newsletter Now Lists)

  • Newsletter (and all plugins) now appear in the plugin manager — the main install's bootstrap (cloned long ago from an older codebase) was entirely missing the plugin-loader block, so the plugin registrar never ran and no plugin could register itself. The block was restored, identical to the canonical source; the registrar now runs (with the self-healing plugin-table schema), so Newsletter registers automatically and is listed/activatable
v2.3.13

Marketing Blog Editor Now Reachable in Admin

  • Blog posts are editable again — the bilingual marketing blog (the EN/TR posts shown on jekcms.com/blog) has its own admin editor that reads the same table the public blog uses, but it had no link in the admin menu, so it looked like the posts weren't manageable (the CMS Posts page only lists the separate site-content table). A "Blog Posts (jekcms.com)" entry was added to the admin sidebar — the existing posts are now listed and editable
v2.3.12

Wizard Network Error, Profiles & Plugin Registration Fixed

  • "Network error" on Generate fixed — the wizard's generate step was missing on most installs, so the button failed with a network error. It now ships with every install and works on every site.
  • Plugins now register on cloned installs — on installs cloned from an older database the plugins table could be missing newer columns, which made plugin registration fail silently — so the Newsletter plugin never appeared in the plugin manager. The scanner now self-heals the table schema, so Newsletter (and any new plugin) registers and is visible/activatable
v2.3.11

Root Admin Fixes — Content Fixer, Newsletter Link, Wizard Keys

  • Content Fixer 404 fixed — the SEO Optimizer's Content/Heading Fixer page existed in the canonical source but was missing from the main install's admin, returning 404. It is now present
  • Newsletter admin link corrected — the Newsletter plugin manifest pointed its admin page to a non-existent path; corrected so the dashboard opens from the plugin manager (the sidebar entry still requires the plugin to be activated)
  • Wizard keys fixed on the main site too — the previous translation-key parity fix covered demo sites but missed the main install; cq_assistant_* keys are now mirrored there as well, so the JSON Generation Wizard no longer shows raw keys
v2.3.10

Content Queue Wizard — Raw Keys Fixed on All Sites

  • JSON Generation Wizard now reads properly on every site — the content-queue assistant translation keys (cq_assistant_*) existed only on a couple of sites, so other sites showed raw keys like "cq_assistant_title" instead of labels. All sites now carry the full key set, mirrored byte-for-byte from the canonical source
v2.3.9

Newsletter Signup Live on the Marketing Site

  • Newsletter subscription now works on jekcms.com — the footer "Subscribe" form was built but silently failed when the subscriber table did not exist. The handler now self-creates the table (idempotent, identical schema to the Newsletter plugin, so the plugin admin reads the same subscribers). Homepage stat figures also unified site-wide
v2.3.8

Sub-Page SEO Audit — Documentation Title Fixed

  • Documentation title is now descriptive & branded — the docs was a bare "Documentation"; it is now "jekcms Documentation | Setup, Admin Guide, REST API & Automation" (and category/page docs titles now carry the brand). Stronger, unique titles for search</li> <li>Full sub-page meta/SEO audit: every marketing sub-page verified to have a unique, bilingual (EN/TR) meta title and description, valid canonical + hreflang (en/tr/x-default) + Open Graph; no missing, empty or duplicate meta found</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-7"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.7</span> <time class="cl-date" datetime="2026-05-19">19 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Accurate WordPress-Alternative Page (Verified Features Only)</h2> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>Stronger, honest "why jekcms vs WordPress" page</strong> — now built strictly from verified features: it maps the paid WordPress plugins jekcms replaces in its core (SEO/Yoast, internal linking/LinkWhisper, broken-link detection, AVIF media/ShortPixel, security/Wordfence, payments/WooCommerce), plus jekcms-only JSON bulk import and n8n+Gemini AI automation. Modern, readable, theme-consistent table; long-tail keyword focused; FAQ with FAQPage structured data</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Removed an inaccurate capability claim</strong> — a "multi-site / fleet management" line was wrongly added to the comparison page, structured data and llms.txt. jekcms has no such product feature; it has been removed everywhere and replaced with verified, real capabilities only</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-6"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.6</span> <time class="cl-date" datetime="2026-05-19">19 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">No Orphan Pages — Full Internal Linking</h2> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>No orphan pages</strong> — every public marketing page is now reachable via the footer + sitemap + clean URL with EN/TR variants. The "Report Piracy" page was orphaned (no link anywhere) and is now footer-linked and crawlable; the WordPress-alternative page was already footer-linked (verified)</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-5"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.5</span> <time class="cl-date" datetime="2026-05-19">19 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">AI-Search Visibility & WordPress-Alternative Positioning</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><strong>WordPress Alternative comparison page</strong> — a new, honest <code>/wordpress-alternative</code> (TR: <code>/tr/wordpress-alternatifi</code>) page with a factual jekcms-vs-WordPress table and FAQ (FAQPage structured data), sitemap + hreflang + footer-linked</li> <li><strong>llms.txt</strong> — a machine-readable summary at <code>/llms.txt</code> so AI assistants can accurately describe jekcms as a self-hosted CMS / WordPress alternative</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>Discoverable in AI search</strong> — AI answer/search engines (ChatGPT, Perplexity, Gemini, Claude, Copilot) are now explicitly allowed (server-level block removed for them; named robots groups added). Low-value SEO-scraper bots stay blocked</li> <li><strong>Clearer entity for search & AI</strong> — structured data now classifies jekcms as a Content Management System with a precise CMS / WordPress-alternative description and feature list; site meta sharpened to say "self-hosted CMS / WordPress alternative" (factual, no keyword stuffing)</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-4"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.4</span> <time class="cl-date" datetime="2026-05-19">19 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Marketing-Site SEO Hardening</h2> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>No duplicate page URLs</strong> — direct <code>.php</code> hits (e.g. <code>/features.php</code>) now 301-redirect to the clean URL (<code>/features</code>), so each page has a single indexable address and a single canonical</li> <li><strong>Single redirect hop</strong> — <code>http://www</code> now goes straight to <code>https://</code> non-www in one 301 instead of two chained redirects (faster, stronger SEO signal)</li> <li>Audited & confirmed correct: error pages return real 404 (no soft-404, noindex), dynamic robots.txt with environment-aware sitemap, bilingual sitemap with hreflang, self-referencing canonical + en/tr/x-default hreflang, <code>?lang=tr</code> → <code>/tr/…</code> 301</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-3"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.3</span> <time class="cl-date" datetime="2026-05-19">19 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Article Rendering & Internal-Link Integrity Fixes</h2> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Broken internal links repaired at the source</strong> — The auto internal linker could run over raw Markdown and inject a link inside a Markdown link, which the renderer then turned into corrupted, half-visible anchor markup. Markdown links/images are now protected, so internal linking can never mangle content again. The link cleaner was also hardened to fully remove any pre-existing corrupted/leaked link debris — re-running the internal-link scan on an affected site now self-heals old content</li> <li><strong>Checklists render properly</strong> — Markdown task lists (<code>- [ ]</code> / <code>- [x]</code>) now show real checkbox glyphs instead of literal "[ ]" text</li> <li><strong>Tables are styled</strong> — Markdown tables in articles now render with borders, padding and header styling instead of columns running together</li> <li><strong>No more double bullets</strong> — list items showed both a default bullet and a custom marker; the duplicate is gone</li> <li><strong>Related posts fixed</strong> — the related section rendered twice, once as full-width stacked images; the broken duplicate was removed, leaving the clean card grid</li> <li><strong>Featured image aspect ratio</strong> — single-post cover images now use a proper 16:9 frame instead of a cropped near-square</li> <li><strong>Table of contents shows accented characters correctly</strong> — the on-page contents list double-escaped HTML entities, showing things like "G&uuml;ncel" instead of "Güncel"; titles are now decoded before display (anchors stay in sync)</li> <li><strong>Front-end fixes now go live immediately</strong> — deploys purge the page cache, so a fix is no longer masked by up-to-5-minutes of stale cached HTML</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-2"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.2</span> <time class="cl-date" datetime="2026-05-19">19 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">JSON Wizard Rename & Calendar Visibility Fix</h2> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>"Content Assistant" renamed to "JSON Generation Wizard"</strong> — name now reflects what it actually does: builds a ready-to-import JSON + prompt</li> <li><strong>"Continue below" marker is now built-in</strong> — typing <code>{devam}</code> in a post renders a centred "content continues below" button that smooth-scrolls to the next section. It now lives in the core renderer (theme-independent), so theme resets can no longer wipe it</li> <li>Checklist fix also covers articles already stored as HTML, not just Markdown</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Content calendar fixed — schedule is visible again</strong> — On some installs the whole calendar silently came back empty: the underlying query referenced a column that older content-queue tables never had, so it failed and showed nothing. The query is now schema-independent and self-healing, and the month view also shows every scheduled item regardless of its state (draft / approved / in-progress / done), colour-coded by status</li> <li>Calendar hover preview used the wrong image field in one branch — corrected</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-1"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.1</span> <time class="cl-date" datetime="2026-05-19">19 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Cleaner Content Queue Import Screen</h2> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>Content Queue → Import</strong> — Clearer visual separation between the AI Content Assistant and the import options (JSON / Google Sheets / CSV), so the two no longer run together on the page</li> <li>Removed the redundant static JSON and Google Sheets format reference blocks — the Assistant already generates a ready-to-use example, so the extra boilerplate only added clutter. Applied across every installation</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-3-0"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.3.0</span> <time class="cl-date" datetime="2026-05-18">18 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Reliability, Security & Always-On Delivery</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><strong>Two-Factor Authentication (TOTP)</strong> — Modern QR setup card in every site's Security settings. Scan with Google Authenticator / Authy / 1Password; self-hosted QR (no third party), with a manual key fallback. Login enforcement is fail-open by design — a 2FA glitch can never lock you out</li> <li><strong>Zero-downtime auto-deploy</strong> — Updates now reach your site automatically within minutes of a release, over HTTPS, with a health check afterwards. No manual uploads, no SSH, no lockouts</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li>Faster pages — documentation/screenshot assets ~73% lighter, zero-layout-shift images</li> <li>Cleaner SEO — bilingual default meta description & footer fields, consistent schema name source</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Site name in Google results</strong> — A long-standing settings storage issue made search engines fall back to the bare domain. Now every site shows its real configured name in titles, social cards and structured data — fleet-verified</li> <li><strong>Stay signed in</strong> — Admin sessions no longer drop unexpectedly; they persist until you explicitly sign out (root cause: server session garbage-collection wasn't aligned with the configured lifetime)</li> <li><strong>Footer & branding</strong> — Footer renders reliably and is driven from a single source in General Settings (slogan / footer text), bilingual (TR/EN) where applicable; placeholder/demo remnants removed</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-2-0"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.2.0</span> <time class="cl-date" datetime="2026-05-18">18 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Two-Factor Auth, Smart Newsletter & Customer Update Channel</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><strong>Admin two-factor authentication (TOTP)</strong> — Optional time-based 2FA with QR enrollment, enabled/disabled per account from Security settings; compatible with any authenticator app</li> <li><strong>Smart newsletter digests</strong> — The subscription plugin can now send an automated <strong>weekly or monthly</strong> roundup of new posts (frequency off/weekly/monthly + day-of-month), reliably driven server-side via cron with per-period de-duplication</li> <li><strong>Customer self-update channel</strong> — End-to-end signed update delivery: the update manifest is verified with an embedded public key so verification works on every install, SHA-256 is mandatory, and a one-command release packager builds a clean core package with a key-pair safety gate that refuses a mis-signed release</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Critical SEO: archive pages no longer soft-404</strong> — On the Tech & Minimalist themes every category/author archive returned a hard 404 (the template read a routing key that was never set); these pages now resolve correctly and author archives are fully supported</li> <li><strong>API write authorization</strong> — An authenticated low-privilege token can no longer create/modify/delete content or touch another author's posts; role + ownership are enforced from the product's own capability model</li> <li><strong>Sitemap/robots resilience</strong> — Security user-agent heuristics could return 403 to Googlebot/Search Console for <code>sitemap*.xml</code>/<code>robots.txt</code>; these endpoints now bypass every blocking rule so indexing is never accidentally lost</li> <li><strong>Footer social links</strong> — The marketing footer now renders only the accounts configured in General Settings → Social Media (placeholder/demo links removed)</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-1-3"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.1.3</span> <time class="cl-date" datetime="2026-05-18">18 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Security Hardening & Update Integrity</h2> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Critical: SSRF blocked</strong> — Server-side image fetch (media-from-URL) now allows only http/https public hosts; private/loopback/link-local and cloud-metadata addresses are rejected, redirects disabled, size-capped</li> <li><strong>High: Markdown XSS blocked</strong> — Link/image URLs in content are scheme-allowlisted; <code>javascript:</code>, <code>data:</code>, <code>vbscript:</code> and protocol-relative URLs can no longer reach <code>href</code>/<code>src</code></li> <li><strong>High: Cross-site request hardening</strong> — State-changing requests now also enforce same-origin (Origin/Referer) on top of the CSRF token, covering all admin action pages at once</li> <li><strong>SVG upload XSS blocked</strong> — Uploaded SVGs containing scripts, event handlers, foreignObject, external refs or XML entities (XXE) are rejected; static SVGs still allowed</li> <li><strong>Update integrity mandatory</strong> — Updates without a verified SHA-256 are refused; manual ZIP apply is off by default unless the official hash is provided; developer-license localhost detection now requires a real loopback connection</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-1-2"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.1.2</span> <time class="cl-date" datetime="2026-05-18">18 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Core Web Vitals: Responsive Images, LCP & Caching</h2> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>Site-wide Image Optimization</strong> — Every front-end image now ships with intrinsic <code>width</code>/<code>height</code> (zero layout shift / CLS), <code>decoding="async"</code> and lazy-loading, applied through a single global output filter that covers all themes. The hero/LCP image keeps <code>fetchpriority="high"</code> and is never lazy-loaded</li> <li><strong>Automatic Responsive Variants</strong> — Existing images are progressively back-filled with optimized AVIF/WebP size variants (thumbnail/medium/…), so cards and thumbnails download a small image instead of the full-resolution original — done gently in the background with no extra server load</li> <li><strong>Faster First Paint</strong> — Instant-search CSS no longer blocks rendering (async with no-JS fallback); themes can ship a <code>critical.css</code> for inlined above-the-fold styles</li> <li><strong>Browser Caching Restored</strong> — Front-end pages are cacheable again (back/forward cache works); only admin and API stay no-store</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-1-1"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.1.1</span> <time class="cl-date" datetime="2026-05-17">17 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Clean Content Rendering: Markdown, Code Blocks & Encoding</h2> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>Newsletter Band Restyled</strong> — The pre-footer subscribe band dropped its generic blue gradient and now uses the site's own monochrome design tokens with pill controls — consistent in both light and dark themes</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Critical: Raw Markdown Headings</strong> — When a post mixed HTML with Markdown (the normal output of AI/automation), <code>##</code> / <code>###</code> headings, fenced code blocks and lists were printed literally instead of being rendered. The Markdown engine was rewritten so block elements are converted even alongside HTML</li> <li><strong>Critical: Shell Commands Became Headings</strong> — Code (fenced ``` / ~~~, inline, and existing <code><pre></code>) is now protected before any heading parsing, so <code>#</code> shell comments and <code>#!/bin/bash</code> lines are never mistaken for titles</li> <li><strong>Legacy Linux Articles Repaired</strong> — WordPress-imported command blocks that had broken apart (<code><pre>…</p><p>…</pre></code>) were rejoined into clean multi-line code blocks</li> <li><strong>Critical: Turkish Text Corruption (Mojibake)</strong> — Some automated content arrived double-encoded (Turkish letters shown as CJK glyphs, e.g. "Çikolata" → "脟ikolata"). The API now repairs every inbound write path automatically (self-validating, no false positives), and a fleet tool cleans existing content across all sites</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-1-0"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.1.0</span> <time class="cl-date" datetime="2026-05-16">16 May 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Reliable Theme Switching, 17 Auto-Publish Networks & Full-Width Admin</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><strong>Regional & Fediverse Auto-Publish</strong> — Eight new networks join the social automation engine: Pixelfed, Misskey/Sharkey, WriteFreely, Micro.blog and Lemmy (token/instance), VK (OAuth2), plus Hatena Bookmark and Plurk (OAuth1). Every connected account receives new posts automatically with per-platform pacing and back-off</li> <li><strong>Honest Capability Notes</strong> — Networks without a safe, official publishing API (Xing, Naver, Nostr) are now clearly labelled with the reason instead of silently failing — no fake connectors</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-improved">Improved</div> <ul class="cl-items"> <li><strong>Full-Width Connections Page</strong> — The social connections grid no longer caps at a narrow column; cards now use the full screen width on large displays instead of leaving the right third blank</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Critical: Theme Switching Failed</strong> — Because <code>settings.key</code> is uniquely indexed, the old "UPDATE then INSERT-if-zero-rows" path threw a duplicate-key error whenever the value was unchanged (re-activating a theme, or the automatic previous-theme snapshot on every switch). The activation aborted with a database error and the theme never changed. Theme writes are now a single-row upsert (delete + insert) that also self-heals any pre-existing duplicate/stray rows. Active-theme reads are deterministic (canonical group, newest row) so the front-end always reflects the chosen theme</li> </ul> </div> </div> </div> <div class="cl-entry" id="v2-0-1"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v2.0.1</span> <time class="cl-date" datetime="2026-04-16">16 Apr 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Smart Next-Gen CMS — Admin UI Overhaul, Bulletproof Slugs & Autosave</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><strong>New Admin Design Language</strong> — Unified badge system (5 pill variants: success/danger/warning/info/neutral), stat-card-v2 with colored backgrounds + decorative SVG, quick-action outline buttons, state-block for empty/error states</li> <li><strong>Language Toggle</strong> — TR/EN switcher in admin header with session-based override (<code>$_SESSION[admin_lang_override]</code>), persists across navigation</li> <li><strong>Draft Autosave</strong> — Post editor saves every 30s + localStorage offline fallback. Status pill bottom-right: "Saving…" / "Saved · 15:42" / "Offline". Restore prompt on reopen if unsaved changes found</li> <li><strong>Anonymous Preview</strong> — <code>preview.php?token=XXX</code> with 48-hex-char secret tokens stored in <code>post_meta</code>. Click "Preview Link" button, URL auto-copied to clipboard. Orange banner indicates preview mode</li> <li><strong>Revision Diff</strong> — Click any revision → modal with word-level diff (jsdiff via CDN). Green additions / red strike-through deletions. "Restore this revision" with automatic snapshot</li> <li><strong>Word Count Distribution</strong> — Dashboard shows stacked bar of post word counts (0-500, 500-1K, 1K-1.5K, 1.5K+) with hover tooltip</li> <li><strong>Date Range Filter</strong> — Post listing has native date pickers for <code>date_from</code>/<code>date_to</code></li> <li><strong>Media Grid/List Toggle</strong> — Library view switches between grid and vertical list, preference saved to localStorage</li> <li><strong>Slug repair tool</strong> — rebuild post addresses in bulk. Preview the result before anything changes, and clashing addresses are resolved instead of overwritten.</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li><strong>Critical: Turkish Slug Bug</strong> — <code>mb_strtolower()</code> was converting <code>İ</code> (U+0130) into composite sequences, breaking the transliteration map and leaving orphan bytes as hyphens. New <code>slugify()</code> runs <code>strtr</code> BEFORE lowercasing with comprehensive map (Turkish + Latin extended). Fixed 866 bad slugs across all sites</li> <li><strong>Sidebar Border Bug</strong> — <code>.sidebar-brand</code> was 56px but <code>--header-height: 60px</code>, creating a 4px misalignment visible as a horizontal line. Now uses <code>var(--header-height)</code></li> <li><strong>profile.php 90s Button</strong> — <code>.avatar-actions .btn-sm</code> had <code>border-radius: 50%</code> rendering buttons as blobs. Plus "Active" was hardcoded English in Turkish admin. Both fixed</li> <li><strong>Settings Thumbnail Inputs</strong> — Pixel inputs had no styling (native browser default — 90s). Now proper padding, focus ring, contained background</li> <li><strong>Logo Regression</strong> — <code>logo-yatay.svg</code> was an obsolete test logo. Replaced with <code>logo-dikey.svg</code> + inline SVG in sidebar (matches admin login)</li> <li><strong>License Page Branding</strong> — Fake blue <code>[J]</code> SVG monogram replaced with real <code>logo-dikey.svg</code>. Hardcoded <code>#28a745</code> colors migrated to CSS variables</li> <li><strong>Updates Page UX</strong> — License inactive / update failed / up-to-date states use unified pill-badge format. Raw English errors removed from Turkish UI</li> </ul> </div> </div> </div> <div class="cl-entry" id="v1-5-3"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v1.5.3</span> <time class="cl-date" datetime="2026-03-14">14 Mar 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Auto-Seed Settings, Core Web Vitals, Update System & SEO Hardening</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><strong>Settings Auto-Seed</strong> — <code>ensure_default_settings()</code> automatically seeds <code>site_name</code> and <code>site_alternate_name</code> into the database on first page load. Cache-file based, zero performance impact after initial run. No more manual SQL for new sites</li> <li><strong>Migration System</strong> — <code>migrations/5_seo_settings_seed.php</code> created across all sites. Update system can now distribute database changes automatically</li> <li><strong>LCP Eager Loading</strong> — First post card image on page 1 gets <code>loading="eager" fetchpriority="high"</code> across all theme architectures. Expected ~200-500ms LCP improvement</li> <li><strong>CLS Prevention</strong> — <code>width</code> and <code>height</code> attributes added to all post card images. Eliminates layout shift completely</li> <li><strong>CSS Cache Busting</strong> — <code>?v=THEME_VERSION</code> parameter added to stylesheet links in starter theme headers</li> <li><strong>Update Server Connected</strong> — <code>api/updates/check.php</code> now uses real <code>UpdateManager</code> with database queries instead of static stub response. Graceful fallback on connection errors</li> <li><strong>jekcms Backlinks</strong> — All footer files across active sites, admin panels, and bundled themes now link to <code>jekcms.com</code> with "jekcms" anchor text and <code>rel="noopener noreferrer"</code></li> <li><strong>Marketing SEO</strong> — Real favicon URL (SVG), <code>application-name</code> meta tag, <code>theme-color</code>, WebSite schema <code>alternateName</code> added. Decorative text moved to CSS to prevent Google sitelink pollution</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li>Sitemap pagination URLs removed — <code>?page=2</code>, <code>?page=3</code> etc. no longer appear in homepage, category, tag, and author sitemaps. These thin pages wasted crawl budget</li> <li>Thin tag pages now <code>noindex</code> — Tag pages with fewer than 3 posts get <code>noindex, follow</code> via <code>output_robots_meta()</code> to prevent thin content indexing</li> <li>Markdown <code># Heading</code> now renders as <code><h2></code> instead of <code><h1></code> — prevents double H1 on post pages where title is already H1</li> <li>SQL migration file <code>sql/v1.5.1-seo-site-names.sql</code> deleted — replaced by automatic <code>ensure_default_settings()</code> mechanism</li> <li>Marketing site favicon was data URI — Google requires real URL for SERP favicon display. Replaced with proper <code>/favicon.svg</code></li> <li>Marketing site showed "Dashboard Posts Media Settings" as Google sitelinks — decorative text moved from HTML to CSS <code>content: attr(data-label)</code></li> </ul> </div> </div> </div> <div class="cl-entry" id="v1-5-2"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v1.5.2</span> <time class="cl-date" datetime="2026-02-27">27 Feb 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Deep SEO Audit — Schema, OG Image, Core Web Vitals & Accessibility</h2> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li>BlogPosting <code>author</code> schema missing <code>url</code> property — Google requires author URL since 2023. Added <code>author.url</code> pointing to <code>/author/{slug}</code> across all sites</li> <li>BreadcrumbList last item missing <code>item</code> (URL) property — Google Rich Results test was reporting errors. Fixed both category and non-category code paths across all sites</li> <li><code>og:image:width</code> and <code>og:image:height</code> meta tags missing in bundled theme functions.php files — Facebook/LinkedIn image previews could render incorrectly. Added 1200×630 dimensions</li> <li>Featured/hero image missing <code>fetchpriority="high"</code> in active theme single.php files — LCP (Largest Contentful Paint) performance impact. Also added <code>width</code>/<code>height</code> where missing</li> <li>Author avatar <code><img></code> tags had empty <code>alt=""</code> in active theme files — accessibility and image SEO issue. Replaced with author name</li> <li>Hardcoded <code><html lang="tr"></code> in affected themes — replaced with dynamic <code>get_setting()</code> for correct language declaration</li> </ul> </div> </div> </div> <div class="cl-entry" id="v1-5-1"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v1.5.1</span> <time class="cl-date" datetime="2026-02-27">27 Feb 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">SEO Audit — Pagination, Sitemap Language, Tag Cleanup & OG Locale</h2> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li>Pagination URL double query string bug — <code>?page=3?page=4</code> caused by <code>get_canonical_url()</code> returning <code>?page=N</code>. Now strips page param from baseUrl before rebuilding</li> <li>Schema <code>$currentUrl</code> missing <code>?page=N</code> on paginated pages — canonical and schema URLs now consistent</li> <li><code>?page=1</code> duplicate content — 301 redirect to clean URL added in all site .htaccess files</li> <li>News sitemap hardcoded <code><news:language>en</news:language></code> — now uses <code>get_setting('general', 'site_language')</code> dynamically across all sites</li> <li>Tag URLs returning 301 to homepage — changed to proper 410 Gone response with minimal HTML page across all sites</li> <li>BlogPosting schema missing <code>inLanguage</code> property — added dynamic language detection across all sites</li> <li><code>og:locale</code> hardcoded to <code>en_US</code> on Turkish sites — now dynamically set to <code>tr_TR</code> or <code>en_US</code> based on site language setting</li> <li>AVIF → WebP schema image fallback missing <code>file_exists()</code> check — WebP URL was emitted even when file didn't exist</li> </ul> </div> </div> </div> <div class="cl-entry" id="v1-5-0"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v1.5.0</span> <time class="cl-date" datetime="2026-02-25">25 Feb 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Duplicate Prevention, Smart Thumbnails & Admin Tools</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><code>Post::checkDuplicate()</code> method — detects duplicate posts by title or slug before creation</li> <li>Duplicate check integrated into all API webhooks: <code>webhookPublish</code>, <code>webhookSchedule</code>, <code>webhookDraft</code>, <code>webhookBulkPublish</code>, <code>webhookContentGenerate</code></li> <li>HTTP 409 response with full existing post details (id, title, slug, status, url) when duplicate detected</li> <li><code>force_duplicate: true</code> request parameter to bypass duplicate check when intentional duplicates are needed</li> <li>Bulk publish silently skips duplicates with <code>skipped</code> counter instead of blocking</li> <li>Admin "Duplicates" button on Posts page — opens modal with full duplicate analysis</li> <li>Slug pattern detection engine: finds posts ending with <code>-N</code> (N=1-10) where the base slug also exists as another post</li> <li>Single-click and bulk "Trash All Duplicates" actions with real-time UI updates</li> <li>Image proxy fallback in <code>get_featured_image()</code> — when pre-generated thumbnail files are missing, dynamically resizes via <code>image-proxy.php</code></li> <li>Size dimension map: thumbnail (400×400), card (480×300), medium (800×500), large (1600×1000)</li> <li>AVIF → WebP → original format cascade when looking up sized variants</li> <li>Content Queue sidebar badge now counts <code>queued</code> status alongside <code>draft</code> and <code>ready</code></li> </ul> </div> </div> </div> <div class="cl-entry" id="v1-4-5"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v1.4.5</span> <time class="cl-date" datetime="2026-02-17">17 Feb 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">Production Hardening — SEO Fixes, License Enforcement & Session Security</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li><code>output_robots_meta()</code> function — per-page robot directives (noindex for 404, search pages; post-level override)</li> <li>License enforcement in <code>init.php</code> and <code>login.php</code> — redirects to <code>license.php</code> when no active license key is configured</li> <li>Cross-site session hijacking prevention: cookie path scoped to site-specific URL path via <code>parse_url(SITE_URL, PHP_URL_PATH)</code></li> <li>Session <code>_site_hash</code> verification in <code>Auth::loadUser()</code> — prevents authenticated sessions from bleeding across co-hosted sites</li> <li>Site-specific <code>remember_token</code> cookie path — remember-me tokens no longer shared between sites on same domain</li> <li>Footer branding standardized across all installations</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li>API upload path double <code>uploads/uploads/</code> prefix — <code>uploadFromUrl()</code> and <code>uploadFromBase64()</code> now strip redundant prefix before saving to database</li> <li>Duplicate <code><link rel="canonical"></code> tags removed from affected site headers where both inline and <code>output_seo_head()</code> emitted canonicals</li> <li>FAQ schema output: enforced minimum 3 items with 50+ character answers, maximum 10 items, deduplicated across helpers</li> <li>Sidebar category post counts removed per design rules — "(5)" count display no longer appears in category listings</li> <li>Author name links converted from non-clickable <code><span></code> to proper <code><a href></code> anchor tags in single.php files</li> <li>Schema.org URLs stripped of tracking parameters (<code>utm_source</code>, <code>fbclid</code>, etc.) via <code>parse_url()</code></li> <li>Post card images missing <code>width</code>/<code>height</code> attributes — CLS prevention applied across affected sites</li> </ul> </div> </div> </div> <div class="cl-entry" id="v1-4-0"> <!-- Left: sticky meta --> <div class="cl-meta"> <span class="cl-badge">v1.4.0</span> <time class="cl-date" datetime="2026-02-10">10 Feb 2026</time> </div> <!-- Right: content --> <div class="cl-body"> <h2 class="cl-body-title">SEO Overhaul, Content Optimizer, Breadcrumbs & Table of Contents</h2> <div class="cl-group"> <div class="cl-section-label cl-section-added">Added</div> <ul class="cl-items"> <li>Complete SEO overhaul across all active sites — meta tags, Open Graph, Twitter Cards, Schema.org structured data reviewed and standardized</li> <li>Breadcrumb navigation with Schema.org <code>BreadcrumbList</code> markup added to every site</li> <li>Table of Contents (TOC) — automatically generated from <code><h2></code>/<code><h3></code> headings, renders as sidebar widget or inline block depending on theme</li> <li>Content Optimizer with dictionary-based synonym refresh — replaces removed AI API (Gemini/Groq) approach that broke Turkish morphology</li> <li>Turkish synonym dictionary (~200 modern word pairs) and English synonym dictionary (~180 pairs) with archaic terms removed</li> <li>Auto language detection via <code>get_setting('general', 'ai_content_language')</code> for optimizer dictionary selection</li> <li>Google SERP site name fix: <code>??</code> operator replaced with <code>?:</code> to catch empty strings in <code>og:site_name</code> and WebSite schema</li> <li><code><meta name="application-name"></code> tag added to all theme headers for Google site name signal</li> <li>Turkish slug generation fix: <code>generateSlug()</code> now properly transliterates ç, ğ, ı, ö, ş, ü across all sites</li> <li><code>fix-slugs.php</code> utility script for repairing existing corrupted Turkish slugs in production databases</li> </ul> </div> <div class="cl-group"> <div class="cl-section-label cl-section-fixed">Fixed</div> <ul class="cl-items"> <li>robots.txt files had unresolved <code>{{SITE_DOMAIN}}</code> placeholders in affected sites</li> <li>CSP header in production was blocking Google Analytics, AdSense, and Facebook Pixel domains</li> </ul> </div> </div> </div> </div> <nav class="cl-pager" aria-label="Changelog pages"> <a class="cl-pager-btn" rel="prev" href="/changelog?page=18">← Newer</a> <span class="cl-pager-pos">19 / 20</span> <a class="cl-pager-btn" rel="next" href="/changelog?page=20">Older →</a> </nav> </div> </section> <!-- CTA Section --> <section class="cta"><div class="container"><div class="cta-inner"><div class="cta-left"><a href="/" class="cta-logo-link"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 882 250" class="site-logo" style="height:26px;width:auto;display:block;" aria-label="jekcms" role="img"><path fill="currentColor" d="M6.48215 8.24357L167.595 8.10861L167.512 162.193L167.477 210.101C167.48 213.355 167.882 237.21 166.989 238.373C153.012 238.799 138.505 238.489 124.451 238.475L52.3131 238.454C40.5223 238.448 17.5353 237.714 6.48826 238.725C6.04649 191.112 6.03411 143.495 6.45111 95.8804L6.31368 41.5049C6.26572 31.0067 5.875 18.5036 6.48215 8.24357ZM47.122 213.243C55.2466 214.349 58.5712 214.812 66.8347 214.175C83.8145 211.464 95.5927 200.338 98.5824 182.927C100.568 171.363 98.8839 158.601 99.4527 146.853C99.7496 122.573 99.0068 97.8742 99.5038 73.6483L95.624 69.8267C90.2723 69.4959 85.2575 69.5523 79.9069 69.5846C76.7112 69.8672 75.8812 71.1424 73.5709 73.5076L73.6627 141.077C73.6968 152.899 73.9643 164.759 73.4008 176.564C72.7208 190.808 61.5927 190.243 50.7272 190.137L48.6262 190.113C48.57 197.67 47.4669 205.595 47.122 213.243ZM89.375 59.065C98.3036 57.4528 104.22 48.8817 102.568 39.953C100.916 31.0243 92.3244 25.1425 83.4111 26.8377C74.5563 28.5218 68.7264 37.0518 70.3679 45.922C72.0094 54.7922 80.5049 60.6667 89.375 59.065Z"/><path fill="currentColor" d="M741.317 73.9003C742.933 73.6988 747.083 74.1291 748.78 74.3513C764.421 76.3995 775.932 88.6139 779.135 103.771C779.66 106.296 779.991 108.858 780.124 111.433C780.443 117.796 781.358 161.97 779.431 164.707C778.736 165.695 777.525 166.178 776.367 166.336C772.958 166.803 763.8 167.407 761.169 165.264C760.007 164.318 759.487 162.564 759.285 161.128C758.709 157.035 759.171 152.404 759.227 148.262C759.381 136.803 760.299 122.884 759.12 111.674C758.551 106.273 756.931 100.875 752.528 97.3653C748.919 94.4885 744.2 93.4247 739.672 93.9527C733.148 94.7136 725.737 98.3022 722.816 104.518C719.854 110.82 721.518 145.843 721.499 155.204C721.495 157.356 721.913 162.593 720.535 164.28C719.248 165.855 717.002 166.384 715.067 166.578C711.35 166.951 704.696 167.348 701.692 164.903C699.401 161.432 700.507 152.101 700.564 147.685L700.677 122.056C700.634 108.555 699.155 93.2349 681.078 93.8758C650.271 94.968 664.007 134.607 661.572 154.358C660.855 160.179 663.334 167.064 653.685 166.576C649.394 166.359 640.821 168.068 640.502 162.205C640.102 152.504 640.332 142.662 640.396 132.907C640.467 116.947 640.453 100.987 640.356 85.0272C640.364 74.754 641.601 74.9184 651.33 75.2046C653.527 78.6887 654.967 81.3787 656.843 85.0595C674.65 68.3648 696.06 71.0637 712.677 87.6554C713.265 86.9051 713.872 86.1703 714.497 85.4517C721.587 77.3763 730.997 74.5343 741.317 73.9003Z"/><path fill="currentColor" d="M367.158 74.3069C369.439 73.9129 373.379 73.9541 375.648 74.05C393.313 74.7968 408.399 87.0419 413.603 103.816C416.396 112.82 415.929 120.029 415.557 129.216C411.055 128.64 402.522 128.847 397.72 128.858L367.156 128.976C361.671 129.016 354.942 129.321 349.614 128.996C353.357 142.009 361.46 149.959 375.77 149.173C386.822 148.566 390.83 145.078 397.967 137.169L402.075 139.241C404.931 140.59 408.299 142.081 410.921 143.806C412.101 144.582 413.542 146.067 413.724 147.51C413.903 148.923 413.228 149.933 412.378 150.988C404.547 160.721 393.094 166.495 380.756 167.864C368.285 169.246 354.968 166.149 345.062 158.249C335.491 150.615 330.089 139.673 328.696 127.623C327.205 114.311 330.085 100.098 338.513 89.4593C342.759 84.099 348.139 79.9763 354.413 77.3068C358.65 75.5044 362.621 74.8089 367.158 74.3069ZM375.927 111.1C381.087 111.174 389.763 111.507 394.671 110.85C389.347 98.931 384.738 92.1266 370.195 93.2324C358.281 94.8763 354.228 100.257 350.364 110.915C358.636 111.266 367.597 111.108 375.927 111.1Z"/><path fill="currentColor" d="M445.975 28.545C449.437 28.4572 459.201 27.3396 461.653 29.675C464.921 32.7879 463.101 88.4393 463.15 96.3636C463.169 99.3386 462.464 108.746 464.493 110.749C469.555 110.158 491.819 80.9969 497.954 76.8258C500.906 74.8184 527.767 73.4561 520.861 80.9098C509.053 93.6532 497.078 107.366 484.792 119.624C492.945 128.867 502.424 138.077 511.154 146.857C515.965 152.009 521.124 157.126 526.089 162.156L524.666 166.45L502.46 166.439C496.323 160.895 470.353 130.932 464.502 130.414C461.77 132.669 464.761 158.361 462.948 163.129C461.075 168.056 448.328 166.771 444.824 165.746C440.998 164.627 442.423 145.761 442.407 141.597L442.367 89.0476L442.39 48.6096C442.405 43.0957 441.521 36.2217 443.029 30.905C443.42 29.5259 444.731 29.0535 445.975 28.545Z"/><path fill="currentColor" d="M579.939 73.8908C593.883 74.3834 605.916 78.7696 615.482 89.3172C621.823 96.3091 607.941 103.145 603.277 106.543C598.988 101.58 593.62 96.3516 587.001 94.9229C548.651 86.6453 545.118 147.515 582.1 148.376C591.414 148.593 596.456 143.336 603.616 138.981C605.039 139.161 605.259 139.807 606.505 140.992C610.297 144.9 614.074 148.43 617.91 152.48C608.575 161.627 597.252 167.372 584.105 168.161C571.923 168.941 559.941 164.786 550.852 156.632C541.642 148.475 536.087 136.961 535.431 124.67C534.434 107.272 540.953 90.0634 556.146 80.6065C564.165 75.6144 570.712 74.4148 579.939 73.8908Z"/><path fill="currentColor" d="M830.353 74.2796C840.943 73.73 851.713 75.124 860.887 80.7241C869.115 85.7467 857.803 95.0526 854.636 99.3666C848.552 95.3533 843.405 92.3455 835.716 92.5248C832.362 92.603 829.678 93.1966 827.332 95.6947C825.871 97.2499 824.892 99.4582 825.054 101.559C825.709 110.093 844.096 110.634 850.533 113.122C854.886 114.582 858.672 116.578 862.097 119.755C872.832 129.71 873.14 147.142 863.076 157.677C855.482 165.625 846.22 167.803 835.667 168.181C835.216 168.181 834.765 168.169 834.314 168.145C820.636 167.368 811.273 162.782 802.248 152.64C806.437 148.794 808.286 145.127 813.613 141.272C822.676 143.727 827.458 150.947 839.023 149.309C845.596 148.378 850.611 143.781 849.301 136.638C846.922 128.924 830.964 127.843 824.626 125.998C794.107 117.111 799.174 78.8157 830.353 74.2796Z"/><path fill="currentColor" d="M286.639 75.5655C290.014 75.4115 302.257 73.9318 302.966 78.2085C303.839 83.4768 303.622 89.9178 303.61 95.3148L303.581 119.653L303.61 156.058C303.62 181.08 304.82 203.7 273.994 210.022C268.975 210.778 262.563 209.921 257.493 209.319C257.739 203.416 258.596 197.415 258.837 191.134C263.235 191.54 271.283 190.832 275.408 189.24C279.055 187.833 280.987 184.443 281.672 180.696C283.589 170.22 282.696 157.088 282.819 146.296C283.003 130.231 282.723 114.614 282.806 98.5266C282.836 92.6342 281.985 83.3204 283.655 77.4755C283.958 76.4171 285.587 75.9899 286.639 75.5655Z"/><path fill="currentColor" d="M290.405 34.7513C297.829 33.2354 305.084 38.0005 306.648 45.4205C308.213 52.8404 303.502 60.1336 296.099 61.75C288.625 63.3821 281.252 58.6109 279.672 51.1195C278.092 43.6281 282.909 36.2818 290.405 34.7513Z"/></svg></a><h2 class="cta-title">Go live today</h2><p class="cta-desc">Setup, content management, SEO and image optimization — all in one platform. Get started in 30 minutes.</p><a href="/pricing" class="btn btn-primary cta-btn">View Pricing <svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></a></div><div class="cta-right"><ul class="cta-checklist"><li class="cta-check-item"><svg class="cta-check-icon" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"></polyline></svg>Setup and live in 30 minutes</li><li class="cta-check-item"><svg class="cta-check-icon" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"></polyline></svg>14 ready-made themes</li><li class="cta-check-item"><svg class="cta-check-icon" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"></polyline></svg>AVIF/WebP image optimization</li><li class="cta-check-item"><svg class="cta-check-icon" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"></polyline></svg>Automatic SEO — Sitemap, Schema.org</li><li class="cta-check-item"><svg class="cta-check-icon" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"></polyline></svg>Cookieless built-in analytics (ZeroTrack)</li></ul></div></div></div></section> <script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"SoftwareApplication","@id":"https://jekcms.com/#software","name":"jekcms","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.116.10","datePublished":"2026-09-07","releaseNotes":"https://jekcms.com/changelog?page=19","url":"https://jekcms.com/","publisher":{"@id":"https://jekcms.com/#organization"},"inLanguage":"en-US"},{"@type":"ItemList","name":"jekcms release history — page 19","itemListOrder":"https://schema.org/ItemListOrderDescending","numberOfItems":15,"itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.17","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.17","datePublished":"2026-05-19","releaseNotes":"Newsletter Email: Branded Dark Header","url":"https://jekcms.com/changelog?page=19#v2.3.17"}},{"@type":"ListItem","position":2,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.16","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.16","datePublished":"2026-05-19","releaseNotes":"Redesigned Newsletter Email Templates","url":"https://jekcms.com/changelog?page=19#v2.3.16"}},{"@type":"ListItem","position":3,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.15","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.15","datePublished":"2026-05-19","releaseNotes":"Blog Editor: Featured Post & Empty-Content Fix","url":"https://jekcms.com/changelog?page=19#v2.3.15"}},{"@type":"ListItem","position":4,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.14","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.14","datePublished":"2026-05-19","releaseNotes":"Plugin System Restored on the Main Install (Newsletter Now Lists)","url":"https://jekcms.com/changelog?page=19#v2.3.14"}},{"@type":"ListItem","position":5,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.13","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.13","datePublished":"2026-05-19","releaseNotes":"Marketing Blog Editor Now Reachable in Admin","url":"https://jekcms.com/changelog?page=19#v2.3.13"}},{"@type":"ListItem","position":6,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.12","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.12","datePublished":"2026-05-19","releaseNotes":"Wizard Network Error, Profiles & Plugin Registration Fixed","url":"https://jekcms.com/changelog?page=19#v2.3.12"}},{"@type":"ListItem","position":7,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.11","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.11","datePublished":"2026-05-19","releaseNotes":"Root Admin Fixes — Content Fixer, Newsletter Link, Wizard Keys","url":"https://jekcms.com/changelog?page=19#v2.3.11"}},{"@type":"ListItem","position":8,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.10","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.10","datePublished":"2026-05-19","releaseNotes":"Content Queue Wizard — Raw Keys Fixed on All Sites","url":"https://jekcms.com/changelog?page=19#v2.3.10"}},{"@type":"ListItem","position":9,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.9","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.9","datePublished":"2026-05-19","releaseNotes":"Newsletter Signup Live on the Marketing Site","url":"https://jekcms.com/changelog?page=19#v2.3.9"}},{"@type":"ListItem","position":10,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.8","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.8","datePublished":"2026-05-19","releaseNotes":"Sub-Page SEO Audit — Documentation Title Fixed","url":"https://jekcms.com/changelog?page=19#v2.3.8"}},{"@type":"ListItem","position":11,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.7","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.7","datePublished":"2026-05-19","releaseNotes":"Accurate WordPress-Alternative Page (Verified Features Only)","url":"https://jekcms.com/changelog?page=19#v2.3.7"}},{"@type":"ListItem","position":12,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.6","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.6","datePublished":"2026-05-19","releaseNotes":"No Orphan Pages — Full Internal Linking","url":"https://jekcms.com/changelog?page=19#v2.3.6"}},{"@type":"ListItem","position":13,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.5","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.5","datePublished":"2026-05-19","releaseNotes":"AI-Search Visibility & WordPress-Alternative Positioning","url":"https://jekcms.com/changelog?page=19#v2.3.5"}},{"@type":"ListItem","position":14,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.4","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.4","datePublished":"2026-05-19","releaseNotes":"Marketing-Site SEO Hardening","url":"https://jekcms.com/changelog?page=19#v2.3.4"}},{"@type":"ListItem","position":15,"item":{"@type":"SoftwareApplication","name":"jekcms 2.3.3","applicationCategory":"WebApplication","operatingSystem":"Linux, PHP 8+","softwareVersion":"2.3.3","datePublished":"2026-05-19","releaseNotes":"Article Rendering & Internal-Link Integrity Fixes","url":"https://jekcms.com/changelog?page=19#v2.3.3"}}]}]}</script> </main> <!-- Auth Modal (giriş yapmış müşteriye gerek yok — header Dashboard gösterir) --> <style> .auth-modal-container { max-width: 860px; display: flex; overflow: hidden; border-radius: 16px; background: #0f1117; border: 1px solid rgba(255,255,255,0.08); box-shadow: 0 24px 80px rgba(0,0,0,0.6); position: relative; } .auth-modal-content { padding: 0; } .am-left { width: 360px; flex-shrink: 0; background: #0a0c18; position: relative; overflow: hidden; min-height: 520px; display: flex; align-items: flex-end; padding: 2.5rem; } .am-left canvas { position: absolute; inset: 0; width: 100%; height: 100%; } .am-left-body { position: relative; z-index: 1; } .am-left-logo { height: 28px; width: auto; filter: brightness(0) invert(1); opacity: 0.9; display: block; margin-bottom: 1rem; } .am-left-tagline { color: rgba(255,255,255,0.5); font-size: 0.8rem; line-height: 1.6; max-width: 220px; } .am-right { flex: 1; min-width: 0; padding: 2.25rem; overflow-y: auto; max-height: 90vh; position: relative; scrollbar-width: thin; scrollbar-color: #2a2d45 transparent; } .am-right::-webkit-scrollbar { width: 4px; } .am-right::-webkit-scrollbar-track { background: transparent; } .am-right::-webkit-scrollbar-thumb { background: #2a2d45; border-radius: 99px; } .am-right::-webkit-scrollbar-thumb:hover { background: #3d4163; } .am-header-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 1.5rem; } .am-header-row h2 { margin: 0; font-size: 1.5rem; font-weight: 700; color: #f1f5f9; letter-spacing: -0.3px; } .am-header-row p { margin: 0.25rem 0 0; font-size: 0.875rem; color: #64748b; } .am-brand-logo { height: 22px; width: auto; opacity: 0.09; filter: brightness(0) invert(1); flex-shrink: 0; margin-top: 4px; } /* Google girişi BİRİNCİL yol: formun ÜSTÜNDE, tam genişlik, tanınır beyaz Google düğmesi. Eskiden formun ALTINDAydı — kayıt sekmesi uzun olduğu için ekranın dışında kalıyor, kullanıcı Google seçeneğini hiç görmüyordu. */ .am-social-btns { display: flex; flex-direction: column; gap: 0.5rem; margin: 0 0 0.25rem; } .am-social-btn { display: flex; align-items: center; justify-content: center; gap: 0.7rem; width: 100%; padding: 0 1rem; height: 46px; background: #ffffff; border: 1px solid #ffffff; border-radius: 10px; color: #1f2328; font-size: 0.9rem; font-weight: 600; letter-spacing: -0.1px; cursor: pointer; transition: transform 0.12s ease, box-shadow 0.15s ease, background-color 0.15s; font-family: inherit; } .am-social-btn:hover { background: #f3f4f6; box-shadow: 0 6px 18px rgba(0,0,0,0.35); transform: translateY(-1px); } .am-social-btn:active { transform: translateY(0); } .am-social-btn svg { flex-shrink: 0; width: 18px; height: 18px; } .auth-modal-close { position: absolute; top: 1rem; right: 1rem; z-index: 10; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 8px; color: rgba(255,255,255,0.5); cursor: pointer; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; transition: background 0.15s, color 0.15s; padding: 0; } .auth-modal-close:hover { background: rgba(255,255,255,0.1); color: rgba(255,255,255,0.85); } @media (max-width: 700px) { .am-left { display: none; } .am-right { max-height: 95vh; padding: 1.75rem; } .auth-modal-container { max-width: 460px; } } /* ── Dark overrides: inputs, labels, dividers ── */ .am-right .auth-tabs { border-bottom-color: #1e2235; } .am-right .auth-tab { color: #4b5563; } .am-right .auth-tab:hover { color: #94a3b8; } .am-right .auth-tab.active { color: #3B82F6; } .am-right .auth-tab-indicator { background-color: #3B82F6; } .am-right .auth-form-group label { color: #94a3b8; font-size: 0.72rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.07em; } .am-right .auth-form-group input { background: #161829; border: 1px solid #2a2d45; color: #e2e8f0; border-radius: 10px; } .am-right .auth-form-group input:focus { border-color: #3B82F6; box-shadow: 0 0 0 3px rgba(59,130,246,0.15); } .am-right .auth-form-group input::placeholder { color: #475569; } .am-right .auth-form-group.has-error input { border-color: #ef4444; } .am-right .auth-password-toggle { color: #475569; } .am-right .auth-password-toggle:hover { color: #94a3b8; } .am-right .auth-divider { margin: 1rem 0; } .am-right .auth-divider::before, .am-right .auth-divider::after { background-color: #1e2235; } .am-right .auth-divider span { color: #4b5563; } .am-right .auth-checkbox > span:last-child { color: #64748b; } .am-right .auth-checkbox-mark { border-color: #2a2d45; background: #161829; } .am-right .auth-legal-note { color: #64748b; border-color: #1e2235; } .am-right .auth-forgot-link { color: #3B82F6; } .am-right .auth-forgot-link:hover { color: #60A5FA; } .am-right .auth-form-error { border-radius: 8px; } .am-right .auth-submit-btn { border-radius: 10px; } .am-right .auth-switch-text { color: #4b5563; } .am-right .auth-switch-btn { color: #3B82F6; } .am-right .auth-switch-btn:hover { color: #60A5FA; } /* ── Yoğunluk: kayıt formu 4 alan + onay + yasal not olduğu için tek ekrana sığmıyordu; alan aralıkları ve yasal not sıkılaştırıldı. ── */ .am-right .auth-form-group { margin-bottom: 0.85rem; } .am-right .auth-form-group label { margin-bottom: 0.35rem; display: block; } .am-right .auth-form-group input { padding: 0.7rem 0.85rem; font-size: 0.9rem; } .am-right .auth-form-options { margin: 0.35rem 0 0.75rem; } .am-right .auth-legal-note { font-size: 0.72rem; line-height: 1.5; margin-top: 0.5rem; padding-top: 0.5rem; } .am-right .auth-password-strength { margin-top: 0.4rem; } .am-right .auth-submit-btn { height: 46px; font-weight: 600; } .am-right .auth-switch-text { margin-top: 1rem; font-size: 0.85rem; } /* Sol panel: boş bir görsel yerine ürün vaatleri */ .am-left-perks { list-style: none; margin: 1.25rem 0 0; padding: 0; } .am-left-perks li { display: flex; align-items: flex-start; gap: 0.55rem; color: rgba(255,255,255,0.62); font-size: 0.8rem; line-height: 1.5; margin-bottom: 0.6rem; } .am-left-perks svg { flex-shrink: 0; margin-top: 2px; color: rgba(255,255,255,0.42); } </style> <!-- Auth Modal --> <div class="auth-modal" id="authModal" role="dialog" aria-modal="true" aria-labelledby="authModalTitle"> <div class="auth-modal-backdrop" data-auth-close></div> <div class="auth-modal-container"> <!-- Close Button --> <button class="auth-modal-close" data-auth-close aria-label="Close"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <line x1="18" y1="6" x2="6" y2="18"></line> <line x1="6" y1="6" x2="18" y2="18"></line> </svg> </button> <!-- Left Visual Panel --> <div class="am-left"> <canvas id="amCanvas"></canvas> <div class="am-left-body"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 882 250" class="am-left-logo" style="height:40px;width:auto;display:block;" aria-label="jekcms" role="img"><path fill="currentColor" d="M6.48215 8.24357L167.595 8.10861L167.512 162.193L167.477 210.101C167.48 213.355 167.882 237.21 166.989 238.373C153.012 238.799 138.505 238.489 124.451 238.475L52.3131 238.454C40.5223 238.448 17.5353 237.714 6.48826 238.725C6.04649 191.112 6.03411 143.495 6.45111 95.8804L6.31368 41.5049C6.26572 31.0067 5.875 18.5036 6.48215 8.24357ZM47.122 213.243C55.2466 214.349 58.5712 214.812 66.8347 214.175C83.8145 211.464 95.5927 200.338 98.5824 182.927C100.568 171.363 98.8839 158.601 99.4527 146.853C99.7496 122.573 99.0068 97.8742 99.5038 73.6483L95.624 69.8267C90.2723 69.4959 85.2575 69.5523 79.9069 69.5846C76.7112 69.8672 75.8812 71.1424 73.5709 73.5076L73.6627 141.077C73.6968 152.899 73.9643 164.759 73.4008 176.564C72.7208 190.808 61.5927 190.243 50.7272 190.137L48.6262 190.113C48.57 197.67 47.4669 205.595 47.122 213.243ZM89.375 59.065C98.3036 57.4528 104.22 48.8817 102.568 39.953C100.916 31.0243 92.3244 25.1425 83.4111 26.8377C74.5563 28.5218 68.7264 37.0518 70.3679 45.922C72.0094 54.7922 80.5049 60.6667 89.375 59.065Z"/><path fill="currentColor" d="M741.317 73.9003C742.933 73.6988 747.083 74.1291 748.78 74.3513C764.421 76.3995 775.932 88.6139 779.135 103.771C779.66 106.296 779.991 108.858 780.124 111.433C780.443 117.796 781.358 161.97 779.431 164.707C778.736 165.695 777.525 166.178 776.367 166.336C772.958 166.803 763.8 167.407 761.169 165.264C760.007 164.318 759.487 162.564 759.285 161.128C758.709 157.035 759.171 152.404 759.227 148.262C759.381 136.803 760.299 122.884 759.12 111.674C758.551 106.273 756.931 100.875 752.528 97.3653C748.919 94.4885 744.2 93.4247 739.672 93.9527C733.148 94.7136 725.737 98.3022 722.816 104.518C719.854 110.82 721.518 145.843 721.499 155.204C721.495 157.356 721.913 162.593 720.535 164.28C719.248 165.855 717.002 166.384 715.067 166.578C711.35 166.951 704.696 167.348 701.692 164.903C699.401 161.432 700.507 152.101 700.564 147.685L700.677 122.056C700.634 108.555 699.155 93.2349 681.078 93.8758C650.271 94.968 664.007 134.607 661.572 154.358C660.855 160.179 663.334 167.064 653.685 166.576C649.394 166.359 640.821 168.068 640.502 162.205C640.102 152.504 640.332 142.662 640.396 132.907C640.467 116.947 640.453 100.987 640.356 85.0272C640.364 74.754 641.601 74.9184 651.33 75.2046C653.527 78.6887 654.967 81.3787 656.843 85.0595C674.65 68.3648 696.06 71.0637 712.677 87.6554C713.265 86.9051 713.872 86.1703 714.497 85.4517C721.587 77.3763 730.997 74.5343 741.317 73.9003Z"/><path fill="currentColor" d="M367.158 74.3069C369.439 73.9129 373.379 73.9541 375.648 74.05C393.313 74.7968 408.399 87.0419 413.603 103.816C416.396 112.82 415.929 120.029 415.557 129.216C411.055 128.64 402.522 128.847 397.72 128.858L367.156 128.976C361.671 129.016 354.942 129.321 349.614 128.996C353.357 142.009 361.46 149.959 375.77 149.173C386.822 148.566 390.83 145.078 397.967 137.169L402.075 139.241C404.931 140.59 408.299 142.081 410.921 143.806C412.101 144.582 413.542 146.067 413.724 147.51C413.903 148.923 413.228 149.933 412.378 150.988C404.547 160.721 393.094 166.495 380.756 167.864C368.285 169.246 354.968 166.149 345.062 158.249C335.491 150.615 330.089 139.673 328.696 127.623C327.205 114.311 330.085 100.098 338.513 89.4593C342.759 84.099 348.139 79.9763 354.413 77.3068C358.65 75.5044 362.621 74.8089 367.158 74.3069ZM375.927 111.1C381.087 111.174 389.763 111.507 394.671 110.85C389.347 98.931 384.738 92.1266 370.195 93.2324C358.281 94.8763 354.228 100.257 350.364 110.915C358.636 111.266 367.597 111.108 375.927 111.1Z"/><path fill="currentColor" d="M445.975 28.545C449.437 28.4572 459.201 27.3396 461.653 29.675C464.921 32.7879 463.101 88.4393 463.15 96.3636C463.169 99.3386 462.464 108.746 464.493 110.749C469.555 110.158 491.819 80.9969 497.954 76.8258C500.906 74.8184 527.767 73.4561 520.861 80.9098C509.053 93.6532 497.078 107.366 484.792 119.624C492.945 128.867 502.424 138.077 511.154 146.857C515.965 152.009 521.124 157.126 526.089 162.156L524.666 166.45L502.46 166.439C496.323 160.895 470.353 130.932 464.502 130.414C461.77 132.669 464.761 158.361 462.948 163.129C461.075 168.056 448.328 166.771 444.824 165.746C440.998 164.627 442.423 145.761 442.407 141.597L442.367 89.0476L442.39 48.6096C442.405 43.0957 441.521 36.2217 443.029 30.905C443.42 29.5259 444.731 29.0535 445.975 28.545Z"/><path fill="currentColor" d="M579.939 73.8908C593.883 74.3834 605.916 78.7696 615.482 89.3172C621.823 96.3091 607.941 103.145 603.277 106.543C598.988 101.58 593.62 96.3516 587.001 94.9229C548.651 86.6453 545.118 147.515 582.1 148.376C591.414 148.593 596.456 143.336 603.616 138.981C605.039 139.161 605.259 139.807 606.505 140.992C610.297 144.9 614.074 148.43 617.91 152.48C608.575 161.627 597.252 167.372 584.105 168.161C571.923 168.941 559.941 164.786 550.852 156.632C541.642 148.475 536.087 136.961 535.431 124.67C534.434 107.272 540.953 90.0634 556.146 80.6065C564.165 75.6144 570.712 74.4148 579.939 73.8908Z"/><path fill="currentColor" d="M830.353 74.2796C840.943 73.73 851.713 75.124 860.887 80.7241C869.115 85.7467 857.803 95.0526 854.636 99.3666C848.552 95.3533 843.405 92.3455 835.716 92.5248C832.362 92.603 829.678 93.1966 827.332 95.6947C825.871 97.2499 824.892 99.4582 825.054 101.559C825.709 110.093 844.096 110.634 850.533 113.122C854.886 114.582 858.672 116.578 862.097 119.755C872.832 129.71 873.14 147.142 863.076 157.677C855.482 165.625 846.22 167.803 835.667 168.181C835.216 168.181 834.765 168.169 834.314 168.145C820.636 167.368 811.273 162.782 802.248 152.64C806.437 148.794 808.286 145.127 813.613 141.272C822.676 143.727 827.458 150.947 839.023 149.309C845.596 148.378 850.611 143.781 849.301 136.638C846.922 128.924 830.964 127.843 824.626 125.998C794.107 117.111 799.174 78.8157 830.353 74.2796Z"/><path fill="currentColor" d="M286.639 75.5655C290.014 75.4115 302.257 73.9318 302.966 78.2085C303.839 83.4768 303.622 89.9178 303.61 95.3148L303.581 119.653L303.61 156.058C303.62 181.08 304.82 203.7 273.994 210.022C268.975 210.778 262.563 209.921 257.493 209.319C257.739 203.416 258.596 197.415 258.837 191.134C263.235 191.54 271.283 190.832 275.408 189.24C279.055 187.833 280.987 184.443 281.672 180.696C283.589 170.22 282.696 157.088 282.819 146.296C283.003 130.231 282.723 114.614 282.806 98.5266C282.836 92.6342 281.985 83.3204 283.655 77.4755C283.958 76.4171 285.587 75.9899 286.639 75.5655Z"/><path fill="currentColor" d="M290.405 34.7513C297.829 33.2354 305.084 38.0005 306.648 45.4205C308.213 52.8404 303.502 60.1336 296.099 61.75C288.625 63.3821 281.252 58.6109 279.672 51.1195C278.092 43.6281 282.909 36.2818 290.405 34.7513Z"/></svg> <p class="am-left-tagline">Blog kur, yazını yayınla.</p> <ul class="am-left-perks"> <li> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <polyline points="20 6 9 17 4 12"></polyline> </svg> <span>Publish in minutes — no setup marathon</span> </li> <li> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <polyline points="20 6 9 17 4 12"></polyline> </svg> <span>Lifetime license, free updates</span> </li> <li> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> <polyline points="20 6 9 17 4 12"></polyline> </svg> <span>Your content stays on your own server</span> </li> </ul> </div> </div> <!-- Right Form Panel --> <div class="am-right"> <!-- Tabs --> <div class="auth-tabs"> <button class="auth-tab active" data-tab="login">Sign In</button> <button class="auth-tab" data-tab="register">Sign Up</button> <div class="auth-tab-indicator"></div> </div> <!-- Login Panel --> <div class="auth-panel active" id="loginPanel"> <div class="am-header-row"> <div> <h2 id="authModalTitle">Welcome Back</h2> <p>Sign in to your account</p> </div> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 882 250" class="am-brand-logo" style="height:26px;width:auto;display:block;" aria-label="jekcms" role="img" aria-hidden="true"><path fill="currentColor" d="M6.48215 8.24357L167.595 8.10861L167.512 162.193L167.477 210.101C167.48 213.355 167.882 237.21 166.989 238.373C153.012 238.799 138.505 238.489 124.451 238.475L52.3131 238.454C40.5223 238.448 17.5353 237.714 6.48826 238.725C6.04649 191.112 6.03411 143.495 6.45111 95.8804L6.31368 41.5049C6.26572 31.0067 5.875 18.5036 6.48215 8.24357ZM47.122 213.243C55.2466 214.349 58.5712 214.812 66.8347 214.175C83.8145 211.464 95.5927 200.338 98.5824 182.927C100.568 171.363 98.8839 158.601 99.4527 146.853C99.7496 122.573 99.0068 97.8742 99.5038 73.6483L95.624 69.8267C90.2723 69.4959 85.2575 69.5523 79.9069 69.5846C76.7112 69.8672 75.8812 71.1424 73.5709 73.5076L73.6627 141.077C73.6968 152.899 73.9643 164.759 73.4008 176.564C72.7208 190.808 61.5927 190.243 50.7272 190.137L48.6262 190.113C48.57 197.67 47.4669 205.595 47.122 213.243ZM89.375 59.065C98.3036 57.4528 104.22 48.8817 102.568 39.953C100.916 31.0243 92.3244 25.1425 83.4111 26.8377C74.5563 28.5218 68.7264 37.0518 70.3679 45.922C72.0094 54.7922 80.5049 60.6667 89.375 59.065Z"/><path fill="currentColor" d="M741.317 73.9003C742.933 73.6988 747.083 74.1291 748.78 74.3513C764.421 76.3995 775.932 88.6139 779.135 103.771C779.66 106.296 779.991 108.858 780.124 111.433C780.443 117.796 781.358 161.97 779.431 164.707C778.736 165.695 777.525 166.178 776.367 166.336C772.958 166.803 763.8 167.407 761.169 165.264C760.007 164.318 759.487 162.564 759.285 161.128C758.709 157.035 759.171 152.404 759.227 148.262C759.381 136.803 760.299 122.884 759.12 111.674C758.551 106.273 756.931 100.875 752.528 97.3653C748.919 94.4885 744.2 93.4247 739.672 93.9527C733.148 94.7136 725.737 98.3022 722.816 104.518C719.854 110.82 721.518 145.843 721.499 155.204C721.495 157.356 721.913 162.593 720.535 164.28C719.248 165.855 717.002 166.384 715.067 166.578C711.35 166.951 704.696 167.348 701.692 164.903C699.401 161.432 700.507 152.101 700.564 147.685L700.677 122.056C700.634 108.555 699.155 93.2349 681.078 93.8758C650.271 94.968 664.007 134.607 661.572 154.358C660.855 160.179 663.334 167.064 653.685 166.576C649.394 166.359 640.821 168.068 640.502 162.205C640.102 152.504 640.332 142.662 640.396 132.907C640.467 116.947 640.453 100.987 640.356 85.0272C640.364 74.754 641.601 74.9184 651.33 75.2046C653.527 78.6887 654.967 81.3787 656.843 85.0595C674.65 68.3648 696.06 71.0637 712.677 87.6554C713.265 86.9051 713.872 86.1703 714.497 85.4517C721.587 77.3763 730.997 74.5343 741.317 73.9003Z"/><path fill="currentColor" d="M367.158 74.3069C369.439 73.9129 373.379 73.9541 375.648 74.05C393.313 74.7968 408.399 87.0419 413.603 103.816C416.396 112.82 415.929 120.029 415.557 129.216C411.055 128.64 402.522 128.847 397.72 128.858L367.156 128.976C361.671 129.016 354.942 129.321 349.614 128.996C353.357 142.009 361.46 149.959 375.77 149.173C386.822 148.566 390.83 145.078 397.967 137.169L402.075 139.241C404.931 140.59 408.299 142.081 410.921 143.806C412.101 144.582 413.542 146.067 413.724 147.51C413.903 148.923 413.228 149.933 412.378 150.988C404.547 160.721 393.094 166.495 380.756 167.864C368.285 169.246 354.968 166.149 345.062 158.249C335.491 150.615 330.089 139.673 328.696 127.623C327.205 114.311 330.085 100.098 338.513 89.4593C342.759 84.099 348.139 79.9763 354.413 77.3068C358.65 75.5044 362.621 74.8089 367.158 74.3069ZM375.927 111.1C381.087 111.174 389.763 111.507 394.671 110.85C389.347 98.931 384.738 92.1266 370.195 93.2324C358.281 94.8763 354.228 100.257 350.364 110.915C358.636 111.266 367.597 111.108 375.927 111.1Z"/><path fill="currentColor" d="M445.975 28.545C449.437 28.4572 459.201 27.3396 461.653 29.675C464.921 32.7879 463.101 88.4393 463.15 96.3636C463.169 99.3386 462.464 108.746 464.493 110.749C469.555 110.158 491.819 80.9969 497.954 76.8258C500.906 74.8184 527.767 73.4561 520.861 80.9098C509.053 93.6532 497.078 107.366 484.792 119.624C492.945 128.867 502.424 138.077 511.154 146.857C515.965 152.009 521.124 157.126 526.089 162.156L524.666 166.45L502.46 166.439C496.323 160.895 470.353 130.932 464.502 130.414C461.77 132.669 464.761 158.361 462.948 163.129C461.075 168.056 448.328 166.771 444.824 165.746C440.998 164.627 442.423 145.761 442.407 141.597L442.367 89.0476L442.39 48.6096C442.405 43.0957 441.521 36.2217 443.029 30.905C443.42 29.5259 444.731 29.0535 445.975 28.545Z"/><path fill="currentColor" d="M579.939 73.8908C593.883 74.3834 605.916 78.7696 615.482 89.3172C621.823 96.3091 607.941 103.145 603.277 106.543C598.988 101.58 593.62 96.3516 587.001 94.9229C548.651 86.6453 545.118 147.515 582.1 148.376C591.414 148.593 596.456 143.336 603.616 138.981C605.039 139.161 605.259 139.807 606.505 140.992C610.297 144.9 614.074 148.43 617.91 152.48C608.575 161.627 597.252 167.372 584.105 168.161C571.923 168.941 559.941 164.786 550.852 156.632C541.642 148.475 536.087 136.961 535.431 124.67C534.434 107.272 540.953 90.0634 556.146 80.6065C564.165 75.6144 570.712 74.4148 579.939 73.8908Z"/><path fill="currentColor" d="M830.353 74.2796C840.943 73.73 851.713 75.124 860.887 80.7241C869.115 85.7467 857.803 95.0526 854.636 99.3666C848.552 95.3533 843.405 92.3455 835.716 92.5248C832.362 92.603 829.678 93.1966 827.332 95.6947C825.871 97.2499 824.892 99.4582 825.054 101.559C825.709 110.093 844.096 110.634 850.533 113.122C854.886 114.582 858.672 116.578 862.097 119.755C872.832 129.71 873.14 147.142 863.076 157.677C855.482 165.625 846.22 167.803 835.667 168.181C835.216 168.181 834.765 168.169 834.314 168.145C820.636 167.368 811.273 162.782 802.248 152.64C806.437 148.794 808.286 145.127 813.613 141.272C822.676 143.727 827.458 150.947 839.023 149.309C845.596 148.378 850.611 143.781 849.301 136.638C846.922 128.924 830.964 127.843 824.626 125.998C794.107 117.111 799.174 78.8157 830.353 74.2796Z"/><path fill="currentColor" d="M286.639 75.5655C290.014 75.4115 302.257 73.9318 302.966 78.2085C303.839 83.4768 303.622 89.9178 303.61 95.3148L303.581 119.653L303.61 156.058C303.62 181.08 304.82 203.7 273.994 210.022C268.975 210.778 262.563 209.921 257.493 209.319C257.739 203.416 258.596 197.415 258.837 191.134C263.235 191.54 271.283 190.832 275.408 189.24C279.055 187.833 280.987 184.443 281.672 180.696C283.589 170.22 282.696 157.088 282.819 146.296C283.003 130.231 282.723 114.614 282.806 98.5266C282.836 92.6342 281.985 83.3204 283.655 77.4755C283.958 76.4171 285.587 75.9899 286.639 75.5655Z"/><path fill="currentColor" d="M290.405 34.7513C297.829 33.2354 305.084 38.0005 306.648 45.4205C308.213 52.8404 303.502 60.1336 296.099 61.75C288.625 63.3821 281.252 58.6109 279.672 51.1195C278.092 43.6281 282.909 36.2818 290.405 34.7513Z"/></svg> </div> <div class="am-social-btns"> <button type="button" class="am-social-btn" id="googleLoginBtn" data-provider="google"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"> <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z"/> <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23z"/> <path fill="#FBBC05" d="M5.84 14.1a6.6 6.6 0 0 1 0-4.2V7.06H2.18a11 11 0 0 0 0 9.88l3.66-2.84z"/> <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.06l3.66 2.84C6.71 7.31 9.14 5.38 12 5.38z"/> </svg> <span>Continue with Google</span> </button> </div> <div class="auth-divider"> <span>or continue with email</span> </div> <!-- Login Form --> <form class="auth-form" id="loginForm" method="post" novalidate> <div class="auth-form-group"> <label for="loginEmail">Email Address</label> <input type="email" id="loginEmail" name="email" placeholder="you@example.com" autocomplete="email" required > <span class="auth-field-error"></span> </div> <div class="auth-form-group"> <label for="loginPassword">Password</label> <div class="auth-password-wrapper"> <input type="password" id="loginPassword" name="password" placeholder="Enter your password" autocomplete="current-password" required > <button type="button" class="auth-password-toggle" aria-label="Toggle password visibility"> <svg class="eye-open" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path> <circle cx="12" cy="12" r="3"></circle> </svg> <svg class="eye-closed" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display:none;"> <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path> <line x1="1" y1="1" x2="23" y2="23"></line> </svg> </button> </div> <span class="auth-field-error"></span> </div> <div class="auth-form-options" style="justify-content:flex-end;"> <a href="/customer/forgot-password.php" class="auth-forgot-link">Forgot password?</a> </div> <div class="auth-form-error" id="loginFormError"></div> <button type="submit" class="auth-submit-btn"> <span class="auth-btn-text">Sign In</span> <span class="auth-btn-loader"></span> </button> </form> <p class="auth-switch-text"> Don't have an account? <button type="button" class="auth-switch-btn" data-switch="register">Sign Up</button> </p> </div> <!-- Register Panel --> <div class="auth-panel" id="registerPanel"> <div class="am-header-row"> <div> <h2>Create Account</h2> <p>Purchase a license to get started</p> </div> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 882 250" class="am-brand-logo" style="height:26px;width:auto;display:block;" aria-label="jekcms" role="img" aria-hidden="true"><path fill="currentColor" d="M6.48215 8.24357L167.595 8.10861L167.512 162.193L167.477 210.101C167.48 213.355 167.882 237.21 166.989 238.373C153.012 238.799 138.505 238.489 124.451 238.475L52.3131 238.454C40.5223 238.448 17.5353 237.714 6.48826 238.725C6.04649 191.112 6.03411 143.495 6.45111 95.8804L6.31368 41.5049C6.26572 31.0067 5.875 18.5036 6.48215 8.24357ZM47.122 213.243C55.2466 214.349 58.5712 214.812 66.8347 214.175C83.8145 211.464 95.5927 200.338 98.5824 182.927C100.568 171.363 98.8839 158.601 99.4527 146.853C99.7496 122.573 99.0068 97.8742 99.5038 73.6483L95.624 69.8267C90.2723 69.4959 85.2575 69.5523 79.9069 69.5846C76.7112 69.8672 75.8812 71.1424 73.5709 73.5076L73.6627 141.077C73.6968 152.899 73.9643 164.759 73.4008 176.564C72.7208 190.808 61.5927 190.243 50.7272 190.137L48.6262 190.113C48.57 197.67 47.4669 205.595 47.122 213.243ZM89.375 59.065C98.3036 57.4528 104.22 48.8817 102.568 39.953C100.916 31.0243 92.3244 25.1425 83.4111 26.8377C74.5563 28.5218 68.7264 37.0518 70.3679 45.922C72.0094 54.7922 80.5049 60.6667 89.375 59.065Z"/><path fill="currentColor" d="M741.317 73.9003C742.933 73.6988 747.083 74.1291 748.78 74.3513C764.421 76.3995 775.932 88.6139 779.135 103.771C779.66 106.296 779.991 108.858 780.124 111.433C780.443 117.796 781.358 161.97 779.431 164.707C778.736 165.695 777.525 166.178 776.367 166.336C772.958 166.803 763.8 167.407 761.169 165.264C760.007 164.318 759.487 162.564 759.285 161.128C758.709 157.035 759.171 152.404 759.227 148.262C759.381 136.803 760.299 122.884 759.12 111.674C758.551 106.273 756.931 100.875 752.528 97.3653C748.919 94.4885 744.2 93.4247 739.672 93.9527C733.148 94.7136 725.737 98.3022 722.816 104.518C719.854 110.82 721.518 145.843 721.499 155.204C721.495 157.356 721.913 162.593 720.535 164.28C719.248 165.855 717.002 166.384 715.067 166.578C711.35 166.951 704.696 167.348 701.692 164.903C699.401 161.432 700.507 152.101 700.564 147.685L700.677 122.056C700.634 108.555 699.155 93.2349 681.078 93.8758C650.271 94.968 664.007 134.607 661.572 154.358C660.855 160.179 663.334 167.064 653.685 166.576C649.394 166.359 640.821 168.068 640.502 162.205C640.102 152.504 640.332 142.662 640.396 132.907C640.467 116.947 640.453 100.987 640.356 85.0272C640.364 74.754 641.601 74.9184 651.33 75.2046C653.527 78.6887 654.967 81.3787 656.843 85.0595C674.65 68.3648 696.06 71.0637 712.677 87.6554C713.265 86.9051 713.872 86.1703 714.497 85.4517C721.587 77.3763 730.997 74.5343 741.317 73.9003Z"/><path fill="currentColor" d="M367.158 74.3069C369.439 73.9129 373.379 73.9541 375.648 74.05C393.313 74.7968 408.399 87.0419 413.603 103.816C416.396 112.82 415.929 120.029 415.557 129.216C411.055 128.64 402.522 128.847 397.72 128.858L367.156 128.976C361.671 129.016 354.942 129.321 349.614 128.996C353.357 142.009 361.46 149.959 375.77 149.173C386.822 148.566 390.83 145.078 397.967 137.169L402.075 139.241C404.931 140.59 408.299 142.081 410.921 143.806C412.101 144.582 413.542 146.067 413.724 147.51C413.903 148.923 413.228 149.933 412.378 150.988C404.547 160.721 393.094 166.495 380.756 167.864C368.285 169.246 354.968 166.149 345.062 158.249C335.491 150.615 330.089 139.673 328.696 127.623C327.205 114.311 330.085 100.098 338.513 89.4593C342.759 84.099 348.139 79.9763 354.413 77.3068C358.65 75.5044 362.621 74.8089 367.158 74.3069ZM375.927 111.1C381.087 111.174 389.763 111.507 394.671 110.85C389.347 98.931 384.738 92.1266 370.195 93.2324C358.281 94.8763 354.228 100.257 350.364 110.915C358.636 111.266 367.597 111.108 375.927 111.1Z"/><path fill="currentColor" d="M445.975 28.545C449.437 28.4572 459.201 27.3396 461.653 29.675C464.921 32.7879 463.101 88.4393 463.15 96.3636C463.169 99.3386 462.464 108.746 464.493 110.749C469.555 110.158 491.819 80.9969 497.954 76.8258C500.906 74.8184 527.767 73.4561 520.861 80.9098C509.053 93.6532 497.078 107.366 484.792 119.624C492.945 128.867 502.424 138.077 511.154 146.857C515.965 152.009 521.124 157.126 526.089 162.156L524.666 166.45L502.46 166.439C496.323 160.895 470.353 130.932 464.502 130.414C461.77 132.669 464.761 158.361 462.948 163.129C461.075 168.056 448.328 166.771 444.824 165.746C440.998 164.627 442.423 145.761 442.407 141.597L442.367 89.0476L442.39 48.6096C442.405 43.0957 441.521 36.2217 443.029 30.905C443.42 29.5259 444.731 29.0535 445.975 28.545Z"/><path fill="currentColor" d="M579.939 73.8908C593.883 74.3834 605.916 78.7696 615.482 89.3172C621.823 96.3091 607.941 103.145 603.277 106.543C598.988 101.58 593.62 96.3516 587.001 94.9229C548.651 86.6453 545.118 147.515 582.1 148.376C591.414 148.593 596.456 143.336 603.616 138.981C605.039 139.161 605.259 139.807 606.505 140.992C610.297 144.9 614.074 148.43 617.91 152.48C608.575 161.627 597.252 167.372 584.105 168.161C571.923 168.941 559.941 164.786 550.852 156.632C541.642 148.475 536.087 136.961 535.431 124.67C534.434 107.272 540.953 90.0634 556.146 80.6065C564.165 75.6144 570.712 74.4148 579.939 73.8908Z"/><path fill="currentColor" d="M830.353 74.2796C840.943 73.73 851.713 75.124 860.887 80.7241C869.115 85.7467 857.803 95.0526 854.636 99.3666C848.552 95.3533 843.405 92.3455 835.716 92.5248C832.362 92.603 829.678 93.1966 827.332 95.6947C825.871 97.2499 824.892 99.4582 825.054 101.559C825.709 110.093 844.096 110.634 850.533 113.122C854.886 114.582 858.672 116.578 862.097 119.755C872.832 129.71 873.14 147.142 863.076 157.677C855.482 165.625 846.22 167.803 835.667 168.181C835.216 168.181 834.765 168.169 834.314 168.145C820.636 167.368 811.273 162.782 802.248 152.64C806.437 148.794 808.286 145.127 813.613 141.272C822.676 143.727 827.458 150.947 839.023 149.309C845.596 148.378 850.611 143.781 849.301 136.638C846.922 128.924 830.964 127.843 824.626 125.998C794.107 117.111 799.174 78.8157 830.353 74.2796Z"/><path fill="currentColor" d="M286.639 75.5655C290.014 75.4115 302.257 73.9318 302.966 78.2085C303.839 83.4768 303.622 89.9178 303.61 95.3148L303.581 119.653L303.61 156.058C303.62 181.08 304.82 203.7 273.994 210.022C268.975 210.778 262.563 209.921 257.493 209.319C257.739 203.416 258.596 197.415 258.837 191.134C263.235 191.54 271.283 190.832 275.408 189.24C279.055 187.833 280.987 184.443 281.672 180.696C283.589 170.22 282.696 157.088 282.819 146.296C283.003 130.231 282.723 114.614 282.806 98.5266C282.836 92.6342 281.985 83.3204 283.655 77.4755C283.958 76.4171 285.587 75.9899 286.639 75.5655Z"/><path fill="currentColor" d="M290.405 34.7513C297.829 33.2354 305.084 38.0005 306.648 45.4205C308.213 52.8404 303.502 60.1336 296.099 61.75C288.625 63.3821 281.252 58.6109 279.672 51.1195C278.092 43.6281 282.909 36.2818 290.405 34.7513Z"/></svg> </div> <div class="am-social-btns"> <button type="button" class="am-social-btn" id="googleRegisterBtn" data-provider="google"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"> <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z"/> <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23z"/> <path fill="#FBBC05" d="M5.84 14.1a6.6 6.6 0 0 1 0-4.2V7.06H2.18a11 11 0 0 0 0 9.88l3.66-2.84z"/> <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.06l3.66 2.84C6.71 7.31 9.14 5.38 12 5.38z"/> </svg> <span>Sign up with Google</span> </button> </div> <div class="auth-divider"> <span>or continue with email</span> </div> <!-- Register Form --> <form class="auth-form" id="registerForm" method="post" novalidate> <div class="auth-form-group"> <label for="registerName">Full Name</label> <input type="text" id="registerName" name="name" placeholder="John Doe" autocomplete="name" required > <span class="auth-field-error"></span> </div> <div class="auth-form-group"> <label for="registerEmail">Email Address</label> <input type="email" id="registerEmail" name="email" placeholder="you@example.com" autocomplete="email" required > <span class="auth-field-error"></span> </div> <div class="auth-form-group"> <label for="registerPassword">Password</label> <div class="auth-password-wrapper"> <input type="password" id="registerPassword" name="password" placeholder="Enter your password" autocomplete="new-password" required minlength="8" > <button type="button" class="auth-password-toggle" aria-label="Toggle password visibility"> <svg class="eye-open" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path> <circle cx="12" cy="12" r="3"></circle> </svg> <svg class="eye-closed" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display:none;"> <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path> <line x1="1" y1="1" x2="23" y2="23"></line> </svg> </button> </div> <div class="auth-password-strength"> <div class="auth-strength-bar"> <div class="auth-strength-fill"></div> </div> <span class="auth-strength-text"></span> </div> <span class="auth-field-error"></span> </div> <div class="auth-form-group"> <label for="registerPasswordConfirm">Confirm Password</label> <div class="auth-password-wrapper"> <input type="password" id="registerPasswordConfirm" name="password_confirm" placeholder="Confirm your password" autocomplete="new-password" required > <button type="button" class="auth-password-toggle" aria-label="Toggle password visibility"> <svg class="eye-open" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path> <circle cx="12" cy="12" r="3"></circle> </svg> <svg class="eye-closed" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display:none;"> <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path> <line x1="1" y1="1" x2="23" y2="23"></line> </svg> </button> </div> <span class="auth-field-error"></span> </div> <div class="auth-form-options"> <label class="auth-checkbox"> <input type="checkbox" name="terms" value="1" required> <span class="auth-checkbox-mark"></span> <span> I agree to the <a href="/terms" target="_blank">Terms of Service</a>, <a href="/privacy" target="_blank">Privacy Policy</a> and <a href="/refund" target="_blank">Refund Policy</a> </span> </label> <p class="auth-legal-note">By creating an account you confirm that you have read and accepted these policies. jekcms licenses are non-refundable digital products — the no-refund policy applies upon license activation.</p> </div> <div class="auth-form-error" id="registerFormError"></div> <button type="submit" class="auth-submit-btn"> <span class="auth-btn-text">Create Account</span> <span class="auth-btn-loader"></span> </button> </form> <p class="auth-switch-text"> Already have an account? <button type="button" class="auth-switch-btn" data-switch="login">Sign In</button> </p> </div> </div> </div> </div> <!-- Auth Modal Translations for JS --> <script> window.AUTH_TRANSLATIONS = {"login_title":"Welcome Back","login_subtitle":"Sign in to your account","register_title":"Create Account","register_subtitle":"Purchase a license to get started","tab_login":"Sign In","tab_register":"Sign Up","google_login":"Continue with Google","google_register":"Sign up with Google","or_divider":"or continue with email","name_label":"Full Name","name_placeholder":"John Doe","email_label":"Email Address","email_placeholder":"you@example.com","password_label":"Password","password_placeholder":"Enter your password","password_confirm_label":"Confirm Password","password_confirm_placeholder":"Confirm your password","remember_me":"Remember me","forgot_password":"Forgot password?","btn_login":"Sign In","btn_register":"Create Account","terms_agree":"I agree to the","terms_link":"Terms of Service","privacy_link":"Privacy Policy","and":"and","refund_link":"Refund Policy","legal_note":"By creating an account you confirm that you have read and accepted these policies. jekcms licenses are non-refundable digital products — the no-refund policy applies upon license activation.","no_account":"Don't have an account?","has_account":"Already have an account?","login_success":"Login successful! Redirecting...","register_success":"Account created! Please check your email.","error_email_required":"Email is required","error_password_required":"Password is required","error_name_required":"Name is required","error_password_mismatch":"Passwords do not match","error_invalid_email":"Please enter a valid email","error_password_weak":"Password must be at least 8 characters","error_terms_required":"Please accept the terms to continue","password_strength":"Password strength","strength_weak":"Weak","strength_medium":"Medium","strength_strong":"Strong","perk_1":"Publish in minutes — no setup marathon","perk_2":"Lifetime license, free updates","perk_3":"Your content stays on your own server"}; window.AUTH_LANG = 'en'; // Alt-klasör kurulumlarında (örn. localhost/jekcms) /api/auth yolunun doğru // çözülmesi için site kök öneki — auth.js bunu kullanır. window.JEK_SITE_BASE = ''; (function(){ var c=document.getElementById('amCanvas'); if(!c)return; var ctx=c.getContext('2d'); var ps=[]; function resize(){ c.width=c.offsetWidth; c.height=c.offsetHeight; } resize(); // Sürekli resize olayında geometri okuma reflow üretmesin: debounce + rAF. var rzT; window.addEventListener('resize',function(){ clearTimeout(rzT); rzT=setTimeout(function(){ requestAnimationFrame(resize); },150); }); for(var i=0;i<55;i++){ ps.push({x:Math.random()*c.width,y:Math.random()*c.height,v:Math.random()*0.25+0.05,o:Math.random()*0.35+0.1,r:Math.random()*1.5+0.5}); } function draw(){ ctx.clearRect(0,0,c.width,c.height); ps.forEach(function(p){ p.y-=p.v; if(p.y<0){p.y=c.height;p.x=Math.random()*c.width;} ctx.beginPath();ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fillStyle='rgba(255,255,255,'+p.o+')';ctx.fill(); }); requestAnimationFrame(draw); } draw(); })(); </script> <!-- Newsletter signup band --> <section class="nl-band" aria-labelledby="nlBandTitle"> <div class="container nl-band-inner"> <div class="nl-band-copy"> <h2 id="nlBandTitle" class="nl-band-title">Be the first to know</h2> <p class="nl-band-sub">New features, release notes & CMS guides — a couple of emails a month, no spam.</p> </div> <form class="nl-band-form" id="nlBandForm" method="post" novalidate> <input type="hidden" name="csrf_token" value=""> <input type="hidden" name="lang" value="en"> <input type="text" name="website" class="nl-hp" tabindex="-1" autocomplete="off" aria-hidden="true"> <div class="nl-band-row"> <input type="email" name="email" required placeholder="Your email address" aria-label="Your email address" class="nl-band-input"> <button type="submit" class="nl-band-btn"> <span class="nl-band-btn-text">Subscribe</span> <svg class="nl-band-btn-spin" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" style="display:none;"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg> </button> </div> <p class="nl-band-msg" id="nlBandMsg" role="status" aria-live="polite"></p> </form> </div> </section> <!-- Footer --> <footer class="footer"> <div class="container"> <div class="footer-grid"> <!-- Brand Column (35%) --> <div class="footer-brand"> <a href="/" class="logo"> <img src="/assets/images/logo-dikey.svg" alt="jekcms" class="site-logo" width="60" height="60" style="height:60px;width:auto;display:block;"> </a> <!-- jekcms-footer-build:v6-autodeploy --> <p class="footer-tagline">Next-Generation Blog CMS</p> <p class="footer-description">A next-generation blog CMS — your posts, pages and images in one panel. Fast, easy, with built-in SEO.</p> <div class="social-links"> <a href="https://x.com/jekcms" class="social-link" aria-label="X (Twitter)" target="_blank" rel="noopener"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg> </a> <a href="https://github.com/jekcms" class="social-link" aria-label="GitHub" target="_blank" rel="noopener"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg> </a> <a href="https://linkedin.com/company/jekcms" class="social-link" aria-label="LinkedIn" target="_blank" rel="noopener"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg> </a> <a href="https://www.youtube.com/@jekcms" class="social-link" aria-label="YouTube" target="_blank" rel="noopener"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg> </a> <a href="https://t.me/+A696gOYbtlg0MjQ0" class="social-link" aria-label="Telegram" target="_blank" rel="noopener"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg> </a> </div> </div> <!-- Links Columns (65%) --> <div class="footer-links-wrapper"> <!-- Product --> <div class="footer-links"> <h3>Product</h3> <ul> <li><a href="/features">Features</a></li> <li><a href="/wordpress-alternative">WordPress Alternative</a></li> <li><a href="/pricing">Pricing</a></li> <li><a href="/demos">Demo</a></li> <li><a href="/changelog">Changelog</a></li> </ul> </div> <!-- Support --> <div class="footer-links"> <h3>Support</h3> <ul> <li><a href="/help">Help Center</a></li> <li><a href="/api-reference">API Reference</a></li> <li><a href="/docs">Documentation</a></li> </ul> </div> <!-- Company --> <div class="footer-links"> <h3>Company</h3> <ul> <li><a href="/about">About</a></li> <li><a href="/blog">Blog</a></li> <li><a href="/security">Security</a></li> <li><a href="/trust">Trust Center</a></li> <li><a href="/contact">Contact</a></li> </ul> </div> <!-- Legal --> <div class="footer-links"> <h3>Legal</h3> <ul> <li><a href="/privacy">Privacy Policy</a></li> <li><a href="/terms">Terms of Service</a></li> <li><a href="/cookie-policy">Cookie Policy</a></li> <li><a href="/kvkk">KVKK</a></li> <li><a href="/refund">Refund Policy</a></li> <li><a href="/eula">License Agreement (EULA)</a></li> <li><a href="/report-piracy">Report Piracy</a></li> </ul> </div> </div> </div> <div class="footer-bottom"> <div class="footer-bottom-content"> <p class="footer-copyright"> © 2026 jekcms. All rights reserved. </p> <p class="footer-subsidiary"> jekcms is an <a href="https://alfadizayn.com" target="_blank" rel="noopener">ALFA Dizayn</a> brand. </p> </div> </div> </div> </footer> <!-- Newsletter band handler --> <script> (function () { var f = document.getElementById('nlBandForm'); if (!f) return; var msg = document.getElementById('nlBandMsg'); var btn = f.querySelector('.nl-band-btn'); var spin = f.querySelector('.nl-band-btn-spin'); var txt = f.querySelector('.nl-band-btn-text'); var base = ""; var T = { invalid: "Please enter a valid email.", network: "Network error. Try again." }; f.addEventListener('submit', function (e) { e.preventDefault(); msg.textContent = ''; msg.className = 'nl-band-msg'; var email = (f.email.value || '').trim(); if (!email || !/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) { msg.textContent = T.invalid; msg.classList.add('is-err'); return; } btn.disabled = true; spin.style.display = 'inline'; txt.style.opacity = '.6'; // Anonim sayfa oturumsuz servis edilir (CDN önbelleği); token gönderim // anında alınır — böylece önbelleklenmiş HTML'de paylaşılan bir token // taşınmaz. // Token HER gönderimde taze alınır: gömülü değer başka bir oturum // deposundan (eski PHPSESSID kalıntısı) ya da CDN'lenmiş sayfadan // gelmiş olabilir — "doluysa atla" kısayolu bu iki durumda formu // sessizce kırıyordu (denetim 2026-08-22). var tokenField = f.querySelector('input[name="csrf_token"]'); var ready = fetch(base + '/marketing-includes/ajax/csrf.php', { credentials: 'same-origin' }) .then(function (r) { return r.json(); }) .then(function (d) { if (tokenField && d && d.token) { tokenField.value = d.token; } }); ready.then(function () { return fetch(base + '/marketing-includes/ajax/newsletter-handler.php', { method: 'POST', body: new FormData(f), credentials: 'same-origin' }) .then(function (r) { return r.json(); }) .then(function (d) { btn.disabled = false; spin.style.display = 'none'; txt.style.opacity = '1'; msg.textContent = d.message || ''; msg.classList.add(d.success ? 'is-ok' : 'is-err'); if (d.success) { f.email.value = ''; } }) .catch(function () { btn.disabled = false; spin.style.display = 'none'; txt.style.opacity = '1'; msg.textContent = T.network; msg.classList.add('is-err'); }); }); }); })(); </script> <!-- Scripts --> <script defer src="/marketing-assets/js/main.js?v=1784979903"></script> <script defer src="/marketing-assets/js/auth.js?v=1787959815"></script> <script data-jek-mobile-nav-standard data-jek-panel="#nav-menu" src="https://jekcms.com/assets/js/mobile-nav-standard.js?v=1784551804" defer></script> </body> </html>