<?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: Pawan Satoshi</title>
    <description>The latest articles on DEV Community by Pawan Satoshi (@pawanatoshi).</description>
    <link>https://dev.to/pawanatoshi</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%2F3870375%2F3905bbe7-dabe-4693-af32-633cb0641463.png</url>
      <title>DEV Community: Pawan Satoshi</title>
      <link>https://dev.to/pawanatoshi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pawanatoshi"/>
    <language>en</language>
    <item>
      <title>Clear the Lineup: Making ARCTIS Bridge Execution Quote-Safe</title>
      <dc:creator>Pawan Satoshi</dc:creator>
      <pubDate>Sun, 16 Aug 2026 17:08:35 +0000</pubDate>
      <link>https://dev.to/pawanatoshi/clear-the-lineup-making-arctis-bridge-execution-quote-safe-1c9f</link>
      <guid>https://dev.to/pawanatoshi/clear-the-lineup-making-arctis-bridge-execution-quote-safe-1c9f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Clear the Lineup&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis" rel="noopener noreferrer"&gt;ARCTIS&lt;/a&gt; is an AI operating environment for programmable money built on Arc Testnet.&lt;/p&gt;

&lt;p&gt;Its Bridge flow coordinates wallet state, network validation, Circle bridge quotes, transaction preflight, and asynchronous execution.&lt;/p&gt;

&lt;p&gt;Live application:&lt;br&gt;
&lt;a href="https://arctis-zeta.vercel.app/" rel="noopener noreferrer"&gt;https://arctis-zeta.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repository:&lt;br&gt;
&lt;a href="https://github.com/pawansatoshi/Arctis" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/Arctis&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bug Fix or Performance Improvement
&lt;/h2&gt;

&lt;p&gt;The Bridge flow had a subtle asynchronous race condition.&lt;/p&gt;

&lt;p&gt;A bridge quote could be requested while the user was changing the amount or route. Because the operation was asynchronous, an older quote response could return after a newer request and overwrite the current state.&lt;/p&gt;

&lt;p&gt;There was also a second race: repeated or overlapping execution paths could reach the bridge execution flow before the previous operation had completed.&lt;/p&gt;

&lt;p&gt;In a financial transaction flow, this is more than a normal UI race.&lt;/p&gt;

&lt;p&gt;The execution layer must never use stale transaction intent, and the same transaction must not be executed more than once because of overlapping asynchronous operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Root Cause
&lt;/h2&gt;

&lt;p&gt;The original implementation relied on React state captured by asynchronous callbacks.&lt;/p&gt;

&lt;p&gt;That created two related problems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stale quote race&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An older &lt;code&gt;estimateBridge()&lt;/code&gt; response could finish after a newer quote request and update state with obsolete quote information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duplicate execution race&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More than one execution path could reach the bridge operation before the first operation had completed.&lt;/p&gt;

&lt;p&gt;The Circle bridge itself was not the root cause. The problem was the application's client-side orchestration around asynchronous financial operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The complete fix is available in this commit:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/commit/d3a10816e7b68f1d2ed7357f204b2e8fc3faf097" rel="noopener noreferrer"&gt;fix: stop duplicate bridge execution and stale quote races — d3a10816&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The relevant Bridge implementation is in:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/blob/main/src/app/bridge/page.tsx" rel="noopener noreferrer"&gt;ARCTIS Bridge page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The execution lock is implemented here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/blob/main/src/lib/transaction/execution-lock.ts" rel="noopener noreferrer"&gt;transaction/execution-lock.ts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The transaction regression coverage is here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/blob/main/scripts/transaction-regression.mjs" rel="noopener noreferrer"&gt;transaction-regression.mjs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Improvements
&lt;/h2&gt;

&lt;p&gt;I fixed the race at the application level rather than trying to hide it with UI timing.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Current state reference
&lt;/h3&gt;

&lt;p&gt;The Bridge flow now keeps a reference to the latest session state.&lt;/p&gt;

&lt;p&gt;This prevents asynchronous callbacks from relying on stale React closures.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Quote sequencing
&lt;/h3&gt;

&lt;p&gt;Each quote request receives a sequence number.&lt;/p&gt;

&lt;p&gt;A quote response is accepted only if it is still the newest request.&lt;/p&gt;

