Skip to content

docs: rewrite README with marketing positioning and cross-platform emphasis#215

Merged
tylerkron merged 2 commits into
mainfrom
claude/youthful-germain-b150cc
May 17, 2026
Merged

docs: rewrite README with marketing positioning and cross-platform emphasis#215
tylerkron merged 2 commits into
mainfrom
claude/youthful-germain-b150cc

Conversation

@tylerkron
Copy link
Copy Markdown
Contributor

Summary

  • Rewrites the README as a top-of-funnel marketing surface aligned with daqifi.com's brand voice, while keeping every claim defensible against the current code and the website.
  • Adds trust badges (NuGet, downloads, build, license, .NET versions, supported platforms), an ecosystem map showing where Daqifi.Core fits, and a Common Applications section sourced from daqifi.com (moon regolith testing, prosthetic socket pressure testing, etc.).
  • Emphasizes cross-platform support in five places — subtitle, dedicated platforms badge, the Connection Options code sample (Windows + macOS + Linux), the capability table, and the Requirements section — because ".NET" alone still reads as Windows-only to a large slice of the DAQ-buying audience.
  • Reframes features as developer outcomes ("Find any DAQiFi on WiFi or USB in seconds — no IP hunting, no config files") instead of dry capability bullets.
  • Honesty fixes carried over from review:
    • Removed misleading retry claim — verified at TcpStreamTransport.cs:129 that the default is ConnectionRetryOptions.NoRetry. Retries are now correctly described as opt-in via DeviceConnectionOptions.
    • Dropped competitor-shaming language ("clunky", "trap your data behind ugly UIs") that inadvertently also disparaged DAQiFi Desktop. Desktop is now positioned as a complementary GUI option.
    • Restored "start/stop SD logging" in the SD card row and the bitmask hint (0b11 = 3) in the streaming snippet — both were dropped in the first rewrite pass.
    • Tightened use-case bullets to only claims I can back from daqifi.com.

Test plan

  • Render the README on GitHub and verify all six badges resolve (NuGet, downloads, build, license, .NET, platforms)
  • Click through every link: daqifi.com, daqifi-desktop repo, Issues page, NuGet package, CI workflow, LICENSE
  • Confirm the capability claims match current code — especially the retry behavior described in the One-line connect row
  • Marketing review: tagline matches daqifi.com voice; application examples (moon regolith, prosthetic socket testing) are accurate to the website
  • Consider follow-ups outside this PR: set repo Topics (data-acquisition, daq, dotnet, etc.) and move the "For maintainers" release section out to RELEASING.md

🤖 Generated with Claude Code

…phasis

Refocus the README as a top-of-funnel marketing surface aligned with
daqifi.com's brand voice while staying intellectually honest about what
the SDK actually delivers. Adds badges, ecosystem map, and Common
Applications section sourced from daqifi.com; emphasizes cross-platform
across subtitle, badge, code samples, and requirements since ".NET"
alone still reads as Windows-only to many evaluators; fixes a
misleading default-retry claim (retries are opt-in via
DeviceConnectionOptions); drops language that inadvertently disparaged
DAQiFi Desktop; restores feature mentions dropped from the first pass
(SD logging start/stop, bitmask hint in the streaming snippet).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@tylerkron tylerkron requested a review from a team as a code owner May 17, 2026 02:42
@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Rewrite README with marketing positioning and cross-platform emphasis

📝 Documentation

Grey Divider

Walkthroughs

Description
• Rewrites README as marketing-focused top-of-funnel surface aligned with daqifi.com brand voice
• Adds trust badges (NuGet, downloads, build, license, .NET versions, platforms)
• Emphasizes cross-platform support across subtitle, badge, code samples, and requirements
• Fixes misleading retry claim — retries are opt-in via DeviceConnectionOptions, not default
• Drops competitor-shaming language; positions DAQiFi Desktop as complementary GUI option
• Restructures content with ecosystem map, common applications, and capability table
• Restores dropped feature mentions (SD logging start/stop, bitmask hint in streaming snippet)
Diagram
flowchart LR
  A["Old README<br/>Technical focus"] -->|"Reposition as<br/>marketing surface"| B["New README<br/>Brand-aligned"]
  B -->|"Add badges &<br/>ecosystem map"| C["Trust signals<br/>& context"]
  B -->|"Emphasize<br/>cross-platform"| D["5 placement<br/>locations"]
  B -->|"Reframe features<br/>as outcomes"| E["Developer-centric<br/>benefits"]
  B -->|"Fix honesty<br/>issues"| F["Accurate retry<br/>& positioning"]
