There's been talk of finding a real Calendly alternative here, and it looks like Calendso (Github, site) might be it! It only supports Google Calendar at the time of writing, but the homepage seems to imply they're working on more integrations. Worth keeping an eye on.
thetomester13
@thetomester13
Best posts made by thetomester13
-
Cal.com (was Calendso) - Calendly Alternative
-
Focalboard
Focalpoint is 'an open source, self-hosted alternative to Trello, Notion, and Asana.' I'm hopeful with the 'alternative to Notion' part, but haven't played around with it myself so not sure how fully featured it is. That being said, the project has lots of stars on GH and looks to be plenty active.
-
Kill The Newsletter
kill the newsletter (github) let's users create a unique email address, register for a newsletter with it, and instead of receiving an email with the newsletter, it'll add it to an RSS feed that it also provides for you.
I feel like this would package well alongside a TTRSS or FreshRSS instance.
-
Cloudron Non-App Store Packaged Apps
I recently realized that there are quite a few apps that have been packaged by gracious developers here that aren't on the App Store for one reason or another. I started a repo to keep track of them hoping we can compile the whole lot of them!
A copy of the list is pinned here:
-
Homepage - A simple, standalone, self-hosted PHP page that is your window to your server and the web. (Source Code)
- Tests
- License
-
Standard Notes (Sync Server) - The Standard Notes syncing server (Source Code)
- Tests
- License
-
Standard Notes Web - A free, open-source, and completely encrypted notes app. (Source Code)
- Tests
- License
- NOTES: For some reason, it seems that this app doesn't backup well and often errors out in the process with a MySQL error ¯_(ツ)_/¯ I just disabled the backing up of this app since the notes themselves are backed up in the Sync Server app.
-
webhooks - webhook is a lightweight incoming webhook server to run shell commands (Source Code)
- Tests
- License
-
Zola - Server to serve up statically generated Zola sites
- Tests
- License
-
nginx app - nginx server, akin to Cloudron's LAMP
- Tests
- License
-
Outline - An open, extensible, wiki for your team built using React and Node.js.
- Tests
- License
Open to suggestions about formatting or any other pieces of data we may want to keep track of. Also, feel free to comment here about any more Apps that are packaged and they can be added to the list and repo!
-
-
Calibre (& Calibre web?)
Calibre is a popular self-hosted ebook manager. Github page.
Now, Calibre is a desktop application, not a web application. But there is also Calibre-web, which is a web front end for the Calibre backend.
Should Calibre and Calibre-web be hosted through a single Cloudron application, or 2 separate applications?
Either way, I think these 2 applications could be very powerful on Cloudron.
-
Guide: Self Hosted Notifications
Hello fellow Cloudron-users!
With the year about to close, I was very happy to recently be able to check off an important item for me on my self hosted checklist, 'Self hosted notifications'. I wanted to share my setup with the community for anyone else that is thinking of doing something similar.
Goals
- Self hosted (on Cloudron)
- iOS app
- Easy webhook trigger
- Open source
Why?
I want to be able to receive push notifications on my phone (iOS, important to distinguish, will touch on this later), automatically or manually with ease.
Setup
I use Matrix (server) and Element (client) for the main messages system. n8n is used to setup easy to use webhooks so I can trigger a notification from most places.
Alternatives And Why I Didn't Like These Solutions
-
Slack: I used to use Slack for notifications. They have a really solid mobile application, and easy to use webhooks, crucial for automating notifications. However, Slack is closed source and proprietary, a real deal breaker for what I'm trying to go for.
-
RocketChat: RocketChat could be used instead of Matrix. I went with Matrix because of its decentralized nature and because I already had it installed and don't have RocketChat on my Cloudron. I believe RocketChat could be used as an alternative solution. The mobile application works very well (have used it previously).
-
Gotify: Gotify has been packaged for Cloudron (unofficially) and I really wanted to use this since it's built for exactly this purpose. However, given Apple's tight grip on their hardware, Gotify doesn't have an iOS application since it requires agreeing to Apple's TOS and paying them to host an app on the App Store. Unfortunately, this was a dealbreaker for me.
- Gotify can also be used with an unofficial PushOver 'bridge' for iOS. But PushOver is closed source. Again, dealbreaker.
Guide
- Install Matrix and Element to your Cloudron.
- Install n8n to your Cloudron.
- Log in to Element using your main (LDAP) user, and create a new room that will be the place where all of your notification messages will go to, for example
#automated-messages
. In the room settings, be sure you set Notifications to 'All Messages'.
- We'll now need to create our bot user and invite it to the room created above.
- From your Cloudron dashboard, go to your Matrix application's File Manager and open the file /app/data/configs/homeserver.yaml.
- Set
enable_registration
totrue
. We'll come back and set this tofalse
later, but we need this to create our bot user. - Also set
enabled
andlocaldb_enabled
totrue
underpassword_config
. This is to ensure that newly registered users will be able to login. - Restart your Matrix application.
- Go to your Element application and register a new user. Give this 'user' (read: bot) a username that you'd want your bot to have. Keep the credentials in a secure place (probably your Cloudron's Bitwarden : ) even though you probably won't need to access this user very frequently at all.
- After the registration of the bot user, you should set
enable_registration
back tofalse
and save the config file. This way no external uninvited users can use your Matrix instance to register a new user. - Restart your Matrix application again.
- As your main user, now go to the room you created and invite your bot user.
- As your bot user, accept the invitation to the room.
- We can test your notifications proper now. Be sure you have the Element client installed on your phone and logged in as your primary user. Send a message from the bot account in the room. You should get a mobile notification! Now time to enable automation.
- As your bot user, go to your All Settings -> Help & About. Make note of your Access Token.
- If you have this token written down somewhere, you can now log out of the bot's Element account, we won't to be logged into it anymore.
- Let's create a workflow in n8n to be able to send messages with ease from our bot user! Go to n8n and create a new workflow.
- Copy the text below and paste it into your workflow.
{ "name": "Send Matrix Message", "nodes": [ { "parameters": {}, "name": "Start", "type": "n8n-nodes-base.start", "typeVersion": 1, "position": [ 240, 300 ] }, { "parameters": { "roomId": "!roomId:matrix_url.com", "text": "={{Object.keys($json[\"body\"]).length > 0 ? $json[\"body\"][\"msg\"] || JSON.stringify($json[\"body\"]) : $json[\"query\"][\"msg\"] || \"Notification triggered\"}}" }, "name": "Matrix", "type": "n8n-nodes-base.matrix", "typeVersion": 1, "position": [ 780, 120 ], "credentials": { "matrixApi": { "id": "11", "name": "Matrix Bot" } } }, { "parameters": { "httpMethod": "POST", "path": "matrix", "options": {} }, "name": "POST Webhook", "type": "n8n-nodes-base.webhook", "typeVersion": 1, "position": [ 240, 120 ], "webhookId": "5b81524e-74fb-4da2-9526-51eb20e4ccfb" }, { "parameters": { "path": "matrix", "options": {} }, "name": "GET Webhook", "type": "n8n-nodes-base.webhook", "typeVersion": 1, "position": [ 240, -40 ], "webhookId": "379725f7-f3ab-4c5e-a99b-334d70023295" }, { "parameters": { "conditions": { "boolean": [], "string": [ { "value1": "={{$json[\"query\"][\"x-matrix\"] || $json[\"headers\"][\"x-matrix\"]}}", "value2": "neo" } ] } }, "name": "IF GET", "type": "n8n-nodes-base.if", "typeVersion": 1, "position": [ 480, -40 ] }, { "parameters": { "conditions": { "boolean": [], "string": [ { "value1": "={{$json[\"headers\"][\"x-matrix\"]}}", "value2": "neo" } ] } }, "name": "IF POST", "type": "n8n-nodes-base.if", "typeVersion": 1, "position": [ 480, 120 ] } ], "connections": { "Start": { "main": [ [ { "node": "Matrix", "type": "main", "index": 0 } ] ] }, "POST Webhook": { "main": [ [ { "node": "IF POST", "type": "main", "index": 0 } ] ] }, "GET Webhook": { "main": [ [ { "node": "IF GET", "type": "main", "index": 0 } ] ] }, "IF GET": { "main": [ [ { "node": "Matrix", "type": "main", "index": 0 } ] ] }, "IF POST": { "main": [ [ { "node": "Matrix", "type": "main", "index": 0 } ] ] } }, "active": true, "settings": {}, "id": 10 }
- Be sure to create a new Credentials for Matrix using your bot's Access Token we copied from earlier and your Matrix URL, and set your workflow to use those credentials. Also be sure to update the Room ID in the workflow to the shared room created above.
- Save and Activate this workflow. This workflow enables both POST and GET requests that will send a message to your room from the bot user!
- As a precaution, we validate that the request contains a special header/parameter and only then will send the message. In this case, we want
x-matrix
to be set toneo
. If this is not present, the request will return a 200 response, but won't actually send a message/notification. - The text to send should be under the name
msg
. If nomsg
exists, we fallback to sending the text 'Notification triggered'.
- As a precaution, we validate that the request contains a special header/parameter and only then will send the message. In this case, we want
Example CURL commands to test this out from your Terminal:
- GET request with validator header:
curl "https://n8n.cloudron.url/webhook/matrix?msg=Test%20message" -H "x-matrix: neo"
- GET request with validator parameter:
curl "https://n8n.cloudron.url/webhook/matrix?msg=Test%20message&x-matrix=neo"
- Invalid GET request with no validator (returns 200 status but does not send notification):
curl "https://n8n.cloudron.url/webhook/matrix?msg=Test%20message
- POST request
curl -X POST https://n8n.cloudron.url/webhook/matrix -H 'x-matrix: neo' -H 'Content-Type: application/json' -d '{"msg": "Test message"}'
You can also simply visit a URL in your browser to send a test message: https://n8n.<cloudron_url>/webhook/matrix?msg=Test%20message&x-matrix=neo
You can now use automations to trigger a notification given the URL's and examples above!
Still Left To Figure Out
Since I want this URL to be as easy for me as possible to ping in the future, I'd like to be able to set up some sort of forwarding mechanims where
push.cloudron_url.com
goes ton8n.cloudron_url.com/webhook/matrix
. The tricky part is that the plain forwarding URL (push.cloudron_url.com) ideally would not need any path but it would forward to the path/webhook/matrix
on the actual URL. This solution would also need to forward query parameters, headers, etc with it to ensure the notification comes through properly. Open to suggestions on how to go about doing this! -
RE: Dashy
I've managed to do a preliminary packaging of Dashy! You can find the code here.
Few notes (taken from the README):
- Dashy needs to access to edit some files on the filesystem to update the actual dashboards. It frequently updates /public/conf.yml (as well as creating backups of conf.yml files whenever a change is made), and it rewrites the entire /dist directory after a configuration change is made. This resulted in me having to put the entire /dashy directory in /app/data. Not sure if this is the right way to go about it, but it works.
- I noticed that when using the Update Configuration => Edit Config option, one must first Apply Locally or Preview Changes before writing the changes to the config file works properly. I'm going to assume that this is the behavior of the app itself, and not a result of my packaging
- When Dashy does rebuild its files after a configuration change, it ends up taking up a lot of memory. I've set mine to 1.5GB and haven't had issues. If you're seeing issues when trying to rebuild after a config change, try giving the app more resources.
-
RE: App Packaging "Event"
Alright, I am setup using @jdaviescoates 's BBB instance for now. We're still on for tomorrow, Wednesday the 27th at 5pm EST for writing some tests! Hope to see some people there!
-
Potential Cloudron Theme/Dashboard
Hello all!
I've been developing/packaging what I think could be a new form of Cloudron apps, Themes (working title : ). The idea here is a simple Homepage that will display your installed Cloudron applications for easy access. You can see a working copy on my instance here! Be sure to hit space bar to toggle the menu.
Features include:
- Lightning fast loading - 97 Lighthouse Performance rating, all JS/CSS assets are local
- Toggle menu based on any key combination
- Background images from Unsplash or custom URL
- Quick link to Cloudron dashboard
- Use number keys to go directly to the first 9 apps listed when the menu is open
- Mobile friendly
- Caching of app images
- Security when it comes to your Cloudron API key and Unsplash ID
Note that this is NOT meant to replace the current Cloudron dashboard, but rather be a supplementary 'app browser'. When the menu is displayed in the Homepage App, there is a cog icon at the top right with the time stamp that will take you straight to your original Cloudron dashboard when you need full access to Backups, Logs, etc.
This app is based on the homepage-cloudron repo, which is based off of the homepage repo, both of which I am the author of. Happy to answer any questions! You can find the Cloudron packaged app here.
If this is interesting, I could work up some basic tests for this to eventually be included in the actual Cloudron App Store. Though it is important to note that for this to work properly, the setup requires creating a new Cloudron API key and updating the config.json file through the Terminal (not super user-friendly).
Thoughts/suggestions/notes welcome!
-
RE: Astral - Organize Your GitHub Stars With Ease
The author also just linked to the Cloudron App Store version in their README for a
1-Click install
!
Latest posts made by thetomester13
-
RE: Cloudron Non-App Store Packaged Apps
@matbrgz added to the post at the top!
-
RE: Move bridges to /app/data/bridges
@jaschaezra Didn't realize custom bridges were an option when I packaged this, TIL! I know the whitelist.txt file is user-editable, but agreed that it would be good to be able to use custom bridges here in the directory you specified.
-
Scratch Map
Hi all!
Came across a neat self-hosted Scratch Map app recently, and since it's just a pretty small Node app, was able to package it up pretty easily, grab it if you'd like! Source code here.
Fair warning, haven't stress tested it yet, use at your own risk.
Cheers.
-
RE: Dashy
@timconsidine I have not had a chance to look at and fix this just yet. Will be sure to update this thread when I do!
-
[For Hire] Custom Cloudron Dashboard
Hello all!
I've seen a few posts about people wanting to customize their Cloudron dashboard. I think the dashboard is built the way it is to support most of the users and provide a solid foundation for users to interact with their Cloudron instance.
The good news is that Cloudron provides an excellent API that should get us most of what we need for customization while still maintaining a convenient interface for you and your users. So I'm offering up my services to build out custom dashboards with functionality in the way you see fit for your Cloudron's users!
Feel free to direct message me here with your thoughts and we can take it from there!
-
RE: Making n8n extendable
@ajtatum I seem to be able to install 'community nodes' from my n8n hosted on Cloudron - this gives a whole lot of flexibility without having to adjust the package. Main thing is, yes, there does need to actually be a community node out there that does what you want it to do. Just a thought.
-
RE: Dashy
@girish thanks for the offer @girish ! I think I'm alright for now. Will try and get back to this soon when I have a free few hours to play around with it. This app isn't super high on the Cloudron priority list.
The comment at https://git.cloudron.io/thetomester13/dashy-app/-/blob/master/Dockerfile#L17 says "Move /dashy to /app/data so we can write to it, and symlink it to /app/code" . Why is that so?
If you see my comment from Feb 14th (I really should get a life sometimes : ),
Dashy needs to access to edit some files on the filesystem to update the actual dashboards. It frequently updates /public/conf.yml (as well as creating backups of conf.yml files whenever a change is made), and it rewrites the entire /dist directory after a configuration change is made. This resulted in me having to put the entire /dashy directory in /app/data. Not sure if this is the right way to go about it, but it works.
This is why I moved the entire folder. -
RE: Dashy
@timconsidine thanks for that! I'm seeing the same thing you are. Looks like this app isn't as done as I thought it was...
I'll go back to the drawing board on this and post back when I've made some progress!