Gestern habe ich WhatsApp installiert und meine Telefonnummer angegeben und nach wenigen Minuten wieder gelöscht, heute schon der 2. Werbeanruf.
Kleinanzeigen Kreis Göppingen
Die letzten Tage habe ich an einer Kleinanzeigenplatform für den Kreis Göppingen gearbeitet.
Sie wurde mit ent, gqlgen, mysql im Backend und react mit vite und relay, flowbite UI und tailwindcss im Frontend geschrieben. Als Authentifizierung nutzt sie Zitadel als OIDC IDP.
Man kann sie finden unter:
Kleinanzeigen Kreis Göppingen
Uncaught RangeError: date value is not finite in DateTimeFormat.format()
Playing with Flowbite React and their Datepicker component, I had data coming from the backend in this or similar form:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "data": { "posts": { "edges": [ { "node": { "id": "c57e4ea8-072e-4057-974f-bfb369504a57", "createdAt": "2024-10-24T12:21:20Z", "updatedAt": "2024-10-24T14:03:16Z", "title": "Jobangebot mit jemand ohne Namen", "body": "Dies ist ein Jobangebot von jemandem ohne Namen", "expires": true, "expireTime": "2024-10-31T23:00:00Z", "category": { "id": "df84950d-742b-4d07-9f11-04b8964bcb36", "title": "Jobangebote" }, "profile": { "id": "0ce6ee59-4ebf-42cf-9c3a-69cf5e826b0b", "sub": "288686157058342913", "name": "" } } } ] } } } |
aka
1 |
"expireTime": "2024-10-31T23:00:00Z", |
React is a bit of a cringy special child. Angular, no problemo. Vue, no problemo.
Anyhow.
I have to set defaultValues in a React-hook-form form, because React is special with controlled and uncontrolled components.
aka
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
type AdminPostEditFormValues = { title: string, body: string, expires: boolean, expireTime: Date, } const {control, handleSubmit, watch, formState: {errors}} = useForm<AdminPostEditFormValues>({ defaultValues: { title: data?.posts?.edges[0]?.node?.title, body: data?.posts?.edges[0]?.node?.body, expires: data?.posts?.edges[0]?.node?.expires, expireTime: dayjs(data?.posts?.edges[0]?.node?.expireTime).toDate() || dayjs().toDate(), } }) |
So, I’m using dayjs for my date/time stuff, and this line essentially means, parse the Date before assigning it to a form value (or create a new Date(), because React and controlled/uncontrolled forms is not a happy story).
1 |
expireTime: dayjs(data?.posts?.edges[0]?.node?.expireTime).toDate() || dayjs().toDate(), |
TL;DR: Parse the date value coming from the backend into a Date object. e.g.
1 |
Date.parse("2024-10-31T23:00:00Z") |
Letsencrypt wildcard subdomains
It’s not easy to find proper search results for this topic.
You have a domain and would like to have wildcard subdomains but are not a customer of the prominent cloud providers aka your domain reseller or DNS provider isn’t supported.
Prerequisite:
We already have a *.domain.tld DNS record pointing to our server with certbot installed.
The command is
1 |
certbot certonly --manual -d *.domain.tld |
You run this command, then you have to add a TXT record to your DNS zone.
Something like
1 |
_acme-challenge.domain.tld. |
as the key.
The trailing dot (.) is required.
And the value you receive from the command as well.
Then wait until it’s updated in the DNS, you can check if it was with
1 |
dig TXT _acme-challenge.domain.tld |
.
And then you just hit ENTER in the console and it should be completed.
I’ll now add a wildcard nginx configuration for ZITADEL, which is an web based identity management software.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
server { listen 80; listen [::]:80; server_name *.domain.tld; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name *.domain.tld; access_log /var/log/nginx/domain.tld.access.log; error_log /var/log/nginx/domain.tld.error.log; ssl_certificate /etc/letsencrypt/live/domain.tld-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.tld-0001/privkey.pem; add_header Strict-Transport-Security "max-age=63072000" always; root /var/www/domain.tld; location / { grpc_pass grpc://localhost:12345; grpc_set_header Host $host:$server_port; } } |
20 Jahre icod.de
Am 07.10.2004, vor 20 Jahren wurde icod.de gegründet bzw. Das Gewerbe angemeldet.
Ein Bekannter brauchte ein Webseitendesign, und wollte natürlich eine anständige Rechnung haben.
Also wurde ein Gewerbe angemeldet und besteht seither.
20 Jahre Webentwicklung, Linux Server Administration.
Leider gibt es nichts zu feiern, da es seit 2020 so gut wie keine Einnahmen mehr gibt.
Anfang 2023 musste ich sogar Bürgergeld und Wohngeld beantragen, für mich ein persönlicher Tiefpunkt und Niederlage.
Ich suche Aufträge oder eine Remote Feststellung, oder eine Stelle im Umkreis von 50km, die mit dem ÖPNV gut erreichbar ist.