<?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: Muhammad Tahir Baloch</title>
    <description>The latest articles on DEV Community by Muhammad Tahir Baloch (@setahirbaloch).</description>
    <link>https://dev.to/setahirbaloch</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%2F2044482%2F24fbff34-946f-4d60-a0ed-208b5a208041.png</url>
      <title>DEV Community: Muhammad Tahir Baloch</title>
      <link>https://dev.to/setahirbaloch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/setahirbaloch"/>
    <language>en</language>
    <item>
      <title>Building Quick Quotations with Next.js: A Modern Quotation Management App That Works Entirely in the Browser</title>
      <dc:creator>Muhammad Tahir Baloch</dc:creator>
      <pubDate>Mon, 06 Jul 2026 17:44:19 +0000</pubDate>
      <link>https://dev.to/setahirbaloch/building-quick-quotations-with-nextjs-a-modern-quotation-management-app-that-works-entirely-in-284g</link>
      <guid>https://dev.to/setahirbaloch/building-quick-quotations-with-nextjs-a-modern-quotation-management-app-that-works-entirely-in-284g</guid>
      <description>&lt;p&gt;As developers, we often build projects to learn a new framework or library.&lt;/p&gt;

&lt;p&gt;This time, I wanted to solve a real-world business problem while exploring modern frontend architecture.&lt;/p&gt;

&lt;p&gt;The result is Quick Quotations, a quotation management application built with Next.js, TypeScript, and IndexedDB that allows businesses and freelancers to create professional quotations without relying on a backend.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://quick-quotations-puce.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;quick-quotations-puce.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The entire application runs inside the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I Built It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many small businesses still create quotations using Word documents, spreadsheets, or PDFs that need to be edited manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That approach has several problems:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Repetitive work&lt;/li&gt;
&lt;li&gt;Inconsistent formatting&lt;/li&gt;
&lt;li&gt;Difficult editing&lt;/li&gt;
&lt;li&gt;Manual calculations&lt;/li&gt;
&lt;li&gt;No centralized quotation history&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;I wanted a solution that was:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Fast&lt;/li&gt;
&lt;li&gt;2. Modern&lt;/li&gt;
&lt;li&gt;3. Offline-friendly&lt;/li&gt;
&lt;li&gt;4. Easy to use&lt;/li&gt;
&lt;li&gt;5. Privacy-focused&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of storing user data on a server, I decided to store everything locally using IndexedDB.&lt;/p&gt;

&lt;p&gt;This means users keep full control over their own data while enjoying an application-like experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application is built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js (App Router)&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;React PDF&lt;/li&gt;
&lt;li&gt;IndexedDB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each technology was chosen for a specific reason.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next.js App Router&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The App Router makes organizing large applications much easier through layouts, nested routing, and server/client component separation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Type safety becomes increasingly valuable as applications grow.&lt;br&gt;
It helped catch bugs early and made refactoring much safer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React PDF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Generating professional PDFs inside React was one of the most interesting parts of this project.&lt;/p&gt;

&lt;p&gt;The exported PDF closely matches the live preview shown inside the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IndexedDB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of building an authentication system and backend API, I wanted the application to remain completely client-side.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;IndexedDB provides:&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large storage capacity&lt;/li&gt;
&lt;li&gt;Structured data&lt;/li&gt;
&lt;li&gt;Fast queries&lt;/li&gt;
&lt;li&gt;Offline support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users can continue working without an internet connection.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Tailwind CSS&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Tailwind made it easy to build reusable UI components while maintaining a consistent design system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Quotations&lt;/li&gt;
&lt;li&gt;Create professional quotations in minutes.&lt;/li&gt;
&lt;li&gt;No complicated forms.&lt;/li&gt;
&lt;li&gt;No unnecessary steps.&lt;/li&gt;
&lt;li&gt;Edit Existing Quotations&lt;/li&gt;
&lt;li&gt;Every quotation remains editable after creation.&lt;/li&gt;
&lt;li&gt;Update customer information, products, taxes, discounts, or notes whenever needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Live PDF Preview&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://quick-quotations-puce.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;quick-quotations-puce.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;One feature I particularly enjoyed building was the live preview.&lt;br&gt;
Users immediately see how their quotation will look before exporting it. There are no surprises after generating the PDF.&lt;br&gt;
Professional PDF Export quotations as polished PDFs suitable for clients.&lt;/p&gt;

