<?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: Pew Pew Prompts</title>
    <description>The latest articles on DEV Community by Pew Pew Prompts (@pewpewprompts).</description>
    <link>https://dev.to/pewpewprompts</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%2F1517366%2F2a6655d3-51ee-457c-be4c-239b0a0cd85f.png</url>
      <title>DEV Community: Pew Pew Prompts</title>
      <link>https://dev.to/pewpewprompts</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pewpewprompts"/>
    <language>en</language>
    <item>
      <title>🤖 How to Force Cursor AI Agents into 🧑‍🎓 Always following Project Rules using 💡 Auto-Rule Generation Techniques</title>
      <dc:creator>Pew Pew Prompts</dc:creator>
      <pubDate>Wed, 16 Apr 2025 20:53:03 +0000</pubDate>
      <link>https://dev.to/pewpewprompts/how-to-force-cursor-ai-agents-into-always-following-project-rules-using-auto-rule-2ilk</link>
      <guid>https://dev.to/pewpewprompts/how-to-force-cursor-ai-agents-into-always-following-project-rules-using-auto-rule-2ilk</guid>
      <description>&lt;p&gt;This tutorial guides you through creating structured Cursor rule files (&lt;code&gt;.mdc&lt;/code&gt;) based on documented best practices. We will use a dedicated AI agent within Cursor, configured specifically for formatting these rules correctly. Following these steps ensures your rules are consistent and effectively guide the AI's behavior in your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Cursor AI code editor installed.&lt;/li&gt;
&lt;li&gt;  Basic understanding of Cursor's features (like chat and repo prompts).&lt;/li&gt;
&lt;li&gt;  A set of best practices you want to enforce, documented preferably in a Markdown file within your project.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1️⃣ Step 1: Obtain the Rule Generation Rule
&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.amazonaws.com%2Fuploads%2Farticles%2F9mwgsnuva1zar5db0q3j.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%2F9mwgsnuva1zar5db0q3j.png" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core of this process relies on a &lt;a href="https://github.com/bmadcode/cursor-custom-agents-rules-generator/blob/main/.cursor/rules/core-rules/rule-generating-agent.mdc" rel="noopener noreferrer"&gt;specific Cursor rule&lt;/a&gt; designed to guide the AI in creating &lt;em&gt;other&lt;/em&gt; rules correctly. Think of it as a meta-rule: a rule about how to make rules.&lt;/p&gt;

