<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>zinkem AI Prompts</title>
    <description>An inventory of AI prompts and workflows. Pick a prompt to bootstrap your project setup.</description>
    <link>https://zinkem.com/prompts/</link>
    <atom:link href="https://zinkem.com/prompts.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Wed, 21 Jan 2026 19:10:12 +0000</lastBuildDate>
    
    <item>
      <title>Deploy: GitHub Actions + S3 + CloudFront</title>
      <description>Automated static site deployment with HTTPS. GitHub Actions builds and deploys to S3, CloudFront serves with SSL.</description>
      <pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate>
      <link>https://zinkem.com/prompts/github-actions-s3-cloudfront/</link>
      <guid isPermaLink="true">https://zinkem.com/prompts/github-actions-s3-cloudfront/</guid>
      <category>Setting up automated deployment for a static site</category>
      
      <category>aws</category>
      
      <category>github-actions</category>
      
      <category>s3</category>
      
      <category>cloudfront</category>
      
      <category>deployment</category>
      
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p>Deploy a static site to AWS S3 with CloudFront HTTPS.</p>

<h2 id="prerequisites">Prerequisites</h2>

<ul>
  <li>AWS CLI configured</li>
  <li>Domain in Route53</li>
  <li>GitHub repo</li>
</ul>

<h2 id="1-create-s3-bucket">1. Create S3 Bucket</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">BUCKET_NAME</span><span class="o">=</span><span class="s2">"yourdomain.com"</span>
aws s3 mb s3://<span class="nv">$BUCKET_NAME</span> <span class="nt">--region</span> us-east-1

<span class="c"># Enable static website hosting</span>
aws s3 website s3://<span class="nv">$BUCKET_NAME</span> <span class="nt">--index-document</span> index.html <span class="nt">--error-document</span> 404.html