&lt;p&gt;This means an old network response can finish normally without being allowed to overwrite a newer quote.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Single-flight execution
&lt;/h3&gt;

&lt;p&gt;Bridge execution now uses a deterministic execution lock.&lt;/p&gt;

&lt;p&gt;The lock is based on the wallet, execution mode, source/destination route, and amount.&lt;/p&gt;

&lt;p&gt;If the same operation is already executing, another execution attempt is rejected instead of entering the bridge flow again.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Execution revalidation
&lt;/h3&gt;

&lt;p&gt;The transaction is not allowed to cross the execution boundary using an old quote alone.&lt;/p&gt;

&lt;p&gt;Before wallet approval, the flow performs the required validation and obtains current bridge information again.&lt;/p&gt;

&lt;p&gt;The resulting execution pipeline is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User intent → Quote → Network verification → Balance/gas preflight → Fresh quote → Fee validation → Wallet approval → Bridge execution&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Safe release
&lt;/h3&gt;

&lt;p&gt;The execution lock is released after the execution path completes or fails, preventing a failed transaction from permanently blocking future legitimate attempts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;The important invariant after the fix is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Only current, validated transaction state may cross the execution boundary.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This matters especially for financial interfaces because asynchronous timing should not determine which quote, amount, route, or transaction state reaches the wallet.&lt;/p&gt;

&lt;p&gt;The fix makes the execution lifecycle deterministic:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proposal → Quote → Preflight → Fresh quote → Human approval → Submitted → Processing → Confirmed/Failed&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Regression Coverage
&lt;/h2&gt;

&lt;p&gt;The repository contains transaction regression checks for the critical safeguards.&lt;/p&gt;

&lt;p&gt;The regression coverage checks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current session state handling&lt;/li&gt;
&lt;li&gt;quote sequencing&lt;/li&gt;
&lt;li&gt;execution locking&lt;/li&gt;
&lt;li&gt;execution lock release&lt;/li&gt;
&lt;li&gt;chain verification&lt;/li&gt;
&lt;li&gt;network switching&lt;/li&gt;
&lt;li&gt;transaction confirmation handling&lt;/li&gt;
&lt;li&gt;bridge safeguards&lt;/li&gt;
&lt;li&gt;Circle quote gating&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regression script:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/blob/main/scripts/transaction-regression.mjs" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/Arctis/blob/main/scripts/transaction-regression.mjs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;p&gt;The latest ARCTIS production deployment is marked READY on Vercel.&lt;/p&gt;

&lt;p&gt;Live application:&lt;/p&gt;

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

&lt;p&gt;The current production deployment was checked for recent runtime errors and had no errors in the available latest-hour runtime window.&lt;/p&gt;

&lt;p&gt;The repository also contains a release QA gate covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;type checking&lt;/li&gt;
&lt;li&gt;build validation&lt;/li&gt;
&lt;li&gt;API validation&lt;/li&gt;
&lt;li&gt;persistence&lt;/li&gt;
&lt;li&gt;concurrency&lt;/li&gt;
&lt;li&gt;duplicate execution&lt;/li&gt;
&lt;li&gt;retry and timeout behavior&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;li&gt;accessibility&lt;/li&gt;
&lt;li&gt;responsive behavior&lt;/li&gt;
&lt;li&gt;production smoke testing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Impact
&lt;/h2&gt;

&lt;p&gt;This was a bug fix in an existing ARCTIS codebase, not a new feature.&lt;/p&gt;

&lt;p&gt;The fix removes two classes of timing-dependent failures from the Bridge flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;stale quote/state races&lt;/li&gt;
&lt;li&gt;duplicate execution races&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a more deterministic and safer transaction pipeline without changing the intended Bridge user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;Commit:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/commit/d3a10816e7b68f1d2ed7357f204b2e8fc3faf097" rel="noopener noreferrer"&gt;d3a10816 — fix: stop duplicate bridge execution and stale quote races&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primary Bridge code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/blob/main/src/app/bridge/page.tsx" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/Arctis/blob/main/src/app/bridge/page.tsx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Execution lock:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/blob/main/src/lib/transaction/execution-lock.ts" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/Arctis/blob/main/src/lib/transaction/execution-lock.ts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regression tests:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis/blob/main/scripts/transaction-regression.mjs" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/Arctis/blob/main/scripts/transaction-regression.mjs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Demo
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/Arctis" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/Arctis&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaway
&lt;/h2&gt;

