<?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: Shyam Sundar</title>
    <description>The latest articles on DEV Community by Shyam Sundar (@shyamsravikumar).</description>
    <link>https://dev.to/shyamsravikumar</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%2F3118337%2Ffc4544cb-f8ca-4d15-9778-ec4fdd0dca3e.jpg</url>
      <title>DEV Community: Shyam Sundar</title>
      <link>https://dev.to/shyamsravikumar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shyamsravikumar"/>
    <language>en</language>
    <item>
      <title>IncentiveBox: Your personal savings wallet</title>
      <dc:creator>Shyam Sundar</dc:creator>
      <pubDate>Sun, 08 Jun 2025 20:20:55 +0000</pubDate>
      <link>https://dev.to/shyamsravikumar/incentivebox-your-personal-savings-wallet-plb</link>
      <guid>https://dev.to/shyamsravikumar/incentivebox-your-personal-savings-wallet-plb</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/postmark"&gt;Postmark Challenge: Inbox Innovators&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;IncentiveBox is a comprehensive coupon management platform that transforms email-based promotions into an organized, searchable digital wallet. The application automatically parses promotional emails, extracts structured coupon data using AI, and presents it in a clean, user-friendly interface.&lt;/p&gt;

&lt;p&gt;In today's digital economy, consumers are bombarded with promotional emails that often get lost in crowded inboxes. IncentiveBox solves this problem by creating a centralized hub for all promotional offers, ensuring users never miss out on savings opportunities. The platform intelligently categorizes coupons, tracks expiration dates, and provides real-time updates when new offers arrive.&lt;/p&gt;

