{"id":20613233,"url":"https://github.com/robiningelbrecht/robiningelbrecht","last_synced_at":"2026-07-08T20:31:14.107Z","repository":{"id":37945358,"uuid":"423159082","full_name":"robiningelbrecht/robiningelbrecht","owner":"robiningelbrecht","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-01T08:41:52.000Z","size":9585,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-01T10:28:01.678Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robiningelbrecht.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-10-31T13:42:34.000Z","updated_at":"2026-04-01T08:41:56.000Z","dependencies_parsed_at":"2023-09-27T03:10:24.457Z","dependency_job_id":"cfee0aba-76a6-4077-a852-bded4121cfc1","html_url":"https://github.com/robiningelbrecht/robiningelbrecht","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/robiningelbrecht/robiningelbrecht","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robiningelbrecht%2Frobiningelbrecht","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robiningelbrecht%2Frobiningelbrecht/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robiningelbrecht%2Frobiningelbrecht/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robiningelbrecht%2Frobiningelbrecht/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robiningelbrecht","download_url":"https://codeload.github.com/robiningelbrecht/robiningelbrecht/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robiningelbrecht%2Frobiningelbrecht/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35278166,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T11:09:12.236Z","updated_at":"2026-07-08T20:31:14.101Z","avatar_url":"https://github.com/robiningelbrecht.png","language":"PHP","funding_links":["https://www.buymeacoffee.com/ingelbrecht"],"categories":[],"sub_categories":[],"readme":"![Screencast from 2025-12-08 14-49-04 (2)](https://github.com/user-attachments/assets/4c75c39d-501d-4051-accd-18dbbd5ecd73)\n\nI mostly work with PHP/Symfony, and occasionally dabble in JavaScript. \n\nIf you like what I'm doing, please consider supporting me 🙏\n\n\u003ca href=\"https://www.buymeacoffee.com/ingelbrecht\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 40px !important;\" \u003e\u003c/a\u003e\n\n## :bike: Sporty Spice\n\n\u003ca target=\"_blank\" href=\"https://statistics-for-strava.robiningelbrecht.be\"\u003e\u003cimg src=\"https://statistics-for-strava.robiningelbrecht.be/files/strava-badge.svg?token=test\" /\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" href=\"https://statistics-for-strava.robiningelbrecht.be\"\u003e\u003cimg src=\"https://statistics-for-strava.robiningelbrecht.be/files/zwift-badge.svg?token=test\" /\u003e\u003c/a\u003e\n\n## :pencil: Latest blog posts\n\n\u003c!-- START-BLOG-POSTS-WRAPPER --\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/windahead-weather-and-wind-analysis-for-cycling-and-running-routes-494134899465?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/0*xAWb22f5Ww35R1IB.png\" alt=\"WindAhead, weather and wind analysis for cycling and running routes\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/windahead-weather-and-wind-analysis-for-cycling-and-running-routes-494134899465?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eWindAhead, weather and wind analysis for cycling and running routes\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eRuns 100% in your browser. No uploads. No data stored. I’m an amateur cyclist, which means I plan most of my own routes....\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eMay 13, 2026\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/adding-intensity-to-zone-2-my-weekly-zwift-training-plan-bc1b9f9185d3?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/1*aRmaRGyeD5L0UCGQFjy40Q.png\" alt=\"Adding intensity to zone 2: my weekly Zwift training plan\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/adding-intensity-to-zone-2-my-weekly-zwift-training-plan-bc1b9f9185d3?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eAdding intensity to zone 2: my weekly Zwift training plan\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eHow I structured my week to improve fitness and build endurance Over the last 15 months, my Zwift training consisted mos...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eFeb 18, 2026\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/embracing-immutability-in-php-8-5-with-the-new-clone-method-b1efa5d09376?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/1*yGJQghjGEmWRxzhINMmYdw.png\" alt=\"Embracing immutability in PHP 8.5 with the new clone() method\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/embracing-immutability-in-php-8-5-with-the-new-clone-method-b1efa5d09376?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eEmbracing immutability in PHP 8.5 with the new clone() method\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eIn most of my projects, I rely heavily on (value) objects. So far, I’ve used a mix of mutable and immutable implementati...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eFeb 04, 2026\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/one-year-of-statistics-for-strava-aec486385f46?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/1*VgeDbs0YrT9f7BCASuwDBg.png\" alt=\"One year of Statistics for Strava\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/one-year-of-statistics-for-strava-aec486385f46?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eOne year of Statistics for Strava\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eFrom a personal tool to a thriving open-source project. Exactly one year ago I released the very first version of Statis...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eDec 15, 2025\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/the-power-of-symfonys-service-container-a27499762415?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/1*e-w0SWp2OpdXq4NcJKXmuw.png\" alt=\"The power of Symfony’s service container\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/the-power-of-symfonys-service-container-a27499762415?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eThe power of Symfony’s service container\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eBuilding a more reliable Mutex service with attributes and autoconfiguration A few weeks back I Implemented a custom Mut...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eDec 08, 2025\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/theres-no-place-like-127-0-0-1-7a21a500a0f8?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/1*4EOaw3jbke-vGNqkyU2jHg.png\" alt=\"There’s no place like 127.0.0.1\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/theres-no-place-like-127-0-0-1-7a21a500a0f8?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eThere’s no place like 127.0.0.1\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eA tour through my self-hosted setup Back in November 2024 I came across r/selfhosted, a subreddit to share, discuss and ...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eNov 23, 2025\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/strategy-pattern-because-your-giant-if-statement-is-crying-for-help-48e979d9a399?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/0*7DZio5saypSPJMIr\" alt=\"Strategy Pattern: Because Your Giant if Statement is Crying for Help\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/strategy-pattern-because-your-giant-if-statement-is-crying-for-help-48e979d9a399?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eStrategy Pattern: Because Your Giant if Statement is Crying for Help\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eAs projects grow, so does the complexity of decision-making logic. Often leading to tangled webs of if statements, switc...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eMay 12, 2025\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/introducing-statistics-for-strava-an-open-source-app-that-analyses-your-strava-data-f1147e0d5c1e?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/1*Kz_eep3QI7oOkxR_Ori80Q.png\" alt=\"Introducing “Statistics for Strava”: A self-hosted, open-source dashboard for your Strava data.\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/introducing-statistics-for-strava-an-open-source-app-that-analyses-your-strava-data-f1147e0d5c1e?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eIntroducing “Statistics for Strava”: A self-hosted, open-source dashboard for your Strava data.\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eStrava is a fantastic tool for tracking your workouts, but its built-in analytics may not always provide the depth of in...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eMar 26, 2025\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/transform-your-raspberry-pi-into-a-digital-photo-frame-09d053d4fb9b?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1024/0*HBzThCV7R12UcoAF\" alt=\"Transform Your Raspberry Pi into a Digital Photo Frame\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/transform-your-raspberry-pi-into-a-digital-photo-frame-09d053d4fb9b?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eTransform Your Raspberry Pi into a Digital Photo Frame\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eThe Raspberry Pi is an affordable, compact device that can easily turn a monitor into a customisable digital photo frame...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eOct 30, 2024\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"150\"\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/i-created-a-public-api-that-exposes-wca-competition-results-2135e091bbe8?source=rss-45b70a6f6d97------2\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/640/1*9J55osyX3YAdADxJa5rgHA.png\" alt=\"I created a public API that exposes WCA competition results\" width=\"150\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://ingelbrechtrobin.medium.com/i-created-a-public-api-that-exposes-wca-competition-results-2135e091bbe8?source=rss-45b70a6f6d97------2\"\u003e\u003cstrong\u003eI created a public API that exposes WCA competition results\u003c/strong\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csub\u003eThe World Cube Association governs competitions for mechanical puzzles that are operated by twisting groups of pieces, c...\u003c/sub\u003e\u003cbr\u003e\n  \u003csub\u003eJul 21, 2023\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- END-BLOG-POSTS-WRAPPER --\u003e ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobiningelbrecht%2Frobiningelbrecht","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobiningelbrecht%2Frobiningelbrecht","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobiningelbrecht%2Frobiningelbrecht/lists"}