Loading

Grey Divider

File Changes

1. README.md 📝 Documentation +129/-140

Marketing-focused README with cross-platform emphasis and honesty fixes

• Replaces generic title and description with marketing tagline emphasizing "convenient, portable
 device connectivity" and cross-platform .NET SDK positioning
• Adds six trust badges (NuGet, downloads, build, license, .NET versions, supported platforms) with
 direct links
• Restructures content from feature-centric to outcome-centric with new sections: "What is
 Daqifi.Core?", "See it in 30 seconds", "Common applications", "Where Daqifi.Core fits", and "What
 you can do"
• Corrects misleading retry behavior claim — now accurately states retries are opt-in via
 DeviceConnectionOptions rather than default
• Removes disparaging language about competitors; repositions DAQiFi Desktop as complementary GUI
 built on the SDK
• Restores previously dropped details: SD logging start/stop capability and bitmask hint (`0b11 =
 3`) in streaming code sample
• Reorganizes code examples into "Quick recipes" section with subsections for connection options,
 device discovery, network configuration, and firmware updates
• Adds ecosystem layer diagram showing Hardware → SDK → App → User code progression
• Includes capability table highlighting key features with developer-focused descriptions
• Adds "Supported devices" table with Nyquist 1 and Nyquist 3 specifications
• Simplifies requirements section to emphasize cross-platform (.NET 9.0/10.0 on Windows/macOS/Linux)
• Moves release/publishing details to "For maintainers" section at end
• Adds footer with DAQiFi branding and MIT license link

README.md


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented May 17, 2026

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Wrong null semantics ✓ Resolved 🐞 Bug ≡ Correctness
Description
README says leaving any NetworkConfiguration field null preserves the current device value, but
UpdateNetworkConfigurationAsync always applies Mode/SSID/Security/Password and only treats
StaticIP/SubnetMask/Gateway as nullable. Following the README guidance can inadvertently overwrite
WiFi settings (e.g., empty SSID/password).
Code

README.md[153]

+Devices implementing `INetworkConfigurable` accept programmatic WiFi and LAN configuration. Leave any field `null` to keep its current value — DHCP-only callers see no behavior change.
Evidence
The README claims null preserves any field, but the implementation unconditionally sends WiFi
mode/SSID/security/password, and the model types show only the static IP fields are nullable and
documented as “leave unchanged.”

README.md[151-154]
src/Daqifi.Core/Device/DaqifiStreamingDevice.cs[188-236]
src/Daqifi.Core/Device/DaqifiStreamingDevice.cs[238-252]
src/Daqifi.Core/Device/Network/NetworkConfiguration.cs[13-43]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The README states that *any* `NetworkConfiguration` field can be left `null` to keep its current value, but the implementation only supports “null means unchanged” for `StaticIP` / `SubnetMask` / `Gateway`.

### Issue Context
`NetworkConfiguration.Ssid`/`Password` are non-nullable strings with default empty values, and `UpdateNetworkConfigurationAsync` always sends SCPI commands for SSID/password/security/mode.

### Fix Focus Areas
- README.md[151-154]

### Suggested fix
Update the sentence to explicitly scope the null semantics (e.g., “Leave `StaticIP`/`SubnetMask`/`Gateway` as `null` to keep current values; SSID/password/mode are always applied”), or adjust the example text to avoid implying SSID/password can be omitted without changes.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Non-compilable options snippet ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
The "Connection options" code fence redeclares using var device multiple times in the same scope
(TCP, 3 serial examples, and discovery connect), so the snippet will not compile if copied as
written. This makes the README quick recipe unreliable as a copy/paste starting point.
Code

README.md[R90-104]

```csharp
+// TCP with resilient retry preset (5 retries, longer timeouts)
using var device = await DaqifiDeviceFactory.ConnectTcpAsync(
-    "192.168.1.100",
-    9760,
-    DeviceConnectionOptions.Resilient); // 5 retries, longer timeouts
-```
+    "192.168.1.100", 9760, DeviceConnectionOptions.Resilient);

