A powerful React-based dashboard system that generates charts dynamically using parameterized configurations stored in a database. Unlike traditional dashboards with hardcoded queries, this system builds SQL queries on-demand based on user parameters, providing ultimate flexibility for procurement spend analysis.
- Parameterized Configurations: Chart settings stored as JSON in database
- Dynamic SQL Generation: Queries built on-demand based on user parameters
- No Hardcoded Queries: Maximum flexibility for data exploration
- Real-time Parameter Controls: Users can adjust limits, filters, and date ranges
- ๐ Horizontal Bar Charts - Perfect for commodity/category analysis
- ๐ฅง Pie Charts - Standard circular charts for proportions
- ๐ฉ Donut Charts - Pie charts with center hole for geographic/vendor data
- Live Parameter Controls - Modify chart parameters in real-time
- Chart Selector - Add/remove charts dynamically
- Responsive Design - Works perfectly on desktop and mobile
- Loading States - Smooth user experience with proper feedback
- Error Handling - Graceful failure with user-friendly messages
Dynamic charts with real-time parameter controls for procurement spend analysis
graph TD
A[User Interface] --> B[Parameter Controls]
B --> C[Chart API Service]
C --> D[Dynamic SQL Builder]
D --> E[Database Query]
E --> F[Chart Renderer]
F --> A
G[Chart Configs Table] --> D
H[Spend Data Tables] --> E
src/
โโโ components/
โ โโโ Dashboard.jsx # Main container component
โ โโโ DynamicChart.jsx # Generic chart renderer
โ โโโ ChartControls.jsx # Parameter input controls
โ โโโ ChartAPIService.js # Data fetching service
โโโ data/
โ โโโ database-schema.sql # Database setup
โโโ docs/
โโโ API.md # API documentation
โโโ DEPLOYMENT.md # Deployment guide
- Node.js 16+
- React 18+
- Database (SQLite/PostgreSQL/MySQL)
- Clone the repository
git clone https://github.com/myownipgit/dynamic-procurement-dashboard.git
cd dynamic-procurement-dashboard- Install dependencies
npm install- Set up the database
# Run the database schema
sqlite3 procurement.db < data/database-schema.sql- Start the development server
npm start- Open your browser
http://localhost:3000
- Purpose: Analyze spending by commodity categories
- Parameters:
limit(1-50) - Number of resultsdate_range- Time period filtermin_amount- Minimum spending threshold
- Data Source:
spend_transactions+commoditiestables
- Purpose: Vendor spending distribution
- Parameters:
limit(default 5) - Number of vendorsstate_filter- Filter by vendor state
- Data Source:
spend_transactions+vendorstables
- Purpose: Spending by state/location
- Parameters:
limit(default 5) - Number of statesexclude_states- States to exclude
- Data Source:
spend_transactions+vendorstables
The system automatically builds optimized SQL queries from configuration:
Configuration Input:
{
"base_table": "spend_transactions",
"join_tables": ["commodities ON spend_transactions.commodity_id = commodities.commodity_id"],
"group_by_field": "commodities.commodity_description",
"value_field": "SUM(spend_transactions.total_amount)",
"parameters": {"limit": 10, "min_amount": 1000000}
}Generated SQL Output:
SELECT commodities.commodity_description as label,
SUM(spend_transactions.total_amount) as value,
ROUND(SUM(spend_transactions.total_amount) * 100.0 /
(SELECT SUM(total_amount) FROM spend_transactions), 1) as percentage
FROM spend_transactions
JOIN commodities ON spend_transactions.commodity_id = commodities.commodity_id
WHERE SUM(spend_transactions.total_amount) >= 1000000
GROUP BY commodities.commodity_description
ORDER BY value DESC
LIMIT 10Create a new chart by adding a configuration to the dynamic_chart_configs table:
INSERT INTO dynamic_chart_configs (
chart_id, chart_name, chart_type, base_table,
join_tables, group_by_field, value_field, chart_options, parameters
) VALUES (
'monthly_trends',
'Monthly Spending Trends',
'line',
'spend_transactions',
'[]',
'strftime("%Y-%m", transaction_date)',
'SUM(total_amount)',
'{"colors": ["#3498DB"], "showPoints": true}',
'{"months": {"type": "number", "default": 12}}'
);The chart automatically appears in the dashboard with parameter controls!
Charts use predefined color palettes:
- Standard:
["#3498DB", "#E74C3C", "#2ECC71", "#F39C12", "#9B59B6"] - Vendor Analysis:
["#D2524F", "#5B9BD5", "#70AD47", "#E59C39", "#9B59B6"] - Geographic:
["#70AD47", "#5B9BD5", "#E59C39", "#9B59B6", "#D2524F"]
- Desktop: Full-width charts with side-by-side parameter controls
- Tablet: Stacked layout with condensed controls
- Mobile: Single-column layout with collapsible parameters
- ๐ก๏ธ Parameterized Queries: Prevents SQL injection attacks
- โ Input Validation: Type checking on all parameters
- ๐ซ Query Limits: Maximum result limits to prevent performance issues
- ๐ Audit Logging: Track chart access and parameter usage
- โก Query Caching: Frequently accessed data cached in memory
- ๐ Pagination: Large result sets automatically paginated
- ๐ Indexed Joins: Optimized database indexes on join columns
- ๐ฏ Lazy Loading: Charts loaded on-demand as users select them
# Build for production
npm run build
# Set environment variables
export DATABASE_URL="postgresql://user:pass@host:5432/procurement"
export REDIS_URL="redis://localhost:6379"
export NODE_ENV="production"FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]# PostgreSQL setup
psql $DATABASE_URL < data/postgresql-schema.sql
# Add indexes for performance
psql $DATABASE_URL < data/production-indexes.sqlThe repository includes sample procurement data:
- 10,000+ transactions across multiple categories
- 1,650+ vendors from various states
- 50+ commodity types with realistic spending patterns
- Geographic distribution weighted toward Texas (81.9%)
- ๐ Line Charts - Time series analysis for spending trends
- ๐ Stacked Bar Charts - Multi-dimensional category analysis
- ๐ค Export Functionality - PDF and Excel export options
- ๐ Real-time Updates - WebSocket integration for live data
- ๐จ Custom Themes - User-selectable color schemes
- ๐ฅ User Preferences - Personalized dashboard layouts
- ๐ฑ Mobile App - React Native companion app
- ๐ค AI-Powered Insights - Automated spending anomaly detection
- ๐ Predictive Analytics - Forecast future spending patterns
- ๐ฏ Smart Recommendations - Suggest cost optimization opportunities
- ๐ Benchmark Analysis - Compare against industry standards
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add 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.
- Recharts - Excellent React charting library
- Tailwind CSS - Utility-first CSS framework
- React - Amazing UI library
- SQLite - Reliable embedded database
- ๐ง Email: support@dynamicprocurement.com
- ๐ฌ Discussions: GitHub Discussions
- ๐ Bug Reports: GitHub Issues
- ๐ Documentation: Wiki
โญ Star this repository if you find it helpful!
Built with โค๏ธ for modern procurement analytics
