Changelog
Release Notes
Every feature, every improvement, every fix since v1.0.0.
Page 13 of 24 - 710 releases, newest first.
Trends Theme No Longer Crops In-Content Images
Fixed
- The Trends theme forced every in-content image into a fixed 1.45:1 frame and cover-cropped it to fit - a 16:9 image lost a wide strip on both sides, so infographics went out with their titles and edge elements cut off. The image looked correct in the editor and broken only on the published page, which made the cause hard to spot. Content images now keep their own aspect ratio at full width; covers, cards and hero areas keep their designed framing. The other thirteen themes were audited for the same pattern and are unaffected.
n8n Templates: Live End-to-End Tested, Image Bug Fixed, Flow Slimmed
Fixed
- The queue templates were run live end to end - from a real queue task through research, writing, three image generations, media upload and publishing - and that run caught a real bug: the current image model returns JPEG while the templates named the files .png, so the site rejected every upload as a type mismatch and articles went out without their in-content images and cover. The templates now derive the file extension from the actual image type the model returns, so the images land no matter what format the model produces. After the fix the full live run passed end to end: article published with its cover and both in-content images in place.
- Both queue workflows were slimmed down: a pointless 2-second wait and a decorative dead-end node were removed, so the canvas shows only steps that actually do something.
n8n Templates Upgraded to the Current Gemini Generation
Fixed
- The n8n templates shipped pointing at the previous Gemini generation, and the researched template's writer even defaulted to a model Google no longer offers to newly created API keys - a fresh key failed with a not-found error at the content-writer step on the very first run. All three templates now use the current generation the CMS itself uses: gemini-3.6-flash for writing, research and SEO, and gemini-3.1-flash-image for image generation. Every model was verified live against a plain free-tier key, including the Google Search research step.
- Token budgets in the templates were adjusted for the new generation's thinking behaviour: current models spend part of the output budget on reasoning, so the tight limits on the SEO and image-vetting steps could have returned empty answers. Already-imported workflows are fixed by re-downloading the template, or by updating the model names in its Settings node.
A Direct Path from the n8n Box to Creating an API Key
Fixed
- The n8n box on the Content Panel shows the webhook URL and the templates, but the page where you create the site API key those requests need had no link pointing to it from there - on some plans it was effectively unreachable. The box now says it plainly under the webhook URL: requests need a site API key, with a direct "Create API Key" link.
n8n Templates Live in Exactly One Place
n8n Templates Right Where the Queue Lives
n8n Templates Now Live Inside Settings > API & Automation
The Automation (n8n) Page Is Now in the Menu
Fixed
- The page that holds your site API keys, webhook URLs and the new n8n templates was practically unreachable: its only link lived inside Content Studio, so on plans without that screen the page existed but nothing pointed to it. It now has its own "Automation (n8n)" entry in the admin menu under System, and the Settings > API & Automation tab opens with a clear pointer to it. The page title now says what it is: Automation (n8n) & API Keys.
Ready-Made n8n Workflow Templates
Added
- The API Keys page now offers three downloadable n8n workflow templates, so full content automation no longer starts from a blank canvas: an RSS Content Factory (collects fresh feed items, lets AI pick the best candidate, de-duplicates against your published posts, vets the source image and rewrites everything into an original post), a Content Queue Persona Writer (pulls tasks from your site's content queue, writes in a configurable author voice while producing SEO data in parallel, generates an AI cover and publishes), and a Researched Production template (genuinely researches the topic via Google Search first, writes strictly from the verified data under anti-hallucination rules, and produces a cover plus two in-content images in distinct art styles).
- Every template is configured in one single place: an "Ayarlar" (Settings) node at the start of the workflow holds your site URL, your site API key and your AI keys. No n8n credentials to set up for the queue templates, nothing scattered across nodes - and if you run a template before filling it in, it stops with a clear message telling you exactly what to do. The templates ship with no secrets inside; sticky notes in the canvas explain setup and how each stage works.
Match Images No Longer Skips Your Pinterest Pin
Fixed
- Some AI models echo the file-naming contract back inside the article JSON - a plain file name like "slug-pinterest" in an image field. The importer stored that name as if it were the image's address, so the Pinterest slot looked already filled: Match Images refused to touch a "filled" slot and the pin you uploaded to the temp folder was never picked up, with no error anywhere. A bare file name is no longer treated as an address at import, and the matcher now recognizes such leftover values as unmatched - so previously imported articles heal themselves the next time you press Match Images.
- The same phantom value also inflated the matched/total badge in the queue, made prompt export skip the article as "already done", and could reach the published post as a broken image. All of these paths now check for a real image address before counting a slot as matched.
Update Downloads Now Work on Hardened Hosting
Fixed
- On hosting accounts where the PHP setting allow_url_fopen is switched off - a common security hardening on shared hosting - the panel could find a new version but then fail with a download error. The update check had already been moved to the more capable cURL transport, but the actual package download (and the signed-manifest verification in front of it) was still using the old method, so the very same host that could see the update could not fetch it. Every network step of the update chain now uses the same cURL-first transport, so checking, verifying and downloading all work on the same hosts.
- When a download does fail, the panel no longer says only "failed to download": the message now carries the underlying transport reason (for example the exact cURL error or HTTP status), so support can diagnose the host from a screenshot instead of guessing.
In-Content Image Count Now Means What It Says
Fixed
- The Content Wizard asked for the number of in-content images but quietly counted the cover as one of them: picking 2 delivered a cover plus only 1 in-content image. The count now means exactly what the label says - every article always gets its cover plan, and the number you pick is how many in-content images are planned on top of it. Both creation paths (your own AI and in-app generation), the copied prompt and the downloadable sample template all follow the same rule, and picking 0 now yields a clean cover-only plan instead of no images at all.
- The requested in-content image count is now capped at the article's section count, because each image goes under a different heading - previously an extreme request could instruct the AI to place more images than the article had sections.
Batch Image Production: Prompt Export and a ChatGPT Automation Tool
Added
- Premium plans now solve the hardest part of importing content at scale: the images. A hundred articles easily mean three hundred image prompts, and producing those by hand is not realistic. The Content Queue (and the wizard's image-prompts card) now offers two new buttons: one downloads every pending image prompt as a single JSON file, the other downloads a small automation tool (Windows and macOS). Feed the JSON to the tool and it generates the images one by one in your own ChatGPT Plus account, saves each file under the exact name Match Images expects, stops by itself when your daily quota runs out and resumes where it left off the next day. A step-by-step setup guide for both operating systems is included in the ZIP; requirements (ChatGPT Plus, Python, Chrome) are stated up front.
- The image window of every queue item now shows, next to each prompt, the exact file name the image must be saved under - cover, in-content and Pinterest slots each get their name spelled out, so there is nothing left to guess before pressing Match Images.
Fixed
- The Content Wizard told you to save in-content images as slug-2.jpg - a name the image matcher never recognized, so files saved that way were silently ignored and the posts went out without their in-content images. The matcher's real contract is slug-img02.jpg, and the wizard now shows exactly that.
The Package Upload Box Is Now Always Visible
Fixed
- Manual package upload only appeared after a failed update check, so on a site where the check worked there was no way to find it at all. It is now a section of its own on the Updates screen and always available - whether you need it because the update server cannot be reached, or simply because you want to apply a particular package by hand.
Update Your Site Even When It Cannot Reach the Update Server
Added
- You can now upload an update package straight into the panel. Until now, if a site could not reach the update server - because the host blocks outbound connections, for example - there was no way to update it from the panel at all; the only route left was editing files over FTP, which is not something a site owner should have to do. The option appears exactly where the problem shows up: when a check fails, the failure notice now carries the upload box, a link to your downloads page and the size this server accepts.
- An uploaded package goes through the same safety chain as a normal update: the archive is verified as a genuine jekcms package before anything is touched, your license and update settings are preserved, a full backup is taken first, and the result is written to the update history so you can roll it back from the History tab.
Improved
- The installation wizard now says what the outbound-connection check actually affects. It was labelled as being about downloading remote images, so a missing connection looked like a detail about media - while it is in fact what updates depend on. The check now names updates explicitly, tells you to have the curl extension enabled, and mentions that packages can be applied by hand if it cannot be.
Automatic Updates Are Now On by Default
Improved
- Automatic updates now arrive without being switched on first. The preference used to start in the off position, so a site only ever updated if its owner happened to find the setting - which meant most installations quietly stayed on old versions and never received fixes, security ones included. New and untouched installations now keep themselves current on their own.
- Nothing is expected from your hosting. Updates run off ordinary visitor traffic, so there is no cron job to set up and no server access needed. Each update still goes through the same chain as before: a signed manifest, a checksum, an automatic backup and a rollback you can use if anything looks wrong.
- Your own choice always wins. If you have already set the preference - including turning it off - that setting is left exactly as it is; the new default only applies where nobody has chosen yet. You can change it any time under Updates, and centrally managed installations are unaffected.
Uploading a Logo No Longer Breaks the Settings Page
Improved
- Every file field in Settings - logo, dark logo, footer logo, favicon, touch icon and the social sharing image - now states the largest size this server accepts, and a file over that limit is stopped before it is sent instead of failing halfway.
Fixed
- Uploading a logo could end on a bare "Server Error" page, losing everything else you had just filled in. The upload ran without any protection, so a single failure while processing the image took the whole settings page down with it. The upload is now contained: if it fails, the page stays, the rest of your settings still save, and a message names the field and the reason.
- A failed logo upload used to be silent. The old value was quietly kept and the page reported success, so you could press save repeatedly and never learn that the image had not been accepted. Failures are now reported.
- Image handling no longer assumes the server can write every modern format. On hosting where PHP is built without WebP support, an upload could stop with a fatal error instead of simply falling back - the fallback is now in place.
Update Check Now Works on Hosts That Block URL File Access
Fixed
- "Update check failed - cannot reach the update server" appeared on hosting where everything else worked. The update check was the one place still fetching over PHP's URL file wrapper, which many shared hosts disable for security; every other outbound call in jekcms already used cURL. The check now uses cURL when it is available and only falls back to the old method otherwise, so it works on those hosts.
- The failure no longer hides its cause. The screen now shows what actually happened - the connection error, the HTTP status, or that neither transport is available - together with what to do about it, such as asking the host to enable cURL. Previously the only message was that the server could not be reached, which was impossible to act on.
- A rejected license used to be reported as "up to date". If the update server refused the key, the response was quietly treated as "nothing new", so a site could sit on an old version believing it was current. That case is now reported, and it says to check the key and the registered domain.
- A momentary network glitch no longer locks the screen out of update checks for half a day. The failed result was cached for the full check interval; it is now kept only briefly, so trying again actually retries.
Image Upload Now Tells You the Size Limit Before You Hit It
Improved
- On hosting where the real limit sits in front of PHP - a proxy or web server rule that PHP cannot see - the site owner can now declare the true ceiling with a single setting, and both the on-screen limit and the pre-upload check honour it.
Fixed
- Adding an image inside the editor could fail with nothing but "Connection error", most often with photos straight from a phone. The real cause was size: past a certain point the server stops accepting the request body, and the browser reports that as a network failure. The upload field now shows the largest size this server actually accepts, an oversized image is stopped before it is ever sent, and if the server still refuses one the message says so plainly and tells you to resize the image.
- The upload endpoint now always answers in a format the editor can read. Previously a server-side failure - an out-of-memory during image conversion, for example - produced an error page instead of a proper response, which the editor could only report as a connection problem. Fatal errors and size rejections are now reported as real, readable messages.
- When an upload exceeds the server's total request limit, PHP discards the whole request including the security token, so the upload used to be reported as a security error. The size is now checked first, so the message names the actual reason.
The "Empty Content" AI Error Now Recovers By Itself
Fixed
- Some AI actions failed with "Gemini returned empty content (MAX_TOKENS)". Newer models think before they answer and that reasoning is paid for out of the same budget as the text, so a budget sized for a non-thinking model can run out before a single word is written. The model now gets a floor large enough to reason and still write, whatever the individual feature asked for. If it somehow still happens, the request is automatically retried once with a much larger budget instead of being reported as an error.
- Testing the API key in Settings could fail even though the key and model were perfectly fine. The test asked for a handful of tokens - enough for the word "OK", but not enough for a thinking model to finish reasoning first - so the test reported a failure that content generation never had. The test now asks for a realistic budget.
- When a model rejects the request to switch reasoning off, the retry no longer reuses the smaller budget that was chosen on the assumption that reasoning was disabled - which was itself a way to arrive at an empty response.
Long AI Generations No Longer Time Out: No More 504s, No More Missing Articles
Fixed
- Generating a draft on the AI Draft screen often failed with a "504 Gateway Time-out", seemingly at random. The cause was a hard limit on the hosting side: a web server cuts a request off if no data reaches the browser for about 55 seconds, and a real article takes considerably longer than that to write - measured between 42 and 104 seconds, so a large share of generations were over the line. The work was actually finishing on the server; only the connection had already been closed. The connection is now kept alive while the model writes, so the result arrives however long it takes. Shortening the wait would have been the wrong fix - it would have killed generations that were about to succeed.
- Asking the Content Wizard for five articles could leave you with three. Each article is generated in its own request, but when one needed a second attempt the retry ran inside that same request and pushed it past the server's cut-off point. The browser then saw a broken response and counted a perfectly good article as an error. Those requests now survive, and the retry timings were rebuilt around how long generation actually takes instead of an assumed limit.
- The AI Draft screen no longer freezes on a blank page while it works. Generation runs in the background and the button shows a live counter, so you can see it is still working instead of guessing whether the page has hung.
- Some AI features returned "empty content" and stopped. Newer Gemini models think before they answer, and that reasoning is paid for out of the same output budget as the text - but the budget still defaulted to a value from before those models existed, and the highest value the settings page allowed could be consumed by the reasoning alone, leaving nothing for the article. Thinking models now get a budget large enough to reason and still write, and the ceiling in Settings has been raised accordingly.
AI Images Plugin Hardened: OpenRouter Fixed, Response Limits, No More Duplicate Runs
Security
- Image responses had no size limit. A broken or hostile endpoint could return an arbitrarily large body and exhaust the server's memory before anything checked it. Responses are now capped at 24 MB and an oversized transfer is cut off immediately.
- Generated bytes are now validated in memory before anything is written to disk, and the file extension comes from the real content rather than the type the provider claimed. Previously the data was written first and inspected afterwards, so non-image content briefly existed on disk under an image name.
- Error messages from the image service are scrubbed of secrets before they reach the admin screen or the log: API keys, OpenRouter keys and stored ciphertext are now masked.
- TLS verification, redirect following and connection limits are set explicitly on every image request instead of relying on server defaults, and redirects are refused so a response cannot be pulled from an unexpected host.
Improved
- A temporary "high demand" response from the image service is retried briefly instead of being reported as a failed image, matching how text generation already behaves.
Fixed
- Choosing OpenRouter as the image provider could never work. The settings screen stores that API key encrypted, but the generator read it back without decrypting, so the encrypted value itself was sent as the key - every request failed, and the stored ciphertext was handed to a third party in the process. The key is now decrypted on read, and an unresolvable value is never sent at all.
- Publishing the same post twice in quick succession - a double click, a manual publish racing the scheduler, an automation retry - ran image generation twice and produced duplicate images while spending the API quota twice. A short-lived lock now lets only one run work on a post at a time, and a stale lock is taken over automatically so a crashed run cannot block the post forever.
- An aborted download could be treated as a real response. When a transfer failed midway the partial body was returned alongside the error, and the caller only checked for outright failure - so truncated data reached the image parser. A transfer error now always means no response.
Security Fix in Imported Links, and Image Fields Understood From Every AI
Security
- Markdown link conversion in imported content is now strictly validated: only http, https, mailto, tel and same-site addresses are allowed, both the address and the label are escaped, and attempts to disguise the scheme are ignored. The converted output also passes through the content filter a second time as a backstop. Legitimate links, YouTube and Vimeo embeds, tables and code blocks are unaffected.
- Content sent straight to the API could publish a literal `[IMAGE: …]` marker. Those markers only mean something inside the publishing queue, where they are replaced with real images; on the direct API path nothing resolved them and they appeared on the page. They are now stripped on that path.
Improved
- Image fields are now understood no matter which AI wrote the JSON. Every assistant names things differently - `imagePrompt` or `image_prompt` or just `prompt` or `description`; `cover`, `hero` or `featured`; `afterH2`, `after` or `section` - and anything unrecognised was silently dropped, leaving articles with no prompts. The importer now reads all of these, accepts an images object keyed by slot as well as a plain list, and even a bare list of prompt strings, which it aligns to the image markers in the article. Verified against ten different shapes: every one yields the same clean result.
- The instructions that ask an AI for image prompts now demand a prompt that works unchanged in any generator - Midjourney, DALL-E, Stable Diffusion, Nano Banana, Firefly. Tool-specific syntax such as `--ar` or `::weights` is explicitly banned because it breaks every other tool, and the prompt must name subject, setting, lighting, framing and mood in 25-60 words.
The Image Prompts the Wizard Writes Are Now Actually Shown
Fixed
- The Content Wizard writes a ready image-generation prompt for every cover, in-content and Pinterest image - and there was no way to read any of them. The queue had a window built for exactly this, but the button that opens it had been removed as "redundant" while the window itself stayed, so the prompts were unreachable from anywhere in the admin. The button is back on every item that has an image plan, with a badge showing how many prompts it holds.
- The wizard's final step now lists every prompt it just produced, grouped per article, each with the exact filename to save the generated image under. There are copy buttons per prompt, a copy-all button, and a download-as-text button for taking the whole set into another tool. The wizard had been promising this since step 3 ("the final step explains exactly what to do") without delivering it.
- The queue preview window showed the article and, once images were matched, the images - but never the prompts. It now lists them under the content with a mark showing which ones already have an image and which are still waiting.
Content From Any AI Now Renders Properly, and the AI SEO Panel Tells You What To Fix
Improved
- The AI panel in the post editor's SEO tab was a flat list of observations. It now opens with a score bar and a plain verdict ("fix before publishing", "ready to publish"), followed by a ranked "do these first" list, then ready-to-use text you can put straight into the post: two title options, a meta description, a rewritten opening paragraph and the headings the article is missing. Title and meta apply to their fields with one click; the rest copies.
- Each finding now quotes the sentence it is about, verbatim from your post, and carries an impact and effort label so you can tell a five-minute fix from a rewrite. Quotes are checked against the actual text before display - a paraphrased or invented one is dropped rather than shown. Findings are ordered problems-first, highest impact first.
- A cut-off AI response used to fail with "returned non-JSON despite schema", which said nothing about the cause. It now names the real problem - the response ran out of token budget - and the SEO analysis budget was raised so it stops happening.
Fixed
- Content written by one AI and pasted or imported into jekcms could reach the site with raw `###` markers and text running together in one unbroken block. Every model writes differently - some produce Markdown, some HTML, most a mix of both - and mixed content was passed through untouched: the HTML parts rendered, everything between them did not. The converter now keeps the HTML exactly as it is and converts the Markdown islands sitting between it, so headings, lists, tables, quotes and paragraphs come out right no matter which assistant wrote them. Verified against pure Markdown, pure HTML, deliberately mixed and unmarked plain prose.
- Inline markers left inside HTML paragraphs - `**bold**`, `[text](link)`, backtick code - were printed literally on the page. They are now converted wherever they appear in text, while anything inside a code block is left untouched.
- Content sent through the public API or an automation was never converted at all: only the publishing queue did that. A Markdown body posted from n8n or a script published with its markers intact. The API now runs the same conversion.
- AI Draft produced thin articles - roughly 350 words when 1000-1500 was selected. Length is now requested the way models actually follow, as a paragraph budget per section, and the same quality and formatting rules the Content Wizard uses apply here too. Measured after the change: 1185-1733 words, each draft carrying a table, both list types, bolded terms and a callout, with no oversized paragraphs.
- AI Draft showed an API error on the first attempt and worked on the second. A single failed call now retries quietly with spacing between tries, and an error is only shown when generation genuinely could not complete. Transient "high demand" responses from the provider are also retried instead of being surfaced raw.
Hotfix: API Settings Page Stopped Halfway, and the Key Row Now Shows What It Is Doing
Improved
- The Gemini key rows were cramped: the enable checkbox, Test and × were pushed against the right edge with the key field stretched across the rest. Each row is now a bounded card with its controls grouped together and room to breathe, and it stacks cleanly on narrow screens.
Fixed
- Settings → API stopped rendering halfway through in 2.65.51: everything from the AI model selector down - the model list itself, the quota fields, the privacy options and the Save button - was missing, and the model dropdown appeared empty. A helper introduced with the new model list did not exist under that name, so PHP aborted the page at that exact point. Introduced in 2.65.51 and fixed here; no data was affected, only the page output.
- Removing a Gemini API key with × gave no visible feedback when it was the only key left. The saved key is shown as a masked placeholder rather than a value, so clearing it changed nothing you could see - it looked like the button did nothing. The row is now dimmed and struck through, the field reads "key will be deleted", the explanation appears full width instead of squeezed into the label column, and an Undo button restores the key if you clicked by mistake. The same explanation, and Undo, now also appear when one of several keys is removed.
Newer AI Models, and Generated Articles That Actually Look Like Articles
Improved
- The AI now runs on Google's current generation of models instead of the 2.5 family. The default for writing is Gemini 3.6 Flash, chosen on measured reliability rather than version number: asked for a full 1200-1800 word Turkish article, the old default returned usable output in two runs out of three, the new one in three out of three. That single change is what fixes the complaint that selecting five articles produced only four - a five-article run now completes five for five. Image generation moves to Nano Banana 2, and the model list in Settings has been rebuilt from models verified to answer, so a retired name can no longer sit in the menu.
- Articles generated by the Content Wizard were arriving as unbroken walls of text: no tables, no lists, no sub-headings, nothing emphasized. The site has always rendered all of that - the instructions simply never asked for it. They now require short paragraphs, sub-headings, at least one comparison table, bulleted and numbered lists, bolded key terms, a practical callout and a closing takeaway list. Measured across generated articles: paragraphs over 80 words dropped from routine to zero, and every article now carries a table, roughly a dozen list items and around ten highlighted terms.
- Generated articles were also coming in short - around 900 words when 1200-1800 was requested. Length is now requested in a form models follow accurately, as a paragraph budget per section rather than a total word count, which brings articles back inside the range you asked for.
- The model you pick in Settings now actually drives content generation. Until now that choice only affected SEO analysis; the writing path ignored it and always used a fixed model, so changing it appeared to do nothing.
Fixed
- The one-sentence visual brief that guides every AI image was being cut off after about two words. Its token budget left no room once the model's internal reasoning took its share, so a brief meant to describe a full scene arrived as a fragment - and every generated image was drawn from that fragment. Briefs now come through complete, around thirty-five words, which is the difference between a described scene and a guess.
- A model that Google retires no longer takes the site's AI features down with it. Gemini 2.5 Pro was offered in the Settings menu and now answers 404; any site left on it had every AI feature failing with no visible cause. Retired names are migrated on update, and if a configured model turns out to be unavailable - retired, or not included in your API key's tier - the request falls back to a working model instead of failing.
- Newer models reject the request we send to disable internal reasoning, and reply only with "invalid argument" without naming the field. Left alone, upgrading the model would have silently killed SEO analysis, content generation and image briefs at once. Each path now recognizes the refusal, retries without that setting and remembers the result per model.
Automation Overhaul: Queue Publishing Unblocked, Bearer Auth Fixed, Imported Content Sanitized
Security
- Content arriving through an automation channel is now sanitized before it can be published: imports, the Content Wizard and the public API strip script-capable markup on the way in, while keeping everything an article legitimately uses - headings, lists, tables, images, links, code blocks and video embeds from known providers. Content you write yourself in the editor is unchanged.
Fixed
- Articles produced by the Content Wizard could not be published at all: the quality gate inspected the raw queued text and rejected every item for containing an unresolved image marker - even though publishing removes those markers moments later, so nothing could ever leak. In testing, six of six generated articles were blocked; with the gate now judging the text that will actually be published, six of six publish cleanly and no marker reaches the site. This affected every wizard and JSON import that had not matched images by hand.
- API requests authenticated with "Authorization: Bearer
" were rejected with 401 even when the key was valid, because most Apache/CGI setups do not hand that header to PHP - while the admin's own API Keys screen recommends exactly this method and it is the default in n8n. The key is now read from every source the server may expose, and the site config passes the header through. X-API-Key keeps working unchanged. - A malformed JSON body sent to the API produced a bare "Internal error" 500. Bad JSON now returns 400 with the parser's reason, and a create request missing title or content returns 400 naming the fields - so an automation shows you what to fix instead of a dead end.
- JSON import crashed with a 500 when a field arrived as an array or object instead of text (a hand-edited file, a mis-mapped automation), and when the articles wrapper was an object rather than a list. Both shapes are now accepted or skipped cleanly, with the reason reported per article.
Content Generation Is Around Four Times Faster, and Stop Now Works Instantly
Fixed
- Generation in the Content Wizard could sit for a long time and then end with a network error. Two causes, both fixed: Gemini 2.5 models spend invisible reasoning tokens from the same output budget as the text, which made every article slower and occasionally truncated it; reasoning is now switched off for content generation, exactly as the SEO analyzer already did. And a single request now stays inside a strict time budget - the automatic retry only runs when there is time left for it, so a request can no longer outlive the server's limit and leave the browser with a dropped connection. In testing, one article went from about 25-60 seconds to 8-12 seconds.
- The Stop button did nothing until the article in progress finished, which could take a minute. It now cancels the running request immediately, shows "Stopping…", and the interrupted item is no longer listed as an error.
- During generation the screen showed no sign of activity. Each article now displays a live counter ("generating #2 · 14 s"), so a long run never looks frozen, and a genuine connection failure now says so in plain language instead of just "network error".
Cleaner Installer Packages: Build-Machine Runtime Files Are Excluded
Fixed
- The installer packages could include runtime files produced on the machine that built them - session files under storage/ and images under uploads/. A fresh install therefore started with unrelated media in its library, and session files had no business travelling with a package at all. Packaging now ships the folders (so permissions and protection rules stay intact) without their runtime contents, and skips stray temporary files in the project root. Your installed sites are unaffected; this only changes what a new download contains.
Get your site live
The setup wizard gets a site live in about 30 minutes. See the prices and the free edition.
View Pricing- Setup and live in 30 minutes
- 15 ready-made themes
- AVIF/WebP image optimization
- Automatic SEO - Sitemap, Schema.org
- Cookieless built-in analytics (ZeroTrack)