dorkhub

newsdash

A news dashboard inspired by iGoogle and Netvibes

buzz
TypeScript657 forksAGPL-3.0updated 4 months ago
git clone https://github.com/buzz/newsdash.gitbuzz/newsdash

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

more like this

agentlytics

Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…

JavaScript555
@f

frirss

A modern, self-hosted, customizable web frontend for FreshRSS.

TypeScript51

ESP_OTA_Dashboard

an efficient and user friendly OTA server equipped with a powerful WEB UI, designed to effortlessly manage both your ES…

HTML54

PlexWatch

PlexWatch is a Discord bot that provides a real-time dashboard for your Plex media server, featuring active stream moni…

Python57

search

search projects, people, and tags