knuspermagier.de
Er bloggt noch? Krass!

Vibe-Featurecreep

In den letzten Tagen habe ich hauptsächlich einige Sachen in meine Tagebuch-App eingebaut und ich muss sagen, dass es natürlich zu einem gewissen Featurecreep einläd, wenn man einfach alles machen lassen kann, was einem einfällt.

Ich schrieb ja schon von dem Transkriptionsfeature für meine Voice Memos. Ich kann mein sinnloses Gestammel hochladen und daraus schnell Text-Einträge machen, juchu!

file://rmbmp5ckkdghan35
Besonders schön hat er das hier nicht gemacht.

Als nächstes baute ich einen Habit Tracker ein. Jahresanfangsmotivation lässt grüßen. Bisher läuft es immerhin ziemlich gut mit dem abhaken, was aber auch ein bisschen daran liegt, wie gut dieses 1-Prompt-Feature tatsächlich funktioniert. Zusätzlich zur Tagebuch-App lasse ich mir die Habit-Liste auch direkt auf meiner Browser-Startseite (die ich mir auch letztens habe bauen lassen) anzeigen und habe es somit immer im Blick.

New feature: habit tracker. add a new menu point habit tracker. add a new model habit that can be edited in the filament admin panel. the habit tracking page should display the habits in some kind of horizontal table with the days of the year as columns and a green dot if the habit has been done, and a gray dot if not. the dot is clickable to mark the habit as done. the table should be horizontally scrollable to show the whole year sometime. it should always be scrolled to the current day.

file://8yb4djhykurizunc
Sieht ganz nett aus. Den Kram unten hat er sich allerdings selber überlegt.

Nachdem ich seit ein paar Wochen (auch hier lässt das neue Jahr grüßen), wieder ab und zu joggen gehe, war es natürlich der nächste logische Schritt, dass ich die Läufe ebenfalls im Tagebuch anzeige. Natürlich automatisch. Ich ließ Claude Code also eine Anbindung an Runtastic bauen, was er auch schnell fertig stellte. Leider musste ich feststellen, dass ich gar nicht Runtastic, sondern Runkeeper auf dem iPhone nutze, also musste er nochmal ran und etwas umbauen. Zu guter Letzt merkte ich, dass beide Apps gar keine öffentliche API haben. Das war 2014 aber noch etwas verbreiteter!

i want a new section (yes, again..) thats called "external services" that will contain links to external services that can be used to import new types of stuff. the first will be an integration of the RUNTASTIC api. after connecting with oauth it should show a list of my 10 most recent runs with runtastic.

since runtastic does not even have an api remove all the runtastic things. you can leave the abstract "external services" stuff in, we may need it later

Es gibt aber ja noch einen weiteren Ort, wo alle Läufe gespeichert sind: In Apple Health. Dank der tollen Auto Health Export-App kann ich mir meine Workouts und, warum auch nicht, meine Heart Rate-Daten, da in regelmäßigen Abständen an eine API schicken lassen. Ich machte einmal einen manuellen Export um an das Schema der Daten zu kommen, und instruierte Claude damit, eine API zu bauen, die Daten in dem Format annimmt, speichert und das alles schön inklusive einer Karte und Graphen für die Herzrate anzeigt. Fertig! Schön.

look at the workout_export.json, build a api endpoint that accepts a json in this format. create a table called workouts. fields: foreign_id, location, distance, intensity, elevationUp, start, end, stepcount (just a summed up stepcount from the “stepCount” array in the data), activeEnergyBurned, duration, heartRateRecovery (put the heartRateRecovery json array from the export here), route (put the route json array from the export here), heartRateData (put the heartRateData json array from the export here)
add a “workouts” page in the frontend, that shows the workouts.

create a detail page. add a map using leaflet and openstreetmaps that displays the route. add a chart that display heartRate and heartRateRecovery. use charts.js for the chart

https://github.com/DantSu/php-osm-static-api use this library to render a static version of the map when importing a workout. add a field (static_map_path) to the workout model. adda command to re create static maps for workouts who have non

revise the layout of the detail page. put the static map small on the right side of the stats. put both graphs side by side. make the whole page only 80% width

okay, a fun one: for each heart rate reading, try to find a route point and try to get the elevation. add the elevation as a second y axis to the heart rate chart

