Skip to content

v1.3.4: S3 settings filled in, ready-to-publish images, a presentable look

Choose a tag to compare

@iMathieuB iMathieuB released this 22 Oct 00:15
· 8 commits to main since this release

Added

  • set_s3_deployment: fills Publii's "S3 compatible storage" server settings, all but the two keys, so the site owner only pastes the Access ID and the Secret key. It takes website_url, endpoint (without the bucket), bucket and region (default auto), and writes the values Publii itself writes for Cloudflare R2: domain, deployment.protocol s3, and under deployment.s3 customProvider true, provider custom, endpoint, bucket, an empty region and customRegion. These were read from a site saved in Publii 0.48.1 and one saved in 0.47.6 on 2026-10-21, with the same result in both. Prefix, ACL and the Cache-Control headers are left to Publii's defaults. The keys are refused under any of their usual names, keys already filled are kept, and a site set to another server type is refused. Asked for while preparing a video demonstration: the agent had created the bucket and knew every value but the keys, and the owner was retyping them by hand.
  • The site-publii-cloudflare skill uses it: once the bucket, its domain and the rewrite rule are in place, the agent fills the server settings (step 2.5), and the person creates the R2 token in the dashboard and pastes the two keys (step 2.6). The full table stays as the way to do it with an older toolkit.
  • The site-publii-cloudflare skill proposes a hero image for the home page, for the person to approve: what it shows and why, its format, the alt text, and a prompt to paste in the person's own image generator (or keywords for a free photo library). The agent does not drive an image generator in the browser on the person's behalf, since such services often forbid it (OpenAI's terms rule out "automatically or programmatically extract data or Output"). The approved image goes in with add_media as the page's featured image, which the default theme shows as the hero, and the toolkit makes its smaller copies (below).
  • add_media makes the theme's smaller copies of a post image, so the site can be published without a trip to Publii's "Regenerate thumbnails". Publii writes a copy per width the theme declares when someone adds an image in the app, and the theme's srcset points at them; an image copied in by the toolkit had none, so the srcset pointed at missing files. New module images.py reads the widths from the theme's config.json (files.responsiveImages, featuredImages for a featured image, contentImages otherwise) and the quality from the site settings, and writes responsive/<name>-<size> with the height rounded from the ratio and nothing enlarged. On 2026-10-21, for the same 2752 x 1536 photo, Publii 0.48.1 and the toolkit gave the same six names and the same dimensions, and file sizes within 3 %. The copies are staged in the same transaction as the image; a copy already on disk (Publii's own) is kept; sizes with a fixed height (crops) are left to Publii and listed. Needs the new optional images extra (Pillow); without it, the image goes in as before and responsive.note says why no copies were made. GIF, SVG, logos and sites with WebP conversion turned on get no copies.
  • set_theme_style: a presentable default look. It sets the theme's primary colour, colour scheme, fonts and footer text, each checked against the options the active theme declares, and with menu_style: "pro" adds a menu style for Publii's default theme: a line under the header, bolder entries underlined in the primary colour on hover and on the current page, and the last entry as a rounded button. The style is a block between markers in input/config/custom-css.css (the file of Publii's Tools, Custom CSS), rewritten on each call and removed with "none"; the rest of the file is kept. A primary colour too light for white text (under 3:1) is refused. PubliiTransaction gains set_custom_css, staged and swapped after the commit like the JSON files. Checked by rendering the demonstration site's home page with the block in headless Chrome.
  • Skills: site-publii-cloudflare now reads a site information sheet (fiche_site.md or similar) before writing and asks only what it leaves open, in one message, with announced defaults (visual editor, no cookie banner without trackers, the only logo in the folder); tells the person up front that the app may ask for permissions along the way; uses Cloudflare's MCP server first and the browser only for what the API cannot do, opening the right page itself; for the R2 token, fills in the creation page (name, Object Read & Write, the one bucket) for the person to click Create, then stops reading or capturing the page until the keys are pasted in Publii; and proposes a look with set_theme_style (colour from the logo, light scheme for a dark logo, theme fonts, footer text, the menu style). formulaire-contact-cloudflare warns that the Claude app's automatic permission mode can hold the Turnstile widget, the Worker and its route until the person gives explicit consent in the conversation (seen in a rehearsal on 2026-10-21 and first blamed on Cloudflare), asks for that consent in one message before creating them, and prefers the MCP server for Email Routing and Turnstile.
  • get_site_settings now has a deployment summary: protocol, website address and, for S3, endpoint, bucket, region and keys_set, a yes or no that never carries a key.

Fixed

  • site-publii-cloudflare skill: connecting Cloudflare from the Code tab of the Claude desktop app. The skill told the agent to have the person add Cloudflare's MCP server as a connector. On 2026-10-21 (desktop app 3.1623.1, Claude Code 2.1.304), a custom mcp.cloudflare.com connector added and authorized in claude.ai never reached a Code tab session, even a new one. The skill now checks the server's state and, when it is missing, adds it at user scope with claude mcp add --transport http --scope user cloudflare https://mcp.cloudflare.com/mcp (the bundled claude.exe lives under %APPDATA%\Claude\claude-code\, outside the PATH). The person then signs in with /mcp. It also warns that the older "Cloudflare Developer Platform" connector, which Cloudflare has deprecated, has no tools for bucket domains or rules, says that Wrangler cannot set the rewrite rule, and asks the agent to offer before driving the Cloudflare dashboard in the browser instead of the server.
  • The R2 activation step now gives the dashboard labels read on 2026-10-20, in place of a placeholder.
  • formulaire-contact-cloudflare: the consent checkbox was invisible on Publii's default theme. "Simple" hides native checkboxes (opacity:0; position:absolute) and draws its own in the label that follows (input[type=checkbox]+label:before). The form fragment put the checkbox inside its label, so no box was drawn: the field could still be ticked by clicking the text, but nobody could see it, and without it the Worker refuses the message. The fragment now puts the checkbox first and its <label for="consentement"> right after, which also renders a normal checkbox on themes that do not restyle it. Found on 2026-10-21 while rehearsing the demonstration.