<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description>Full-stack web-developer from 🇺🇦 Ukraine, currently living in 🇪🇸 Spain.&#xA;&#xA;Addicted to programming since I was 11. A true open-source believer. Occasionally I do art, tech hobby projects, and play Nintendo with my son. &#xA;&#xA;https://voskoboinyk.com/</description><link>https://bsky.app/profile/e1himself.bsky.social</link><title>@e1himself.bsky.social - Ivan Voskoboinyk</title><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3mjzsgtrjyc2b</link><description>From F-Droid to independent devs, the entire Android ecosystem is under threat from Google&#39;s new mandatory registration decree. See why 67+ orgs are saying no: keepandroidopen.org&#xA;https://keepandroidopen.org</description><pubDate>21 Apr 2026 20:17 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3mjzsgtrjyc2b</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3m5xzoeuozk2w</link><description>What&#39;s the point of writing tech blog if everything has already been written online?&#xA;&#xA;Well, sometimes you hit a problem that no one else had before. Googling the error message yields nothing. Not anymore. &#xA;&#xA;You&#39;re welcome, &#34;the next person&#34; :)&#xA;&#xA;https://voskoboinyk.com/posts/2025-11-19-dokploy-port-mapping-problem&#xA;&#xA;#dokploy #traefik</description><pubDate>19 Nov 2025 10:19 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3m5xzoeuozk2w</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3lyg76sn3bs2e</link><description>Last weekend I&#39;ve migrated my self-hosted blog to Dokploy.&#xA;&#xA;AND IT&#39;S FREAKING AMAZING! 🤩&#xA;&#xA;Dokploy looks, feels, and works like a million-dollar project—yet it’s free and open-source. &#xA;&#xA;Pitfalls and observations in my blog:&#xA;https://voskoboinyk.com/posts/2025-09-09-dockploy-is-amazing</description><pubDate>09 Sep 2025 17:03 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3lyg76sn3bs2e</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3lwenhryc4c2h</link><description>Welcome my new package:&#xA;https://github.com/technically-php/cascade-container&#xA;&#xA;Modern PSR-11 based Service Container for PHP8, with a unique superpower: cascading layering. Fork it into a new isolated container, inheriting all services.&#xA;&#xA;Let me know what you think 🖖</description><pubDate>14 Aug 2025 15:23 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3lwenhryc4c2h</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3lr6aazwvfk2o</link><description>Encapsulation is tricky when authoring UI components library for the web, it requires discipline.&#xA;&#xA;Here&#39;s my rule-of-thumb to separate responsibility of CSS styling:&#xA;https://voskoboinyk.com/posts/2025-06-09-ui-components-encapsulation&#xA;&#xA;#css #web #ui #encapsulation</description><pubDate>09 Jun 2025 11:05 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3lr6aazwvfk2o</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3lnijaly6ic26</link><description>Serious Dev Talk + Silly GIFs = Remote Team Magic ✨&#xA;&#xA;The one super simple trick I&#39;ve found that works really well to enhance my remote team communications:&#xA;&#xA;https://voskoboinyk.com/posts/2025-04-23-gif-memes-to-enhance-remote-communication?utm_source=bluesky&#xA;&#xA;#blog #remote #team #communication</description><pubDate>23 Apr 2025 15:31 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3lnijaly6ic26</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3lguur4gdgs2c</link><description>I&#39;ve been surprized to know that developing email markup is still a pain in the ass, with limited availability of modern tools.&#xA;&#xA;The only solution that worked for as at #Prezly was to patch #ReactEmail, and port #MJML components to #React ourselves.&#xA;&#xA;https://voskoboinyk.com/posts/2025-01-29-state-of-email-markup&#xA;&#xA;#blog #dev</description><pubDate>29 Jan 2025 11:33 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3lguur4gdgs2c</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3lelu25vsrk2z</link><description>We&#39;ve just published our @prezly/react-promise-modal library v2.0 🎉&#xA;&#xA;This is the most convenient way of spawing modals in React. Period. &#xA;&#xA;Check the code: &#xA;https://github.com/prezly/react-promise-modal&#xA;&#xA;Read the cover blog post:&#xA;https://voskoboinyk.com/posts/2024-12-31-fixing-react-promise-modals&#xA;&#xA;Cheers! 🖖&#xA;&#xA;#react #modals #prezly #opensource #blog</description><pubDate>31 Dec 2024 10:36 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3lelu25vsrk2z</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3leatmxbz422g</link><description>The best way for calling confirmation and data prompt modals in React is a promise-returning async function. &#xA;&#xA;But somehow noone teaches you this. Modals in tutorials are always declarative, and never imperative.&#xA;&#xA;https://voskoboinyk.com/posts/2024-12-27-inventing-react-promise-modals-part-1&#xA;&#xA;#react #modals #prezly #opensource #blog&#xA;https://voskoboinyk.com/posts/2024-12-27-inventing-react-promise-modals-part-1?x=1</description><pubDate>27 Dec 2024 01:29 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3leatmxbz422g</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3le5mnlz2qs2a</link><description>Found this super-simple way of self-hosting the ✅ #checkmark for my #nost profile using @netlify.com: &#xA;https://voskoboinyk.com/posts/2024-12-23-self-hosting-nostr-identification&#xA;&#xA;Will move it the main domain later. But for now it does the job and costs nothing.&#xA;&#xA;Someone please let me know if this makes any sense 😅&#xA;&#xA;Cheers! 🖖</description><pubDate>25 Dec 2024 18:46 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3le5mnlz2qs2a</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3le5jhaikt22r</link><description>Re: @browniebroke.com on https://browniebroke.com/tils/bluesky-action-intent-links/&#xA;&#xA;I&#39;ve been facing the same problem today. Apparently, it only auto-links URLs, and keeps the usernames as plain text.&#xA;&#xA;The best I could do was to put the username last in the pre-composed message, so it shows the dropdown right away.</description><pubDate>25 Dec 2024 17:49 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3le5jhaikt22r</guid></item><item><link>https://bsky.app/profile/e1himself.bsky.social/post/3le2txtwzps2b</link><description>Hello world!&#xA;&#xA;It&#39;s been almost 4 years since I&#39;ve deleted my Twitter account. &#xA;&#xA;And here I am, taking a shot to start microblogging again. Somehow, I am optimistic it will be better this time :) &#xA;&#xA;I&#39;ll write notes on web development, open source, tech, and life. Subscribe and stay tuned!&#xA;&#xA;Cheers!🖖</description><pubDate>24 Dec 2024 16:19 +0000</pubDate><guid isPermaLink="false">at://did:plc:lw2pewdnrfgl346i4sckvhzr/app.bsky.feed.post/3le2txtwzps2b</guid></item></channel></rss>