-
Posts
155 -
Joined
-
Days Won
39
Everything posted by maximus
-
Context Module - AI-Optimized Site Documentation
maximus replied to maximus's topic in Modules/Plugins
Hi everyone, Context 2.0.0 has been released. This is a larger cleanup and stability release focused on making the module more useful for AI-assisted ProcessWire development, while also making the codebase easier to maintain. Highlights Added explicit export format selection: TOON, JSON, CSV TOON-only and JSON-only exports now clean up stale artifacts automatically CLI export, admin export, and auto-update now share the same export pipeline Restored and hardened documented CLI commands: php index.php --context-export php index.php --context-export --toon-only php index.php --context-export --json-only php index.php --context-stats php index.php --context-query ... php index.php --context-eval ... php index.php --context-stdin Added a dedicated context-admin permission Admin actions now require POST + CSRF validation Export path validation was hardened to avoid unsafe targets and symlinks Sample exports now skip fields matching a configurable sensitive-field denylist Dashboard was redesigned for the 2.0 workflow with current export status, CLI commands, configuration overview, and export preview The module internals were split into focused classes under src/ AI workflow The recommended AI workflow is now: php index.php --context-export --toon-only php index.php --context-stats php index.php --context-query templates php index.php --context-query pages "template=your-template, limit=10" Then start with: SKILL.md templates.toon structure.toon README.md TOON remains the recommended format for AI agents because it is much smaller than JSON while preserving the same structure. Notes This release includes a fairly large internal refactor. The main module file is now mostly ProcessWire wiring, routes, settings, and compatibility wrappers. Export logic, dashboard rendering, CLI handling, filesystem safety, serializers, docs generation, and AI gateway code now live in separate src/ classes. Release: https://github.com/mxmsmnv/Context/releases/tag/v2.0.0 Repository: https://github.com/mxmsmnv/Context Feedback, testing, and suggestions are very welcome. -
Hi everyone, Building a package forwarding platform means dealing with phone numbers from dozens of countries. US customers, European recipients, warehouse staff - each expects a different format. Storing a raw string and hoping for the best doesn't work. This fieldtype does it properly. GitHub: https://github.com/mxmsmnv/FieldtypeTel What it does Powered by intl-tel-input v28 - bundled locally, no CDN dependency. Country flag picker with search Stores four formats per number: e164 - +12025550123 - for tel: links and shipping APIs intl - +1 202-555-0123 - for international display national - (202) 555-0123 - for local display country - us - for filtering and selectors echo $page->phone; // (202) 555-0123 echo $page->phone->e164; // +12025550123 echo $page->phone->country; // us // tel: link echo "<a href='tel:{$page->phone->e164}'>{$page->phone}</a>"; // Selector — find all Australian numbers $pages->find("phone.country=au"); Restrict countries, set preferred countries, per-field defaults Auto-format as user types AdminThemeUikit themed - light and dark mode via --pw-* CSS variables Requirements: ProcessWire 3.0.200+, PHP 8.2+ MIT License.
-
- 8
-
-
@markus-th Good catch! That was a formatting bug — PHP was rendering very small values in scientific notation (9.0E-6 kg) instead of human-readable units. Fixed in v1.7.0: the dashboard and DOCX export now auto-scale to µg / mg / g / kg depending on magnitude, so your total will show as e.g. 9 mg instead. Thanks for spotting it! @Peter Knight Love this idea — just shipped it in v1.7.0! Each bar is now colored by the average CO₂/request for that hour: green = Grade A (<100 mg), yellow = B, orange = C, red = D. So when you optimise a heavy page or compress images, the next day's bars literally turn greener. Tooltip also shows avg mg/request and Grade on hover. A/B/C/D legend sits above the chart. Looking forward to hearing how it goes when you try it!
-
Wow!!
-
Agreed — and while we're waiting for the forests to grow back, at least we can measure how much damage our websites are doing. 🌱 Awareness is the first step. Knowing your numbers is what makes the conversation about natural restoration possible in the first place. The module doesn't claim to solve anything, just to measure.
-
Hi everyone, Every web page has a carbon footprint. Most developers have no idea what it is. This module measures it. GitHub: https://github.com/mxmsmnv/PageCarbon What it does Tracks response size, PHP execution time, and peak memory per front-end request, then estimates CO₂ using the Sustainable Web Design Model v4 (Wholegrain Digital, 2024). Results appear in a dashboard under Setup → PageCarbon. Admin dashboard: Per-page ratings: 🟢 A (< 100 mg) / 🟡 B / 🟠 C / 🔴 D (≥ 700 mg) 24-hour hourly CO₂ bar chart Top 50 pages by average CO₂ with exec time, response size, and hit count Real-world analogies - all-time total translated into 12 everyday equivalents: car km driven, espressos brewed, Netflix hours, Google searches, short-haul flights, trees needed for a year, and more DOCX export - zero-dependency, pure PHP via ZipArchive Screenshot: Performance-first architecture: WireCache buffer - metrics accumulate in memory, batch INSERT once per hour (zero per-request DB writes) Bot sampling - only 1-in-N bot requests recorded, human requests always in full 90-day raw retention with permanent hourly aggregates - historical data never lost Frontend API: $pc = $modules->get('PageCarbon'); echo $pc->renderBadge($page); // full card echo $pc->renderBadge($page, 'compact'); // single-line pill $stats = $pc->getStats($page); // avg_co2_mg, rating, hits... The average web page produces ~500 mg CO₂ per view. Most ProcessWire sites do better - now you can prove it.
-
Hi @Krlos, Thank you so much for testing Ichiban and for the kind words. I really appreciate it. You found a real gap there. Ichiban was resolving top-level image fields, but it was not yet following ProFields-style dot notation for nested fields inside Combo/Table/Repeater Matrix fields. I’ve fixed this in v0.1.1-alpha. For a Combo image field, you should now be able to use: field:combo.image or: {combo.image} I also aligned it with the same dot-notation style used in Collections, so nested ProFields paths are supported too, for example: field:blocks.hero.image field:media.property_photos.photos field:prices.*.image For Open Graph images, the resolved image will still go through Ichiban’s normal OG image handling and create the 1200x630 variation when possible. Thanks again for catching this, and also for the very kind note about the recent modules. It means a lot, especially knowing you’re using some of them in production.
-
I would still recommend following the following scenario, at least that's how I did the Job Board, not just everything chaotically, but purposefully in stages. 1. You need to write a module specification, explain the idea, and ask the AI to ask you questions interactively - this will help you open up better. 2. Once the specification is ready, you can start coding. Sometimes you have to bet big, like in a casino. That's what I did with Opus 4.7—the cost of a week's worth of code was $5—meaning I'd burned through the weekly limit. 3. Launching in the environment. Previously, I simply uploaded files, debugged using screenshots - I worked like this for quite a long time, copied the code from the chat window to an FTP file, made an update, and then continued testing. 4. Buy a $99 license for MAMP and specify the folder with files for Claude Code or Codex. 5. Request a technical analysis, preferably cross-analysis using several models—sometimes they can contradict each other. Fix critical bugs. 6. Continue testing. Sometimes, when I don't like the interface, I tell the AI, "Simplify the interface in WireWall or add more data to the Dashboard in Job Board." 7. Manual testing of inputs and checkboxes. However, this can be replaced with Claude Cowork. You just need to describe the task to it and then ask it to generate a report so you can continue making the code work. 8. Sometimes the AI doesn't know what's inside or how the data is stored. You need to install TracyDebugger with Adminer or, alternatively, write a small tool that receives the data and then saves it as JSON so it can debug itself. In general, this simple plan will help you write a good application. I like Processwire for its interactivity and the fact that you can build the architecture of 3-4 full-fledged websites within it. Teams and investors with bloated staffs are no longer needed. Everything can be done solo. Thanks to @ryan for your work, the forum and the people who move this platform forward!
-
I think Opus is a sledgehammer, and Codex is quite an ordinary hammer.
-
Hi, A small but practical module for anyone working with ProFields Repeater Matrix on the frontend. GitHub: https://github.com/mxmsmnv/InputfieldMatrixType The problem Repeater Matrix is great for building flexible content blocks — but when you need to identify item types programmatically, things get messy fast. Types are stored in internal template names like repeater_matrix_123, there's no clean way to get a human-readable type identifier, and extracting structured data from different item types means repetitive code in every template. I ran into this building a gift catalog on e-commerce project — a matrix field with three item types: Box, Handbag, and Bouquet. Each has different fields and pricing. I needed clean type identifiers for frontend rendering and a JSON API for Alpine.js components. What it does FieldtypeMatrixType — a dedicated field for storing type identifiers per matrix item (e.g. box, handbag, bouquet) InputfieldMatrixType — admin UI to configure identifier and display name per type MatrixDataProcessor — PHP class that extracts all matrix item data into a consistent structured array, JSON-ready $processor = new MatrixDataProcessor($page); $items = $processor->getItems('opt'); echo json_encode($items); Each item returns id, type, displayName, price, and a fields array with name/label/type/value — ready for Alpine.js, Vue, or any API endpoint. Supports Text, Textarea, Options, Checkbox, Integer, Float, Page references, and Image fields out of the box. Custom field types via formatValue() override. Requirements: ProcessWire 3.0+, PHP 8.1+, ProFields Repeater Matrix MIT License.
- 1 reply
-
- 10
-
-
I tried adding examples, but it doesn't always work. Sometimes he often doesn't understand what needs to be implemented and how. Sometimes he's pulling hardcode, sometimes something else. I usually write prompt in AI "apply the design system to the module https://github.com/mxmsmnv/pw-design-system" and then it makes a more conscious design. To ensure the design is consistent across both the old and new versions of the theme, you need to create a hardcoded framework like in my Collections module. Then it will look the same across all versions. If you write directly for the new design, some parts won't display in the old one. I've migrated almost all of my websites to the new theme. Clients just need to get used to it, then they'll say it's so cool. I'd also make a colored header module in the admin panel, but that's a whole other story. Design system https://mxmsmnv.github.io/pw-design-system/
-
That's why GitHub Issues exist. 😄
-
Also checked BuiltWith — there are 22,000+ live ProcessWire sites out there. Would love to see Ichiban running on as many of them as possible someday. 🙂
-
Thanks for the kind words, Peter! This actually gave me the push to keep going - after several iterations I had almost given up on building something substantial, because every popular CMS already has mature SEO tooling. I went through Yoast, RankMath, SEOmatic, and a bunch of others, took notes on what worked and what didn't, and tried to bring the best of it to ProcessWire. Still a long way to go, but the foundation is there. Looking forward to seeing SEO NEO when it's ready too - good SEO tooling for ProcessWire benefits everyone!
-
Collections — Airtable-style data management for ProcessWire
maximus replied to maximus's topic in Modules/Plugins
Thanks for the kind words! I have a month's worth of modules, not as big as Collections, Ichiban, or Context, but very useful. Usually, when I run into a problem, I try to solve it right away using a module so that other users can use it in the future. -
Hi everyone, I've been timing my bigger releases with the lunar cycle — new moon for launches, full moon for milestones. Collections shipped on the full moon two weeks ago. Tonight the moon is invisible. The module isn't. 🌑 GitHub: https://github.com/mxmsmnv/Ichiban Why Ichiban? Ichiban (一番) is Japanese for "number one" — fitting for an SEO module whose entire purpose is to help your pages rank first. Why another SEO module? There hasn't been a comprehensive SEO module for ProcessWire for a while. Yoast and RankMath solve this for WordPress — both charge $59–$99/year for the full feature set. Ichiban is MIT, free, and built specifically for ProcessWire. What it does Page field — five-tab editor per page: Meta (Google-style SERP preview), Social (OG + Twitter/X cards), Schema, Sitemap, Advanced. Render with echo $page->seo; or enable auto-injection. Source expressions — resolve field values dynamically: title|truncate:70 field:summary|truncate:160 {splash} Admin sections: Dashboard — battery-style site score, health stats, GSC highlights, indexing issues Bulk Editor — edit all meta titles/descriptions in one table, grouped by Critical/Warnings/Healthy Audit — site-wide SEO rule checks, priority cards, CSV export, hookable rule system Redirects — 301/302/307/410/451, regex rules, hit counts, CSV import/export, auto-redirects on slug change Insights — Google Search Console OAuth, metrics, top pages/queries, countries, devices, URL Inspection scan Backlinks — Moz API snapshots, cached history, links/domains/anchors views Schemas — database-backed Schema.org builder, map properties to PW fields Revisions — tracked SEO field changes with restore Cleanup — remove low-value head tags, block spam crawl queries Migration — SeoMaestro → Ichiban converter (15 fields mapped) Reports — scheduled SEO email reports, DOCX export AI — OpenRouter-backed SEO prompt workspace with Context module integration XML Sitemap — built-in generator with hreflang, image sitemap, LazyCron auto-regeneration IndexNow — one-click key generation and verification robots.txt / llms.txt — dynamic serving (companion to RobotsTxt module) Known alpha limits GSC requires a Google OAuth client setup — not plug-and-play Moz free API quota is very small — refresh intentionally Schema Builder is alpha — test before production Auto head injection can conflict with existing theme SEO tags — use manual echo $page->seo; first SeoMaestro migration is experimental — always backup before running Disable debug mode before production Requirements: ProcessWire 3.0.200+, PHP 8.1+ MIT License — free, no Pro tier, no upsell.
- 8 replies
-
- 16
-
-
Yes, I have a day job, and it's not programming. I work on it mostly in the evenings after work.
-
Hi everyone, Every site I've launched eventually had a database incident — corrupted table, failed migration, bad deploy. Having a reliable backup system that runs automatically and stores offsite is non-negotiable. This module is what I use in production. GitHub: https://github.com/mxmsmnv/ProcessDbBackup What it does: Three independent backup types — Regular, Weekly, Monthly — each with its own LazyCron schedule and retention count Admin home widget — shows status (🟢 OK / 🟡 Outdated / 🔴 No backups) per type with "Create now" buttons Backblaze B2 upload — optional offsite storage after every backup, keep or delete local copy Chunked upload — upload .sql.gz from your computer in 2MB chunks, bypasses upload_max_filesize entirely Streaming restore — reads .gz line-by-line, flat memory usage regardless of dump size Partial restore — select individual tables from a backup Pre-restore auto-backup — safety backup of current DB before any restore Backup integrity verification — gzip check + SQL structure validation Lock file — prevents concurrent backup processes Exclude tables — skip cache, sessions etc. from all backups Storage protected with .htaccess deny-all Backup methods: mysqldump (preferred, InnoDB-safe hot backup) with PHP PDO fallback. Restore via mysql CLI with PHP PDO streaming fallback. Requirements: ProcessWire 3.0+, PHP 8.0+, zlib, PDO. mysqldump/mysql CLI optional but recommended for large databases. MIT License.
-
- 15
-
-
-
It's not possible to upload a profile picture in the forum
maximus replied to David Karich's topic in General Support
You need try couple times. -
GitSync – Keep your (private) modules in sync with GitHub
maximus replied to Mikel's topic in Modules/Plugins
I think if you connect repositories to Codex Cloud, then configure GitSync on the server, it should work in auto-deployment mode. But I haven't checked. @Mikel you are try this chain? -
Hi everyone, I’ve released a new module: ProcessLegalDocs GitHub: https://github.com/mxmsmnv/ProcessLegalDocs ProcessLegalDocs generates legal documents directly from the ProcessWire admin, including: Privacy Policy Terms of Use Cookie Policy Data Processing Agreement CCPA Notice Refund Policy Disclaimer It currently supports 93 jurisdictions and 44 languages, with jurisdiction-aware language selection and document requirements. This is also the first module built on top of my new Context module: https://github.com/mxmsmnv/Context Context acts as the AI/site-analysis base layer. ProcessLegalDocs uses it to understand the site structure, installed modules, fields, pages, and configured AI gateway, then uses that context to generate more relevant legal documents. The module can still work without Context, but in that case it falls back to more generic templates. For best results, Context should be installed and configured with AI. Main features: Generates Markdown legal documents with YAML frontmatter Stores files in /site/assets/legal/ Includes dashboard, preview, download, validation, regenerate, delete, and ZIP export actions Supports many privacy/data protection regimes, including GDPR, UK GDPR, CCPA/CPRA, COPPA, PIPEDA, LGPD, APPI, PIPL, DPDP, PDPA variants, and many US state privacy laws Includes settings for owner/company data, DPO, business audience, data categories, processors, analytics, payments, email/marketing tools, cookies, refunds, subscriptions, review status, and optional ProcessWire page publishing Uses ProcessWire admin UI conventions / AdminThemeUikit Requirements: ProcessWire >= 3.0.255 PHP >= 8.3 Context module optional, but recommended for AI generation Let’s take a look at the module interface: Install: Clone into /site/modules/ProcessLegalDocs/ Refresh modules Install ProcessLegalDocs Open Setup → Legal Docs GitHub: https://github.com/mxmsmnv/ProcessLegalDocs Context module: https://github.com/mxmsmnv/Context This is an early release, so feedback, testing, issue reports, and ideas are very welcome.
- 1 reply
-
- 10
-
-
-
Collections — Airtable-style data management for ProcessWire
maximus replied to maximus's topic in Modules/Plugins
Both issues are fixed in v1.9.3 just released! @jacmaes - the sort direction bug is fixed. Root cause: the default sort direction parameter was always 'asc' (a non-empty string), so the fallback to the collection's configured direction was never reached. Now when no explicit sort is in the URL, both the sort field and direction come from the collection settings. @iank - both your suggestions are implemented, and your code was pretty much used as-is, thanks for that! View icon is now hidden for pages where $page->viewable() returns false Added canAddNew() to the Collection class that checks noParents — hides the Add button when set to "no new pages" or when it's a singleton and a page already exists And thanks to @elabx for the kind words! -
module Fluency - The complete translation enhancement suite for ProcessWire
maximus replied to FireWire's topic in Modules/Plugins
I not owned module. I think not good idea storage 3 files 🙂- 318 replies
-
- 1
-
-
- translation
- language
-
(and 1 more)
Tagged with:
-
This resonates. 20 years in development, still figuring it out honestly. Current reality: Day job 6 days/week, building PW modules in spare time. Not balanced, but intentional - grinding now to create options later. What actually helps: - Seasons, not balance - some months are 80% work, others need to be 80% recovery - Combine categories - coding for fun = leisure + professional growth - One rule: protect sleep and one full day off. Everything else is negotiable - Physical maintenance - injuries taught me this the hard way The AI/tech pressure to "stay relevant" is real, but burnout is worse. Better to have 3 solid productive hours than 8 exhausted ones. What's working for you so far?