Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

anuvgupta/dash

Repository files navigation

Dash

Project manager, application orchestrator, & internet presence dashboard.
Deploy live updates, monitor apps & resources, and plan projects – all in realtime from the cloud.

Features

Dash ties abstract ideas and goals to models of concrete entities, generating smart server configurations for your projects based on a few high-level settings for the software and hardware you manage.
 
It simplifies the following:

  • Project Management
    • Project stages & tasks
    • Ideation/solution design
  • Application Orchestration
    • Server process management
    • Reverse proxy generation
  • Internet Presence
    • Web sitemap generation
    • Domain+certificate tracking

 
Dash also exposes a web API for my project portfolio site on GitHub pages (github.anuv.me).

Settings

  • Projects
    • Meta
      • Name, ID/Slug, Tagline, Description, Visibility, Featured, Demo
    • Code
      • Repository, Technology, Language, Documentation
    • Applications
      • List of project-associated applications
  • Applications
    • Meta
      • Name, ID/Slug, Description, Host Resource, Port
    • Ecosystem
      • Path, Script, Interpreter, Arguments, Output Log, Error Log, Memory Limit, Restart Delay
    • Process
      • Status, Signals (Start, Restart, Stop), Logs
    • Domains
      • List of application-associated domains
    • Proxy
      • WWW Alias, HTTPS Enable, HTAccess Deny, HTTPS Force, WebSocket Enable, WebSocket Endpoint
  • Resources
    • Meta
      • Name, ID/Slug, External IP, Internal IP, Provider, Console
    • Software
      • App Root, NGINX Root, Apache Root, WWW Root
    • Hardware
      • Core, Memory, Storage, Location, Type
    • Domains
      • List of resource-associated domains
    • Applications
      • List of applications using resource as host
    • Daemon
      • Key, Status
  • Domains
    • Meta
      • Domain Name, Second Level Name, Top Level Name
    • Subdomains
      • List of active subdomains on domain
    • Certificates
      • List of active certificates for domain/subdomains
      • Certificate: Subdomains, Resource, File Path, Key File Path, Expiration
  • Sitemap
  • Ideas

Guides

A few setup guides for the cloud server & resource daemon software

VM Setup

Setting up a cloud VM to host both dash-cloud and dash-daemon processes.

  • Create/choose application root directory, for example /home/ubuntu/dash/apps
  • PM2 setup
    • Install pm2 globally with npm
    • Manually start/stop apps from dash's ecosystem.json (dash-cloud & dash-daemon) as needed using pm2 start ecosystem.json and pm2 stop APP_NAME
    • Dash's application management will bring up the other apps automatically with PM2
  • NGINX setup
    • Install nginx with system package manager (ie. apt)
    • Check config/nginx/reference folder for example nginx.conf main configuration
    • Ensure folders /etc/nginx/sites-enabled and /etc/nginx/sites-available exist
      • Ensure current $USER has write permissions to those folders
    • Add sites from repo folder config/nginx to VM folder /etc/nginx/sites-available
      • Sites include: dash-core_cloud.conf, dash-core_default.conf, dash-core_redirect.conf, dash-core_ws-upgrade.conf
      • Then link with sudo ln -s /etc/nginx/sites-available/dash-core_cloud.conf /etc/nginx/sites-enabled/dash-core_cloud.conf and restart NGINX
    • Ensure current $USER has the ability to start, stop, and restart the nginx service without requiring a password for sudo
      • One possible solution
        • Create/edit /etc/sudoers.d/$USER (ie. /etc/sudoers.d/ubuntu) to contain:
          ubuntu ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart,/usr/sbin/service nginx reload
          
        • Relevant StackOverflow Answer
  • Apache2 setup
    • Install apache2 (or httpd) with system package manager (ie. apt)
    • Check config/apache2/reference folder for example apache2.conf/ports.conf main configuration
    • Ensure folders /etc/apache2/sites-enabled and /etc/apache2/sites-available exist
      • Ensure current $USER has write permissions to those folders
    • Add sites from repo folder config/apache2 to VM folder /etc/apache2/sites-available
      • Sites include: dash-core_default.conf, dash-core_redirect.conf
      • Then link with sudo ln -s /etc/apache2/sites-available/dash-core_cloud.conf /etc/apache2/sites-enabled/dash-core_cloud.conf and restart Apache2
    • Ensure current $USER has the ability to start, stop, and restart the apache service without requiring a password for sudo
      • One possible solution
        • Create/edit /etc/sudoers.d/$USER (ie. /etc/sudoers.d/ubuntu) to contain:
          ubuntu ALL=(ALL) NOPASSWD: /usr/sbin/service apache2 start,/usr/sbin/service apache2 stop,/usr/sbin/service apache2 restart,/usr/sbin/service apache2 reload
          

Misc

Useful Commands

  • git remote set-url origin https://anuvgupta:TOKEN@github.com/anuvgupta/dash.git
  • sudo systemctl status apache2.service

 
 
 

Focus Board

right now

  • project icon & editor