file://yfm8nrk3z2edirn2

in heartrate.json there is an example heartrate export. build an api that can parse this json. create a heartrate model to save the heartrate readings. create a new section to show daily graphs for the heartrate. the heart rate charts should show the whole day ( 0 - 24) and if there is no reading for a bigger time period there should be no line, just space

file://wyal518gmtmmq5o0

Ein wundervolles anderes Feature ist, dass ich loggen kann, was sich zum Mittag hatte, und zwar nicht nur als Freitext-Feld, sondern ich kann einfach ein Rezept aus meiner Rezepteverwaltung auswählen, wie cool ist das denn! Dann läd der das da einfach inklusive Vorschaubild rein. Toll. Ein hoch auf APIs.

file://wmzcw8ek6fhcymju

Außerdem habe ich die ganze Startseite überarbeiten lassen und endlich so einen mitscrollenden Kalender an die Seite gepappt

file://bixew1yxq8c0xz1l
Das sind nur Testdaten, ich hab nicht wirklich gemalt.

Mir macht das alles viel Freude und es macht auch Spaß in der Benutzung, aber ein paar Sachen stoßen mir schon übel auf und in den nächsten Tagen werde ich versuchen, ob ich Claude davon überzeugen kann, manches etwas anders anzugehen. Natürlich sind meine Prompts bisher auch sehr… dünn und ich lasse ihn erstmal machem, was er für richtig hält, das muss man natürlich bedenken.

Dinge, von denen ich ihn noch überzeugen will:

  • Wenn neues Javascript eingebunden wird, dann über npm und nicht einfach wild CDN-script-Tags ins Template hauen.
  • Ebenfalls, wenn JavaScript benötigt wird, das schön in eine AlpineJS-Komponente auslagern und entsprechend einbinden und nicht wild ins Tempalte hauen
  • Allgemein nicht einfach riesige Blöcke von PHP ins… Template hauen
  • Bei allen gebauten Sachen darauf achten es in kleinere Blade-Komponenten aufzuteilen und sie auch wiederzuverwenden. In einem Projekt habe ich drei verschiedene Autocomplete-Implementierungen.

Abgesehen davon würde ich mir wünschen, dass er es irgendwie schafft sich konsistenter an das… Design zu halten. Also, nicht, dass meine Tagebuch-App irgendwie ein Design hätte, ich hab das ja auch nur eben mit Tailwind zusammengeklöppelt, aber teilweise sieht jedes Feature im ersten Anlauf komplett anders aus und fügt sich schlecht ein. Das wäre natürlich das i-Tüpfelchen, wenn das etwas besser laufen würde.

Ich habe bei der Recherche gerade auch entdeckt, dass Laravel mit Boost selber sogar ein paar Hilfestellungen anbietet, das werde ich wohl gleich mal installieren.

Kirby und Authentik

Gestern Abend wollte ich noch eben ein Kirby mit meinem Authentik verbinden. Ein Service weniger mit eigenem Passwort! An sich funktionierte das auch sehr gut. Mit kirby-oauth gibt es ein leicht einzubindendes Plugin, das auch schon Support für mehrere OAuth2-Provider mit bringt. Zwar nicht direkt für Authentik, aber man kann problemlos einen eigenen Provider anlegen, in dem man nur die nötigen URLs kurz rüberkopiert.

Leider war es damit aber noch nicht ganz gegessen. Das Plugin erwartet, dass das email_verified-Feld im OAuth-Response auf true gestellt ist und Authentik hat es standardmäßig auf false. Theoretisch kann man das im Authentik-Interface irgendwie umstellen, aber ich habe es einfach nicht gefunden, also dachte ich, es ist leichter in dem Plugin eine weitere Option hinzuzufügen, um den email_verified-Check abzuschalten. In meinem Fall, wo es eh nur einen festgelegten erlaubten User gibt, dessen E-Mail-Adresse ich kenne, ist das ja auch ok.

Ich habe meine winzige Änderung mal als Pull Request eingereicht, wen das gemerged wird, muss ich nicht mehr meinen Fork benutzen.

Allmen und Herr Weynfeldt

Martin Suter

