···11+---
22+updated_at: 12-5-2025
33+draft: false
44+---
55+66+import { Icon } from "astro-icon/components";
77+88+## Web Dev Challenge: Build a multiplayer web app using PartyKit
99+- 24k+ views on YouTube
1010+- 18 stars on the typer99 GitHub repository
1111+- Built a type racing game with powerups and obstacles, implementing PartyKit into a SvelteKit application
1212+- Participated alongside Jason Lengstorf (host), Nick Taylor (prev OpenSauced), and Steve Ruiz (tldraw.com)
1313+1414+## Web Dev Challenge: What can you build in 4 hours with Google Gemini? [<Icon name="tabler:brand-youtube" class="inline-block" />](https://www.youtube.com/watch?v=pn5Jju4FNG4&t=340s)
1515+1616+- 97k+ views on YouTube
1717+- 8 stars on the thankadev GitHub repository
1818+- Built an AI generated thank you note that can be shared on X (formerly Twitter) for each library listed in a given repository's SBOM (software bill of materials)
1919+- Sponsored by Google Gemini AI and is integrated into the project, all of which was built in 4 hours
2020+- Participated alongside Jason Lengstorf (host), Brian Holt (Neon DB), and Sarah aka badcop_ (prev Boot.dev)
2121+- Recorded live in studio by a professional camera and sound crew throughout a 12 hour production day
+45-28
src/content/about/resume.mdx
···5566import { Icon } from "astro-icon/components";
7788-A generalist Software Engineer, specialized in solutions and product engineering,
99-utilizing technologies across the stack and languages like Javascript (Next.js), Python (Django), and GoLang (Cobra).
1010-Based in San Bernardino, California USA with remote and open source experience.
88+A Software Engineer making products and solutions, particular in frontend development,
1191210<hr />
13111412# Experience
1313+## Software Engineer, Pomerium [<Icon name="tabler:external-link" class="inline-block" />](https://pomerium.com)
1414+_April 2025 - October 2025_
1515+- Implemented new features and bug fixes on the Layer 7 proxy security dashboards
1616+- Worked on two product offerings for general users and enterprise customers, each with their own monorepo
1717+- Coordinated with backend engineers and management to ensure continuity between UX for more technical users
1818+with the CLI and the frontend web interface
1919+- Technology Stack: React Router, React, Redux, Material UI, PostHog, GoLang
2020+<a href="https://pomerium.com" class="flex gap-2 items-center -my-8 hover:underline" target="_blank">
2121+ <img src="/pomerium.png" alt="Pomerium Logo" class="size-8 rounded" />
2222+ pomerium.com
2323+ <Icon name="tabler:external-link" class="inline-block -top-2" />
2424+</a>
2525+1526## Software Engineer, OpenSauced [<Icon name="tabler:external-link" class="inline-block" />](https://opensauced.pizza)
1616-_February 2024 - Present_
2727+_February 2024 - October 2024_
1728- Worked with different technology stacks and products throughout the company
1829- Coordinated and collaborated with every department, including marketing, product, and engineering
1930- Helped market the brand and features on X (formerly Twitter), resulting in thousands of impressions
···2132- Reviewed external contributors' issues and pull requests
22332334### The OpenSauced App [<Icon name="tabler:brand-github-filled" class="inline-block" />](https://github.com/open-sauced/app)
2424-- Tech Stack: Next.js, React, TailwindCSS, PostHog, Playwright, Supabase, Storybook, SWR and more
3535+- Technology Stack: Next.js, React, TailwindCSS, PostHog, Playwright, Supabase, Storybook, SWR and more
2536- 88 pull requests in the last 6 months, about 20% of all contributions on the application product
26372738#### Repo Pages
···4253- Implemented major features for the CODEOWNERS centered CLI program built on Golang, Cobra CLI framework, and the BubbleTea terminal framework
4354- `pizza generate config`: an automatic or interactive terminal command that creates a global available YAML file that keeps track Git attributions
4455- `pizza offboard`: removes Git attributions by YAML configuration and CODEOWNERS files
4545-- Tech Stack: GoLang, Cobra CLI, BubbleTea
5656+- Technology Stack: GoLang, Cobra CLI, BubbleTea
46574758### Landing Page & Blog [<Icon name="tabler:brand-github-filled" class="inline-block" />](https://github.com/open-sauced/landing-page)
4859- Implemented and managed the Sanity CMS for viewing on the company blog
4960- Styled with TailwindCSS and Framer Motion based on Figma designs by the Product Manager
5061- Created and updated multiple landing pages for product (the app and Pizza CLI) and various use cases (Teams, Maintainers, Contributors, and Students)
5151-- Tech Stack: Next.js, React, TailwindCSS, PostHog and more
6262+- Technology Stack: Next.js, React, TailwindCSS, PostHog and more
6363+6464+<a href="https://github.com/open-sauced" class="flex gap-2 items-center -my-8 hover:underline" target="_blank">
6565+ <img src="/opensauced.png" alt="OpenSauced Logo" class="size-8 rounded" />
6666+ github.com/open-sauced
6767+ <Icon name="tabler:external-link" class="inline-block -top-2" />
6868+</a>
6969+7070+<hr />
7171+7272+# Contract Work
7373+7474+## Consultant Software Engineer, Zuplo [<Icon name="tabler:external-link" class="inline-block" />](https://zuplo.com)
7575+_November 2025 - December 2025_
7676+- Implemented a proof of concept for `zudoku schema generate example` CLI command, generates examples for response and request body schemas
7777+without explicit examples given an OpenAPI JSON file
7878+- Technology Stack: Yargs, @clack/prompts, Typescript, Nx
7979+<a href="https://zuplo.com" class="flex gap-2 items-center -my-8 hover:underline" target="_blank">
8080+ <img src="/zuplo.png" alt="Zuplo Logo" class="size-8 rounded" />
8181+ zuplo.com
8282+ <Icon name="tabler:external-link" class="inline-block -top-2" />
8383+</a>
52845385## Full Stack Developer, Buttondown [<Icon name="tabler:external-link" class="inline-block" />](https://buttondown.email)
5486_November 2023 - February 2024_
5587- Implemented features and bug fixes to the email platform, supporting thousands of newsletters
5688- Managed and updated copy and designs on the platform’s marketing website
5757-- Tech Stack: Django, Vue, Next.js, TailwindCSS and more
8989+- Technology Stack: Django, Vue, Next.js, TailwindCSS and more
58905991## Web Developer, SmartWiz [<Icon name="tabler:external-link" class="inline-block" />](https://smartwiz.io)
6060-_September 2023 - November 2024_
9292+_September 2023 - November 2023_
6193- Refactored existing Stripe integrations and implemented designs from Figma
6262-- Tech Stack: Remix, React, TailwindCSS, Stripe, and more
9494+- Technology Stack: Remix, React, TailwindCSS, Stripe, and more
9595+9696+<hr />
63976498## Volunteer Web Developer, Progressive Victory [<Icon name="tabler:external-link" class="inline-block" />](https://progressivevictory.win)
6599_August 2022 - November 2022_
66100- Led the frontend development of the initial organization website, implementing designs in coordination with organizers and backend engineers
67101- Implemented Airtable as a CMS to display information about volunteer efforts and political candidates’ campaigns throughout the United States
6868-- Tech Stack: React, Next.js, Airtable, Storybook, Vercel and more
6969-7070-<hr />
7171-7272-# Public Speaking and Community Participation
7373-## Web Dev Challenge: Build a multiplayer web app using PartyKit
7474-- 24k+ views on YouTube
7575-- 18 stars on the typer99 GitHub repository
7676-- Built a type racing game with powerups and obstacles, implementing PartyKit into a SvelteKit application
7777-- Participated alongside Jason Lengstorf (host), Nick Taylor (prev OpenSauced), and Steve Ruiz (tldraw.com)
7878-7979-## Web Dev Challenge: What can you build in 4 hours with Google Gemini?
8080-- 97k+ views on YouTube
8181-- 8 stars on the thankadev GitHub repository
8282-- Built an AI generated thank you note that can be shared on X (formerly Twitter) for each library listed in a given repository's SBOM (software bill of materials)
8383-- Sponsored by Google Gemini AI and is integrated into the project, all of which was built in 4 hours
8484-- Participated alongside Jason Lengstorf (host), Brian Holt (Neon DB), and Sarah aka badcop_ (prev Boot.dev)
8585-- Recorded live in studio by a professional camera and sound crew throughout a 12 hour production day
102102+- Technology Stack: React, Next.js, Airtable, Storybook, Vercel and more
-22
src/content/blog/atproto-oauth.md
···11----
22-title: AT Protocol OAuth Basics Tutorial
33-description: Implement your own Bluesky client using the `@atproto/oauth-client-node` package
44-date: "2024-11-24"
55-draft: true
66----
77-88-# Initial Project Setup
99-1010-# Database and Auth Stores
1111-1212-# Implement AT Protocol Client
1313-1414-# Encryption Practices feat. Pilcrow
1515-1616-# Locals Variables and Login Flow
1717-1818-# Implement ATProto OAuth Callback Endpoint
1919-2020-# Hooks and Middleware for User and Agent
2121-2222-# Logout Flow
-92
src/content/blog/indexed-1.mdx
···11----
22-title: "This is HTML: Indexed - Web Development Explained"
33-description: An overview on what HTML is and how to use them while making websites. Part 1 of the Indexed - Web Development Explained series.
44-date: 01-06-2024
55-draft: false
66----
77-import CodePreview from "../../components/CodePreview.astro";
88-99-## Elements, Tags, and the Properties Within
1010-1111-HTML is the programming language used to layout the content inside a webpage. Writing in HTML involves using
1212-elements, also known as tags (throughout the series, I will be using these interchangeably), and putting them in
1313-order for your design.
1414-1515-Most tags are used in twos, both with angle brackets with the type inside, with the ending tag's type starting
1616-with a slash. Between the two is where we'd put content, which can also include more elements. Some elements,
1717-like `<img />`, are what's called "self-closing tags", denoted with the slash at the end.
1818-1919-<CodePreview>
2020- <div slot="preview">
2121- <h2>An error has occurred??</h2>
2222- <img src="https://media.giphy.com/media/ltx2rcXk8sE4OCHnFB/giphy.gif" />
2323- </div>
2424- <div slot="code">
2525- ```html
2626- <div>
2727- <h2>An error has occurred??</h2>
2828- <img src="https://media.giphy.com/media/ltx2rcXk8sE4OCHnFB/giphy.gif" />
2929- </div>
3030- ```
3131- </div>
3232-</CodePreview>
3333-3434- We can
3535-configure tags like these with its properties, or "props" for short. For example, to have this image tag to show a
3636-picture, we'll set its `src` property a link, as well as state an alternate text to make it accessible to those
3737-hard of seeing.
3838-3939-## So Common You Should Memorize Them
4040-4141-Mozilla Developer Network (MDN), a definitive web development resource online, has a list of all HTML tags. All in
4242-all, there are 142 elements, 115 of which are functional today with the rest being deprecated. Now you
4343-aren't expected to learn every single tag, but when you make enough websites there will be elements that
4444-comes up often.
4545-4646-Here's my list of tags I use everyday:
4747-4848-- `<div>`, `<section>`, `<main>`: containers to label off parts of the page. I use `<main>` for the page's
4949-content, `<section>` when there's a defined part (like the code preview above), and `<div>` when I need
5050-to group elements, but don't need to label them, usually for layout and styling reasons.
5151-- `<h1>`->`<h6>`, `<p>`: headers and paragraph text elements. These come with default styles,
5252-but since I use TailwindCSS, they all look the same. No matter how they look, they do help me
5353-distinguish between a wall of text and something to highlight.
5454-- `<img>`: images (and gifs)! Make sure to use the `alt` prop to describe the image to those who might
5555-need to use screen users. Accessibility is great!
5656-- `<input>`, `<button>`: interactive elements, connect these with a `<form>` or script function to
5757-allow people to use your websites.
5858-- `<a>`: the link tag. Go to another page (either on the same website or another on the internet) by
5959-adding the link as its `href` prop.
6060-6161-There are plenty more that I'm missing as I rattle these off at the top of my head. I memorize these since
6262-I use these everyday no matter the kind of website I'm creating, but if there's anything I need that I
6363-don't remember (for example `<video>` or `<track>`), MDN and Google are always there for me.
6464-6565-6666-## Just the beginning
6767-6868-HTML can only get you so far. Over the years, a lot of functionality has been baked into these elements.
6969-A recent example can be seen with the `<dialog>` tag that makes modals native to the browser, a feature
7070-that's been in use for decades before and practically only available in Javascript packages and frameworks.
7171-7272-With that in mind, dialogs and buttons can't work without some scripting, so in the next part of the
7373-Indexed series, we'll start to take a look at the basics of Javascript ("JS") and how to use them
7474-with HTML. First up is using vanilla JS, before moving onto JS UI frameworks that are popular today,
7575-like React and Svelte.
7676-7777-## Thanks for reading
7878-7979-Indexed is a series to write down all I've learned about web development. Think of this as my notebook
8080-scribbled with tips and lessons about how I think about websites. We'll see if I can make one of these
8181-blogs every week.
8282-8383-That’s in the future though! For now, I’d like to thank you for reading this blog.
8484-I very much appreciate it, and if you can do me a favor, take a look at the links down below.
8585-Catch you in the next one!
8686-8787-## Shameless Plugs
8888-8989-- If you'd like to look at any of my code, they are all open sourced on my Github [here](https://github.com/zeucapua).
9090-- Most of my projects are made live on my Twitch stream! Code new projects with me weekly on [twitch.tv/zeu_dev](https://twitch.tv/zeu_dev).
9191-- Any comments or questions can reach me on Twitter. Follow me at [twitter.com/zeu_dev](https://twitter.com/zeu_dev).
9292-- Interested on other stuff? Visit my personal website at [zeu.dev](https://zeu.dev) and my other blogs here on [thoughts.zeu.dev](https://thoughts.zeu.dev).
-100
src/content/blog/rash-stack.md
···11----
22-title: "The RASH Stack: React, Astro, Svelte, HTMX"
33-description: Strap a horse on a rocket and use Astro Partials to stream UI components via HTMX.
44-date: "2024-09-10"
55-draft: true
66-link: https://github.com/zeucapua/
77----
88-99-## The Project
1010-1111-I'm building a Notion-like note taking system that'll (probably) make me more productive with as
1212-little fluff and features as possible. Each block can be added, edited, and deleted freely, with
1313-the full page data is saved locally.
1414-1515-For the features to demo the RASH stack, we are making:
1616-- Plain text (Astro + HTMX)
1717-- Checkbox (Svelte)
1818-- Whiteboard (React via tldraw library)
1919-2020-## What is HTMX?
2121-2222-The basic idea behind HTMX is that APIs should return HTML that shows the updated part of the page
2323-after a request. For example, let's make a button that adds our feature, simple plain text input:
2424-2525-```html
2626-<h1>Hodgepodge App</h1>
2727-<ul id="blocks">
2828-2929-</ul>
3030-3131-<button
3232- hx-post="/addTextBlock"
3333- hx-target="#blocks"
3434- hx-swap="beforeend"
3535->
3636- Text
3737-</button>
3838-```
3939-4040-The button has a few new attributes to use HTMX: `hx-post` specifies a `POST` API request
4141-at the endpoint `/addTextBlock`; `hx-target` is to determine what element we want to update;
4242-`hx-swap` tells us how we should handle the HTML after the response, in this case adding the
4343-response before the button. Now the endpoint can return HTML like so...
4444-4545-```html
4646-<li><textarea /></li>
4747-```
4848-4949-And on the button press, the initial page will now be:
5050-5151-```html
5252-<h1>Hodgepodge App</h1>
5353-<ul id="blocks">
5454- <li><textarea /></li>
5555-</ul>
5656-5757-<button
5858- hx-post="/addTextBlock"
5959- hx-target="#blocks"
6060- hx-swap="beforeend"
6161->
6262- Text
6363-</button>
6464-```
6565-6666-While we will be using more attributes during the rest of the blog, there are plenty more
6767-I can't possibly go over. To find more information on the list of attributes and HTMX in
6868-general, go to [htmx.org](https://htmx.org) or read their book
6969-[Hypermedia Systems](https://hypermedia.systems) which is free online, but you can be cool
7070-like me and get the physical book:
7171-7272-# TODO: ADD PHOTO OF HYPERMEDIA SYSTEMS
7373-7474-## Astro Partials
7575-7676-Since we are using Astro as our meta framework, we can use its feature **Astro Partials** in
7777-conjunction with HTMX for a smooth developer experience. It allows Astro components inside the
7878-`/src/pages` directory to be easily called via its endpoint and returned as HTML.
7979-8080-For the example above, the only thing needed is for the Lemon to be in the
8181-`/src/pages/addTextBlock.astro` file with one extra line in the *Component Script* (the code
8282-inside the frontmatter like section ran on the server):
8383-8484-```astro
8585----
8686-export const partial = true;
8787----
8888-<li><textarea /></li>
8989-```
9090-9191-Now we can use this page via HTMX under the `/revealSecret` endpoint, like the example above!
9292-9393-## Forms and Values via Astro Partials
9494-9595-Swapping HTML is all fine and dandy, but if we want to do more, we can leverage existing
9696-hypermedia controls to extend functionality like the `<form>` and `<input>` elements.
9797-9898-## Streaming in Client Components as Astro Islands
9999-100100-## Using the HTMX Javascript API
+25
src/pages/as-seen-on.astro
···11+---
22+import { render } from "astro:content";
33+import SiteLayout from "../components/SiteLayout.astro";
44+import { getEntry } from "astro:content";
55+66+const entry = await getEntry("about", "as-seen-on");
77+if (!entry) {
88+ throw new Error("Could not find ../content/about/as-seen-on.mdx");
99+}
1010+const { Content } = await render(entry);
1111+---
1212+1313+<SiteLayout title="zeu.dev">
1414+ <main class="flex flex-col gap-4 px-4 py-8 text-white text-lg">
1515+ <h1 class="text-5xl text-yellow-500 font-bold">As seen on</h1>
1616+ <p class="text-yellow-500">
1717+ I've participated in a few community events and video. I stream on [stream.place](https://stream.place/zeu.dev)
1818+ and [Twitch](https://twitch.tv/zeu_dev), and post videos sometimes on my [youtube channel](https://www.youtube.com/@zeucapua851).
1919+ </p>
2020+2121+ <span class="prose prose-invert prose-yellow lg:prose-xl prose-headings:text-yellow-500">
2222+ <Content />
2323+ </span>
2424+ </main>
2525+</SiteLayout>
···2323 </pre>
2424 <div class="flex flex-col gap-4">
2525 <h1 class="text-5xl font-bold text-yellow-500">hey hi hello!</h1>
2626- <h2 class="text-yellow-500 font-medium text-2xl">welcome to my site!</h2>
2727-2828- <p>
2929- I have plenty of ideas and projects I want to talk to you guys about
3030- and so I made this site to showcase all I've been doing.
3131- </p>
3232-3333- <p>
3434- updates and showcases will be hosted here, alongside my own thoughts.
3535- </p>
3636-3737-3838- <p class="text-yellow-500">- @zeu_dev</p>
3926 </div>
40274128 <section class="flex flex-col lg:flex-row gap-8 my-8">
···46334734 <a href="/resume" class="border-2 rounded-lg w-fit p-4">
4835 <h3 class="text-xl text-yellow-500 font-bold">Resume</h3>
4949- <p>Notable professional works</p>
3636+ <p>Career and professional work</p>
5037 </a>
5138 </section>
5239 </main>
+4-1
src/pages/open-source.astro
···11---
22import SiteLayout from "../components/SiteLayout.astro";
33import { getEntry } from "astro:content";
44+45const entry = await getEntry("about", "open-source");
55-66+if (!entry) {
77+ throw new Error("Could not find ../content/about/open-source.mdx");
88+}
69const { Content } = await entry.render();
710---
811
+4-1
src/pages/resume.astro
···11---
22import SiteLayout from "../components/SiteLayout.astro";
33import { getEntry } from "astro:content";
44+45const entry = await getEntry("about", "resume");
55-66+if (!entry) {
77+ throw new Error("Could not find ../content/about/resume.mdx");
88+}
69const { Content } = await entry.render();
710---
811