<?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: Robert Ionut Fundulea</title>
    <description>The latest articles on DEV Community by Robert Ionut Fundulea (@robertionutfundulea).</description>
    <link>https://dev.to/robertionutfundulea</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%2F2557802%2Fdae0c516-ec84-4921-aab0-f83e72646799.png</url>
      <title>DEV Community: Robert Ionut Fundulea</title>
      <link>https://dev.to/robertionutfundulea</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robertionutfundulea"/>
    <language>en</language>
    <item>
      <title>Turn a recurring Codex task into a reviewable skill</title>
      <dc:creator>Robert Ionut Fundulea</dc:creator>
      <pubDate>Thu, 05 Nov 2026 15:34:28 +0000</pubDate>
      <link>https://dev.to/robertionutfundulea/turn-a-recurring-codex-task-into-a-reviewable-skill-2m0b</link>
      <guid>https://dev.to/robertionutfundulea/turn-a-recurring-codex-task-into-a-reviewable-skill-2m0b</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I am the maker of the paid Agent Craft Studio toolkit linked at the end. This article was prepared with AI assistance. The example is illustrative, not a measured customer result.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before packaging a recurring agent task, write down what a good result must preserve and what the agent should do when information is missing. That gives you something concrete to review each time you change the workflow.&lt;/p&gt;

&lt;p&gt;Here is a small example: turn rough client notes into a project brief for a developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Give the workflow a bounded job
&lt;/h2&gt;

&lt;p&gt;Use a brief like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Convert the supplied notes into a project brief containing the objective, audience, requested deliverables, existing stack, budget, timing and open questions. Preserve supplied amounts, currencies and dates. Mark missing information as unknown. Surface contradictions instead of choosing an answer silently. Do not create commitments for the client.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The task has a recognizable input and output. It also states decisions that remain with a person. You can review whether the output followed that contract without relying on how polished the prose sounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Separate stable instructions from project facts
&lt;/h2&gt;

&lt;p&gt;The reusable part is the method: what to extract, which fields to produce, and how to handle uncertainty. A client's budget, preferred stack and deadline belong in the current input.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.openai.com/plugins/concepts/skills" rel="noopener noreferrer"&gt;OpenAI’s skills documentation&lt;/a&gt; describes skills as instructions and resources for repeatable workflows. When building a skill, keep its purpose focused enough that the agent can tell when to use it. Supporting examples and reference material can explain the method without making every invocation carry every previous client's information.&lt;/p&gt;

&lt;p&gt;A useful maintenance question is: if I reuse this tomorrow for a different client, which facts must be replaced?&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make tool use part of the contract
&lt;/h2&gt;

&lt;p&gt;If the workflow reads from an MCP tool, specify the source it should consult and how to handle incomplete results. A returned document can support a brief; it does not automatically authorize sending the brief, changing a project or publishing a commitment.&lt;/p&gt;

&lt;p&gt;For this example, the first version can stop at a reviewable draft. If you later add a write operation, give that operation its own inputs, destination and verification step.&lt;/p&gt;

&lt;p&gt;Tool access and workflow instructions need to agree. An instruction that says to inspect an existing project cannot be completed if the assistant has no way to read that project.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Keep a few behavioral examples
&lt;/h2&gt;

&lt;p&gt;Start with cases that could change a real decision:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input case&lt;/th&gt;
&lt;th&gt;Behavior to inspect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No deadline is supplied&lt;/td&gt;
&lt;td&gt;The timing field remains unknown; the agent asks for it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two notes give different budgets&lt;/td&gt;
&lt;td&gt;Both values and their conflict are visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The notes specify EUR 800&lt;/td&gt;
&lt;td&gt;The brief preserves the amount and currency.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The project already uses React&lt;/td&gt;
&lt;td&gt;The brief records that fact without inventing a migration.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The notes request a landing page but no hosting&lt;/td&gt;
&lt;td&gt;Hosting remains an open question rather than a promised deliverable.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are proposed checks. They are not claims that a particular model or toolkit has passed them.&lt;/p&gt;

