<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Launch Gate]]></title><description><![CDATA[Launch Gate]]></description><link>https://launchgate.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Launch Gate</title><link>https://launchgate.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 16:57:48 GMT</lastBuildDate><atom:link href="https://launchgate.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Tailoring a resume to a job description: a 15-minute gap check]]></title><description><![CDATA[Most resume advice says "tailor it to the job." Very little says how. Here is the 15-minute check I use before sending an application. It works with a text editor and two browser tabs, and you don't n]]></description><link>https://launchgate.hashnode.dev/tailoring-a-resume-to-a-job-description-a-15-minute-gap-check</link><guid isPermaLink="true">https://launchgate.hashnode.dev/tailoring-a-resume-to-a-job-description-a-15-minute-gap-check</guid><category><![CDATA[Career]]></category><category><![CDATA[jobs]]></category><dc:creator><![CDATA[Launch Gate]]></dc:creator><pubDate>Fri, 25 Sep 2026 00:23:35 GMT</pubDate><content:encoded><![CDATA[<p>Most resume advice says "tailor it to the job." Very little says how. Here is the 15-minute check I use before sending an application. It works with a text editor and two browser tabs, and you don't need an AI tool for it.</p>
<h2>1. Split the job description into three piles</h2>
<p>Read the ad once and copy each requirement into one of three lists:</p>
<ul>
<li><strong>Must-haves.</strong> Phrases like "required", "you have", "X+ years of", and anything in the first bullet list under "Requirements". This is what a recruiter screens on in the first 30 seconds.</li>
<li><strong>Nice-to-haves.</strong> "Bonus", "a plus", "familiarity with", "ideally". These break ties, but they rarely get you filtered out.</li>
<li><strong>Context.</strong> Team size, product, stage, what the first 90 days look like. None of this goes on your resume. It's for your summary line and the interview.</li>
</ul>
<p>Most people tailor against the whole ad. Tailoring against the must-have list alone is faster, and it's where the filtering happens.</p>
<h2>2. Use their words, not your synonyms</h2>
<p>For each must-have, search your resume for the <strong>exact term</strong> the ad uses.</p>
<ul>
<li>The ad says "stakeholder management" and you wrote "worked with product and sales"? A human might connect those. A keyword filter or a skimming recruiter often won't.</li>
<li>The ad says "PostgreSQL" and you wrote "SQL databases"? Name it.</li>
<li>The ad says "B2B SaaS" and your resume only names the company? Add three words that say what the company was.</li>
</ul>
<p>This isn't keyword stuffing. If you did the thing, call it what the reader calls it.</p>
<h2>3. Mark every must-have as covered, weak, or missing</h2>
<p>Go down the must-have list and mark each one:</p>
<ul>
<li><strong>Covered.</strong> It appears with evidence: a number, a project, or a result.</li>
<li><strong>Weak.</strong> It's implied, buried in a skills list, or has no evidence.</li>
<li><strong>Missing.</strong> It's not there at all.</li>
</ul>
<p>The weak ones are where tailoring pays off. Moving "Kubernetes" from the skills list into a bullet like "moved 14 services to Kubernetes, cut deploy time from 40 to 8 minutes" turns a keyword into proof.</p>
<p>For the missing ones, be honest with yourself. One or two missing must-haves is normal, and plenty of people get hired that way. Five missing means this role probably isn't the best use of an application.</p>
<h2>4. Check the top third of page one</h2>
<p>Recruiters decide from the top third of the first page. After tailoring, check that:</p>
<ul>
<li>Your title or summary line uses the role's own title, or something close to it.</li>
<li>At least two must-haves appear in that top third with evidence.</li>
<li>The most recent job's first bullet is the most relevant thing you did there. It shouldn't just be the first thing you did.</li>
</ul>
<h2>5. Things that quietly hurt</h2>
<ul>
<li><strong>Years-of-experience mismatch.</strong> If they ask for 5+ and your dates show 3, a recruiter will spot it. Address it with scope, like "led a team of 4" or "owned billing end to end", rather than hoping they miss it.</li>
<li><strong>Tool lists without dates.</strong> "React, Angular, jQuery, Backbone" reads differently when the only recent one is jQuery.</li>
<li><strong>The same resume for different role types.</strong> A backend role and a platform role can share 80% of the content, but the top third should differ.</li>
</ul>
<h2>A quick worked example</h2>
<p>Ad must-haves: <em>TypeScript, React, REST API design, 3+ years, mentoring.</em></p>
<p>Resume before: TypeScript and React appear in the skills list. There's an "API" bullet with no detail. Mentoring isn't mentioned. The dates show 4 years.</p>
<ul>
<li>TypeScript and React: <strong>weak.</strong> They're only in the skills list. Add them to a bullet with a result.</li>
<li>REST API design: <strong>weak.</strong> Name the API, how many endpoints or consumers it had, and one design decision.</li>
<li>3+ years: <strong>covered.</strong></li>
<li>Mentoring: <strong>missing</strong>, but the candidate onboarded two juniors. That's mentoring, so say it.</li>
</ul>
<p>That's four changes. None of them invents anything, and the resume now answers every must-have in the ad's own words.</p>
<hr />
<p><em>If you want to try the comparison step on your own resume, we put a free, rule-based <a href="https://jd-gap-demo.smagnezi8.workers.dev/">JD vs resume demo</a> online. It runs in your browser and doesn't use AI. It shows which requirements in the ad already have evidence in your resume and which don't, and nothing you paste leaves the tab.</em></p>
]]></content:encoded></item><item><title><![CDATA[What a launch-day check caught this week: 8 real examples]]></title><description><![CDATA["I'll check it before launch" usually means clicking the homepage once on your own laptop. This week we ran passive checks against a few dozen freshly launched indie apps. None of it was intrusive: pl]]></description><link>https://launchgate.hashnode.dev/what-a-launch-day-check-caught-this-week-8-real-examples</link><guid isPermaLink="true">https://launchgate.hashnode.dev/what-a-launch-day-check-caught-this-week-8-real-examples</guid><category><![CDATA[webdev]]></category><category><![CDATA[startup]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Launch Gate]]></dc:creator><pubDate>Thu, 24 Sep 2026 18:24:19 GMT</pubDate><content:encoded><![CDATA[<p>"I'll check it before launch" usually means clicking the homepage once on your own laptop. This week we ran passive checks against a few dozen freshly launched indie apps. None of it was intrusive: plain GET/HEAD requests to the site each project listed, reading status codes and headers. Here's what came up, roughly in order of how much it would hurt.</p>
<h2>Things that break the launch itself</h2>
<ol>
<li><strong>The listed demo link returned 404.</strong> The project was active and the demo URL was still on its project page, but the hosted preview behind it no longer loaded.</li>
<li><strong>The site timed out twice in a row</strong> from a clean request. On launch day that reads as "dead project".</li>
<li><strong>A HEAD request returned 405.</strong> GET worked, but uptime monitors and link-preview bots often send HEAD first, then report the site as down or show no preview.</li>
<li><strong>The listed site was a design-tool page</strong> (a Figma Sites URL) rather than the product's own domain. That's fine for a mockup, but it's a fragile thing to send launch traffic to.</li>
</ol>
<h2>Baseline hardening that was simply missing</h2>
<ol>
<li><strong>No Content-Security-Policy header</strong> on most sites checked. It's not a vulnerability by itself, but it's the first thing a security-minded user or reviewer looks for.</li>
<li><strong>CSP present, but with <code>unsafe-inline</code> and <code>unsafe-eval</code> for scripts</strong>, which removes most of what CSP is for.</li>
<li><strong>No HSTS</strong>, so the first visit over plain http isn't forced to https.</li>
<li><strong>No Referrer-Policy or X-Content-Type-Options.</strong> These are one-line headers, and most hosting platforms let you set them in a config file.</li>
</ol>
<h2>Also worth a look (not from this batch)</h2>
<p>A few other checks cost nothing: an Open Graph image so shared links get a preview, a real page title instead of the framework default, www and the bare domain both resolving, and a real favicon.</p>
<h2>What to take from it</h2>
<p>The items that cost the most (1-4) take a minute to catch and aren't about security at all. They're about whether the thing you're pointing people at actually loads for a stranger. Before posting, open your launch link in a private window on your phone, and paste it into a Slack DM to yourself to see the preview.</p>
<p>If you want this as a checklist that runs in your browser, the free 12-check version is here: <a href="https://launch-gate-demo.smagnezi8.workers.dev">https://launch-gate-demo.smagnezi8.workers.dev</a></p>
<p><em>Launch Gate only runs passive checks. It is not a security audit or a penetration test.</em></p>
]]></content:encoded></item><item><title><![CDATA[Shopify CSV import errors: what each one means and how to fix it]]></title><description><![CDATA[You exported a spreadsheet, uploaded it to Shopify, and got back "Ignored line 14" or "Illegal quoting on line 52". The message is short and the file is 800 rows long. Here is what the common errors a]]></description><link>https://launchgate.hashnode.dev/shopify-csv-import-errors-what-each-one-means-and-how-to-fix-it</link><guid isPermaLink="true">https://launchgate.hashnode.dev/shopify-csv-import-errors-what-each-one-means-and-how-to-fix-it</guid><category><![CDATA[shopify]]></category><category><![CDATA[csv]]></category><category><![CDATA[ecommerce]]></category><dc:creator><![CDATA[Launch Gate]]></dc:creator><pubDate>Thu, 24 Sep 2026 18:22:41 GMT</pubDate><content:encoded><![CDATA[<p>You exported a spreadsheet, uploaded it to Shopify, and got back "Ignored line 14" or "Illegal quoting on line 52". The message is short and the file is 800 rows long. Here is what the common errors actually mean, grouped by the thing that's really wrong.</p>
<h2>1. The file itself is malformed</h2>
<p><strong>Illegal quoting on line N / Missing or stray quote on line N</strong>
Almost always one of three things: the file isn't saved as UTF-8, Excel turned straight quotes into curly "smart" quotes, or a description has an unescaped <code>"</code> inside it. Open the file in a plain text editor, jump to the line, and look for <code>“ ”</code> or a lone quote. Inside a quoted field, a literal quote has to be doubled (<code>""</code>).</p>
<p><strong>Invalid CSV header: missing headers</strong>
The first line has to match Shopify's column names exactly. Check for a trailing space after the last header, a renamed column, or a byte-order mark added by the editor. If Shopify shows a "Choose column headings" window, that's the same problem: it didn't recognise your headers.</p>
<p><strong>Random characters in descriptions (Ã©, â€™)</strong>
Encoding again. Re-save as UTF-8, not "CSV (Windows)" or "CSV (Mac)".</p>
<h2>2. Products and variants don't line up</h2>
<p><strong>Ignored line N because handle X already exists</strong>
The handle identifies the product. Every variant row of one product shares a handle, but two different products can't. This usually means two products got the same handle after a copy-paste, or the file was split in the middle of a product.</p>
<p><strong>Ignored line N because it did not contain product data</strong>
There's a handle with no Title on the first row for that product. Only the first row of a product needs Title, Body and Vendor. Later variant rows can leave them blank, but the first one can't.</p>
<p><strong>Validation failed: options are not unique</strong>
Two variant rows of the same product have identical option values, for example two "Medium / Black" rows. It also happens when the same handle shows up again further down the file with the same options.</p>
<p><strong>Option value provided for unknown options</strong>
A row has an <code>Option2 Value</code> but the product's first row never declared <code>Option2 Name</code>. Declare every option name on the first row of the product.</p>
<h2>3. Required fields are blank or the wrong type</h2>
<ul>
<li><strong>Validation failed: price can't be blank.</strong> Every variant row needs <code>Variant Price</code>.</li>
<li><strong>Inventory quantity can't be blank / is not a number.</strong> If <code>Variant Inventory Tracker</code> is set to <code>shopify</code>, you need a number in the quantity column. If you don't track stock, leave the tracker blank.</li>
<li><strong>Inventory policy is not included in the list.</strong> It has to be exactly <code>deny</code> or <code>continue</code>.</li>
<li><strong>Fulfillment service can't be blank.</strong> Use <code>manual</code> unless you use a fulfillment app.</li>
<li><strong>Not a valid product category.</strong> The category has to match Shopify's Standard Product Taxonomy exactly, either as the full breadcrumb or as the category ID.</li>
</ul>
<h2>4. Images fail</h2>
<ul>
<li><strong>An error occurred while trying to download the image.</strong> The image URL doesn't resolve publicly. Paste it into a private browser window: if it asks for a login or redirects, Shopify can't fetch it either.</li>
<li><strong>getaddrinfo: nodename nor servname provided.</strong> The URL is malformed: a missing <code>https://</code>, a space, or a local file path.</li>
<li><strong>Exceeds the 20 megapixel limit.</strong> Resize the image.</li>
</ul>
<h2>5. Metafields</h2>
<p><strong>Value must be a valid product reference</strong>
You're referencing a product that doesn't exist yet. Import in two passes: products first without the metafield, then again with it.</p>
<h2>A 5-minute check before you upload</h2>
<ol>
<li>Save as UTF-8 and open the file in a text editor once.</li>
<li>Sort by Handle, and never split a file in the middle of a handle.</li>
<li>For each handle, check that the first row has a Title and declares every option name it uses.</li>
<li>Look for duplicate option combinations inside each handle.</li>
<li>Spot-check 5 image URLs in a private window.</li>
</ol>
<p>Most failed imports break on steps 2 to 4, and the error message points to a line number, not the cause.</p>
<p>If you'd rather not do it by hand, CSV Preflight runs these checks on your file and sends back a list of fixes: <a href="https://csv-preflight-site.smagnezi8.workers.dev/">https://csv-preflight-site.smagnezi8.workers.dev/</a></p>
<p>Source for the error messages: Shopify Help Center, "Solutions to common product CSV import problems", <a href="https://help.shopify.com/en/manual/products/import-export/common-import-issues">https://help.shopify.com/en/manual/products/import-export/common-import-issues</a></p>
]]></content:encoded></item></channel></rss>