A Modern Finance Dashboard builder
Groww Shark is a full-featured finance dashboard builder built with Next.js (App Router), Redux Toolkit, and modern charting libraries.
It supports real-time market data, watchlists, widgets, advanced search, and interactive charts (line & candlestick) using real APIs no hard-coded data.
Screen.Recording.2025-12-25.210523.mp4
Screen.Recording.2025-12-27.233641.mp4
- Indices โ Alpha Vantage API
- Crypto โ CoinRanking API (RapidAPI)
- Stocks โ Alpha Vantage API
- Futures โ Alpha Vantage API
- Forex โ Alpha Vantage API
- F&O โ Alpha Vantage API
- Stocks / Indices / Forex โ Alpha Vantage API
- Crypto โ CoinRanking API (RapidAPI)
- No hard-coded prices โ all data is fetched live
- Color-coded price changes (Green โ / Red โ)
- Expandable market categories with smooth animations
- Loading states while fetching data
- Responsive layout with dark theme
groww-shark/
โ
โโโ public/
โ
โโโ src/
โ
โ โโโ app/
โ โ โโโ layout.js # App shell + BottomNav
โ โ โโโ providers.js # Redux provider
โ โ โโโ globals.css # Soft dark theme only
โ โ โโโ page.js # Default โ widgets
โ โ
โ โ โโโ watchlist/
โ โ โ โโโ page.js # Market watch table
โ โ โ โโโ ViewWatchlistModal.js
โ โ โ โโโ CreateWatchlistModal.js
โ โ
โ โ โโโ chart/ # FULL SCREEN CHART
โ โ โ โโโ page.js # Chart page (symbol-based)
โ โ โ โโโ ChartHeader.js # Name, price, interval selector
โ โ
โ โ โโโ widgets/
โ โ โ โโโ page.js # Widget grid (default page)
โ โ โ โโโ AddWidgetModal.js
โ โ
โ โ โโโ explore/
โ โ โ โโโ page.js
โ โ
โ โ โโโ community/
โ โ โ โโโ page.js
โ โ
โ โ โโโ menu/
โ โ โ โโโ page.js
โ โ
โ โ โโโ api/
โ โ โโโ proxy/
โ โ โโโ route.js # Snapshot + router
โ โ โโโ history/
โ โ โโโ alpha
โ โ โโโ route.js
โ
โ โโโ components/
โ โ โโโ BottomNav.js
โ โ โโโ WidgetCard.js # card / table / chart
โ โ โโโ JsonExplorer.js
โ โ โโโ DashboardBackup.js
โ
โ โโโ charts/ # CHART ENGINE
โ โ โโโ ChartRenderer.js # Chart.js wrapper
โ โ โโโ CandleChart.js
โ โ
โ
โ โโโ store/
โ โ โโโ index.js # configureStore
โ โ โโโ watchlistSlice.js
โ โ โโโ marketDataSlice.js # snapshot only
โ โ โโโ widgetsSlice.js
โ
โ โโโ lib/
โ โ โโโ fetchers/
โ โ โ โโโ snapshotFetcher.js # watchlist/widgets prices
โ โ โ โโโ historyFetcher.js # charts history only
โ โ โ โโโ widgetFetcher.js
โ โ โ โโโ cache.js # shared cache helper
โ โ โ
โ โ โโโ normalizers/
โ โ โ โโโ stockHistory.js # Alpha โ chart data
โ โ โ โโโ cryptoHistory.js # CoinRanking โ chart data
โ โ โ โโโ cryptoNormalizer.js # CoinRanking โ snapshot
โ โ โ
โ
โโโ .env.local
โโโ package.json
โโโ README.md
- Fetched via
/api/proxy - Uses Alpha Vantage GLOBAL_QUOTE
- Cached for 5 minutes at the server level
- Stored in Redux (
marketDataSlice) for UI rendering
- Fetched via
/api/proxy/history/alpha - Uses Alpha Vantage TIME_SERIES_DAILY
- Loaded only when switching to candlestick view
- Uses cached snapshot data
- No additional API calls
- Rendered via
ChartRenderer.js(Chart.js wrapper)
- Uses Lightweight Charts v5
- Fetches OHLC data only when needed
- Fully interactive (zoom, pan, crosshair)
- Multiple watchlists
- Active watchlist switching
- Add / remove instruments
- Delete watchlists
- UI flags for modals
- Opens when isCreatingWatchlist === true
- Contains: Input (watchlist name)
- Create / Cancel buttons
- Watchlist buttons
- Rendered from state.watchlist.watchlists
- Clicking โ setActiveWatchlist(id)
-
User clicks + Create Watchlist, a modal opens
-
User types watchlist name, clicks Create, closes the modal
-
In that Modal user also has the option to set Active that watchlist
-
New watchlist appears as a tab button
-
That watchlist becomes active
-
Now in the dashboard user can click on any watchlist and set Active that watchlist so any instruments he stars goes to that active watchlist
-
User has another option to view the watchlist, he clicks on the eye icon and ViewWatchlistModal opens and in that modal the list appears and from this modal he can remove any instrument and can also delete the whole watchlist
-
All powered by Redux Toolkit (
watchlistSlice).
- Main widgets dashboard
- Displays added widgets
- Shows "+ Add Widget" placeholder
- Controls AddWidgetModal visibility
- Create custom widgets
- Configure:
- Widget name
- API source
- Refresh interval
- View type (card / table / chart)
- Source of truth:
marketDataSlice.categories - Filters instruments by name or symbol
- Uses Fuse.js for fuzzy search
- Handles Spelling errors done by the User while search "Telsa" โ Tesla Inc (TSLA) "Aplei" โ Apple Inc (AAPL)
- Sets active instrument
- Loads chart using cached snapshot or history
- Lives inside
/api/proxy - Prevents repeated Alpha Vantage calls
- TTL = 5 minutes
- Stores snapshot prices
- Used for UI rendering
- Does NOT prevent API calls
Search / Watchlist
โ
GLOBAL_QUOTE (Alpha Vantage)
โ
API Proxy Cache
โ
Redux Snapshot
โ
Line Chart (No API)
- For Line Chart /api/proxy?function=GLOBAL_QUOTE&symbol=NVDA
Candlestick Chart
โ
TIME_SERIES_DAILY
โ
/api/proxy/history/alpha
โ
Lightweight Charts
- For Candle Stick Graph /api/proxy/history/alpha?symbol=AAPL&interval=1D
โ
hits Alpha Vantage
โ But subsequent calls may be served from server cache
Browser always calls /api/proxy
Proxy only calls Alpha Vantage when cache expires
- Prevents API rate-limit issues
- Zero redundant network calls
- Scales well for large watchlists
- Clear separation of concerns
- Production-grade data flow
Groww Shark is a production-ready finance dashboard demonstrating:
- Real API integration
- Advanced state management
- Clean architecture
- Scalable frontend design
- Professional charting solutions
The current implementation lays a strong foundation, and the platform can be extended further with the following enhancements:
-
๐งฒ Drag & Drop Widgets
- Allow users to freely rearrange widgets on the dashboard using drag-and-drop.
- Save widget layout preferences per user.
- Improves personalization and dashboard flexibility.
-
๐ท๏ธ Company Logos & Branding
- Display official company logos alongside stock names and symbols.
- Fetch logos dynamically using symbol-based logo APIs.
- Enhances visual clarity and brand recognition.
-
โฑ๏ธ Real-Time Streaming Updates
- Integrate WebSockets or Server-Sent Events (SSE) for live price updates.
- Reduce polling-based API calls.
- Enables near real-time market movement tracking.
-
๐ Resizable Widgets
- Allow users to resize widgets (small / medium / large).
- Better support for different data views like tables vs charts.
-
๐ฑ Mobile-First Enhancements
- Optimize chart interactions for touch gestures.
- Improve widget layout responsiveness on smaller screens.
Built with โค๏ธ by Alisha Mahmood