&lt;p&gt;A transaction interface can look completely correct while still having a dangerous asynchronous race underneath.&lt;/p&gt;

&lt;p&gt;The ARCTIS Bridge bug was caused by stale quote responses and overlapping execution paths.&lt;/p&gt;

&lt;p&gt;The fix makes quote state current, execution single-flight, and transaction state revalidated before wallet approval.&lt;/p&gt;

&lt;p&gt;The key engineering principle is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not let asynchronous timing decide what financial transaction state gets executed.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  bugsmash
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
    </item>
    <item>
      <title>I Fixed a Modal That Said “Accessible” But Wasn’t</title>
      <dc:creator>Pawan Satoshi</dc:creator>
      <pubDate>Sun, 16 Aug 2026 09:01:33 +0000</pubDate>
      <link>https://dev.to/pawanatoshi/i-fixed-a-modal-that-said-accessible-but-wasnt-3bei</link>
      <guid>https://dev.to/pawanatoshi/i-fixed-a-modal-that-said-accessible-but-wasnt-3bei</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Clear the Lineup&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://the-comfort-table.vercel.app/" rel="noopener noreferrer"&gt;The Comfort Table&lt;/a&gt; is an interactive comfort-food editorial experience originally built for the DEV Frontend Challenge.&lt;/p&gt;

&lt;p&gt;Visitors can discover comfort dishes through mood and moment, explore a global menu, and open detailed dish stories inside a custom modal.&lt;/p&gt;

&lt;p&gt;The project uses semantic HTML, responsive CSS, vanilla JavaScript, visible focus states, &lt;code&gt;aria-pressed&lt;/code&gt;, &lt;code&gt;aria-live&lt;/code&gt;, reduced-motion support, and touch-friendly interactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bug Fix or Performance Improvement
&lt;/h2&gt;

&lt;p&gt;The bug was in the custom dish-details modal.&lt;/p&gt;

&lt;p&gt;The component declared itself with &lt;code&gt;role="dialog"&lt;/code&gt; and &lt;code&gt;aria-modal="true"&lt;/code&gt;, but its behavior did not fully satisfy what those semantics promised.&lt;/p&gt;

&lt;p&gt;The visual modal worked, but the focus-management lifecycle was incomplete.&lt;/p&gt;

&lt;p&gt;A robust modal needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;move focus into the dialog when it opens&lt;/li&gt;
&lt;li&gt;keep &lt;code&gt;Tab&lt;/code&gt; and &lt;code&gt;Shift+Tab&lt;/code&gt; inside the dialog&lt;/li&gt;
&lt;li&gt;close with &lt;code&gt;Escape&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;restore focus to the element that opened it&lt;/li&gt;
&lt;li&gt;prevent interaction with the background while open&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The root problem was treating ARIA semantics and modal behavior as separate concerns.&lt;/p&gt;

&lt;p&gt;A dialog should not claim to be modal while still allowing its interaction model to behave like a normal page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The accessibility fix is documented in this commit:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table/commit/62a7f04a88d798c0dc6221f7c647b344f84f221b" rel="noopener noreferrer"&gt;62a7f04 — fix: harden modal accessibility&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table" rel="noopener noreferrer"&gt;github.com/pawansatoshi/the-comfort-table&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primary implementation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table/blob/main/index.html" rel="noopener noreferrer"&gt;index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fixed modal lifecycle is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invoking button → Open modal → Move focus inside → Contain Tab / Shift+Tab → Escape or close → Restore focus → Return to invoking button&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The implementation also makes the background inert while the dialog is active and keeps overlay and close behavior within the same lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Improvements
&lt;/h2&gt;

&lt;p&gt;I approached the bug as an accessibility behavior problem rather than simply adding ARIA attributes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Initial Focus
&lt;/h3&gt;

&lt;p&gt;When the modal opens, focus is moved into the dialog instead of leaving the user somewhere behind the modal.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Focus Containment
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Tab&lt;/code&gt; and &lt;code&gt;Shift+Tab&lt;/code&gt; are handled so keyboard focus remains within the modal boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Escape Handling
&lt;/h3&gt;

