> ## Documentation Index
> Fetch the complete documentation index at: https://developer.upsun.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Patrick Dawkins

> Articles written by Patrick Dawkins.

<div className="flex items-center gap-4 mb-8 not-prose">
  <img src="https://github.com/pjcdawkins.png?size=128" alt="Patrick Dawkins" className="w-16 h-16 rounded-full" />

  <div className="flex flex-wrap gap-3">
    <a href="https://github.com/pjcdawkins" target="_blank" rel="noopener noreferrer" className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full border border-gray-200 dark:border-white/10 text-sm text-gray-700 dark:text-gray-300 hover:border-primary dark:hover:border-primary-light transition-colors">GitHub</a>
    <a href="https://www.linkedin.com/in/patrickdawkins" target="_blank" rel="noopener noreferrer" className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full border border-gray-200 dark:border-white/10 text-sm text-gray-700 dark:text-gray-300 hover:border-primary dark:hover:border-primary-light transition-colors">LinkedIn</a>
  </div>
</div>

<div className="blog-card-grid">
  <a href="/posts/tutorials/sandboxing-ai-agents-on-upsun" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/tutorials/sandboxing-ai-agents-on-upsun/sandboxing-ai-agents.png` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/tutorials/sandboxing-ai-agents-on-upsun/sandboxing-ai-agents.png" alt="Sandboxing AI agents on Upsun" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`tutorials` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        tutorials
                      </span>
                    )}

        <span className="text-xs text-subtle">Wednesday, April 8th 2026</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Sandboxing AI agents on Upsun</h3>
      <p className="blog-card-desc">Sandbox AI agents in Upsun containers to protect secrets from prompt injection. Covers Linux primitives, Claude Code, and Codex.</p>
    </div>
  </a>

  <a href="/posts/discussions/building-an-ai-code-review-agent-for-gitlab" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/discussions/building-an-ai-code-review-agent-for-gitlab/ai-code-review-agent.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/discussions/building-an-ai-code-review-agent-for-gitlab/ai-code-review-agent.webp" alt="Building an AI code review agent for our self-hosted GitLab" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`discussions` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        discussions
                      </span>
                    )}

        <span className="text-xs text-subtle">Thursday, February 19th 2026</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Building an AI code review agent for our self-hosted GitLab</h3>
      <p className="blog-card-desc">I vibe-coded a GitLab code review agent last month - 40K lines of Python written by Claude - and it has reviewed 1000 merge requests.</p>
    </div>
  </a>

  <a href="/posts/discussions/whatsun-efficient-code-analysis" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/discussions/whatsun-efficient-code-analysis/whatsun.webp` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/discussions/whatsun-efficient-code-analysis/whatsun.webp" alt="Efficient code analysis for LLMs" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`discussions` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        discussions
                      </span>
                    )}

        <span className="text-xs text-subtle">Thursday, December 18th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Efficient code analysis for LLMs</h3>
      <p className="blog-card-desc">Learn how Whatsun generates concise codebase summaries to improve the performance and accuracy of AI features.</p>
    </div>
  </a>

  <a href="/posts/discussions/building-ai-feature-necessary-evals" className="blog-card group rounded-xl bg-card border-theme card-hover shadow-sm hover:shadow-md transition-all overflow-hidden flex flex-col">
    {`/images/posts/discussions/building-ai-feature-necessary-evals/ai-necessary-evals.svg` !== '' && (
          <div className="blog-card-img-wrap">
            <img src="/images/posts/discussions/building-ai-feature-necessary-evals/ai-necessary-evals.svg" alt="Building an AI feature: The necessary evals" className="blog-card-img" />
          </div>
        )}

    <div className="blog-card-body">
      <div className="flex items-center gap-2">
        {`discussions` !== '' && (
                      <span className="text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent">
                        discussions
                      </span>
                    )}

        <span className="text-xs text-subtle">Thursday, December 4th 2025</span>
      </div>

      <h3 className="blog-card-title group-hover:text-accent transition-colors">Building an AI feature: The necessary evals</h3>
      <p className="blog-card-desc">What we learned building an AI feature: evaluations take most of the time, and your existing tools are enough.</p>
    </div>
  </a>
</div>
