A modern, responsive Interior Quotation Management web & mobile application built with React, TypeScript, Tailwind CSS, and Capacitor. It allows interior designers and contractors to create professional itemized quotations with fraction dimension inputs (e.g. 4½ x 7), auto-calculate square footage, generate formatted PDF quotations, and share quotes directly to WhatsApp with automated customer messages.
- Dynamic Dimension Input: Fractional height/width input (e.g.,
7 x 7,4½ x 2½) with auto-calculation of total SqFt and item amount. - Smart History Suggestions: Remembers previously used item descriptions across your quotes without hardcoded clutter.
- Indian Numbering Format: Currency formatting (e.g.
₹2,93,150) and full amount in words in Indian numbering system (Lakhs, Crores). - A4 PDF Engine: Generates clean, printable A4 PDF quotation sheets with custom company header, materials specification, and authorized signature.
- WhatsApp Integration: Single-tap sharing of formatted quote breakdown directly to customer WhatsApp chats.
- Android Native File Saving: Directly saves PDF files into the Android public
Downloadsdirectory and triggers system download notifications. - Offline & Local: Stores quotations securely in browser/device
localStoragewith JSON export & import backup capabilities. No cloud login required. - Configurable Branding: All company details, address, contact numbers, and headers are easily customizable in
src/app-details.json.
Ensure you have the following installed on your development machine:
- Node.js: Version
18.xor20.x+ (Check withnode -v) - Java Development Kit (JDK): JDK 17 or JDK 21 (Recommended for Android builds, e.g., Eclipse Adoptium / Temurin JDK 21)
- Android SDK / Command Line Tools (Required only for building native Android APKs)
# Clone the repository
git clone <YOUR_REPOSITORY_URL>
cd quotation-interior
# Install project dependencies
npm install# Run local Vite dev server
npm run devOpen your browser at http://localhost:5173.
npm run dev -- --hostThen open the network URL (e.g. http://192.168.1.X:5173) in your mobile browser.
All branding details are separated from the code. Open src/app-details.json and customize:
{
"appName": "Quotation Interior",
"companyName": "YOUR COMPANY NAME",
"proprietorName": "Proprietor / Contact Person",
"companyAddress": "Your Office / Factory Address, City, State – Pincode",
"companyPhone": "98765 43210",
"footerTitle": "Quotation & WhatsApp Manager",
"whatsappSignature": "YOUR COMPANY NAME (Cell: 98765 43210)"
}To customize visual headers and logos, simply replace:
public/m_logo.png— 512x512 PNG app icon / logo.public/profile.png— 1200x170 PNG banner image used in PDF and preview header.
npm run buildThis compiles TypeScript and outputs production-ready web assets into the dist/ folder.
Because android/ is excluded from git to keep the repository lightweight, initialize and configure Android with these two commands:
# 1. Generate the Android platform folder
npx cap add android
# 2. Automatically inject custom Android download & notification plugin and permissions
npm run setup:androidWhenever you make changes to React/TypeScript code:
npm run build
npx cap sync android# 1. Set JAVA_HOME (ensure path points to JDK 17 or 21)
$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-21.0.12.101-hotspot"
# 2. Navigate to the android directory
cd android
# 3. Assemble Debug APK with Gradle wrapper
.\gradlew.bat assembleDebug
# 4. Return to root folder
cd ..# 1. Set JAVA_HOME
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
# 2. Navigate to android directory and build
cd android
./gradlew assembleDebug
cd ..After compilation, the generated APK file is located at:
android/app/build/outputs/apk/debug/app-debug.apk
For rapid iterative development on Windows, simply run:
.\build-apk.ps1This single script automatically:
- Runs
npm run build - Checks if
android/exists (runsnpx cap add androidandnpm run setup:androidif missing, ornpx cap sync androidif present) - Runs Gradle
assembleDebugusing Java 21 - Copies the output APK directly to
QuotationInterior.apkin your project folder.
The repository is pre-configured with .gitignore to exclude the 4 non-essential folders (node_modules/, dist/, .netlify/, and android/). See GIT_IGNORE_GUIDE.txt for details.
This project is licensed under the MIT License.