<span class="c"># Bucket policy for public read</span>
<span class="nb">cat</span> <span class="o">&gt;</span> /tmp/bucket-policy.json <span class="o">&lt;&lt;</span> <span class="sh">'</span><span class="no">EOF</span><span class="sh">'
{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::BUCKET_NAME/*"
    }]
}
</span><span class="no">EOF
</span><span class="nb">sed</span> <span class="nt">-i</span> <span class="s1">''</span> <span class="s2">"s/BUCKET_NAME/</span><span class="nv">$BUCKET_NAME</span><span class="s2">/g"</span> /tmp/bucket-policy.json
aws s3api put-bucket-policy <span class="nt">--bucket</span> <span class="nv">$BUCKET_NAME</span> <span class="nt">--policy</span> file:///tmp/bucket-policy.json
</code></pre></div></div>

<h2 id="2-create-acm-certificate-us-east-1-required-for-cloudfront">2. Create ACM Certificate (us-east-1 required for CloudFront)</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>aws acm request-certificate <span class="se">\</span>
    <span class="nt">--domain-name</span> yourdomain.com <span class="se">\</span>
    <span class="nt">--validation-method</span> DNS <span class="se">\</span>
    <span class="nt">--region</span> us-east-1
</code></pre></div></div>

<p>Add the CNAME record to Route53 for validation.</p>

<h2 id="3-create-cloudfront-distribution">3. Create CloudFront Distribution</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>aws cloudfront create-distribution <span class="se">\</span>
    <span class="nt">--origin-domain-name</span> <span class="nv">$BUCKET_NAME</span>.s3-website-us-east-1.amazonaws.com <span class="se">\</span>
    <span class="nt">--default-root-object</span> index.html
</code></pre></div></div>

<p>Configure:</p>
<ul>
  <li>Alternate domain name (CNAME): yourdomain.com</li>
  <li>SSL certificate: select ACM cert</li>
  <li>Viewer protocol policy: Redirect HTTP to HTTPS</li>
</ul>

<h2 id="4-route53-a-record">4. Route53 A Record</h2>

<p>Create alias record pointing to CloudFront distribution.</p>

<h2 id="5-github-actions-workflow">5. GitHub Actions Workflow</h2>

<p><code class="language-plaintext highlighter-rouge">.github/workflows/deploy.yml</code>:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">name</span><span class="pi">:</span> <span class="s">Deploy to S3</span>

<span class="na">on</span><span class="pi">:</span>
  <span class="na">push</span><span class="pi">:</span>
    <span class="na">branches</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">main</span><span class="pi">,</span> <span class="nv">develop</span><span class="pi">]</span>

<span class="na">jobs</span><span class="pi">:</span>
  <span class="na">deploy</span><span class="pi">:</span>
    <span class="na">runs-on</span><span class="pi">:</span> <span class="s">ubuntu-latest</span>
    <span class="na">steps</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="na">uses</span><span class="pi">:</span> <span class="s">actions/checkout@v4</span>

      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Setup Ruby</span>
        <span class="na">uses</span><span class="pi">:</span> <span class="s">ruby/setup-ruby@v1</span>
        <span class="na">with</span><span class="pi">:</span>
          <span class="na">ruby-version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">3.2'</span>
          <span class="na">bundler-cache</span><span class="pi">:</span> <span class="kc">true</span>

      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Build Jekyll</span>
        <span class="na">run</span><span class="pi">:</span> <span class="s">bundle exec jekyll build</span>

      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Configure AWS</span>
        <span class="na">uses</span><span class="pi">:</span> <span class="s">aws-actions/configure-aws-credentials@v4</span>
        <span class="na">with</span><span class="pi">:</span>
          <span class="na">aws-access-key-id</span><span class="pi">:</span> <span class="s">$</span>
          <span class="na">aws-secret-access-key</span><span class="pi">:</span> <span class="s">$</span>
          <span class="na">aws-region</span><span class="pi">:</span> <span class="s">us-east-1</span>

      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Deploy to S3</span>
        <span class="na">run</span><span class="pi">:</span> <span class="s">aws s3 sync _site/ s3://$ --delete</span>

      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Invalidate CloudFront</span>
        <span class="na">run</span><span class="pi">:</span> <span class="pi">|</span>
          <span class="s">aws cloudfront create-invalidation \</span>
            <span class="s">--distribution-id $ \</span>
            <span class="s">--paths "/*"</span>
</code></pre></div></div>

<h2 id="6-github-secrets-required">6. GitHub Secrets Required</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">AWS_ACCESS_KEY_ID</code></li>
  <li><code class="language-plaintext highlighter-rouge">AWS_SECRET_ACCESS_KEY</code></li>
  <li><code class="language-plaintext highlighter-rouge">S3_BUCKET</code></li>
  <li><code class="language-plaintext highlighter-rouge">CLOUDFRONT_DISTRIBUTION_ID</code></li>
</ul>

<h2 id="iam-policy-for-deploy-user">IAM Policy for Deploy User</h2>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
    </span><span class="nl">"Version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2012-10-17"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"Statement"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"Effect"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Allow"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"Action"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"s3:PutObject"</span><span class="p">,</span><span class="w"> </span><span class="s2">"s3:DeleteObject"</span><span class="p">,</span><span class="w"> </span><span class="s2">"s3:ListBucket"</span><span class="p">],</span><span class="w">
            </span><span class="nl">"Resource"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"arn:aws:s3:::yourdomain.com"</span><span class="p">,</span><span class="w"> </span><span class="s2">"arn:aws:s3:::yourdomain.com/*"</span><span class="p">]</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="p">{</span><span class="w">
            </span><span class="nl">"Effect"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Allow"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"Action"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cloudfront:CreateInvalidation"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"Resource"</span><span class="p">:</span><span class="w"> </span><span class="s2">"*"</span><span class="w">
        </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

      ]]></content:encoded>
    </item>
    
    <item>
      <title>Project Setup: AI-Assisted Development Workflow</title>
      <description>Git hooks and GitHub integrations that automatically inject context for AI assistants. Includes commit templates, diff injection, and issue/PR templates.</description>
      <pubDate>Wed, 10 Dec 2025 00:00:00 +0000</pubDate>
      <link>https://zinkem.com/prompts/ai-dev-workflow-setup/</link>
      <guid isPermaLink="true">https://zinkem.com/prompts/ai-dev-workflow-setup/</guid>
      <category>Setting up a new project for AI-assisted development</category>
      
      <category>git</category>
      
      <category>github</category>
      
      <category>workflow</category>
      
      <category>context-injection</category>
      
      <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p>Set up this repository for AI-assisted development with automatic context injection.</p>

<h2 id="create-these-files">Create These Files</h2>

<h3 id="1-gitmessage---commit-template">1. <code class="language-plaintext highlighter-rouge">.gitmessage</code> - Commit Template</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># &lt;type&gt;: &lt;subject under 50 chars&gt;
#
# Types: feat, fix, refactor, perf, docs, test, chore
#
# Body: explain WHAT and WHY (not how)
#
# Bug Risk: low/medium/high
# Areas to watch:
</code></pre></div></div>

<h3 id="2-githooksprepare-commit-msg">2. <code class="language-plaintext highlighter-rouge">.githooks/prepare-commit-msg</code></h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
<span class="nv">COMMIT_MSG_FILE</span><span class="o">=</span><span class="nv">$1</span>
<span class="nv">COMMIT_SOURCE</span><span class="o">=</span><span class="nv">$2</span>

<span class="k">if</span> <span class="o">[</span> <span class="nt">-z</span> <span class="s2">"</span><span class="nv">$COMMIT_SOURCE</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
    </span><span class="nv">DIFF</span><span class="o">=</span><span class="si">$(</span>git diff <span class="nt">--cached</span><span class="si">)</span>
    <span class="nb">echo</span> <span class="s2">""</span> <span class="o">&gt;&gt;</span> <span class="s2">"</span><span class="nv">$COMMIT_MSG_FILE</span><span class="s2">"</span>
    <span class="nb">echo</span> <span class="s2">"# Staged changes (for context, will be stripped):"</span> <span class="o">&gt;&gt;</span> <span class="s2">"</span><span class="nv">$COMMIT_MSG_FILE</span><span class="s2">"</span>
    <span class="nb">echo</span> <span class="s2">"</span><span class="nv">$DIFF</span><span class="s2">"</span> | <span class="nb">sed</span> <span class="s1">'s/^/# /'</span> <span class="o">&gt;&gt;</span> <span class="s2">"</span><span class="nv">$COMMIT_MSG_FILE</span><span class="s2">"</span>
<span class="k">fi</span>
</code></pre></div></div>

<h3 id="3-githookspost-commit">3. <code class="language-plaintext highlighter-rouge">.githooks/post-commit</code></h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
<span class="nb">echo</span> <span class="s2">""</span>
<span class="nb">echo</span> <span class="s2">"=== Current Priorities ==="</span>
<span class="k">if</span> <span class="o">[</span> <span class="nt">-f</span> <span class="s2">"workplan.txt"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
    </span><span class="nb">head</span> <span class="nt">-20</span> workplan.txt
<span class="k">fi</span>
</code></pre></div></div>

<h3 id="4-githookspost-checkout">4. <code class="language-plaintext highlighter-rouge">.githooks/post-checkout</code></h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>
<span class="nv">BRANCH_CHECKOUT</span><span class="o">=</span><span class="nv">$3</span>
<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$BRANCH_CHECKOUT</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"1"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
    </span><span class="nb">echo</span> <span class="s2">"=== Recent commits ==="</span>
    git log <span class="nt">--oneline</span> <span class="nt">-10</span>
    <span class="nb">echo</span> <span class="s2">"=== Priorities ==="</span>
    <span class="o">[</span> <span class="nt">-f</span> <span class="s2">"workplan.txt"</span> <span class="o">]</span> <span class="o">&amp;&amp;</span> <span class="nb">head</span> <span class="nt">-10</span> workplan.txt
<span class="k">fi</span>
</code></pre></div></div>

<h3 id="5-enable-hooks">5. Enable hooks</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">chmod</span> +x .githooks/<span class="k">*</span>
git config core.hooksPath .githooks
git config commit.template .gitmessage
</code></pre></div></div>

<h3 id="6-claudemd---ai-context-file">6. <code class="language-plaintext highlighter-rouge">CLAUDE.md</code> - AI Context File</h3>

<p>Create a CLAUDE.md with:</p>
<ul>
  <li>Project architecture overview</li>
  <li>Module responsibilities</li>
  <li>Common patterns used</li>
  <li>Performance hotspots</li>
  <li>Testing checklist</li>
</ul>

<h2 id="branch-strategy">Branch Strategy</h2>

<ul>
  <li><code class="language-plaintext highlighter-rouge">stable</code> - releases</li>
  <li><code class="language-plaintext highlighter-rouge">develop</code> - PRs merge here</li>
  <li><code class="language-plaintext highlighter-rouge">feature/</code>, <code class="language-plaintext highlighter-rouge">bugfix/</code> - work branches</li>
</ul>

<h2 id="labels-to-create">Labels to Create</h2>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gh label create feature <span class="nt">--color</span> 0E8A16
gh label create bugfix <span class="nt">--color</span> D93F0B
gh label create showstopping <span class="nt">--color</span> B60205
gh label create tablestakes <span class="nt">--color</span> FBCA04
</code></pre></div></div>

      ]]></content:encoded>
    </item>
    
  </channel>
</rss>
