<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tomasz</title>
    <description>The latest articles on DEV Community by Tomasz (@wrobeltomasz).</description>
    <link>https://dev.to/wrobeltomasz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3933746%2F9020a328-6799-44e6-aa7c-c124d27fe4fb.jpg</url>
      <title>DEV Community: Tomasz</title>
      <link>https://dev.to/wrobeltomasz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wrobeltomasz"/>
    <language>en</language>
    <item>
      <title>MatrAIx consists of 8.3 billion agent-persons who statistically represent the entire human population</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Fri, 28 Aug 2026 20:52:27 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/matraix-consists-of-83-billion-agent-persons-who-statistically-represent-the-entire-human-5n6</link>
      <guid>https://dev.to/wrobeltomasz/matraix-consists-of-83-billion-agent-persons-who-statistically-represent-the-entire-human-5n6</guid>
      <description>&lt;p&gt;It is an open-source research community that has created an infrastructure for simulating user behavior. At its core is a database of &lt;strong&gt;8.3 billion virtual agents&lt;/strong&gt; (personas) that statistically represent the entire human population, allowing digital products and AI to be tested without involving real people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How are users created?&lt;/strong&gt;&lt;br&gt;
Personas are created using a hybrid approach—combining real-world data (Wikipedia, surveys) and synthetic data (generated by AI). Each of the 8.3 billion personas has 1,290 detailed traits (demographics, psychology, skills) and is then materialized as an LLM agent that makes decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you use them technically?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resources: Download a ready-made set of 1 million personas from Hugging Face (or the full 8B dataset).&lt;/li&gt;
&lt;li&gt;Requirements: You’ll need Docker, uv (Python), Node.js, and API keys (primarily from Anthropic).&lt;/li&gt;
&lt;li&gt;Setup: Clone the repo, install dependencies, and download the data.&lt;/li&gt;
&lt;li&gt;Running: Create test tasks (surveys, chat, browser, app) and run them on individual personas, in batch mode, or via the Playground GUI.&lt;/li&gt;
&lt;li&gt;Applications: Market research, chatbot testing, website usability assessment, and evaluation of AI models for different user groups. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The developers emphasize that MatrAIx is intended for preliminary testing and hypothesis evaluation, but does not fully replace final testing with real people. An interesting application is simulating user behavior in applications (Web &amp;amp; App UI/UX): Agents interact with websites or apps (by controlling the browser or default API) to test purchase paths and the intuitiveness of the interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does the trained data look like (data structure)?&lt;/strong&gt;&lt;br&gt;
It consists of structured attribute profiles (JSON / Parquet). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4qyqmw4m9yz39niqgzqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4qyqmw4m9yz39niqgzqn.png" alt="json example" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before an agent is used, its attributes are dynamically converted into a system prompt for the LLM.&lt;/p&gt;

&lt;p&gt;On the project website, you'll find something interesting: &lt;strong&gt;graphical interface&lt;/strong&gt; at &lt;a href="https://matraix.ai/playground/" rel="noopener noreferrer"&gt;matraix.ai/playground&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You select a persona (e.g., from the Persona-1M database based on filters such as age, country, and education). &lt;/li&gt;
&lt;li&gt;You choose one of 8 tasks (e.g., Web Browsing or Survey). &lt;/li&gt;
&lt;li&gt;You run the simulation and observe in real time (or analyze in the summary) how that profile performs the assigned task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Website: &lt;a href="https://matraix.ai/" rel="noopener noreferrer"&gt;matraix.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you think of this project?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;In what areas can this project be used?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>datascience</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>OpenSparrow v3.3 — Click Statistics, Production Readiness Check, and Deployment Hardening</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Thu, 20 Aug 2026 18:25:47 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v33-click-statistics-production-readiness-check-and-deployment-hardening-170h</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v33-click-statistics-production-readiness-check-and-deployment-hardening-170h</guid>
      <description>&lt;p&gt;&lt;strong&gt;OpenSparrow v3.3 is a stability‑focused and deployment‑focused release that brings real‑world operational visibility, a production‑readiness checklist, and a full hardening pass across environment variables and configuration defaults.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This update introduces an optional Click Statistics module, expands the Admin Health Check into a proper production‑readiness validator, and tightens deployment settings for anyone running OpenSparrow outside a local dev box. Below is a detailed breakdown of what changed, why it matters, and how it improves day‑to‑day operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Click Statistics
&lt;/h2&gt;

&lt;p&gt;A new optional module — off by default, and &lt;em&gt;off&lt;/em&gt; genuinely means off. &lt;br&gt;
When the module disabled, no collector script is emitted, nothing is downloaded, and the endpoint returns 204 without writing even if a page stays open across a toggle‑off.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F450jzsqt5yw1ewzv4o3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F450jzsqt5yw1ewzv4o3o.png" alt="Admin click statistic module" width="800" height="767"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Records who clicked what, when, on which page, and optionally the table/record in context
(“Record Table And Record” can be turned off to keep entries to just user/time/element)&lt;/li&gt;
&lt;li&gt;Log tab: recent clicks newest‑first, filterable by element and user, with a &lt;strong&gt;Top Elements&lt;/strong&gt; rollup of the 20 most‑clicked elements&lt;/li&gt;
&lt;li&gt;Retention: “Delete Automatically After N days” (default 90, &lt;code&gt;0 = keep forever&lt;/code&gt;) enforced by the notifications cron so the table doesn’t grow unbounded&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Admin Health Check: Production Readiness tab
&lt;/h2&gt;