&lt;p&gt;The layout is designed to look clean, consistent, and business-ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Company Profile Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Store company information once and reuse it across every quotation.&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Company name&lt;/li&gt;
&lt;li&gt;Address&lt;/li&gt;
&lt;li&gt;Country&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Contact information&lt;/li&gt;
&lt;li&gt;Tax details&lt;/li&gt;
&lt;li&gt;Automatic Calculations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application automatically calculates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subtotal&lt;/li&gt;
&lt;li&gt;Discounts&lt;/li&gt;
&lt;li&gt;Taxes&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Grand Total&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This reduces manual errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Local Data Storage&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every quotation is stored inside IndexedDB.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No backend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No database server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No account required.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Responsive UI&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interface works smoothly across desktop and laptop screens while maintaining a clean, modern design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges I Faced&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every project teaches something new.&lt;/p&gt;

&lt;p&gt;This one was no exception.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. PDF Generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creating responsive web pages is one thing.&lt;/p&gt;

&lt;p&gt;Generating identical PDF layouts is another.&lt;/p&gt;

&lt;p&gt;React PDF follows different rendering rules compared to HTML and CSS, so several layouts had to be redesigned specifically for PDF generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Synchronizing Preview and PDF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keeping the live preview visually identical to the exported PDF required careful component organization.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;p&gt;What users see should be exactly what they export.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Client-Side Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without a backend, data management becomes even more important.&lt;/p&gt;

&lt;p&gt;Designing reusable services around IndexedDB helped keep the application organized and scalable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reusable Components&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of writing separate UI for every page, I focused on reusable components that could be shared throughout the application.&lt;/p&gt;

&lt;p&gt;This reduced duplication and simplified future development.&lt;br&gt;
What I Learned Building this project improved my understanding of:&lt;/p&gt;

&lt;p&gt;Next.js App Router&lt;br&gt;
TypeScript architecture&lt;br&gt;
Client-side databases&lt;br&gt;
PDF generation with React&lt;br&gt;
IndexedDB data modeling&lt;br&gt;
Component reusability&lt;br&gt;
Form management&lt;br&gt;
Business application workflows&lt;br&gt;
Modern frontend architecture&lt;br&gt;
Future Improvements&lt;/p&gt;

&lt;p&gt;The current version focuses on local-first usage, but there are many features I'd like to explore in the future.&lt;/p&gt;

&lt;p&gt;Some ideas include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer management&lt;/li&gt;
&lt;li&gt;Product catalog&lt;/li&gt;
&lt;li&gt;Multi-currency support&lt;/li&gt;
&lt;li&gt;Quotation templates&lt;/li&gt;
&lt;li&gt;Dark mode&lt;/li&gt;
&lt;li&gt;Import and export backups&lt;/li&gt;
&lt;li&gt;Cloud synchronization (optional)&lt;/li&gt;
&lt;li&gt;Analytics dashboard&lt;/li&gt;
&lt;li&gt;Email quotation directly from the app&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;li&gt;Why Local-First?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One design decision I'm particularly happy with is choosing a local-first architecture.&lt;/p&gt;

&lt;p&gt;Not every application needs a backend.&lt;/p&gt;

&lt;p&gt;For many small business tools, storing data locally provides several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better privacy&lt;/li&gt;
&lt;li&gt;Faster performance&lt;/li&gt;
&lt;li&gt;Lower hosting costs&lt;/li&gt;
&lt;li&gt;Offline capability&lt;/li&gt;
&lt;li&gt;Simpler deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes the simplest architecture is the best architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quick Quotation&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpodhfxzl9gnod12tp8ta.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpodhfxzl9gnod12tp8ta.png" alt=" " width="800" height="706"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;s started as a learning project, but it evolved into something that solves a genuine business need.&lt;/p&gt;

&lt;p&gt;It gave me practical experience with Next.js, IndexedDB, React PDF, and scalable frontend architecture while reinforcing the importance of building applications around real user problems.&lt;/p&gt;

&lt;p&gt;There are still many features I'd like to add, but I'm proud of how far the project has come.&lt;/p&gt;

&lt;p&gt;If you're building business tools with Next.js or experimenting with local-first applications, I'd love to hear your thoughts and learn how you approach similar challenges.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Build your API, not your boilerplate.</title>
      <dc:creator>Muhammad Tahir Baloch</dc:creator>
      <pubDate>Fri, 26 Jun 2026 13:36:51 +0000</pubDate>
      <link>https://dev.to/setahirbaloch/build-your-api-not-your-boilerplate-15j4</link>
      <guid>https://dev.to/setahirbaloch/build-your-api-not-your-boilerplate-15j4</guid>
      <description>&lt;p&gt;🚀 After building backend projects repeatedly, I realized I was solving the same infrastructure problems every time.&lt;/p&gt;

