<?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>Forem: Matheus D. Santos</title>
    <description>The latest articles on Forem by Matheus D. Santos (@matheusdsantossi).</description>
    <link>https://forem.com/matheusdsantossi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3291135%2F05838ffe-56cf-4f1a-89e3-f37c92b9cce1.jpeg</url>
      <title>Forem: Matheus D. Santos</title>
      <link>https://forem.com/matheusdsantossi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/matheusdsantossi"/>
    <language>en</language>
    <item>
      <title>Data Analyses — Wizard</title>
      <dc:creator>Matheus D. Santos</dc:creator>
      <pubDate>Sun, 28 Sep 2025 22:47:01 +0000</pubDate>
      <link>https://forem.com/matheusdsantossi/data-analyses-wizard-517c</link>
      <guid>https://forem.com/matheusdsantossi/data-analyses-wizard-517c</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kendoreact-2025-09-10"&gt;KendoReact Free Components Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Data Analyses — Automate Wizard (KendoReact Challenge submission)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Data Analyses — Automate Wizard&lt;/strong&gt;, a small React app that helps users import tabular files (CSV/XLSX), automatically analyzes the dataset, and generates polished, accessible charts and dashboard cards using &lt;strong&gt;KendoReact Free Components&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The app’s goal is to let non-technical users get immediate insights from an uploaded spreadsheet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;auto-detects numeric / date columns,&lt;/li&gt;
&lt;li&gt;suggests the most useful charts and small dashboard cards (totals, averages, top categories),&lt;/li&gt;
&lt;li&gt;aggregates and prepares data for charts (bar, line, pie, donut, area),&lt;/li&gt;
&lt;li&gt;offers a Chart Wizard for manual column-to-chart mapping,&lt;/li&gt;
&lt;li&gt;accepts exported charts (PDF, PNG, SVG) and lets users pin them to the dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I focused on usability (one-click suggestions + preview), accessibility, and making the analysis pipeline safe (AI only receives a compact column summary / sample, not full PII).&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Demo video (walkthrough): &lt;a href="https://www.loom.com/share/1382adaea79e41e09406bc76caecb3a7?sid=6bc8ff72-ec35-4f9a-b8fa-a67471f236c4" rel="noopener noreferrer"&gt;https://www.loom.com/share/1382adaea79e41e09406bc76caecb3a7?sid=6bc8ff72-ec35-4f9a-b8fa-a67471f236c4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source code (GitHub): &lt;a href="https://github.com/MatheusDSantossi/data-analyses-automate" rel="noopener noreferrer"&gt;https://github.com/MatheusDSantossi/data-analyses-automate&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Screenshots and the Loom video are in the repo README. The video demonstrates uploading a CSV, the AI suggestions panel, auto-generated charts/cards, and the Chart Wizard flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Upload CSV / XLSX files and preview sample rows.&lt;/li&gt;
&lt;li&gt;Automatic dataset analysis (sample-based) using a generative AI assistant (Gemini) that recommends charts and cards.&lt;/li&gt;
&lt;li&gt;Auto-aggregation helpers (sum/avg/count, time-series aggregation with month-year/year granularity).&lt;/li&gt;
&lt;li&gt;Interactive Chart Wizard integration so users can pick fields and build charts manually if desired.&lt;/li&gt;
&lt;li&gt;Chart gallery: Bar, Line, Area, Pie, Donut (all generated from the same pipeline).&lt;/li&gt;
&lt;li&gt;Upload/export support for images/PDFs (pin exported charts to dashboard).&lt;/li&gt;
&lt;li&gt;Skeletons + progressive UI while parsing/aggregating.&lt;/li&gt;
&lt;li&gt;Lightweight theme scoping so Kendo styling is applied only where needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I used KendoReact components
&lt;/h2&gt;