&lt;p&gt;The dialog can be dismissed with &lt;code&gt;Escape&lt;/code&gt;, providing a predictable keyboard exit.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Focus Restoration
&lt;/h3&gt;

&lt;p&gt;When the modal closes, focus returns to the dish control that originally opened it.&lt;/p&gt;

&lt;p&gt;This prevents keyboard users from losing their position in the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Background Inertness
&lt;/h3&gt;

&lt;p&gt;The page behind the modal is treated as unavailable while the dialog is open.&lt;/p&gt;

&lt;p&gt;This makes the implementation consistent with the declared &lt;code&gt;aria-modal="true"&lt;/code&gt; behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Regression Safety
&lt;/h3&gt;

&lt;p&gt;The fix was designed around the existing UI rather than replacing the component with a new visual implementation.&lt;/p&gt;

&lt;p&gt;The responsive layout, dish experience, and existing interaction design remain intact.&lt;/p&gt;

&lt;p&gt;The key engineering principle was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ARIA should describe real behavior, not replace it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;p&gt;I manually verified the deployed application on mobile.&lt;/p&gt;

&lt;p&gt;The following behaviors were checked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modal opens from the dish details control&lt;/li&gt;
&lt;li&gt;modal closes correctly&lt;/li&gt;
&lt;li&gt;overlay interaction behaves correctly&lt;/li&gt;
&lt;li&gt;repeated open and close cycles remain stable&lt;/li&gt;
&lt;li&gt;refresh does not leave the interface in a broken modal state&lt;/li&gt;
&lt;li&gt;responsive layout remains usable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation also contains the keyboard lifecycle for &lt;code&gt;Tab&lt;/code&gt;, &lt;code&gt;Shift+Tab&lt;/code&gt;, &lt;code&gt;Escape&lt;/code&gt;, and focus restoration.&lt;/p&gt;

&lt;p&gt;I am deliberately not claiming an independently performed desktop keyboard pass because this submission was prepared from a mobile device.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact
&lt;/h2&gt;

&lt;p&gt;This was a focused code fix with a meaningful accessibility impact.&lt;/p&gt;

&lt;p&gt;Without proper focus management, a custom modal can be visually correct while still creating a confusing experience for keyboard and assistive-technology users.&lt;/p&gt;

&lt;p&gt;The fix brings the component's actual interaction model closer to the semantics it already declared.&lt;/p&gt;

&lt;p&gt;It also establishes a reusable pattern for future dialogs in the project:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;semantic state + focus management + keyboard behavior + background isolation + focus restoration&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://the-comfort-table.vercel.app/" rel="noopener noreferrer"&gt;https://the-comfort-table.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/the-comfort-table&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Accessibility Fix Commit
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table/commit/62a7f04a88d798c0dc6221f7c647b344f84f221b" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/the-comfort-table/commit/62a7f04a88d798c0dc6221f7c647b344f84f221b&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Supporting Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table/blob/main/DEV-SUBMISSION.md" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/the-comfort-table/blob/main/DEV-SUBMISSION.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table/blob/main/README.md" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/the-comfort-table/blob/main/README.md&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  bugsmash
&lt;/h1&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
    </item>
    <item>
      <title>The Comfort Table — Food That Remembers</title>
      <dc:creator>Pawan Satoshi</dc:creator>
      <pubDate>Sun, 16 Aug 2026 05:36:33 +0000</pubDate>
      <link>https://dev.to/pawanatoshi/the-comfort-table-food-that-remembers-5609</link>
      <guid>https://dev.to/pawanatoshi/the-comfort-table-food-that-remembers-5609</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;The Comfort Table&lt;/strong&gt;, an interactive food-memory experience inspired by the meals that make an ordinary day feel like home.&lt;/p&gt;

&lt;p&gt;Instead of creating a traditional restaurant landing page, I wanted to make the landing page itself feel like a small digital dining room.&lt;/p&gt;

