@themeerkat Is it possible to run one app instance across various domains? If so, let's bake alias domains into the package. I love using project-based domains for apps, but I don't have the volume to justify a dedicated HeCAPTe instance per project.
luckow
Posts
-
HeCAPTe -
Calendar doesn't show up in the app password dropdownIs it just my instance where the calendar (and contacts too) doesn't show up in the app password dropdown? My best guess is that it should be there.
-
Help & Feedback wanted: broken link checker needs (stress-)testing@msbt out of pages with 72de934b-49e0-461e-9625-499047eb8ad4

-
Help & Feedback wanted: broken link checker needs (stress-)testing@msbt text color white on background white in a form, isn't the best idea.

-
Tymeslot@ekevu123 the current https://raw.githubusercontent.com/Tymeslot/tymeslot/refs/heads/main/CloudronVersions.json is throwing a
Could not resolve CloudronVersions.json from URL -
Duplicate contacts: each merge triggers a full restart of the processAfter importing nearly 2,000 contacts, I wanted to clean up the duplicates. The app quickly found almost 150 matches. However, instead of a smooth process, every single merge triggers a complete search from scratch.
-
Invitation to an experiment: community creation of a NextGenPBX-Cloudron-AppI have worked in IT for almost 30 years. However, I never thought about becoming a developer. Since the arrival of AI agents - smart programs that can write code - it is now possible for me to create software. I no longer have the difficult task of explaining every feature to a human developer.
In my company, we have used AI for customers and projects for a long time. But I have never tried to create "AI-community-driven" software, which is a project where many people work together for free. So, this is not part of my professional life. It is just a hobby or an experiment for me.
Since Cloudron added apps like Contacts or Cubby to its catalog, replacing other long-standing community apps, I've been thinking about replacing apps like FreePBX or FusionPBX because they rely on telecommunications concepts instead of information technology (or in short: concepts from the 90s).
So I decided to develop the next generation of a telephone software, which relies on Asterisk and only provides telephony features for our IT use case. I call it Phone.
There is currently a working prototype that connects so-called "trunks" to "extensions" and supports SIP calls. The prototype can connect extensions directly via SIP and supports extensions to "real" phone numbers via trunks.
I've decided to use Pankow as the UI toolkit and the Cloudron base image as my foundation. On the infrastructure side, I'm using the Cloudron Forgejo app for the repo and the Cloudron Docker registry. So, it's not public at the moment.
I have no real clue about the next steps. I'm aware that for me it's an experiment/hobby and I have to earn my money elsewhere. But I'm totally interested in finding out if a community of self-hosters is capable of creating the NextGenPBX on self-hosted infrastructure without the overhead of "real" open-source communities. And yes: I've been part of many of them since 2006.