&lt;p&gt;Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email-based coupon extraction and parsing&lt;/li&gt;
&lt;li&gt;AI-powered data structuring using Claude 3 via OpenRouter&lt;/li&gt;
&lt;li&gt;Real-time updates with Supabase Realtime&lt;/li&gt;
&lt;li&gt;Searchable coupon database with filtering by brand and category&lt;/li&gt;
&lt;li&gt;Expiration tracking with visual indicators&lt;/li&gt;
&lt;li&gt;User favorites system&lt;/li&gt;
&lt;li&gt;Mobile-responsive design&lt;/li&gt;
&lt;/ul&gt;


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


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[incentivebox.vercel.app](https://incentivebox.vercel.app)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/Wo0PpHdLOXU"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Credentials:
&lt;/h3&gt;

&lt;p&gt;Email: &lt;a href="mailto:valid-email@some-mail.com"&gt;valid-email@some-mail.com&lt;/a&gt; (Be sure to enter a valid email since you will be requested to verify your account)&lt;br&gt;
Password: demo1234&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Testing Instructions:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Log in using your credentials&lt;/li&gt;
&lt;li&gt;Browse through existing coupons by category or brand&lt;/li&gt;
&lt;li&gt;Search for specific deals using the search bar&lt;/li&gt;
&lt;li&gt;Save coupons to your favorites&lt;/li&gt;
&lt;li&gt;Use the Help button on the UI for instructions on forwarding promotional emails.

&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sharkfin31" rel="noopener noreferrer"&gt;
        sharkfin31
      &lt;/a&gt; / &lt;a href="https://github.com/sharkfin31/incentivebox" rel="noopener noreferrer"&gt;
        incentivebox
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;IncentiveBox&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A coupon management application with email integration.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Project Structure&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;incentivebox/
├── frontend/             # Frontend React application
│   ├── components/       # React components
│   ├── context/          # React context providers
│   ├── hooks/            # Custom React hooks
│   ├── pages/            # Page components
│   ├── services/         # API services
│   └── utils/            # Utility functions
├── backend/              # Backend Express server
│   ├── index.js          # Main server file
│   └── test-email.js     # Test script for email endpoint
└── public/               # Static assets
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Frontend (React)&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The frontend is built with React and uses Supabase for authentication and data storage.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Setup&lt;/h3&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Install dependencies:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Start the development server:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Features&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;User authentication (sign up, login, logout)&lt;/li&gt;
&lt;li&gt;Coupon browsing and filtering&lt;/li&gt;
&lt;li&gt;Favorites management&lt;/li&gt;
&lt;li&gt;Email-to-coupon integration&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Backend (Express)&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The backend server handles inbound emails from Postmark and processes them into coupons.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Setup&lt;/h3&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Start the server:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm run server
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;For development with…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sharkfin31/incentivebox" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;



&lt;h3&gt;
  
  
  Architecture &amp;amp; Tech Stack
&lt;/h3&gt;

&lt;p&gt;IncentiveBox follows a modern web application architecture with separate frontend and backend components:&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React with TypeScript for type safety and better developer experience&lt;/li&gt;
&lt;li&gt;Vite for fast development and optimized builds&lt;/li&gt;
&lt;li&gt;Custom UI components with inline styling for flexibility&lt;/li&gt;
&lt;li&gt;React Router for navigation&lt;/li&gt;
&lt;li&gt;Context API for state management&lt;/li&gt;
&lt;li&gt;Real-time data synchronization with Supabase Realtime&lt;/li&gt;
&lt;/ul&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%2Faqgv1viensh01f5tzr6y.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%2Faqgv1viensh01f5tzr6y.png" alt="Login"&gt;&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%2Fevjc0su8aass5dca0skq.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%2Fevjc0su8aass5dca0skq.png" alt="Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js with Express for the API server&lt;/li&gt;
&lt;li&gt;AI-powered email parsing using Claude 3 via OpenRouter&lt;/li&gt;
&lt;li&gt;Supabase for database, authentication, and real-time updates&lt;/li&gt;
&lt;li&gt;Postmark for email processing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deployment:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vercel for both frontend and backend hosting&lt;/li&gt;
&lt;li&gt;Environment variables for secure configuration&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;
  
  
  Implementation Process
&lt;/h2&gt;



&lt;h3&gt;
  
  
  Email Processing Pipeline
&lt;/h3&gt;

&lt;p&gt;The core of IncentiveBox is its email processing pipeline. When a promotional email arrives via Postmark's inbound webhook, our backend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receives the email content from Postmark&lt;/li&gt;
&lt;li&gt;Extracts the sender, subject, and body&lt;/li&gt;
&lt;li&gt;Passes this data to our AI parser (Claude 3 via OpenRouter)&lt;/li&gt;
&lt;li&gt;Structures the extracted data (brand, savings amount, expiration date, etc.)&lt;/li&gt;
&lt;li&gt;Stores the structured coupon in Supabase&lt;/li&gt;
&lt;li&gt;Notifies connected clients via Supabase Realtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach allows for seamless conversion of unstructured email content into structured, searchable data.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-Powered Parsing
&lt;/h3&gt;

&lt;p&gt;I chose Claude 3 (via OpenRouter) for its exceptional ability to extract structured data from unstructured text. The AI model is prompted to identify key coupon attributes like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brand name&lt;/li&gt;
&lt;li&gt;Savings amount&lt;/li&gt;
&lt;li&gt;Description&lt;/li&gt;
&lt;li&gt;Expiration date&lt;/li&gt;
&lt;li&gt;Promo code&lt;/li&gt;
&lt;li&gt;Category&lt;/li&gt;
&lt;li&gt;Deal link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For reliability, I implemented a fallback regex-based parser that activates if the AI parsing fails.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-Time Updates
&lt;/h3&gt;

&lt;p&gt;Using Supabase Realtime, I implemented a subscription system that updates the UI instantly when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New coupons are added via email&lt;/li&gt;
&lt;li&gt;Users save coupons to favorites&lt;/li&gt;
&lt;li&gt;Expired coupons are deleted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a dynamic, responsive experience without requiring page refreshes.&lt;/p&gt;

&lt;h2&gt;
  
  
  User Experience Considerations
&lt;/h2&gt;

&lt;p&gt;I made several key UX decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expired coupons are visually distinct with a light red background&lt;/li&gt;
&lt;li&gt;Search functionality is accessible from the header&lt;/li&gt;
&lt;li&gt;Authentication is required to view coupons, ensuring data privacy&lt;/li&gt;
&lt;li&gt;Responsive design works across desktop and mobile devices&lt;/li&gt;
&lt;li&gt;Clean login/registration flow without distracting elements&lt;/li&gt;
&lt;/ul&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%2Fp3uz5rflvdi3l4bnbup7.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%2Fp3uz5rflvdi3l4bnbup7.png" alt="Search"&gt;&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%2F339ywn31j3vhcbmfanat.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%2F339ywn31j3vhcbmfanat.png" alt="Coupon Details"&gt;&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%2Fnnzog9dpp5olwcx3r0et.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%2Fnnzog9dpp5olwcx3r0et.png" alt="Favorited coupons"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Experience with Postmark
&lt;/h2&gt;

&lt;p&gt;Postmark's inbound email processing was instrumental in creating IncentiveBox. The webhook integration was straightforward to implement, and the reliable delivery of parsed email content made it possible to build our email processing pipeline.&lt;/p&gt;

&lt;p&gt;Key benefits of using Postmark included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean, consistent email parsing&lt;/li&gt;
&lt;li&gt;Reliable webhook delivery&lt;/li&gt;
&lt;li&gt;Detailed metadata that helped with sender identification&lt;/li&gt;
&lt;li&gt;Excellent documentation that made integration simple&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The combination of Postmark for email processing, Claude 3 for AI parsing, and Supabase for data storage created a powerful, modern stack that enabled us to build a sophisticated email-to-coupon conversion system with minimal complexity.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>postmarkchallenge</category>
      <category>webdev</category>
      <category>api</category>
    </item>
  </channel>
</rss>