&lt;p&gt;The experience combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A responsive editorial-style landing page&lt;/li&gt;
&lt;li&gt;An interactive Comfort Finder based on mood and moment&lt;/li&gt;
&lt;li&gt;A searchable world menu&lt;/li&gt;
&lt;li&gt;Country filtering&lt;/li&gt;
&lt;li&gt;Detailed dish cards with ingredients, preparation, taste and serving notes&lt;/li&gt;
&lt;li&gt;A dish-details modal with keyboard-accessible interaction&lt;/li&gt;
&lt;li&gt;Multilingual UI support for English, Hindi, Spanish, French, Japanese, Korean and Arabic&lt;/li&gt;
&lt;li&gt;Responsive layouts for mobile, tablet and desktop&lt;/li&gt;
&lt;li&gt;CSS-generated hero artwork&lt;/li&gt;
&lt;li&gt;Reduced-motion support&lt;/li&gt;
&lt;li&gt;Semantic HTML and accessibility-focused interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The central idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Comfort food has no passport.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Whether it is khichdi in India, ramen in Japan, pasta in Italy or tacos in Mexico, food can carry memory, place and emotion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://the-comfort-table.vercel.app/" rel="noopener noreferrer"&gt;https://the-comfort-table.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source Code:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/pawansatoshi/the-comfort-table" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/the-comfort-table&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;I started with the idea of building something that felt more personal than a conventional food website.&lt;/p&gt;

&lt;p&gt;The challenge was not only to make the page visually polished, but to make the experience useful and enjoyable to interact with.&lt;/p&gt;

&lt;p&gt;The Comfort Finder became the core interaction: users can choose how their day feels and the moment they are eating, and the interface recommends a dish from the collection.&lt;/p&gt;

&lt;p&gt;I also spent significant time on responsive behavior because the experience should work equally well on a phone, tablet and desktop.&lt;/p&gt;

&lt;p&gt;One part I am particularly proud of is the accessibility work around the dish-details modal. A visually attractive modal is not enough if keyboard users can escape into the background content or lose their place after closing it.&lt;/p&gt;

&lt;p&gt;The modal interaction was therefore hardened with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;focus management&lt;/li&gt;
&lt;li&gt;focus restoration&lt;/li&gt;
&lt;li&gt;Tab and Shift+Tab containment&lt;/li&gt;
&lt;li&gt;Escape-to-close behavior&lt;/li&gt;
&lt;li&gt;inert background content&lt;/li&gt;
&lt;li&gt;proper modal lifecycle handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This made accessibility part of the interaction model rather than an afterthought.&lt;/p&gt;

&lt;p&gt;Another challenge was keeping the interface expressive without making it dependent on a large frontend framework. The project uses semantic HTML, CSS and purposeful JavaScript to keep the experience lightweight and understandable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;This project reinforced an important frontend lesson for me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A landing page is not just a visual composition. It is an interaction system.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Typography, spacing, responsive layout, keyboard behavior, focus management, loading behavior and content hierarchy all contribute to whether the experience actually works.&lt;/p&gt;

&lt;p&gt;I also learned that small details can have a large impact. A remembered focus target, a properly contained modal, a reduced-motion fallback or a thoughtful empty state can make the difference between something that merely looks good and something that feels finished.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Proud Of
&lt;/h2&gt;

&lt;p&gt;I'm particularly proud of combining visual storytelling with practical frontend engineering.&lt;/p&gt;

&lt;p&gt;The project is intentionally designed to feel like a warm editorial food experience while still behaving like a real interactive product.&lt;/p&gt;

&lt;p&gt;The goal was not to build the biggest food website.&lt;/p&gt;

&lt;p&gt;It was to build a small experience that makes people want to explore one more dish.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'd like to continue expanding the experience with richer food stories, more regional dishes, stronger discovery interactions and additional accessibility testing.&lt;/p&gt;

&lt;p&gt;Ultimately, I'd like The Comfort Table to become less like a collection of recipes and more like a digital map of the memories people associate with food.&lt;/p&gt;

&lt;p&gt;Thanks for checking it out.&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>No Passport Required — Comfort Food Around the World</title>
      <dc:creator>Pawan Satoshi</dc:creator>
      <pubDate>Sun, 16 Aug 2026 03:59:05 +0000</pubDate>
      <link>https://dev.to/pawanatoshi/no-passport-required-comfort-food-around-the-world-4dfj</link>
      <guid>https://dev.to/pawanatoshi/no-passport-required-comfort-food-around-the-world-4dfj</guid>
      <description>&lt;p&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, CSS Art&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;Comfort food does not need a passport.&lt;/p&gt;