Ping me if you're interested in being part of this experiment.
-
Tymeslot@ekevu123 Great. The problem is fixed.
-
Tymeslot@ekevu123 Quick question: do you prefer to receive issues on https://github.com/tymeslot/tymeslot, or is it okay to post them in the Cloudron forum?
-
TymeslotUpdate to 0.99.34 - DB migration ERROR 23505 (unique_violation)
I have two instances of the app. The update went smoothly on one of them, but an error occurred on the other:
Mar 28 08:52:46 Running database migrations... Mar 28 08:52:48 {"message":"== Running 20260323000001 Tymeslot.Repo.Migrations.AddProviderAccountFieldsAndReplaceUniqueness.up/0 forward","time":"2026-03-28T07:52:48.089Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"alter table video_integrations","time":"2026-03-28T07:52:48.105Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"alter table calendar_integrations","time":"2026-03-28T07:52:48.107Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"execute \"UPDATE video_integrations\\nSET provider_account_id = custom_meeting_url\\nWHERE provider = 'custom' AND custom_meeting_url IS NOT NULL\\n\"","time":"2026-03-28T07:52:48.111Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"execute \"UPDATE video_integrations\\nSET provider_account_id = base_url\\nWHERE provider = 'mirotalk' AND base_url IS NOT NULL\\n\"","time":"2026-03-28T07:52:48.113Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"drop index if exists one_active_integration_per_user_provider","time":"2026-03-28T07:52:48.114Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"create index unique_active_video_account_per_user","time":"2026-03-28T07:52:48.118Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"create index unique_active_calendar_account_per_user","time":"2026-03-28T07:52:48.122Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"create index unique_active_video_null_account_per_user","time":"2026-03-28T07:52:48.124Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 {"message":"create index unique_active_calendar_null_account_per_user","time":"2026-03-28T07:52:48.126Z","metadata":{"line":363,"file":"lib/ecto/migration/runner.ex","application":"ecto_sql"},"severity":"info"} Mar 28 08:52:48 ** (Postgrex.Error) ERROR 23505 (unique_violation) could not create unique index "unique_active_calendar_null_account_per_user" Mar 28 08:52:48 2026-03-28T08:52:48+01:00 Mar 28 08:52:48 table: calendar_integrations Mar 28 08:52:48 constraint: unique_active_calendar_null_account_per_user Mar 28 08:52:48 2026-03-28T08:52:48+01:00 Mar 28 08:52:48 Key (user_id, provider)=(1, caldav) is duplicated. Mar 28 08:52:48 (ecto_sql 3.13.5) lib/ecto/adapters/sql.ex:1113: Ecto.Adapters.SQL.raise_sql_call_error/1 Mar 28 08:52:48 (elixir 1.19.5) lib/enum.ex:1688: Enum."-map/2-lists^map/1-1-"/2 Mar 28 08:52:48 (ecto_sql 3.13.5) lib/ecto/adapters/sql.ex:1234: Ecto.Adapters.SQL.execute_ddl/4 Mar 28 08:52:48 (ecto_sql 3.13.5) lib/ecto/migration/runner.ex:348: Ecto.Migration.Runner.log_and_execute_ddl/3 Mar 28 08:52:48 (elixir 1.19.5) lib/enum.ex:1688: Enum."-map/2-lists^map/1-1-"/2 Mar 28 08:52:48 (elixir 1.19.5) lib/enum.ex:1688: Enum."-map/2-lists^map/1-1-"/2 Mar 28 08:52:57 => Healthcheck error: AbortError: The operation was aborted -
Cubby search improvementSearching for
Cloudshould return files with Cloudron in the title, rather than requiring an exact match for the full word. -
Tymeslot@ekevu123 But hey, yay! It's working now. Thanks for all your hard work.
-
Tymeslot@ekevu123 There's no update available for an existing app. I was forced to uninstall and reinstall to grab the new package. Not exactly the best experience.

https://docs.cloudron.io/packaging/publishing#update-a-version -
Tymeslotoh. there is also a wss error in the browser console:
app-54s24yx49eq34bc1β¦3ba451ef.js?vsn=d:2 WebSocket connection to 'wss://tymeslot.example.org/live/websocket?_csrf_token=CRAZY-TOKENβ¦js%3Fvsn%3Dd&_mounts=0&_mount_attempts=0&_live_referer=undefined&vsn=2.0.0' failed: transportConnect @ app-54s24yx49eq34bc1β¦3ba451ef.js?vsn=d:2 -
Tymeslot@ekevu123 package version 0.99.31 throws
OpenID Error redirect_uri did not match any of the client's registered redirect_urisThe redirect_uri shows
localhostinstead of the valid domain.&redirect_uri=https%3A%2F%2Flocalhost%2Fauth%2Foauth%2Fcallback&response_type=code&scope=openid+email+profile&state= -
Dify.ai, a self-hosted prompt-management tool@timconsidine Yes. Great. The download and installation went smoothly.
-
Cloning the app cloned the whole environment@nebulon Shame on me. A clone of FreeScout generates an env file with unique database credentials and uses the clone URL as the domain. No idea what happened yesterday. Maybe I had the same environment open twice or it was just computer voodoo.
FreeScout add-ons added their endpoints and serial numbers to the env file, which was copied into the clone. But that's what I expected.
-
Cloning the app cloned the whole environment@nebulon I'll look into it.
-
Cloning the app cloned the whole environment@ccfu Exactly that. We should use the environment variables for the database and domain
CLOUDRON_MYSQL_USERNAME=... instead of "hard-coded" strings. Cloning an app with identical credentials changes the database on the original instead of the clone. It looks like the FreeScout app package isn't using the variables. -
FacilMap@timconsidine Woohoo. It looks like it's working. Route is new.
