<?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: Maxime Brodeur</title>
    <description>The latest articles on DEV Community by Maxime Brodeur (@nexushubstudio).</description>
    <link>https://dev.to/nexushubstudio</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%2F4125259%2F32c41dec-4db0-477a-807f-80a91f658e1d.png</url>
      <title>DEV Community: Maxime Brodeur</title>
      <link>https://dev.to/nexushubstudio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nexushubstudio"/>
    <language>en</language>
    <item>
      <title>I built a bilingual quote estimator that runs entirely in the browser</title>
      <dc:creator>Maxime Brodeur</dc:creator>
      <pubDate>Tue, 15 Sep 2026 00:46:26 +0000</pubDate>
      <link>https://dev.to/nexushubstudio/i-built-a-bilingual-quote-estimator-that-runs-entirely-in-the-browser-o28</link>
      <guid>https://dev.to/nexushubstudio/i-built-a-bilingual-quote-estimator-that-runs-entirely-in-the-browser-o28</guid>
      <description>&lt;p&gt;Many service websites make visitors send an email before giving them any price context. I wanted a smaller middle ground: show a useful ballpark estimate immediately, then let the visitor start a conversation with the details already organized.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;QuoteKit&lt;/strong&gt; for freelance developers, designers, and small studios.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the visitor can do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;choose a starting package, add-ons, extra pages, and a timeline;&lt;/li&gt;
&lt;li&gt;see an itemized estimate update instantly;&lt;/li&gt;
&lt;li&gt;switch between English and French;&lt;/li&gt;
&lt;li&gt;download a plain-text summary, print or save a PDF, or open a prepared email draft.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I kept it static
&lt;/h2&gt;

&lt;p&gt;The runtime is four files: &lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;styles.css&lt;/code&gt;, &lt;code&gt;config.js&lt;/code&gt;, and &lt;code&gt;app.js&lt;/code&gt;. It runs on static hosting with no backend, build step, account, API key, or runtime dependency.&lt;/p&gt;

&lt;p&gt;The business owner edits package names, prices, add-ons, currency, tax settings, recipient email, and default language in &lt;code&gt;config.js&lt;/code&gt;. The visitor's notes and contact details stay in the browser unless they choose to email, download, or print them.&lt;/p&gt;

&lt;p&gt;The email action uses &lt;code&gt;mailto:&lt;/code&gt; and opens a draft in the visitor's email client. It never sends automatically. I also label the total as an estimate so the page starts a pricing conversation instead of pretending to generate a binding quote.&lt;/p&gt;

&lt;p&gt;I used Codex as a coding collaborator for implementation and QA. The delivered page contains no AI model or external AI API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the flow
&lt;/h2&gt;

&lt;p&gt;Live demo: &lt;a href="https://www.nexushub.nexus/studio/demos/quotekit" rel="noopener noreferrer"&gt;https://www.nexushub.nexus/studio/demos/quotekit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would especially value feedback from people who sell services online: does an instant ballpark estimate qualify a lead, or does it anchor the conversation too early?&lt;/p&gt;

&lt;p&gt;For anyone who wants to adapt it for their own business or client projects, the editable source ZIP is &lt;strong&gt;$12 USD&lt;/strong&gt; with a reusable commercial buyer license. Delivery is by email within 24 hours: &lt;a href="https://buy.stripe.com/6oU4gA6SE9KPawh7hu4gg00" rel="noopener noreferrer"&gt;https://buy.stripe.com/6oU4gA6SE9KPawh7hu4gg00&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>freelance</category>
    </item>
  </channel>
</rss>
