Jump to content

All Activity

This stream auto-updates

  1. Today
  2. A Jumplinks successor would be awesome…
  3. Yesterday
  4. ryan

    A brand new day

    @Peter Knight Yes, the monitors are at an angle so that whether I'm looking at the left one or the right one, they are always directly in front of my line of sight with no angle. I think it looks more angled than it actually is because I used my phone's 0.5 wide angle lens, which is also why the coffee mug looks a bit stretched.
  5. Hi @tcnet I have a fix request for Login Fail Notifier 1.0.4: fix Undefined array key "SERVER_NAME" under CLI getDefaultData() reads $_SERVER['SERVER_NAME'] unconditionally, and since the module is autoload, __construct() calls it on every bootstrap. On a web request that key always exists, but under CLI (php index.php …) there's no request, so it's undefined, hence I get a lot of PHP Warnings: Undefined array key "SERVER_NAME" on every CLI run. With display_errors on it also lands on stdout and breaks tools that parse CLI output (e.g. JSON). Fix for line 79: 'notification_subject' => 'Failed login attempt at '.($_SERVER['SERVER_NAME'] ?? ''), I applied that fix to the module on my sites, but could you please also apply it? Thanks in advance!
  6. Hi @eutervogel! I just wanted to tell you that I spent quite some time in the demo shop, testing everything out, and I am pretty impressed with the work you've done! Of course I lack the experience of Stefanowitsch in this matter, but I ckecked ot all the other shops solutions for PW and all of them are not suited for EU use. This is something I could work with and/or suggest to a client. In the past I had to refuse all requests for a shop... If you are short of testers? I am more than willing to help! Bernd
  7. Stunning work @maximus How the preorder works in digital products? Is the buyer receives automatically an email with a download link during the release date of the product? Also, can we create and integrate more payment methods?
  8. Thank you both, @elabx, yes should be disappear soon... 😉
  9. I'm using PW 3.0.255 but I'm not getting the "open:wire" message but it seems it has been fixed on PW 3.0.258. EDIT: It happens only with PHP 8.4.
  10. Related? https://github.com/processwire/processwire-issues/issues/2203
  11. This is probably triggered from a module you have installed.
  12. Hi @markus-th I'm glad I saw this as I was just recently looking for something similar. Thanks for making it. WIll check it out soon.Will
  13. Thanks Peter. Yes, that is a very good point. Mercato currently supports digital downloads, download links, limits, expiry, and order-linked access, but license key management is not included in the first public testing release yet. It is definitely something I am considering for digital products, especially for software/plugins/templates where the download itself is only one part of the purchase. The shape I have in mind is something like: generate or assign license keys after payment store license keys against the order/customer/product show them on the public receipt/order status page expose hooks so developers can provide their own key generator optionally add a small validation API later I would like to keep this flexible rather than build it around one licensing model only. So short answer: not in 1.0.0 yet, but yes, it fits the direction of Mercato and I would like to support it.
  14. Hi @marie.mdna Thanks for your feedback and the great suggestion! I can see the need for group bookings (like workshops or classes where multiple people join one slot). However, implementing this directly into WireBooking would be quite difficult. The module's core architecture and database structure are designed for single-appointment bookings (one slot = one person). Adding group capabilities would require a major rewrite of the booking logic and slot validation. I think this would actually make an excellent idea for a separate, dedicated module (e.g., WireGroupBooking or WireEvents), as the requirements for managing capacities, waiting lists, and group check-ins are quite different from a lightweight appointment scheduler. I will definitely keep it in mind for future ideas, but for now, WireBooking will focus on staying lightweight and tailored for 1:1 appointments. Best regards, Markus
  15. This is such an interesting module, love that it is GDPR compliant 🙂 I was wondering, did you consider group booking? Such as day long events with a maximum of participants/day/event?
  16. I stand corrected. Module versions are not tracking anymore.
  17. Congrats Maximus. Always a great feeling to solve your own problems. I didn't see a mention of license keys, but is that something you are considering supporting for digital downloads?
  18. Hi, i am just curious: Why PW shows a "open:wire" message on login and what does it mean? PW 3.0.255.
  19. Thank you so much for your kind and thoughtful feedback! It really means a lot, especially coming from someone with your experience in both ProcessWire and professional e-commerce. The main reason I started developing this shop system was exactly because I felt there was a gap in the ProcessWire ecosystem. I also spent some time looking at PWCommerce, but as you said, the documentation made it very difficult to work with. I also ran into issues with commercial rounding quite early on, and even after quite a bit of tinkering I couldn't really get it to a point where I'd feel comfortable using it for the German market. You're absolutely right about the long term challenge. Building the shop is one thing, but keeping it up to date with changing legal requirements, security updates and everything else that comes with e commerce is probably the biggest task. That's definitely something I'm aware of, and I'll do my best to keep the project actively maintained. Development is still moving forward. I actually added customer accounts to the demo shop just a few minutes ago, so it's slowly growing feature by feature. Thanks again for taking the time to write such detailed feedback. Comments like yours are really motivating and reassure me that building this for the ProcessWire community was the right decision.
  20. Hi @eutervogel! I am extremely surprised and impressed. This shop "module" basically came out of nowhere and solves a huge "black hole" in the ProcessWire community: A functional, up-to date and all-in-one shop solution. I made a shop with Padloper (Version 1) years ago which was one of my first PW projects ever. And in my main job I am working for one of germanys biggest e-commerce shops. Coming that way I now what immense work setting up, developing and not least maintaining an online shop is nowadays. You have tons or regularities that you have to take care of and each year something is added. For example: Last year all bigger online shops had to be be overworked due to the German Accessibility Improvement Act now the latest "addition" was the integration of the "electronic cancellation button". If you offer a shop solution for a client based on an existing system or "custom made" - you have to be in constant awareness of the legal changes and act immediately. Then you have to design the landing page, category pages, product pages, the checkout pages, search pages and the whole customer backend. Not to mention many many e-mail templates. Because of that the last shop that I set up for a client was actually a Shopify solution. That still was a ton of work, especially if you consider the countless hours for reading the developer docs and becoming familiar with the Shopify CLI and the whole template/development system (and so on!). So it's nice to see that there is a PW alternative now. I like the fact that everything is integrated and the documentation seems to be extremely well planned. I can remember that there was another shop module for PW around that looked promising but offered little to no documentation at all. What a bummer.
  21. WireWall 1.6.0 Released: Traffic History, AI-Ready Logs, and Dashboard Redesign Hi everyone, I’ve released WireWall 1.6.0, a new update for the ProcessWire firewall/security module. This release focuses on better traffic visibility, AI-assisted analysis, and a cleaner admin dashboard. What’s new AI-friendly traffic history WireWall can now save public request history as daily JSONL files: /site/assets/WireWall/traffic/traffic-YYYY-MM-DD.jsonl Each row contains structured request data such as: time allowed / blocked status block reason IP country city / region when available ASN method URL path and query referer User-Agent selected request headers This is separate from the normal ProcessWire log and is intended for later traffic analysis, including feeding recent traffic into AI tools. New setting A new option was added: Save Traffic History It is enabled by default and can be managed from the WireWall module settings. Dashboard redesign The Admin > Setup > WireWall dashboard has been redesigned with: clearer status header protection/logging indicators improved KPI cards better active bans view cleaner top reasons/countries/IPs sections more readable recent events table traffic history status and path display Agent-readable documentation This release also adds AGENTS.md, describing how AI agents and Olivia-style assistants should safely work with the module, including configuration keys, safe/risky operations, and website blueprint guidance. Version Current version: 1.6.0 Release: https://github.com/mxmsmnv/WireWall/releases/tag/v1.6.0 Repository: https://github.com/mxmsmnv/WireWall Feedback, bug reports, and configuration ideas are very welcome.
  22. Hi everyone, I’ve released a new ProcessWire module: Oidc. Oidc adds lightweight OAuth 2.0 and OpenID Connect login to ProcessWire sites. It is meant for projects that need social login or company SSO without a full front-end account-management suite. Repository: https://github.com/mxmsmnv/Oidc What it does Adds OAuth/OIDC login buttons to ProcessWire templates Supports Google, GitHub, LinkedIn, Microsoft, Yandex and Yahoo out of the box Supports custom OIDC providers via discovery URL Works with providers such as Okta, Auth0, Keycloak, authentik, Azure AD and Dex Handles callbacks automatically on frontend pages Supports auto-registration of new ProcessWire users Preserves return URLs through the login flow Includes silent mode for SSO-only sites and intranets Provides hooks for identity resolution, login, registration and provider definitions Verifies OIDC id_token claims with nonce, issuer, audience, expiry and RS256/JWKS checks when available Basic usage After installing and configuring providers, render login buttons in a template: $oidc = $modules->get('Oidc'); echo $oidc->renderButtons(); The page that renders the buttons is also the callback page. Set that URL in the module settings and register the same URL in your OAuth/OIDC provider app. Example use cases Add “Continue with Google” or “Continue with GitHub” to a member area Use Okta/Auth0/Keycloak for company SSO Protect an intranet or private section with silent SSO Auto-create ProcessWire users after successful provider login Add custom rules through hooks, for example restricting registration to a company email domain Documentation The README gives the overview, and the repository includes detailed documentation and agent-readable integration notes: README: https://github.com/mxmsmnv/Oidc Documentation: https://github.com/mxmsmnv/Oidc/blob/main/DOCUMENTATION.md Agent guide: https://github.com/mxmsmnv/Oidc/blob/main/AGENTS.md Requirements ProcessWire 3.0.200+ PHP 8.1+ curl openssl The module is MIT licensed. Feedback, bug reports and suggestions are very welcome.
      • 4
      • Like
  23. Last week
  24. Hey @maximus, great work as always, I’m definitely going to give this module a try! Thanks!
  25. How KeyHelp for ProcessWire was built: from a phone idea to a tested module I have been building modules for ProcessWire for a long time, but this one had a slightly different origin story. KeyHelp started not as a carefully planned “module project”, but as a practical question while I was away from my computer: What if ProcessWire could manage a hosting panel directly from the admin area? The initial research happened on my phone. I was looking at how other systems handle hosting integrations, especially WordPress. WordPress has a huge ecosystem around this: hosting panels, one-click installers, backup plugins, deployment tools, billing integrations, and managed hosting workflows. Panels like HestiaCP, FastPanel, CyberPanel and CloudPanel all have their own approaches to WordPress automation. That made me think about ProcessWire. ProcessWire is a very strong developer CMS, and I have built modules for it for years, but hosting operations usually still live outside the CMS: domain setup, databases, SSL, PHP versions, DNS records, FTP accounts and cron jobs. For editors and site owners, that means switching between the CMS and the hosting panel. For developers, it means repeating small operational tasks that could probably live closer to the project. The research then moved toward German hosting panels. I used Google Gemini on my phone to explore that landscape. The conversation started around hosting panel integrations, WordPress automation, CloudPanel, CLI/API wrappers and then German panels specifically. KeyHelp stood out because it is widely used in the German hosting world and has a REST API. I also looked at the broader German ecosystem: LiveConfig, Froxlor, older i-MSCP setups, and custom panels from German hosts like All-Inkl and Mittwald. That context mattered, because KeyHelp is not just “another control panel”. It belongs to a hosting culture where stability, server control and GDPR-friendly infrastructure matter. After that research, I moved to Claude on my phone for the first implementation attempt. The first prompt was essentially: Need build integration module with KeyHelp web panel for administration Webserver inside PW Then I defined the first scope: Domains: create, delete, list Clients / users Databases Email accounts SSL / Let’s Encrypt PHP settings DNS records A ProcessWire admin dashboard with server status, domains and database widgets API access through a KeyHelp admin key Claude produced the first module draft. It created the initial structure with a module file, assets, views, dashboard, domain list, create forms, SSL/PHP/DNS screens, client views, database screens and basic cache/API handling. But the first version was too monolithic. So the next correction was immediate: Do not make it a monolith. Put the settings into the module. Where is the Process module? That changed the architecture. The module was split into: KeyHelp.module.php for configuration, API client, cache, debug logging and module settings ProcessKeyHelp.module.php for the ProcessWire admin UI later, multiple traits under src/ProcessKeyHelp/ views under views/ CSS/JS and Remix Icon SVG assets under assets/ That was the first important turn: not just “make something that works”, but make it feel like a real ProcessWire module. Claude also helped shape the first permission model. The early version was basically superuser-only, but it became clear that a real module needed ProcessWire permissions. The model became: keyhelp-view keyhelp-edit keyhelp-delete keyhelp-server So even before the heavy testing phase, the direction was already moving from “prototype” to “proper ProcessWire admin module”. When I got home, I saved the generated module, opened the module folder in Codex, and the real work began. At that point I also decided to buy a fresh Hetzner test server specifically for this module. That turned into its own small side quest: I had to create a Hetzner account, go through identity verification, take a photo of my government ID / driver license, take a selfie, submit everything, and wait for approval before I could even create the server. Only after that could I create the VPS, install KeyHelp, connect it to a real domain, create an API key and start testing the ProcessWire module against a real hosting panel. The server uptime later showed: 17h 12m That became a nice marker of the whole process. This was not just a fake UI built against assumptions. There was a real KeyHelp panel, a real API key, a real ProcessWire installation, and a real remote server used specifically to test the integration properly. The first real problem appeared immediately in ProcessWire: Cannot reach KeyHelp API: cURL: Could not resolve host: key.smnv.org That led to the first practical improvements in Codex: API URL handling; API access notes; SSL verification settings; DNS resolution override; better module configuration hints; safer debug logging. The KeyHelp panel showed API version 2.14, so the implementation was aligned with the KeyHelp REST API docs. From there, the module became a loop of implementation, browser testing, corrections and UI review. This was the main Codex phase. I had Chrome open with two real things side by side: the KeyHelp panel on the test server; the ProcessWire admin module running on my site. Codex was editing the module files locally, and I was checking the result in the browser. I asked it to click through pages, inspect forms, open tabs, check GET/POST behavior, test UI states, and compare the result with what I saw. The module was tested in Chrome and in the in-app browser across: dashboard domains domain view SSL tab PHP tab DNS tab clients databases email FTP SSL certificates cron jobs installer server page module settings A lot of the work was not glamorous. It was small things that make a module feel real: tabs did not work correctly at one point; buttons had unwanted underlines; Font Awesome icons were jumping because more than one icon set was involved; icons were replaced with Remix Icon SVGs; tables were too custom and started hiding API data; badges were too small; breadcrumbs were inconsistent; some titles and breadcrumbs were not translated; German labels were missing in places; uk-table-small, uk-margin-remove, kh-mono and other styling leftovers had to be removed; dashboard and server screens needed better information layout; module settings needed better UI/UX; slow API pages initially felt frozen, so lazy background loading was added. This is where the human + AI workflow was useful. Codex would implement a change. Then I would look at the browser and say things like: “the tabs are broken” “what happened to the design?” “why is there a big left gap?” “the icons jump” “this table is wrong” “the German version still says Refresh” “this should look like Ichiban” “remove custom table styles” “don’t use Font Awesome” “test this in Chrome” “go through all tabs yourself” Then Codex would inspect the code, patch it, test again, and refine the result. There was also a strong UI direction: the module should not look like a random SaaS dashboard. It should feel like a ProcessWire admin tool. Dense, calm, useful, and close to the Ichiban / AdminThemeUikit style. No decorative landing page, no marketing hero, no unnecessary cards inside cards. The installer became the biggest feature. The goal was: From ProcessWire Admin, choose a KeyHelp domain, choose ProcessWire stable or dev, and let the module install ProcessWire there. That meant the module needed to: resolve the domain document root; support the case where KeyHelp and ProcessWire run on different hosts; support local and SSH remote deployment; download the ProcessWire archive; unpack it; create a KeyHelp database and database user; generate a random admin URL; generate secure credentials; run the ProcessWire CLI installer; adapt Apache configuration for KeyHelp; remove installer files; store credentials securely. At first, the installer assumed the document root was visible locally. That was wrong for real deployments. The KeyHelp panel can be on one server and the ProcessWire admin module on another. So the installer had to learn the difference between local filesystem and remote SSH deployment. That was a very important correction. The module should not only work on my local setup. It should handle the realistic case where the ProcessWire admin site and the KeyHelp hosting server are separate machines. Then came another important question: After ProcessWire is installed, where are the generated credentials stored? The answer became: in a module-managed table, encrypted using the ProcessWire site salt. The domain list now shows a ProcessWire badge when an installation is known, and the domain detail page can show stored admin URL, admin login and database credentials to users with the right permission. There is also a GitHub module installer for already installed ProcessWire sites. It checks whether ProcessWire exists in the target path, downloads a GitHub repository archive, validates PHP syntax, and copies it into /site/modules. The server page also evolved during testing. At first it was too raw. Then it became a proper admin view with: server information; software versions; resource usage; services; server reboot action; links back to KeyHelp where the API does not expose something. A specific note was added because the KeyHelp REST API does not expose start/stop/restart endpoints for individual services. Server-level reboot is available through POST /server/reboot for KeyHelp 26.0+. Debugging support was added too. The module can log sanitized API requests, payloads, responses, cache hits and timings to keyhelp-debug, while redacting sensitive values like API keys, passwords, tokens and secrets. One of the important late-stage changes was performance. Some KeyHelp API calls could take many seconds. At one point Tracy showed pages taking a long time because data was being fetched directly before the admin page rendered. That is bad UX: it makes the admin feel frozen. So the module was changed so slow API-backed pages render an admin shell first, then load data in the background. The user sees that the page is alive, and the data fills in when ready. The module also gained English and German UI support. Since KeyHelp is a German hosting panel, German translation was not just a nice extra. It made sense for the module’s audience. The documentation evolved during the same process: README was rewritten in a release-ready style; German documentation was added; CHANGELOG was made first-release friendly with only an Added section; sponsorship metadata was added; version was set to 100; AGENTS.md was added so future AI agents understand how to work with the module, what not to touch, how the installer works, what API calls exist, and how to test safely. Near the end, the repository was cleaned up: the monolith was split into src/, views/ and assets/; tests were kept local and ignored; unused generated image assets were removed; README was kept version-free; the GitHub branch was recreated using an orphan commit so the public repository starts cleanly with one init commit. The final result is not only a KeyHelp API wrapper. It is a ProcessWire admin integration for a German hosting panel, with a real installer workflow for creating ProcessWire sites on KeyHelp domains. The full path looked roughly like this: I researched hosting integrations and German panels with Google Gemini on my phone. I used Claude on my phone to create the first KeyHelp module prototype. I corrected the architecture so it became a real ProcessWire module pair instead of a monolith. I created a Hetzner account and went through ID/selfie verification. I bought a fresh test server specifically for this module. I installed KeyHelp on the server. I saved the generated module locally. I opened the module folder in Codex. I connected the module to the real KeyHelp API. I tested the UI and API workflows in Chrome. I repeatedly corrected UX, tables, icons, tabs, translations and layouts. I added the ProcessWire installer. I added SSH remote deployment. I added encrypted credential storage. I added GitHub module installation for existing ProcessWire sites. I added lazy loading for slow API pages. I cleaned up README, German docs, CHANGELOG and release metadata. I published the repository as a clean orphan init commit. This is what I found interesting about the process: the AI did not replace testing or product judgment. Gemini helped with research and context. Claude helped create the first prototype. Codex helped turn it into a tested module by repeatedly editing code, running checks, using Chrome, and reacting to very specific feedback from the real UI. The quality came from the loop: build, open in browser, click, notice what feels wrong, fix, test again. The test server uptime, 17h 12m, is a funny detail, but it captures the mood of the whole thing: a fresh server bought just to make sure this module was not theoretical. Repository: https://github.com/mxmsmnv/KeyHelp
  26. Hi everyone, I have released a new ProcessWire module: KeyHelp. KeyHelp is a ProcessWire admin module for working with KeyHelp, a German hosting control panel. It brings common KeyHelp hosting tasks into ProcessWire Admin, and it can also install fresh ProcessWire sites directly on KeyHelp domains. Repository: https://github.com/mxmsmnv/KeyHelp What it does The module adds a dedicated KeyHelp section in ProcessWire Admin where you can: view a hosting dashboard with server status and resource counts; browse and manage domains, clients, databases, email accounts, FTP users, SSL certificates and cron jobs; update per-domain SSL, Let's Encrypt, HTTPS redirect, HSTS, PHP version and DNS records; open KeyHelp database tools / phpMyAdmin links from ProcessWire; view server information, software versions, resources and service status; cache KeyHelp API responses and flush the cache manually; enable sanitized debug logging; use English or German UI text; restrict the module to one KeyHelp client in single-tenant mode. Screenshots ProcessWire installer The installer can create a fresh ProcessWire site on a selected KeyHelp domain. It can: download the stable or dev ProcessWire archive; unpack it into the domain document root; create a KeyHelp database and database user; generate a random admin URL and strong credentials; run the ProcessWire CLI installer; adapt Apache configuration for KeyHelp; store generated credentials encrypted with the ProcessWire site salt; show a ProcessWire badge and credentials on the domain detail page. It supports both local installs and SSH remote installs, so the ProcessWire admin site and the KeyHelp hosting server do not have to be the same machine. There is also a GitHub module installer for already installed ProcessWire sites. It checks the target installation, downloads a GitHub repository archive, validates PHP syntax and copies the module into /site/modules. Requirements ProcessWire 3.0.200+ PHP 8.0+ PHP curl extension KeyHelp REST API access KeyHelp admin API key The module targets KeyHelp API 2.14 and /api/v2 endpoints. Permissions The module adds granular ProcessWire permissions: keyhelp-view keyhelp-edit keyhelp-delete keyhelp-server Superusers always have access. Notes This is the first public release, so feedback is very welcome, especially from anyone using KeyHelp in production or testing ProcessWire deployment workflows. I built it because I wanted to manage hosting operations from inside ProcessWire instead of switching back and forth between the CMS and the hosting panel. The installer is also meant to make it easier to spin up ProcessWire sites on KeyHelp domains. German documentation is included in the repository. Author: Maxim Semenov Website: smnv.org Repository: github.com/mxmsmnv/KeyHelp
  27. Demo storefront screenshots:
  28. Hi everyone, I’m happy to share the first public testing release of Mercato, a ProcessWire-native commerce toolkit. Mercato is not just a “shop template” or a simple cart module. The goal is to provide a flexible commerce layer that works the ProcessWire way: pages, templates, fields, permissions, hooks, and site-level customization. The basic idea is: Your website should not have to become “the shop system”. The shop should become part of your ProcessWire site. Mercato can be used as a full storefront, but it is also designed for custom ProcessWire websites that need commerce features without being forced into a rigid shop structure. What Mercato includes Products as ProcessWire pages Cart and checkout Orders stored as ProcessWire pages Stripe, Mollie, PayPal, bank transfer, and demo payment support Discounts and coupons Inventory handling Preorder and backorder support Digital products and downloads Fulfilment: carrier delivery, store pickup, local delivery Customer records Abandoned checkout recovery tools Refunds and payment operation tracking Webhook/event logs Reports and CSV exports Launch-readiness checklist Public order status and receipt pages Headless/read API surfaces A complete installable demo storefront Demo storefront A fresh install creates a real demo storefront called Arlberg Ceramics. It is not just placeholder content. The demo includes: physical products digital products gift cards product collections product images discounts low-stock products sold-out states preorder/backorder examples checkout policy pages order confirmation pages delivery, pickup, and local delivery scenarios The demo is meant to help developers test the full commerce flow immediately after installation. Existing sites Mercato is designed to add commerce functionality to an existing ProcessWire site without taking over the whole website. It creates Mercato-specific fields, templates, pages, permissions, products, collections, and order storage. It does not remove existing site content. Bundled storefront template files are copied into /site/templates/ only when the target files are missing. Existing template files are not replaced unless template overwrite is explicitly enabled in the module settings. That said, this is a commerce module and it changes the site schema, so please test on a staging copy first and make a backup before installing it on an existing/production site. Current status This is the first public release and should be treated as a testing release. I have tested the installer, demo storefront, checkout flow, admin screens, and basic payment workflows, but I would really appreciate feedback from real ProcessWire projects and different hosting setups. Things I’m especially interested in: installation issues gateway setup issues checkout edge cases admin UX feedback missing hooks or extension points template customization feedback real-world commerce scenarios I have not covered yet Repository GitHub: https://github.com/mxmsmnv/Mercato Requirements ProcessWire 3.0.200+ PHP 8.1+ Final note This is a big personal milestone for me. I have wanted ProcessWire to have a serious, modern commerce foundation for a long time. Mercato is my attempt to build that foundation in a way that respects how ProcessWire developers actually build websites. Feedback, testing, issues, and ideas are very welcome.
  1. Load more activity
×
×
  • Create New...