&lt;p&gt;Everywhere in the world, there is a dish that means something more than food. It can mean home, family, a long day ending, a celebration, or simply someone taking care of you.&lt;/p&gt;

&lt;p&gt;For this challenge, I wanted to turn that idea into a single CSS artwork.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Passport Required&lt;/strong&gt; is a CSS-only celebration of comfort food around the world.&lt;/p&gt;

&lt;p&gt;The scene brings together familiar comfort foods from different cultures around one shared table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Italy — Margherita pizza&lt;/li&gt;
&lt;li&gt;Japan — ramen&lt;/li&gt;
&lt;li&gt;Mexico — tacos&lt;/li&gt;
&lt;li&gt;India — khichdi&lt;/li&gt;
&lt;li&gt;USA — mac and cheese&lt;/li&gt;
&lt;li&gt;France — French onion soup&lt;/li&gt;
&lt;li&gt;Korea — tteokbokki&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different dishes.&lt;/p&gt;

&lt;p&gt;Different kitchens.&lt;/p&gt;

&lt;p&gt;Different traditions.&lt;/p&gt;

&lt;p&gt;One feeling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comfort.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://the-comfort-table.vercel.app/css-art.html" rel="noopener noreferrer"&gt;View the live CSS Art&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The artwork is rendered directly in the browser using HTML and CSS.&lt;/p&gt;

&lt;p&gt;No food photographs, canvas drawings, or external illustration libraries are used for the artwork.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/pawansatoshi/the-comfort-table" rel="noopener noreferrer"&gt;View the project on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I created a warm late-evening dining table where different comfort foods meet in one visual composition.&lt;/p&gt;

&lt;p&gt;The scene uses CSS shapes, gradients, shadows, pseudo-elements and responsive positioning to create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;plates and bowls&lt;/li&gt;
&lt;li&gt;pizza&lt;/li&gt;
&lt;li&gt;ramen&lt;/li&gt;
&lt;li&gt;tacos&lt;/li&gt;
&lt;li&gt;rice&lt;/li&gt;
&lt;li&gt;soup&lt;/li&gt;
&lt;li&gt;noodles&lt;/li&gt;
&lt;li&gt;cheese&lt;/li&gt;
&lt;li&gt;herbs and toppings&lt;/li&gt;
&lt;li&gt;utensils&lt;/li&gt;
&lt;li&gt;steam&lt;/li&gt;
&lt;li&gt;table lighting&lt;/li&gt;
&lt;li&gt;shadows and depth&lt;/li&gt;
&lt;li&gt;a warm kitchen atmosphere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not photorealism.&lt;/p&gt;

&lt;p&gt;The goal was to make the viewer immediately understand the feeling behind the food.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why CSS?
&lt;/h2&gt;

&lt;p&gt;CSS is usually treated as the layer that makes an interface look good.&lt;/p&gt;

&lt;p&gt;For this challenge, I wanted to push it further and use CSS as the illustration medium itself.&lt;/p&gt;

&lt;p&gt;Instead of placing photographs of food on a page, I built the visual language from scratch using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gradients&lt;/li&gt;
&lt;li&gt;border-radius&lt;/li&gt;
&lt;li&gt;pseudo-elements&lt;/li&gt;
&lt;li&gt;box-shadow&lt;/li&gt;
&lt;li&gt;transforms&lt;/li&gt;
&lt;li&gt;layered positioning&lt;/li&gt;
&lt;li&gt;CSS animation&lt;/li&gt;
&lt;li&gt;responsive media queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The artwork is intentionally asset-light so the shapes, composition and CSS techniques remain visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;p&gt;The title is &lt;strong&gt;No Passport Required&lt;/strong&gt; because comfort is universal.&lt;/p&gt;

&lt;p&gt;A person does not need to know the complete history of a dish to recognize what it represents.&lt;/p&gt;

&lt;p&gt;Warm food.&lt;/p&gt;

&lt;p&gt;A familiar smell.&lt;/p&gt;

&lt;p&gt;A table.&lt;/p&gt;

