Home
Softono
l

lissy93

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
2

Software by lissy93

Dashy
Open Source

Dashy

<h1 align="center">Dashy</h1> <p align="center"> <i>The most customizable dashboard for self-hosters</i><br> <b>Dashy is the homepage for your homelab</b> <br/> <img width="120" src="https://i.ibb.co/yhbt6CY/dashy.png" /> <br/> <b><a href="./docs/showcase.md">User Showcase</a></b> | <b><a href="https://demo.dashy.to">Live Demo</a></b> | <b><a href="./docs/quick-start.md">Getting Started</a></b> | <b><a href="https://dashy.to/docs">Documentation</a></b> | <b><a href="https://github.com/Lissy93/dashy">GitHub</a></b> </p> <h4><p align="center">Kindly sponsored by</p></h4> <table align="center"> <tr> <td align="center" width="33%"> <a href="https://ssdnodes.com/dashy" target="_blank"> <img src="https://pixelflare.cc/alicia/sponsors/ssd-nodes-sponsorship.png" width="260" alt="SSD Nodes"><br> <b>SSD Nodes</b> </a><br> <sub>Affordable VPS hosting for self-hosters</sub> </td> <td align="center" width="33%"> <a href="https://umbrel.com?ref=dashy" target="_blank"> <img src="https://cdn.as93.net/sponsors/umbrel-banner.jpg" width="260" alt="Umbrel"><br> <b>Umbrel</b> </a><br> <sub>Personal home cloud and OS for self-hosting</sub> </td> <td align="center" width="33%"> <a href="https://www.testmuai.com/?utm_medium=sponsor&utm_source=dashy" target="_blank"> <img src="https://cdn.as93.net/sponsors/test-mu-ai.png" width="260" alt="TestMu AI"><br> <b>TestMu AI</b> </a><br> <sub>Full-stack Agentic AI Quality Engineering platform</sub> </td> </tr> </table> <details> <summary><b>Table of Contents</b></summary> <p> - **Getting Started** - [🌈 Features](#features-) - [⚡ Demo](#demo-) - [🚀 Getting Started](#getting-started-) - [🔧 Configuring](#configuring-) - **Feature Overview** - [🎨 Theming](#theming-) - [🧸 Icons](#icons-) - [🚦 Status Indicators](#status-indicators-) - [📊 Widgets](#widgets-) - [🔐 Authentication](#authentication-) - [👓 Alternate Views](#alternate-views-) - [🖱️ Opening Methods](#opening-methods-) - [🔎 Searching and Shortcuts](#searching-and-shortcuts-) - [⚙️ Config Editor](#config-editor-) - [☁ Cloud Backup & Sync](#cloud-backup--sync-) - [🌎 Language Switching](#language-switching-) - [📃 Multi-Page Support](#multi-page-support-) - **Community** - [📊 System Requirements](#system-requirements-) - [🙋‍♀️ Support](#support-) - [💖 Supporting Dashy](#supporting-dashy-) - [🏆 Credits](#credits-) - [🧱 Developing](#developing-) - [📘 Documentation](#documentation-) - [🛣️ Roadmap](#roadmap-) - [🙌 Alternatives](#alternatives-) - [📜 License](#license-) </p> </details> ## Features 🌈 - 📃 Support for multiple pages - 🚦 Real-time status monitoring for each of your apps/links/hosts - 📊 Use widgets to display info and dynamic content from self-hosted services - 🔎 Instant search by name, domain, or tags + customizable hotkeys & keyboard shortcuts - 🎨 Many built-in color themes, with UI color editor and support for custom CSS - 🧸 Many icon options - Font-Awesome, homelab icons, auto-fetching Favicon, images, emojis, etc. - 💂 Optional authentication with multi-user access, configurable privileges, and SSO support - 🌎 Multi-language support, with 10+ human-translated languages, and more on the way - ☁ Optional, encrypted, free off-site cloud backup and restore feature available - 💼 A workspace view, for easily switching between multiple apps simultaneously - 🛩️ A minimal view, for use as a fast-loading browser Startpage - 🖱️ Choose app launch methods: new tab, same tab, clipboard, pop-up modal, or open in workspace view - 📏 Customizable layout, sizes, text, component visibility, sort order, behavior, etc. - 🖼️ Options for a full-screen background image, custom nav-bar links, HTML footer, title, etc. - 🚀 Easy to setup with Docker, or on bare metal, or with 1-Click cloud deployment - ⚙️ Easy single-file YAML-based configuration, and option to configure app through the UI - ✨ Under active development with improvements and new features added regularly - 🤏 Small bundle size, fully responsive UI, and PWA for basic offline access - 🆓 100% free and open-source - 🔐 Strong focus on privacy - 🌈 And loads more... **[⬆️ Back to Top](#dashy)** ## Demo ⚡ **Live Instances**: [Demo](https://demo.dashy.to) (Live Demo) ┆ [Dev Preview](https://dev.dashy.to) (Dev Preview) **Screenshots**: Checkout the [Showcase](./docs/showcase.md), to see example dashboards from the community **Try it yourself**: [`docker run -p 8080:8080 lissy93/dashy`](./docs/quick-start.md) <p align="center"> <img width="800" src="https://i.ibb.co/L8YbNNc/dashy-demo2.gif" alt="Demo" /> </p> **[⬆️ Back to Top](#dashy)** --- ## Getting Started 🚀 > For full setup instructions, see: [**Deployment**](./docs/deployment.md) ### Deploying from Docker Hub 🐳 You will need [Docker](https://docs.docker.com/get-docker/) installed on your system ```bash docker run -p 4000:8080 lissy93/dashy ``` Or ```bash docker run -d \ -p 4000:8080 \ -v /path/to/your/user-data:/app/user-data \ --name my-dashboard \ --restart=always \ lissy93/dashy:latest ``` To use with compose, see our sample [`docker-compose.yml`](https://github.com/lissy93/dashy/blob/master/docker-compose.yml). The mounted `/app/user-data` directory **must** contain at least a `conf.yml`. It can also hold sub-config files, item icons, fonts, custom CSS, or anything else you want served from the web root. Dashy is distributed both on [DockerHub](https://hub.docker.com/r/lissy93/dashy) (`lissy93/dashy`) and [GHCR](https://github.com/lissy93/dashy/pkgs/container/dashy) (`ghcr.io/lissy93/dashy`). You can either use `:latest` or pin to specific versions (like `4.0.0`). All images are multi-arch (works on amd64, arm64, and arm/v7). > Once you've got Dashy running, see [the docs](https://dashy.to/docs/) for configuration references and usage guides. ### Deploying from Source 🔨 You'll need Node (20+) installed, as well as git and `yarn` enabled. - Clone the Repo: `git clone https://github.com/Lissy93/dashy.git` and `cd dashy` - Configuration: Fill in your settings in `./user-data/conf.yml` - Install dependencies: `yarn` - Build: `yarn build` - Run: `yarn start` > See docs: [Full list of Dashy's commands](./docs/management.md#running-commands) ### Deploy to the Cloud ☁️ Dashy supports **1-Click deployments** on several popular cloud platforms. To spin up a new instance, just click a link below: - [<img src="https://i.ibb.co/ZxtzrP3/netlify.png" width="18"/> Deploy to Netlify](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy) - [<img src="https://i.ibb.co/Ld2FZzb/vercel.png" width="18"/> Deploy to Vercel](https://vercel.com/new/project?template=https://github.com/lissy93/dashy) - [<img src="https://i.ibb.co/xCHtzgh/render.png" width="18"/> Deploy to Render](https://render.com/deploy?repo=https://github.com/lissy93/dashy) - [<img src="https://railway.app/brand/logo-light.png" width="18"/> Deploy to Railway](https://railway.app/template/MtdjAQ?referralCode=app) - [<img src="https://i.ibb.co/J7MGymY/googlecloud.png" width="18"/> Deploy to GCP](https://deploy.cloud.run/?git_repo=https://github.com/lissy93/dashy.git) - [<img src="https://i.ibb.co/HVWVYF7/docker.png" width="18"/> Deploy to PWD](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/Lissy93/dashy/master/docker-compose.yml) - [<img src="https://i.ibb.co/7NxnM2P/easypanel.png" width="18"/> Deploy to Easypanel](https://easypanel.io/docs/templates/dashy) - [<img src="https://cloudcache.tencent-cloud.com/qcloud/ui/static/other_external_resource/af4a7321-0f56-47ae-a39e-3fd1d162d8e6.jpeg" width="18"/> Deploy to EdgeOne](https://edgeone.ai/pages/new?repository-url=https://github.com/lissy93/dashy) > For more 1-click cloud deployments, see [Cloud Deployment](./docs/deployment.md#deploy-to-cloud-service) **[⬆️ Back to Top](#dashy)** --- ## Configuring 🔧 > For full configuration documentation, see: [**Configuring**](./docs/configuring.md) Dashy is configured through a YAML file, located at `./user-data/conf.yml`. In addition, you can find a complete list of available options in the [Configuring Docs](./docs/configuring.md). The config can also be edited and saved directly through the UI. **[⬆️ Back to Top](#dashy)** --- ## Theming 🎨 > For full theming documentation, see: [**Theming**](./docs/theming.md) Dashy comes pre-bundled with several built-in themes, which you can preview, apply and edit through the UI. With the theme configurator and support for custom CSS, everything is in place to quickly develop your own unique-looking dashboard. <p align="center"> <a href="https://i.ibb.co/BVSHV1v/dashy-themes-slideshow.gif"> <img alt="Example Themes" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/theme-slideshow.gif" width="400" /> </a> </p> <p align="center"> <a href="https://i.ibb.co/cLDXj1R/dashy-theme-configurator.gif"> <img alt="Example Themes" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/theme-config-demo.gif" width="400" /> </a> </p> **[⬆️ Back to Top](#dashy)** --- ## Icons 🧸 > For full iconography documentation, see: [**Icons**](./docs/icons.md) Both sections and items can have an icon associated with them, defined under the `icon` attribute. With several different icon packs supported, you'll be able to find the perfect thumbnail for any app or service. The following icon types are supported: - **Favicon** - Automatically fetch an apps icon from its Favicon or logo image - **Icon Packs** - Use any icon from [font-awesome], [simple-icons], [selfh.st/icons], or [material icons] - **Emoji** - Any valid emoji can be used as an icon - **Generative** - Unique, auto-generated images for easily identifying services - **URL** - Pass the URL of any valid image in to have it fetched and rendered - **Local** - Store custom images locally and reference by filename - **Homelab Icons** - Using [dashboard-icons] for logos of commonly self-hosted services [font-awesome]: https://fontawesome.com/icons [simple-icons]: https://simpleicons.org/ [material icons]: https://github.com/Templarian/MaterialDesign [selfh.st/icons]: https://selfh.st/icons [dashboard-icons]: https://github.com/homarr-labs/dashboard-icons <p align="center"> <img width="400" src="https://i.ibb.co/GTVmZnc/dashy-example-icons.png" /> </p> **[⬆️ Back to Top](#dashy)** --- ## Status Indicators 🚦 > For full monitoring documentation, see: [**Status Indicators**](./docs/status-indicators.md) Dashy has two optional features to check if each app/service or host is up and responding, then display a small status indicator icon. Hovering over it will show additional stats like response time and status code. App/Service status is checked by calling an URL and analyzing its HTTP response code. Host status is checked by sending a real ping ICMP request to the host. Both checks can be done at the same time on the same item. In this cas, two status indicators will show up and behave independantly according to the global and item settings for each feature. Status indicators can be globally enabled by setting `appConfig.statusCheck: true` for app/service and `appConfig.pingCheck: true` for hosts or enabled/disabled on a per-item basis. Statuses are checked on page load, but you can allow continuous polling by specifying a time interval between checks, in seconds under `appConfig.statusCheckInterval` and `appConfig.pingCheckInterval`. You can also use a different endpoint for app/service status checking, with `statusCheckUrl`, and if needed, pass in custom headers under `statusCheckHeaders`. <p align="center"> <img alt="Status Checks demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/status-check-demo.gif" width="600" /> </p> **[⬆️ Back to Top](#dashy)** --- ## Widgets 📊 > For full widget documentation, see: [**Widgets**](./docs/widgets.md) You can display dynamic content from services in the form of widgets. There are several pre-built widgets available for showing useful info, and integrations with commonly self-hosted services, but you can also easily create your own for almost any app. <p align="center"> <img width="600" src="https://i.ibb.co/GFjXVHy/dashy-widgets.png" /> </p> **[⬆️ Back to Top](#dashy)** --- ## Authentication 🔐 > For full authentication documentation, see: [**Authentication**](./docs/authentication.md) Dashy has full support for secure single-sign-on using [Keycloak](https://www.keycloak.org/) for secure, easy authentication, see [setup docs](/docs/authentication.md#keycloak) for a full usage guide. There is also a basic auth feature, which doesn't require additional setup. To enable this, add an `auth` attribute under `appConfig`, containing an array of `users`, each with a username, SHA-256 hashed password and optional user type. Basic auth also supports several access control features, including read-only guest access and granular controls. ```yaml appConfig: auth: users: - user: alicia hash: 4D1E58C90B3B94BCAD9848ECCACD6D2A8C9FBC5CA913304BBA5CDEAB36FEEFA3 type: admin ``` Other access control systems are also supported, see the [Alternative Auth Methods](./docs/authentication.md#alternative-authentication-methods) docs. **[⬆️ Back to Top](#dashy)** --- ## Alternate Views 👓 As well as the default homepage, there is also: - A minimal view, valid for use as a browser start page - A workspace view, useful for visiting many apps simultaneously You can change the view from the UI, using the switch icon in the top-right corner, or select a default view in the config under `appConfig.startingView` attribute. <p align="center"> <b>Example of Workspace View</b><br> <img alt="Workspace view demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/workspace-demo.gif" width="600" /> </p> <p align="center"> <b>Example of Minimal View</b><br> <img alt="Workspace view demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/minimal-view-demo.gif" width="600" /> </p> **[⬆️ Back to Top](#dashy)** --- ## Opening Methods 🖱️ > For full documentation on views and opening methods, see: [**Alternate Views**](./docs/alternate-views.md) There are several different ways you can launch apps. You can specify the default opening method for any given item under the `target` attribute or set a site-wide default under `appConfig.defaultOpeningMethod`. Right-click on an item for all options. The following options are supported: - `sametab` - The app will be launched in the current tab - `newtab` - The app will be launched in a new tab (or use Ctrl + Click) - `modal` - Launch app in a resizable/ movable popup modal on the current page (or use Alt + Click) - `workspace` - Changes to Workspace view and launches app - `clipboard` - Copy the app's URL to your system clipboard - `top` - Opens in the top-most browsing context, useful if you're accessing Dashy through an iframe **[⬆️ Back to Top](#dashy)** --- ## Searching and Shortcuts 🔎 > For full documentation on searching, see: [**Searching & Shortcuts**](./docs/searching.md) Quickly finding and launching applications is the primary aim of Dashy. To that end, instant search and customizable keyboard shortcuts are built-in. To start filtering, start typing—no need to select the search bar or use any special key. Then use either the tab key or arrow keys to select and move between results, and hit enter to launch the currently selected application. For apps that you use regularly, you can set a custom keybinding. Use the `hotkey` parameter on a certain item to specify a numeric key between `0 - 9`. You can then launch that app by just pressing that key. You can also add custom tags to a given item to make finding them based on keywords easier. For example, in the following example, searching for 'Movies' will show 'Plex' ```yaml items: - title: Plex hotkey: 8 icon: favicon description: Media library url: https://plex.lab.local tags: [ movies, videos, music ] ``` To search the web directly through Dashy, just press enter after typing your query. Options for web search are set under `appConfig.webSearch`. There is built-in support for [10+ search engines](./docs/searching.md#setting-search-engine), or [use your own custom provider](./docs/searching.md#using-custom-search-engine) or self-hosted instance. With the web search, you can also define your bangs to redirect results to any given app, website, or search engine, when the query is preceded with a certain character sequence (usually beginning in `/`, `!` or `:`). ```yaml webSearch: searchEngine: duckduckgo openingMethod: newtab searchBangs: /r: reddit /w: wikipedia /s: https://whoogle.local/search?q= ':wolf': wolframalpha ':so': stackoverflow ':git': github ``` Hit `Esc` at any time to close any open apps, clear the search field, or hide any modals. **[⬆️ Back to Top](#dashy)** --- ## Config Editor ⚙️ > For full config documentation, see: [**Configuring**](./docs/configuring.md) As well as passing in a YAML config file, you can also configure the app directly through the UI and preview changes live. To edit any section or item, right-click on it, and select "Edit", or enter the Edit Mode (using the Pen icon in the top-right), then click any part of the page to edit. Changes will be visible immediately but will not be saved until clicking "Save to Disk" or "Save Locally". Under the config menu, you can export, view, backup, or reset app config and edit the raw config file in a text editor with built-in schema validation. It's recommended to keep a backup of your config. <p align="center"> <img alt="Interactive Editor demo" src="https://user-images.githubusercontent.com/1862727/139543020-b0576d28-0830-476f-afc8-a815d4de6def.gif" width="600" /> </p> <p align="center"> <img alt="Config Editor demo" src="https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/config-editor-demo.gif" width="600" /> </p> **[⬆️ Back to Top](#dashy)** --- ## Cloud Backup & Sync ☁ > For full backup documentation, see: [**Cloud Backup & Sync**](./docs/backup-restore.md) Dashy has an **optional** built-in feature for securely backing up your config to a hosted cloud service and then restoring it on another instance. This is useful not only for backing up your configuration off-site but also enables Dashy to be used without having to write a YAML config file. All data is fully E2E encrypted before being sent to the backend (done in [`CloudBackup.js`](https://github.com/Lissy93/dashy/blob/master/src/utils/CloudBackup.js) using [crypto.js](https://github.com/brix/crypto-js) 's AES method). The data is then sent to a [Cloudflare worker](https://developers.cloudflare.com/workers/learning/how-workers-works) and stored in a [KV](https://developers.cloudflare.com/workers/learning/how-kv-works) data store. **[⬆️ Back to Top](#dashy)** --- ## Language Switching 🌎 > For full internationalization documentation, see: [**Multi-Language Support**](./docs/multi-language-support.md) Dashy supports multiple languages and locales. When available, your language should be automatically detected and applied on load. But you can also select a language through the UI (under config --> Switch Language) or set `appConfig.language` to your language (specified as a 2-digit [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)), as seen below, e.g. `language: de`. #### Supported Languages - 🇬🇧 **English**: `en` - _Default_ - 🇬🇧 **English (British)**: `en-GB` - 🇦🇪 **Arabic**: `ar` - Contributed by **[@kayedspace](https://github.com/kayedspace)** - 🇧🇩 **Bengali**: `bn` - Contributed by **[@soaibsafi](https://github.com/soaibsafi)** - 🇧🇬 **Bulgarian**: `bg` - Contributed by **[@asenov](https://github.com/asenov)** - 🇨🇳 **Chinese**: `zh-CN` - Contributed by **[@FormatToday](https://github.com/FormatToday)** - 🇨🇿 **Czech**: `cs` - Contributed by **[@Tuzi555](https://github.com/Tuzi555)** - 🇩🇰 **Danish**: `da` - Contributed by **[@lordpansar](https://github.com/lordpansar)** - 🇳🇱 **Dutch**: `nl` - Contributed by **[@evroon](https://github.com/evroon)** - 🇫🇷 **French**: `fr` - Contributed by **[@EVOTk](https://github.com/EVOTk)** - 🇩🇪 **German**: `de` - Contributed by **[@Niklashere](https://github.com/Niklashere)** - 🇬🇷 **Greek**: `el` - Contributed by **[@aviolaris](https://github.com/aviolaris)** - 🇮🇳 **Hindi**: `hi` - _Auto-generated_ (needs human review!) - 🇭🇺 **Hungarian**: `hu` - Contributed by **[@apgyorfi](https://github.com/apgyorfi)** - 🇮🇹 **Italian**: `it` - Contributed by **[@alexdelprete](https://github.com/alexdelprete)** - 🇯🇵 **Japanese**: `ja` - _Auto-generated_ (needs human review!) - 🇰🇷 **Korean**: `ko` - Contributed by **[@boggy-cs](https://github.com/boggy-cs)** - 🇰🇬 **Kyrgyz**: `ky` - Contributed by **[@noblepower1337](https://github.com/noblepower1337)** - 🇳🇴 **Norwegian Bokmål**: `nb` - Contributed by **[@rubjo](https://github.com/rubjo)** - 🇵🇱 **Polish**: `pl` - Contributed by **[@skaarj1989](https://github.com/skaarj1989)** - 🇵🇹 **Portuguese**: `pt` - Contributed by **[@LeoColman](https://github.com/LeoColman)** - 🇷🇴 **Romanian**: `ro` - Contributed by **[@z3r0l1nk](https://github.com/z3r0l1nk)** - 🛰️ **Galician**: `gl` - Contributed by **[@pvillaverde](https://github.com/pvillaverde)** - 🇷🇺 **Russian**: `ru` - Contributed by **[@sasetz](https://github.com/sasetz)** - 🇸🇰 **Slovak**: `sk` - Contributed by **[@Smexhy](https://github.com/Smexhy)** - 🇸🇮 **Slovenian**: `sl` - Contributed by **[@UrekD](https://github.com/UrekD)** - 🇪🇸 **Spanish**: `es` - Contributed by **[@lu4t](https://github.com/lu4t)** - 🇸🇪 **Swedish**: `sv` - Contributed by **[@BOZG](https://github.com/BOZG)** - 🇹🇼 **Traditional Chinese**: `zh-TW` - Contributed by **[@stanly0726](https://github.com/stanly0726)** - 🇹🇷 **Turkish**: `tr` - Contributed by **[@imsakg](https://github.com/imsakg)** - 🇺🇦 **Ukrainian**: `uk` - Contributed by **[@allozavrr](https://github.com/allozavrr)** - 🏴‍☠️ **Pirate**: `pirate` - Contributed by **[@Lissy93](https://github.com/lissy93)** #### Add your Language I would love Dashy to be available to everyone without language being a barrier to entry. If you've got a few minutes to spare, consider adding translations for your language. It's a quick task, and all text is in [a single JSON file](https://github.com/Lissy93/dashy/tree/master/src/assets/locales). Since any missing text will fall back to English, you don't need to translate it all. **[⬆️ Back to Top](#dashy)** --- ## Multi-Page Support 📃 > For full multi-page documentation, see: [**Pages & Sections**](./docs/pages-and-sections.md) Within your dashboard, you can have as many sub-pages as you require. To load additional pages, specify a name, and path to a config file under `pages`. The config file can be either local (stored in `/public`), or remote (located anywhere accessible). ```yaml pages: - name: Networking Services path: 'networking.yml' - name: Work Stuff path: 'work.yml' ``` Or ```yaml pages: - name: Getting Started path: 'https://snippet.host/tvcw/raw' - name: Homelab path: 'https://snippet.host/tetp/raw' - name: Browser Startpage path: 'https://snippet.host/zcom/raw' ``` --- ## System Requirements 📊 If running on bare metal, Dashy requires [Node](https://nodejs.org/en/) V 20.0.0 or later, LTS (22.x) is recommended. If running in Docker container, the recommended base image is Alpine (3.21) The hardware requirements vary depending on where and how you are running Dashy. Generally speaking, on a bare-metal system or Docker container, 1GB of memory should be more than enough, and depending on whether you are using your own assets, then 1GB of disk space should be sufficient. If you are using one of the 1-click cloud deployment methods, serving the app through a CDN or using a static hosting provider, then there are no specific requirements, as the built app is just a series of static JS files, and so is very light-weight. Dashy also runs well on low-powered ARM-based single board computers, such as a Raspberry Pi (tested on Pi 3) **[⬆️ Back to Top](#dashy)** --- ## Support 🙋‍♀️ If you're having trouble getting Dashy up and running, or have a question about usage or configuration, feel free to ask. The best place to do this is via [the Discussions](https://github.com/Lissy93/dashy/discussions). If you've found something which isn't working as it should, please raise a bug by [opening a ticket](https://github.com/Lissy93/dashy/issues/new/choose). It's best to check the [docs](./docs), [previous issues](https://github.com/Lissy93/dashy/issues?q=label%3A%22%F0%9F%A4%B7%E2%80%8D%E2%99%82%EF%B8%8F+Question%22+) and [troubleshooting guide](./docs/troubleshooting.md) first. **[⬆️ Back to Top](#dashy)** --- ## Supporting Dashy 💖 > For full details and other ways you can help out, see: [**Contributing**](./docs/contributing.md) If you're using Dashy and would like to help support its development, then that would be awesome! Contributions of any type, any size, are always very much appreciated, and we will appropriately credit you for your effort. Several areas that we need a bit of help with at the moment are: - Translating - Help make Dashy available to non-native English speakers by [adding your language](./docs/multi-language-support.md#adding-a-new-language) - Donate a small amount by [Sponsoring @Lissy93 on GitHub](https://github.com/sponsors/Lissy93) and receive some extra perks! - Complete a [short survey](https://survey.typeform.com/to/gl0L68ou) to have your say about future features - Share your dashboard in the [Showcase](https://github.com/Lissy93/dashy/blob/master/docs/showcase.md#dashy-showcase-), to inspire others - Spread the word by sharing Dashy or a screenshot of your dashboard to help new users discover it - Submit a PR to add a new feature, fix a bug, update the docs, add a theme, widget or something else - Star Dashy on GitHub/ DockerHub or leave an upvote / review on [these platforms](https://github.com/Lissy93/dashy/blob/master/docs/contributing.md#star-upvote-or-leave-a-review) [![Sponsor Lissy93 on GitHub](./docs/assets/sponsor-button.svg)](https://github.com/sponsors/Lissy93) **[⬆️ Back to Top](#dashy)** ## Credits 🏆 > For a complete list of credits, and attributions to packages used within Dashy, see: [**Credits**](./docs/credits.md) Thank you so much to everyone who has helped with Dashy so far; every contribution is very much appreciated. #### Sponsors Huge thanks to the sponsors helping to support Dashy's development! ![sponsors badge](https://readme-contribs.as93.net/sponsors/lissy93) #### Contributors [![contributors badge](https://readme-contribs.as93.net/contributors/lissy93/dashy?perRow=12&limit=96)](./docs/credits.md) #### Stats [![Stats](https://repobeats.axiom.co/api/embed/48546e3c768d38c450ba136e32c0992bcf58ad73.svg "Repobeats analytics image")](https://github.com/Lissy93/dashy/blob/master/docs/credits.md) **[⬆️ Back to Top](#dashy)** --- ## Developing 🧱 > For full development documentation, see: [**Developing**](./docs/developing.md) [![Open Project in VS Code](https://img.shields.io/badge/Open_in-VS_Code-863cfc?style=flat-square&logo=visualstudiocode)](https://vscode.dev/github/Lissy93/Dashy) [![Open in GitPod](https://img.shields.io/badge/Open_in-GitPod-ffae33?style=flat-square&logo=gitpod)](https://gitpod.io/#github.com/lissy93/dashy.git) [![Open in GitHub Code Spaces](https://img.shields.io/badge/Open_in-Code%20Spaces-131313?style=flat-square&logo=github)](https://github.dev/Lissy93/dashy) Before getting started, you'll need [Git](https://git-scm.com/downloads), [Node](https://nodejs.org/en/download/) and optionally [Yarn](https://yarnpkg.com/) (run `npm i -g yarn`) installed. To set up the development environment: 1. Get Code: `git clone https://github.com/Lissy93/dashy.git` and `cd dashy` 2. Install dependencies: `yarn` 3. Start dev server: `yarn dev` 4. Open the browser: `http://localhost:8080` When you're ready, you can build the production app with `yarn build`, and then run it with `yarn start` If you're new to web development, I've put together a short [list of resources](https://github.com/Lissy93/dashy/blob/master/docs/developing.md#resources-for-beginners) to help beginners get started **Repo Status**: [![Open PRs](https://flat.badgen.net/github/open-prs/lissy93/dashy?icon=github)](https://github.com/Lissy93/dashy/pulls) [![Total PRs](https://flat.badgen.net/github/prs/lissy93/dashy?icon=github)](https://github.com/Lissy93/dashy/pulls?q=) [![GitHub commit activity](https://img.shields.io/github/commit-activity/m/lissy93/dashy?style=flat-square)](https://github.com/Lissy93/dashy/commits/master) [![Last Commit](https://flat.badgen.net/github/last-commit/lissy93/dashy?icon=github)](https://github.com/Lissy93/dashy/commits/master) [![Contributors](https://flat.badgen.net/github/contributors/lissy93/dashy?icon=github)](https://github.com/Lissy93/dashy/graphs/contributors) **[⬆️ Back to Top](#dashy)** --- ## Documentation 📘 > For full docs, see: **[Documentation Contents](./docs/readme.md)** #### Running Dashy - 💨 [Quick Start](/docs/quick-start.md) - TDLR guide on getting Dashy up and running in under 5 minutes - 🚀 [Deployment](/docs/deployment.md) - Full guide on setting up Dashy on various different environments - 🔧 [Configuring](/docs/configuring.md) - Complete list of all available options in the config file - 💻 [Management](/docs/management.md) - Managing your app, updating, security, web server configuration, etc - 🚒 [Troubleshooting](/docs/troubleshooting.md) - Common errors and problems, and how to fix them #### Feature Docs - 🛡️ [Authentication](/docs/authentication.md) - Guide to setting up authentication to protect your dashboard - 🌈 [Alternate Views](/docs/alternate-views.md) - Outline of available pages / views and item opening methods - 💾 [Backup & Restore](/docs/backup-restore.md) - Guide to backing up config with Dashy's cloud sync feature - 🧸 [Icons](/docs/icons.md) - Outline of all available icon types for sections and items, with examples - 🌐 [Multi-Language Support](/docs/multi-language-support.md) - Switching languages, and adding a new locales - 🚦 [Status Indicators](/docs/status-indicators.md) - Using Dashy to monitor uptime and status of your apps, services and hosts - 🔍 [Searching & Shortcuts](/docs/searching.md) - Searching, launching methods + keyboard shortcuts - 🎨 [Theming](/docs/theming.md) - Complete guide to applying, writing and modifying themes + styles - 📊 [Widgets](/docs/widgets.md) - List of all dynamic content widgets, with usage guides and examples #### Development and Contributing - 🧱 [Developing](/docs/developing.md) - Running Dashy development server locally, and general workflow - 🛎️ [Development Guides](/docs/development-guides.md) - Common development tasks, to help new contributors - 💖 [Contributing](/docs/contributing.md) - How to contribute to Dashy - 🌟 [Showcase](/docs/showcase.md) - See how others are using Dashy, and share your dashboard - 🏆 [Credits](/docs/credits.md) - Shout out to the amazing people who have contributed so far - 🗞️ [Release Workflow](/docs/release-workflow.md) - Info about releases, CI and automated tasks #### Misc - 🔐 [Privacy & Security](/docs/privacy.md) - List of requests, potential issues, and security resources - 📄 [License](/LICENSE) - Copy of the MIT License - 📏 [Code of Conduct](/.github/CODE_OF_CONDUCT.md) - Contributor Covenant Code of Conduct **[⬆️ Back to Top](#dashy)** --- ## Roadmap 🛣️ For upcoming features that will be released in the near future, see the [**Current Roadmap**](https://github.com/Lissy93/dashy/discussions/405) For past updates, see the [**Releases Page**](https://github.com/Lissy93/dashy/releases) **[⬆️ Back to Top](#dashy)** --- ## Alternatives 🙌 A few self-hosted web apps serve a similar purpose to Dashy. If you're looking for a dashboard, and Dashy doesn't meet your needs, I highly recommend you check these projects out! - [Flame](https://github.com/pawelmalak/flame) by @pawelmalak (`MIT`) - [HomeDash2](https://lamarios.github.io/Homedash2) - [Homer](https://github.com/bastienwirtz/homer) (`Apache License 2.0`) - [Organizr](https://organizr.app/) (`GPL-3.0 License`) - [Heimdall](https://github.com/linuxserver/Heimdall) (`MIT`) - [Smashing](https://github.com/Smashing/smashing) (`MIT`) - See more 👉 [Awesome Self-Hosted](https://github.com/awesome-selfhosted/awesome-selfhosted#personal-dashboards) **[⬆️ Back to Top](#dashy)** --- ## License 📜 Dashy is Licensed under [MIT X11](https://en.wikipedia.org/wiki/MIT_License) ``` Copyright © Alicia Sykes <https://aliciasykes.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, Dashy shall not be used in advertising or otherwise to promote the sale, use, or other dealings in this Software without prior written authorization from the repo owner. ``` **TDLR;** _You can do whatever you like with Dashy: use it in private or commercial settings,_ _redistribute and modify it. But you must display this license and credit the author._ _There is no warranty that this app will work as expected, and the author cannot be held_ _liable for anything that goes wrong._ For more info, see TLDR Legal's [Explanation of MIT](https://tldrlegal.com/license/mit-license) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FLissy93%2Fdashy.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FLissy93%2Fdashy?ref=badge_large) **[⬆️ Back to Top](#dashy)** --- <!-- License + Copyright --> <p align="center"> <i>© <a href="https://aliciasykes.com">Alicia Sykes</a> 2019 - 2026</i><br> <i>Licensed under <a href="https://gist.github.com/Lissy93/143d2ee01ccc5c052a17">MIT</a></i><br> <a href="https://github.com/lissy93"><img src="https://i.ibb.co/4KtpYxb/octocat-clean-mini.png" /></a><br> <sup>Thanks for visiting :)</sup> </p> <!-- Dinosaurs are Awesome --> <!-- . - ~ ~ ~ - . .. _ .-~ ~-. //| \ `..~ `. || | } } / \ \ (\ \\ \~^..' | } \ \`.-~ o / } | / \ (__ | / | / `. `- - ~ ~ -._| /_ - ~ ~ ^| /- _ `. | / | / ~-. ~- _ |_____| |_____| ~ - . _ _~_-_ -->

Productivity Personal Dashboards
25.4K Github Stars
Domain Locker
Open Source

Domain Locker

<h1 align="center">Domain Locker</h1> <p align="center"> <i>The Central Hub for all your Domain Names</i> <br> <b>🌐<a href="https://domain-locker.com">domain-locker.com</a></b> </p> <p align="center"> <img width="48" src="https://github.com/Lissy93/domain-locker/blob/main/src/assets/logo.png?raw=true" /> </p> <!-- <p align="center"> <a href="https://artifacthub.io/packages/helm/domain-locker/domain-locker"> <img alt="ArtifactHub" src="https://img.shields.io/badge/-ArtifactHub-40b0c2?style=flat&logo=artifacthub&logoColor=ffffff" /> </a> <a href="https://hub.docker.com/r/lissy93/domain-locker"> <img alt="DockerHub" src="https://img.shields.io/docker/pulls/lissy93/domain-locker.svg?logo=docker&label=DockerHub&color=256bd7&labelColor=124ec9&logoColor=ffffff" /> </a> <a href="https://apps.umbrel.com/app/domain-locker"> <img alt="Umbrel" src="https://img.shields.io/badge/-Umbrel-7472fc?style=flat&logo=umbrel&logoColor=ffffff" /> </a> <a href="https://community-scripts.github.io/ProxmoxVE/scripts?id=domain-locker"> <img alt="Proxmox" src="https://img.shields.io/badge/-Proxmox-e57000?style=flat&logo=proxmox&logoColor=ffffff" /> </a> <img alt="EasyPanel" src="https://img.shields.io/badge/-EasyPanel-15b7b1?style=flat&logo=qlty&logoColor=ffffff" /> <img alt="Unraid" src="https://img.shields.io/badge/-Unraid-F15A2C?style=flat&logo=unraid&logoColor=ffffff" /> <img alt="Portainer" src="https://img.shields.io/badge/-Portainer-13BEF9?style=flat&logo=portainer&logoColor=ffffff" /> </p> --> <details> <summary><b>Contents</b></summary> - [About](#about) - [Screenshot](#screenshot) - [Features](#features) - [Live Demo](#demo) - [Get Started](#get-started) - [Domain-Locker.com](#option-1-domain-lockercom) - [Self-Hosting](#option-2-self-hosting) - [Developing](#developing) - [App Setup](#project-setup) - [Architecture](#architecture) - [Contributing](#contributing) - [Attributions](#attributions) - [License](#license) </details> ## About The aim of Domain Locker, is to give you complete visibility of your domain name portfolio, in once central place. For each domain you add, we analyse it and fetch all associated data. We then continuously monitor your domains, and notify you (according to your preferences) when something important changes or when it's soon to expire. So you'll get detailed domain analysis, security insights, change history, recent performance, valuation data and much more. With Domain Locker, you'll never again loose track of your domains, miss an expiration, or forget which registrar and providers each domain uses. ### Screenshot <p align="center"> <img width="800" src="https://cdn.as93.net/project-screens/domain-locker-homepage/w1024" /> </p> <details> <summary>More screenshots...</summary> <p align="center"><sup>(Sorry about the 5fps, I wanted to keep file size down!)</sup></p> <p align="center"> <img width="800" src="/.github/screenshots/quick-demo.gif" /><br> <img width="800" src="/.github/screenshots/screenshot-grid.png" /> <img width="800" src="/.github/screenshots/domain-locker-viz-screenshots.png" /> <img width="800" src="/.github/screenshots/domain-locker-settings-screenshots.png" /> </p> </details> ### Features - 👁️ Total visibility of all your domains and upcoming expirations - 📡 Auto-fetched data: SSL certs, hosts, registrars, IPs, subdomains, DNS, etc - 🔬 View detailed metrics and analysis for each domain - 📊 Visual analytics and breakdowns and trends across your portfolio - 💬 Configurable alerts and webhook notifications - 🗃️ Easy import/export, as well as API data access - 📜 Track changes in domain configuration over time - 📈 Monitor website health, security and performance - 💹 Keep record of purchase prices and renewal costs - 🔖 Add categories, and link related resources to domains - 🎨 Multi-language support, dark/light/custom themes <details> <summary>More features...</summary> ```mermaid %%{init: {"theme": "default"}}%% kanban 🌐 Domain Data 🛰️ Auto-fetch assets: SSL, hosts, registrars, IPs, DNS, subdomains 🔎 Detailed domain data like SSL, hosts, registrars, IPs and more 🏷️ Enrich data with tags, notes, costs, and other metadata to track 🖇️ Connection with external tools for more data 📊 Metrics 🗂️ Breakdown of domain providers: registrars, SSL, hosts 🕒 Timeline of registrations and upcoming expirations 📶 Monitor domain uptime, performance and health 💹 Record valuation, purchase prices and renewal costs 🔔 Notifications ⏱️ Get notified before your domain is due to expire 📲 Configurable alerts for monitoring changes in domain config 📬 Multiple channels: webhook, email, SMS, Slack, Telegram, WhatsApp and more 🛤️ Track change history of each domain 🛡️ Data 💽 Own your data: Export, import, delte at any time ⌨️ Programatic access via a REST or GraphQL API, or with RSS, iCal, Prometheus integrations 📈 Keep detailed change logs of all domain updates 🔐 Transparent privacy policy 🛠️ Customization 👤 SSO and 2FA supported 🎨 Custom themes, fonts, light/dark mode 🌍 Multi-language support 💻 Open-source and self-hostable ✅ Accessible, responsive, and well-documented ``` </details> ### Demo Try the live demo to [demo.domain-locker.com](https://demo.domain-locker.com) <br> (Username: `[email protected]` Password: `domainlocker`) --- ## Get Started To use Domain Locker, you have two options: 1. 💻 The managed instance, at **[domain-locker.com](https://domain-locker.com/)** _(free)_ 2. 🏗️ Or **[self-hosting](#deployment)** yourself via Docker _(also free, ofc!)_ ### Option 1: Domain-Locker.com Head to [our website](https://domain-locker.com), and sign up with Google, GitHub or your email.<br> The starter plan is free, and no setup is required. Just sign in, add your domains, and start tracking them. ### Option 2: Self-Hosting ```bash curl -fsSL https://install.domain-locker.com | bash ``` Use the one-liner abover, or use the [`docker-compose.yml`](https://github.com/Lissy93/domain-locker/blob/main/docker-compose.yml) <details> <summary>Details</summary> - **Prerequisites**: - Domain Locker is intended to be run in a container, so you'll need Docker [installed](https://docs.docker.com/engine/install/) on your host system. - **Containers**: - We have a Docker image published to [`lissy93/domain-locker`](https://hub.docker.com/r/lissy93/domain-locker). - You'll also need a Postgres database, such as the [`postgres:15-alpine`](https://hub.docker.com/_/postgres?tab=tags&name=15-alpine) container. - **Environment**: - When starting the container, bind `3000` in the container, to your host `PORT` (defaults to `3000`). - Then specify the Postgres vars: `DL_PG_HOST`, `DL_PG_PORT`, `DL_PG_USER`, `DL_PG_PASSWORD` and `DL_PG_NAME`. - **Volumes**: - Mount a volume to `/var/lib/postgresql/data` to persist your Postgres data - **Crons** - `/api/domain-updater` - Execute this daily, to keep domain data up-to-date and trigger notifications - `/api/domain-monitor` - Execute this every 15 minutes, to monitor website uptime and performance - `/api/cleanup-monitor-data` - Execute this weekly, to aggregate old monitoring data - **Example**: - Putting it all together, you can use our [`docker-compose.yml`](https://github.com/Lissy93/domain-locker/blob/main/docker-compose.yml) file. - For more details, view the [Self-Hosting Docs](https://domain-locker.com/about/self-hosting) <details> <summary>Docker Diagram</summary> ```mermaid flowchart TB subgraph Volume Mounts direction TB Vpostgresdata([📦 postgres_data]) x-. /var/lib/postgresql/data .-x postgres[(🐘 PostgreSQL DB)] Vdbschemasql{{📄 ./db/schema.sql}} -. Mounted on Init .-> postgres end subgraph Network direction TB domainlockernetwork[/🌐 domain_locker_network/] end postgres -.- domainlockernetwork subgraph app[⚙️ App Container] SSR[HTTP Server] CLIENT[Client App] API[API Endpoints] SSR --> CLIENT SSR --> API end app -.- domainlockernetwork ``` </details> </details> ### Option 3: Unofficial Apps - [![ArtifactHub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/domain-locker&color=40b0c2&labelColor=398c9a)](https://artifacthub.io/packages/helm/domain-locker/domain-locker) - [![DockerHub](https://img.shields.io/docker/pulls/lissy93/domain-locker.svg?logo=docker&label=DockerHub&color=256bd7&labelColor=124ec9&logoColor=ffffff)](https://hub.docker.com/r/lissy93/domain-locker) - [![Umbrel](https://img.shields.io/badge/Umbrel-domain_locker-7472fc?style=flat&logo=umbrel&labelColor=5351fb)](https://apps.umbrel.com/app/domain-locker) - [![Supabase](https://img.shields.io/badge/Supabase-domain_locker-3FCF8E?style=flat&logo=supabase&labelColor=39ad79&logoColor=ffffff)](https://github.com/Lissy93/dl-sb-iac) - [![Proxmox](https://img.shields.io/badge/Proxmox-domain_locker-e57000?style=flat&logo=proxmox&labelColor=cf6806&logoColor=ffffff)](https://community-scripts.github.io/ProxmoxVE/scripts?id=domain-locker) - [![TrueNAS](https://img.shields.io/badge/TrueNAS-domain_locker-71BF44?style=flat&logo=truenas&labelColor=0095d5&logoColor=ffffff)](https://apps.truenas.com/catalog/domain-locker/) - [![EasyPanel](https://img.shields.io/badge/EasyPanel-domain_locker-15b7b1?style=flat&logo=qlty&labelColor=06976c&logoColor=ffffff)](https://domain-locker.com/about/self-hosting/deploying-on-easypanel-io) _(Pending)_ - [![Unraid](https://img.shields.io/badge/Unraid-domain_locker-FF754B?style=flat&logo=unraid&labelColor=F15A2C&logoColor=ffffff)](https://domain-locker.com/about/self-hosting/deploying-on-unraid) _(Planned)_ --- ## Developing #### Project Setup ```bash git clone [email protected]:Lissy93/domain-locker.git # Get the code cd domain-locker # Navigate into directory npm install --legacy-peer-deps # Install dependencies cp .env.example .env # Set environmental variables npm run dev # Start the dev server ``` - **Prerequisites** - You'll need Git and Node installed on your system. - **Configuring** - The example `.env.sample` file includes the public creds for our Supabase dev instance - To use alternate db, see the [Database](#database) section below to configure with Postgres - **Deploying** - You can build with code with `npm run build`, then run with `npm start` - Or, with Docker building the container with `docker build -t domain-locker .` - Don't use the dev Supabase instance in prod, as it's frequently wiped --- ## App Architecture #### Tech Stack Domain Locker is made up of an app, database and some API endpoints. - **The app** is built with Angular, using Analog+Nitro with PrimeNg components, and Tailwind for styling - **The server** is a series of Deno endpoints with Typescript functions - **The database** can be either Postgres or Supabase While the self-hosted instance is intended to be deployed stand-alone, the managed version however depends on a few additional third-party services, which you can see below, [the docs of which are here](https://domain-locker.com/about/developing/third-party-docs). <details> <summary>Why</summary> Why Angular? As some sort of sick joke to future me, who then needs to maintain this. </details> <p align="center"> <img width="800" src="/.github/screenshots/architecture.png" /> <br> <span>You can view docs for the technologies and services used <a href="https://domain-locker.com/about/developing/third-party-docs">here</a></span> </p> #### Architecture The architecture is pretty simple. We have an app (consisting of a frontend and API endpoints), where the user can read and write to the database (through adapters). Then a cron service will periodically call API endpoints to keep domain data up-to-date, track changes, monitor health, and trigger notifications on certain changes (according to user preference) or before an upcoming expiration. ```mermaid graph TD; subgraph User Interactions User[👤 User] -->|Enter domain| WebApp[🌐 Frontend]; WebApp -->|Send API request| API[⚙️ Nitro API]; API -->|Auth Check| Auth[🔐 Auth Service]; API -->|Store domain info| Database[🗄️ PostgreSQL / Supabase]; end subgraph Automated Cron Jobs CronService[⏳ Cron Service] -->|Trigger Updates| EdgeFunctions[⚡ Edge Functions]; EdgeFunctions -->|Fetch WHOIS, DNS, SSL| ExternalAPIs[🌎 Analysis Services]; EdgeFunctions -->|Store Data| Database; CronService -->|Monitor Uptime| WebsiteMonitor[📡 Uptime Monitor]; WebsiteMonitor -->|Store Metrics| Database; CronService -->|Check Expirations| ExpiryChecker[📆 Expiration Check]; ExpiryChecker -->|Update Status| Database; CronService -->|Send Notifications| NotificationService[🔔 Notification System]; NotificationService -->|Email| Resend[📧 Resend]; NotificationService -->|SMS| Twilio[📱 Twilio]; end Database -->|Serve Data| WebApp; ``` #### Database A database is needed to store all your domains and associated info. Domain Locker supports both Supabase and standard Postgres for storing data. The db used will depend on which env vars are set. - **Supabase**: Follow the Supabase [self-hosting docs](https://supabase.com/docs/guides/self-hosting), then use [dl-sb-iac](https://github.com/lissy93/dl-sb-iac) to import the schema and configure auth, edge functions, emails, etc. - Then set: `SUPABASE_URL` and `SUPABASE_ANON_KEY` environmental variables - **Postgres**: Deploy a Postgres instance, then apply the [`schema.sql`](https://github.com/Lissy93/domain-locker/blob/main/db/schema.sql) - If DB already exists: `psql -h $DL_PG_HOST -U $DL_PG_USER -d $DL_PG_NAME -f ./db/schema.sql` - If creating from scratch: Use [`setup-postgres.sh`](https://github.com/Lissy93/domain-locker/blob/main/db/setup-postgres.sh) (requires superuser access) - Then set: `DL_PG_HOST`, `DL_PG_PORT`, `DL_PG_USER`, `DL_PG_PASSWORD`, `DL_PG_NAME` ```mermaid classDiagram class users { uuid id text email timestamp created_at timestamp updated_at } class domains { uuid id uuid user_id text domain_name date expiry_date text notes timestamp created_at timestamp updated_at uuid registrar_id timestamp registration_date timestamp updated_date } class registrars { uuid id text name text url uuid user_id } class tags { uuid id text name text color text description text icon uuid user_id } class domain_tags { uuid domain_id uuid tag_id } class notifications { uuid id uuid user_id uuid domain_id text change_type text message boolean sent boolean read timestamp created_at } class billing { uuid id uuid user_id text current_plan timestamp next_payment_due text billing_method timestamp created_at timestamp updated_at jsonb meta } class dns_records { uuid id uuid domain_id text record_type text record_value timestamp created_at timestamp updated_at } class domain_costings { uuid id uuid domain_id numeric purchase_price numeric current_value numeric renewal_cost boolean auto_renew timestamp created_at timestamp updated_at } class domain_hosts { uuid domain_id uuid host_id } class domain_links { uuid id uuid domain_id text link_name text link_url timestamp created_at timestamp updated_at text link_description } class domain_statuses { uuid id uuid domain_id text status_code timestamp created_at } class domain_updates { uuid id uuid domain_id uuid user_id text change text change_type text old_value text new_value timestamp date } class uptime { uuid id uuid domain_id timestamp checked_at boolean is_up integer response_code numeric response_time_ms numeric dns_lookup_time_ms numeric ssl_handshake_time_ms timestamp created_at } class ssl_certificates { uuid id uuid domain_id text issuer text issuer_country text subject date valid_from date valid_to text fingerprint integer key_size text signature_algorithm timestamp created_at timestamp updated_at } class whois_info { uuid id uuid domain_id text country text state text name text organization text street text city text postal_code } class user_info { uuid id uuid user_id jsonb notification_channels timestamp created_at timestamp updated_at text current_plan } class hosts { uuid id inet ip numeric lat numeric lon text isp text org text as_number text city text region text country uuid user_id } class ip_addresses { uuid id uuid domain_id inet ip_address boolean is_ipv6 timestamp created_at timestamp updated_at } class notification_preferences { uuid id uuid domain_id text notification_type boolean is_enabled timestamp created_at timestamp updated_at } class sub_domains { uuid id uuid domain_id text name timestamp created_at timestamp updated_at jsonb sd_info } users --> domains : user_id registrars --> domains : registrar_id users --> registrars : user_id users --> tags : user_id domains --> domain_tags : domain_id tags --> domain_tags : tag_id users --> notifications : user_id domains --> notifications : domain_id users --> billing : user_id domains --> dns_records : domain_id domains --> domain_costings : domain_id domains --> domain_hosts : domain_id hosts --> domain_hosts : host_id domains --> domain_links : domain_id domains --> domain_statuses : domain_id domains --> domain_updates : domain_id users --> domain_updates : user_id domains --> uptime : domain_id domains --> ssl_certificates : domain_id domains --> whois_info : domain_id users --> user_info : user_id users --> hosts : user_id domains --> ip_addresses : domain_id domains --> notification_preferences : domain_id domains --> sub_domains : domain_id ``` <p align="center"><sub>You can download the schema from <a href="https://github.com/Lissy93/domain-locker/blob/main/db/schema.sql"<code>db/schema.sql</code></a></sub></p> --- ### Contributing Contributions, of any kind are always welcome, and very much appreciated! 💗 If you're new to Git, the general flow of contributing, is as follows: - Fork the repo, by [clicking here](https://github.com/lissy93/domain-locker/fork) - Clone your fork (with `git clone [email protected]:[your_username]/domain-locker.git`) - Follow the [Project Setup](#project-setup) above, to get the project running in development mode - Implement your awesome new feature or amazing bug fix... - Checkout a branch, with `git checkout -b feature-branch`, then `git add` your changes and `git commit` using conventional commits, before `git push`ing to your branch - Head back to GitHub, and you can then open up a PR against our `main` branch. Don't forget to include what you changed, why and link to any associated issues. - We'll then review, feedback, and merge, and once released your changes will go live to prod, as well as be available in the latest Docker image. <details> <summary>Git Branch Example</summary> ```mermaid %%{init: {"theme": "default"}}%% gitGraph commit id: "Initial commit" branch trunk commit id: "Feature A" commit id: "Feature B" commit id: "v1.0.0 (Tag)" branch demo checkout main commit id: "Feature C" commit id: "v1.1.0 (Tag)" checkout demo merge main id: "Merge main into demo" checkout main commit id: "Feature D" commit id: "v1.2.0 (Tag)" checkout demo merge main id: "Merge main into demo (v1.2.0)" checkout main branch feature-branch-1 commit id: "Contributor Feature 1" checkout main merge feature-branch-1 id: "Merge contributor feature 1" commit id: "v1.3.0 (Tag)" checkout demo merge main id: "Merge main into demo (v1.3.0)" checkout main branch feature-branch-2 commit id: "Contributor Feature 2" checkout main merge feature-branch-2 id: "Merge contributor feature 2" commit id: "v1.4.0 (Tag)" checkout demo merge main id: "Merge main into demo (v1.4.0)" ``` </details> --- ## Attributions ##### Contributors ![contributors](https://readme-contribs.as93.net/contributors/lissy93/domain-locker) ##### Sponsors ![sponsors](https://readme-contribs.as93.net/sponsors/lissy93) --- ## License > _**[Lissy93/Domain-Locker](https://github.com/Lissy93/domain-locker)** is licensed under [MIT](https://github.com/Lissy93/domain-locker/blob/HEAD/LICENSE) © [Alicia Sykes](https://aliciasykes.com) 2025._<br> > <sup align="right">For information, see <a href="https://tldrlegal.com/license/mit-license">TLDR Legal > MIT</a></sup> <details> <summary>Expand License</summary> ``` The MIT License (MIT) Copyright (c) Alicia Sykes <[email protected]> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sub-license, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included install copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANT ABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` </details> <!-- License + Copyright --> <p align="center"> <i>© <a href="https://aliciasykes.com">Alicia Sykes</a> 2025</i><br> <i>Licensed under <a href="https://gist.github.com/Lissy93/143d2ee01ccc5c052a17">MIT</a></i><br> <a href="https://github.com/lissy93"><img src="https://i.ibb.co/4KtpYxb/octocat-clean-mini.png" /></a><br> <sup>Thanks for visiting :)</sup> </p> <!-- Dinosaurs are Awesome --> <!-- . - ~ ~ ~ ~ - . .. _ .-~ ~-. //| \ `..~ `. || | } } / \ \ (\ \\ \~^..' | } \ \`.-~ o / } | / \ (__ | / | / `. `- - ~ ~ -._| /_ - ~ ~ ~ ^| /- _ `. | / | / ~-. ~- _ |_____| |_____| ~ - . _ _~_-_ -->

File Managers DNS & Domain Tools
1.4K Github Stars