<?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>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>