&lt;p&gt;Before writing a single business feature, I had to configure:&lt;/p&gt;

&lt;p&gt;• TypeScript&lt;br&gt;
• Express&lt;br&gt;
• Prisma&lt;br&gt;
• PostgreSQL&lt;br&gt;
• JWT Authentication&lt;br&gt;
• Email verification&lt;br&gt;
• Password reset&lt;br&gt;
• Two-Factor Authentication (2FA)&lt;br&gt;
• CSRF Protection&lt;br&gt;
• Role-based Authorization&lt;br&gt;
• Rate Limiting&lt;br&gt;
• Security Headers&lt;br&gt;
• Input Validation&lt;br&gt;
• Project Structure&lt;/p&gt;

&lt;p&gt;It quickly became repetitive.&lt;/p&gt;

&lt;p&gt;So I started building &lt;strong&gt;Backend Starter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A production-ready Express.js starter that lets you focus on building products instead of setting up infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's included?
&lt;/h3&gt;

&lt;p&gt;🔐 &lt;strong&gt;Authentication&lt;/strong&gt;&lt;br&gt;
• JWT Access &amp;amp; Refresh Tokens&lt;br&gt;
• HTTP-only Cookies&lt;br&gt;
• Email Verification&lt;br&gt;
• Password Reset&lt;br&gt;
• Change Email&lt;br&gt;
• Change Password&lt;br&gt;
• Two-Factor Authentication (2FA)&lt;/p&gt;

&lt;p&gt;🛡️ &lt;strong&gt;Security&lt;/strong&gt;&lt;br&gt;
• CSRF Protection&lt;br&gt;
• Helmet&lt;br&gt;
• Express Rate Limit&lt;br&gt;
• Zod Validation&lt;br&gt;
• bcrypt Password Hashing&lt;br&gt;
• Refresh Token Rotation&lt;/p&gt;

&lt;p&gt;👥 &lt;strong&gt;User Management&lt;/strong&gt;&lt;br&gt;
• Registration&lt;br&gt;
• Profile Management&lt;br&gt;
• Device Sessions&lt;br&gt;
• Login History&lt;br&gt;
• Account Deletion&lt;/p&gt;

&lt;p&gt;👨‍💼 &lt;strong&gt;Admin Features&lt;/strong&gt;&lt;br&gt;
• User Management&lt;br&gt;
• Role Management&lt;br&gt;
• Account Status Management&lt;br&gt;
• Login History&lt;/p&gt;

&lt;p&gt;⚡ &lt;strong&gt;Developer Experience&lt;/strong&gt;&lt;br&gt;
• TypeScript&lt;br&gt;
• Prisma ORM&lt;br&gt;
• PostgreSQL&lt;br&gt;
• Biome&lt;br&gt;
• Husky Git Hooks&lt;br&gt;
• Environment Example Generator&lt;br&gt;
• Postman Collection&lt;br&gt;
• Clean Project Structure&lt;/p&gt;

&lt;p&gt;This is only the beginning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Next on the roadmap
&lt;/h3&gt;

&lt;p&gt;• OAuth (Google &amp;amp; GitHub)&lt;br&gt;
• Redis&lt;br&gt;
• Docker Compose&lt;br&gt;
• Swagger / OpenAPI&lt;br&gt;
• Background Jobs&lt;br&gt;
• File Upload Module&lt;/p&gt;

&lt;p&gt;The project is completely open source, and I'd genuinely appreciate feedback from the community.&lt;/p&gt;

&lt;p&gt;⭐ If you find it useful, consider giving it a star or contributing.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/setahirbaloch/backend-starter" rel="noopener noreferrer"&gt;https://github.com/setahirbaloch/backend-starter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Linkedin:&lt;br&gt;
&lt;a href="https://linkedin.com/in/setahirbaloch" rel="noopener noreferrer"&gt;https://linkedin.com/in/setahirbaloch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What feature do you think every production-ready backend starter should include?&lt;/p&gt;

</description>
      <category>node</category>
      <category>backend</category>
      <category>api</category>
    </item>
  </channel>
</rss>
