54,302 blogs · [ { "id": "01a0b68b-4cdd-71db-952c-91becb4fe73c", "title": "marcus.io", "url": "https://marcus.io", "published_at": "2026-09-07T05:20:44+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c654b39bf", "title": "Making RSS more visible again with a /feeds page", "url": "https://marcus.io/blog/making-rss-more-visible-again-with-slash-feeds", "published_at": "2026-04-05T21:28:47+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c709ce1a1", "title": null, "url": "https://marcus.io/feed", "published_at": "2025-04-05T07:42:17+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c719cb8d0", "title": "Offline · marcus.io", "url": "https://marcus.io/offline", "published_at": "2025-04-05T07:42:17+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c71dff2e8", "title": "Datenschutz / Privacy Policy", "url": "https://marcus.io/privacy-policy", "published_at": "2025-04-05T07:42:17+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c48a3922c", "title": "Blog · marcus.io", "url": "https://marcus.io/blog", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6c9964b8", "title": "Notes · marcus.io", "url": "https://marcus.io/notes", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6d918608", "title": "Unsett(l)ing", "url": "https://marcus.io/notes/unsettling", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6d9e78b2", "title": "LinkedIn \"Formatting\"", "url": "https://marcus.io/notes/linkedin-formatting", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6e1837a7", "title": "On Bluesky", "url": "https://marcus.io/notes/on-bluesky", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6e56d919", "title": "Remarkable realisation", "url": "https://marcus.io/notes/remarkable-realisation", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6efbc48c", "title": "About · marcus.io", "url": "https://marcus.io/about", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6f0443b0", "title": "Feeds · marcus.io", "url": "https://marcus.io/feeds", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6f5c9543", "title": "Marcus' 40. von Marcus Herrmann: Unterstütze diese Spendenaktion", "url": "https://marcus.io/40", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6fe738f1", "title": "Colophon · marcus.io", "url": "https://marcus.io/colophon", "published_at": "2025-04-05T07:42:16+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6748b78f", "title": "Accessible Overflow", "url": "https://marcus.io/blog/accessible-overflow", "published_at": "2025-04-05T07:42:15+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6480b319", "title": "Disclosure widgets in Vue.js", "url": "https://marcus.io/blog/disclosure-widget-vuejs", "published_at": "2025-04-05T07:42:14+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c64b37b07", "title": "Accessible status messages with Vue Announcer v2", "url": "https://marcus.io/blog/accessible-notifications-vue-announcer2", "published_at": "2025-04-05T07:42:14+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c65fcdba9", "title": "The magical construction office", "url": "https://marcus.io/blog/the-magical-construction-office", "published_at": "2025-04-05T07:42:14+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c6637a762", "title": "My 2020", "url": "https://marcus.io/blog/my-2020", "published_at": "2025-04-05T07:42:14+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c66c7d967", "title": "Checking Windows High Contrast Mode on a Mac for free", "url": "https://marcus.io/blog/checking-whcm-on-mac", "published_at": "2025-04-05T07:42:14+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c613c92bd", "title": "Twenty inclusive strategies for building web apps in 2020", "url": "https://marcus.io/blog/20-web-app-strategies-2020", "published_at": "2025-04-05T07:42:13+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c61b663b5", "title": "2019 retrospective", "url": "https://marcus.io/blog/2019-retrospective", "published_at": "2025-04-05T07:42:13+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c61b80f25", "title": "Progress on accessible-app.com", "url": "https://marcus.io/blog/20200109-progress-on-a11y-app", "published_at": "2025-04-05T07:42:13+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c623654fc", "title": "Accessibility notes on the www.spiegel.de relaunch", "url": "https://marcus.io/blog/20200110-a11y-notes-spiegel-relaunch", "published_at": "2025-04-05T07:42:13+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c624dda5c", "title": "Follow up on my spiegel.de notes: Interview with Daniel Schulz from SPIEGEL Tech Lab", "url": "https://marcus.io/blog/20200116-interview-daniel-schulz-spiegel-tech-lab-a11y", "published_at": "2025-04-05T07:42:13+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c63107338", "title": "Improved accessible routing in Vue.js (updated)", "url": "https://marcus.io/blog/20200127-improved-accessible-routing-vuejs", "published_at": "2025-04-05T07:42:13+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c639388bc", "title": "Change of ebook plans", "url": "https://marcus.io/blog/change-of-ebook-plans", "published_at": "2025-04-05T07:42:13+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5e04f59c", "title": "Menu (or not)", "url": "https://marcus.io/blog/menu-or-not", "published_at": "2025-04-05T07:42:12+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5ee66963", "title": "Using framework powers for good", "url": "https://marcus.io/blog/using-framework-powers-for-good", "published_at": "2025-04-05T07:42:12+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5fe05578", "title": "Accessible React component libraries", "url": "https://marcus.io/blog/accessible-react-component-libraries", "published_at": "2025-04-05T07:42:12+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c605c2938", "title": "Fata Morganas in Accessibility", "url": "https://marcus.io/blog/fata-morganas-in-a11y", "published_at": "2025-04-05T07:42:12+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5d8909a6", "title": "Hello, Directive (EU) 2019/882", "url": "https://marcus.io/blog/hello-directive-2019-882", "published_at": "2025-04-05T07:42:10+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5da6bf22", "title": "Creating a selfhosted newsletter with ProcessWire and MailGun", "url": "https://marcus.io/blog/selfhosted-newsletter-processwire-mailgun", "published_at": "2025-04-05T07:42:10+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c59a84100", "title": "Schroedinger's prototype", "url": "https://marcus.io/blog/schroedingers-prototype", "published_at": "2025-04-05T07:42:09+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5a6cc7f5", "title": "Baking in #a11y from the start - Interview with Michael Scharnagl of Feediary", "url": "https://marcus.io/blog/interview-with-michael-scharnagl-of-feediary", "published_at": "2025-04-05T07:42:09+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5ae94ed8", "title": "Building accessible-app.com: New menu button for Accessibook's shopping cart", "url": "https://marcus.io/blog/a11y-app-details-summary", "published_at": "2025-04-05T07:42:09+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5bb46e4d", "title": "Building accessible-app.com: Accessible animations", "url": "https://marcus.io/blog/a11y-app-accessible-animations", "published_at": "2025-04-05T07:42:09+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5bf68e7c", "title": "Building accessible-app.com: The shopping cart and aria-live regions", "url": "https://marcus.io/blog/a11y-app-shopping-cart-with-aria-live", "published_at": "2025-04-05T07:42:09+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5cddf123", "title": "Accessibility challenges in web apps", "url": "https://marcus.io/blog/a11y-challenges-of-webapps", "published_at": "2025-04-05T07:42:09+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5594db0a", "title": "Building accessible-app.com: Modal and non-modal dialogs (and Vue)", "url": "https://marcus.io/blog/a11y-app-dialogs-modals", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c55df989d", "title": "Creating a banking web app with accessibility in mind - Interview with Kitty Giraudel of N26", "url": "https://marcus.io/blog/interview-with-kitty-giraudel-of-n26", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c569569ca", "title": "2018 in review, outlook to 2019", "url": "https://marcus.io/blog/2018-in-review-outlook-2019", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c574bef26", "title": "Building accessible-app.com: Hello, Vue implementation", "url": "https://marcus.io/blog/a11y-app-hello-vue", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c57557eb3", "title": "About the latest articles of \"Signal v Noise\"", "url": "https://marcus.io/blog/about-the-latest-svn-articles", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c57996ab2", "title": "(Incomplete) List of web app accessibility folks", "url": "https://marcus.io/blog/web-app-a11y-folks", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c585d97b0", "title": "Building accessible-app.com: Menu Buttons [updated]", "url": "https://marcus.io/blog/a11y-app-menu-button", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5922c37d", "title": "Progressively enhanced menu buttons with details/summary [updated]", "url": "https://marcus.io/blog/progressive-enhanced-menus-details-summary", "published_at": "2025-04-05T07:42:08+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5179e168", "title": "Contextual components in PHP", "url": "https://marcus.io/blog/contextual-components-php", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5194e712", "title": "📯 letter@marcus.io Issue #4: A11y links, learnings and an idea", "url": "https://marcus.io/blog/letter-marcus-io-issue-4", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c52707eba", "title": "Building accessible-app.com: Very first steps", "url": "https://marcus.io/blog/a11y-app-very-first-steps", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c531d3b9f", "title": "Building accessible-app.com: Further steps together", "url": "https://marcus.io/blog/a11y-app-further-steps-together", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c532d0cc6", "title": "Improving Basecamp's accessibility - Interview with Michael Berger on how to make an existing web app more inclusive", "url": "https://marcus.io/blog/interview-with-michael-berger-of-basecamp", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c53838b9e", "title": "Building accessible-app.com: A specific app idea", "url": "https://marcus.io/blog/a11y-app-specific-app-idea", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c54594236", "title": "Building accessible-app.com: Project status, side benefits, and Routes", "url": "https://marcus.io/blog/a11y-app-status-side-benefits-routes", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c550084bb", "title": "Accessible routing with vue.js [updated]", "url": "https://marcus.io/blog/accessible-routing-vuejs", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c557f0350", "title": "Building accessible-app.com: Let's start building", "url": "https://marcus.io/blog/a11y-app-lets-start-building", "published_at": "2025-04-05T07:42:07+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4ca9e318", "title": "Resolutions for 2018", "url": "https://marcus.io/blog/2018-resolutions", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4cb98acb", "title": "Proactive 2018", "url": "https://marcus.io/blog/proactive-2018", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4cbda94f", "title": "A web freelancer in GDPR land: The Pool of Tears", "url": "https://marcus.io/blog/pool-of-tears", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4d53fbba", "title": "GDPR and SaaS: Data processing agreements only in business products? [updated with GitHub statement]", "url": "https://marcus.io/blog/gdpr-dpa-only-for-businesses", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4dad92c2", "title": "Developing websites for Apple Watch [Updated]", "url": "https://marcus.io/blog/websites-on-apple-watch", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4e8db344", "title": "[Übersetzung] Die EU-Urheberrechtsreform ist eine extrem schlechte Nachricht für alle, sogar - und besonders - für Wikipedia", "url": "https://marcus.io/blog/artikel13-schlechte-nachrichten", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4ee1d6c9", "title": "📯 letter@marcus.io Issue #1: Upload filters, Web Accessibility, and a video series for a great CMS", "url": "https://marcus.io/blog/letter-marcus-io-issue-1", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4f9cd3d6", "title": "📯 letter@marcus.io Issue #2: Firefox's a11y inspector, switches, EU Directive 2102, and ethics", "url": "https://marcus.io/blog/letter-marcus-io-issue-2", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c504a053d", "title": "Building accessible web apps - where to start?", "url": "https://marcus.io/blog/building-a11y-web-apps-where-to-start", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c5129110a", "title": "📯 letter@marcus.io Issue #3: Web (app) accessibility only", "url": "https://marcus.io/blog/letter-marcus-io-issue-3", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c513c5a42", "title": "A webmention link list", "url": "https://marcus.io/blog/a-webmention-linklist", "published_at": "2025-04-05T07:42:06+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c496ebca2", "title": "My hardware and software setup", "url": "https://marcus.io/blog/my-hardware-and-software-setup", "published_at": "2025-04-05T07:42:05+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c49a1b30b", "title": "Named mediaquery indicator", "url": "https://marcus.io/blog/named-mediaquery-indicator", "published_at": "2025-04-05T07:42:05+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4a743383", "title": "It's about time", "url": "https://marcus.io/blog/its-about-time", "published_at": "2025-04-05T07:42:05+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4b5f8c97", "title": "Accessibility with ProcessWire: Read more links", "url": "https://marcus.io/blog/a11y-with-processwire-read-more-links", "published_at": "2025-04-05T07:42:05+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4bb35f7b", "title": "A web freelancer in GDPR land: Down the rabbit-hole", "url": "https://marcus.io/blog/what-the-gdpr", "published_at": "2025-04-05T07:42:05+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c4be56cb2", "title": "Module Release: ProcessWire Accessibility Tools", "url": "https://marcus.io/blog/pwat", "published_at": "2025-04-05T07:42:05+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c48e03880", "title": "Next, please", "url": "https://marcus.io/blog/next-please", "published_at": "2025-04-05T07:42:04+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c48f9f048", "title": "Tutorial: Install the latest versions of a set of ProcessWire modules at once", "url": "https://marcus.io/blog/tutorial-install-the-latest-versions-of-a-set-of-processwire-modules-at-once", "published_at": "2025-04-05T07:42:04+00:00" }, { "id": "01a0d7f8-4fe0-7359-bd9a-294c49686542", "title": "WordPress and the perception of the work of developers", "url": "https://marcus.io/blog/wordpress-and-perception-of-the-work-of-developers", "published_at": "2025-04-05T07:42:04+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247b29d6a9", "title": "On Certification", "url": "https://marcus.io/blog/on-certification", "published_at": "2025-01-15T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247b68f2fd", "title": "80 / 20 accessibility", "url": "https://marcus.io/blog/80-20-accessibility", "published_at": "2024-08-16T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247ba82ccc", "title": "Best intention barriers (ARIA edition)", "url": "https://marcus.io/blog/best-intention-barriers-aria", "published_at": "2024-05-11T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247bbb1c7d", "title": "Happy (?) belated new year", "url": "https://marcus.io/blog/happy-new-year", "published_at": "2024-01-06T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247cb37ff7", "title": "Quick overview of \"What's New In WCAG 2.2\" explainer posts", "url": "https://marcus.io/blog/overview-of-wcag22-posts", "published_at": "2023-10-05T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247cfe87b2", "title": "Role-playing game", "url": "https://marcus.io/blog/role-playing-game", "published_at": "2023-09-07T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247d883f01", "title": "Contextual form errors and ARIA", "url": "https://marcus.io/blog/contextual-form-errors-aria", "published_at": "2023-08-03T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247e0ca2ba", "title": "Languages on Mastodon", "url": "https://marcus.io/blog/languages-on-mastodon", "published_at": "2022-11-24T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247e3dfee1", "title": "Farewell, 2021", "url": "https://marcus.io/blog/farewell-2021", "published_at": "2021-12-31T00:00:00+00:00" }, { "id": "01a0879f-9f20-7386-b704-01247e89c6fd", "title": "What's on the menu?", "url": "https://marcus.io/blog/whats-on-the-menu", "published_at": "2021-08-20T00:00:00+00:00" } ] posts Claim your blog
Back to marcus.io
Blog · corpus.blog/blogs/marcus.io/posts

marcus.io

marcus.io

2026

2025

2024

2023

2022

2021