-**Serial/USB connection:**
-```csharp
-using var device = await DaqifiDeviceFactory.ConnectSerialAsync("COM3");             // Windows
-using var device = await DaqifiDeviceFactory.ConnectSerialAsync("/dev/cu.usbmodem1"); // macOS
-```
+// Serial / USB
+using var device = await DaqifiDeviceFactory.ConnectSerialAsync("COM3");                // Windows
+using var device = await DaqifiDeviceFactory.ConnectSerialAsync("/dev/cu.usbmodem1");   // macOS
+using var device = await DaqifiDeviceFactory.ConnectSerialAsync("/dev/ttyACM0");        // Linux

-**Connect from a discovery result:**
-```csharp
-using var wifiFinder = new WiFiDeviceFinder();
-var devices = await wifiFinder.DiscoverAsync(TimeSpan.FromSeconds(5));
+// From a discovered device
+using var finder = new WiFiDeviceFinder();
+var devices = await finder.DiscoverAsync(TimeSpan.FromSeconds(5));
using var device = await DaqifiDeviceFactory.ConnectFromDeviceInfoAsync(devices.First());
</details>
Evidence
The README’s connection options block includes four using var device = ... declarations within one
fenced code block, which is invalid in a single C# scope.

README.md[88-104]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The README’s single `csharp` code fence under “Connection options” contains multiple mutually exclusive examples, but they are written as one block that redeclares `device` repeatedly.

### Issue Context
The snippet currently includes multiple `using var device = ...` lines for different transports/platforms and for discovery-based connection.

### Fix Focus Areas
- README.md[88-104]

### Suggested fix
Make the recipe copy/paste-safe by doing one of:
- Split into separate code fences per example (TCP / Serial / Discovery), or
- Rename variables (`tcpDevice`, `serialDevice`, `discoveredDevice`) and/or comment out alternatives with a clear “choose one” instruction.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread README.md Outdated
…py/paste

Addresses Qodo code review findings on the README rewrite:

- Network configuration: the previous wording implied any
  NetworkConfiguration field accepts null = "leave unchanged", but the
  implementation always applies Mode/Ssid/Password (verified in
  DaqifiStreamingDevice.UpdateNetworkConfigurationAsync). Following the
  prior guidance could inadvertently blank an SSID. Reworded to scope
  the null semantics to StaticIP/SubnetMask/Gateway only.
- Connection options: the four `using var device = ...` declarations
  were grouped into one code fence, which is not valid C# in a single
  scope. Split into three per-transport fences so each snippet is
  copy-paste-safe; cross-platform serial paths are now shown as a
  single declaration with the other OS paths in a comment.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@tylerkron
Copy link
Copy Markdown
Contributor Author

Qodo review responses

Both findings addressed in 3396fc5.

1. Wrong null semantics (Bug, Correctness) — Agreed and fixed. Verified the underlying code: Mode, Ssid, and Password are always applied on every UpdateNetworkConfigurationAsync call (DaqifiStreamingDevice.cs:209-236). Only StaticIP/SubnetMask/Gateway honor null = "leave unchanged" (DaqifiStreamingDevice.cs:241-252, matching the XML doc on NetworkConfiguration). The prior README wording could have caused a DHCP-only caller to inadvertently blank their SSID. The corrected text now reads: "Mode, Ssid, and Password are always applied on every call; only StaticIP, SubnetMask, and Gateway honor null as 'leave unchanged'..."

2. Non-compilable options snippet (Bug, Maintainability) — Agreed and fixed. The single fence with four using var device = ... declarations is not valid C# in a single scope. Split into three per-transport fences so each snippet is independently copy-paste-safe (TCP / Serial / Discovery). The cross-platform serial paths are preserved as a single declaration with all three OS paths shown in a comment, which keeps the cross-platform signal visible while making the snippet compilable.

@tylerkron tylerkron merged commit 7bc5094 into main May 17, 2026
1 check passed
@tylerkron tylerkron deleted the claude/youthful-germain-b150cc branch May 17, 2026 02:52
tylerkron added a commit that referenced this pull request May 22, 2026
The recent README rewrite (#215) used the NuGet package identifier
"Daqifi.Core" as a brand-style product name in prose contexts (title,
section headings, body copy, table cell). Per DAQiFi marketing
guidelines, prose references to the brand should use "DAQiFi", so
those marketing-facing occurrences become "DAQiFi Core" — matching
the "DAQiFi {ProductName}" pattern used by daqifi-desktop.

Code and badge contexts that reference the literal NuGet package or
C# namespace (Daqifi.Core in badges, `dotnet add package Daqifi.Core`,
`using Daqifi.Core.Device;`, DaqifiDeviceFactory, etc.) are
unchanged — those follow .NET identifier conventions, not marketing
style.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant