{ "items": [ { "type": [ "h-card" ], "properties": { "country-name": [ "Switzerland", "Switzerland" ], "email": [ "mailto:hey@tiim.ch" ], "family-name": [ "Bachmann" ], "gender-identity": [ "male" ], "given-name": [ "Tim" ], "job-title": [ "Software Engineer" ], "locality": [ "Basel" ], "name": [ "Tim Bachmann" ], "nickname": [ "Tiim" ], "org": [ "Coop Genossenschaft", "Coop Genossenschaft" ], "photo": [ "https://media.tiim.ch/tiim.jpg" ], "role": [ "software engineer", "software engineer" ], "url": [ "https://tiim.ch/" ] }, "children": [ { "type": [ "h-entry" ], "properties": { "category": [ "ai", "claude", "obsidian", "zettelkasten" ], "featured": [ "https://tiim.ch/assets/2026-04-12-letting-claude-improve-my-notes.png" ], "name": [ "Letting Claude Improve my Notes in Obsidian" ], "published": [ "Sun Apr 12 2026 12:00:00 GMT+0000 (Coordinated Universal Time)" ], "summary": [ "My workflow of letting Claude Code process raw files into notes and sort them into my personal wiki, while making sure all relevant notes are linked." ], "url": [ "https://tiim.ch/blog/2026-04-12-letting-claude-improve-my-notes" ] } }, { "type": [ "h-entry" ], "properties": { "category": [ "javascript", "vanilla-js", "web-app" ], "name": [ "Shift Visualizer" ], "published": [ "Tue Jan 06 2026 12:00:00 GMT+0000 (Coordinated Universal Time)" ], "summary": [ "A client-side web application for visualizing daily work shifts with special handling for overnight shifts. Built with vanilla JavaScript, HTML, and CSS - no frameworks or build process required." ], "url": [ "https://tiim.ch/projects/shift-visualizer" ] } }, { "type": [ "h-entry" ], "properties": { "category": [ "javascript", "lenex", "swim", "vibe-coding" ], "name": [ "Swim Times Manager" ], "published": [ "Mon Dec 01 2025 20:53:34 GMT+0000 (Coordinated Universal Time)" ], "summary": [ "A small client side javascript application to manage measured times and splits of swimmers. Supports managing swimmers, sharing database via export and import, displaying PBs and data import from LENEX file format." ], "url": [ "https://tiim.ch/projects/swim-times-manager" ] } }, { "type": [ "h-entry" ], "properties": { "category": [ "ansible", "docker", "server", "traefik" ], "featured": [ "https://media.tiim.ch/4a0a43eb-cf95-4273-b6a6-e085c9123985.webp" ], "name": [ "My Selfhosting Setup" ], "published": [ "Mon Dec 04 2023 08:00:00 GMT+0000 (Coordinated Universal Time)" ], "summary": [ "A short overview on how I self-host." ], "url": [ "https://tiim.ch/blog/2023-12-03-my-selfhosting-setup" ] } }, { "type": [ "h-entry" ], "properties": { "category": [ "ansible", "bash", "dev", "linux" ], "featured": [ "https://media.tiim.ch/3c1246e4-3201-4df6-af87-6aa4ab98800e.webp" ], "name": [ "Getting the Absolute Path of a Remote Directory in Ansible" ], "published": [ "Wed Sep 20 2023 21:39:13 GMT+0000 (Coordinated Universal Time)" ], "summary": [ "There is no builtin way to convert a relative path to an absolute path in ansible. However we can use the readlink command for this." ], "url": [ "https://tiim.ch/blog/2023-09-20-ansible-absolute-path" ] } }, { "type": [ "h-entry" ], "properties": { "category": [ "cli", "dev", "rust" ], "name": [ "Pomo ๐Ÿ…" ], "published": [ "Thu Aug 03 2023 11:03:00 GMT+0000 (Coordinated Universal Time)" ], "summary": [ "I created pomo as a way to keep me focused for working on my masters thesis, and at the same time\nallowed me to learn the rust programming language." ], "url": [ "https://tiim.ch/projects/pomo" ] } } ] } ], "rels": { "alternate": [ "https://tiim.ch/blog/rss.xml" ], "authorization_endpoint": [ "https://comments.tiim.ch/indieauth/authorize" ], "icon": [ "https://tiim.ch/swim-emoji.png" ], "indieauth-metadata": [ "https://comments.tiim.ch/indieauth/metadata" ], "manifest": [ "https://tiim.ch/manifest.json" ], "me": [ "mailto:hey@tiim.ch", "https://tiim.ch/blog/rss.xml", "https://github.com/Tiim", "https://indieweb.social/@Tiim", "https://dev.to/tiim", "https://instagram.com/tiim.ba" ], "micropub": [ "https://comments.tiim.ch/micropub" ], "microsub": [ "https://aperture.p3k.io/microsub/801" ], "modulepreload": [ "https://tiim.ch/_app/immutable/entry/start.CcE6Vdx9.js", "https://tiim.ch/_app/immutable/chunks/DJ7Hcm6Q.js", "https://tiim.ch/_app/immutable/chunks/DajKBWqG.js", "https://tiim.ch/_app/immutable/chunks/Co1kzqMW.js", "https://tiim.ch/_app/immutable/chunks/BgD4crZy.js", "https://tiim.ch/_app/immutable/entry/app.CmYYKLMq.js", "https://tiim.ch/_app/immutable/chunks/Dp1pzeXC.js", "https://tiim.ch/_app/immutable/chunks/Bzak7iHL.js", "https://tiim.ch/_app/immutable/chunks/Su98hNLj.js", "https://tiim.ch/_app/immutable/nodes/0.DJJ7odT3.js", "https://tiim.ch/_app/immutable/chunks/C5R47xC3.js", "https://tiim.ch/_app/immutable/chunks/CNHhgyXs.js", "https://tiim.ch/_app/immutable/chunks/BAHBtI_q.js", "https://tiim.ch/_app/immutable/chunks/56KfW9JE.js", "https://tiim.ch/_app/immutable/nodes/2.8GcZShbi.js", "https://tiim.ch/_app/immutable/chunks/CH5Ng704.js", "https://tiim.ch/_app/immutable/chunks/CC9dWrRR.js", "https://tiim.ch/_app/immutable/chunks/B6GhMc9y.js", "https://tiim.ch/_app/immutable/chunks/C6xrWq2N.js", "https://tiim.ch/_app/immutable/chunks/DDAAppdl.js" ], "nofollow": [ "https://tiim.ch/shift-visualizer/", "https://github.com/Tiim/shift-visualizer", "https://tiim.ch/swim-times-manager/", "https://github.com/Tiim/swim-times-manager", "https://github.com/Tiim/pomo", "https://github.com/Tiim/Tiim.github.io", "https://tiim.ch/pages/links" ], "noopener": [ "https://tiim.ch/shift-visualizer/", "https://github.com/Tiim/shift-visualizer", "https://tiim.ch/swim-times-manager/", "https://github.com/Tiim/swim-times-manager", "https://github.com/Tiim/pomo", "https://github.com/Tiim/Tiim.github.io", "https://tiim.ch/pages/links" ], "noreferrer": [ "https://tiim.ch/shift-visualizer/", "https://github.com/Tiim/shift-visualizer", "https://tiim.ch/swim-times-manager/", "https://github.com/Tiim/swim-times-manager", "https://github.com/Tiim/pomo", "https://github.com/Tiim/Tiim.github.io", "https://tiim.ch/pages/links" ], "preconnect": [ "https://fonts.googleapis.com", "https://fonts.gstatic.com" ], "stylesheet": [ "https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&display=swap", "https://tiim.ch/_app/immutable/assets/0.C6Eg9DJ-.css", "https://tiim.ch/_app/immutable/assets/PostCardList.CCnAgNra.css", "https://tiim.ch/_app/immutable/assets/2.D7zeQHtp.css" ], "token_endpoint": [ "https://comments.tiim.ch/indieauth/token" ], "webmention": [ "https://comments.tiim.ch/wm/webmentions" ] }, "rel-urls": { "https://aperture.p3k.io/microsub/801": { "rels": [ "microsub" ] }, "https://comments.tiim.ch/indieauth/authorize": { "rels": [ "authorization_endpoint" ] }, "https://comments.tiim.ch/indieauth/metadata": { "rels": [ "indieauth-metadata" ] }, "https://comments.tiim.ch/indieauth/token": { "rels": [ "token_endpoint" ] }, "https://comments.tiim.ch/micropub": { "rels": [ "micropub" ] }, "https://comments.tiim.ch/wm/webmentions": { "rels": [ "webmention" ] }, "https://dev.to/tiim": { "rels": [ "me" ], "text": " Dev.to" }, "https://fonts.googleapis.com": { "rels": [ "preconnect" ] }, "https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&display=swap": { "rels": [ "stylesheet" ] }, "https://fonts.gstatic.com": { "rels": [ "preconnect" ] }, "https://github.com/Tiim": { "rels": [ "me" ], "text": " Github" }, "https://github.com/Tiim/Tiim.github.io": { "rels": [ "nofollow", "noopener", "noreferrer" ], "text": "GitHub" }, "https://github.com/Tiim/pomo": { "rels": [ "nofollow", "noopener", "noreferrer" ], "text": "pomo Github" }, "https://github.com/Tiim/shift-visualizer": { "rels": [ "nofollow", "noopener", "noreferrer" ], "text": "Github Repo" }, "https://github.com/Tiim/swim-times-manager": { "rels": [ "nofollow", "noopener", "noreferrer" ], "text": "Github Repo" }, "https://indieweb.social/@Tiim": { "rels": [ "me" ], "text": " Mastodon" }, "https://instagram.com/tiim.ba": { "rels": [ "me" ], "text": " Instagram" }, "https://tiim.ch/_app/immutable/assets/0.C6Eg9DJ-.css": { "rels": [ "stylesheet" ] }, "https://tiim.ch/_app/immutable/assets/2.D7zeQHtp.css": { "rels": [ "stylesheet" ] }, "https://tiim.ch/_app/immutable/assets/PostCardList.CCnAgNra.css": { "rels": [ "stylesheet" ] }, "https://tiim.ch/_app/immutable/chunks/56KfW9JE.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/B6GhMc9y.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/BAHBtI_q.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/BgD4crZy.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/Bzak7iHL.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/C5R47xC3.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/C6xrWq2N.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/CC9dWrRR.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/CH5Ng704.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/CNHhgyXs.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/Co1kzqMW.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/DDAAppdl.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/DJ7Hcm6Q.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/DajKBWqG.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/Dp1pzeXC.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/chunks/Su98hNLj.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/entry/app.CmYYKLMq.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/entry/start.CcE6Vdx9.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/nodes/0.DJJ7odT3.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/_app/immutable/nodes/2.8GcZShbi.js": { "rels": [ "modulepreload" ] }, "https://tiim.ch/blog/rss.xml": { "rels": [ "alternate" ], "title": "tiim.ch ยป Tim Bachmann", "type": "application/rss+xml" }, "https://tiim.ch/manifest.json": { "rels": [ "manifest" ] }, "https://tiim.ch/pages/links": { "rels": [ "nofollow", "noopener", "noreferrer" ], "text": "Links and Blogroll" }, "https://tiim.ch/shift-visualizer/": { "rels": [ "nofollow", "noopener", "noreferrer" ], "text": "Shift Visualizer" }, "https://tiim.ch/swim-emoji.png": { "rels": [ "icon" ] }, "https://tiim.ch/swim-times-manager/": { "rels": [ "nofollow", "noopener", "noreferrer" ], "text": "Swim Times Manager" }, "mailto:hey@tiim.ch": { "rels": [ "me" ], "text": " Email" } } }