Transform Your Swiggy Order Data into Beautiful Analytics
A modern, privacy-first web application that analyzes your Swiggy order history with interactive dashboards and insightful visualizations.
- π Overview Dashboard - Key metrics, order frequency, and spending summaries
- π° Spending Analysis - Monthly/yearly trends with detailed breakdowns
- π½οΈ Restaurant Analytics - Top restaurants, cuisine preferences, and ordering patterns
- π Location Insights - Interactive map with real restaurant and delivery coordinates
- β° Order Activity - GitHub-style heatmap showing your ordering patterns throughout the year
- π Beautiful Dark Theme - Eye-friendly interface with smooth animations
- π± Fully Responsive - Perfect experience on desktop, tablet, and mobile
- π― Interactive Visualizations - Dynamic charts and maps powered by Chart.js and Leaflet
- β‘ Fast & Smooth - Optimized performance with React 18 and modern build tools
- π 100% Client-Side - All data processing happens in your browser
- π Zero Data Collection - Your personal data never leaves your device
- π€ No External Servers - Complete privacy and security guaranteed
Spenddy offers a companion Chrome extension that grabs your Swiggy order history in a single click and stores it securely in your browser.
- Source code & manual install: unownone/spenddy-link
- Install from Chrome WebΒ Store: SpenddyΒ Link
Heads-up! Manual upload has been removed in favour of the one-click browser extension.
The UI no longer shows an upload panel β simply install the Spenddy Link extension and your data will appear automatically.
If you prefer not to use the extension you can still upload the data yourself:
- Request your data export from Swiggy.
- Extract the ZIP and locate
allOrders.json. - Drag & drop the file into Spenddy.
- Install the extension from ChromeΒ WebΒ Store (or manual GitHub version).
- Follow the extension's prompts β it will visit your Swiggy order history and save everything locally.
- Open Spenddy (this web app). Your data will be detected automatically and the dashboards will load.
- Login to Swiggy β Account β Privacy β Download Your Data.
- Request the data export and download the ZIP when ready.
- Extract the ZIP and find
allOrders.json. - Upload the file in Spenddy.
Thenβ¦
- π Overview: Total orders, spending, and key statistics
- π³ Spending: Detailed spending patterns and trends
- πͺ Restaurants: Your favorite places and cuisine preferences
- πΊοΈ Locations: Interactive map with order locations and heatmaps
| Category | Technology |
|---|---|
| Framework | React 18 + TypeScript |
| Styling | Tailwind CSS + Custom Dark Theme |
| Build Tool | Vite |
| Charts | Chart.js + Recharts |
| Maps | Leaflet + React-Leaflet |
| Animations | Framer Motion |
| Icons | Lucide React |
| Date Utils | date-fns |
- Fork/clone this repository
- Enable GitHub Pages in repository settings
- Choose "GitHub Actions" as source
- Push to
mainbranch for automatic deployment
pnpm build
# Deploy the dist/ folder to your hosting platformIf the video doesn't load, watch it on YouTube.
- π Monthly and yearly spending trends
- π° Breakdown by fees (delivery, packing, convenience)
- π« Discount and coupon analysis
- π Average order value patterns
- π Top restaurants by order count and spending
- π Cuisine preference analysis
- π Location-based restaurant insights
- β Restaurant performance tracking
- πΊοΈ Interactive map with real coordinates
- π Delivery location analysis
- πͺ Restaurant location patterns
- π Geographic spending distribution
- π Year-long GitHub-style heatmap
- β° Peak ordering times and days
- π Order frequency patterns
- π― Activity trends and insights
src/
βββ components/
β βββ dashboards/ # Analytics dashboards
β βββ ui/ # Reusable UI components
β βββ Header.tsx # App header with logo
β βββ Sidebar.tsx # Navigation sidebar
β βββ FileUpload.tsx # File upload component
βββ types/
β βββ SwiggyData.ts # TypeScript interfaces
βββ utils/
β βββ dataProcessor.ts # Data processing logic
βββ hooks/ # Custom React hooks
βββ lib/ # Utility libraries
βββ App.tsx # Main application
- Create processing functions in
utils/dataProcessor.ts - Add dashboard component in
components/dashboards/ - Update navigation in
src/App.tsx - Add menu item in
Sidebar.tsx
We welcome contributions! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add some amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with β€οΈ for food lovers who want data-driven insights
- Inspired by the need for privacy-first analytics tools
- Thanks to the amazing open-source community
Made with β€οΈ for food lovers everywhere
Spenddy - Your personal food ordering analytics companion
- Spenddy is 100% client-side; no data ever leaves your browser.
- We do not collect or store any personal information.
- Read our full PrivacyΒ Policy.
- The project is open-source under the MIT License β contributions welcome!
Spenddy now supports multiple data sources via a pluggable folder structure:
src/
βββ sources/
βββ BaseSource.ts # interface + types
βββ AbstractSource.ts # default implementation helpers
βββ index.ts # registry of all sources
βββ swiggy/ # first concrete source
βββ transformer.ts # raw β OrderRecord[]
βββ index.ts # SwiggySource extends AbstractSource
Routing follows the same pattern:
/ β Landing page (lists sources)
/:source β Source layout (Import tab + dashboards)
/:source/overview β Overview dashboard for that source
Add a new provider under SourceDataContext and you're done!
Spenddy implements lazy loading and automatic cleanup to prevent memory issues:
- Lazy Loading: Data is only loaded when a user actually visits a source page, not on app startup
- Access Tracking: Each source tracks when it was last accessed
- Automatic Cleanup: Sources not accessed for 10+ minutes are automatically unloaded
- Navigation Cleanup: Data is unloaded 30 seconds after navigating away from a source
- Periodic Refresh: Only loaded sources participate in the 30-second extension data refresh
This ensures the app remains performant even with large datasets and multiple sources.
| ID | Import method | Status |
|---|---|---|
| swiggy | Browser extension (Spenddy-Link) | β |
| zomato | Browser extension (Spenddy-Link) | β³ |
| more soon | β³ |