&lt;p&gt;After an instruction change, compare the new outputs against the same cases. Record what passed, what failed and what you did not rerun. A small case set helps reveal regressions; it does not prove every future request will work.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Ask for a reviewable handoff
&lt;/h2&gt;

&lt;p&gt;The final response should make the result easy to inspect:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Return the brief, list unresolved questions, and identify any conflicting facts. Report which checks you actually performed. Keep proposed next actions separate from actions already completed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That last distinction matters when a workflow grows from drafting into tool use. A prepared update and a saved update are different observed outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using a downloadable toolkit with AI assistance
&lt;/h2&gt;

&lt;p&gt;I packaged related workflows, editable source, examples and evaluation material in &lt;a href="https://robertionutfundulea.gumroad.com/l/agent-craft-studio?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=agent_craft_workflow" rel="noopener noreferrer"&gt;Agent Craft Studio&lt;/a&gt;. It is a paid downloadable software/documentation toolkit.&lt;/p&gt;

&lt;p&gt;After downloading it, a buyer can ask Codex to read the included START HERE guide and help with installation. This needs an assistant with authorized access to the local files and a terminal. An ordinary ChatGPT conversation does not itself install a local Codex plugin.&lt;/p&gt;

&lt;p&gt;Here is a prompt to adapt after downloading:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I downloaded Agent Craft Studio to [absolute ZIP path]. Help me install it in my local Codex setup. First inspect the archive entries and read the included START HERE and installation instructions. Check Codex plugin support and the Node.js version. Preserve the complete package structure. Explain the required changes and follow the documented installer steps; do not guess script names or commands. If a permission or manual step is required, tell me what it is. Verify the documented result, then tell me when to open a new Codex task. Report missing prerequisites or unverified steps honestly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The native plugin requires compatible Codex with plugin support and Node.js 24+. Windows is the tested platform described in the listing; other native-host installs are unverified. Creator-backed scaffolding and authoritative validation additionally require Python 3.11+ and the installed Codex system creator utilities. The separate ChatGPT companion is a manual copy-and-paste kit. AI accounts and usage are separate.&lt;/p&gt;

&lt;p&gt;AI assistance does not guarantee an unattended installation. The assistant still needs access, the required software and the package's actual instructions.&lt;/p&gt;

&lt;p&gt;For the example above, which missing fact would you want the brief to flag before a developer starts work?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>agents</category>
      <category>testing</category>
    </item>
    <item>
      <title>Four lessons from building AI, education, and healthcare products with Next.js</title>
      <dc:creator>Robert Ionut Fundulea</dc:creator>
      <pubDate>Mon, 27 Jul 2026 19:20:30 +0000</pubDate>
      <link>https://dev.to/robertionutfundulea/four-lessons-from-building-ai-education-and-healthcare-products-with-nextjs-3nm7</link>
      <guid>https://dev.to/robertionutfundulea/four-lessons-from-building-ai-education-and-healthcare-products-with-nextjs-3nm7</guid>
      <description>&lt;p&gt;Over the last few years, I have built products in very different domains: generative AI, job search, education, and clinic operations.&lt;/p&gt;

&lt;p&gt;Although the interfaces and users are different, several engineering lessons appeared repeatedly.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Multiple AI features still need to feel like one product
&lt;/h2&gt;

&lt;p&gt;Klyro brings together streamed chat, cited web search, image analysis, and image generation.&lt;/p&gt;

&lt;p&gt;The difficult part was not simply connecting several AI services. It was creating one consistent experience around them: shared authentication, one responsive interface, predictable errors, subscriptions, billing, and a transparent credit balance.&lt;/p&gt;

&lt;p&gt;For every operation, Klyro estimates the cost, reserves the required credits, and settles the balance according to actual usage. When an operation fails, the reserved credits are released.&lt;/p&gt;

&lt;p&gt;Live product:&lt;br&gt;
&lt;a href="https://www.klyroai.net" rel="noopener noreferrer"&gt;https://www.klyroai.net&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. AI should assist important decisions, not hide them
&lt;/h2&gt;

&lt;p&gt;RoleMint is a job-search copilot that discovers opportunities, compares them with a candidate’s profile, generates ATS-oriented materials, and organizes applications in a visual pipeline.&lt;/p&gt;

