<?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: D Ru</title>
    <description>The latest articles on DEV Community by D Ru (@matrongdigital).</description>
    <link>https://dev.to/matrongdigital</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4171876%2F5d45855e-5b40-4b3a-9b70-c48705eba2ba.jpg</url>
      <title>DEV Community: D Ru</title>
      <link>https://dev.to/matrongdigital</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matrongdigital"/>
    <language>en</language>
    <item>
      <title>Designing comparison and calculator interfaces around unknown values</title>
      <dc:creator>D Ru</dc:creator>
      <pubDate>Thu, 08 Oct 2026 18:12:51 +0000</pubDate>
      <link>https://dev.to/matrongdigital/designing-comparison-and-calculator-interfaces-around-unknown-values-2hj4</link>
      <guid>https://dev.to/matrongdigital/designing-comparison-and-calculator-interfaces-around-unknown-values-2hj4</guid>
      <description>&lt;p&gt;An empty input and a confirmed zero can look similar in a form, but they carry different meanings. A comparison interface needs to preserve that difference, especially when some of the information comes from documents a visitor has not finished checking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vaythongminh.com/" rel="noopener noreferrer"&gt;VayThongMinh&lt;/a&gt; is my own in-house project: an independent informational website for a Vietnamese audience, not a lender. Its interface connects comparison content, explanatory articles and a cost calculator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the comparison fields consistent
&lt;/h2&gt;

&lt;p&gt;The homepage presents vehicle choices, amount and term selectors, and comparison cards. The cards organise information under recurring labels for vehicle type, documents and costs. Links lead from the overview to conditions and further detail.&lt;/p&gt;

&lt;p&gt;Consistent labels give the reader a stable way to move across options. They also make a qualified value, such as a cost that depends on the individual documents, easier to recognise alongside a fixed piece of information.&lt;/p&gt;

&lt;p&gt;The interface separates these comparison views from the calculator. Browsing an option and entering a calculation have different purposes, so their controls need different explanations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep unknown distinct from zero
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://vaythongminh.com/cong-cu/tinh-chi-phi-cam-xe/" rel="noopener noreferrer"&gt;cost calculator&lt;/a&gt; separates principal from the amount actually received. Its controls include interest-entry choices, rate units and periods, one-time fee handling, and recurring fee amounts and collection counts.&lt;/p&gt;

&lt;p&gt;The form provides explicit choices for information that remains unknown. It distinguishes a fee confirmed as absent from a fee whose amount or collection method is unresolved. That is a useful interface decision: a missing answer remains visible instead of becoming an apparently complete result.&lt;/p&gt;

&lt;p&gt;A small illustrative page model can express the distinction. This is an example for explaining the design, not production source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"oneTimeFee"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amountVnd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"collectionMethod"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"recurringFee"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"confirmed_absent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amountVnd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"collectionCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The separate fields show why knowing an amount does not automatically establish how it is collected. The calculator's interface treats fee amounts, collection timing and collection counts as separate pieces of information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put explanations beside the decision
&lt;/h2&gt;

&lt;p&gt;The calculator groups related inputs under labelled sections. Nearby explanations describe the difference between principal and money received, the available interest-entry methods, and the handling of fees.&lt;/p&gt;

&lt;p&gt;Its result area separates interest, fees and estimated total payment. Those labels continue the language used in the form, giving the reader a connection between input and output.&lt;/p&gt;

&lt;p&gt;For developers designing similar interfaces, the useful pattern is to represent uncertainty explicitly and explain it where the decision happens. Clear labels, grouped controls and visible unknown states help the interface communicate what the visitor has supplied and what still needs clarification.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ux</category>
      <category>a11y</category>
    </item>
    <item>
      <title>A page contract for service-and-location websites: an in-house Vietnam case</title>
      <dc:creator>D Ru</dc:creator>
      <pubDate>Thu, 08 Oct 2026 17:56:56 +0000</pubDate>
      <link>https://dev.to/matrongdigital/a-page-contract-for-service-and-location-websites-an-in-house-vietnam-case-2a2j</link>
      <guid>https://dev.to/matrongdigital/a-page-contract-for-service-and-location-websites-an-in-house-vietnam-case-2a2j</guid>
      <description>&lt;p&gt;A local service website needs to help visitors answer several connected questions: what work they need, where they need it and what to prepare before contacting the provider. Giving every page a clear responsibility makes those questions easier to follow.&lt;/p&gt;

&lt;p&gt;For Khoan Giếng Nha Trang, an in-house website project in Khánh Hòa, Vietnam, my work covered research, content structure, design, development, SEO and launch. One part of that work was connecting service pages, area pages and supporting information into a useful route.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define the page responsibility
&lt;/h2&gt;

&lt;p&gt;The content map starts with three questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What kind of service does the visitor need?&lt;/li&gt;
&lt;li&gt;What matters at the location?&lt;/li&gt;
&lt;li&gt;What information will help them prepare an enquiry?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions provide a practical way to review the structure before focusing on individual layouts. A service page explains the work. An area page adds local context. Price information and an estimator help the reader prepare for the next conversation.&lt;/p&gt;

&lt;p&gt;The following JSON illustrates that planning idea. It is an explanatory representation, rather than production source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What work do I need?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"nextSteps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"area"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"enquiry"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"area"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What matters at this location?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"nextSteps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"enquiry"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"estimator"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"How do my assumptions affect the estimate?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"nextSteps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"enquiry"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model connects each page to a reader question and a useful next step. It makes internal links part of the content design: their purpose is to continue the journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give location pages useful local context
&lt;/h2&gt;

&lt;p&gt;The site separates household and industrial drilling, repair, cleaning and survey services. It also has area routes for places including Nha Trang, Cam Ranh, Diên Khánh and Ninh Hòa.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://khoangieng-nhatrang.com/khu-vuc/nha-trang" rel="noopener noreferrer"&gt;Nha Trang area page&lt;/a&gt; adds information about site access and what to prepare before a survey. It connects that context to price information and related material.&lt;/p&gt;

&lt;p&gt;That responsibility helps distinguish an area page from the general service introduction. During a content review, a useful question is whether the local information would still be specific and helpful if the place name were removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the estimator to prepare an enquiry
&lt;/h2&gt;

&lt;p&gt;The website combines a reference price table, an &lt;a href="https://khoangieng-nhatrang.com/tinh-gia" rel="noopener noreferrer"&gt;estimate calculator&lt;/a&gt; and a service request form.&lt;/p&gt;

&lt;p&gt;The calculator exposes well type, depth, pipe diameter, area and optional additions. It presents a price range and explains that the final quote depends on a site survey. The interaction gives visitors a way to explore assumptions before discussing the actual work.&lt;/p&gt;

&lt;p&gt;The form then asks for a name and phone number, plus service and area selections. A site photo or location screenshot is optional. Phone and Zalo provide additional contact routes.&lt;/p&gt;

&lt;p&gt;The connection matters: content explains the service, the estimator helps with budget preparation, and the enquiry gathers context for the conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the journey as a whole
&lt;/h2&gt;

&lt;p&gt;A useful page has both a clear subject and a clear next step. Reviewing these together helps reveal missing connections between content, navigation and contact actions.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://matrongdigital.com/du-an/khoan-gieng-nha-trang/" rel="noopener noreferrer"&gt;full in-house project account&lt;/a&gt; describes the wider scope. The takeaway for developers is to define page responsibilities alongside navigation and form design, so content, interface and SEO work share a structure that can be reviewed and improved.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ux</category>
      <category>seo</category>
    </item>
  </channel>
</rss>
