Zorg Sentiment Dashboard π# Zorg Sentiment Dashboard π# Zorg Sentiment Dashboard π# Nuxt Minimal Starter
Real-time sentiment analysis tracking Dutch public opinion about healthcare insurance> Real-time sentiment analysis tracking Dutch public opinion about healthcare insurance> Real-time sentiment analysis tracking Dutch public opinion about healthcare insuranceLook at the Nuxt documentation to learn more.
A playful, real-time sentiment analysis dashboard that monitors Dutch public opinion about healthcare insurance using data from news sources and social media. Built with Nuxt 4, Vue 3, and deployed on Netlify.A playful, real-time sentiment analysis dashboard that monitors Dutch public opinion about healthcare insurance using data from news sources and social media. Built with Nuxt 4, Vue 3, and deployed on Netlify.A playful, real-time sentiment analysis dashboard that monitors Dutch public opinion about healthcare insurance using data from news sources and social media. Built with Nuxt 4, Vue 3, and deployed on Netlify.## Setup
-
Current Mood Indicator: Visual sentiment representation with emoji-based indicators (πππ)- Current Mood Indicator: Visual sentiment representation with emoji-based indicators (πππ)- Current Mood Indicator: Visual sentiment representation with emoji-based indicators (πππ)````markdown
-
Sentiment Breakdown: Detailed percentages showing positive, neutral, and negative sentiment
-
7-Day Trends: Interactive charts showing sentiment changes over time- Sentiment Breakdown: Detailed percentages showing positive, neutral, and negative sentiment
-
Multi-Source Data Collection: Aggregates sentiment from Dutch news sources and Reddit
-
Source Contribution Metrics: Track reliability and contribution of each data source- 7-Day Trends: Interactive charts showing sentiment changes over time- Sentiment Breakdown: Detailed percentages showing positive, neutral, and negative sentiment# Zorg Sentiment Dashboard π
-
Real-Time Updates: Hourly automated data collection with graceful degradation
-
Smart Deduplication: Cross-source article detection with 80% similarity threshold- Multi-Source Data Collection: Aggregates sentiment from Dutch news sources and Reddit
-
Mobile Responsive: Optimized experience on all devices
-
Dutch Language: Full Dutch interface with friendly, warm tone- Source Contribution Metrics: Track reliability and contribution of each data source- 7-Day Trends: Interactive charts showing sentiment changes over time
# Install dependencies
npm install- **Mobile Responsive**: Optimized experience on all devices
# Start development server with Netlify features- **Dutch Language**: Full Dutch interface with friendly, warm tone- **Source Contribution Metrics**: Track reliability and contribution of each data source
netlify dev
```## π Quick Start- **Real-Time Updates**: Hourly automated data collection with graceful degradationA playful, real-time sentiment analysis dashboard that tracks Dutch public opinion about healthcare insurance using data from news sources and social media.
Visit http://localhost:8888 to see the dashboard.````bash- **Smart Deduplication**: Cross-source article detection with 80% similarity threshold
**For detailed setup**: See [Getting Started Guide](docs/guides/getting-started.md)# Install dependencies
## π Documentationnpm install- **Mobile Responsive**: Optimized experience on all devices## β¨ Features
### For Users & Operators
- **[Getting Started](docs/guides/getting-started.md)** - Installation and first run# Start development server with Netlify features- **Dutch Language**: Full Dutch interface with friendly, warm tone
- **[Reddit Integration](docs/guides/reddit-integration.md)** - Configure Reddit as a data source
- **[Operations Guide](docs/guides/operations.md)** - Monitoring and maintenancenetlify dev
- **[Local Testing](docs/guides/local-testing.md)** - Test the application locally
```- **Current Mood Indicator**: Visual representation of national sentiment with emoji-based indicators
### For Developers
- **[Contributing Guide](CONTRIBUTING.md)** - Development workflow and standards
- **[Extending Sources](docs/guides/extending-sources.md)** - Add new data source adaptersVisit http://localhost:8888 to see the dashboard.## π Quick Start- **Sentiment Breakdown**: Detailed percentages showing positive, neutral, and negative sentiment
- **[Architecture Overview](docs/architecture/multi-source-design.md)** - System design and patterns
- **[API Reference](docs/api/)** - Endpoint specifications
### Testing & Deployment**For detailed setup**: See [Getting Started Guide](docs/guides/getting-started.md)- **7-Day Trends**: Interactive charts showing sentiment changes over time
- **[Edge Cases Testing](docs/guides/edge-cases-testing.md)** - Edge case scenarios
- **[Deployment Checklist](docs/guides/deployment.md)** - Pre-deployment validation
## π Documentation```bash- **Multi-Source Data Collection**: Aggregates sentiment from 5+ Dutch news sources with graceful degradation
### Feature Specifications
- **[Feature 001: MVP Dashboard](specs/001-mvp-sentiment-dashboard/)** - Core sentiment visualization
- **[Feature 002: Multi-Source Collection](specs/002-multi-source-sentiment/)** - Orchestrator and adapters### For Users & Operators# Install dependencies- **Source Contribution Metrics**: Track reliability and contribution of each data source
- **[Feature 003: Reddit Integration](specs/003-reddit-integration/)** - Reddit API integration
## π οΈ Tech Stack
- **[Getting Started](docs/guides/getting-started.md)** - Installation and first runnpm install- **Real-Time Updates**: Hourly data collection from multiple sources in parallel
- **Frontend**: Nuxt 4.1.3, Vue 3.5, Nuxt UI v4.1, Chart.js
- **Backend**: Nitro 2.x, Netlify Functions- **[Reddit Integration](docs/guides/reddit-integration.md)** - Configure Reddit as a data source
- **Data Collection**: Multi-source orchestrator with RSS and Reddit adapters
- **Sentiment Analysis**: sentiment.js library with Dutch healthcare tuning- **[Operations Guide](docs/guides/operations.md)** - Monitoring and maintenance- **Smart Deduplication**: Cross-source article detection with 80% similarity threshold
- **Storage**: Netlify Blobs (7-day retention)
- **Deployment**: Netlify Edge with scheduled functions- **[Local Testing](docs/guides/local-testing.md)** - Test the application locally
## π° Data Sources# Start development server with Netlify features- **Mobile Responsive**: Optimized experience on all devices
### Active Sources### For Developers
**RSS Feeds** (5 sources):netlify dev- **Dutch Language**: Full Dutch interface with friendly, warm tone
- NU.nl Gezondheid - General health news
- NOS.nl Algemeen - National broadcaster- **[Contributing Guide](CONTRIBUTING.md)** - Development workflow and standards
- Zorgwijzer - Healthcare-specific news
- RTL Nieuws Algemeen - Commercial broadcaster- **[Extending Sources](docs/guides/extending-sources.md)** - Add new data source adapters```
- Zorgkrant - Healthcare industry news
- **[Architecture Overview](docs/architecture/multi-source-design.md)** - System design and patterns
**Social Media**:
- Reddit - Dutch subreddits (r/thenetherlands, r/geldzaken) with keyword filtering- **[API Reference](docs/api/)** - Endpoint specifications## π Quick Start
**Planned**: Twitter/X integration (stub implemented)
## π API Endpoints### Feature SpecificationsVisit http://localhost:8888 to see the dashboard.
```bash
# Get current sentiment with trends
GET /api/sentiment?include=all- **[Feature 001: MVP Dashboard](specs/001-mvp-sentiment-dashboard/)** - Core sentiment visualizationFor detailed setup instructions, see [Quickstart Guide](./specs/001-mvp-sentiment-dashboard/quickstart.md).
# Get historical data- **[Feature 002: Multi-Source Collection](specs/002-multi-source-sentiment/)** - Orchestrator and adapters
GET /api/sentiment/history?from=2025-01-01&limit=50
- **[Feature 003: Reddit Integration](specs/003-reddit-integration/)** - Reddit API integration**For detailed setup**: See [Getting Started Guide](docs/guides/getting-started.md)
# Get source metrics
GET /api/sentiment/sources
# Health check## π οΈ Tech Stack### Prerequisites
GET /api/health
Complete documentation: API Reference- Frontend: Nuxt 4.1.3, Vue 3.5, Nuxt UI v4.1, Chart.js## π Documentation
# Type checking
npm run type-check- **Sentiment Analysis**: sentiment.js library with Dutch healthcare tuning
# Generate test data for local testing (using Netlify CLI)- **Storage**: Netlify Blobs (7-day retention)### For Users & Operators- npm 10.x or higher
netlify functions:invoke generate-test-data --querystring "hours=6"
- **Deployment**: Netlify Edge with scheduled functions
# Test Reddit integration
node test-reddit-api-simple.js- Netlify account (for deployment)
Complete testing guide: Local Testing
- Getting Started - Installation and first run
- Reddit Integration - Configure Reddit as a data source### Installation
-
Connect repository to Netlify
-
Configure environment variables (see
.env.example)RSS Feeds (5 sources): -
Deploy automatically on push to
main
- NU.nl Gezondheid - General health news- Operations Guide - Monitoring and maintenance
# Manual deployment- NOS.nl Algemeen - National broadcaster
netlify deploy --prod
```- Zorgwijzer - Healthcare-specific news- **[Local Testing](docs/guides/local-testing.md)** - Test the application locally```bash
**Pre-deployment validation**: [Deployment Checklist](docs/guides/deployment.md)- RTL Nieuws Algemeen - Commercial broadcaster
## π Project Structure- Zorgkrant - Healthcare industry news# Clone the repository
zorg-sentiment-v2/
βββ app/ # Nuxt applicationSocial Media:### For Developersgit clone
β βββ components/ # Vue components
β βββ composables/ # Composition functions- Reddit - Dutch subreddits (r/thenetherlands, r/geldzaken) with keyword filtering
β βββ pages/ # File-based routing
β βββ types/ # Frontend TypeScript typescd zorg-sentiment-v2
βββ server/ # Nitro server
β βββ api/ # API endpointsPlanned: Twitter/X integration (stub implemented)
β βββ config/ # Configuration (sources.json, etc.)
β βββ utils/ # Adapters, orchestrator, analyzers- Contributing Guide - Development workflow and standards
β βββ types/ # Server TypeScript types
βββ netlify/functions/ # Scheduled functions## π API Endpoints
βββ docs/ # Documentation
β βββ guides/ # User & developer guides- Extending Sources - Add new data source adapters# Install dependencies
β βββ architecture/ # Technical design docs
β βββ api/ # API specifications```bash
βββ specs/ # Feature specifications
## π€ ContributingGET /api/sentiment?include=all
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for:- **[API Reference](docs/api/)** - Endpoint specifications
- Development setup# Get historical data
- Code standards
- Testing requirementsGET /api/sentiment/history?from=2025-01-01&limit=50# Create environment file
- Pull request process
## π License
# Get source metrics### Feature Specificationscp .env.example .env
[Add license information]
GET /api/sentiment/sources
## π Support
- **[Feature 001: MVP Dashboard](specs/001-mvp-sentiment-dashboard/)** - Core sentiment visualization# Start development server
- **Documentation**: Check [docs/](docs/) directory
- **Issues**: [GitHub Issues](https://github.com/your-org/zorg-sentiment-v2/issues)# Health check
- **Feature Specs**: See [specs/](specs/) for detailed requirements
GET /api/health- **[Feature 002: Multi-Source Collection](specs/002-multi-source-sentiment/)** - Orchestrator and adaptersnpm run dev
---
Built with β€οΈ for Dutch healthcare transparency
- Feature 003: Reddit Integration - Reddit API integration```
Complete documentation: API Reference
- Frontend: Nuxt 4.1.3, Vue 3.5, Nuxt UI v4.1, Chart.js### Using Netlify Dev (Recommended for Local Testing)
# Type checking- **Backend**: Nitro 2.x, Netlify Functions
npm run type-check
- **Data Collection**: Multi-source orchestrator with RSS and Reddit adapters```bash
# Generate test data for local testing (using Netlify CLI)
netlify functions:invoke generate-test-data --querystring "hours=6"- **Sentiment Analysis**: sentiment.js library with Dutch healthcare tuning# Install Netlify CLI
# Test Reddit integration- **Storage**: Netlify Blobs (7-day retention)npm install -g netlify-cli
node test-reddit-api-simple.js
```- **Deployment**: Netlify Edge with scheduled functions
**Complete testing guide**: [Local Testing](docs/guides/local-testing.md)# Run with Netlify functions support
## π’ Deployment## π° Data Sourcesnetlify dev
### Netlify (Recommended)````
1. Connect repository to Netlify### Active Sources
2. Configure environment variables (see `.env.example`)
3. Deploy automatically on push to `main`Visit `http://localhost:8888` to test with Netlify functions.
```bash**RSS Feeds** (5 sources):
# Manual deployment
netlify deploy --prod- NU.nl Gezondheid - General health news## π Documentation
- NOS.nl Algemeen - National broadcaster
Pre-deployment validation: Deployment Checklist
- Zorgwijzer - Healthcare-specific news### Feature 001: MVP Sentiment Dashboard
- RTL Nieuws Algemeen - Commercial broadcaster
zorg-sentiment-v2/- Zorgkrant - Healthcare industry news- [Feature Specification](./specs/001-mvp-sentiment-dashboard/spec.md) - Complete feature requirements
βββ app/ # Nuxt application
β βββ components/ # Vue components- [Implementation Plan](./specs/001-mvp-sentiment-dashboard/plan.md) - Technical architecture and decisions
β βββ composables/ # Composition functions
β βββ pages/ # File-based routing**Social Media**:- [Quickstart Guide](./specs/001-mvp-sentiment-dashboard/quickstart.md) - Developer setup and deployment
β βββ types/ # Frontend TypeScript types
βββ server/ # Nitro server- Reddit - Dutch subreddits (r/thenetherlands, r/geldzaken) with keyword filtering- [Data Model](./specs/001-mvp-sentiment-dashboard/data-model.md) - Entity definitions and storage schema
β βββ api/ # API endpoints
β βββ config/ # Configuration (sources.json, etc.)- [API Contract](./specs/001-mvp-sentiment-dashboard/contracts/sentiment-api.yaml) - OpenAPI specification
β βββ utils/ # Adapters, orchestrator, analyzers
β βββ types/ # Server TypeScript types**Planned**: Twitter/X integration (stub implemented)
βββ netlify/functions/ # Scheduled functions
βββ docs/ # Documentation### Feature 002: Multi-Source Sentiment Collection
β βββ guides/ # User & developer guides
β βββ architecture/ # Technical design docs## π API Endpoints
β βββ api/ # API specifications
βββ specs/ # Feature specifications- [Feature Specification](./specs/002-multi-source-sentiment/spec.md) - Multi-source architecture requirements
## π€ Contributing
# Get current sentiment with trends- [Data Model](./specs/002-multi-source-sentiment/data-model.md) - Source configuration and article schema
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for:
GET /api/sentiment?include=all- [Extending Sources Guide](./docs/extending-sources.md) - How to add new data source adapters
- Development setup
- Code standards- [Source API Contract](./specs/002-multi-source-sentiment/contracts/sources-api.yaml) - Source metrics API specification
- Testing requirements
- Pull request process# Get historical data
## π LicenseGET /api/sentiment/history?from=2025-01-01&limit=50### Feature 003: Reddit Integration
[Add license information]
## π Support# Get source metrics- [Feature Specification](./specs/003-reddit-integration/spec.md) - Reddit data source integration requirements
- **Documentation**: Check [docs/](docs/) directoryGET /api/sentiment/sources- [Implementation Plan](./specs/003-reddit-integration/plan.md) - Reddit API integration with snoowrap
- **Issues**: [GitHub Issues](https://github.com/your-org/zorg-sentiment-v2/issues)
- **Feature Specs**: See [specs/](specs/) for detailed requirements- [Data Model](./specs/003-reddit-integration/data-model.md) - Reddit-specific article schema and engagement metrics
---# Health check- [Reddit Integration Guide](./docs/reddit-integration.md) - Configuration and keyword setup
Built with β€οΈ for Dutch healthcare transparencyGET /api/health- [Quickstart Guide](./specs/003-reddit-integration/quickstart.md) - Reddit API credentials and local testing
Complete documentation: API Reference
- Frontend: Nuxt 4.1.3, Vue 3.5, Nuxt UI v4.1
- Data Collection: Multi-source orchestrator with RSS, Twitter (planned), Reddit (planned) adapters
# Type checking- **Charts**: Chart.js with vue-chartjs
npm run type-check- **Storage**: Netlify Blobs (7-day retention with source contribution tracking)
- **Styling**: Tailwind CSS (via Nuxt UI)
# Generate test data for local testing- **Deployment**: Netlify Edge with scheduled functions
curl http://localhost:8888/api/generate-test-data?hours=6
## π Project Structure
# Test Reddit integration
node test-reddit-api-simple.js```
```zorg-sentiment-v2/
βββ app/ # Nuxt application
**Complete testing guide**: [Local Testing](docs/guides/local-testing.md)β βββ components/ # Vue components (MoodIndicator, TrendChart, etc.)
β βββ composables/ # Reusable composition functions
## π’ Deploymentβ βββ pages/ # File-based routing
β βββ types/ # TypeScript interfaces (API, sentiment)
### Netlify (Recommended)β βββ app.vue # Root component
βββ server/ # Nitro server (API routes + utilities)
1. Connect repository to Netlifyβ βββ api/ # API endpoints (/api/sentiment, /api/sentiment/sources)
2. Configure environment variables (see `.env.example`)β βββ config/ # Source configurations (RSS feeds, social media)
3. Deploy automatically on push to `main`β βββ middleware/ # Server middleware (CORS, rate limiting)
β βββ types/ # Server types (Article, SourceConfiguration, SourceType)
```bashβ βββ utils/ # Server utilities (adapters, orchestrator, deduplicator)
# Manual deploymentβββ netlify/functions/ # Netlify scheduled functions (sentiment collection)
netlify deploy --prodβββ docs/ # Additional documentation
```β βββ extending-sources.md # Guide for adding new data sources
β βββ architecture/ # Architecture design documents
**Pre-deployment validation**: [Deployment Checklist](docs/deployment-checklist.md)βββ specs/ # Feature specifications
βββ public/ # Static assets
## π Project Structure```
```## π° Data Sources
zorg-sentiment-v2/
βββ app/ # Nuxt applicationThe system currently collects sentiment data from multiple Dutch news sources:
β βββ components/ # Vue components
β βββ composables/ # Composition functions### Active RSS Feeds
β βββ pages/ # File-based routing
β βββ types/ # Frontend TypeScript types1. **NU.nl Gezondheid** - General health news
βββ server/ # Nitro server2. **NOS.nl Algemeen** - National broadcaster general news
β βββ api/ # API endpoints3. **Zorgwijzer** - Healthcare-specific news
β βββ config/ # Configuration (sources.json, etc.)4. **RTL Nieuws Algemeen** - Commercial broadcaster news
β βββ utils/ # Adapters, orchestrator, analyzers5. **Zorgkrant** - Healthcare industry news
β βββ types/ # Server TypeScript types
βββ netlify/functions/ # Scheduled functions### Planned Sources (Future Implementation)
βββ docs/ # Documentation
β βββ guides/ # User & developer guides- **Twitter/X** - Social media sentiment via TwitterAdapter (stub implemented)
β βββ architecture/ # Technical design docs
β βββ api/ # API specifications### Active Social Media Sources (Feature 003)
βββ specs/ # Feature specifications
```- **Reddit** - Community discussions from Dutch subreddits (r/thenetherlands) with configurable keyword filtering
## π€ ContributingThe multi-source architecture uses an **adapter pattern** allowing new sources to be added without modifying core sentiment logic. See [Extending Sources Guide](./docs/extending-sources.md) for implementation details.
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for:### Source Features
- Development setup- **Graceful Degradation**: System continues with available sources if some fail
- Code standards- **Smart Deduplication**: Cross-source duplicate detection (80% similarity threshold)
- Testing requirements- **Parallel Collection**: All sources fetched simultaneously (10s timeout per source)
- Pull request process- **Source Reliability Tracking**: 7-day metrics for each source's success rate
- **Per-Source Limits**: Max 30 articles per source per collection cycle
## π License
## π API Endpoints
[Add license information]
### `GET /api/sentiment`
## π Support
Returns current sentiment data with optional trend and summary.
- **Documentation**: Check [docs/](docs/) directory
- **Issues**: [GitHub Issues](https://github.com/your-org/zorg-sentiment-v2/issues)**Query Parameters**:
- **Feature Specs**: See [specs/](specs/) for detailed requirements
- `include` (optional): `trend`, `summary`, or `all`
---
**Example**:
Built with β€οΈ for Dutch healthcare transparency
```bash
curl https://your-site.netlify.app/api/sentiment?include=all
Returns historical sentiment data with date filtering.
Query Parameters:
from(optional): Start date (ISO 8601)to(optional): End date (ISO 8601)limit(optional): Max results (1-168)
Returns source contribution metrics and reliability statistics.
Response includes:
- Articles collected per source
- Sentiment breakdown by source
- 7-day reliability metrics
- Last fetch status
Health check endpoint with system status.
See API Documentation for complete specification.
# Run unit tests
npm run test
# Run E2E tests
npm run test:e2e
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverage- Connect your repository to Netlify
- Set build command:
npm run build - Set publish directory:
dist - Add environment variables (see
.env.example) - Deploy!
Automatic deployments on push to main branch.
For manual deployment:
netlify deploy --prod- Create a feature branch from
main - Implement changes following the task breakdown
- Test locally with
netlify dev - Push to create a Deploy Preview
- Review and merge to
main
This project follows a specification-driven development workflow:
- Review specification
- Check implementation plan
- Follow task checklist
- Submit pull requests with clear descriptions
[Add license information]
For questions or issues, please refer to the documentation or open an issue.
Built with β€οΈ for Dutch healthcare transparency
## Development Server
Start the development server on `http://localhost:3000`:
```bash
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
```
## Production
Build the application for production:
```bash
# npm
npm run build
# pnpm
pnpm build
# yarn
yarn build
# bun
bun run build
```
Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm preview
# yarn
yarn preview
# bun
bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.