&lt;p&gt;The user remains responsible for reviewing and approving every generated application. That human checkpoint is important when AI-generated content represents someone professionally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rolemint.vercel.app" rel="noopener noreferrer"&gt;https://rolemint.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A learning platform starts with its data model
&lt;/h2&gt;

&lt;p&gt;BrightLearn supports lessons, categories, tags, quizzes, questions, answers, attempts, scoring, and progress history.&lt;/p&gt;

&lt;p&gt;It was built with Next.js, TypeScript, Prisma, PostgreSQL, Clerk, and AI integrations. Designing the relationships between learning content and user attempts was just as important as building the interface.&lt;/p&gt;

&lt;p&gt;BrightLearn is open source:&lt;br&gt;
&lt;a href="https://github.com/RobertIonutF/brightlearn" rel="noopener noreferrer"&gt;https://github.com/RobertIonutF/brightlearn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Application:&lt;br&gt;
&lt;a href="https://medilearn-rose.vercel.app" rel="noopener noreferrer"&gt;https://medilearn-rose.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Operational software needs traceability
&lt;/h2&gt;

&lt;p&gt;FizioKinetoMaxim is a protected CRM for clinic operations. It centralizes patients, appointments, medical and administrative activity, CAS cases, exercise programs, feedback, reports, incidents, complaints, and audit history.&lt;/p&gt;

&lt;p&gt;The application uses Next.js, TypeScript, and Convex for reactive data and real-time workflows. Role-based access and traceability were essential because the application handles sensitive operational processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fiziokineto-maxim-crm.vercel.app" rel="noopener noreferrer"&gt;https://fiziokineto-maxim-crm.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Building similar products
&lt;/h2&gt;

&lt;p&gt;I work on complete SaaS products, AI integrations, CRM systems, educational platforms, and operational dashboards.&lt;/p&gt;

&lt;p&gt;If you need something similar, you can contact me through LinkedIn:&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/robertionutfundulea/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/robertionutfundulea/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also support my independent projects here:&lt;br&gt;
&lt;a href="https://buymeacoffee.com/robertfundulea" rel="noopener noreferrer"&gt;https://buymeacoffee.com/robertfundulea&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>ai</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>A Bug Triage Workflow for AI That Does Not Invent the Root Cause</title>
      <dc:creator>Robert Ionut Fundulea</dc:creator>
      <pubDate>Tue, 21 Jul 2026 18:19:17 +0000</pubDate>
      <link>https://dev.to/robertionutfundulea/a-bug-triage-workflow-for-ai-that-does-not-invent-the-root-cause-1922</link>
      <guid>https://dev.to/robertionutfundulea/a-bug-triage-workflow-for-ai-that-does-not-invent-the-root-cause-1922</guid>
      <description>&lt;p&gt;AI can make bug triage faster, but it also makes one dangerous failure mode easier: turning a plausible explanation into a confident diagnosis before the failure has been reproduced.&lt;/p&gt;

&lt;p&gt;The useful question is not “Can the model suggest a cause?” It usually can. The question is: &lt;strong&gt;what evidence would let another developer review that cause?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is the workflow I now use for AI-assisted bug work.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Turn the report into an actionable record
&lt;/h2&gt;

&lt;p&gt;Capture the build, environment, user path, expected behavior, actual behavior, frequency, impact, and any existing evidence.&lt;/p&gt;

&lt;p&gt;Keep observations separate from interpretations. “The request returned 500 at 14:32” is evidence. “The database timed out” is still a hypothesis unless the logs support it.&lt;/p&gt;

&lt;p&gt;If a material fact is missing, the workflow should ask for it. It should not silently fill the gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Reproduce—or document bounded non-reproduction
&lt;/h2&gt;

&lt;p&gt;A good reproduction record includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the exact setup and version;&lt;/li&gt;
&lt;li&gt;inputs and relevant timestamps;&lt;/li&gt;
&lt;li&gt;ordered actions;&lt;/li&gt;
&lt;li&gt;expected and actual output;&lt;/li&gt;
&lt;li&gt;logs, screenshots, or traces;&lt;/li&gt;
&lt;li&gt;the control case that still works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the issue does not reproduce, return the matrix that was tested and name the next signal needed. “Could not reproduce” is not the same as “the bug is invalid.”&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Compare the failing path with a working control
&lt;/h2&gt;

