56,966 blogs · [ { "id": "01a087a5-7154-72fc-b524-1520586b86aa", "title": "The Role of Commands and Events in a Distributed System", "url": "https://michalzalecki.comrole-commands-and-events-distributed-system", "published_at": "2025-09-26T14:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152058b2efd9", "title": "Rethinking TDD: Modern AI Workflow for Better Software", "url": "https://michalzalecki.comrethinking-ttd-ai-workflow", "published_at": "2025-02-16T12:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205999196e", "title": "Functional Options Pattern in Golang", "url": "https://michalzalecki.comgolang-options-pattern", "published_at": "2022-06-18T20:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205a92b3c3", "title": "How to write better components unit tests", "url": "https://michalzalecki.comcomponents-unit-tests", "published_at": "2021-07-17T11:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205b00f1b5", "title": "Docker and Docker Compose for frontend and Node.js development", "url": "https://michalzalecki.comdocker-compose-node", "published_at": "2021-05-22T13:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205b3ddb2e", "title": "Micro Frontends with Module Federation in Monorepo", "url": "https://michalzalecki.commicro-frontends-module-federation-monorepo", "published_at": "2021-04-18T21:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205bb63f65", "title": "TypeScript: Template Literal Types", "url": "https://michalzalecki.comtypescript-template-literal-types", "published_at": "2020-11-14T21:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205c822178", "title": "How to structure frontend application", "url": "https://michalzalecki.comelegant-frontend-architecture", "published_at": "2020-11-10T18:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205ceb01c5", "title": "Review: Writing for Software Developers by Philip Kiely", "url": "https://michalzalecki.comwriting-for-software-developers-by-philip-kiely", "published_at": "2020-11-01T18:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205d2aa56f", "title": "Fighting legacy JavaScript code", "url": "https://michalzalecki.comfighting-legacy-javascript-code", "published_at": "2020-09-29T13:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205df175fe", "title": "How to use static code analysis to write quality JavaScript/TypeScript", "url": "https://michalzalecki.comstatic-code-analysis-javascript-typescript", "published_at": "2020-08-01T20:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205ee163dc", "title": "Review: Practical Microservices by Ethan Garofolo", "url": "https://michalzalecki.comreview-practical-microservices-by-ethan-garofolo", "published_at": "2020-06-15T14:40:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15205fae13ca", "title": "Structured logging as JSON in Google Cloud Functions", "url": "https://michalzalecki.comstructured-json-log-google-cloud-functions", "published_at": "2020-04-07T14:40:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520600de36d", "title": "NGINX: Listen on $PORT env in Docker", "url": "https://michalzalecki.comnginx-listen-on-port-docker", "published_at": "2020-02-27T13:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152060c82b4a", "title": "Caching headers: A practical guide for frontend developers", "url": "https://michalzalecki.comcaching-headers", "published_at": "2020-02-25T19:29:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152060cdd2da", "title": "Do Not Relay on NODE_ENV. Hygiene of Environment Variables", "url": "https://michalzalecki.comdo-not-relay-on-node-env", "published_at": "2019-11-24T13:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152060fd08dd", "title": "How to Set up a Secure SFTP Server", "url": "https://michalzalecki.comcreate-secured-sftp-server-on-gcp-aws-azure", "published_at": "2019-10-20T08:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206101108a", "title": "Generate Unique Id in the Browser Without a Library", "url": "https://michalzalecki.comgenerate-unique-id-in-the-browser-without-a-library", "published_at": "2019-08-29T03:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152061fa3c08", "title": "Just Enough Kubernetes for JavaScript Developers", "url": "https://michalzalecki.comjust-enough-kubernetes-for-javascript-developers", "published_at": "2019-07-28T11:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206277801e", "title": "Upload source maps to Rollbar", "url": "https://michalzalecki.comupload-source-maps-to-rollbar", "published_at": "2019-07-16T09:20:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520633db5d3", "title": "Bridging Static and Runtime Types with io-ts", "url": "https://michalzalecki.combridging-static-and-runtime-types-with-io-ts", "published_at": "2019-04-26T18:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520640357a1", "title": "Versatility and use cases of React useEffect hook", "url": "https://michalzalecki.comversatility-and-use-cases-of-react-use-effect-hook", "published_at": "2019-04-05T23:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520645d31f5", "title": "Pattern matching and type safety in TypeScript", "url": "https://michalzalecki.compattern-matching-and-type-safety-in-typescript", "published_at": "2019-03-17T00:30:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520648e64d4", "title": "An elegant solution for handling errors in Express", "url": "https://michalzalecki.coman-elegant-solution-for-handling-errors-in-express", "published_at": "2018-12-08T18:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152065866d34", "title": "Solve code sharing and setup project with Lerna and monorepo", "url": "https://michalzalecki.comsolve-code-sharing-and-setup-project-with-lerna-and-monorepo", "published_at": "2018-11-19T17:40:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206604fff6", "title": "Using Dokku with Docker, Let's Encrypt HTTPS, and redirects", "url": "https://michalzalecki.comusing-dokku-with-docker-let-s-encrypt-https-and-redirects", "published_at": "2018-09-23T18:20:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520664ae597", "title": "Integration tests with web3, Ganache CLI and Jest", "url": "https://michalzalecki.comintegration-tests-with-web3-ganache-cli-and-jest", "published_at": "2018-09-15T13:15:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152066e753ce", "title": "Curated list of podcasts for software developers", "url": "https://michalzalecki.comcurated-list-of-podcasts-for-software-developers", "published_at": "2018-08-26T18:30:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152067d266de", "title": "Hyperledger Fabric: Confidentiality on the Blockchain", "url": "https://michalzalecki.comhyperledger-fabric-confidentiality-on-the-blockchain", "published_at": "2018-08-09T15:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152068b3db57", "title": "Using IPFS with Ethereum for Data Storage", "url": "https://michalzalecki.comusing-ipfs-with-ethereum-for-data-storage", "published_at": "2018-07-05T15:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152068c9f051", "title": "Set up IPFS node on the server", "url": "https://michalzalecki.comset-up-ipfs-node-on-the-server", "published_at": "2018-06-17T15:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152069292bbb", "title": "An Intro to Nebulas for Ethereum Developers", "url": "https://michalzalecki.coman-intro-to-nebulas-for-ethereum-developers", "published_at": "2018-05-29T15:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520695aaecc", "title": "Integration tests and mocking web3 apps", "url": "https://michalzalecki.comintegration-tests-and-mocking-web3-apps", "published_at": "2018-05-26T13:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152069885938", "title": "Register .test domain with ENS", "url": "https://michalzalecki.comregister-test-domain-with-ens", "published_at": "2018-05-03T10:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206a4ec439", "title": "How to verify smart contract on Etherscan?", "url": "https://michalzalecki.comhow-to-verify-smart-contract-on-etherscan", "published_at": "2018-04-28T17:05:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206a992d09", "title": "Docker Compose for Node.js and PostgreSQL", "url": "https://michalzalecki.comdocker-compose-for-nodejs-and-postgresql", "published_at": "2018-03-31T20:40:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206b5e32f7", "title": "Deploying smart contracts with Truffle", "url": "https://michalzalecki.comdeploying-smart-contracts-with-truffle", "published_at": "2018-03-09T08:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206be96ee7", "title": "Ethereum: Test-driven development with Solidity (part 2)", "url": "https://michalzalecki.comethereum-test-driven-introduction-to-solidity-part-2", "published_at": "2018-02-25T15:11:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206c6cc9c6", "title": "Ethereum: Test-driven development with Solidity (part 1)", "url": "https://michalzalecki.comethereum-test-driven-introduction-to-solidity", "published_at": "2018-02-25T15:10:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206cb71f40", "title": "Using Sequelize with TypeScript", "url": "https://michalzalecki.comusing-sequelize-with-typescript", "published_at": "2018-01-27T20:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206ced1f56", "title": "Convert files for the web from your terminal", "url": "https://michalzalecki.comconvert-files-for-the-web-from-your-terminal", "published_at": "2018-01-21T23:50:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206d734ead", "title": "Nominal typing techniques in TypeScript", "url": "https://michalzalecki.comnominal-typing-in-typescript", "published_at": "2017-12-27T17:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206d8158b4", "title": "Testing redux-thunk like you always want it", "url": "https://michalzalecki.comtesting-redux-thunk-like-you-always-want-it", "published_at": "2017-12-24T09:15:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206dfd0f2e", "title": "Fixtures, the way to manage sample and test data", "url": "https://michalzalecki.comfixtures-the-way-to-manage-sample-and-test-data", "published_at": "2017-11-18T19:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206e6c8085", "title": "Creating a TypeScript library with a minimal setup", "url": "https://michalzalecki.comcreating-typescript-library-with-a-minimal-setup", "published_at": "2017-11-04T14:45:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206e849a97", "title": "Render React portals on the server", "url": "https://michalzalecki.comrender-react-portals-on-the-server", "published_at": "2017-10-21T13:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206ee00ce8", "title": "Writing clean code with memoized event handlers", "url": "https://michalzalecki.comreact-memoized-event-handlers", "published_at": "2017-09-10T22:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206f8d4f04", "title": "Optimize React build for production with webpack", "url": "https://michalzalecki.comoptimize-react-build-for-production-with-webpack", "published_at": "2017-08-12T01:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15206ffe78b7", "title": "Converting DOCX to PDF using Python", "url": "https://michalzalecki.comconverting-docx-to-pdf-using-python", "published_at": "2017-07-03T22:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520705400eb", "title": "Implementing Geofencing with HERE", "url": "https://michalzalecki.comimplementing-geofencing-with-here", "published_at": "2017-06-17T17:05:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520706d9959", "title": "The Best React Boilerplate: DIY", "url": "https://michalzalecki.comthe-best-react-boilerplate", "published_at": "2017-05-21T22:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520712f40d9", "title": "Why using localStorage directly is a bad idea", "url": "https://michalzalecki.comwhy-using-localStorage-directly-is-a-bad-idea", "published_at": "2017-04-30T22:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15207211844e", "title": "React components and class properties", "url": "https://michalzalecki.comreact-components-and-class-properties", "published_at": "2017-03-04T14:45:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520721d6ca1", "title": "Custom root domain and SSL on Heroku", "url": "https://michalzalecki.comcustom-root-domain-and-ssl-on-heroku", "published_at": "2016-12-30T23:50:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520721ed1ba", "title": "Why I use double quotes in JavaScript", "url": "https://michalzalecki.comwhy-i-use-doublequotes-in-javascript", "published_at": "2016-08-27T14:34:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152072dbe27c", "title": "Set up Selenium for Firefox and Chrome", "url": "https://michalzalecki.comsetup-selenium-with-geckodriver-and-chromedriver", "published_at": "2016-08-17T22:08:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152072fce278", "title": "Progressive Web Apps with Webpack", "url": "https://michalzalecki.comprogressive-web-apps-with-webpack", "published_at": "2016-08-06T11:08:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152073af89ea", "title": "TypeScript vs Flow", "url": "https://michalzalecki.comtypescript-vs-flow", "published_at": "2016-07-14T22:25:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152073cbbecb", "title": "Simplifying data with object mappers", "url": "https://michalzalecki.comsimplifying-data-with-object-mappers", "published_at": "2016-06-30T22:27:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152073f6376c", "title": "Reduce side effects in React/Redux", "url": "https://michalzalecki.comreduce-side-effects-in-react-redux", "published_at": "2016-05-09T22:25:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-1520746e9aee", "title": "Use RxJS with React", "url": "https://michalzalecki.comuse-rxjs-with-react", "published_at": "2016-03-23T18:00:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152075398308", "title": "RxJS and Cycle.js", "url": "https://michalzalecki.comrxjs-and-cyclejs", "published_at": "2016-02-13T11:18:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152075dbdfa6", "title": "The problem of Flux", "url": "https://michalzalecki.comthe-problem-of-flux", "published_at": "2015-12-23T14:10:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-152075f9e685", "title": "Lazy load AngularJS with Webpack", "url": "https://michalzalecki.comlazy-load-angularjs-with-webpack", "published_at": "2015-06-23T20:22:00+00:00" }, { "id": "01a087a5-7154-72fc-b524-15207602a54d", "title": "ECMAScript 6 Overview", "url": "https://michalzalecki.comecmascript-6-overview", "published_at": "2015-02-16T13:06:00+00:00" } ] posts Claim your blog
Back to michalzalecki.com
Blog · corpus.blog/blogs/michalzalecki.com/posts

michalzalecki.com

michalzalecki.com

2025

2022

2021

2020

2019

2018

2017

2016

2015