On the other side - not standalone - people often use Home Assistant for this, you can configure the dashboard on a different device, write custom widgets, it’s interactive, etc.
Someone made this, which is mindblowing!
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
No spam posting.
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
No trolling.
Resources:
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
On the other side - not standalone - people often use Home Assistant for this, you can configure the dashboard on a different device, write custom widgets, it’s interactive, etc.
Someone made this, which is mindblowing!
In a similar vein, I've also seen Nextcloud used for this purpose.
I just installed homepage https://gethomepage.dev
Haven't looked into actually extending it with custom widgets since I'd also like bus times.
I'm planning in having it in an unused tablet I have around.
This looks promising, thanks!
Made a post showing my homepage on Lemmy a couple weeks ago! https://lemmy.world/pictrs/image/f9a05589-f82d-4771-a1b3-80a351235c92.png
The first thing that springs to mind is something like a "magic mirror". I haven't delved into it a ton, but I'm fairly certain that it would be able to hit most of your criteria.
That being said, I'd think it could be a decent enough starting point to at least find other things in the same vein.
Yes you're right, what I'm thinking of is basically a magic mirror without the mirror. Thanks for the link, I will check that out!
I use Flame Dashboard for something similar to this. It uses a simple sqllite database, so i just whipped together a few python scripts that gather information such as my to do list, calendar, gir repos, etc and update the database table it uses.
I just set up flame and am liking it so far. Care to share your scripts?
Keep in mind they are hacked together and were not meant for mass consumption. Here is an example of one of the scripts that contacts the gitea api and inserts the most recent 10 issues into Flames database with a specific category.
`import sqlite3 from datetime import datetime import requests import re import json from datetime import datetime, timezone
def insert_bookmark(name, url, category_id, order_id): conn = sqlite3.connect('/app/db.sqlite') cursor = conn.cursor()
cursor.execute("SELECT MAX(id) FROM bookmarks")
result = cursor.fetchone()
max_id = result[0] if result[0] else 0
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f %z')
values = (name, url, category_id, "", current_time, current_time, 0, order_id)
cursor.execute("INSERT INTO bookmarks (name, url, categoryId, icon, createdAt, updatedAt, isPublic, orderId) VALUES (?, ?, ?, ?, ?, ?, ?, ?);", values)
max_id += 1
conn.commit()
conn.close()
return max_id
def delete_bookmark(category_id): conn = sqlite3.connect('/app/db.sqlite') cursor = conn.cursor() cursor.execute("DELETE FROM bookmarks WHERE categoryId = ?", (category_id,)) # Commit the changes and close the connection conn.commit() conn.close()
def get_recently_updated_issues(repo_urls, user_name, api_token): headers = { "Authorization": f"token {api_token}", "Content-Type": "application/json" }
all_issues = []
for repo_url, repo_name in repo_urls:
api_url = repo_url
# Query the Gitea API to get the issues
response = requests.get(api_url, headers=headers, params={"state": "all"})
response.raise_for_status()
issues = response.json()
sorted_issues = sorted(issues, key=lambda x: x["updated_at"], reverse=True)
all_issues.extend(sorted_issues[:5])
sorted_all_issues = sorted(all_issues, key=lambda x: x["updated_at"], reverse=True)
recent_issue_titles = []
recent_issue_links = []
recent_timestamps = []
for issue in sorted_all_issues[:10]:
title = issue["title"]
link = issue["html_url"]
timestamp = issue["updated_at"]
recent_issue_titles.append(title)
recent_issue_links.append(link)
recent_timestamps.append(timestamp)
return recent_issue_titles, recent_issue_links, recent_timestamps
repo_urls = [ ("https://gitea.example.com/api/v1/repos/user1/repo1/issues", "repo1"), ("https://gitea.example.com/api/v1/repos/user1/repo2/issues", "repo2") ] user_name = "user1" api_token = "example token"
delete_bookmark(8) order_id = 1
recent_issue_titles, recent_issue_links, recent_timestamps = get_recently_updated_issues(repo_urls, user_name, api_token)
for title, link, timestamp in zip(recent_issue_titles, recent_issue_links, recent_timestamps): print("Issue Title:", title) print("Issue Link:", link) print("Last Updated:", timestamp) print() bookmark_id = insert_bookmark(title, link, 8, order_id) order_id += 1`
I use Heimdall. It is basic and simple to setup. I tried Organizr but it was more customization than I was looking for.
+1 for Heimdall, but I don't think it does widgets. It's more like a Intranet homepage.
If you want to skip the web browser + server part (well, sort of), you could also build your dashboard as an electron or nwjs app. That way you can easily make it go fullscreen on its own and it doesn't come with most browser UI around your page. It's still running essentially Chrome, but it has some advantages if you need to interact with system things, run shell commands at the press of a button, etc.
Organizr might be the closest thing you're looking for
Hey, just wanted to share this one so you have more options. https://github.com/awesome-selfhosted/awesome-selfhosted#personal-dashboards