&lt;p&gt;Someone waiting.&lt;/p&gt;

&lt;p&gt;A place that feels like home.&lt;/p&gt;

&lt;h2&gt;
  
  
  Responsive Design
&lt;/h2&gt;

&lt;p&gt;The composition is designed to adapt across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;desktop&lt;/li&gt;
&lt;li&gt;laptop&lt;/li&gt;
&lt;li&gt;tablet&lt;/li&gt;
&lt;li&gt;mobile&lt;/li&gt;
&lt;li&gt;portrait layouts&lt;/li&gt;
&lt;li&gt;landscape layouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The artwork scales and repositions instead of simply shrinking the desktop composition.&lt;/p&gt;

&lt;p&gt;It also supports &lt;code&gt;prefers-reduced-motion&lt;/code&gt; so users who prefer reduced motion are not dependent on the steam animation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;The hardest part was not creating individual food shapes.&lt;/p&gt;

&lt;p&gt;It was making different foods from different cultures feel like part of one coherent visual scene.&lt;/p&gt;

&lt;p&gt;The solution was to focus on the shared experience rather than making every dish perfectly realistic.&lt;/p&gt;

&lt;p&gt;CSS became the tool for creating atmosphere rather than just decoration.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Proud Of
&lt;/h2&gt;

&lt;p&gt;I'm proud that the artwork starts with a simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Comfort food is different everywhere, but the feeling is familiar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The visual then turns that idea into one shared table.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I would love to expand this into a larger interactive collection where visitors can select a country and discover the comfort food, ingredients, preparation and story behind it.&lt;/p&gt;

&lt;p&gt;That idea also became the foundation for &lt;strong&gt;The Comfort Table&lt;/strong&gt;, the larger interactive landing-page experience accompanying this CSS artwork.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;p&gt;HTML + CSS&lt;/p&gt;

&lt;p&gt;No framework.&lt;/p&gt;

&lt;p&gt;No external illustration library.&lt;/p&gt;

&lt;p&gt;No canvas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge
&lt;/h2&gt;

&lt;p&gt;Frontend Challenge — Comfort Food Edition&lt;/p&gt;

&lt;p&gt;Thanks for taking a seat at the table.&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>I Built BARKVERSE: What If Dogs Had Their Own Internet? 🐶</title>
      <dc:creator>Pawan Satoshi</dc:creator>
      <pubDate>Sat, 15 Aug 2026 09:23:57 +0000</pubDate>
      <link>https://dev.to/pawanatoshi/i-built-barkverse-what-if-dogs-had-their-own-internet-2a9</link>
      <guid>https://dev.to/pawanatoshi/i-built-barkverse-what-if-dogs-had-their-own-internet-2a9</guid>
      <description>&lt;h1&gt;
  
  
  What If Dogs Had Their Own Internet?
&lt;/h1&gt;

&lt;p&gt;Every dog has a personality.&lt;/p&gt;

&lt;p&gt;They have their own habits, moods, favourite things, secret missions, suspicious refrigerator investigations, and an impressive ability to understand humans without saying a single word.&lt;/p&gt;

&lt;p&gt;But what if dogs had their own internet?&lt;/p&gt;

&lt;p&gt;That question became &lt;strong&gt;BARKVERSE&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🐶 &lt;strong&gt;BARKVERSE is an AI-powered interactive dog world where a real dog photo becomes the beginning of a playful digital identity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of building another static AI image analyzer, I wanted to create something people could actually explore, play with, and come back to.&lt;/p&gt;

&lt;h2&gt;
  
  
  🐾 Meet BARKVERSE
&lt;/h2&gt;

&lt;p&gt;[WATCH THE DEMO VIDEO]&lt;br&gt;
&lt;a href="https://youtu.be/v2fX4cu7eRA" rel="noopener noreferrer"&gt;https://youtu.be/v2fX4cu7eRA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://barkverse.vercel.app/" rel="noopener noreferrer"&gt;https://barkverse.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/pawansatoshi/barkverse" rel="noopener noreferrer"&gt;https://github.com/pawansatoshi/barkverse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The experience starts with one simple thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A dog.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can take a photo using your camera&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>100daysofsolana</category>
      <category>devchallenge</category>
    </item>
  </channel>
</rss>
