41554 blogs · [ { "id": "01a0879e-d08f-7335-9efc-f9fc0eca5de7", "title": "Training A Tiny Model To Set Timers From Natural Language", "url": "https://maksimivanov.com/posts/training-a-tiny-model-to-set-timers/", "published_at": "2026-05-17T07:45:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc0ed41790", "title": "How To Record A Presentation Voiceover From A PDF", "url": "https://maksimivanov.com/posts/record-presentation-voiceover-from-pdf/", "published_at": "2026-05-16T19:15:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc0f055a96", "title": "How Mont Combines Slides And Video On One Timeline", "url": "https://maksimivanov.com/posts/mont-slides-and-video-timeline/", "published_at": "2026-05-16T19:05:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc0fd840cf", "title": "Architecture Literacy For Vibe Coders", "url": "https://maksimivanov.com/posts/architecture-literacy-for-vibe-coders/", "published_at": "2026-05-16T18:55:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc107d46ac", "title": "Use Subagents To Keep Long AI Coding Sessions Clean", "url": "https://maksimivanov.com/posts/use-subagents-to-keep-ai-context-clean/", "published_at": "2026-05-16T18:45:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc11029cdf", "title": "How To Record Your Screen In Mont", "url": "https://maksimivanov.com/posts/record-screen-in-mont/", "published_at": "2026-05-16T18:35:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc11684751", "title": "How To Make Your First Video In Mont", "url": "https://maksimivanov.com/posts/make-your-first-video-in-mont/", "published_at": "2026-05-16T18:25:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc117fdecb", "title": "How To Record A SaaS Demo Video From Screenshots", "url": "https://maksimivanov.com/posts/record-saas-demo-video-from-screenshots/", "published_at": "2026-05-16T17:55:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc11eb6e6a", "title": "Build It And They Will Not Come: Finding Users For Your SaaS", "url": "https://maksimivanov.com/posts/build-it-and-they-will-not-come/", "published_at": "2026-05-16T17:40:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc122e1dc9", "title": "Localize Your App Without Inventing Translation Keys For Every String", "url": "https://maksimivanov.com/posts/localize-your-app-without-translation-keys/", "published_at": "2026-05-16T17:05:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc123564cc", "title": "Map Your AI-Generated Codebase Before You Rewrite It", "url": "https://maksimivanov.com/posts/map-ai-generated-codebase-architecture/", "published_at": "2026-05-16T16:15:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1323d3e2", "title": "Where To Store API Keys: Stop Putting Secrets in .env Files", "url": "https://maksimivanov.com/posts/stop-storing-secret-keys-in-env-files/", "published_at": "2026-05-16T16:05:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc13790699", "title": "Claude Code Architecture: How to Keep AI-Generated Code Maintainable", "url": "https://maksimivanov.com/posts/claude-code-architecture/", "published_at": "2026-05-16T14:30:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc145bb00f", "title": "Git Staging Area Explained: What git add Really Does", "url": "https://maksimivanov.com/posts/git-staging-area-explained/", "published_at": "2026-05-16T13:30:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1522ce2d", "title": "Git Remote Origin, Push, Pull, and Fetch Explained", "url": "https://maksimivanov.com/posts/git-remote-origin-push-pull/", "published_at": "2026-05-16T13:25:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc159fd9d0", "title": "Resolve Git Merge Conflicts: A Practical Beginner Guide", "url": "https://maksimivanov.com/posts/resolve-git-merge-conflicts/", "published_at": "2026-05-16T13:24:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc15d052ce", "title": "Undo Changes in Git: Restore, Revert, Reset, and Clean", "url": "https://maksimivanov.com/posts/undo-changes-in-git/", "published_at": "2026-05-16T13:23:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1663494e", "title": "Git Log for Beginners: How to Read Commit History", "url": "https://maksimivanov.com/posts/git-log-for-beginners/", "published_at": "2026-05-16T13:22:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc168ef2a2", "title": "What Is a Git Commit? A Beginner-Friendly Mental Model", "url": "https://maksimivanov.com/posts/what-is-a-git-commit/", "published_at": "2026-05-16T13:21:00+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc16ff0c36", "title": "Command Line Applications Using React - Snake Game Tutorial", "url": "https://maksimivanov.com/posts/react-console-snake-game-tutorial/", "published_at": "2019-07-24T03:09:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc17180ede", "title": "Quokka Clone In 10 Minutes - VSCode Extention Tutorial", "url": "https://maksimivanov.com/posts/quokka-clone/", "published_at": "2019-07-22T03:09:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc17b96b7e", "title": "5 Git Tools You Must Use Today", "url": "https://maksimivanov.com/posts/top-git-tools/", "published_at": "2019-07-21T03:09:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc189582ba", "title": "Render HUGE Lists In React - React Window Tutorial", "url": "https://maksimivanov.com/posts/react-window/", "published_at": "2019-07-17T03:09:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc197715ed", "title": "Basic Webpack React Setup", "url": "https://maksimivanov.com/posts/basic-webpack-react-setup/", "published_at": "2019-06-22T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc19d04028", "title": "What Is DOM", "url": "https://maksimivanov.com/posts/what-is-dom/", "published_at": "2019-06-03T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc19e8195c", "title": "Fullstack GraphQL Beginner Tutorial - Instagram Clone", "url": "https://maksimivanov.com/posts/graphql-beginner/", "published_at": "2019-05-20T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1a6d7c98", "title": "Automate Git With Hooks And Husky", "url": "https://maksimivanov.com/posts/git-husky/", "published_at": "2019-05-01T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1b1dd058", "title": "Promises In Javascript", "url": "https://maksimivanov.com/posts/javascript-promises/", "published_at": "2019-04-14T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1bfdbe8b", "title": "React PropTypes", "url": "https://maksimivanov.com/posts/react-proptypes/", "published_at": "2019-04-02T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1c26731a", "title": "React Context API", "url": "https://maksimivanov.com/posts/react-context-api/", "published_at": "2019-03-29T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1c29658f", "title": "For Loop In Javascript", "url": "https://maksimivanov.com/posts/for-loops-javascript/", "published_at": "2019-03-24T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1d19e15a", "title": "Handling Errors In React", "url": "https://maksimivanov.com/posts/handling-errors-react/", "published_at": "2019-03-10T04:16:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1d87c28f", "title": "Controlled And Uncontrolled Forms In React", "url": "https://maksimivanov.com/posts/forms-in-react/", "published_at": "2019-03-10T04:09:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1e54ec51", "title": "React Synthetic Events", "url": "https://maksimivanov.com/posts/react-synthetic-events/", "published_at": "2019-03-10T03:09:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1e57eb17", "title": "React Pure Components", "url": "https://maksimivanov.com/posts/react-pure-component/", "published_at": "2019-03-10T02:10:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1f1cc66a", "title": "React Functional Components", "url": "https://maksimivanov.com/posts/react-functional-components/", "published_at": "2019-03-10T02:09:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc1fd9b26e", "title": "Pure Functions And Side Effects", "url": "https://maksimivanov.com/posts/pure-functions-and-side-effects/", "published_at": "2019-03-10T02:08:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc204aa308", "title": "React Lifecycle Methods", "url": "https://maksimivanov.com/posts/react-lifecycle-methods/", "published_at": "2019-03-10T01:59:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc20da8079", "title": "How To Add Named Anchor In Markdown", "url": "https://maksimivanov.com/posts/named-anchor-markdown/", "published_at": "2019-03-10T01:56:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2194e6c3", "title": "What Is The Difference Between Let, Const and Var In Javascript", "url": "https://maksimivanov.com/posts/javascript-let-const-var/", "published_at": "2019-03-09T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc21fa84c6", "title": "React Concept - Virtual DOM", "url": "https://maksimivanov.com/posts/virtual-dom/", "published_at": "2019-03-08T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2208673c", "title": "How To Localize React Application Using `react-intl`", "url": "https://maksimivanov.com/posts/how-to-localize-react-application-using-react-intl/", "published_at": "2019-02-28T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc22a256cb", "title": "React Dev Tools", "url": "https://maksimivanov.com/posts/react-dev-tools/", "published_at": "2019-02-27T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc22cbb3f9", "title": "Javascript `this`", "url": "https://maksimivanov.com/posts/javascript-this/", "published_at": "2019-02-26T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc239f9fb5", "title": "Handling Events In ReactJS", "url": "https://maksimivanov.com/posts/reactjs-handling-events/", "published_at": "2019-02-25T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc23b7694f", "title": "React Props", "url": "https://maksimivanov.com/posts/reactjs-props/", "published_at": "2019-02-24T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc23cbdf6d", "title": "Html Entities", "url": "https://maksimivanov.com/posts/html-entities/", "published_at": "2019-02-23T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc24c01613", "title": "Typescript Constructor Shorthand", "url": "https://maksimivanov.com/posts/typescript-constructor-shorthand/", "published_at": "2019-02-22T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2508406c", "title": "React Components", "url": "https://maksimivanov.com/posts/react-components/", "published_at": "2019-02-21T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc25aabf85", "title": "Lists And Keys In React", "url": "https://maksimivanov.com/posts/react-lists-and-keys/", "published_at": "2019-02-20T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc265212d0", "title": "Javascript Generators", "url": "https://maksimivanov.com/posts/javascript-generators/", "published_at": "2019-02-19T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc26b84fa3", "title": "Conditional Rendering In JSX", "url": "https://maksimivanov.com/posts/conditional-rendering-in-jsx/", "published_at": "2019-02-18T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc276446bb", "title": "Starting With JSX", "url": "https://maksimivanov.com/posts/starting-with-jsx/", "published_at": "2019-02-17T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2795721d", "title": "What's New in ES10? Javascript Features ES2019", "url": "https://maksimivanov.com/posts/new-es10-es2019-javascript-features/", "published_at": "2019-02-16T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc282af899", "title": "How To Install ReactJS", "url": "https://maksimivanov.com/posts/how-to-install-react/", "published_at": "2019-02-16T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc28c2ca47", "title": "Introduction To ReactJS", "url": "https://maksimivanov.com/posts/introduction-to-reactjs/", "published_at": "2019-02-15T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc292b959a", "title": "How do you serve a page with content in multiple languages?", "url": "https://maksimivanov.com/posts/serve-page-in-multiple-languages/", "published_at": "2019-02-03T01:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc29bb0a44", "title": "What is doctype in HTML documents? And why do you have to specify the doctype?", "url": "https://maksimivanov.com/posts/doctype-html/", "published_at": "2019-01-30T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2aa2755a", "title": "React App Video Course, Parts 6-10", "url": "https://maksimivanov.com/posts/weather-app-2/", "published_at": "2018-08-10T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2b8dd505", "title": "React App Video Course, Parts 1-5", "url": "https://maksimivanov.com/posts/weather-app/", "published_at": "2018-08-05T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2c89e748", "title": "Git Stash", "url": "https://maksimivanov.com/posts/git-stash/", "published_at": "2018-07-12T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2cf8d18c", "title": "Life Updates 2018", "url": "https://maksimivanov.com/posts/life-updates/", "published_at": "2018-06-13T07:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2de2976f", "title": "How To Comment React JSX Code", "url": "https://maksimivanov.com/posts/how-to-comment/", "published_at": "2018-05-13T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2ed06d6c", "title": "What Is React?", "url": "https://maksimivanov.com/posts/what-is-react/", "published_at": "2018-05-06T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2fb3a1fd", "title": "My First Javascript Talk", "url": "https://maksimivanov.com/posts/my-first-talk/", "published_at": "2018-04-21T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc2fc8b29b", "title": "Js Statements Vs Expressions", "url": "https://maksimivanov.com/posts/statements-expressions-js/", "published_at": "2018-04-20T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc301afc77", "title": "Do You Need Static Type Checking?", "url": "https://maksimivanov.com/posts/static-type-checking-js/", "published_at": "2018-04-08T05:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc30943a97", "title": "CryptoKitties Clone Part 3 Adding Frontend", "url": "https://maksimivanov.com/posts/gradient-coin-tutorial-part-3/", "published_at": "2018-03-28T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc317e5c2b", "title": "React 16 Course - Managing State", "url": "https://maksimivanov.com/posts/react-state/", "published_at": "2018-03-22T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc320bdc90", "title": "CryptoKitties Clone Part 2 Adding An Auction", "url": "https://maksimivanov.com/posts/gradient-coin-tutorial-part-2/", "published_at": "2018-03-19T02:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3253174f", "title": "Surviving The Javascript Type System", "url": "https://maksimivanov.com/posts/javascript-type-system/", "published_at": "2018-03-12T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3318cd5b", "title": "React 16 Course - Component Lifecycle Methods", "url": "https://maksimivanov.com/posts/react_lifecycle_methods/", "published_at": "2018-03-11T04:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3363340c", "title": "CryptoKitties Clone In 20 minutes. Non-fungible Token Tutorial", "url": "https://maksimivanov.com/posts/gradient-coin-tutorial/", "published_at": "2018-03-05T12:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc33bf5364", "title": "Firebase React Authentication Tutorial", "url": "https://maksimivanov.com/posts/firebase-react-tutorial/", "published_at": "2018-03-04T05:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3403ae84", "title": "Quick D3 Voronoi Example", "url": "https://maksimivanov.com/posts/quick-voronoi-example/", "published_at": "2018-02-28T15:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc34d923f8", "title": "Ethereum Distributed App With React Tutorial – Part 2", "url": "https://maksimivanov.com/posts/ethereum-react-dapp-tutorial-part-2/", "published_at": "2018-02-14T05:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc351376e2", "title": "Ethereum Distributed App With React Tutorial", "url": "https://maksimivanov.com/posts/ethereum-react-dapp-tutorial/", "published_at": "2018-02-13T05:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3568913c", "title": "React Native Mobx Tutorial - Part 2", "url": "https://maksimivanov.com/posts/react-native-mobx-tutorial-part-2/", "published_at": "2018-02-13T05:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc36422fe6", "title": "React Native Mobx Tutorial - Part 1", "url": "https://maksimivanov.com/posts/react-native-mobx-tutorial/", "published_at": "2018-01-01T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc364f7a84", "title": "React Native E2E Testing With Detox", "url": "https://maksimivanov.com/posts/react-native-e2e-tests-with-detox/", "published_at": "2017-11-29T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc36fa2d08", "title": "Reducers VS Transducers", "url": "https://maksimivanov.com/posts/reducers-vs-transducers/", "published_at": "2017-11-28T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc37456069", "title": "Why Should You Use Transform Class Properties Plugin", "url": "https://maksimivanov.com/posts/why-you-should-use-transform-class-properties-plugin/", "published_at": "2017-11-27T20:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc382e5630", "title": "Popup With ReactJS For Jekyll Blog", "url": "https://maksimivanov.com/posts/react-modal-window/", "published_at": "2017-11-23T20:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc38d5395d", "title": "Open/Closed Principle - SOLID", "url": "https://maksimivanov.com/posts/open-closed-principle/", "published_at": "2017-11-13T20:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc39ccd73c", "title": "Don't Mock What You Don't Own", "url": "https://maksimivanov.com/posts/dont-mock-what-you-dont-own/", "published_at": "2017-11-11T20:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3aa79589", "title": "Liskov Substitution Principle - SOLID", "url": "https://maksimivanov.com/posts/liskov-substitution-principle/", "published_at": "2017-11-10T20:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3b775e0f", "title": "Basic Karma JS Tutorial", "url": "https://maksimivanov.com/posts/basic-karma-js/", "published_at": "2017-10-08T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3bb03eb3", "title": "Add Specific Lines With Git Patch", "url": "https://maksimivanov.com/posts/git-add-patch/", "published_at": "2017-10-07T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3c30017f", "title": "Getting Schwifty With Pull Requests", "url": "https://maksimivanov.com/posts/getting-schwifty-with-pull-requests/", "published_at": "2017-10-01T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3cecc270", "title": "7 Skills Of An Effective Developer", "url": "https://maksimivanov.com/posts/skills-of-an-effective-developer/", "published_at": "2017-09-30T22:58:45+00:00" }, { "id": "01a0879e-d08f-7335-9efc-f9fc3d2b8f3c", "title": "Magical Mystery Guide For Async/Await In Javascript", "url": "https://maksimivanov.com/posts/magical-mystery-guide-for-async-await-in-javascript/", "published_at": "2017-09-28T22:58:45+00:00" } ] posts Claim your blog
Back to maksimivanov.com
Blog · corpus.blog/blogs/maksimivanov.com/posts

maksimivanov.com

maksimivanov.com

2026

2019

2018

2017