ideas for later

  • external sites
    • one way
      • add “external” widget in application to mark as external site, then mark audiu, chessroom, github projects site
      • in future, add integrations for external sites in the external widget, ie. to control & observe processes through heroku api/cli
        • possible integrations: heroku (audiu, rubbr-legacy-og), firebase (chessroom), github pages (projects site)
    • another way
      • create a resource for each external app, wherever it is running (ie a resource for audiu’s heroku container, a resource for chessroom’s firebase container, etc…)
  • add filter on resources/applications widget for online/offline apps
    • also sort by port
  • checkbox on whether resource/domain is owned by you or external
  • add resource widget for showing list of available ports (checked with “p” bash shortcut)
  • save dash config to file from ui (mongo backup?)
  • options for app code for when u pull app repo and install packages and build
    • have options to manually specify the install and build commands and force dash daemon to use those
    • can disable install and/or build
    • this allows for using local python and skipping install, ie for jetson nano
  • refresh buttons on each page (just run the :select_$TYPE function again? or load data firs tthen do that? guess u have to add one on the detail page and one on the content page and they will do diff things)
  • autoremove domains from apps & resources on domain delete
    • autoremove apps from project on app delete
  • add environment section to application, where you can add and edit env var for pm2 to pass into the app
  • add a secure switch to app which controls the proxy https fields too
  • idea section, promote ideas to projects
  • sitemap section, generated from applications/projects/domains
    • resource-focused view shows resources on top and apps underneath/on resources assigned to ports, domains listed under each app
    • domain-focused view shows domains on top and apps underneath/on domains, resource listed under each app
    • also have filters to choose which resources or domains or apps to show, similar to main section filters
  • keep identifiers (slugs) unique when updating (its already unique when creating)
  • project focus board before stages and features
  • project stages
    • add widget for stages in project
    • each stage has name, tasks to complete (subtasks allowed), and a deadline
    • can view previous and future stages
  • project features (widget to write out/explain the features of each project in a brief bulleted list)
  • code link button in project app list item view to load (copy) project repo from app repo
  • application batch commands (ideally after implementing app filtering)
    • send signal to all apps (start, restart, stop)
    • save proxy for all apps
  • add button on resource to push default nginx & apache configs to resource (ie. ws upgrade, default, redirect, etc.)
  • add switch for secure to force push all the apps to secure or insecure (changes https_force, not https_enable for all app proxies)
  • fix extra long text displays
  • fix log load after first start signal (maybe file doesnt exist yet)
  • add loading gif for slow network requests ie log loading
  • push page state for each view & update view on state change
  • clean up the :hide_editors events for each section

test & bugfix

  • high priority
  • low priority

done:

  • filter projects by technology, language, visibility, featured, app domain, application
    • filter applications by interpreter, status, secure, websocket proxy, host resource, domain
    • filter resources by provider, type, status, domain, location
    • filter domains by top level
  • domain desc should be domains subdomains.join(“, “)
  • set project majority for each project: major/flagship (ie pocketjs, blockjs, nestor, audiu, uncurated), minor (like led-lights, tcp-chat, dolphin, messenger, vizioir, moon etc.)
    • rename majority to flagship?
  • create projects again
  • squash application view into a bar, i have so many apps its hard to understand when they are displayed so big (resource and project sizes are fine, apps are too similar to projects)
  • project management
    • project majority switch
    • project type (library, application, script, static site, other)
    • project platform (web, desktop, mobile, embedded, other)
    • project demo password & demo password display enable
    • project purpose
      • creativity: cool idea, product, invention—bigger flagship projects, unique projects, personal favs
        • dash, nestor, audiu, rubbr, fitcheck, block.js, pocketjs, uncurated, led-lights
      • essentials: standards, practice exercises—classic typical software projects everyone should learn to do
        • anuv.me: personal home page website
        • tcp-chat: command-line tcp messaging room
        • messenger: realtime messaging room app
        • slop: realtime shared grocery list app
        • space-invaders: space invaders java desktop game
      • learning: projects created to learn about a technology or library etc.
        • pi
      • utility: general use tool, made solely out of need, created during other projects—frameworks, libraries, smaller scripts
        • tunnel.js, chain.js, vizio-remote, node-scaffold, repetition, dolphin, aliases, flask-react-scaffold
      • infrastructure???: projects created to support my software ecosystem>>>>>>????????
      • school: for school/classes/clubs
        • soundfinder, ut ticket exchange, simplicity-cloud, peer2peer, lancerhacks, sfgpa, sfhacks-results, sitarhero, murk, worldcup, phue-gateway, fakenews, jtrump
      • work: for internships and career work
        • zineone event gateway, pres-rcvs integration, capic endpoint simulation, 6connect ipam connector, chessroom
      • fun: for entertainment
        • me.anuv.me, games, monarchy, moon, drummer, catchapples, pi?
      • other: remaining
  • cert renewal guide/reminder
  • toast notifications for process signals
  • pull app code using git & install dependency packages
    • token for private github repos
    • support for pip install with venv on python venv apps
  • nginx proxy config & apache vhost config generation from minimal buttons & text fields
    • add application field: proxy_enable, controls whether proxy options are even shown and also writes the nginx config when turned on (deletes it when off, so no need for clear proxy button)
    • generate proxy servers for each combination of cert and domain name, use minimal number of servers
    • replace/fix redirect site with smart vhost/proxy rewrite redirects
    • create field for app/proxy/static path, then use that for apache vhost document root (always set document root to app_root/static_path)
      • change apache error log to be in app_root directly so its the same as the process ecosystem log
      • essentially document root will be like slop/html, so we link /var/www/slop to ~/dash/apps/slop, and set the apache config document root to /var/www/slop/html (which actually points to ~/dash/apps/slop/html), then we put hte log in /var/www/slop/error.log (which is actually ~/dash/apps/slop/error.log)
  • process control & status w/ pm2
  • managed object model, view, & controller
    • objects: project, application, resource, domain
  • masonry grid ui for dashboard
  • jwt auth, cookies, basic ui, cli debugging & more infra
  • node scaffold for web & websocket backend
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy