Skip to content

buzz/newsdash

Repository files navigation

newsdash

A news dashboard inspired by iGoogle and Netvibes

FeaturesInstallationDevelopmentLicense

Screenshot

⭐ Features

  • Customizable dock-based dashboard
  • Support for Atom and RSS feeds
  • Four feed layouts: condensed, list, detailed, tiles
  • Tabbed multi-feeds
  • Import/Export settings and feeds
  • Filter feed items

💻 Installation

This is a self-hosted solution with a provided Docker image for easy installation.

Requirements

  • Reverse proxy (nginx recommended)
  • Redis

Docker

To start quickly, run the Docker image, which starts the API server. The static web app is available under the volume /client. For production, you need to serve the static files using a webserver.

$ docker run \
    -e REDIS_URL=redis://redis:6380 \
    -p 127.0.0.1:3000:3000 \
    -v ./path/to/client:/client \
    newsdash/newsdash

Redis

To persist settings and feeds, provide a Redis instance. You can start a Redis container and link it to newsdash. Docker Compose is ideal for small setups. Use the REDIS_URL environment variable to customize the connection URL.

nginx

For production deployment, use a reverse proxy like nginx for:

  • Static file serving
  • Image caching
  • Basic authentication
  • Gzip compression
  • TLS termination
# Sample nginx configuration as starting point

http {
  # ...

  # Cache for newsdash images (highly recommended)
  proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=newsdash_cache:10m max_size=1g inactive=30d use_temp_path=off;

  server {
    listen 443 ssl;
    http2 on;
    server_name newsdash.example.com;
    # point this to the container volume `/client`
    root /path/to/volume/client;

    ssl on;
    ssl_certificate ...;
    ssl_certificate_key ...;

    auth_basic "Restricted";
    auth_basic_user_file htpasswd_file;

    autoindex off;

    gzip on;
    gzip_min_length 500;
    gzip_proxied any;
    gzip_types text/css text/javascript application/json;

    # Cache dynamic images
    location ~ ^/api/feed/(image|logo) {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_pass http://newsdash:3000; # point to newsdash API server
      proxy_http_version 1.1;
      proxy_cache newsdash_cache;
      proxy_cache_key "$scheme$request_method$host$request_uri";
      proxy_cache_valid 200 302 15d;
      proxy_cache_valid 404 1d;
      proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
      add_header X-Cache-Status $upstream_cache_status;
    }

    # Serve API endpoints
    location ~ ^/api {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_pass http://newsdash:3000; # point to newsdash API server
      proxy_http_version 1.1;
    }

    # Serve static files
    location / {
      try_files $uri $uri/index.html =404;
    }
  }
}

🛠️ Development

Ensure you have recent versions of Node.js and pnpm installed.

Clone the project and start a development server.

$ git clone https://github.com/buzz/newsdash.git
$ cd newsdash
$ pnpm install
$ pnpm dev

License

GNU Affero General Public License v3.0