A production-ready, enterprise-level COVID-19 dashboard built with modern web technologies. This application demonstrates advanced frontend development skills, featuring real-time data visualization, responsive design, state management, and robust error handling.
- Local Development:
http://localhost:5174/ - Production Build:
npm run build && npm run preview
- Real-time COVID-19 Statistics - Global and country-specific data
- Interactive Data Visualization - Dynamic charts with Chart.js integration
- Country Selection & Filtering - Comprehensive country picker with search
- Historical Data Trends - 30-day historical analysis with smooth animations
- Analytics Dashboard - Recovery rates, mortality rates, and active cases
- Dark/Light Mode Toggle - Persistent theme switching with localStorage
- Responsive Design - Mobile-first approach, works on all devices
- Animated Counters - Smooth number animations for statistics
- Loading States - Professional loading indicators and skeleton screens
- Error Handling - Graceful fallbacks with user-friendly messages
- Toast Notifications - Real-time feedback for user actions
- Type Safety - 100% TypeScript implementation across all components
- State Management - Vuex 4 with modules, actions, mutations, and getters
- API Integration - Axios with interceptors and automatic retries
- Component Architecture - Reusable, modular Vue 3 components
- Modern Build System - Vite for lightning-fast development and builds
| Category | Technology | Version | Purpose |
|---|---|---|---|
| Framework | Vue.js | 3.5.21 | Progressive JavaScript framework |
| Language | TypeScript | 5.8.3 | Type-safe JavaScript development |
| State Management | Vuex | 4.1.0 | Centralized state management |
| Routing | Vue Router | 4.5.1 | Client-side routing |
| Styling | TailwindCSS | 4.1.13 | Utility-first CSS framework |
| Charts | Chart.js + vue-chartjs | 4.5.0 + 5.3.2 | Interactive data visualization |
| HTTP Client | Axios | 1.12.2 | Promise-based HTTP client |
| Icons | Heroicons Vue | 2.2.0 | Beautiful SVG icons |
| Build Tool | Vite | 7.1.6 | Next-generation frontend tooling |
| Package Manager | Yarn | Latest | Dependency management |
src/
βββ api/ # API layer & data fetching
β βββ covidApi.ts # COVID-19 API integration
β βββ mockData.ts # Fallback mock data
βββ components/ # Reusable Vue components
β βββ DashboardCard.vue # Statistics display cards
β βββ LineChart.vue # Interactive chart component
β βββ CountrySelector.vue # Country dropdown selector
β βββ AnalyticsPanel.vue # Advanced analytics display
β βββ AnimatedCounter.vue # Smooth number animations
β βββ LoadingSpinner.vue # Loading state indicators
β βββ ToastNotification.vue # User feedback system
βββ store/ # Vuex state management
β βββ index.ts # Store configuration
β βββ covidModule.ts # COVID data module
βββ types/ # TypeScript definitions
β βββ covid.ts # COVID-19 data interfaces
β βββ index.ts # Type exports
βββ views/ # Page-level components
β βββ Dashboard.vue # Main dashboard view
βββ router/ # Vue Router configuration
β βββ index.ts # Route definitions
βββ App.vue # Root component
βββ main.ts # Application entry point
βββ style.css # Global styles & Tailwind
- Node.js (v20.19.0 or higher)
- Yarn or npm
- Git
# Clone the repository
git clone https://github.com/yourusername/covid-19-dashboard.git
cd covid-19-dashboard
# Install dependencies
yarn install
# or
npm install
# Start development server
yarn dev
# or
npm run dev# Type-check and build
yarn build
# or
npm run build
# Preview production build
yarn preview
# or
npm run preview- Animated statistics display
- Color-coded data visualization
- Hover effects and transitions
- Change indicators with arrows
- Interactive Chart.js integration
- Dark mode support
- Responsive design
- Custom tooltips and legends
- Searchable dropdown
- Real-time data fetching
- Loading states
- Error handling
- Recovery rate calculations
- Mortality rate visualization
- Progress bars and indicators
- Statistical analysis
- Primary: Blue (#3B82F6) - Trust and reliability
- Success: Green (#10B981) - Recovery data
- Warning: Yellow (#F59E0B) - Active cases
- Danger: Red (#EF4444) - Critical data
- Neutral: Gray scale for backgrounds and text
- System Fonts: -apple-system, BlinkMacSystemFont, 'Segoe UI'
- Weights: 400 (Regular), 500 (Medium), 600 (Semi-bold), 700 (Bold)
- Responsive Scaling: rem units with mobile-first approach
- Duration: 200ms-300ms for interactions, 2s for counters
- Easing: ease-out for natural motion
- Transitions: Color, transform, opacity changes
# API Configuration (optional)
VITE_API_BASE_URL=https://disease.sh/v3/covid-19
VITE_API_TIMEOUT=5000
# Feature Flags
VITE_ENABLE_MOCK_DATA=true
VITE_ENABLE_ANALYTICS=false- TypeScript: Strict mode enabled
- ESLint: Vue 3 + TypeScript rules
- Vite: Optimized for modern browsers
- PostCSS: TailwindCSS processing
| Breakpoint | Size | Layout |
|---|---|---|
| Mobile | < 768px | Single column, stacked cards |
| Tablet | 768px - 1024px | Two columns, side navigation |
| Desktop | > 1024px | Three columns, full dashboard |
| Large | > 1440px | Expanded spacing, larger charts |
- disease.sh API - Reliable COVID-19 statistics
- Endpoints:
/all,/countries,/countries/{country} - Rate Limiting: Respectful request patterns
- Error Handling: Automatic fallback to mock data
- Mock Data: Realistic demonstration data
- Offline Support: Works without internet connection
- Development Mode: Consistent data for testing
- Vue Test Utils for component testing
- Jest for JavaScript testing
- TypeScript type checking
- Coverage: Aim for >90% code coverage
- Cypress for integration testing
- User journey testing
- Cross-browser compatibility
- Mobile testing on real devices
# Build for production
npm run build
# Deploy to Netlify, Vercel, or GitHub Pages
# Output in ./dist directoryFROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]- Tree Shaking: Unused code elimination
- Code Splitting: Route-based lazy loading
- Asset Optimization: Image compression and caching
- Gzip Compression: Reduced transfer sizes
- Virtual Scrolling: For large data sets
- Memoization: Computed properties and watchers
- Debouncing: User input handling
- Lazy Loading: Components and images
- XSS Protection: Sanitized data rendering
- CSRF Prevention: Token-based requests
- Content Security Policy: Restricted resource loading
- HTTPS Only: Secure data transmission
- Input Validation: Client and server-side checks
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
- ESLint: Automated code linting
- Prettier: Code formatting
- Conventional Commits: Standardized commit messages
- TypeScript: Strict type checking
| Browser | Version | Support |
|---|---|---|
| Chrome | > 90 | β Full Support |
| Firefox | > 88 | β Full Support |
| Safari | > 14 | β Full Support |
| Edge | > 90 | β Full Support |
| Mobile Safari | > 14 | β Full Support |
| Chrome Mobile | > 90 | β Full Support |
- Enterprise-grade architecture
- Scalable component design
- Production-ready configuration
- Comprehensive error handling
- Modern, clean interface
- Consistent design system
- Accessibility compliance
- Mobile-first responsive design
- Lightning-fast Vite builds
- Optimized bundle sizes
- Smooth animations
- Efficient state management
- TypeScript for type safety
- Hot module replacement
- Comprehensive tooling
- Clear project structure
This project is licensed under the MIT License - see the LICENSE file for details.
- Vue.js Team - For the amazing framework
- TailwindCSS - For the utility-first CSS framework
- Chart.js - For powerful data visualization
- disease.sh - For reliable COVID-19 data API
- Heroicons - For beautiful SVG icons
Otavio Lima
- π Portfolio: [Your Portfolio URL]
- πΌ LinkedIn: [https://www.linkedin.com/in/otavio-lima-soares/]
- π§ Email: [otavio.lima.vga@gmail.com]
- π± GitHub: [@lima300]
β If you found this project helpful, please give it a star! β
Made with β€οΈ and Vue.js