&lt;p&gt;Health Check now includes a dedicated tab answering &lt;strong&gt;is this deployment actually production‑ready?&lt;/strong&gt; instead of just “is the database reachable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd3ai5jna2i2qnlrcdnle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd3ai5jna2i2qnlrcdnle.png" alt="Admin production verify" width="800" height="674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It validates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;APP_ENV&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;demo mode being off&lt;/li&gt;
&lt;li&gt;secure cookies&lt;/li&gt;
&lt;li&gt;HTTPS (including behind reverse proxies via &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; / &lt;code&gt;CF-Visitor&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;display_errors&lt;/code&gt; off&lt;/li&gt;
&lt;li&gt;Argon2id availability&lt;/li&gt;
&lt;li&gt;minimum password length of 12&lt;/li&gt;
&lt;li&gt;API rate limiting configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SESSION_SAMESITE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;trusted‑proxy‑header configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existing checks were refreshed as well — minimum supported PHP version now correctly requires &lt;strong&gt;8.4&lt;/strong&gt;, matching the rest of the codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment hardening
&lt;/h2&gt;

&lt;p&gt;A broad pass through &lt;code&gt;.env.example&lt;/code&gt; and &lt;code&gt;includes/config.php&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every environment variable is now documented
&lt;/li&gt;
&lt;li&gt;numeric config values are clamped to sane ranges
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;APP_TIMEZONE&lt;/code&gt; and &lt;code&gt;SESSION_SAMESITE&lt;/code&gt; are validated instead of trusted blindly
&lt;/li&gt;
&lt;li&gt;new settings cover:
&lt;code&gt;APP_URL&lt;/code&gt;, &lt;code&gt;STORAGE_PATH&lt;/code&gt;, &lt;code&gt;SESSION_COOKIE_NAME&lt;/code&gt;, &lt;code&gt;DB_SSLMODE&lt;/code&gt;, API rate limiting,
statement/SMTP/HTTP client timeouts, session idle timeout, Argon2 tuning,
and a trusted‑proxy IP list&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additional hardening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API throttle now fails open (instead of blocking all requests) if its state store becomes unwritable
&lt;/li&gt;
&lt;li&gt;libpq connection‑info values are quoted
&lt;/li&gt;
&lt;li&gt;CSP report URI restricted to same‑origin&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Also in this release
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flujyvlqyldk6onjwtwz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flujyvlqyldk6onjwtwz5.png" alt="Users information" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optional first name, last name, email, and phone fields on admin user accounts (informational only — not used for login, ownership, or notifications)&lt;/li&gt;
&lt;li&gt;Logo and favicon refreshed; login/admin brand text sized down to match&lt;/li&gt;
&lt;li&gt;Large internal cleanup:
PHP/JS variable names expanded from abbreviations to full words,
public API endpoints moved behind typed controllers (&lt;code&gt;App\Controller&lt;/code&gt;),
and &lt;code&gt;die()&lt;/code&gt; / &lt;code&gt;exit()&lt;/code&gt; replaced with a typed exception hierarchy
— no behavior change, but relevant if you track the codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Following this series?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v32-per-user-access-control-materialized-views-in-rag-and-a-business-design-refresh-333o"&gt;OpenSparrow v3.2 — Per‑User Access Control, Materialized Views in RAG, and a Business Design Refresh&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Websites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://opensparrow.org" rel="noopener noreferrer"&gt;https://opensparrow.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>php</category>
      <category>lowcode</category>
      <category>postgres</category>
      <category>devops</category>
    </item>
    <item>
      <title>OpenSparrow v3.2 - Per-User Access Control, Materialized Views in RAG, and a Business Design Refresh</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Thu, 13 Aug 2026 14:22:39 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v32-per-user-access-control-materialized-views-in-rag-and-a-business-design-refresh-333o</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v32-per-user-access-control-materialized-views-in-rag-and-a-business-design-refresh-333o</guid>
      <description>&lt;p&gt;&lt;strong&gt;OpenSparrow v3.2 is a security‑focused and consistency‑focused release that strengthens access boundaries, improves AI‑driven aggregate queries, and unifies the entire admin and frontend experience under one design system.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This update introduces per‑user access control across all major scopes, brings materialized‑view support to RAG aggregate queries, and delivers a full visual refresh that aligns every UI surface with the new Business design language.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe165ztp978f8mmeme9a6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe165ztp978f8mmeme9a6.gif" alt="Board view" width="720" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below is a detailed breakdown of the changes, including how they work, why they matter, and what they unlock for real deployments.&lt;/p&gt;




&lt;h2&gt;
  
  
  Per-user access control
&lt;/h2&gt;

&lt;p&gt;New &lt;strong&gt;Users → Access&lt;/strong&gt; tab. Each user gets independent allow‑lists across five scopes — tables, views, printouts, boards, workflows — stored as &lt;code&gt;user_table_access&lt;/code&gt; in config.&lt;br&gt;&lt;br&gt;
The default is unrestricted: an absent or empty list means &lt;strong&gt;“no restriction”&lt;/strong&gt;, not &lt;strong&gt;“no access”&lt;/strong&gt;. To fully cut a user off, deactivate the account instead.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforced at the API boundary by default, not just hidden in the UI — &lt;code&gt;os_api_action()&lt;/code&gt; / &lt;code&gt;os_api_dispatch()&lt;/code&gt; gate table, view, print, board, and workflow endpoints, and FK/file/comment/mass‑edit/data‑cleanup endpoints were extended to respect the same restrictions
&lt;/li&gt;
&lt;li&gt;Granting a board or workflow does not implicitly grant the tables it touches — a board whose table isn’t granted won’t show up, and a workflow drops if any step targets a table the user can’t reach
&lt;/li&gt;
&lt;li&gt;Hidden tables (no menu entry, no grid) can’t be ticked and are granted automatically
&lt;/li&gt;
&lt;li&gt;Delegated FK lookups and the schema endpoint are now scoped to what the requesting user can actually access, and the file listing is filtered by record ownership&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  RAG: materialized views as aggregate views
&lt;/h2&gt;

&lt;p&gt;The aggregate‑view feature from 3.1 (attach a PostgreSQL view to a table so the AI assistant can answer exact “total/how many” questions) now also accepts &lt;strong&gt;materialized views&lt;/strong&gt;, flagged as such in the admin UI — useful when the aggregate query is expensive enough that you’d rather refresh it on a schedule than recompute it on every chat message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9mxmt4p6urpj4j6t39kb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9mxmt4p6urpj4j6t39kb.gif" alt="RAG module" width="560" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Views sync also discovers materialized views alongside regular ones.&lt;/p&gt;




&lt;h2&gt;
  
  
  A unified “Business” look
&lt;/h2&gt;

&lt;p&gt;The admin panel, setup wizard, and frontend were unified onto a single &lt;strong&gt;Business 4+1 color palette&lt;/strong&gt; and one &lt;strong&gt;system‑ui font stack&lt;/strong&gt;, replacing a mix of ad-hoc colors and font declarations across dozens of JS/CSS files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flw0dzjhgw6u90mkhp71x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flw0dzjhgw6u90mkhp71x.gif" alt="Admin view" width="720" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every front‑end button now shares one height, weight, border radius, and font size instead of drifting per page.&lt;/p&gt;




&lt;h2&gt;
  
  
  Also in this release
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CRM demo: richer install description, plus optional demo‑user and audit‑history install toggles
&lt;/li&gt;
&lt;li&gt;Release packaging excludes &lt;code&gt;creator/&lt;/code&gt;, &lt;code&gt;dist-local/&lt;/code&gt;, and &lt;code&gt;storage/tmp/&lt;/code&gt; from image and release archives
&lt;/li&gt;
&lt;li&gt;Admin docs updated to match actual current module behavior across several sections
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Websites
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://opensparrow.org" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;I encourage a substantive discussion, and I'll do my best to answer any questions regarding implementation and configuration.&lt;/p&gt;

</description>
      <category>php</category>
      <category>lowcode</category>
      <category>postgres</category>
      <category>rag</category>
    </item>
    <item>
      <title>OpenSparrow v3.1 - RAG assistant, Record Image Galleries, and Workflow Stored Procedures</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Thu, 06 Aug 2026 06:12:57 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v31-rag-assistant-record-image-galleries-and-workflow-stored-procedures-4e97</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v31-rag-assistant-record-image-galleries-and-workflow-stored-procedures-4e97</guid>
      <description>&lt;p&gt;Automation rules can now &lt;strong&gt;call out to n8n&lt;/strong&gt;, the &lt;strong&gt;&lt;a href="https://github.com/wrobeltomasz/OpenSparrow/tree/main#rag-module-demo-video" rel="noopener noreferrer"&gt;RAG assistant&lt;/a&gt;&lt;/strong&gt; can answer exact aggregate questions &lt;strong&gt;via admin-configured views&lt;/strong&gt;, tables can have their &lt;strong&gt;own image galleries&lt;/strong&gt;, workflow steps can &lt;strong&gt;run a PostgreSQL stored procedure&lt;/strong&gt;, and the grid gets conditional row highlighting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automations: n8n webhooks
&lt;/h2&gt;

&lt;p&gt;The Automations admin is now split into two tabs - Record (the existing field-update/notification/create-record rules) and n8n. The n8n tab lets a rule fire an outgoing webhook to an n8n workflow instead of (or alongside) the built-in actions, with webhook credentials encrypted at rest. Useful for handing off to Slack, email marketing, or any of the hundreds of services n8n already integrates with, without writing custom PHP.&lt;/p&gt;

&lt;h2&gt;
  
  
  RAG assistant: aggregate views
&lt;/h2&gt;

&lt;p&gt;The AI assistant used to be limited to whatever was on the current grid page, so it had to refuse "how many / total" questions about the whole table. In 3.1, an admin can attach a PostgreSQL view (&lt;code&gt;schema.view&lt;/code&gt;) to a table under RAG settings - a pre-vetted, read-only aggregate query. When that table's page is open, the assistant runs the view (capped at a configurable row limit) and gets the exact figures fenced into the prompt as authoritative data, separate from page content and record text. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwlondabdrl4uk034yqmc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwlondabdrl4uk034yqmc.jpg" alt="The Aggregate Views interface showing how a custom SQL view is attached to a database table to handle aggregated queries to RAG." width="798" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model still never writes or chooses the query itself - it only ever sees the output of a view an admin explicitly configured, with an extra guard that skips owner-restricted tables since a plain view has no per-user filter. The result: questions like "what's the total invoice value this quarter" get an exact answer instead of "I can only see this page."&lt;/p&gt;

&lt;h2&gt;
  
  
  Record image galleries
&lt;/h2&gt;

&lt;p&gt;New per-table image galleries - configure an image column and records show a thumbnail strip in the grid plus an upload gallery on the edit form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftnlv5nf6t38o09impetd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftnlv5nf6t38o09impetd.jpg" alt="A list of records with dedicated icons or image on the right side acting as quick shortcuts to linked documents and files." width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comes with full Cypress E2E coverage and demo data (contact photos in the CRM demo).&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow steps: PostgreSQL procedure hook
&lt;/h2&gt;

&lt;p&gt;Workflow steps can now call a PostgreSQL stored procedure as part of a guided flow, in addition to the existing table-form steps. The CRM demo ships a worked example. Combined with the record-image upload option added to workflow steps, workflows can now do a lot more than collect form fields.&lt;/p&gt;

&lt;h2&gt;
  
  
  Grid: conditional row highlighting
&lt;/h2&gt;

&lt;p&gt;Schema-configured row highlight rules color entire grid rows based on column conditions - e.g. flag overdue invoices or high-value deals at a glance - seeded with an invoice example in the CRM demo. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi3qvualge0rxqbsjdzyv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi3qvualge0rxqbsjdzyv.jpg" alt="A sales deals table displaying rows highlighted in different colors corresponding to their 'Stage' status." width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Grid hover/crosshair styling was also reworked: a vertical column highlight alongside the existing row highlight, solid accent header fills, and a fix for the FK cell tooltip getting stuck over open dropdowns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Also in this release
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Notes reminders now take a date &lt;strong&gt;and time&lt;/strong&gt;, not just a date&lt;/li&gt;
&lt;li&gt;Optional CRM demo install directly from the first-run setup wizard&lt;/li&gt;
&lt;li&gt;RAG: grid context now built from the actual data model and fenced in the prompt, with a hardened no-answer/partial-answer prompt&lt;/li&gt;
&lt;li&gt;Security: all admin write actions are now guarded by &lt;code&gt;require_not_demo()&lt;/code&gt;, closing a demo-mode bypass in five admin actions; additional CSRF/demo-mode gaps fixed&lt;/li&gt;
&lt;li&gt;License compliance pass: SPDX headers, NOTICE file, canonical FSF license texts, and initials-on-color avatars replacing bundled stock photos&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;spw_*&lt;/code&gt; system tables now carry &lt;code&gt;COMMENT ON&lt;/code&gt; descriptions for easier DB introspection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Following this series?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v30-gdpr-anonymization-etl-postgresql-native-config-and-a-unified-ui-30mj"&gt;OpenSparrow v3.0 - GDPR Anonymization Goes Production, User Records/Comments, and Ollama Cloud&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Websites
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://opensparrow.org" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://demo.opensparrow.org" rel="noopener noreferrer"&gt;demo.opensparrow.org&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>lowcode</category>
      <category>rag</category>
      <category>opensource</category>
    </item>
    <item>
      <title>OpenSparrow v3.0 - GDPR anonymization, ETL, PostgreSQL-Native Config, and a Unified UI</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Sat, 25 Jul 2026 09:32:17 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v30-gdpr-anonymization-etl-postgresql-native-config-and-a-unified-ui-30mj</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v30-gdpr-anonymization-etl-postgresql-native-config-and-a-unified-ui-30mj</guid>
      <description>&lt;p&gt;OpenSparrow v3.0 is out. The GDPR anonymization module introduced in 2.9 is now fully covered by end-to-end tests and runs on the new PostgreSQL-native config store, the user menu gets a "My comments" panel and a restyled "My records" list, and the RAG assistant can talk to Ollama Cloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7224pk77r0r2ytpej6eg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7224pk77r0r2ytpej6eg.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Anonymization (GDPR/EDPB) - hardened for production
&lt;/h2&gt;

&lt;p&gt;The anonymization module (System &amp;gt; Anonymization) - per-column rules with a date threshold, dry-run preview, EDPB-style risk reports, and a scheduled cron worker - now has full end-to-end test coverage, so rule creation, scheduling, and the dry-run/report flow are regression-tested on every release. It also picked up a dedicated tile on the admin overview dashboard for quicker access alongside ETL, Print, and Workflows.&lt;/p&gt;

&lt;p&gt;Under the hood, anonymization rules moved along with the rest of the app's configuration onto the new &lt;code&gt;spw_config&lt;/code&gt; PostgreSQL store (see below), which means rule changes now get the same optimistic locking and full audit trail as everything else - no more silently-clobbered config files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqpj6am986h5vpdywu5q9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqpj6am986h5vpdywu5q9.png" alt=" " width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  User Records &amp;amp; My Comments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;My comments&lt;/strong&gt; - a new panel in the avatar menu lists every comment you've written, newest first. Each entry shows the start of the comment plus which table/record it belongs to; clicking it jumps straight to that record's Comments tab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My records restyled&lt;/strong&gt; - the existing "My records" quick list (records assigned to you, configured per table in admin) now shows the assignment date next to each entry, and a bug where the admin's "clear config" action didn't actually persist has been fixed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  RAG assistant: Ollama Cloud
&lt;/h2&gt;

&lt;p&gt;The AI assistant's admin settings gained an encrypted Ollama Cloud API key field - stored encrypted at rest, sent as a Bearer token, and never shown back in the UI (only whether one is configured, with a button to clear it). This lets the assistant use the paid Ollama Cloud tier instead of a local Ollama install. The cloud connectivity check timeout was also bumped from 8s to 30s after real-world testing showed the shorter window was too aggressive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnfmoxdt24xljm7sm7heh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnfmoxdt24xljm7sm7heh.png" alt=" " width="799" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Also in this release
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Application configuration (schema, menu, dashboard, calendar, automations, users, anonymization rules...) moved from JSON files into a &lt;code&gt;spw_config&lt;/code&gt; PostgreSQL table with optimistic locking and full change history&lt;/li&gt;
&lt;li&gt;New Print module for block-based report templates&lt;/li&gt;
&lt;li&gt;Views got grid-style filters, row grouping with subtotals, and inline drill-down&lt;/li&gt;
&lt;li&gt;A UI unification pass across admin and frontend - shared search/filter bar, one button component, unified typography, collapsed row actions&lt;/li&gt;
&lt;li&gt;Multiple Kanban boards, a private Notes panel with reminders, and a configurable password policy for users&lt;/li&gt;
&lt;li&gt;New admin module - System &amp;gt; ETL. Define named source connections (MySQL, MariaDB, PostgreSQL, SQLite, or a CSV file over FTP/FTPS), then jobs that load them into local PostgreSQL tables.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forfr88jyblbplwanbe9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forfr88jyblbplwanbe9t.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Following this series?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v29-gdpr-anonymization-automation-emails-and-a-php-84-refactor-1imn"&gt;OpenSparrow v2.9 - GDPR Anonymization, Automation Emails, and a PHP 8.4 Refactor&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Websites
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://opensparrow.org" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://demo.opensparrow.org" rel="noopener noreferrer"&gt;demo.opensparrow.org&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>lowcode</category>
      <category>rag</category>
      <category>postgres</category>
    </item>
    <item>
      <title>OpenSparrow v2.9 – GDPR Anonymization, Automation Emails, and a PHP 8.4 Refactor</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Mon, 06 Jul 2026 18:11:44 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v29-gdpr-anonymization-automation-emails-and-a-php-84-refactor-1imn</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v29-gdpr-anonymization-automation-emails-and-a-php-84-refactor-1imn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ajsz0ynymr7g9ncaqjy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ajsz0ynymr7g9ncaqjy.jpg" alt=" " width="800" height="446"&gt;&lt;/a&gt;OpenSparrow v2.9 is out. The headline feature is a full data anonymization module for GDPR compliance, alongside new automation actions, dashboard/calendar filtering, and a codebase modernized for PHP 8.4.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Anonymization (GDPR/EDPB)
&lt;/h2&gt;

&lt;p&gt;New admin module — System → Anonymization. Define per-column rules (table, column, replacement value) to scrub PII on a schedule.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Four tabs&lt;/strong&gt; — Rules (CRUD + run history), Schedule (manual/daily/weekly/monthly + Run Now), Suggestions (scans your schema's column names against a PII keyword dictionary and proposes rules), Dictionary (edit keywords, purge old logs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dry-run preview&lt;/strong&gt; — see exactly how many rows each rule would affect via &lt;code&gt;COUNT(*)&lt;/code&gt; with the rule's WHERE clause, before touching any data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EDPB compliance reports&lt;/strong&gt; — every run writes a structured JSON report (linkability/inference/single-out risk assessment per rule) to a dedicated report table, viewable and downloadable from Run History&lt;/li&gt;
&lt;li&gt;A companion CLI cron worker enforces the configured frequency window internally, so a simple daily OS scheduler entry covers all modes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automations: email actions
&lt;/h2&gt;

&lt;p&gt;The rule engine gains an &lt;strong&gt;email action&lt;/strong&gt; — queue a message to be sent when a rule fires, with templated recipients/subject/body (&lt;code&gt;{{ record.field }}&lt;/code&gt;, &lt;code&gt;{{ old_record.field }}&lt;/code&gt;, &lt;code&gt;{{ current_user.id }}&lt;/code&gt;, &lt;code&gt;{{ today }}&lt;/code&gt;). Delivery runs async through the notifications cron with retry/attempt tracking and header-injection protection.&lt;/p&gt;

&lt;p&gt;Also added: numeric/date comparison operators (&lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;) and change-detection operators (&lt;code&gt;changed&lt;/code&gt;, &lt;code&gt;changed_from&lt;/code&gt;, &lt;code&gt;changed_to&lt;/code&gt;) for writing more precise trigger conditions, plus a quick enable/disable toggle and a "Duplicate rule" button.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard &amp;amp; calendar filters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard&lt;/strong&gt; — a global period filter (All time / Today / 7d / 30d / This month) reloads every widget; count/sum cards now show deltas vs. the previous period, and widgets can be exported to CSV directly from the dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar&lt;/strong&gt; — a filter bar lets you toggle event sources on/off per configured table color&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  PHP 8.4 refactor
&lt;/h2&gt;

&lt;p&gt;The whole backend was modernized for PHP 8.4: enums for user roles, readonly classes and constructor property promotion, &lt;code&gt;#[\Override]&lt;/code&gt; attributes on interface implementations, &lt;code&gt;json_validate()&lt;/code&gt;, first-class callable syntax, and hardened type hints across the DB/repository layer. CI now targets PHP 8.4/8.5.&lt;/p&gt;

&lt;p&gt;Page bootstrapping was also consolidated — the repeated session/CSRF/CSP-header boilerplate that used to be copy-pasted at the top of every page now lives in a single &lt;code&gt;os_page_bootstrap()&lt;/code&gt; / &lt;code&gt;os_boot_app()&lt;/code&gt; helper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Following this series?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v28-kanban-board-mysql-gateway-and-major-security-hardening-41ic"&gt;OpenSparrow v2.8 – Kanban board, MySQL Gateway, and major security hardening&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Websites
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://opensparrow.org" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://demo.opensparrow.org" rel="noopener noreferrer"&gt;demo.opensparrow.org&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>lowcode</category>
      <category>postgres</category>
      <category>automation</category>
    </item>
    <item>
      <title>OpenSparrow v2.8 – Kanban board, MySQL Gateway, and major security hardening</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Fri, 26 Jun 2026 14:01:04 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v28-kanban-board-mysql-gateway-and-major-security-hardening-41ic</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v28-kanban-board-mysql-gateway-and-major-security-hardening-41ic</guid>
      <description>&lt;p&gt;OpenSparrow v2.8 is out. This one's focused on security, new visualization options, and better multi-database support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Board (Kanban) view&lt;/strong&gt;&lt;br&gt;
New module — visualize your records as draggable cards organized into lanes. Each lane represents a status value (enum recommended). Drag a card to another lane and it updates instantly, with the change logged to the audit trail and restricted by record ownership.&lt;br&gt;
Configure it from the new Board tab in the admin panel. The CRM demo now ships with a ready-made "Deals Board" grouped by Stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MySQL Gateway improvements&lt;/strong&gt;&lt;br&gt;
You can now connect to external MySQL databases and manage them alongside.&lt;br&gt;
Add a MySQL table to the routing list, it auto-discovers columns from INFORMATION_SCHEMA and writes them to schema.json. New admin panel section lists all MySQL-routed tables with a per-table sync button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security hardening&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ownership guards — mass edit, duplicate, and delete now respect row ownership on restricted tables. Calendar drag-and-drop also enforces this.&lt;/li&gt;
&lt;li&gt;Random setup password — the initial admin account gets a random 24-character password instead of hardcoded admin/admin&lt;/li&gt;
&lt;li&gt;Session protection — storage/sessions/ now has .htaccess denying direct web access on Apache&lt;/li&gt;
&lt;li&gt;File uploads security — uploads are now stored outside the web docroot (storage/files/), closing a potential exposure&lt;/li&gt;
&lt;li&gt;Config import hardening — rejects empty archives, enforces 512 KB per-file limits, validates JSON properly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web-root restructure — all web entry points now live in public/; backend code stays outside the docroot&lt;/li&gt;
&lt;li&gt;Cypress test overhaul — 18 spec files, new seed endpoint, admin panel tests now fully active&lt;/li&gt;
&lt;li&gt;CI/CD — added source integrity checks, version tag validation, PHP 8.1–8.3 syntax checks&lt;/li&gt;
&lt;li&gt;Docs update — removed all references to default credentials, updated for random setup password&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Small but useful&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linked record count badges now show on grid expand buttons — tells you how many related records exist before you click&lt;/li&gt;
&lt;li&gt;Calendar API now queries only the visible month — better performance on large datasets&lt;/li&gt;
&lt;li&gt;Login attempts table auto-purges rows older than 30 days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Following this series?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v27-enhanced-rag-rebuilt-admin-ui-and-automations-beta-438d"&gt;OpenSparrow v2.7 – Enhanced RAG, rebuilt admin UI, and Automations (beta)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v26-ai-powered-search-rag-bulk-operations-and-keyboard-shortcuts-4cjn"&gt;OpenSparrow v2.6 – AI-powered search (RAG), bulk operations, and keyboard shortcuts&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Websites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://opensparrow.org/" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://demo.opensparrow.org/" rel="noopener noreferrer"&gt;demo.opensparrow.org&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>database</category>
    </item>
    <item>
      <title>OpenSparrow v2.7 – Enhanced RAG, rebuilt admin UI, and Automations (beta)</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Tue, 09 Jun 2026 15:11:04 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v27-enhanced-rag-rebuilt-admin-ui-and-automations-beta-438d</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v27-enhanced-rag-rebuilt-admin-ui-and-automations-beta-438d</guid>
      <description>&lt;p&gt;v2.7 is out. This release focuses on AI improvements, a major admin UI overhaul, and the first iteration of workflow automations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG enhancements&lt;/strong&gt;&lt;br&gt;
The AI module got a significant upgrade. Better document parsing, improved query handling, and now Ollama connections support SSL verification toggle — useful if you're running it locally with custom certificates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin panel redesign&lt;/strong&gt;&lt;br&gt;
The admin UI has been completely rebuilt with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Card-based editors for cleaner form layouts&lt;/li&gt;
&lt;li&gt;Inline item panel for faster configuration&lt;/li&gt;
&lt;li&gt;Refactored styles and improved visual hierarchy&lt;/li&gt;
&lt;li&gt;Inner-tabs for better information organization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Automations (beta)&lt;/strong&gt;&lt;br&gt;
We're introducing workflow automations — still early, but usable. You can create if-then rules with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OR group logic for complex conditions&lt;/li&gt;
&lt;li&gt;3 action types to start&lt;/li&gt;
&lt;li&gt;Run log to track executions&lt;/li&gt;
&lt;li&gt;User picker for assignment actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is beta. Expect improvements in v2.8.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security &amp;amp; quality&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSP nonces and XSS hardening across the admin panel&lt;/li&gt;
&lt;li&gt;Unified session enforcement and role checks&lt;/li&gt;
&lt;li&gt;Expanded Cypress E2E test suite to 12 spec files (~300 tests) — fixed 3 flaky tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;One-click deployment&lt;/strong&gt;&lt;br&gt;
Deploy to Render or Railway directly from GitHub — no manual server setup needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Other improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server-side search with load-more pagination&lt;/li&gt;
&lt;li&gt;Row cap for large tables (configurable)&lt;/li&gt;
&lt;li&gt;Better CSV import with delimiter and encoding options&lt;/li&gt;
&lt;li&gt;Improved malformed data parsing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Following this series?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v26-ai-powered-search-rag-bulk-operations-and-keyboard-shortcuts-4cjn"&gt;OpenSparrow v2.6 – AI-powered search (RAG), bulk operations, and keyboard shortcuts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v23-visual-admin-panel-zero-dependencies-now-with-erd-and-m2m-support-4p6e"&gt;OpenSparrow v2.3 – visual admin panel, zero dependencies, now with ERD and M2M support&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-open-source-admin-panel-builder-zero-dependencies-v21-just-dropped-38ag"&gt;OpenSparrow – open-source admin panel builder, zero dependencies, v2.1 just dropped&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Websites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://opensparrow.org/" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://demo.opensparrow.org/" rel="noopener noreferrer"&gt;demo.opensparrow.org&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What AI features would be useful in your own projects? Drop your thoughts in the comments.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>php</category>
    </item>
    <item>
      <title>OpenSparrow v2.6 – AI-powered search (RAG), bulk operations, and keyboard shortcuts</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Thu, 28 May 2026 15:42:30 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v26-ai-powered-search-rag-bulk-operations-and-keyboard-shortcuts-4cjn</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v26-ai-powered-search-rag-bulk-operations-and-keyboard-shortcuts-4cjn</guid>
      <description>&lt;p&gt;OpenSparrow v2.6 is out. This one's a big step forward — RAG (Retrieval-Augmented Generation) integration, bulk grid operations, and a whole new UX layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG &amp;amp; AI integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35hz7s9tp30nx3jc1qrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35hz7s9tp30nx3jc1qrq.png" alt=" " width="800" height="517"&gt;&lt;/a&gt;&lt;br&gt;
You can now upload documents and let users ask questions against them. The system retrieves relevant sections and generates answers using an LLM (supports Ollama locally or any OpenAI-compatible API).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's new:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RAG Statistics tab in admin — tracks query tokens, response times, document matches, and recent queries&lt;br&gt;
Multilingual auto-response — user questions are answered in their own UI language, no schema changes needed&lt;br&gt;
20-language support — "Ask AI" panel fully translated, plus language dropdown in the test interface&lt;/p&gt;

&lt;p&gt;Good for things like: knowledge base Q&amp;amp;A, customer support automation, or letting internal teams ask questions about their own data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grid &amp;amp; bulk operations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mass Edit module — select rows via checkboxes, bulk edit fields, change owners, duplicate, or delete with one click&lt;br&gt;
Keyboard shortcuts — arrow keys to navigate, Tab, Ctrl+C to copy, Ctrl+F to search, Ctrl-hold for help modal — works across all 20 languages&lt;br&gt;
Quick Data Cleanup toolbar — find &amp;amp; replace with live preview, case sensitivity, accent-ignore. Editor-gated with audit trail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Admin improvements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Renamed "RAG Knowledge Base" to "Centrum AI" (heading is translatable)&lt;br&gt;
Migration Manager — tracks pending cleanup tasks after version upgrades, with automatic backups and audit trail&lt;br&gt;
FK columns render as dropdowns in forms by default&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security &amp;amp; Quality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All bulk operations (mass edit, cleanup, delete) are editor-role gated&lt;br&gt;
CSRF protection on every operation&lt;br&gt;
Full audit trail — every change is logged&lt;br&gt;
20 languages fully supported across all new modules&lt;br&gt;
Fixed regressions in RAG API and CSV import&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Following this series?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-v23-visual-admin-panel-zero-dependencies-now-with-erd-and-m2m-support-4p6e"&gt;OpenSparrow v2.3 – visual admin panel, zero dependencies, now with ERD and M2M support&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wrobeltomasz/opensparrow-open-source-admin-panel-builder-zero-dependencies-v21-just-dropped-38ag"&gt;OpenSparrow – open-source admin panel builder, zero dependencies, v2.1 just dropped&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Websites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://opensparrow.org/" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://demo.opensparrow.org/" rel="noopener noreferrer"&gt;demo.opensparrow.org&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What AI features would be useful in your own projects? Drop your thoughts in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>OpenSparrow v2.3 – visual admin panel, zero dependencies, now with ERD and M2M support</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Thu, 21 May 2026 20:49:14 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-v23-visual-admin-panel-zero-dependencies-now-with-erd-and-m2m-support-4p6e</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-v23-visual-admin-panel-zero-dependencies-now-with-erd-and-m2m-support-4p6e</guid>
      <description>&lt;p&gt;Hey&lt;/p&gt;

&lt;p&gt;OpenSparrow v2.3 is out. Quick recap if you missed earlier posts — it's an open-source admin panel framework built on PHP 8.1, PostgreSQL, and Vanilla JS. No npm, no Composer, no external libraries. You configure everything visually through &lt;code&gt;/admin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Live demo: &lt;strong&gt;demo.opensparrow.org&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's new&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Schema Map (ERD)&lt;/strong&gt; — visual diagram of your entire database with PNG export&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Many-to-Many support&lt;/strong&gt; — dedicated Builder tab, chip renderer in grids&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtual computed columns&lt;/strong&gt; — formula fields without touching the DB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Views&lt;/strong&gt; — save filtered/sorted perspectives per table&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record Ownership&lt;/strong&gt; — track who handles what, full history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance tab&lt;/strong&gt; — index advisor, slow query analyzer, bloat detection&lt;/li&gt;
&lt;li&gt;Security hardening — 5 audit fixes, better session and input validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contributing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Looking for contributors — code, docs, or a short demo screencast.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opensparrow.org" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>lowcode</category>
    </item>
    <item>
      <title>OpenSparrow – open-source admin panel builder, zero dependencies, v2.1 just dropped</title>
      <dc:creator>Tomasz</dc:creator>
      <pubDate>Sun, 17 May 2026 18:43:36 +0000</pubDate>
      <link>https://dev.to/wrobeltomasz/opensparrow-open-source-admin-panel-builder-zero-dependencies-v21-just-dropped-38ag</link>
      <guid>https://dev.to/wrobeltomasz/opensparrow-open-source-admin-panel-builder-zero-dependencies-v21-just-dropped-38ag</guid>
      <description>&lt;p&gt;&lt;strong&gt;OpenSparrow – open-source admin panel builder, zero dependencies, v2.1 just dropped&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;I want to share a project I've been building — &lt;strong&gt;OpenSparrow&lt;/strong&gt;, an open-source visual admin panel framework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The idea:&lt;/strong&gt; connect it to a PostgreSQL database, and you get a fully working admin panel — tables, forms, dashboards, calendar, file uploads — configured entirely through a visual &lt;code&gt;/admin&lt;/code&gt; interface. No JSON to write by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack is minimalist:&lt;/strong&gt; PHP 8.1+, PostgreSQL, Vanilla JS. &lt;strong&gt;No npm. No Composer. No jQuery.&lt;/strong&gt; No external libraries on either side. Pure code only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get out of the box:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual table builder&lt;/strong&gt; — create columns, set types, foreign keys, validation rules — all in the UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full CRUD&lt;/strong&gt; with inline cell editing, searchable FK columns, and subtables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard builder&lt;/strong&gt; — stat cards, KPI cards, bar/pie charts, and data lists with live WHERE filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar view&lt;/strong&gt; + cron-based notifications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit trail&lt;/strong&gt; + optional record snapshots (full JSONB history of every change).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User roles:&lt;/strong&gt; Admin, Editor, Viewer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security defaults:&lt;/strong&gt; rate limiting, CSRF, session fingerprinting, HSTS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LGPL v3&lt;/strong&gt; — free for commercial use.&lt;/p&gt;

&lt;p&gt;Version 2.1 just released with a major UX overhaul, new modules, and security fixes. More on that in the next post.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://opensparrow.org/" rel="noopener noreferrer"&gt;opensparrow.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://demo.opensparrow.org/login.php" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wrobeltomasz/OpenSparrow" rel="noopener noreferrer"&gt;github.com/wrobeltomasz/OpenSparrow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback and contributors are very welcome!&lt;/p&gt;

</description>
      <category>php</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
