{
    "version": "https://jsonfeed.org/version/1",
    "title": "Manak Upadhyay",
    "home_page_url": "https://manakupadhyay.in/",
    "feed_url": "https://manakupadhyay.in/feed.json",
    "description": "Software engineer, currently being outperformed by matrix multiplication. Writing about JavaScript, web performance and distributed systems.",
    "icon": "https://manakupadhyay.in/icon.svg",
    "author": {
        "name": "Manak Upadhyay",
        "url": "https://manakupadhyay.in/"
    },
    "items": [
        {
            "id": "https://manakupadhyay.in/blog/scaling-database-reads",
            "content_html": "Practical techniques to scale database reads, from replication and indexing to denormalization and materialized views.",
            "url": "https://manakupadhyay.in/blog/scaling-database-reads",
            "title": "6 Techniques to Scale Database Reads",
            "date_modified": "2024-12-11T00:00:00.000Z",
            "date_published": "2024-12-11T00:00:00.000Z",
            "tags": [
                "Database",
                "Scaling",
                "Replication",
                "Indexing",
                "Caching",
                "Denormalization",
                "Connection Pooling",
                "Materialized Views",
                "SQL",
                "System Design",
                "Performance",
                "Distributed Systems",
                "CQRS",
                "Read Optimization"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/multiple-git-identities",
            "content_html": "How to set up separate SSH keys and git configs for work and personal GitHub accounts on the same laptop.",
            "url": "https://manakupadhyay.in/blog/multiple-git-identities",
            "title": "Managing Multiple Git Identities on One Machine",
            "date_modified": "2024-04-10T00:00:00.000Z",
            "date_published": "2024-04-10T00:00:00.000Z",
            "tags": [
                "Git",
                "SSH",
                "GitHub",
                "Multiple Accounts",
                "SSH Config",
                "Git Config",
                "Developer Tools",
                "DevOps",
                "Terminal",
                "Productivity",
                "macOS"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/inp",
            "content_html": "Understanding Interaction to Next Paint (INP), how it's measured, and how to optimize it for better responsiveness.",
            "url": "https://manakupadhyay.in/blog/inp",
            "title": "Interaction to Next Paint (INP)",
            "date_modified": "2023-11-16T00:00:00.000Z",
            "date_published": "2023-11-16T00:00:00.000Z",
            "tags": [
                "Interaction to Next Paint",
                "INP",
                "Core Web Vitals",
                "Web Performance",
                "Responsiveness",
                "User Experience",
                "Performance Optimization",
                "SEO",
                "Google Metrics",
                "Web Development"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/fid",
            "content_html": "Understanding First Input Delay (FID), why it happens, and how to optimize it for better user experience.",
            "url": "https://manakupadhyay.in/blog/fid",
            "title": "First Input Delay (FID)",
            "date_modified": "2023-11-16T00:00:00.000Z",
            "date_published": "2023-11-16T00:00:00.000Z",
            "tags": [
                "First Input Delay",
                "FID",
                "Core Web Vitals",
                "Web Performance",
                "User Experience",
                "Performance Optimization",
                "SEO",
                "Google Metrics",
                "Web Development",
                "JavaScript Performance"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/lcp",
            "content_html": "Understanding Largest Contentful Paint (LCP)",
            "url": "https://manakupadhyay.in/blog/lcp",
            "title": "Largest Contentful Paint (LCP)",
            "date_modified": "2023-10-22T00:00:00.000Z",
            "date_published": "2023-10-22T00:00:00.000Z",
            "tags": [
                "Largest Contentful Paint",
                "LCP",
                "Core Web Vitals",
                "Web Performance",
                "Performance Optimization",
                "Page Load Time",
                "SEO",
                "Google Metrics",
                "Performance Metrics",
                "Web Development",
                "Image Optimization",
                "CDN",
                "Server Response Time"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/cls",
            "content_html": "Understanding Cumulative Layout Shift (CLS)",
            "url": "https://manakupadhyay.in/blog/cls",
            "title": "Cumulative Layout Shift (CLS)",
            "date_modified": "2023-10-22T00:00:00.000Z",
            "date_published": "2023-10-22T00:00:00.000Z",
            "tags": [
                "Cumulative Layout Shift",
                "CLS",
                "Core Web Vitals",
                "Web Performance",
                "Visual Stability",
                "Layout Shift",
                "Performance Optimization",
                "SEO",
                "Google Metrics",
                "Web Development",
                "User Experience",
                "FOIT",
                "FOUT",
                "CSS Transform"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/core-web-vitals",
            "content_html": "Learn about Core Web Vitals, Google's key performance metrics that impact SEO rankings, and how to measure and optimize them for better user experience.",
            "url": "https://manakupadhyay.in/blog/core-web-vitals",
            "title": "What are Core Web Vitals?",
            "date_modified": "2023-10-21T00:00:00.000Z",
            "date_published": "2023-10-21T00:00:00.000Z",
            "tags": [
                "Core Web Vitals",
                "Web Performance",
                "SEO",
                "Google Rankings",
                "LCP",
                "CLS",
                "INP",
                "PageSpeed",
                "Lighthouse",
                "Performance Optimization",
                "Web Development",
                "UX",
                "Chrome User Experience Report",
                "Field Data",
                "Lab Data",
                "Performance Metrics"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/event-propagation",
            "content_html": "Understand how events travel through the DOM in JavaScript, from bubbling and capturing to event delegation and why it matters for performance.",
            "url": "https://manakupadhyay.in/blog/event-propagation",
            "title": "JavaScript Event Propagation",
            "date_modified": "2022-02-25T00:00:00.000Z",
            "date_published": "2022-02-25T00:00:00.000Z",
            "tags": [
                "JavaScript",
                "Event Propagation",
                "Event Bubbling",
                "Event Capturing",
                "Event Delegation",
                "DOM Events",
                "addEventListener",
                "stopPropagation",
                "JavaScript Tutorial",
                "Beginner JavaScript",
                "Web Development",
                "Frontend",
                "JavaScript Interview Questions",
                "Event Handling",
                "Event Trickling"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/javascript-classes",
            "content_html": "Learn how JavaScript classes work under the hood, from constructors and inheritance to private fields and static methods, with practical examples.",
            "url": "https://manakupadhyay.in/blog/javascript-classes",
            "title": "Classes in JavaScript",
            "date_modified": "2022-02-20T00:00:00.000Z",
            "date_published": "2022-02-20T00:00:00.000Z",
            "tags": [
                "JavaScript",
                "Classes",
                "OOP",
                "Constructor",
                "Inheritance",
                "Prototypes",
                "Static Methods",
                "Private Fields",
                "Getters",
                "Setters",
                "ES6",
                "JavaScript Tutorial",
                "Beginner JavaScript",
                "Object Oriented Programming",
                "JavaScript Interview Questions"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/javascript-value-vs-reference-types",
            "content_html": "Understanding how JavaScript handles primitive and complex data types, and the difference between pass-by-value and pass-by-reference.",
            "url": "https://manakupadhyay.in/blog/javascript-value-vs-reference-types",
            "title": "JavaScript: Value vs Reference Types",
            "date_modified": "2022-02-11T00:00:00.000Z",
            "date_published": "2022-02-11T00:00:00.000Z",
            "tags": [
                "JavaScript",
                "Data Types",
                "Memory Management",
                "Primitives",
                "Objects",
                "Pass by Value",
                "Pass by Reference",
                "Programming Fundamentals"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/javascript-functions",
            "content_html": "Difference between Function Declaration and Function Expression in JavaScript.",
            "url": "https://manakupadhyay.in/blog/javascript-functions",
            "title": "JavaScript: Function Declaration vs Function Expression",
            "date_modified": "2022-02-08T00:00:00.000Z",
            "date_published": "2022-02-08T00:00:00.000Z",
            "tags": [
                "JavaScript",
                "Functions",
                "Function Declaration",
                "Function Expression",
                "Function Statement",
                "Function Definition",
                "Anonymous Function",
                "Named Function Expression",
                "Hoisting",
                "Function Hoisting",
                "Scope",
                "JavaScript Scope",
                "JS Basics",
                "JavaScript Tutorial",
                "ES5 vs ES6",
                "Beginner JavaScript",
                "JavaScript Interview Questions"
            ]
        },
        {
            "id": "https://manakupadhyay.in/blog/javascript-execution-context-and-the-call-stack",
            "content_html": "A deep dive into how JavaScript manages code execution.",
            "url": "https://manakupadhyay.in/blog/javascript-execution-context-and-the-call-stack",
            "title": "JavaScript: Execution Context and the Call Stack",
            "date_modified": "2022-01-16T00:00:00.000Z",
            "date_published": "2022-01-16T00:00:00.000Z",
            "tags": [
                "JavaScript",
                "Execution Context",
                "Call Stack",
                "JavaScript Engine",
                "Hoisting",
                "Variable Environment",
                "Memory Phase",
                "Single Threaded",
                "Synchronous JavaScript",
                "JS Internals",
                "Debugging JavaScript",
                "JavaScript Tutorial",
                "Web development"
            ]
        }
    ]
}