<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Yampier Medina</title>
        <link>https://www.jpmti2016.com</link>
        <description>I’m Yampier, a Forward Deployed Engineer based in Indianapolis. I build and ship working software with Next.js, Tailwind CSS, and AWS Amplify — and I apply AI with engineering discipline to solve the real, last-mile problems that hold businesses back.</description>
        <lastBuildDate>Thu, 17 Sep 2026 03:49:13 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Yampier Medina</title>
            <url>https://www.jpmti2016.com/og</url>
            <link>https://www.jpmti2016.com</link>
        </image>
        <copyright>All rights reserved 2026, Yampier Medina</copyright>
        <item>
            <title><![CDATA[The TypeScript error only CI could see: amplify_outputs.json, type-only imports, and a green local gate]]></title>
            <link>https://www.jpmti2016.com/articles/the-typescript-error-only-ci-could-see</link>
            <guid>https://www.jpmti2016.com/articles/the-typescript-error-only-ci-could-see</guid>
            <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[An Amplify Gen 2 staging deploy failed with TS2307 on amplify_outputs.json while lint, 1622 tests, next build and the deploy-scope typecheck were all green locally. The blind spot was not the compiler scope — it was the file-system state. Here is the import chain that caused it, the fix, and the one-line gate that reproduces CI.]]></description>
        </item>
        <item>
            <title><![CDATA[Deploying a Next.js 16 fullstack app on AWS Amplify Gen 2 (SSR): six failures and how to avoid them]]></title>
            <link>https://www.jpmti2016.com/articles/deploying-nextjs16-on-amplify-ssr</link>
            <guid>https://www.jpmti2016.com/articles/deploying-nextjs16-on-amplify-ssr</guid>
            <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Getting a Next.js 16 app with an Amplify Gen 2 backend onto Amplify Hosting SSR took six failed builds — each one surfacing a layer deeper than the last. Here is the full chain: lockfile drift, the 220 MB compute cap, the deployment-spec dead end, a missing xz binary, a non-root build user, and a layer/runtime mismatch — with the fix for each.]]></description>
        </item>
        <item>
            <title><![CDATA[Fixing 'No space left on device' Error in AWS Amplify Sandbox on Linux]]></title>
            <link>https://www.jpmti2016.com/articles/amplify-sandbox-inotify-error</link>
            <guid>https://www.jpmti2016.com/articles/amplify-sandbox-inotify-error</guid>
            <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How to resolve the inotify_add_watch error when running Amplify Gen 2 sandbox on Linux systems - it is not about disk space, it is about file watcher limits]]></description>
        </item>
        <item>
            <title><![CDATA[Fixing CloudFormation Circular Dependency Errors in AWS Amplify Gen 2.]]></title>
            <link>https://www.jpmti2016.com/articles/amplify-gen2-circular-dependency-fix</link>
            <guid>https://www.jpmti2016.com/articles/amplify-gen2-circular-dependency-fix</guid>
            <pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[When your Lambda function needs both Cognito access AND is used as a data handler, use resourceGroupName: 'auth' in your function definition to avoid circular dependencies.]]></description>
        </item>
        <item>
            <title><![CDATA[Fixing 'Could not resolve' Errors for Lambda Function Dependencies in AWS Amplify Gen 2.]]></title>
            <link>https://www.jpmti2016.com/articles/amplify-gen2-lambda-dependency-error</link>
            <guid>https://www.jpmti2016.com/articles/amplify-gen2-lambda-dependency-error</guid>
            <pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Lambda functions with their own package.json need dependencies installed before esbuild bundles them. Add a preBuild phase to amplify.yml that runs npm ci in each function directory. Also exclude amplify/**/* from your root tsconfig.json.]]></description>
        </item>
        <item>
            <title><![CDATA[AWS Cognito User Pool Attributes Cannot Be Changed: A Deep Dive.]]></title>
            <link>https://www.jpmti2016.com/articles/aws-cognito-user-pool-attributes-cannot-be-changed</link>
            <guid>https://www.jpmti2016.com/articles/aws-cognito-user-pool-attributes-cannot-be-changed</guid>
            <pubDate>Sun, 21 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[User pool attributes cannot be changed after a user pool has been created because Cognito User Pool attributes are immutable after creation. Merging branches with different auth configs breaks deployments. Quick Fix: Delete the CloudFormation stack (aws cloudformation delete-stack --stack-name YOUR-STACK) and redeploy. Warning: this deletes all users. Prevent It: Define all user attributes and groups before your first production deploy. Use separate Amplify apps per environment instead of branch-based deployments.]]></description>
        </item>
        <item>
            <title><![CDATA[Can't resolve amplify_outputs.json]]></title>
            <link>https://www.jpmti2016.com/articles/cant-resolve-amplify-outoputs-json</link>
            <guid>https://www.jpmti2016.com/articles/cant-resolve-amplify-outoputs-json</guid>
            <pubDate>Thu, 27 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[To fix the can't resolve amplify_outputs.json build error add npx ampx pipeline-deploy --branch $AWS_BRANCH --app-id $AWS_APP_ID1 to the build settings and attach the AdministratorAccess-Amplify policy]]></description>
        </item>
        <item>
            <title><![CDATA[Attempted import error: 'useForm' is not exported from 'react-hook-form'.]]></title>
            <link>https://www.jpmti2016.com/articles/useform-is-not-exported-from-react-hook-form</link>
            <guid>https://www.jpmti2016.com/articles/useform-is-not-exported-from-react-hook-form</guid>
            <pubDate>Fri, 21 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[To fix Attempted import error: 'useForm' is not exported from 'react-hook-form' (imported as 'useForm') add 'use client' to your client component wrapper.]]></description>
        </item>
        <item>
            <title><![CDATA[Free self-hosted web analytics with Umami, PlanetScale, Prisma and Vercel.]]></title>
            <link>https://www.jpmti2016.com/articles/free-self-hosted-web-analytics</link>
            <guid>https://www.jpmti2016.com/articles/free-self-hosted-web-analytics</guid>
            <pubDate>Sun, 27 Mar 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Having my own self-hosted web analytics with Umami, PlanetScale, Prisma and Vercel, is helping me compose a whole picture of my website's web analytics, without platform bias, with a simple and privacy focused solution, and  free of charge. Additionally, because I am interested in the technical side, it has been a good opportunity to interact with SQL database alternatives like PlanetScale, Node.js ORM like Prisma, and deployments to Vercel. This guide covers how I adapted the Umami’s installation process to work with PlanetScale.]]></description>
        </item>
        <item>
            <title><![CDATA[Free self-hosted web vitals with Next.js, Vercel and PlanetScale.]]></title>
            <link>https://www.jpmti2016.com/articles/free-self-hosted-web-vitals-with-nextjs-vercel-and-planetscale</link>
            <guid>https://www.jpmti2016.com/articles/free-self-hosted-web-vitals-with-nextjs-vercel-and-planetscale</guid>
            <pubDate>Thu, 17 Mar 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Collect your own Core Web Vitals instead of paying for a RUM service: report them from a Next.js app, store them in a free PlanetScale database through Prisma, and run the whole thing on Vercel.]]></description>
        </item>
        <item>
            <title><![CDATA[7 free resources to learn blockchain fundamentals.]]></title>
            <link>https://www.jpmti2016.com/articles/7-resources-to-learn-blockchain-fundamentals</link>
            <guid>https://www.jpmti2016.com/articles/7-resources-to-learn-blockchain-fundamentals</guid>
            <pubDate>Mon, 21 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[This selection of 7 resources covers a broad spectrum of topics about blockchain, that explain it related to the real world, using academic and bootcamp formats. It includes materials from MIT, Berkeley, a16z, and Web3 Foundation. It is intended for people interested in the fundamentals of blockchain and decentralized finance.]]></description>
        </item>
        <item>
            <title><![CDATA[6 free resources to learn Rust for beginners.]]></title>
            <link>https://www.jpmti2016.com/articles/6-free-resources-to-learn-Rust</link>
            <guid>https://www.jpmti2016.com/articles/6-free-resources-to-learn-Rust</guid>
            <pubDate>Wed, 16 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[A list of resources that I am using to learn Rust. It includes videos, the official docs and blog posts. These resources complement each other, covering different learning styles and approaches to the language. I consider them to be beginners friendly and able to facilitate the learning in small chunks at the time. There is more than one way to learn the process of chewing glass with Rust, and we all have preferences. This list is not exhaustive, maybe it is biased. I will be updating it to include new findings and your recommendations.]]></description>
        </item>
        <item>
            <title><![CDATA[Should I learn Rust or Solidity to develop smart contracts?]]></title>
            <link>https://www.jpmti2016.com/articles/learn-rust-vs-solidity-to-develop-smart-contracts</link>
            <guid>https://www.jpmti2016.com/articles/learn-rust-vs-solidity-to-develop-smart-contracts</guid>
            <pubDate>Fri, 14 Jan 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Web3 and blockchain technology are going to the moon. At the heart of this technological revolution is the smart contract. Programming smart contracts is not done in the same way and with the same technologies that we code traditional apps and websites. The two main blockchains that are competing for smart contracts developers are Solana and Ethereum. As a programming language for  developing smart contracts (programs) in Solana you have Rust and for developing smart contracts in Ethereum you have Solidity. You can compare each programming language according to its transferable skills, madurity, learning curve, target blockchain size, tooling and prospect salaries.]]></description>
        </item>
        <item>
            <title><![CDATA[The gig crypto-economy is coming to the console, phone, tablet or PC. Earn while you learn, play, create and socialize.]]></title>
            <link>https://www.jpmti2016.com/articles/gig-crypto-economy-play-to-earn</link>
            <guid>https://www.jpmti2016.com/articles/gig-crypto-economy-play-to-earn</guid>
            <pubDate>Sun, 26 Dec 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[The labor-to-earn models has evolved to include many options like learn-to-earn where you accumulate crypto based on lessons and tests specific to a blockchain brand; participate-to-earn where you get rewards for your posts, likes and shares in social media like with Minds; create-to-earn where your creations are sold as some kind of collectible or NFT, like on OpenSea, or your playlist on Audius. Also you have a way to influence a cause of your concern, like climate change, in the Play-for-Purpose (PFP) modality with a game like Zeedz.]]></description>
        </item>
        <item>
            <title><![CDATA[The State Initializer Pattern, explained by Kent C. Dodds]]></title>
            <link>https://www.jpmti2016.com/articles/the-state-initializer-pattern</link>
            <guid>https://www.jpmti2016.com/articles/the-state-initializer-pattern</guid>
            <pubDate>Wed, 22 Dec 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Kent C. Dodds' pattern for letting the users of a component or hook set its initial state and reset back to it later — the one downshift and ReachUI use. Here is the link to his original, plus the detail that makes it work.]]></description>
        </item>
        <item>
            <title><![CDATA[React's key prop, explained by Kent C. Dodds]]></title>
            <link>https://www.jpmti2016.com/articles/understanding-reacts-key-prop</link>
            <guid>https://www.jpmti2016.com/articles/understanding-reacts-key-prop</guid>
            <pubDate>Fri, 29 Oct 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Kent C. Dodds wrote the clearest explanation of React's key prop I know, so rather than restate it here is the link — plus the one idea from it I reach for most: using key as a reset button for an element's state.]]></description>
        </item>
        <item>
            <title><![CDATA[Asynchronous update of related items with AWS DataStore in a Next.js web app.]]></title>
            <link>https://www.jpmti2016.com/articles/async-update-related-items</link>
            <guid>https://www.jpmti2016.com/articles/async-update-related-items</guid>
            <pubDate>Sat, 24 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[When working with AWS DataStore you have to deal with async/await operations. Updating a list of items when the order of async operations execution is not mandatory is viable to do with Promise.all() and map. Updating related items, where the promise result from the previous item is needed as input for the next item, can be achieved with the for await...of statement.]]></description>
        </item>
        <item>
            <title><![CDATA[GDPR privacy, consent mode ‘denied’ status, Google Analytics 4 and Next.js.]]></title>
            <link>https://www.jpmti2016.com/articles/gdpr-consent-mode-analytics-4-nextjs</link>
            <guid>https://www.jpmti2016.com/articles/gdpr-consent-mode-analytics-4-nextjs</guid>
            <pubDate>Sat, 10 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Keep your user's privacy at the center of your practices as established by GDPR and California law. Set ad_storage='denied', analytics_storage='denied', gtag('set', 'ads_data_redaction', true) and  'anonymize_ip': true for less intrusion while enjoy the great features of the new Google Analytics 4 in your Next.js web app.]]></description>
        </item>
        <item>
            <title><![CDATA[How to use a custom domain registered with AWS Route 53 in a Next.js web app deployed to Vercel.]]></title>
            <link>https://www.jpmti2016.com/articles/vercel-aws-route-53-custom-domain</link>
            <guid>https://www.jpmti2016.com/articles/vercel-aws-route-53-custom-domain</guid>
            <pubDate>Thu, 01 Jul 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Update the AWS Route 53 domain’s nameservers or, A and CNAME record types with the values provided by Vercel under ProjectName / Settings / Domains after you added a domain to the project. It will show the info needed to configure greatdomain.com and redirect to www.greatdomain.com or vice versa. After you tried to add the domain to your project unsuccessfully that information will also be sent to your email explaining what to do. Vercel allows you to configure A (recommended) and CNAME records.]]></description>
        </item>
    </channel>
</rss>