Starten wir ins Jahr mit einem Suter. Zum Glück gibt es noch ein paar, die ich nicht kenne. Dieses Buch ist Allmen-typisch und schön und passend und dass er hier mit Weynfeld einen anderen Charakter aus dem Suter-Kosmos trifft ist witzig, manchmal erscheint es aber auch ein bisschen wie eine… Fanfiction. Als würde Luke Skywalker auf Picard treffen.

Gute Produkte: Dyson V8

Im Rahmen des letztjährigen Black Fridays tat ich etwas, was ich nie erwartet hätte. Ich kaufte einen neuen Dyson V8. Den Letzten kaufte ich 2016 oder so und über all’ die Jahre war ich sehr zufrieden mit dem Gerät. So zufrieden, dass ich nie auf die Idee gekommen wäre, einen neuen Staubsauger zu kaufen.

Zwischendrin kaufte ich einmal einen Third-Party-Wechselakku, weil mir die Akkulaufzeit etwas kurz vorkam. Der war günstig, funktionierte auch gut und ist bisher nicht explodiert.

Eine der wenigen Nachteile an so einem Stab-Staubsauger ist leider, dass man ihn schlecht mal eben sicher abstellen kann. Immer, wenn man ihn irgendwo dagegen lehnt, besteht die Gefahr, dass er umfällt und der wichtigste Teil, der Motor, ist natürlich ganz oben und fällt am weitesten.

Leider ist er nach fast zehn Jahren Benutzung wohl das ein oder andere mal zu häufig umgefallen, was dazu führte, dass hinten irgendwo neben dem Luftfilter Luft rausströmt. Die Saugleistung fühlte sich dadurch nicht vermindert an, aber ein schönes Gefühl war das nicht.

Im Black Friday begab es sich nun, dass genau das gleiche Modell einfach im Sale war. Knapp über 200€ sind zwar immer noch eine Stange Geld für einen Staubsauger, aber wesentlich weniger als diese ganzen neuen V-Modelle in der Dyson-Produktpalette, die ich überhaupt nicht verstehe. Warum hat man 5 verschiedene Produktgenerationen gleichzeitig im Angebot?

Ich hoffe, der Neue hält mindestens genauso lang. Wenn der Akku versagt, kann ich vielleicht endlich auch so einen Makita 18V-Adapter dranschrauben, darauf freu ich mich besonders. Der alte darf jetzt noch für ein paar Spezialaufgaben weiterleben, z. B. den Staub aufsaugen, wenn ich ein Loch bohre.

Voice Memo im Tagebuch

Ich habe im letzten Jahr angefangen in der Voice Memo-App ab und zu mal einen oder mehrere Tagebucheinträge aufzunehmen, wenn ich gerade keine Zeit zum Schreiben hatte.

Nun könnte man es sich ja einfach machen und den von Apple automatisch transkribierten Text nehmen und ins Tagebuch kopieren, aber leider ist die Qualität gar nicht mal so gut. Vielleicht nuschel ich zu sehr, aber ohne größere Nachbearbeitungen kann ich die Texte nicht benutzen.

Auf dem Rechner habe ich die Memos mal in Whisper Transcription geworfen, welches das Open AI-Whisper-Modell (v3-large) lokal benutzt und die Qualität ist wesentlich besser, das war schonmal ein Fortschritt.

Nun könnte man es sich ja einfach machen und den Text nehmen und ins Tagebuch kopieren, aber das wäre ja zu einfach. Da ich die Soundschnipsel eh auch im Tagebuch haben wollte, falls man in 40 Jahren mal seine eigene Stimme hören will, dachte ich mir, ich könnte ja direkt auch einen Transkriptionsservice mit anbinden.

Am liebsten hätte ich natürlich etwas genommen, was lokal läuft und trotzdem eine gute Qualität hat. Auf dem Mac läuft whisper-large-v3 ja gut, aber wie würde das auf meinem Homelab mit schwacher AMD Ryzen-CPU ohne GPU funktionieren?

Ich gab mein bestes und probierte verschiedene Docker-Container, die versprachen, eine “Faster Whisper”-Implementierung anzubieten, leider ohne Erfolg. Der Erste stürzte einfach immer ab, wenn ich eine Datei hinschickte, der zweite beschwerte sich über irgendwelche fehlenden Sachen. Was ebenfalls nicht funktionierte war Parakeet TDT.

