56,966 blogs · [ { "id": "01a0cf3f-6b3d-7367-8fe0-c73b5a725a33", "title": "From Video Course to Second Brain", "url": "https://shramko.dev/blog/second-brain-from-video", "published_at": "2026-09-18T09:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9018d63a4", "title": "How to Fix MissingSharp Error in Astro.js on Vercel", "url": "https://shramko.dev/blog/astro-image-on-vercel", "published_at": "2026-05-06T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9027c6e75", "title": "Build Your Own Link Tree with Astro.js and Vercel", "url": "https://shramko.dev/blog/linktree", "published_at": "2026-05-06T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae905183bbf", "title": "What Is Astro? The Complete Framework Guide for 2026", "url": "https://shramko.dev/blog/astro", "published_at": "2026-05-06T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90c1b232d", "title": "Introducing the new shramko.dev", "url": "https://shramko.dev/blog/introducing-the-new-shramko.dev", "published_at": "2026-05-04T12:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fa4792ca", "title": "Shiki Class-Based Themes", "url": "https://shramko.dev/blog/shiki-class-based-themes-nextjs-mdx", "published_at": "2026-04-19T22:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fb0f5180", "title": "Total Build Time Lies", "url": "https://shramko.dev/blog/build-time-lies", "published_at": "2026-04-17T22:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fc451edd", "title": "The early return pattern in JavaScript", "url": "https://shramko.dev/blog/the-early-return-pattern-in-javascript", "published_at": "2026-04-03T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fb4a48c2", "title": "Elements & Children Props", "url": "https://shramko.dev/blog/react-elements-children", "published_at": "2025-12-07T10:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90055e95a", "title": "Semantic Versioning in npm", "url": "https://shramko.dev/blog/npm-semantic-versioning", "published_at": "2025-12-07T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9028e2697", "title": "Conventional Commits", "url": "https://shramko.dev/blog/conventional-commits", "published_at": "2025-12-07T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9042d8348", "title": "Mastering HTML Class Naming: Boosting CSS Efficiency", "url": "https://shramko.dev/blog/class-naming-conventions", "published_at": "2025-12-07T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9096d22fe", "title": "Difference between absolute and relative URL in HTML", "url": "https://shramko.dev/blog/difference-between-absolute-and-relative-url", "published_at": "2025-12-07T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90b7af587", "title": "for...in vs for...of Loops", "url": "https://shramko.dev/blog/for-in-vs-for-of", "published_at": "2025-12-07T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90b4167c0", "title": "Dispatch table in javascript", "url": "https://shramko.dev/blog/dispatch-tables", "published_at": "2025-12-01T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fc14b227", "title": "SEO Audit with AI: 56 Posts, One Afternoon", "url": "https://shramko.dev/blog/ai-seo-audit", "published_at": "2025-11-30T22:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae903b36d70", "title": "How to add SSH keys to your GitHub account", "url": "https://shramko.dev/blog/how-to-create-ssh-keys", "published_at": "2025-09-15T12:29:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90ada19d8", "title": "My \"every programmer should know\" list - 2025", "url": "https://shramko.dev/blog/useful-articles", "published_at": "2025-07-21T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fe57c1a8", "title": "Ignore files in Git without adding them to .gitignore", "url": "https://shramko.dev/blog/gitignore-is-not-enough", "published_at": "2025-06-01T10:30:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fcca0657", "title": "Generic Type Parameters in TypeScript", "url": "https://shramko.dev/blog/generic-type-parameters", "published_at": "2025-05-31T15:01:43+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8fd5c7adc", "title": "Custom Hooks Pitfalls", "url": "https://shramko.dev/blog/react-hooks-pitfalls", "published_at": "2025-05-31T09:01:43+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8ff387a99", "title": "React Re-Renders", "url": "https://shramko.dev/blog/react-rerender", "published_at": "2025-05-03T09:01:43+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae8ff79a0ba", "title": "GraphQL Certified – How I earned my certification", "url": "https://shramko.dev/blog/apollo-graphql-certification", "published_at": "2025-03-13T09:01:43+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9006136be", "title": "Why Are JavaScript Naming Conventions Important?", "url": "https://shramko.dev/blog/javascript-naming-conventions", "published_at": "2025-02-02T09:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae900eca776", "title": "Discriminated Unions in TypeScript", "url": "https://shramko.dev/blog/discriminated-unions", "published_at": "2024-09-14T00:00:00+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90373dfa0", "title": "How to decrease deployment time by 44% with pnpm", "url": "https://shramko.dev/blog/pnpm", "published_at": "2024-06-16T21:34:24+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9039158fa", "title": "Unsubscribe from Email Newsletters Immediately", "url": "https://shramko.dev/blog/unsubscribe-immediately", "published_at": "2024-04-08T11:47:44+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae905bafe05", "title": "Node Version Manager", "url": "https://shramko.dev/blog/nvm", "published_at": "2023-02-25T17:21:50+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae906a25552", "title": "Cross-browser testing", "url": "https://shramko.dev/blog/cross-browser-testing", "published_at": "2023-02-24T22:06:42+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae906d1ffcf", "title": "Postgres connect to database with URL", "url": "https://shramko.dev/blog/postgres-connect-url", "published_at": "2023-02-09T12:43:36+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9079dce0b", "title": "JavaScript 101: Arrays", "url": "https://shramko.dev/blog/js-arrays", "published_at": "2022-11-25T17:39:11+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae9088dd0fa", "title": "PHPStorm Allow Network Connections on Startup", "url": "https://shramko.dev/blog/phpstorm-allow-network", "published_at": "2022-10-26T16:49:52+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae909ee4ac4", "title": "How to create a grid with flexbox in React", "url": "https://shramko.dev/blog/react-flexbox-grid", "published_at": "2022-10-10T00:35:10+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90e10b971", "title": "How to fix \"__dirname is not defined in ES module scope\"", "url": "https://shramko.dev/blog/dirname-error", "published_at": "2022-09-25T12:03:53+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90d44639f", "title": "Expressions vs Statements", "url": "https://shramko.dev/blog/expressions-statements", "published_at": "2022-08-07T11:37:59+00:00" }, { "id": "01a087e0-26af-71b8-af18-aae90ced49a6", "title": "How to use ESLint with TypeScript", "url": "https://shramko.dev/blog/eslint-with-typescript", "published_at": "2022-08-02T20:00:45+00:00" } ] posts Claim your blog
Back to shramko.dev
Blog · corpus.blog/blogs/shramko.dev/posts

shramko.dev

shramko.dev

2026

2025

2024

2023

2022