&lt;p&gt;I used multiple free KendoReact components to build the UI and charts. Key components used in the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Input&lt;/code&gt; — file picker UI (from &lt;code&gt;@progress/kendo-react-inputs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Chart&lt;/code&gt; and chart subcomponents (from &lt;code&gt;@progress/kendo-react-charts&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Chart&lt;/code&gt; (root)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ChartSeries&lt;/code&gt; / &lt;code&gt;ChartSeriesItem&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ChartCategoryAxis&lt;/code&gt; / &lt;code&gt;ChartCategoryAxisItem&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ChartValueAxis&lt;/code&gt; / &lt;code&gt;ChartValueAxisItem&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChartTitle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ChartSeriesLabels&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ChartTooltip&lt;/code&gt; / &lt;code&gt;ChartNoDataOverlay&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;code&gt;ChartWizard&lt;/code&gt; (from &lt;code&gt;@progress/kendo-react-chart-wizard&lt;/code&gt;) — interactive mapping wizard for users to create charts from table data&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;code&gt;Skeleton&lt;/code&gt; (from &lt;code&gt;@progress/kendo-react-indicators&lt;/code&gt;) — loading placeholders while files parse&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;code&gt;Tooltip&lt;/code&gt; (from &lt;code&gt;@progress/kendo-react-tooltip&lt;/code&gt;) — contextual help and quick actions&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;(plus some Kendo “intl” helpers where needed for formatting)&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: many Chart subcomponents are imported from the charts package (e.g., &lt;code&gt;ChartSeriesItem&lt;/code&gt;, &lt;code&gt;ChartCategoryAxisItem&lt;/code&gt;, etc.). Together they provide the full charting capabilities used across the app.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  AI / “Code Smarter, Not Harder” notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I used Google Generative AI (Gemini) via a small client wrapper to analyze a &lt;strong&gt;sample&lt;/strong&gt; of the uploaded data (column names + a few sample values and summary stats). The prompt instructs the model to return &lt;strong&gt;JSON only&lt;/strong&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recommended charts (type, groupBy, metric, aggregation, topN, granularity)&lt;/li&gt;
&lt;li&gt;recommended small dashboard cards (specs only: field, aggregation, label, format).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;The frontend &lt;strong&gt;validates&lt;/strong&gt; the AI response, then computes actual numbers locally (e.g., sums/averages/top categories) to avoid trusting the model for numeric calculations and to keep the source-of-truth on the client data.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;This approach lets the AI do lightweight analysis and suggestions while the app remains in control of real computations (privacy and correctness).&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;(If you prefer, this submission is &lt;em&gt;not&lt;/em&gt; entered for the Kendo AI Coding Assistant prize — I used Gemini instead. No Nuclia RAG integration is included.)&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run locally
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# clone&lt;/span&gt;
git clone https://github.com/MatheusDSantossi/data-analyses-automate.git
&lt;span class="nb"&gt;cd &lt;/span&gt;data-analyses-automate

&lt;span class="c"&gt;# install&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# start dev server&lt;/span&gt;
npm run dev
&lt;span class="c"&gt;# open http://localhost:5173 (Vite default)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add your Gemini key to &lt;code&gt;.env&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VITE_GEMINI_API_KEY=&amp;lt;your-gemini-key&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The app uses &lt;code&gt;ExcelJS&lt;/code&gt; to read xlsx files and a CSV parser helper for CSV. It also uses Kendo’s default theme — I included an optional scoped theme option so Kendo styles only apply inside the dashboard container.&lt;/li&gt;
&lt;li&gt;For the AI assistant I only send column summaries (no raw rows). If you plan to demo with real data containing PII, please exercise caution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Judging criteria mapping
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use of underlying technology&lt;/strong&gt; — Chart/wizard powered by KendoReact Charts &amp;amp; ChartWizard; Kendo components used for inputs/UX; dataset parsing with ExcelJS; AI-assisted recommendations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usability &amp;amp; User Experience&lt;/strong&gt; — immediate suggestions, skeletons while parsing, Chart Wizard for manual adjustments, export previews (PDF/Image), responsive grid layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt; — charts have labels and legends, skeletons are presentational only, and UI controls use semantic elements (and &lt;code&gt;aria-*&lt;/code&gt; where appropriate).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creativity&lt;/strong&gt; — combining a generative model to suggest charts/cards + a Chart Wizard for manual exploration makes analysis quick while preserving user control.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Files of interest
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/pages/Dashboard.tsx&lt;/code&gt; — main dashboard, AI integration, aggregation orchestration, generated-charts renderer&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/utils/wizardData.ts&lt;/code&gt; — helpers to transform rows into wizard-ready &lt;code&gt;{ field, value }&lt;/code&gt; arrays and aggregation helpers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/utils/aiAnalysis.ts&lt;/code&gt; — build prompt, call AI wrapper (&lt;code&gt;getResponseForGivenPrompt&lt;/code&gt;) and safe JSON parsing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/components/charts/*&lt;/code&gt; — &lt;code&gt;BarChart&lt;/code&gt;, &lt;code&gt;LineChart&lt;/code&gt;, &lt;code&gt;DonutChart&lt;/code&gt;, &lt;code&gt;PieChart&lt;/code&gt;, &lt;code&gt;AreaChart&lt;/code&gt; components (Kendo-powered)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/components/Wizard.tsx&lt;/code&gt; — ChartWizard integration&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final notes &amp;amp; links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/MatheusDSantossi/data-analyses-automate" rel="noopener noreferrer"&gt;https://github.com/MatheusDSantossi/data-analyses-automate&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Demo video (walkthrough): &lt;a href="https://www.loom.com/share/1382adaea79e41e09406bc76caecb3a7?sid=6bc8ff72-ec35-4f9a-b8fa-a67471f236c4" rel="noopener noreferrer"&gt;https://www.loom.com/share/1382adaea79e41e09406bc76caecb3a7?sid=6bc8ff72-ec35-4f9a-b8fa-a67471f236c4&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>kendoreactchallenge</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>n8n daily email insight generator</title>
      <dc:creator>Matheus D. Santos</dc:creator>
      <pubDate>Mon, 01 Sep 2025 02:31:53 +0000</pubDate>
      <link>https://forem.com/matheusdsantossi/n8n-daily-email-insight-generator-4986</link>
      <guid>https://forem.com/matheusdsantossi/n8n-daily-email-insight-generator-4986</guid>
      <description>&lt;h1&gt;
  
  
  n8n Daily Email Insight Generator — Real-Time Triage &amp;amp; Bright Data Enrichment
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Submission for the &lt;a href="https://dev.to/challenges/brightdata-n8n-2025-08-13"&gt;AI Agents Challenge powered by n8n and Bright Data&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; Matheus Santos — Version 0.2&lt;br&gt;
&lt;strong&gt;Timeline:&lt;/strong&gt; Aug 24, 2025 → Aug 31, 2025&lt;br&gt;
&lt;strong&gt;Status:&lt;/strong&gt; Completed (prototype)&lt;/p&gt;




&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;I built an n8n workflow that automatically ingests new emails, classifies and prioritizes them with an LLM (Gemini), enriches results using Bright Data Marketplace datasets, and writes concise, actionable entries into a Google Sheet. The workflow runs on a schedule (three times/day) and produces an “email insights” sheet that teams can use for triage, tracking, and follow-up.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;A production-style automation that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pulls emails via IMAP,&lt;/li&gt;
&lt;li&gt;cleans and normalizes message payloads,&lt;/li&gt;
&lt;li&gt;classifies topic &amp;amp; priority with a chat model,&lt;/li&gt;
&lt;li&gt;enriches classification with Bright Data Marketplace dataset lookups,&lt;/li&gt;
&lt;li&gt;merges and finalizes the enriched output with an LLM pass,&lt;/li&gt;
&lt;li&gt;and writes tasks, dataset evidence, and actions into Google Sheets (create/update/append).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key requirement satisfied: &lt;strong&gt;the workflow uses n8n’s AI/Chat model nodes and Bright Data Verified Node(s)&lt;/strong&gt; (both used as part of the enrichment &amp;amp; toolchain).&lt;/p&gt;




&lt;h2&gt;
  
  
  Live demo &amp;amp; workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;n8n workflow JSON&lt;/strong&gt;:  &lt;a href="https://github.com/MatheusDSantossi/n8n-email-priority-agent/blob/main/workflows/n8n%20Email%20categorize%20automation.json" rel="noopener noreferrer"&gt;&lt;code&gt;/workflows/email-priority-agent.json&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to try it quickly: import the workflow JSON into your n8n instance, configure IMAP, Bright Data, Gemini, and Google Sheets credentials, then run a test email.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why this is useful
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Saves time&lt;/strong&gt; by turning inbox noise into action items and evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surface business-critical mail&lt;/strong&gt; (investment, billing, client requests) with a consistent triage policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provides provenance&lt;/strong&gt;: Bright Data dataset matches are logged so you can verify sender/company context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easily extensible&lt;/strong&gt;: add more enrichment sources, task integrations (Asana/Trello), or dashboards.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Architecture (high level)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Email Provider/IMAP Trigger]
        ↓
[Email Cleaning Function]  (extract snippet, from, to, date, subject)
        ↓
[Chat Model: Classify (Gemini)] → (validate &amp;amp; clean)
        ↓
[Branch A: Prepare Bright Data queries]
        ↓
[Bright Data: List Datasets / Marketplace Lookups] → [Clean results]
        ↓
[Merge: classification + enrichment]
        ↓
[Chat Model: Final enrichment / summarize (Gemini) — may call Bright Data as a tool]
        ↓
[Final Cleaning function]
        ↓
[Chat Model → Google Sheets op generator]
        ↓
[Google Sheets: Tasks, DatasetMatches, EmailActions]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Technical implementation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;IMAP Email Trigger&lt;/strong&gt; — watches inbox for new messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function node — Email Content Cleaning&lt;/strong&gt; — normalizes the raw payload to &lt;code&gt;{ content, From, To, subject, dates }&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat model (Gemini) — Categorize&lt;/strong&gt; — prompt classifies the email into one of the categories and assigns priority (High / Medium / Low). Output is strict JSON (so downstream parsing is reliable).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output cleaning&lt;/strong&gt; — function removes fences/extra characters from model output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decision &amp;amp; enrichment prep&lt;/strong&gt; — an LLM checks whether the classification has enough signals; if not, it suggests Bright Data queries (domains, keywords).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bright Data — Marketplace (list datasets)&lt;/strong&gt; — uses suggested queries to retrieve datasets to validate or enrich classification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enrichment cleaning&lt;/strong&gt; — function strips unnecessary fields (IDs) and normalizes dataset objects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge&lt;/strong&gt; — combines classification JSON with dataset results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final summarization (Gemini)&lt;/strong&gt; — produces final summary, recommended actions, and Google Sheets tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets operations&lt;/strong&gt; — a final chat model node or function maps final JSON to append/update rows in &lt;code&gt;Tasks&lt;/code&gt;, &lt;code&gt;DatasetMatches&lt;/code&gt;, and &lt;code&gt;EmailActions&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Example of what the workflow writes (example JSON)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Investment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"High"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OLITEF 2025 registration closing soon — investment education program from Tesouro Direto; consider applying before deadline."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"sender domain: tesourodireto.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"contains 'Inscrições' and deadline-like phrase"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"suggested_enrichments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"domain_lookup"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tesourodireto.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"verify official sender"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"web_search"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OLITEF 2025 Tesouro Direto inscrições"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"confirm deadline"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Investment,High"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"urgency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"immediate"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"create_task"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Review OLITEF registration page"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"urgency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"routine"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Bright Data usage (what I did)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Marketplace / list datasets&lt;/strong&gt; — query for company profiles, news, and web snapshots that match inferred domains/keywords from emails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool usage inside LLM&lt;/strong&gt; — the LLM is allowed to request Bright Data as a verification tool for low-confidence or Investment-class emails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters&lt;/strong&gt;: Bright Data adds real-time web signals (company pages, public announcements) to reduce false positives and raise model confidence.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to reproduce / run locally
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone repo and import &lt;code&gt;/workflows/n8n Email categorize automation.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add credentials: IMAP, Gemini (or other LLM), Bright Data (verified node), Google Sheets, Slack (optional).&lt;/li&gt;
&lt;li&gt;Adjust &lt;code&gt;Priority Rules&lt;/code&gt; (JSON/Set node) to include your high-priority senders &amp;amp; keywords.&lt;/li&gt;
&lt;li&gt;Run the workflow manually or enable schedule (every 8 hours → 3×/day) and test with sample messages.&lt;/li&gt;
&lt;li&gt;Export workflow JSON &amp;amp; Gist when submitting.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Challenges &amp;amp; learnings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tuning prompts is critical — very large prompts or mixed content sometimes returned noisy output; I solved that by enforcing strict JSON outputs and adding cleaning nodes.&lt;/li&gt;
&lt;li&gt;Bright Data Marketplace required trial &amp;amp; exploration — choosing the right dataset filters matters (domain-first approach helps).&lt;/li&gt;
&lt;li&gt;Doing this challenge was incredible, it was my first time using n8n and bright data and I couldn't be more impressed with the power of these tools together. One of the challenges I faced was using the Chat Model nodes, sometimes I asked too much or send a big prompt, and they didn't return useful insight or output. Another challenge was learning how to use bright data, like I said I've used that, so I didn't know what to do at first. :)
I am really happy with my project, of course there are things to improve, but it is a great start. I hope this project help someone else, feel free to reach out and talk about it. Not only that, but I love to learn, and that's a stunning topic to talk about!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Links &amp;amp; contact
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo&lt;/strong&gt;: &lt;a href="https://github.com/MatheusDSantossi/n8n-email-priority-agent" rel="noopener noreferrer"&gt;repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact&lt;/strong&gt;: Matheus Santos — feel free to reach out for questions or collaboration!&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>devchallenge</category>
      <category>n8nbrightdatachallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Automating Project Kickoff: Docs, Timeline &amp; Calendar with Runner H</title>
      <dc:creator>Matheus D. Santos</dc:creator>
      <pubDate>Mon, 07 Jul 2025 04:11:40 +0000</pubDate>
      <link>https://forem.com/matheusdsantossi/automating-project-kickoff-docs-timeline-calendar-with-runner-h-j3e</link>
      <guid>https://forem.com/matheusdsantossi/automating-project-kickoff-docs-timeline-calendar-with-runner-h-j3e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/runnerh"&gt;Runner H "AI Agent Prompting" Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What I Built
&lt;/h1&gt;

&lt;p&gt;I created a fully autonomous “project onboarding” workflow using Runner H that takes a plain-text &lt;code&gt;project_info.txt&lt;/code&gt; file as input and instantly generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive Technical Documentation&lt;/strong&gt; in Google Docs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured Development Schedule &amp;amp; Risk Log&lt;/strong&gt; in Google Sheets (with built‑in Gantt visualization)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar Events&lt;/strong&gt; for each project phase in Google Calendar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This solves the repetitive, time‑consuming task of setting up new projects, no manual copy‑paste, no toggling between tools. One Runner H run does it all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/fe8c72e216d24cea968965ba1343caf5"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Used Runner H
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Input parsing&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Prepared &lt;code&gt;project_info.txt&lt;/code&gt; with fields like Project Name, Description, Tech Stack, Modules, Phases &amp;amp; Owners.&lt;/li&gt;
&lt;li&gt;Runner H read and extracted every detail—no further prompts needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Docs generation&lt;/strong&gt; (@tool:Google Docs)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Created a “&amp;lt;Project Name&amp;gt; – Technical Documentation” Doc.&lt;/li&gt;
&lt;li&gt;Populated sections (Overview, Installation, Usage, Architecture with Mermaid diagram, API Reference, Changelog seeded from recent Git commits, Contributing Guidelines, Release Checklist).&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Schedule &amp;amp; Risk Log&lt;/strong&gt; (@tool:Google Sheets)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Generated a sheet titled “&amp;lt;Project Name&amp;gt; – Schedule &amp;amp; Risk Log” with two tabs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Schedule&lt;/strong&gt; (Phase, Start/End Date, Owner, Status) plus an automated Gantt chart.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk Log&lt;/strong&gt; (Risk Description, Severity, Owner, Mitigation Plan) with five AI‑inferred risks.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Calendar events&lt;/strong&gt; (@tool:Google Calendar)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Created kickoff events for each phase, assigned to the owner, with reminders.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Execution&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Pasted one concise prompt into Runner H, pointed it at my text file, and watched the sequence run start‑to‑finish.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reproducing this workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Author your &lt;code&gt;project_info.txt&lt;/code&gt; using the structured template below.&lt;/li&gt;
&lt;li&gt;In Runner H, paste the prompt (available in my repo or the Loom description).&lt;/li&gt;
&lt;li&gt;Point Runner H at your text file—no additional IDs or OAuth steps.&lt;/li&gt;
&lt;li&gt;Runner H will spin up Docs, Sheets, and Calendar events automatically.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are Runner H, an autonomous AI agent.
You have access to a text file named project_info.txt containing all project details.
Extract from that file and:

1. @tool:Google Docs – Create “&amp;lt;Project Name&amp;gt; – Technical Documentation” with full Markdown content:
   • Overview
   • Installation &amp;amp; Setup
   • Usage Examples
   • Architecture &amp;amp; Components (include Mermaid diagram)
   • API / Interface Reference
   • Changelog (seeded from last 5–10 Git commits)
   • Contributing Guidelines
   • Release Checklist

2. @tool:Google Sheets – Create “&amp;lt;Project Name&amp;gt; – Schedule &amp;amp; Risk Log” with two tabs:
   • Schedule: (Phase, Start Date, End Date, Owner, Status) + Gantt chart
   • Risk Log: (Risk Description, Severity, Owner, Mitigation Plan) with 5 AI‑generated risks

3. @tool:Google Calendar – Create kickoff events for each phase with owners and reminders.

When complete, output the URLs for the Doc, Sheet, and Calendar events.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use Case &amp;amp; Impact
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Startup teams&lt;/strong&gt; can kick off new features or products in seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consultants &amp;amp; agencies&lt;/strong&gt; standardize client onboarding without manual overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open‑source projects&lt;/strong&gt; ensure up‑to‑date docs and release plans at every commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By automating the entire setup—docs, schedule, risk management, and calendar invites—this workflow eliminates error‑prone copy‑pasting, accelerates project launches, and keeps everyone aligned from day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Social Love
&lt;/h3&gt;

&lt;p&gt;If you enjoyed this, I’d love your support! I shared it on X here: [&lt;a href="https://x.com/MSantos79880/status/1942073796518625785" rel="noopener noreferrer"&gt;https://x.com/MSantos79880/status/1942073796518625785&lt;/a&gt;]&lt;br&gt;
Feel free to leave a ❤️ or comment below.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>runnerhchallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