Wenn lokal nicht funktioniert, wollte ich es aber zumindest in einem privaten Bereich, bzw. in der EU gehostet haben, also schaute ich weiter. Amazon Bedrock kann leider kein Whisper-Model. Huggingface bietet whisper-large-v3 an und ich war schon kurz davor, das jetzt zu nutzen, aber die Erkennungsqualität war erstaunlicherweise wesentlich schlechter als in Whisper Transcription auf meinem Macbook, häää.

Letzendlich bin ich jetzt beim voxtral-small-Model von Mistral gelandet. Das Ergebnis der Transkription ist gut, es ist schnell und in Europa gehostet. Damit kann ich jetzt einfach die Voice Memo in mein Tagebuch werfen, und daraus einen entsprechenden Eintrag erstellen.

Falls jemand einen funktionierenden Docker-Container hat, der mit faster-whisper lokal auf einem Rechner ohne GPU läuft, sagt gerne Bescheid, lokal würde mir natürlich noch besser gefallen!

Wochenrückblick KW2/26

Kaum schreibt man eine ganze Woche lang jeden Tag einen Post, kommt man auf die dumme Idee auch noch mit Wochenrückblicken anzufangen, als könnte ich das länger als zwei Wochen durchhalten!

Hier eine zufällige Aneinanderreihung von Dingen, die in dieser Woche passiert sind, über die ich nicht gesondert schrieb:

  • 🏚️ Un-Smart: Heut morgen konnte ich das Licht nicht anmachen, da Home Assistant down war. Ich schaute schnell in Proxmox, da stand nur, dass alle VMs mit io-error down waren. Äh ja. Turns out: Festplatte voll. Mein kleiner Rechner, der eigentlich nur eine Firewall war, hat nur eine 128GB SSD und die war wohl voll gelaufen. Ich habe ein paar Gigabyte Log-Dateien gelöscht und jetzt sicher wieder ein paar Wochen Ruhe.
  • 🥣 Lecker: Vor Monaten kaufte ich so eine Fertigpackung Milchreis, weil ich dachte, es wäre mal wieder lecker, nach so 20 Jahren. War es auch! Mhhh.
  • 🔥 Unschienbar: Unser Backofen hat nur so normale Dinger, wo man das Backblech drauf schiebt und keine Schienen, die mit Rausfahren. Ich dachte, man könnte das vielleicht schnell nachrüsten, aber der Bosch-Ersatzteilshop hat für meine Artikelnummer leider keine im Angebot. Man könnte natürlich irgendeinen Satz schienen für 80€ bei Amazon bestellen, aber wenn es am Ende nicht passt, ist das auch blöd.
  • 🫣 Frech: In einem Bücher-Tausch-Schrank im Park stand eines Morgens eine Gesamtausgabe von Game of Thrones-Taschenbüchern, also alle fünfundzwanzig Teile, oder wie viele das sind, die in Deutschland rausgekommen sind. Ich dachte mir, ich kann den ersten Band ja mal mitnehmen, vielleicht komme ich ja dazu, die fünfhundert Seiten kurz zu lesen. Als ich am nächsten Tag wieder vorbei kam, waren alle anderne Bände weg. Nun fühl ich mich natürlich etwas blöd, da die andere Person nun den ersten Band nicht auch mitnehmen konnte, andererseits finde ich es auch frech, da einfach Bücher im Neuwert von 100€ einfach komplett aus dem Tausch-Schrank zu nehmen.
  • 🏃🏻 +300%: Im Dezember merkte ich, dass ich 2025 noch kein einziges Mal joggen war und holte das kurz nach. In dieser Woche schaffte ich es nun schon dreimal morgens eine Runde zu drehen, und das trotz Schnee und Eis. Das ist schon dreimal soviel wie im ganzen letzten Jahr!
  • 🫨 Vibe: Ich habe in dieser Woche versucht meine Claude AI-Quota, für die ich bezahle, möglichst komplett auszunutzen und habe immer einen neuen Prompt parat gehabt, sobald es wieder ging. Hauptsächlich habe ich meine Tagebuch-App aufräumen und erweitern lassen. Es macht mir weiterhin sehr viel Spaß und motiviert mich, endlich mal wieder mehr an meinen Side-Projects zu bauen.
  • 💸 NameExpensive: Namecheap hat mir diese Woche mitgeteilt, dass sich für ein paar meiner Domains mal wieder die Preise erhöhen. Betroffen sind vor allem .io und .space. Ich muss mal schauen, ob ich die betreffenden Domains nochmal umziehe. Insgesamt bin ich immer mehr der Überzeugung für alles nur noch .de zu benutzen. Das ist günstig und ich hab irgendwie mehr vertrauen, dass die nicht plötzlich verschwindet.
  • 📖 Lesen & Schlafen: Seit Jahren konsumiere ich ja eigentlich nur noch Hörbücher. Zum Einschlafen versuche ich jetzt immer noch ein bisschen ganz klassisch mit den Augen zu lesen, aktuell das Hunger Games Prequel. Allerdings ist der Fortschritt echt langsam, da ich am nächsten Abend manchmal erstmal wieder fünf Seiten zurückblättern muss, da ich anscheinend während des Lesens einschlafe, aber trotzdem noch weiter blättere.
  • 🎉 Erfolgstoot: Dieser grandiose Witz ist mir diese Woche eingefallen. Warum ich dafür 14 Jahre brauchte, weiß ich auch nicht. Ich kichere immer noch darüber.
  • 🧑🏼‍🦱 Authentisch: Eigentlich hatte ich vor Monaten mal KeyCloak installiert um meine ganzen Projekte mit einem einheitlichen Login zu versehen. Ich kam auf die dumme Idee, das zu Aktualisieren und nach dem docker compose pull ging natürlich gar nichts mehr, weil irgendetwas, was ich nutzte, deprecated wurde. Natürlich. Ich bin nun kurzerhand auf Authentik umgestiegen und es läuft!
  • 🎧 Hot: Meistgehört diese Woche ist die Akustik-Version von Feuerkind von Subway to Sally, die frisch droppte.

Bis nächste Woche!

enclose.horse

Der Trend der lustigen kleinen Spiele, bei denen man jeden Tag eine kleine Aufgabe hat, reißt nicht ab. Der aktuellste Trend ist enclose.horse, was an sich erstmal eine wunderschöne Domain ist. .horse ist sowieso meine Lieblings-TLD, leider hatte ich bisher noch keine gute Idee für eine schöne Webseite!

Hier muss man versuchen das Pferd in eine, basierend auf der Menge der Wände, die man hat, möglichst große Weide einzusperren und es macht mir… im Gegensatz zu den meisten anderen Spielen dieser Art, tatsächlich Spaß. Normalerweise wehrt sich ja alles in mir dagegen, nachzudenken, aber irgendwas an diesem Spiel triggert in mir die Motivation, da viele Punkte machen zu wollen. Sehr schön!

Nackt III

Subway to Sally haben mit Feuerkind (Nackt Version) ein Lied veröffentlicht, das mich sehr erfreut, denn zum einen ist es ein toller Song und zum anderen ist damit die dritte Iteration der NACKT-Tour angekündigt. Das find ich wirklich richtig oberklasse.

Nackt kam ja schon 2006, Nackt II kam 2010. Damals schaffte ich es nicht zu den Konzerten, war aber auch kein großer Konzertgänger. Im Nachhinein ärgerte ich mich immer sehr, denn die Akustik-Live-Alben sind mir immer das Allerliebste von Subway to Sally. Nun bin ich zwar auch kein großer Konzertgänger mehr, da es mich irgendwie immer nur noch genervt hat, ewig herumzustehen, aber für Nackt III werde ich eine Ausnahme machen und mich im Mai 2026 nochmal ins Getümmel bewegen, ich freue mich!

Notifications für die Tagesstruktur

Seit Monaten habe ich Marcels App Unhinged auf dem Handy. Es ist wirklich ein toller Mood-Tracker, den ich sehr empfehlen kann, ich habe bestimmt schon ein oder zweimal meine Stimmung damit getrackt.

Tatsächlich benutze ich die App auf eine etwas andere Art und Weise: Ich habe bei der Einrichtung die drei täglichen Erinnerungen, die Stimmung einzutragen auf 10, 18 und 23 Uhr eingestellt und freue mich seitdem täglich darüber, dass es um diese Uhrzeiten kurz am Arm vibriert. Das gibt dem Tag irgendwie Struktur.

Unhinged ist nicht die erste App, die ich auf diese Art und Weise benutze, ich bekomme auch Notifications von der App, die sagt, wann welche Mülltonne abgeholt wird. Da das immer an den gleichen Tagen passiert ist das eigentlich Quatsch, aber sobald es Dienstag um 19 Uhr vibriert, gibt mir es mir ein wohliges Gefühl, dass alles nach Plan läuft und am nächsten Tag planmäßig der Müll geholt wird.

Eine weitere App, die ich nur für die tägliche 10-Uhr-Notification nutzte war Close Up, damit könnte man täglich ein Selfie machen und hat dann nach 10 Jahren ein lustiges Video von sich. Leider bin zu 99% zu faul gewesen, die Notification anzuklicken und ein Foto zu machen, aber die kleine 10-Uhr-Erinnerung machte mich immer froh.

Jetzt sagt bitte nicht, dass ich der Einzige bin, dem es so geht.

AbUndZuTodo

Es gibt ja so ein paar Todos im Haushalt, die man in regelmäßigen Abständen mal erledigen sollte, wo es aber auch nicht so wichtig ist, dass es tatsächlich an einem bestimmten Tag passiert, wie zum Beispiel:

  • Geschirrspüler reinigen
  • Waschmaschine mal auf 95°C durchlaufen lassen
  • Kühlschrank putzen
  • Den Filter im Staubsauger putzen oder ersetzen

Jahrelang hatte mein Kopf Probleme damit, diese Sachen zu managen. Schreibt man sie gar nich auf, macht man es tendenziell nie. Oder halt, wenn die Waschmaschine anfängt zu riechen, aber dann hat man vielleicht gerade keine Zeit, oder keine Zitronensäure da, oder was auch immer. Zudem weiß man auch nicht mehr genau, wann man die Dinge zuletzt erledigte. Muss ich schon wieder den Kopf der Zahnbürste tauschen, war das nicht erst vor einer Woche?

Der normale Weg wäre es wahrscheinlich, diese Todos einfach in die normale Todo-App als wiederkehrende Aufgaben aufzunehmen, oder sie in den Kalender zu schreiben. Das regelte ich eine Zeit lang so, aber es machte mir einfach zu viel Druck, diese Todos immer zu sehen, wenn man seinem Tag nachgeht.

Alles erledigt für heute, aber der Geschirrspüler will noch gereinigt werden, was aber eigentlich auch nicht so wichtig ist. Hakt man es doch ab, um den Mental Load los zu sein, kommt es aber erst einen Monat später wieder, was vielleicht doch etwas spät ist.

Manche Todo-Apps haben vielleicht eine “Snooze” funktion, mit der man sowas mal drei Tage verschieben kann, das wäre vielleicht eine alternative Möglichkeit, der ich nicht nach ging

Wie gesagt geistert das wirklich lange in meiner “kann man mal kurz ausprobieren”-Liste im Kopf rum, aber ich wollte es immer als native iOS-App und da ist meine Hürde des “mal eben ausprobierens” immer recht hoch gewesen. Ihr könnt aber sicher schon ahnen, für wen die Hürde sehr gering ist, genau: Claude AI.

Ich legte also ein neues Xcode-Projekt an, nannte es AbUndZuTodo, was ich einen bestechend guten Namen finde, und ließ Claude mal mit folgendem Prompt loslegen:

Hello. I want to build an ios app for tracking todo items that only occur sometimes. stuff like cleaning the dishwasher or washing machine. stuff that you do maybe once a month but where it is not really important to do it exactly then. in the app i want to create tasks and give them a name and a rough range when to to ("once month", "once a week") and in the overview it should show when the task was done the last time and when it should be done again. the frontend should be swift ui the backend/storage layer swiftdata. please ask clarifying questions.

Er fragte noch ein paar Dinge, wie welche Farben ich möchte und ob es Notifications geben soll. Ich sagte erstmal ja zu allem. Nach wenigen Minuten hatte ich eine fertige App, die erstmal nicht kompilieren wollte. Nach ein Bisschen hin- und her und Fehlermeldungen kopieren, gab ich auf und kam auf die zeitsparende Idee:

can you try to compile the source yourself and fix all issues until it works?

Es funktionierte. Eine App, die ich starten kann! Die nächsten Stunden verbrachte ich damit, es auch auf meinem Handy zum Laufen zu bekommen, gegen das ganze Code Signing kann auch die beste AI nichts ausrichten.

Folgende Prompts schob ich noch nach um das Endergebnis zu erreichen. Ich hab sie jetzt einmal aus der JSON-Datei entnommen, die Claude dankenswerterweise speichert. Es wäre natürlich schön, hätte ich von jedem Step noch Screenshots, um das alles besser zu dokumentieren, aber mehr habe ich nicht!

Zuerst wollte ich einen Settingsscreen um mir Testdaten zu seeden:

please add a settings screen. on this screen add a button "delete all data and add demo data" the button should delete all data and add demo data (5 fitting tasks with fitting invervals, prefilled with some fitting completions in the past)

Als nächstes iterierte ich etwas in der Haupt-Übersicht. Zuerst waren erst alle AbUndZuTodos einfach untereinander. Ich ließ es ihn erstmal gruppieren. (Außerdem wollte ich keine stressigen Notifications mehr)

good. now update the main list. group the tasks in two groups: "open" (all tasks that are due now or in < 5 days) and "done" (all tasks that were recently completed). also remove all things relating to notifications, i do not want notifications anymore.

Claude hatte sich das etwas komisch überlegt. Nach links swipen öffnete ein Popover mit der zum Todo gehörenden Historie, nach rechts swipen löschte ihn, das wollte ich so nicht.

change the ui. use swipe to the left to complete the task. use a tap to open the "history". add the edit/delete buttons to the history sheet.

Hier gab es noch mehr Möglichkeit zum gruppieren, da mir immer mehr Todos einfielen und es unübersichtlich wurde. Außerdem wollte ich aktuell nicht relevante Todos nicht mehr sehen.

done tasks should be shown collapsed by default (add a "open" button to show them). all open tasks should be groupable by "area". add a propety "area" (like kitchen, garage, etc) to tasks. adjust the demo data accordingly

Da war noch so ein roter Punkt drin, der mir zu viel Druck machte.

remove the colored dot from the rows and make them a bit tighter

Letzte UI-Iteration: Aktuell nicht relevante Todos werden in einen anderen Tab ausgelagert.

another try: add a tabbar at the bottom with 2 tabs: active and done. put all the done tasks on the done tab


Das war es auch schon. Ich nutze die App jetzt schon seit ein paar Wochen, habe einige Todos angelegt und auch schon das ein oder andere tatsächlich erledigt, es ist quasi genau so wie ich es mir vorgestellt habe und insgesamt war es eine Arbeit von einer Stunde, davon 30 Minuten Code Signing und 25 Minuten auf Claude warten.

abundzutodo2.png
Ja, man müsste es mal noch etwas “hübsch” machen, das sieht doch etwas sehr langweilig grau aus.

Es ist schon eine verrückte Welt. Selbst, wenn ich jetzt feststellen würde, dass die App totaler Quatsch ist und ich es lasse, brauch ich nichtmal ein schlechtes Gewissen zu haben, dass ich Zeit für die Implementierung verschwendet habe.

Ja, okay, ich hab im Gegenzug auch nicht viel neues über Swift UI gelernt, da ich nicht tief in den Code einstieg, aber dafür hatte ich gefühlt mehr Zeit und Lust mir darüber Gedanken zu machen, wie die App funktionieren soll, ohne davon beeinflusst zu sein, dass etwas in mir sagt “ähh nee, ich bau das jetzt nicht um, das dauert viel zu lang, ich lass das jetzt in diesem halb-fertigen Zustand”.


Sollte sich die App weiter als nützlich herausstellen werde ich im nächsten Schritt versuchen da Cloudkit Sharing einbauen zu lassen, was ja recht nützlich sein könnte, wenn man nicht die Einzige Person im Haushalt ist, die sich um diese Dinge kümmert. Mal sehen, ob er das schafft. Wenn ja, könnte ich mich auch noch darum kümmern das ganze Rund zu machen und mal in den Store zu laden, vielleicht denkt ja noch jemand so wie ich.