Compare commits

...

5 Commits

Author SHA1 Message Date
0efe86fe45 feat: small update on AI usage
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-11-17 18:07:49 +01:00
51e0832452 fix: update lastmod 2025-11-09 09:57:35 +01:00
317da41252 fix: add alt text 2025-11-09 09:56:47 +01:00
ba8964fc20 feat: pin new theme version 2025-11-09 09:38:41 +01:00
3ac2072be1 ci: Specify vars in readme 2025-11-09 09:36:03 +01:00
4 changed files with 62 additions and 30 deletions

View File

@@ -4,8 +4,19 @@
## Theme ## Theme
The blog uses the [hugo-nederburg-theme](https://github.com/moan0s/hugo-nederburg-theme) which was created by [appernetic](https://www.patreon.com/appernetic) but is no longer maintained, therefore I use my own fork. The blog uses the [hugo-nederburg-theme](https://github.com/moan0s/hugo-nederburg-theme) which was created
by [appernetic](https://www.patreon.com/appernetic) but is no longer maintained, therefore I use my own fork.
## CI ## CI
The blog is deployed using my own [Woodpecker CI](woodpecker.hyteck.de). There is a seperate SSH key to the uberspace. The blog is deployed using my own [Woodpecker CI](woodpecker.hyteck.de). There is a seperate SSH key to the uberspace.
## Forgejo runner
| Secret | Example | Description |
|-----------------|---------------------------------------|----------------------------------------------------------|
| DEPLOY_HOST | example.org | Target host to deploy to |
| DEPLOY_USER | ci-user | SSH username |
| DEPLOY_PATH | /static_sites/static-hyteck/hyteck.de | Pather where to deploy to |
| SSH_PRIVATE_KEY | | Private key matching one in the servers authorized_keys |
| HUGO_VERSION | v0.147.8 | (Optional) Specify the hugo version |

View File

@@ -1,7 +1,7 @@
--- ---
title: "How to manually check hundreds of animal shelters - every 14 days" title: "How to manually check hundreds of animal shelters - every 14 days"
date: 2025-11-08T12:05:10+02:00 date: 2025-11-08T12:05:10+02:00
lastmod: 2025-11-08T21:05:10+02:00 lastmod: 2025-11-09T21:05:10+02:00
draft: false draft: false
image: "uploads/checking-shelters.png" image: "uploads/checking-shelters.png"
categories: [ 'English' ] categories: [ 'English' ]
@@ -57,7 +57,7 @@ I set up a special page to make it most efficient to check shelters. It's struct
* **Last checked** It sometimes happens that I accidentally set a organization to "Checked" by accident. I added this * **Last checked** It sometimes happens that I accidentally set a organization to "Checked" by accident. I added this
section to make it easier to revert that. section to make it easier to revert that.
![](screenshot-checking-site.png) ![A screenshot of the Notfellchen-Website showing the mentiond sections. Each rescue organization is listed with their website, species specific urls and shows the internal comment. There are three color coded buttons: "Organization checked", "Active Communication" and "Exclude from check"](screenshot-checking-site.png)
## Shortcuts ## Shortcuts
@@ -81,7 +81,7 @@ After implementing all this, how long does it take now to check all organization
This excludes the time, it takes to add animals or contact rescue organizations. One of these actions must be taken This excludes the time, it takes to add animals or contact rescue organizations. One of these actions must be taken
whenever an eligible animal is found on a website. Here you can see how this interrupts the process: whenever an eligible animal is found on a website. Here you can see how this interrupts the process:
![](progress.png) ![A diagramm showing time on the x axis and number of shelters checked on the y axis. In the period from 11am to 12:15pm there are over 200 shelters checked at a relativly constanct rate. The checking is interrupted two times by adding animals and three times by contacting](progress.png)
And here is the breakdown of time per activity. A big caveat here is, that I did not follow up on previous conversations And here is the breakdown of time per activity. A big caveat here is, that I did not follow up on previous conversations
here, therefore the contacting number is likely an underestimation. here, therefore the contacting number is likely an underestimation.

View File

@@ -1,22 +1,25 @@
--- ---
title: "Trying Twenty: How does an Open Source CRM work?" title: "Trying Twenty: How does an Open Source CRM work?"
date: 2025-08-03T06:10:10+02:00 date: 2025-08-03T06:10:10+02:00
lastmod: 2025-08-03T12:10:10+02:00 lastmod: 2025-11-17T12:10:10+02:00
draft: false draft: false
image: "uploads/twenty.png" image: "uploads/twenty.png"
categories: ['English'] categories: [ 'English' ]
tags: ['crm', 'twenty', 'salesforce', 'django', 'self-hosting'] tags: [ 'crm', 'twenty', 'salesforce', 'django', 'self-hosting' ]
--- ---
I spend my day working with Salesforce, a very, very feature-rich CRM that you pay big money to use. I spend my day working with Salesforce, a very, very feature-rich CRM that you pay big money to use.
Salesforce is the opposite of OpenSource and the many features are expensive. Salesforce business model is based on this and on the lock-in effect. Salesforce is the opposite of OpenSource and the many features are expensive. Salesforce business model is based on this
and on the lock-in effect.
If your company invested in implementing Salesforce, they'll likely pay a lot to keep it. If your company invested in implementing Salesforce, they'll likely pay a lot to keep it.
So what does an alternative look like? Let's have a look at [Twenty](https://twenty.com), an OpenSource CRM that recently reached the magic 1.0 version. So what does an alternative look like? Let's have a look at [Twenty](https://twenty.com), an OpenSource CRM that
recently reached the magic 1.0 version.
# Getting started # Getting started
There are two options of getting started: Register at [app.twenty.com](https://app.twenty.com) and start right away on the devs instance or self-host Twenty on your own server. There are two options of getting started: Register at [app.twenty.com](https://app.twenty.com) and start right away on
the devs instance or self-host Twenty on your own server.
I did the ladder, so let's discuss how that. The basic steps I took were I did the ladder, so let's discuss how that. The basic steps I took were
* point twenty.hyteck.de to a server * point twenty.hyteck.de to a server
@@ -36,7 +39,8 @@ Twenty offers an initial datamodel that you should be familiar from other CRMs.
* **Opportunities** The classic opportunity with customizable stages * **Opportunities** The classic opportunity with customizable stages
* **Notes** They can be attached to any of the objects above * **Notes** They can be attached to any of the objects above
* **Tasks** Items to work on * **Tasks** Items to work on
* **Workflows** Automations similar to Salesforce flows. E.g. you can create a task every time an Opportunity is created. * **Workflows** Automations similar to Salesforce flows. E.g. you can create a task every time an Opportunity is
created.
The basic datamodel can be extended in the GUI. Here is how my "Company" model looks like The basic datamodel can be extended in the GUI. Here is how my "Company" model looks like
@@ -54,23 +58,29 @@ updated or deleted. In addition, they can be started manually, on a schedule and
![A workflow in twenty. After the Trigger "Organization" created there is a new task generated, a webhook send and a form used.](workflow1.png) ![A workflow in twenty. After the Trigger "Organization" created there is a new task generated, a webhook send and a form used.](workflow1.png)
You can then add nodes that trigger actions. Available right now are You can then add nodes that trigger actions. Available right now are
* **Creating, updating or deleting a record** * **Creating, updating or deleting a record**
* **Searching records** * **Searching records**
* **Sending E-Mails** This is the only option to trigger e-mails so far * **Sending E-Mails** This is the only option to trigger e-mails so far
* **Code** Serverless Javascript functions * **Code** Serverless Javascript functions
* **Form** The form will pop up on the user's screen when the workflow is launched from a manual trigger. For other types of triggers, it will be displayed in the Workflow run record page. * **Form** The form will pop up on the user's screen when the workflow is launched from a manual trigger. For other
types of triggers, it will be displayed in the Workflow run record page.
* **HTTP request** Although possible via Code, this is a handy shortcut to trigger HTTP requests * **HTTP request** Although possible via Code, this is a handy shortcut to trigger HTTP requests
What is currently completely missing are Foreach-loops and [conditions](https://github.com/twentyhq/core-team-issues/issues/1265). I can not say "If Opportunity stage is updated to X do Y else, do Z". What is currently completely missing are Foreach-loops
and [conditions](https://github.com/twentyhq/core-team-issues/issues/1265). I can not say "If Opportunity stage is
updated to X do Y else, do Z".
Without this, Workflows are really limited in their power. Without this, Workflows are really limited in their power.
What already seems quite mature though is the code option. It allows to put in arbitrary code and output a result. What already seems quite mature though is the code option. It allows to put in arbitrary code and output a result.
![Screenshot of a javascript function in Twenty that adds two numbers together](serverless_function.png) ![Screenshot of a javascript function in Twenty that adds two numbers together](serverless_function.png)
I did not try a lot, but I assume most basic Javascript works. I successfully built an http request that send data to a server. I did not try a lot, but I assume most basic Javascript works. I successfully built an http request that send data to a
server.
If what you're doing is straightforward enough to not use loops and conditions or if oyu are okay with doing all of them in the Code node, you can do basically anything. If what you're doing is straightforward enough to not use loops and conditions or if you are okay with doing all of them
in the Code node, you can do basically anything.
## API ## API
@@ -141,10 +151,17 @@ The current business model is to charge for using the company's instance of Twen
enterprise features. SSO and support will cost you 19\$/user/month. enterprise features. SSO and support will cost you 19\$/user/month.
Selfhosting is free but SSO is locked behind an enterprise badge with seemingly no way to pay for activating it. Selfhosting is free but SSO is locked behind an enterprise badge with seemingly no way to pay for activating it.
I suspect that in the future more features will become "Enterprise only" even when self-hosting. All contributors must agree I suspect that in the future more features will become "Enterprise only" even when self-hosting. All contributors must
agree
to [a Contributor License Agreement (CLA)](https://github.com/twentyhq/twenty/blob/main/.github/CLA.md), therefore I to [a Contributor License Agreement (CLA)](https://github.com/twentyhq/twenty/blob/main/.github/CLA.md), therefore I
believe they could change the License in the future, including switching away from Open Source. believe they could change the License in the future, including switching away from Open Source.
# AI Usage
The repo contains a `.cursor` directory and `CLAUDE.md` so I assume the devs make (heavy?) use of LLM generated code.
The ethical and legal problems with this are for you to decide. I don't know what effect this has on code quality, for
now I'd say things are sometimes buggy (failed upgrades) and UX could be better tested (looking at the e-mail
integration) - if this is due to AI slop I don't know.
# Conclusion # Conclusion
@@ -152,18 +169,22 @@ Twenty is a really promising start of building a good CRM. The ease of customizi
using the API and a solid beginning to Flows allows users to get a lot of value from it already. using the API and a solid beginning to Flows allows users to get a lot of value from it already.
Flows need some more work to become as powerful as they should be and the E-Mail integration needs to get better. Flows need some more work to become as powerful as they should be and the E-Mail integration needs to get better.
Stating the obvious: This is not something that could ever replace Salesforce. But it doesn't have to! Stating the obvious: This is not something that could ever replace Salesforce. However, there are many organizations
There are many organizations that would benefit a lot from a CRM like Twenty, they simply don't need, can't handle or that would benefit a lot from a CRM like Twenty, they simply don't need, can't handle or don't want to pay for all the
don't want to pay for all the features other CRMs offer. features other CRMs like Salesforce offer.
If Twenty continues to focus on small to medium companies and the right mix of standard features vs. custom development options I see a bright future for it.
There are the usual problems of VC-backed OSS development, we shall see how it goes for them.
If Twenty continues to focus on small to medium companies and the right mix of standard features vs. custom development
options I see a path where it becomes a solid choice for these companies. On the other hand there are the usual problems
of VC-backed OSS development, and we shall see how it goes for them. Unless there is a strong userbase that credibly
threatens a hard fork, enshittification could start soon.
# Addendum: Important Features # Addendum: Important Features
Here is a short list of features I missed and their place on the roadmap if they have one Here is a short list of features I missed and their place on the roadmap if they have one
* **Compose & Send E-Mails** Planned [Q4 2025](https://github.com/orgs/twentyhq/projects/1?pane=issue&itemId=106097937&issue=twentyhq%7Ccore-team-issues%7C811) * **Compose & Send E-Mails**
* **Foreach loops in Workflows** [Q3 2025](https://github.com/orgs/twentyhq/projects/1/views/33?pane=issue&itemId=93150024&issue=twentyhq%7Ccore-team-issues%7C21) Planned [Q4 2025](https://github.com/orgs/twentyhq/projects/1?pane=issue&itemId=106097937&issue=twentyhq%7Ccore-team-issues%7C811)
* **Conditions in Flows** [Q4 2025](https://github.com/orgs/twentyhq/projects/1/views/33?pane=issue&itemId=121287765&issue=twentyhq%7Ccore-team-issues%7C1265) * **Foreach loops in Workflows
** [Q3 2025](https://github.com/orgs/twentyhq/projects/1/views/33?pane=issue&itemId=93150024&issue=twentyhq%7Ccore-team-issues%7C21)
* **Conditions in Flows
** [Q4 2025](https://github.com/orgs/twentyhq/projects/1/views/33?pane=issue&itemId=121287765&issue=twentyhq%7Ccore-team-issues%7C1265)