&lt;p&gt;A nearby working path is often more useful than reading the entire codebase.&lt;/p&gt;

&lt;p&gt;Consider a fictional scheduling defect: patients can double-book a physical slot near the spring daylight-saving transition, but only when rescheduling in Europe/Bucharest.&lt;/p&gt;

&lt;p&gt;The new-booking path normalizes local time through a timezone-aware scheduling boundary. The reschedule path compares a naive local value directly with stored UTC instants.&lt;/p&gt;

&lt;p&gt;That comparison gives us something much stronger than “timezones are hard”: a narrow difference between a failing path and a working control.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. State the smallest evidence-supported cause
&lt;/h2&gt;

&lt;p&gt;A useful cause statement has three parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Condition:&lt;/strong&gt; rescheduling across the DST boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mechanism:&lt;/strong&gt; a naive local timestamp is compared with stored UTC instants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; the failing path skips normalization while the working booking path uses it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Also record alternatives that were ruled out and those that remain untested. This prevents a narrow finding from becoming an unsupported claim about the whole system.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Repair the authority boundary, not the symptom
&lt;/h2&gt;

&lt;p&gt;The minimal repair is to route rescheduling through the existing timezone-aware normalization function before collision checks.&lt;/p&gt;

&lt;p&gt;It is &lt;em&gt;not&lt;/em&gt; to weaken collision rules globally, disable validation near DST, or rewrite every scheduling path.&lt;/p&gt;

&lt;p&gt;Minimal does not mean careless. It means correcting the supported cause with the smallest reasonable regression surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Protect the invariant
&lt;/h2&gt;

&lt;p&gt;The regression test should fail for the original defect and prove the behavior that matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;equivalent instants cannot reserve the same physical slot;&lt;/li&gt;
&lt;li&gt;the DST gap is handled according to the product rule;&lt;/li&gt;
&lt;li&gt;adjacent slots still work;&lt;/li&gt;
&lt;li&gt;ordinary dates remain unchanged;&lt;/li&gt;
&lt;li&gt;the new-booking control path stays green.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then add rollout signals and a recovery path appropriate to the risk. A local test does not prove production repair.&lt;/p&gt;

&lt;h2&gt;
  
  
  A compact review checklist
&lt;/h2&gt;

&lt;p&gt;Before accepting an AI-assisted diagnosis, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do we know the exact environment and build?&lt;/li&gt;
&lt;li&gt;Is expected behavior stated independently of the implementation?&lt;/li&gt;
&lt;li&gt;Was the failure reproduced, or was non-reproduction bounded?&lt;/li&gt;
&lt;li&gt;Is there a working control path?&lt;/li&gt;
&lt;li&gt;Does the cause statement connect condition, mechanism, and evidence?&lt;/li&gt;
&lt;li&gt;Does the proposed change preserve unrelated policy?&lt;/li&gt;
&lt;li&gt;Does the regression test protect the invariant rather than mirror the code?&lt;/li&gt;
&lt;li&gt;Are rollout and recovery signals explicit?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI is valuable here as a structure and comparison tool. It can organize evidence, propose a reproduction matrix, compare paths, and draft regression cases. It should not claim a root cause, test result, or production behavior it has not observed.&lt;/p&gt;

&lt;p&gt;I published a free, read-only walkthrough with the worked timezone example here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codecurrent-studio.vercel.app/guides/ai-bug-triage-workflow/?utm_source=devto&amp;amp;utm_medium=content&amp;amp;utm_campaign=codecurrent_launch_2026_07&amp;amp;utm_content=bug_triage_article_01" rel="noopener noreferrer"&gt;AI Bug Triage Workflow: From Report to Minimal Fix&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built CodeCurrent Studio and may benefit if someone buys one of its workflow packs. The walkthrough above is free. CodeCurrent Studio is independent and is not affiliated with or endorsed by any AI model vendor.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>programming</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