&lt;p&gt;This isn't a separate "agent" in the typical sense, but rather a standard Cursor rule file (&lt;code&gt;.mdc&lt;/code&gt;) containing detailed instructions (its system prompt) on how to format and structure new rule files based on user input or best practices documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; Adding this rule allows Cursor to efficiently create and update &lt;em&gt;other&lt;/em&gt; rules for your project whenever you ask it to, ensuring consistency by always referencing these formatting guidelines. To do so follow the following steps:&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%2Fsqnd7up0ocwvjxq6z7hc.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%2Fsqnd7up0ocwvjxq6z7hc.png" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Create the directory &lt;code&gt;.cursor/rules/core-rules/&lt;/code&gt; if it doesn't exist.&lt;/li&gt;
&lt;li&gt; Save the content below into a file named &lt;code&gt;.cursor/rules/core-rules/rule-generating-agent.mdc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;(Optional) Cursor has a built in view for showing cursor rules, unfortunately this view may cause updates, by agents, to be lost. To prevent this add the following to your cursor settings, so the files get opened like regular files:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"workbench.editorAssociations": {
  "*.mdc": "default"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this tutorial we will reference the content of this rule file as instructions loaded directly into the chat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credits:&lt;/strong&gt; The original rule definition used here comes from the &lt;a href="https://github.com/bmadcode/cursor-custom-agents-rules-generator/tree/main" rel="noopener noreferrer"&gt;&lt;code&gt;cursor-custom-agents-rules-generator&lt;/code&gt;&lt;/a&gt; project. The project gets updated frequently and the rule you see here might be outdated by the time your read this. You can find the &lt;a href="https://github.com/bmadcode/cursor-custom-agents-rules-generator/blob/main/.cursor/rules/core-rules/rule-generating-agent.mdc" rel="noopener noreferrer"&gt;latest version here&lt;/a&gt;. Many thanks to &lt;a href="https://github.com/bmadcode" rel="noopener noreferrer"&gt;BMad&lt;/a&gt; for sharing this useful resource рџ™Џ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content for &lt;code&gt;rule-generating-agent.mdc&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
description: "This rule is essential for maintaining consistency and quality in rule creation across the codebase. It must be followed whenever: (1) A user requests a new rule to be created, (2) An existing rule needs modification, (3) The user asks to remember certain behaviors or patterns, or (4) Future behavior changes are requested. This rule ensures proper organization, clear documentation, and effective rule application by defining standard formats, naming conventions, and content requirements. It's particularly crucial for maintaining the rule hierarchy, ensuring rules are discoverable by the AI, and preserving the effectiveness of the rule-based system. The rule system is fundamental to project consistency, code quality, and automated assistance effectiveness."
globs: 
alwaysApply: true
---
# Cursor Rules Format

## Template Structure for Rules Files

---
description: `Comprehensive description that provides full context and clearly indicates when this rule should be applied. Include key scenarios, impacted areas, and why following this rule is important. While being thorough, remain focused and relevant. The description should be detailed enough that the agent can confidently determine whether to apply the rule in any given situation.`
globs: .cursor/rules/**/*.mdc OR blank
alwaysApply: {true or false}
---

# Rule Title

## Critical Rules

- Concise, bulleted list of actionable rules the agent MUST follow

## Examples

&amp;amp;lt;example&amp;amp;gt;
{valid rule application}
&amp;amp;lt;/example;&amp;amp;gt;

&amp;amp;lt;example type="invalid";&amp;amp;gt;
{invalid rule application}
&amp;amp;lt;/example;&amp;amp;gt;

### Organizational Folders (Create if non existent)
All rules files will be under an organizational folder:
- .cursor/rules/core-rules - rules related to cursor agent behavior or rule generation specifically
- .cursor/rules/my-rules - gitignore in a shared repo, rules specifically for ME only
- .cursor/rules/global-rules - these will be rules that are ALWAYS applied to every chat and cmd/ctrl-k context
- .cursor/rules/testing-rules - rules about testing
- .cursor/rules/tool-rules - rules specific to different tools, such as git, linux commands, direction of usage of MCP tools
- .cursor/rules/ts-rules - typescript language specific rules
- .cursor/rules/py-rules - python specific rules
- .cursor/rules/ui-rules - rules about html, css, react
* create new folders under .cursor/rules/ as needed following similar grouping conventions,
    - for example `.cursor/rules/cs-rules` if we started using c# in a project

## Glob Pattern Examples
Common glob patterns for different rule types:
- Core standards: .cursor/rules/*.mdc
- Language rules: *.cs, *.cpp
- Testing standards: *.test.ts, *.test.js
- React components: src/components/**/*.tsx
- Documentation: docs/**/*.md, *.md
- Configuration files: *.config.js
- Build artifacts: dist/**/*
- Multiple extensions: *.js, *.ts, *.tsx
- Multiple patterns: dist/**/*.*, docs/**/*.md, *test*.*

## Critical Rules
- Rule files will be located and named ALWAYS as: `.cursor/rules/{organizational-folder}/rule-name-{auto|agent|manual|always}.mdc`
- Rules will NEVER be created anywhere other than .cursor/rules/**
- You will always check to see if there is an existing rule to update under all .cursor/rules sub-folders
- FrontMatter Rules Types:
    - The front matter section must always start the file and include all 3 fields, even if the field value will be blank - the types are:
        - Manual Rule: IF a Manual rule is requested - description and globs MUST be blank and alwaysApply: false and filename ends with -manual.mdc.
        - Auto Rule: IF a rule is requested that should apply always to certain glob patterns (example all typescript files or all markdown files) - description must be blank, and alwaysApply: false and filename ends with -auto.mdc.
        - Always Rule: Global Rule applies to every chat and cmd/ctrl-k - description and globs blank, and alwaysApply: true  and filename ends with -always.mdc.
        - Agent Select Rule: The rule does not need to be loaded into every chat thread, it serves a specific purpose. The description MUST provide comprehensive context about when to apply the rule, including scenarios like code changes, architecture decisions, bug fixes, or new file creation. Globs blank, and alwaysApply:false and filename ends with -agent.mdc
- For Rule Content - focus on actionable, clear directives without unnecessary explanation
- When a rule will only be used sometimes (alwaysApply: false) the description MUST provide enough context for the AI to confidently determine when to load and apply the rule
- Use Concise Markdown Tailored to Agent Context Window usage
- Always indent content within XML Example section with 2 spaces
- Emojis and Mermaid diagrams are allowed and encouraged if it is not redundant and better explains the rule for the AI comprehension
- While there is no strict line limit, be judicious with content length as it impacts performance. Focus on essential information that helps the agent make decisions
- Always include a valid and invalid example
- NEVER use quotes around glob patterns, NEVER group glob extensions with `{}`
- If the request for a rule or a future behavior change includes context of a mistake is made, this would be great to use in the example for the rule
- After rule is created or updated, Respond with the following:
    - AutoRuleGen Success: path/rule-name.mdc
    - Rule Type: {Rule Type}
    - Rule Description: {The exact content of the description field}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📋 Step 2: Document Your Best Practices
&lt;/h2&gt;

&lt;p&gt;Before creating rules, you need the content for them. Gather the specific standards or best practices you want the AI to follow for a particular domain (like TypeScript coding standards, testing procedures, or commit message formats).&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Tip: Use AI for Research and Generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can leverage AI models with strong research capabilities (like &lt;a href="https://www.perplexity.ai/" rel="noopener noreferrer"&gt;Perplexity&lt;/a&gt;, &lt;a href="https://claude.ai/" rel="noopener noreferrer"&gt;Claude 3 Opus&lt;/a&gt;, &lt;a href="https://openai.com/gpt-4/" rel="noopener noreferrer"&gt;GPT-4&lt;/a&gt;, or &lt;a href="https://grok.x.ai/" rel="noopener noreferrer"&gt;Grok&lt;/a&gt;) to help you generate this best practices document. Provide the AI with context about your project and ask it to research and compile relevant standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Prompt for AI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Objective: Research and compile a list of best practices for {TECHNOLOGY_OR_DOMAIN} within the context of a {PROJECT_TYPE} project.

Context:
-   Our project uses: {LIST_KEY_TECHNOLOGIES_FRAMEWORKS}
-   Our team size is: {TEAM_SIZE}
-   Key priorities are: {LIST_PROJECT_PRIORITIES e.g., maintainability, performance, security}

Instructions:
1.  Research established best practices for {TECHNOLOGY_OR_DOMAIN}.
2.  Focus on practices relevant to {PROJECT_TYPE} and our priorities ({LIST_PROJECT_PRIORITIES}).
3.  Organize the findings into clear, actionable points suitable for documentation.
4.  Format the output as a Markdown document with appropriate headings.

---
Variable Definitions:
TECHNOLOGY_OR_DOMAIN = "TypeScript" // e.g., "Python", "React", "API Design", "Git Commit Messages"
PROJECT_TYPE = "web application" // e.g., "CLI tool", "mobile app", "data science project"
LIST_KEY_TECHNOLOGIES_FRAMEWORKS = "Node.js, Express, PostgreSQL" // e.g., "React, Next.js, Tailwind CSS"
TEAM_SIZE = "small (3-5 developers)" // e.g., "large (&amp;gt;10 developers)", "solo developer"
LIST_PROJECT_PRIORITIES = "code readability, test coverage, consistent error handling"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Create a Source Document:&lt;/strong&gt; Compile these best practices into a clear document within your project. A Markdown file is recommended. For example, create a file named &lt;code&gt;docs/typescript-best-practices.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Write Down Practices:&lt;/strong&gt; List each best practice clearly.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example content for &lt;code&gt;docs/your-best-practices.md&lt;/code&gt;:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Project Best Practices

## Use Consistent Naming Conventions
Variables, functions, and classes should follow the project's agreed-upon naming style (e.g., camelCase for variables, PascalCase for classes).

## Add Documentation Comments
Public functions and complex logic blocks should have clear documentation comments explaining their purpose, parameters, and return values.

## Handle Errors Gracefully
Anticipate potential errors and implement proper error handling (e.g., try-catch blocks, checking return values) instead of letting the application crash.
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ✨ Step 3: Generate Rules Using the Agent
&lt;/h2&gt;

&lt;p&gt;Now, you will instruct the Rule Formatting Agent (from Step 1) to create the &lt;code&gt;.mdc&lt;/code&gt; rule files based on your best practices document (from Step 2).&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%2F1j8agwt4uzel44bhrzfp.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%2F1j8agwt4uzel44bhrzfp.png" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Open Cursor Chat/Repo Prompt:&lt;/strong&gt; Start a new chat and select all files.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Reference Agent and Document:&lt;/strong&gt; Make sure the Rule Formatting Agent is active (e.g., by mentioning &lt;code&gt;@rule-generating-agent&lt;/code&gt; if you saved its prompt as a rule). Also, provide your best practices document as context (e.g., &lt;code&gt;@docs/typescript-best-practices.md&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&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%2Fyxbypojeeyr4xk6cgw2n.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%2Fyxbypojeeyr4xk6cgw2n.png" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Instruct the Agent:&lt;/strong&gt; Tell the agent exactly what to do using a detailed prompt. This prompt should reference the agent, the best practices document (using a variable), and specify the desired output (rule type, directory using a variable, naming, format adherence).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Prompt to Copy/Paste:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Note: Fill in the variable definitions at the end of this prompt before sending it.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Objective: Generate individual Agent Select Cursor rules based on the best practices outlined in the referenced document (`@{BEST_PRACTICES_DOC_PATH}`).

Instructions:
1.  For each distinct best practice found in the document, create a separate Agent Select rule file (`.mdc`).
2.  Follow all formatting and content requirements defined in your system prompt (`@rule-generating-agent`) for creating Agent Select rules.
3.  After generation, confirm success by listing the paths of the created rule files.

---
Variable Definitions:
BEST_PRACTICES_DOC_PATH =

@rule-generating-agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review Agent Output:&lt;/strong&gt; The agent will respond with the necessary file operations (e.g., &lt;code&gt;&amp;lt;file path="..." action="create"&amp;gt;...&lt;/code&gt;) to generate the &lt;code&gt;.mdc&lt;/code&gt; files. Review these operations before applying them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Apply Changes:&lt;/strong&gt; If the output looks correct, allow Cursor to apply the changes, creating the new rule files in your specified directory.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fm00p8sp1uhtsg3st9ugm.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%2Fm00p8sp1uhtsg3st9ugm.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might need to restart cursor or open the files for them to be indexed and take effect. Et voila. You have successfully generated structured Cursor rules from your documented best practices. By separating the &lt;em&gt;knowledge gathering&lt;/em&gt; (Step 2) from the &lt;em&gt;rule formatting&lt;/em&gt; (Step 3) and using a dedicated agent for formatting, you ensure consistency and maintainability in your AI-assisted development workflow. These rules will now automatically be referenced by Cursor's AI according to your project's standards.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Local Markdown Task Management For You &amp; Your Agent with pewPewCLI ♡</title>
      <dc:creator>Pew Pew Prompts</dc:creator>
      <pubDate>Wed, 16 Apr 2025 16:14:20 +0000</pubDate>
      <link>https://dev.to/pewpewprompts/local-markdown-task-management-for-you-your-agent-with-pewpewcli-3lpe</link>
      <guid>https://dev.to/pewpewprompts/local-markdown-task-management-for-you-your-agent-with-pewpewcli-3lpe</guid>
      <description>&lt;p&gt;Hey guys &amp;amp; gals 😁🤙🤙 It's been a while since my last post. Much has changed since then and so has my way of working with Cursor and other AI tools. I'm here to share a very cool tool I've been working on and with:&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%2F6fchcv6a9ni5iumkpiw1.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.amazonaws.com%2Fuploads%2Farticles%2F6fchcv6a9ni5iumkpiw1.gif" alt="pew next task" width="200" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TL;DR; pewPewCLI let's you specify where you keep your local task file(s) in a config yaml, after which you (and your agent) can use commands like &lt;code&gt;pew next task&lt;/code&gt; to complete any current task and output the next.&lt;/p&gt;

&lt;p&gt;🌍 &lt;a href="https://www.ultrawideturbodevs.com/pewpewcli-agents-fav-dev-tool/" rel="noopener noreferrer"&gt;Full Guide&lt;/a&gt;&lt;br&gt;
🔗 &lt;a href="https://github.com/ultrawideturbodev/pewPewCLI" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;
📦 &lt;a href="https://www.npmjs.com/package/pew-pew-cli" rel="noopener noreferrer"&gt;NPM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 FYI: All three pages have proper readme with video / gif examples, which unfortunately I can't all post here due to platform size limitations.&lt;/p&gt;

&lt;p&gt;Like many of you (I think) I've been playing around with hundreds of different combinations of prompts, rules, methods, strategies, etc. trying to find the perfect workflow / combination of methods and tools. I think I've kind of found it (for now 😅). It consists of three parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Pre-planning (instructions + context) with &lt;a href="https://repoprompt.com/" rel="noopener noreferrer"&gt;Repo Prompt&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;2. Planning with &lt;a href="https://aistudio.google.com/prompts/new_chat" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; (Gemini 2.5 Pro, or any model really)&lt;/li&gt;
&lt;li&gt;3. Execution with Cursor and my markdown task management tool &lt;a href="https://www.ultrawideturbodevs.com/pewpewcli-agents-fav-dev-tool/" rel="noopener noreferrer"&gt;pewPewCLI&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The end result of steps 1 and 2 is a plan to execute on your request in the form of a markdown file with unchecked checkboxes for your tasks. I won't go to deep into steps 1 and 2 for now. I'm in the process of making a couple videos showcasing the exact steps which I'll post in this thread when I have them.&lt;/p&gt;

&lt;p&gt;If you have no idea how to do steps 1 and 2, try to follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. 📦 &lt;a href="https://repoprompt.com/" rel="noopener noreferrer"&gt;Download RepoPrompt&lt;/a&gt; - you'll use this to gather context, if you don't want to use RepoPrompt look at alternatives like &lt;a href="https://github.com/kleneway/pastemax" rel="noopener noreferrer"&gt;Pastemax&lt;/a&gt; or &lt;a href="https://repomix.com/" rel="noopener noreferrer"&gt;Repomix&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;2. 🤖 &lt;a href="https://github.com/ultrawideturbodev/ultra-wide-turbo-workspace/blob/main/developer/prompts/you-are-a-requirements-expert-v2.md" rel="noopener noreferrer"&gt;You Are A Requirements Expert&lt;/a&gt; - Set this as your system/meta prompt.&lt;/li&gt;
&lt;li&gt;3. 📝 &lt;a href="https://github.com/ultrawideturbodev/ultra-wide-turbo-workspace/blob/main/developer/prompts/plx-create-plan.md" rel="noopener noreferrer"&gt;Please Create Plan&lt;/a&gt; - Use this as a conversation starter and wrapper around your request&lt;/li&gt;
&lt;li&gt;4. 📖 &lt;a href="https://www.youtube.com/watch?v=G4_ByQgsvfw" rel="noopener noreferrer"&gt;Building Context with Repo Prompt&lt;/a&gt; - Watch this, put everything together and press the copy button. In case you're not using RepoPrompt, find some way to put it all together. &lt;/li&gt;
&lt;li&gt;5. 🤖 &lt;a href="https://aistudio.google.com/prompts/new_chat" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; - Go here and paste in everything, optionally answer some questions and then copy the markdown plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most important thing is you have a markdown task plan that you can use. Once you have that go into your project in Cursor. Install and init the pew pew cli using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pew-pew-cli &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pew init &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, then, then 😁 use &lt;code&gt;pew paste tasks&lt;/code&gt; and it will paste it in your local task file (which you can edit in &lt;code&gt;.pew/config/paths.yaml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then instruct your agent to start working on the task file using nothing but &lt;code&gt;pew next task&lt;/code&gt;. Use this &lt;a href="https://github.com/ultrawideturbodev/ultra-wide-turbo-workspace/blob/main/developer/prompts/plx-develop-tasks.md" rel="noopener noreferrer"&gt;plx-develop-tasks.md Prompt&lt;/a&gt; if you want. The tool will then automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete your current task&lt;/li&gt;
&lt;li&gt;Output only the relevant task&lt;/li&gt;
&lt;li&gt;Only work and focus on the relevant task&lt;/li&gt;
&lt;li&gt;Follow the plan rigorously&lt;/li&gt;
&lt;li&gt;Show progress &amp;amp; completion status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This has been incredibly efficent for me, resulting in doing up to 80% of my work as freelance developer with this workflow. Not saying it's perfect or that it will one shot everything you put into it, but it comes very close. And pretty much always when things go wrong it's because I didn't check the plan well enough or I didn't give enough context.&lt;/p&gt;

&lt;p&gt;I'd love for you to check it out. There's also a very cool feature which allows you to make QA-checklists, pre-checklists, after task checklists. Kind of like a task pipeline, which you can reuse everytime.&lt;/p&gt;

&lt;p&gt;If you want to reset them just use &lt;code&gt;pew reset tasks&lt;/code&gt; and it will ask you which files to reset.&lt;/p&gt;

&lt;p&gt;It's still early in development so there are a few bugs here and there. I'm aware of those and fixing them asap. I originally made this in python, but decided to refactor it when I dedicded to share it. Anyway, hope it brings much productivity and efficiency. Feel free to contact me for anything through this post or other channels. I'll be making updates, videos and other stuff surrounding this workflow and tools and will try to keep this thread updated.&lt;/p&gt;

&lt;p&gt;For easy reference I'll end this post with the current readme of the tool. Thank you for reading. Pew pew 🔫😁🤙&lt;/p&gt;

&lt;p&gt;🌍 &lt;a href="https://www.ultrawideturbodevs.com/pewpewcli-agents-fav-dev-tool/" rel="noopener noreferrer"&gt;Full Guide&lt;/a&gt;&lt;br&gt;
🔗 &lt;a href="https://github.com/ultrawideturbodev/pewPewCLI" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;
📦 &lt;a href="https://www.npmjs.com/package/pew-pew-cli" rel="noopener noreferrer"&gt;NPM&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  pewPewCLI ❤️ Agents' Fav Dev Tool 🔫
&lt;/h1&gt;

&lt;p&gt;Lightweight CLI tool that enables collaborative local task file management between developers and AI agents.&lt;/p&gt;
&lt;h2&gt;
  
  
  💻 Install
&lt;/h2&gt;

&lt;p&gt;Ensure you have Node.js and npm installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pew-pew-cli &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pew init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ Configuration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Local:&lt;/strong&gt; &lt;code&gt;.pew/config/&lt;/code&gt; (specific to the current project/directory)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Global:&lt;/strong&gt; &lt;code&gt;~/.pew/config/&lt;/code&gt; (user-level settings)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;paths.yaml&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# List of files scanned by 'pew next task' and offered by 'pew reset tasks'&lt;/span&gt;
&lt;span class="c1"&gt;# Processed in the order listed. Absolute paths also work.&lt;/span&gt;
&lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;relative/path/to/another/tasks/file.md&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.pew/tasks.md&lt;/span&gt;
  &lt;span class="c1"&gt;# - /absolute/path/to/tasks.md&lt;/span&gt;

&lt;span class="c1"&gt;# Optional: Default target file for 'pew paste tasks'.&lt;/span&gt;
&lt;span class="c1"&gt;# If omitted, defaults to the first path listed under 'tasks:'.&lt;/span&gt;
&lt;span class="na"&gt;paste-tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.pew/tasks.md&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📝 Commands
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Options&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pew init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Initialize the &lt;code&gt;pewPewCLI&lt;/code&gt; project structure in the current directory.&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;-f, --force&lt;/code&gt;: Force initialization even if &lt;code&gt;.pew&lt;/code&gt; directory exists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pew set path&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set a configuration value for a path (currently only &lt;code&gt;tasks&lt;/code&gt;).&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;--field &amp;lt;field&amp;gt;&lt;/code&gt;: Field to set (only &lt;code&gt;tasks&lt;/code&gt;).&lt;br&gt;&lt;code&gt;--value &amp;lt;value&amp;gt;&lt;/code&gt;: Path value to set.&lt;br&gt;&lt;code&gt;-g, --global&lt;/code&gt;: Set in global config (&lt;code&gt;~/.pew&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pew paste tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Paste clipboard content into the configured task file.&lt;/td&gt;
&lt;td&gt; Paste mode (&lt;code&gt;--override&lt;/code&gt;, &lt;code&gt;--append&lt;/code&gt;, &lt;code&gt;--insert&lt;/code&gt;). Prompts if omitted.&lt;br&gt;&lt;code&gt;--path &amp;lt;value&amp;gt;&lt;/code&gt;: Specify target file path, overriding config.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pew next task&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Marks the current task (&lt;code&gt;👉&lt;/code&gt;) complete and displays the next available task.&lt;/td&gt;
&lt;td&gt;&lt;em&gt;None&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pew reset tasks&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Uncheck all completed tasks (&lt;code&gt;[x]&lt;/code&gt;) in configured task files interactively.&lt;/td&gt;
&lt;td&gt;&lt;em&gt;None&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pew update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Check for updates and install the latest version of &lt;code&gt;pew-pew-cli&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;em&gt;None&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  📂 &lt;code&gt;pew init&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Creates the &lt;code&gt;.pew&lt;/code&gt; directory and default configuration files (&lt;code&gt;.pew/config/paths.yaml&lt;/code&gt;, &lt;code&gt;.pew/tasks.md&lt;/code&gt;) in the current directory. It will prompt for the primary tasks file path unless &lt;code&gt;--force&lt;/code&gt; is used.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Interactive initialization&lt;/span&gt;
pew init

&lt;span class="c"&gt;# Force initialization without prompts (uses defaults)&lt;/span&gt;
pew init &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fvpauaf5mnf9kwzdm3biy.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.amazonaws.com%2Fuploads%2Farticles%2Fvpauaf5mnf9kwzdm3biy.gif" alt="pew init" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📂 &lt;code&gt;pew paste tasks&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Reads content from your system clipboard and writes it to a task file. By default, it targets the file specified by &lt;code&gt;paste-tasks&lt;/code&gt; in &lt;code&gt;paths.yaml&lt;/code&gt; (or falls back to the first file under &lt;code&gt;tasks:&lt;/code&gt;). You can specify the mode (&lt;code&gt;overwrite&lt;/code&gt;, &lt;code&gt;append&lt;/code&gt;, &lt;code&gt;insert&lt;/code&gt;) or the target path using options. If no mode is specified, it will prompt interactively.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Paste and overwrite the default task file&lt;/span&gt;
pew &lt;span class="nb"&gt;paste &lt;/span&gt;tasks &lt;span class="nt"&gt;--overwrite&lt;/span&gt;

&lt;span class="c"&gt;# Append clipboard content to a specific file&lt;/span&gt;
pew &lt;span class="nb"&gt;paste &lt;/span&gt;tasks &lt;span class="nt"&gt;--path&lt;/span&gt; specific/project/tasks.md &lt;span class="nt"&gt;--append&lt;/span&gt;

&lt;span class="c"&gt;# Run interactively to choose mode&lt;/span&gt;
pew &lt;span class="nb"&gt;paste &lt;/span&gt;tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F7f31ya3pqqq3wcicgqf4.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.amazonaws.com%2Fuploads%2Farticles%2F7f31ya3pqqq3wcicgqf4.gif" alt="pew paste tasks" width="560" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 &lt;code&gt;pew next task&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This is the core command for progressing through your task lists. It finds the current task marked with &lt;code&gt;👉&lt;/code&gt;, marks it as complete (&lt;code&gt;- [ ]&lt;/code&gt; -&amp;gt; &lt;code&gt;- [x]&lt;/code&gt;), removes the &lt;code&gt;👉&lt;/code&gt;, finds the next available incomplete task (&lt;code&gt;- [ ]&lt;/code&gt;) across all files configured in &lt;code&gt;paths.yaml&lt;/code&gt; (in order), adds the &lt;code&gt;👉&lt;/code&gt; prefix to it, and displays the context of that new task.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Process the current task and move to the next one&lt;/span&gt;
pew next task
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F6fchcv6a9ni5iumkpiw1.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.amazonaws.com%2Fuploads%2Farticles%2F6fchcv6a9ni5iumkpiw1.gif" alt="pew next task" width="200" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📂 &lt;code&gt;pew reset tasks&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Resets completed tasks within your configured checklists. This command interactively prompts you to select which of the task files listed in your &lt;code&gt;paths.yaml&lt;/code&gt; you want to reset. For each selected file, it changes all completed task markers (&lt;code&gt;- [x]&lt;/code&gt; or &lt;code&gt;- [X]&lt;/code&gt;) back to incomplete (&lt;code&gt;- [ ]&lt;/code&gt;) and removes the &lt;code&gt;👉&lt;/code&gt; prefix if present.&lt;/p&gt;

&lt;p&gt;It helps restart repeatable workflows (like daily checklists, QA runs) without manual editing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Interactively select configured task files to reset&lt;/span&gt;
pew reset tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt will show a summary of tasks within each file to help you select.&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%2Fh36rmmmwnjp81o0kvlfh.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.amazonaws.com%2Fuploads%2Farticles%2Fh36rmmmwnjp81o0kvlfh.gif" alt="pew reset tasks" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ &lt;code&gt;pew update&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Checks if a newer version of &lt;code&gt;pew-pew-cli&lt;/code&gt; is available on npm and prompts you to install it if found.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check for and install updates&lt;/span&gt;
pew update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📝 Pew Pipelines (&lt;code&gt;pew next task&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;You can manage different checklists across multiple files (e.g., main dev tasks, QA checklist).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure &lt;code&gt;paths.yaml&lt;/code&gt;:&lt;/strong&gt; List all relevant files under the &lt;code&gt;tasks:&lt;/code&gt; key in order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run &lt;code&gt;pew next task&lt;/code&gt;:&lt;/strong&gt; pewPewCLI processes tasks sequentially through the files listed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reset Checklists:&lt;/strong&gt; Use &lt;code&gt;pew reset tasks&lt;/code&gt; to uncheck completed items when you want to restart a workflow (like the QA checklist).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🤖 Example Agent Prompt
&lt;/h2&gt;

&lt;p&gt;Here's a prompt you can adapt for an AI agent to use this tool once initialized in a project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are an AI assistant tasked with executing the next available milestones and set of tasks outlined in the provided plan. Follow these instructions carefully:

1.  **Review Task Plan:** First, carefully review the content of the {{TASK_FILE_LOCATION}} (typically `.pew/tasks.md`).

2.  **Understand Context:**
    *   Your goal is to complete the next available milestone (specifically Milestone `{{MILESTONE_NUMBER}}`) and its associated tasks sequentially.
    *   You must follow the plan exactly as specified in `{{TASK_FILE_LOCATION}}` without adding, removing, or changing steps or requirements unless explicitly instructed by a task.

3.  **Identify Next Task:**
    *   Locate Milestone `{{MILESTONE_NUMBER}}` in the `{{TASK_FILE_LOCATION}}` file.
    *   Identify the first uncompleted task listed under this milestone.
    *   Use the `pew next task` command to confirm and retrieve the details of this first task.

4.  **Research Project Context:**
    *   Based on the output of `pew next task`, thoroughly scan all related project files to gain a deep understanding of the task's requirements and the project's context.

5.  **Execute Tasks Sequentially:**
    *   Complete each task strictly in the order presented.
    *   Use the `pew next task` command *after* successfully completing the current task to mark it done and get the next one.
    *   Do not skip any tasks or alter their prescribed order.

6.  **Milestone Completion Review:**
    *   After completing *all* tasks for Milestone `{{MILESTONE_NUMBER}}`, review the implemented work for correctness and consistency.

7.  **Completion and Next Steps:**
    *   Once all tasks for the specified milestone are successfully completed and reviewed/fixed, ask the user for the next set of instructions.

**Always remember:**
*   Stick rigorously to the plan.
*   Focus exclusively on the tasks for the specified milestone.
*   Update the task file using `pew next task` immediately after completing each task.
*   Ensure high-quality output (code, documentation, etc.).
*   Run `pew` commands autonomously as needed ("yolo mode is on").

Begin your work by reading the `{{TASK_FILE_LOCATION}}`. Then, identify and start the first task for Milestone `{{MILESTONE_NUMBER}}` using `pew next task`.

MILESTONE_NUMBER = ALL
TASK_FILE_LOCATION = .pew/tasks.md

ACT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Two Days Indie Dev Life: Mailchimp, Webflow &amp; Zapier - A Love Story</title>
      <dc:creator>Pew Pew Prompts</dc:creator>
      <pubDate>Wed, 29 May 2024 13:16:43 +0000</pubDate>
      <link>https://dev.to/pewpewprompts/two-days-indie-dev-life-mailchimp-webflow-zapier-a-love-story-8h1</link>
      <guid>https://dev.to/pewpewprompts/two-days-indie-dev-life-mailchimp-webflow-zapier-a-love-story-8h1</guid>
      <description>&lt;p&gt;&lt;a href="http://floatnote.com/" rel="noopener noreferrer"&gt;My new landing page&lt;/a&gt; is done, I got my email form with download link working and I found a cool new tool for measurements. I also share some nice Webflow templating insights and how I made a very big mistake 😁. Let’s get into it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Website &amp;amp; Leads
&lt;/h1&gt;

&lt;p&gt;Two days ago I worked the entire day on the new homepage / landing page of the website. This is after I realised that many people reach &lt;a href="https://www.floatnote.com/" rel="noopener noreferrer"&gt;my app&lt;/a&gt; for the first time via desktop web. Currently, my download links are set up to show &lt;a href="https://floatnote.app/" rel="noopener noreferrer"&gt;the web app&lt;/a&gt; if they are visited on a desktop. I prefer them to leave their email so they can download the mobile app themselves later, as the mobile app currently has a much better user experience.&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%2Fr7fahvu2ke3lh6ldulu1.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%2Fr7fahvu2ke3lh6ldulu1.png" alt=" " width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The web version works fine too, don't get me wrong. But some of the UI elements are not yet tuned for the web, which makes some things look out of proportion in certain places. No problem for functionality, but it does look a bit sloppy here and there. &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%2Fepltbjn4mcwvzpmpz9z8.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%2Fepltbjn4mcwvzpmpz9z8.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I originally tried to make a download page (in addition to my new landing page) in Mailchimp, but I don't like the templates and the results I get with it. &lt;em&gt;Note from the future, I was using the old builder so that might have to do with it. Either way I decided to go with Webflow&lt;/em&gt;. I initially only wanted to create a download page,  but then I thought, while I'm at it, I might as well do the whole homepage/landingpage, because I now have a very cool new slogan that I want to reflect. This will improve my SEO and also make sure the website is up to date with all new features. So two days ago, after a good back workout, I went to my favorite place and started working.&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%2F9pqoqpebcibd6ene9wr9.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%2F9pqoqpebcibd6ene9wr9.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Webflow Template
&lt;/h1&gt;

&lt;p&gt;After about two or three hours I had to switch locations to regain my focus. I went to one of my new favorite spots in a park.&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%2F2rzpd2yd5raj7p1dwxc0.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%2F2rzpd2yd5raj7p1dwxc0.png" alt=" " width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once there I went to look for templates on Webflow. I quickly managed to find a good one that I wanted to use and started implementing it. A lesson I learned from implementing this template and a few templates in webflow before is the following. &lt;/p&gt;

&lt;h2&gt;
  
  
  Stick To Your Concept
&lt;/h2&gt;

&lt;p&gt;Originally &lt;a href="https://www.floatnote.com/" rel="noopener noreferrer"&gt;Float Note&lt;/a&gt; started out as a desktop application, but once the mobile version got developed mobile became the main app, web was set up and desktop got discontinued. Simply because of time issues, I might continue it one day.&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%2F0riiuvryozoz83yxl48i.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%2F0riiuvryozoz83yxl48i.png" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can save yourself a lot of time by choosing a template that really represents the concept you are selling. In my case now, a mobile app template is better than a desktop SaaS template.&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%2F4rmx8rj08u1cne7rdg83.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%2F4rmx8rj08u1cne7rdg83.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This has to do with the different types of visual elements that are all tailored to mobile app screenshots. To save yourself a lot of time, it is useful if you download these screenshots, adjust them and use the same size (this is important) and then upload them again.&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%2Ffot2rrukknqoyijnnocq.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%2Ffot2rrukknqoyijnnocq.png" alt=" " width="800" height="1261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will keep many animations working properly and most importantly keep proportions looking good. If you don't do this you often spend a lot of time keeping your template nice and responsive because you disturb it because of the different sizes of your screenshots.&lt;/p&gt;

&lt;h1&gt;
  
  
  Twitter Game
&lt;/h1&gt;

&lt;p&gt;I’ve been active on twitter for about a week now. It’s still kind of new to me but something really cool happened yesterday. &lt;a href="https://dev.to/"&gt;DEV.TO&lt;/a&gt; put one of my daily blogs in one of their tweets, they have like 300k+ followers, I couldn’t believe it. Very very cool, thanks a lot 🙏.&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%2Fguneavbh6uezzi6ffz5e.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%2Fguneavbh6uezzi6ffz5e.png" alt=" " width="800" height="1059"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And while we’re at it I updated &lt;a href="https://x.com/devlifeofbrian" rel="noopener noreferrer"&gt;my twitter&lt;/a&gt; header yesterday. It was still blank and of course I thought this might be the perfect opportunity for me to promote my app. So I made a header, which at first looked great on my laptop but got all messed up on mobile. So I figured out a way to fix this, assuming that most mobiles will have the same kind of dimensions more or less.&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%2Fjc5xrehmsjlp6wnhpgvz.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%2Fjc5xrehmsjlp6wnhpgvz.png" alt=" " width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I took a screenshot of my phone and enlarged it on top the design in Canva. This way I could see how my big design would turn out on the big screen and on mobile. By playing around with the opacity of the screenshot. It looks a bit messy but it worked! The challenge was keeping the big design look good. It’s easy to work around the island and battery level etc. But it’s a bit harder to still make it look good when those things are not there. I used some stars and planets to fill up the space where I felt it was too empty.&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%2F5581fltvw5gjifv6h8v0.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%2F5581fltvw5gjifv6h8v0.png" alt=" " width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m pretty happy with the result for now. I shouldn’t spent too long on these kind of things, I have a tendency to play around with pixels for hours. Luckily I’m aware of this.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tuesday Trip Day
&lt;/h1&gt;

&lt;p&gt;Per usual I went to Eindhoven tuesday. After a go(o)d workout I moved myself to work at one of my clients.&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%2Fhcotxopv5q4e97xhee3r.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%2Fhcotxopv5q4e97xhee3r.png" alt=" " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There wasn’t much to do for me so I continued with setting up the landing page. My goal for today is clear. I want a page where users can leave their email and once they do, it should add the user to mailchimp and send a download link. The email should look a bit like this:&lt;br&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%2Fqsoj4xvf3xl55tho8ayf.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%2Fqsoj4xvf3xl55tho8ayf.png" alt=" " width="800" height="1114"&gt;&lt;/a&gt;&lt;br&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%2F8lj25tc38lekeber78g3.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%2F8lj25tc38lekeber78g3.png" alt=" " width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the end of the day, I got it working. I spent a lot of time trying to build something decent in Webflow and Mailchimp. These tools are great for many things, but I find it difficult (read, not impossible &amp;amp; more important with my skills) to create anything in my head with them. I'm probably spoiled by Flutter and how easy things go and how my brain thinks that way. I pulled a few hairs out of my head today because of these tools.&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%2Fnhj0h7dk42vy12wncwio.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%2Fnhj0h7dk42vy12wncwio.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Webflow &amp;amp; PixelSnap2
&lt;/h2&gt;

&lt;p&gt;Above you see the final result of the download page on web. While working on this page I was going back and forth finetuning the design and I remembered there was this tool that could show you dimensions on the screen with the click of a button. I’m a pixel perfect guy by nature and I do a lot of measuring when I develop my apps, but I’m a bit more loose when I do something like this. However, some things were just too obvious. Like the download button would be bigger than form field. That just looked off. It has to do with the elements being drawn with their fonts + padding as starting point, instead of heights. Anyway what I wanted to tell you about is this tool! It’s so cool. It’s from the same company that build &lt;a href="https://cleanshot.com/" rel="noopener noreferrer"&gt;CleanShot X&lt;/a&gt;, the tool I use to create my screenshots. It’s called &lt;a href="https://getpixelsnap.com/" rel="noopener noreferrer"&gt;PixelSnap2&lt;/a&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%2Fiwylpflysl1iinnckhbj.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%2Fiwylpflysl1iinnckhbj.png" alt=" " width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the press of a button you can put measurements on the screen and keep them there until you remove them. It’s so good for quick measuring! You press a button, you measure stuff, click a bit here and there if you want to and then go about your business. I can’t wait to use this while developing one of my apps.&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%2Fmh02jkn6tbjcys4n1xzb.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%2Fmh02jkn6tbjcys4n1xzb.png" alt=" " width="800" height="733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Mailchimp Journey
&lt;/h1&gt;

&lt;p&gt;After I got the web page working in Webflow I had to set up a Journey in mailchimp.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8toiew218nsgvfqggxpw.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8toiew218nsgvfqggxpw.png&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the more confusing parts of this was setting up the linking between Webflow and Mailchimp. Somehow I thought they would have a native integration with each other, but they don’t. So naturally I asked ChatGPT how to solve this.&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%2Fgk7bd41pr40ab93wptnz.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%2Fgk7bd41pr40ab93wptnz.png" alt=" " width="800" height="793"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One funny thing, I spent a good time on trying to figure out what the &lt;code&gt;step_id&lt;/code&gt; was. It turns out it was part of the url that I had already. That’s what you get for ADHD scanning the documentation instead of reading it.&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%2Frkd3g39ml8ngegfqgvup.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%2Frkd3g39ml8ngegfqgvup.png" alt=" " width="800" height="981"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once I set up the journey I used Zapier (for now) to link the two together. I’ve heard about Zapier before, I even played around with it but never had a real use case for it. I will replace it once it becomes too expensive but for now it’s a great solution. It worked great too, I could ask it in natural language what I wanted to do, then their AI set up the initial steps for me. One of the few apps where I see AI implemented in a really good way. Kudos to them.&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%2Fi7qjoemea3oagotwolqo.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%2Fi7qjoemea3oagotwolqo.png" alt=" " width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setting everything up I tested it and it works! Eureuka.&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%2Fn7voe4ksxscnccaco2av.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%2Fn7voe4ksxscnccaco2av.png" alt=" " width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I did notice just now that the sender looks very techy. I thought I fixed that. I’m putting that in my Float Note inbox for later with &lt;a href="https://www.alfredapp.com/" rel="noopener noreferrer"&gt;Alfed&lt;/a&gt; and the query option of Float Note.&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%2Fmdrvso6pi4qg2bf7fjlf.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%2Fmdrvso6pi4qg2bf7fjlf.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Big Mailchimp Mistake
&lt;/h1&gt;

&lt;p&gt;So before we end this blog let me tell you about this one big mistake I made yesterday which caused me to accidently mail everyone that ever registered for Float Note to get an email. Before I set everything up correctly with Zapier I was on the wrong path. I get the data from the Webflow form but I selected the wrong campaign. So when I pressed the button to text the integration, it got the data from webflow but selected a campaign that sent my download link email to all current subscribers of Float Note. That’s messy! So everyone got an email yesterday with a download link, no context whatsoever. Really bad 😂. But honest mistake, you live you learn. I’m ‘glad’ it was only 200 people. And I see only two people unsubscribed. Stupid mistake, lesson learned.&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%2Fxzd8e19kz77w0nh6fdta.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%2Fxzd8e19kz77w0nh6fdta.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also I see a lot bounces, this has to do with DMARC I believe. I haven’t looked into it yet. But I will once I get my mail campaign game going. For now, we have more imortant stuff to attend to.&lt;/p&gt;

&lt;h1&gt;
  
  
  Thank you 🙏
&lt;/h1&gt;

&lt;p&gt;Once again, thank you for reading if you came this far. I really appreciate the support I’m getting. It’s taking up a lot of time sometimes but it’s worth it. I’m still finding my way around building the perfect system for this. See you next time 🤙&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%2Fvtgu7fiub21h3nptng99.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%2Fvtgu7fiub21h3nptng99.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  About Me
&lt;/h3&gt;

&lt;p&gt;About me: I’m an independent app developer with ADHD and the creator of Float Note, an app that tackles four common ADHD challenges: too many thoughts, trouble organizing, feeling overwhelmed, and staying focused.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discount Code
&lt;/h3&gt;

&lt;p&gt;It would mean a lot to me if you gave my app a try and let me know what you think through one of my socials. You can try it for free for 7 days and when the time comes, use code 🎫 “DEVLIFEOFBRIAN" to get 70% off your subscription for life. A gift for only a chosen few that read my blog 🙏. Also, if you really can’t pay for it, but you love the app. Send me a message and we’ll work something out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Download
&lt;/h3&gt;

&lt;p&gt;📲 Download it here or click the link in my bio (Android/iOS/web) ➡️ floatnote.com/download &lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>flutter</category>
      <category>programming</category>
      <category>marketing</category>
    </item>
    <item>
      <title>A Day In My Dev Life</title>
      <dc:creator>Pew Pew Prompts</dc:creator>
      <pubDate>Wed, 22 May 2024 22:23:04 +0000</pubDate>
      <link>https://dev.to/pewpewprompts/a-day-in-my-dev-life-7-1pgm</link>
      <guid>https://dev.to/pewpewprompts/a-day-in-my-dev-life-7-1pgm</guid>
      <description>&lt;h2&gt;
  
  
  Client Work, Float Note Features &amp;amp; A Lot Of Flutter Code
&lt;/h2&gt;

&lt;p&gt;Each Tuesday I work in Eindhoven. I woke up at 4.30 and got myself in the train around 6. I slept around 3.5 hours this night, I know that’s not enough and sleep will probably catch up to me somewhere later in the day. But it is what it is. For now (7 am) I am feeling GOOD!! 😁 I’ve been testing the release and I’ve got a few things to fix.&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%2Fp4ss9ajczqt6g0yd9uwe.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%2Fp4ss9ajczqt6g0yd9uwe.png" alt=" " width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ☀️ New Day, New Bugs
&lt;/h1&gt;

&lt;p&gt;Tasks are doing some weird stuff when you create a new task anywhere other than the inbox popup. I thought it was web related but I noticed it in the new release as well. I think it has to do with debouncer saving the tasks and then updating it because of the update. I spent some time on it but then I was in Eindhoven and I went to workout with a friend of mine. After which I went to one of my clients for a very cool assignment for today.&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%2Fhqpxky9wp9bxdwagz37s.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%2Fhqpxky9wp9bxdwagz37s.png" alt=" " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  📝 App Features Inventarization
&lt;/h1&gt;

&lt;p&gt;So a couple days ago I was asked to analyze a certain app and provide feedback in terms of UI/UX experience. For that same app today I was asked to inventorize the entire app in terms of features. We probably want to rebuild the app so a good overview of what the app can do now is where we start. I’m a big fan of &lt;a href="https://www.notion.so/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;. I have most of my important documents in there terms of work and life, however when I started writing this blog I went looking for an app that made it easier to work with images and text. So I stumbled upon &lt;a href="https://bear.app/" rel="noopener noreferrer"&gt;Bear&lt;/a&gt;. I’ve fallen in love with this application quickly (as I do with many things, or people 😂). I used to create the first feature inventory.&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%2Fc4ecvrqlubof2hi03wak.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%2Fc4ecvrqlubof2hi03wak.png" alt=" " width="800" height="1149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🚫 Flutter Code Bugfix: BlockDebouncer
&lt;/h1&gt;

&lt;p&gt;After doing so my usual restlessness came out to play and I could not concentrate in the office anymore so I went outside. Before doing so I spoke to one of my colleagues and he told me he had some feedback regarding Floatnote.app. The onboarding felt a little slow to him, I agreed. It’s something I’ve noticed myself and head before from someone else. The text comes up like a typewriter, very cool but not very good UX. Especially for my target group, people with ADHD. So I took note of it in my app and put it on my daily todo list of things to fix for the next release. We might as well do it now right 😁.&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%2Fqdscsukaq4lilamx1ks9.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%2Fqdscsukaq4lilamx1ks9.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But first things first, this bug has been eating me up. Floatnote.app is intended to be very fast and smooth when it comes to registering tasks. This bug messes up the whole user experience. The problem is that whenever you write something in the app, the sync will trigger and unwanted rebuild with old data, causing the stuff you just typed sometimes disappear or appear as a previous version of itself. It’s a bit of a race condition but very noticable. So I begon with creating a class that blocks any updates for a short period of time. A &lt;code&gt;BlockDebouncer&lt;/code&gt; if you will.&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%2Fki26xk7fyh2uzfkxix0x.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%2Fki26xk7fyh2uzfkxix0x.png" alt=" " width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We make sure we call this before any changes. The data is updated locally, so we don't need to sync at that time. After the debouncer finishes, it will allow syncs again to enable a smooth experience when you change something on another device.&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%2F5lzqhvoi3631ai8fgjqi.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%2F5lzqhvoi3631ai8fgjqi.png" alt=" " width="800" height="848"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  block_debouncer.dart
&lt;/h2&gt;

&lt;p&gt;Downside is I have to do this in all relevant places where I listen to updates and update tasks. Also not very maintainable because you are bound to forget this kind of thing when you create a view for exmaple that listens and updates. a better idea is to fix this at the source. I’ll improve this a little so the blocking is done at task source. This is how the class turned out:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:floatnote/features/core/util/debouncer.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BlockDebouncer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;BlockDebouncer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="n"&gt;Duration&lt;/span&gt; &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;_debouncer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Debouncer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;duration:&lt;/span&gt; &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 📍 LOCATOR ------------------------------------------------------------------------------- \\&lt;/span&gt;
  &lt;span class="c1"&gt;// 🧩 DEPENDENCIES -------------------------------------------------------------------------- \\&lt;/span&gt;
  &lt;span class="c1"&gt;// 🎬 INIT &amp;amp; DISPOSE ------------------------------------------------------------------------ \\&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;dispose&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_debouncer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;tryCancel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="c1"&gt;// 🎩 STATE --------------------------------------------------------------------------------- \\&lt;/span&gt;

  &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;_canContinue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// 🛠 UTIL ---------------------------------------------------------------------------------- \\&lt;/span&gt;

  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;Debouncer&lt;/span&gt; &lt;span class="n"&gt;_debouncer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// 🧲 FETCHERS ------------------------------------------------------------------------------ \\&lt;/span&gt;

  &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="n"&gt;canContinue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_canContinue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// 🏗️ HELPERS ------------------------------------------------------------------------------- \\&lt;/span&gt;
  &lt;span class="c1"&gt;// 🪄 MUTATORS ------------------------------------------------------------------------------ \\&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;onChanged&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_canContinue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;_debouncer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_canContinue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will run every time a task changes, like this.&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%2Fpz6k8hi7ye4xj2ujeti1.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%2Fpz6k8hi7ye4xj2ujeti1.png" alt=" " width="800" height="617"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then we block the update like this:&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%2Fwmmdabyo0ung1fg2uk8d.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%2Fwmmdabyo0ung1fg2uk8d.png" alt=" " width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing to keep in mind if you’re going to use this yourself. If you’re blocking logic that’s also being debounced, then make sure that your block duration is longer than the logic duration otherwise it won’t work.&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%2F89pw1utydui7ynwcwkfx.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%2F89pw1utydui7ynwcwkfx.png" alt=" " width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ⏳ Feature Improvement: Float Note Durations
&lt;/h1&gt;

&lt;p&gt;After Eindhoven I went to my favourite working spot and it started raining again. Such a shame it was very nice weather today. I’m not bothered easily, but when the sun disappears on such a nice day I’m a sad bwoi. Anyway, next up is adding a delete button to the duration sheet to quickly reset durations to 0 seconds. Another small improvement I’d like to add to this release.&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%2Fmzoq9i8tuzbxdpcv4a0u.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%2Fmzoq9i8tuzbxdpcv4a0u.png" alt=" " width="800" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Size Reporter Debugging
&lt;/h2&gt;

&lt;p&gt;Adding  clear button to the trailing part was an easy job, but that made the title not centered anymore. To offset this I also added the option to add extra padding to backbutton. Now in order for me quickly determine how much I need, I use my top secret widget extension I described in another article (&lt;a href="https://devlifeofbrian.com/solving-size-issues-with-print-statements-in-flutter" rel="noopener noreferrer"&gt;here&lt;/a&gt;). The code looks like this while debugging the size:&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%2F6xt0bkxrhczcnep41amo.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%2F6xt0bkxrhczcnep41amo.png" alt=" " width="800" height="864"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And so the UI and logging gives me the right information like this:&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%2Fxrtdenag12x7etzh43jo.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%2Fxrtdenag12x7etzh43jo.png" alt=" " width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So we need to add 24 padding + 16 for gap in between the two icons.&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%2F0x4o55696fbkvue3mrpb.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%2F0x4o55696fbkvue3mrpb.png" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Improvement Madness
&lt;/h2&gt;

&lt;p&gt;But now that I look at it, I think we can improve this sheet even a little more. It’s getting a little busy with all the icons, but I think it’ll be worth it if the use case is worth it. So I have logic ready to round the durations of your tasks in the tracking view. But I can also offer this per task in this sheet, right? That would be cool 😁.&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%2Fj54i5gil5zsm62h7yc3a.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%2Fj54i5gil5zsm62h7yc3a.png" alt=" " width="800" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Took a little longer than expected but I got the job done. The reason it took longer was because the current logic was also accounting for other tasks being around and using their DateTimes. After fixing it my battery almost died. It was almost dinner time so it’s kind of not done to sit inside with a laptop. I worked in restaurants for years, a laptop at the window looks very bad for the image.&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%2Fe1qr7771g5ip2zcy5mug.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%2Fe1qr7771g5ip2zcy5mug.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fortunately I found a good place, one restaurant had an upstairs with a big table and outlets. Very inviting for a workaholic and his laptop. Yes, I know my screen is dirty. We like to touch each other.&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%2Fatro32b4lbrre8gqcjjm.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%2Fatro32b4lbrre8gqcjjm.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I opened my todo and wanted to quickly snooze some items. It was rather tedious to enter a date each time (pressing save to snooze until tomorrow) and it wasn't really fast either. Because I had to think if the date was right, move my hand to the save button and see if it worked. Too much effort! So, I convinced myself that if you want to update the snooze to a date beyond tomorrow, it doesn't matter if you have to go to the More menu because it's already an action that takes cognitive power and movements to get to the correct date. The extra click on the More button then doesn't matter that much compared to the total actions per outcome. But if you want to quickly snooze something, you just want it to go away quickly so you can move on to the next task and not have to think about it. That's my assumption right. I noticed that myself, so I changed that. Now if you press long, a task is quickly paused until tomorrow without the user having to enter anything else (I love it).&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%2F97yzq73rw5omy3ebtgyn.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%2F97yzq73rw5omy3ebtgyn.png" alt=" " width="800" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Around 21:00 it stopped raining so I decided to start moving home. Once I got home I finished most of the other todo’s and created a new build. I updated the changelog and then started testing the new features on web.&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%2Fz6lv8t164osqyl6z67k0.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%2Fz6lv8t164osqyl6z67k0.png" alt=" " width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🏠 Home Sweet Home: Deeplinking Video
&lt;/h1&gt;

&lt;p&gt;While being distracted I stumbled upon this video (&lt;a href="https://io.google/2024/explore/91d19c5a-ebb9-43e9-bf31-0366af7d2ba5/" rel="noopener noreferrer"&gt;No more broken links: Deeplinking success in Flutter&lt;/a&gt;) on &lt;a href="https://www.linkedin.com/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. I have yet to look at it in more depth but it’s something I still need to implement in Floatnote.app. I used to do everything with dynamic links, but as you might know these will be &lt;a href="https://firebase.google.com/docs/dynamic-links" rel="noopener noreferrer"&gt;discontinued&lt;/a&gt; in the near feature.&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%2Frg9544bymxcjqu61hrw6.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%2Frg9544bymxcjqu61hrw6.png" alt=" " width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While testing web I noticed many bugs, especially the one I thought I fixed. I stayed up until 2, but didn’t manage to fix all of them. Don’t you hate it when that happens? I went to bed a very unsatisfied man.&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%2Ftqy98ufh5azckezyfut5.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%2Ftqy98ufh5azckezyfut5.png" alt=" " width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🙏 Big Blogging Thanks
&lt;/h1&gt;

&lt;p&gt;To end with a positive note. I’m so happy I started this journey of writing about my day. I’ve always liked documenting my journey in different ways but I feel like I finally found something I can maintain. I tried all kinds of strategies on Instagram, TikTok and YouTube but never kept to one, despite all the systems I tried building for it. I’d like to thank you, my dear reader. I don’t know if you come from &lt;a href="https://linkedin.com/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://www.reddit.com/" rel="noopener noreferrer"&gt;Reddit&lt;/a&gt;, &lt;a href="https://hashnode.com/" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; or somewhere else. But thank your for showing interest. The amount of views and reactions (and new users for &lt;a href="https://floatnote.app/" rel="noopener noreferrer"&gt;my app&lt;/a&gt;!!🙏) I’m getting is really motivating. I like doing this and I’m very grateful you like reading about it.&lt;/p&gt;

&lt;p&gt;See you tomorrow 🤙&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>buildinpublic</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
