PageSourceSearch

https://calebevans.me/

html calebevans.me collected 2026-10-01 10:43:54 UTC 83,572 bytes, 60 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    <meta charset="utf-8" />
5    <meta name="viewport" content="width=device-width" />
6    <meta http-equiv="content-security-policy" content="default-src 'none'; worker-src 'self' blob:; connect-src 'self' https://calebevans-personalwebsite.goatcounter.com/count; font-src 'self' data:; img-src 'self' data:; script-src 'self' https://gc.zgo.at 'sha256-/Zg6GCGAy0rV3XUNCY9QSVleItr0dLGd5TOG5KbRQMQ='; style-src 'self'; base-uri 'none'">
7		<link href="./_app/immutable/entry/start.C79eLh4V.js" rel="modulepreload">
8		<link href="./_app/immutable/chunks/DRxq2_tp.js" rel="modulepreload">
9		<link href="./_app/immutable/chunks/BVD-n0Ka.js" rel="modulepreload">
10		<link href="./_app/immutable/entry/app.9jxtR-MJ.js" rel="modulepreload">
11		<link href="./_app/immutable/chunks/DYl5dUZ5.js" rel="modulepreload">
12		<link href="./_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
13		<link href="./_app/immutable/nodes/0.v_15SEZ_.js" rel="modulepreload">
14		<link href="./_app/immutable/chunks/s350eh56.js" rel="modulepreload">
15		<link href="./_app/immutable/chunks/CbgpfXnn.js" rel="modulepreload">
16		<link href="./_app/immutable/chunks/Clhcb3Tu.js" rel="modulepreload">
17		<link href="./_app/immutable/chunks/DCM-MFZH.js" rel="modulepreload">
18		<link href="./_app/immutable/chunks/wCGr5vgT.js" rel="modulepreload">
19		<link href="./_app/immutable/chunks/Be_UB0iT.js" rel="modulepreload">
20		<link href="./_app/immutable/chunks/jpQZmz7F.js" rel="modulepreload">
21		<link href="./_app/immutable/nodes/2.CcbgWJSa.js" rel="modulepreload">
22		<link href="./_app/immutable/chunks/C8oW4-2J.js" rel="modulepreload">
23		<!--1wnzlp0--><link rel="shortcut icon" href="/favicon.png"/> <link rel="icon" href="/_app/immutable/assets/self-portrait-v7.Dts7WL7k.jpeg" sizes="192x192"/> <meta name="description" content="Hi, I'm Caleb, a web developer who lives for Christ by building enjoyable apps and useful tools. Come see what I've made!"/> <meta property="og:title" content="Caleb Evans | Coder for Christ"/> <meta property="og:site_property" content="Caleb Evans"/> <meta property="og:description" content="Hi, I'm Caleb, a web developer who lives for Christ by building enjoyable apps and useful tools. Come see what I've made!"/> <meta property="og:url" content="https://calebevans.me/"/> <meta property="og:image" content="https://calebevans.me/_app/immutable/assets/social-preview.kE2afJxq.png"/> <meta property="og:type" content="website"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:site" content="@caleb531"/> <meta name="twitter:creator" content="@caleb531"/> <meta name="twitter:title" content="Caleb Evans | Coder for Christ"/> <meta name="twitter:description" content="Hi, I'm Caleb, a web developer who lives for Christ by building enjoyable apps and useful tools. Come see what I've made!"/> <meta name="twitter:image" content="https://calebevans.me/_app/immutable/assets/social-preview.kE2afJxq.png"/> <meta name="google-site-verification" content="hgENNCrZvitO_dtrCT_F6VdV1YspqEDh-nBMoq0dL5g"/> <link rel="canonical" href="https://calebevans.me/"/> <link rel="alternate" hreflang="en-US" href="https://calebevans.me/"/> <!---->
23<script type="application/ld+json">{
24  "@type": "WebSite",
25  "name": "Caleb Evans | Coder for Christ",
26  "headline": "Caleb Evans | Coder for Christ",
27  "url": "https://calebevans.me/",
28  "description": "Hi, I'm Caleb, a web developer who lives for Christ by building enjoyable apps and useful tools. Come see what I've made!",
29  "@context": "https://schema.org"
30}</script>
30<!----><!----> <link rel="apple-touch-icon" href="/_app/immutable/assets/self-portrait-v7.B8FA2ypu.jpeg" sizes="76x76"/> <link rel="apple-touch-icon" href="/_app/immutable/assets/self-portrait-v7.Chmzwtin.jpeg" sizes="120x120"/> <link rel="apple-touch-icon" href="/_app/immutable/assets/self-portrait-v7.K6CT_NVV.jpeg" sizes="152x152"/> <link rel="apple-touch-icon" href="/_app/immutable/assets/self-portrait-v7.DBwQvutq.jpeg" sizes="180x180"/> <!--[0-->
30<script data-goatcounter="https://calebevans-personalwebsite.goatcounter.com/count" data-goatcounter-settings="{&quot;no_onload&quot;:true}" async="" src="https://gc.zgo.at/count.v4.js" crossorigin="anonymous" integrity="sha384-nRw6qfbWyJha9LhsOtSb2YJDyZdKvvCFh0fJYlkquSFjUxp9FVNugbfy8q1jdxI+"></script>
30<!----><!--]--><!----><title>Caleb Evans | Coder for Christ</title>
31		<link href="./_app/immutable/assets/0.BwpvBDwY.css" rel="stylesheet">
32  </head>
33  <body data-sveltekit-preload-data="hover">
34    <div class="site-wrapper"><!--[--><!--[0--><!--[--><div class="site-background"></div> <!----> <a class="skip-to-main-content accessibility-only" href="#page">Skip to main content</a> <header class="site-header"><a href="./" class="site-title-link" rel="home"><img class="site-header-image" src="/_app/immutable/assets/self-portrait-v7.DUjFRGDk.jpeg" srcset="/_app/immutable/assets/self-portrait-v7.Chmzwtin.jpeg 2x" width="60" height="60" alt=""/> <h1 class="site-title">Caleb Evans</h1></a> <nav class="site-header-nav"><button type="button" class="site-header-nav-toggle" aria-label="Toggle Navigation" aria-controls="site-header-nav-list" aria-haspopup="true" aria-expanded="false" tabindex="0"><img src="/_app/immutable/assets/nav-toggle.VED30w1y.svg" alt="" aria-hidden="true"/></button> <ul class="site-header-nav-list" id="site-header-nav-list" style="--menu-arrow-height: 10px; --menu-arrow-width: 20px; --menu-arrow-offset-x: 30px; --menu-border-radius: 5px;"><svg class="site-header-nav-list-background" viewBox="0 0 100 200" preserveAspectRatio="none" aria-hidden="true" focusable="false"><path d="M 5 10 H 60 L 70 0 L 80 10 H 95 Q 100 10 100 15 V 195 Q 100 200 95 200 H 5 Q 0 200 0 195 V 15 Q 0 10 5 10 Z" fill="var(--menu-background-color)" stroke="var(--menu-border-color)" stroke-width="var(--menu-border-width)" vector-effect="non-scaling-stroke"></path></svg> <!--[--><li><a href="/about/" tabindex="0">About</a></li><li><a href="/projects/" tabindex="0">Projects</a></li><li><a href="/websites/" tabindex="0">Websites</a></li><li><a href="/contact/" tabindex="0">Contact</a></li><!--]--></ul></nav><!----></header><!----> <main><article class="page" id="page"><!----><section class="page-content"><!--[-1--><h2 class="accessibility-only">Homepage</h2><!--]--> <!--[0--><!--[--><article class="home-intro"><div class="home-intro-left"><img src="/_app/immutable/assets/self-portrait-v7.DBwQvutq.jpeg" srcset="/_app/immutable/assets/self-portrait-v7.Bp6DpIEu.jpeg 2x" width="180" height="180" alt="Caleb Evans" class="home-intro-photo"/></div> <div class="home-intro-right"><p><strong>Hi, I'm Caleb</strong>
34, a web developer who lives for Christ by building enjoyable
35      apps &amp; useful tools. <strong>Take a look around!</strong></p></div></article> <section><h2 class="accessibility-only">Projects</h2> <article class="project-archive"><div class="project-search-container"><form class="project-search-container-form"><div class="search-input-container"><input type="search" value="" name="search" id="project-search-input" placeholder="Search for a project" aria-label="Search for a project; results will update as you type"/> <button type="button" class="search-input-clear-button hidden" title="Clear Search Query"><img src="/_app/immutable/assets/clear-search.Dx-7uDHT.svg" alt="Clear Search Query"/></button></div><!----></form> <!--[0--><div class="project-search-result-count" aria-live="polite" aria-atomic="true"><!--[-1-->Showing 69 projects<!--]--></div><!--]--></div> <div class="project-category-columns" aria-live="polite" aria-atomic="true"><!--[--><div class="project-category-column"><!--[--><!--[0--><section class="entry-list project-category"><h3 class="entry-list-category-title">Games</h3> <!--[--><article data-entry-id="connect-four" class="entry project"><!--[0--><a class="entry-image" href="https://connectfour.calebevans.me/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/connect-four.BapHwEwk.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://connectfour.calebevans.me/"><!--[0--><!---->Connect Four<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->The slickest way to get 4-in-a-row; play against the A.I. or against a friend!<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="inflection-point" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/inflection-point/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/inflection-point.DhuWKc3T.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/inflection-point/"><!--[0--><!---->Inflection Point<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A rhythmic maze game involving strategic timing and unexpected twists<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="pegjump" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/pegjump/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/pegjump.D8CPT94m.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/pegjump/"><!--[0--><!---->PegJump<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Jump the pegs until only one remains<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="pong" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/pong/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/pong.K4G34kwf.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/pong/"><!--[0--><!---->Pong<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Play an HTML5 remake of the classic game<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="repeat" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/repeat/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/repeat.NYxurE2M.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/repeat/"><!--[0--><!---->Repeat<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Repeat the pattern, whatever it may be<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="rink" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/rink/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/rink.D95fbyOt.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/rink/"><!--[0--><!---->Rink<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Slide the puck as close as possible to the target<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="speed-dots" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/speed-dots/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/speed-dots.CAL2GMwX.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/speed-dots/"><!--[0--><!---->Speed Dots<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Race against the clock to click every dot<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0-->
35<section class="entry-list project-category"><h3 class="entry-list-category-title">Fun</h3> <!--[--><article data-entry-id="flip-book" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/flip-book/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/flip-book.Bnu3WDkT.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/flip-book/"><!--[0--><!---->Flip Book<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Create flip book-style animations to share with friends!<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="unscrambler" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/unscrambler/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/unscrambler.DYqbAOlv.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/unscrambler/"><!--[0--><!---->Unscrambler<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Unscramble any scrambled phrase or Boggle board into dictionary words<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="painter" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/painter/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/painter.BaZQNMUq.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/painter/"><!--[0--><!---->Painter<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A simple painting app for expressing yourself<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="web-libs" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/web-libs/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/web-libs.d83SY4qS.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/web-libs/"><!--[0--><!---->Web Libs<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Create and share custom &#39;mad libs&#39;<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="until" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/until/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/until.Bxa_5kIy.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/until/"><!--[0--><!---->Until<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Count down the years, weeks, and days until a particular date<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="atom" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/atom/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/atom.CXX4beRI.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/atom/"><!--[0--><!---->Atom<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A bouncy atom that you can sling around the page<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="colorful-chips" class="entry project"><!--[0--><a class="entry-image" href="http://projects.calebevans.me/colorful-chips/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/colorful-chips.CGGucC7L.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="http://projects.calebevans.me/colorful-chips/"><!--[0--><!---->Colorful Chips<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->An interactive, colorful time-waster; my very first project<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0-->
35<section class="entry-list project-category"><h3 class="entry-list-category-title">Math</h3> <!--[--><article data-entry-id="angles" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/angles/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/angles.SzpafLVT.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/angles/"><!--[0--><!---->Angles<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Gets statistics and visuals for any angle<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="binomial-expander" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/binomial-expander/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/binomial-expander.B91ixTWu.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/binomial-expander/"><!--[0--><!---->Binomial Expander<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Expand any binomial almost instantly<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="expressions" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/expressions/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/expressions.CukGDp_r.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/expressions/"><!--[0--><!---->Expressions<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Create beautiful math expressions using TeX<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="grapher" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/grapher/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/grapher.BFrox1l-.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/grapher/"><!--[0--><!---->Grapher<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Graph Cartesian and polar equations<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="matrices" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/matrices/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/matrices.AdnxGHPK.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/matrices/"><!--[0--><!---->Matrices<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Have fun manipulating matrices<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="quadratical" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/quadratical/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/quadratical.CDOapC93.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/quadratical/"><!--[0--><!---->Quadratical<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Solve any quadratic equation without fear of radicals or imaginary numbers<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="truthy" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/truthy/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/truthy.BZ_MktsS.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/truthy/"><!--[0--><!---->Truthy<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Construct truth tables without fatiguing your hand<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="sequencer" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/sequencer/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/sequencer.Cynb6XS9.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/sequencer/"><!--[0--><!---->Sequencer<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Create and examine sequences and series<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="flashmath" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/flashmath/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/flashmath.HjZ32hwK.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/flashmath/"><!--[0--><!---->FlashMath<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Quick! What&#39;s two plus two?<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0-->
35<section class="entry-list project-category"><h3 class="entry-list-category-title">Tools / Productivity</h3> <!--[--><article data-entry-id="faith-dashboard" class="entry project"><!--[0--><a class="entry-image" href="https://faithdashboard.com" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/faith-dashboard.ptRFNSTS.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://faithdashboard.com"><!--[0--><!---->Faith Dashboard<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Your home for strength and encouragement every day.<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="workday-time-calculator" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/workday-time-calculator" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/workday-time-calculator.BTpOo6hU.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/workday-time-calculator"><!--[0--><!---->Workday Time Calculator<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Track time throughout your workday without missing a beat<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="bg-generator" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/bg-generator/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/bg-generator.U6cVuBQS.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/bg-generator/"><!--[0--><!---->BG Generator<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Generate grid-based tiled background images with ease<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="2fa-code-generator" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/2fa-code-generator/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/2fa-code-generator.DvlUH-9n.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/2fa-code-generator/"><!--[0--><!---->2FA Code Generator<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Have a handwritten 2FA secret? This is a safe place to generate a code from it!<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="palomar-scheduler" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/palomar-scheduler/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/palomar-scheduler.C9n6wLyE.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/palomar-scheduler/"><!--[0--><!---->Palomar Scheduler<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Build your class schedule for Palomar College<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="pswd-matcher" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/pswd-matcher/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/pswd-matcher.DyuwvbTq.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/pswd-matcher/"><!--[0--><!---->Pswd Matcher<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Need to learn a new password? Learn it here!<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="regexper" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/regexper/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/regexper.DwttQ_oM.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/regexper/"><!--[0--><!---->RegExper<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Test a regular expression against any pattern<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="rgb-mixer" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/rgb-mixer/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/rgb-mixer.BIxJOwPg.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/rgb-mixer/"><!--[0--><!---->RGB Mixer<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Mix red, green, and blue to create colors<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="showdown" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/showdown/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/showdown.D_17rasU.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/showdown/"><!--[0--><!---->Showdown<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Put two snippets of JS code to the test!<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="swatches" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/swatches/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/swatches.C_h-HFE-.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/swatches/"><!--[0--><!---->Swatches<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Create and organize collections of colors<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="html-selector" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/html-selector/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/html-selector.CHG0qK-B.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/html-selector/"><!--[0--><!---->HTML Selector<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->
35Create your HTML using CSS selectors, Emmet-style<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="js-console" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/js-console/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/js-console.u4z4mHjA.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/js-console/"><!--[0--><!---->JS Console<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A JavaScript command line<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--]--></div><div class="project-category-column"><!--[--><!--[0--><section class="entry-list project-category"><h3 class="entry-list-category-title">CLI Programs</h3> <!--[--><article data-entry-id="imessage-conversation-analyzer" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/imessage-conversation-analyzer" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/imessage-conversation-analyzer.DnMshkT4.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/imessage-conversation-analyzer"><!--[0--><!---->iMessage Conversation Analyzer<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Gathers metrics for the entire history of a macOS Messages conversation<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="cache-simulator" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/cache-simulator" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/cache-simulator.B-_P_e8I.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/cache-simulator"><!--[0--><!---->Cache Simulator<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A processor cache simulator for the MIPS instruction set architecture<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="dotfiles" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/dotfiles" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/dotfiles.Biib8x27.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/dotfiles"><!--[0--><!---->dotfiles<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Personal configuration files and setup scripts for my shell, editor, and more<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="bump-anything" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/bump-anything" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/bump-anything.COKqdy_6.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/bump-anything"><!--[0--><!---->Bump Anything<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Increment the version number in virtually any file or any type<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="cidr-brewer" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/cidr-brewer" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/cidr-brewer.c_uzskI4.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/cidr-brewer"><!--[0--><!---->CIDR Brewer<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Break down any IPv4 address into network ID and everything else<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="coin-problem" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/coin-problem" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/coin-problem.swsVWmu2.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/coin-problem"><!--[0--><!---->Coin Problem<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A generalized solver for a coin-based math problem from <em>Parade</em> magazine<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="multi-line-replacer" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/multi-line-replacer" aria-hidden="true" tabindex="-1" title=""><!--[0-->
35<img src="/_app/immutable/assets/multi-line-replacer.Bwx3PS4Y.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/multi-line-replacer"><!--[0--><!---->Multi-Line Replacer<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Replace multi-line hunks of code without escaping or indentation hassles<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="romnum" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/romnum" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/romnum.Ct0RxoiO.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/romnum"><!--[0--><!---->Romnum<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A bidirectional Roman Numeral converter, written in Python<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="three-of-a-crime" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/three-of-a-crime" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/three-of-a-crime.ChMIgGsZ.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/three-of-a-crime"><!--[0--><!---->Three of a Crime<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Simulator programs for the card game, <a href="https://gamewright.com/product/Three-of-a-Crime">Three of a Crime</a><!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0--><section class="entry-list project-category"><h3 class="entry-list-category-title">JavaScript Libraries</h3> <!--[--><article data-entry-id="jcanvas" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/jcanvas/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/jcanvas.BZR4WdDg.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/jcanvas/"><!--[0--><!---->jCanvas<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Take control of the HTML5 canvas, jQuery-style<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="youversion-suggest-api" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/youversion-suggest-api" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/youversion-suggest-api.D1U3094n.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/youversion-suggest-api"><!--[0--><!---->YouVersion Suggest API<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A cross-runtime library for searching/fetching Bible content from YouVersion<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="calc" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/calc" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/calc.qa1bI7Bi.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/calc"><!--[0--><!---->Calc<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A JS math library with 130+ functions for trig, combinatorics, and much more<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="sw-update-manager" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/sw-update-manager" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/sw-update-manager.JZqJ_BQi.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/sw-update-manager"><!--[0--><!---->SW Update Manager<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Detect service worker updates and notify the user<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0-->
35<section class="entry-list project-category"><h3 class="entry-list-category-title">Alfred Workflows</h3> <!--[--><article data-entry-id="youversion-suggest-alfred" class="entry project"><!--[0--><a class="entry-image" href="https://alfred.app/workflows/caleb531/youversion-suggest/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/youversion-suggest-alfred.mahg-7NR.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://alfred.app/workflows/caleb531/youversion-suggest/"><!--[0--><!---->YouVersion Suggest<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Search the Bible from Alfred in just a few keystrokes<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="play-song" class="entry project"><!--[0--><a class="entry-image" href="https://alfred.app/workflows/caleb531/play-song/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/play-song.9At5tmAq.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://alfred.app/workflows/caleb531/play-song/"><!--[0--><!---->Play Song<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Play songs, artists, and more in Apple Music with few keystrokes<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="open-conference-url" class="entry project"><!--[0--><a class="entry-image" href="https://alfred.app/workflows/caleb531/open-conference-url/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/open-conference-url.C_X51ZCV.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://alfred.app/workflows/caleb531/open-conference-url/"><!--[0--><!---->Open Conference URL<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Open the Zoom/Meet/etc. URL for your next calendar event<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="jira-for-alfred" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/jira-for-alfred" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/jira-for-alfred.B8pIxAOQ.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/jira-for-alfred"><!--[0--><!---->Jira for Alfred<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Quicky look up any Jira issue from Alfred by its key or summary<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="planning-center-alfred" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/planning-center-alfred" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/planning-center-alfred.CO1S0AZ5.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/planning-center-alfred"><!--[0--><!---->Planning Center for Alfred<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Look up people in your church&#39;s Planning Center with Alfred<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="alfred-workflow-packager" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/alfred-workflow-packager" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/alfred-workflow-packager.CZyQ7Zmw.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/alfred-workflow-packager"><!--[0--><!---->Alfred Workflow Packager<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Package and export Alfred workflows without the hassle<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0-->
35<section class="entry-list project-category"><h3 class="entry-list-category-title">Chrome Extensions</h3> <!--[--><article data-entry-id="sensitive-data-masker" class="entry project"><!--[0--><a class="entry-image" href="https://chromewebstore.google.com/detail/jknjckjoianbkgfpjifjebfjgnfdpmgb" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/sensitive-data-masker.wFzi3SPQ.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://chromewebstore.google.com/detail/jknjckjoianbkgfpjifjebfjgnfdpmgb"><!--[0--><!---->Sensitive Data Masker<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Mask sensitive information like monetary amounts and credit card numbers<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="smart-fake-form-fill" class="entry project"><!--[0--><a class="entry-image" href="https://chromewebstore.google.com/detail/smart-fake-form-fill/ljhoabhcjeffcmaafbhncljjmffpjmfi" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/smart-fake-form-fill.Dwe2yHsI.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://chromewebstore.google.com/detail/smart-fake-form-fill/ljhoabhcjeffcmaafbhncljjmffpjmfi"><!--[0--><!---->Smart Fake Form Fill<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Populate forms with relevant, AI-generated data for testing purposes<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="youversion-suggest-chrome" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/youversion-suggest-chrome" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/youversion-suggest-chrome.CFBkBgRe.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/youversion-suggest-chrome"><!--[0--><!---->YouVersion Bible Suggest<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Search the Bible from Chrome in just a few keystrokes<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0--><section class="entry-list project-category"><h3 class="entry-list-category-title">Raycast Extensions</h3> <!--[--><article data-entry-id="planning-center-raycast" class="entry project"><!--[0--><a class="entry-image" href="https://www.raycast.com/caleb531/planning-center" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/planning-center-raycast.UmzQsSEl.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://www.raycast.com/caleb531/planning-center"><!--[0--><!---->Planning Center for Raycast<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Look up people in your church&#39;s Planning Center with Raycast<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="youversion-suggest-raycast" class="entry project"><!--[0--><a class="entry-image" href="https://www.raycast.com/caleb531/youversion-suggest" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/youversion-suggest-raycast.SaoAPyX4.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://www.raycast.com/caleb531/youversion-suggest"><!--[0--><!---->YouVersion Bible Suggest<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Search the Bible from Raycast in just a few keystrokes<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0-->
35<section class="entry-list project-category"><h3 class="entry-list-category-title">Computer Science</h3> <!--[--><article data-entry-id="automata" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/automata" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/automata.guZTJF8k.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/automata"><!--[0--><!---->Automata<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A Python library for simulating finite automata, pushdown automata, and Turing machines<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="b-sketcher" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/b-sketcher/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/b-sketcher.CXTjNXpm.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/b-sketcher/"><!--[0--><!---->B-Sketcher<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Draw pretty B-trees with minimal effort<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="binary-brancher" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/binary-brancher/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/binary-brancher.BY5dIdMM.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/binary-brancher/"><!--[0--><!---->Binary Brancher<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Binary search trees made fun<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="data-structure-visualizer" class="entry project"><!--[0--><a class="entry-image" href="https://projects.calebevans.me/data-structure-visualizer/" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/data-structure-visualizer.BuAhER3l.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://projects.calebevans.me/data-structure-visualizer/"><!--[0--><!---->Data Structure Visualizer<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Play with live linked lists and other data structures<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0--><section class="entry-list project-category"><h3 class="entry-list-category-title">Rollup Plugins</h3> <!--[--><article data-entry-id="rollup-plugin-peggy" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/rollup-plugin-peggy" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/rollup-plugin-peggy.0gUBBCR5.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/rollup-plugin-peggy"><!--[0--><!---->rollup-plugin-peggy<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A fork of <a href="https://www.npmjs.com/package/rollup-plugin-pegjs">rollup-plugin-pegjs</a> that uses PEG.js&#39;s successor, Peggy<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="rollup-plugin-watch-globs" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/rollup-plugin-watch-globs" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/rollup-plugin-watch-globs.CHzJsshP.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/rollup-plugin-watch-globs"><!--[0--><!---->rollup-plugin-watch-globs<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Build your application when any arbitrary file changes<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0-->
35<section class="entry-list project-category"><h3 class="entry-list-category-title">VS Code Extensions</h3> <!--[--><article data-entry-id="sca-for-vscode" class="entry project"><!--[0--><a class="entry-image" href="https://marketplace.visualstudio.com/items?itemName=caleb531.sca-for-vscode" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/sca-for-vscode.C_RhRSZy.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://marketplace.visualstudio.com/items?itemName=caleb531.sca-for-vscode"><!--[0--><!---->SCA for VS Code<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Adds syntax highlighting for SuiteCommerce Advanced file types in Visual Studio Code<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--[0--><section class="entry-list project-category"><h3 class="entry-list-category-title">WordPress</h3> <!--[--><article data-entry-id="awesome-cpt" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/awesome-cpt" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/awesome-cpt.D5aZQ3Zj.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/awesome-cpt"><!--[0--><!---->Awesome CPT<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Code WordPress CPTs, taxonomies, and meta boxes with ease and power<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="intervarsity-theme" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/intervarsity-theme" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/intervarsity-theme.CRMDyxTB.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/intervarsity-theme"><!--[0--><!---->InterVarsity Theme<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->A WordPress theme for InterVarsity Christian Fellowship chapters<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><article data-entry-id="ssh-wp-backup" class="entry project"><!--[0--><a class="entry-image" href="https://github.com/caleb531/ssh-wp-backup" aria-hidden="true" tabindex="-1" title=""><!--[0--><img src="/_app/immutable/assets/ssh-wp-backup.wTe1cuZc.svg" alt="" width="80" height="80" loading="lazy"/><!----><!--]--></a><!----> <section class="entry-main"><!--[0--><!----><h4 class="entry-title"><a href="https://github.com/caleb531/ssh-wp-backup"><!--[0--><!---->SSH WordPress Backup<!----><!--]--></a><!----></h4><!----><!----> <!--[0--><p class="entry-desc"><!--[0--><!---->Backup and restore any remote WordPress database<!----><!----><!--]--></p><!--]--><!----><!--]--></section><!----><!----><!--]--></article><!--]--></section><!--]--><!--]--></div><!--]--></div></article><!----></section><!--]--><!----><!--]--></section><!----></article></main> <footer class="site-footer"><div class="entry-list contact-link-list entry-list-compact"><!--[--><!--[0--><article data-entry-id="email" class="entry contact-link"><!--[0--><!--[-1--><a class="entry-image" href="mailto:[email protected]" aria-hidden="false" tabindex="0" title="Email"><!--[0--><img src="/_app/immutable/assets/email.BVPd7wji.svg" alt="Email" width="40" height="40" loading="lazy"/><!----><!--]--></a><!--]--><!----><!--]--></article><!--]--><!--[0--><article data-entry-id="github" class="entry contact-link"><!--[0--><!--[-1--><a class="entry-image" href="https://github.com/caleb531" aria-hidden="false" tabindex="0" title="GitHub"><!--[0--><img src="/_app/immutable/assets/github.Bi-57m_i.svg" alt="GitHub" width="40" height="40" loading="lazy"/><!----><!--]--></a>
35<!--]--><!----><!--]--></article><!--]--><!--[0--><article data-entry-id="x" class="entry contact-link"><!--[0--><!--[-1--><a class="entry-image" href="https://twitter.com/caleb531" aria-hidden="false" tabindex="0" title="Twitter / X"><!--[0--><img src="/_app/immutable/assets/x.BJgtmZs1.svg" alt="Twitter / X" width="40" height="40" loading="lazy"/><!----><!--]--></a><!--]--><!----><!--]--></article><!--]--><!--[0--><article data-entry-id="threads" class="entry contact-link"><!--[0--><!--[-1--><a class="entry-image" href="https://www.threads.net/@calebforjoy" aria-hidden="false" tabindex="0" title="Threads"><!--[0--><img src="/_app/immutable/assets/threads.Dy-i33mM.svg" alt="Threads" width="40" height="40" loading="lazy"/><!----><!--]--></a><!--]--><!----><!--]--></article><!--]--><!--[0--><article data-entry-id="blue-sky" class="entry contact-link"><!--[0--><!--[-1--><a class="entry-image" href="https://bsky.app/profile/calebevans.me" aria-hidden="false" tabindex="0" title="Blue Sky"><!--[0--><img src="/_app/immutable/assets/blue-sky.BDdr_y53.svg" alt="Blue Sky" width="40" height="40" loading="lazy"/><!----><!--]--></a><!--]--><!----><!--]--></article><!--]--><!--[0--><article data-entry-id="linkedin" class="entry contact-link"><!--[0--><!--[-1--><a class="entry-image" href="https://www.linkedin.com/in/caleb531" aria-hidden="false" tabindex="0" title="LinkedIn"><!--[0--><img src="/_app/immutable/assets/linkedin.CE8TYiGx.svg" alt="LinkedIn" width="40" height="40" loading="lazy"/><!----><!--]--></a><!--]--><!----><!--]--></article><!--]--><!--[0--><article data-entry-id="keybase" class="entry contact-link"><!--[0--><!--[-1--><a class="entry-image" href="https://keybase.io/caleb531" aria-hidden="false" tabindex="0" title="Keybase"><!--[0--><img src="/_app/immutable/assets/keybase.CGHQ5uHf.svg" alt="Keybase" width="40" height="40" loading="lazy"/><!----><!--]--></a><!--]--><!----><!--]--></article><!--]--><!--]--></div><!----> <p><small>© 2013-2026 Caleb Evans | <a href="./privacy-policy/">Privacy Policy</a></small></p> <p>Like what I've made? Please <a href="https://www.paypal.com/donate/?business=WTNCKVGJL34X6&amp;no_recurring=0&amp;item_name=Please+consider+donating+if+you+like+what+I%27ve+made+and+would+like+to+support+continued+development%21&amp;currency_code=USD">donate</a>!</p></footer><!----><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
36			
37			
37<script>
38				{
39					__sveltekit_qrfhzk = {
40						base: new URL(".", location).pathname.slice(0, -1)
41					};
42
43					const element = document.currentScript.parentElement;
44
45					Promise.all([
46						import("./_app/immutable/entry/start.C79eLh4V.js"),
47						import("./_app/immutable/entry/app.9jxtR-MJ.js")
48					]).then(([kit, app]) => {
49						kit.start(app, element, {
50							node_ids: [0, 2],
51							data: [{type:"data",data:{pathname:"/",contactLinks:[{id:"blue-sky",title:"Blue Sky",direct_url:"https://bsky.app/profile/calebevans.me",description:"This account is newer, but I will try to post the same updates here as on Twitter / X",content:"",iconUrl:"/_app/immutable/assets/blue-sky.BDdr_y53.svg"},{id:"email",title:"Email",direct_url:"mailto:[email protected]",description:"Questions and comments are always welcome!",content:"",iconUrl:"/_app/immutable/assets/email.BVPd7wji.svg"},{id:"github",title:"GitHub",direct_url:"https://github.com/caleb531",description:"The happy home for all of my open-source code",content:"",iconUrl:"/_app/immutable/assets/github.Bi-57m_i.svg"},{id:"keybase",title:"Keybase",direct_url:"https://keybase.io/caleb531",description:"Proof that I am who I say I am",content:"",iconUrl:"/_app/immutable/assets/keybase.CGHQ5uHf.svg"},{id:"linkedin",title:"LinkedIn",direct_url:"https://www.linkedin.com/in/caleb531",description:"The hub for my professional self, including my education and experience",content:"",iconUrl:"/_app/immutable/assets/linkedin.CE8TYiGx.svg"},{id:"threads",title:"Threads",direct_url:"https://www.threads.net/@calebforjoy",description:"If you don&#39;t like Twitter / X, I also post all my same updates on Threads",content:"",iconUrl:"/_app/immutable/assets/threads.Dy-i33mM.svg"},{id:"x",title:"Twitter / X",direct_url:"https://twitter.com/caleb531",description:"Follow me for updates on my projects and interesting things I find on the Web",content:"",iconUrl:"/_app/immutable/assets/x.BJgtmZs1.svg"}]},uses:{url:1},slash:"always"},{type:"data",data:{id:"home",description:"Hi, I'm Caleb, a web developer who lives for Christ by building enjoyable apps and useful tools. Come see what I've made!",projects:[{id:"2fa-code-generator",title:"2FA Code Generator",direct_url:"https://projects.calebevans.me/2fa-code-generator/",category:"tools",description:"Have a handwritten 2FA secret? This is a safe place to generate a code from it!",content:"",iconUrl:"/_app/immutable/assets/2fa-code-generator.DvlUH-9n.svg"},{id:"alfred-workflow-packager",title:"Alfred Workflow Packager",direct_url:"https://github.com/caleb531/alfred-workflow-packager",category:"alfred",description:"Package and export Alfred workflows without the hassle",content:"",iconUrl:"/_app/immutable/assets/alfred-workflow-packager.CZyQ7Zmw.svg"},{id:"angles",title:"Angles",direct_url:"https://projects.calebevans.me/angles/",category:"math",description:"Gets statistics and visuals for any angle",content:"",iconUrl:"/_app/immutable/assets/angles.SzpafLVT.svg"},{id:"atom",title:"Atom",direct_url:"https://projects.calebevans.me/atom/",category:"fun",description:"A bouncy atom that you can sling around the page",content:"",iconUrl:"/_app/immutable/assets/atom.CXX4beRI.svg"},{id:"automata",title:"Automata",direct_url:"https://github.com/caleb531/automata",category:"computer-science",description:"A Python library for simulating finite automata, pushdown automata, and Turing machines",content:"",iconUrl:"/_app/immutable/assets/automata.guZTJF8k.svg"},{id:"awesome-cpt",title:"Awesome CPT",direct_url:"https://github.com/caleb531/awesome-cpt",category:"wordpress",description:"Code WordPress CPTs, taxonomies, and meta boxes with ease and power",content:"",iconUrl:"/_app/immutable/assets/awesome-cpt.D5aZQ3Zj.svg"},{id:"b-sketcher",title:"B-Sketcher",direct_url:"https://projects.calebevans.me/b-sketcher/",category:"computer-science",description:"Draw pretty B-trees with minimal effort",content:"",iconUrl:"/_app/immutable/assets/b-sketcher.CXTjNXpm.svg"},{id:"bg-generator",title:"BG Generator",direct_url:"https://projects.calebevans.me/bg-generator/",category:"tools",description:"Generate grid-based tiled background images with ease",content:"",iconUrl:"/_app/immutable/assets/bg-generator.U6cVuBQS.svg"},{id:"binary-brancher",title:"Binary Brancher",direct_url:"https://projects.calebevans.me/binary-brancher/",category:"computer-science",description:"Binary search trees made fun",content:"",iconUrl:"/_app/immutable/assets/binary-brancher.BY5dIdMM.svg"},{id:"binomial-expander",title:"Binomial Expander",direct_url:"https://projects.calebevans.me/binomial-expander/",category:"math",description:"Expand any binomial almost instantly",content:"",iconUrl:"/_app/immutable/assets/binomial-expander.B91ixTWu.svg"},{id:"bump-anything",title:"Bump Anything",direct_url:"https://github.com/caleb531/bump-anything",category:"programs",description:"Increment the version number in virtually any file or any type",content:"",iconUrl:"/_app/immutable/assets/bump-anything.COKqdy_6.svg"},{id:"cache-simulator",title:"Cache Simulator",direct_url:"https://github.com/caleb531/cache-simulator",category:"programs",description:"A processor cache simulator for the MIPS instruction set architecture",content:"",iconUrl:"/_app/immutable/assets/cache-simulator.B-_P_e8I.svg"},{id:"calc",title:"Calc",direct_url:"https://github.com/caleb531/calc",category:"javascript-libraries",description:"A JS math library with 130+ functions for trig, combinatorics, and much more",content:"",iconUrl:"/_app/immutable/assets/calc.qa1bI7Bi.svg"},{id:"cidr-brewer",title:"CIDR Brewer",direct_url:"https://github.com/caleb531/cidr-brewer",category:"programs",description:"Break down any IPv4 address into network ID and everything else",content:"",iconUrl:"/_app/immutable/assets/cidr-brewer.c_uzskI4.svg"},{id:"coin-problem",title:"Coin Problem",direct_url:"https://github.com/caleb531/coin-problem",category:"programs",description:"A generalized solver for a coin-based math problem from \u003Cem>Parade\u003C/em> magazine",content:"",iconUrl:"/_app/immutable/assets/coin-problem.swsVWmu2.svg"},{id:"colorful-chips",title:"Colorful Chips",direct_url:"http://projects.calebevans.me/colorful-chips/",category:"fun",description:"An interactive, colorful time-waster; my very first project",content:"",iconUrl:"/_app/immutable/assets/colorful-chips.CGGucC7L.svg"},{id:"connect-four",title:"Connect Four",direct_url:"https://connectfour.calebevans.me/",category:"games",description:"The slickest way to get 4-in-a-row; play against the A.I. or against a friend!",content:"",iconUrl:"/_app/immutable/assets/connect-four.BapHwEwk.svg"},{id:"data-structure-visualizer",title:"Data Structure Visualizer",direct_url:"https://projects.calebevans.me/data-structure-visualizer/",category:"computer-science",description:"Play with live linked lists and other data structures",content:"",iconUrl:"/_app/immutable/assets/data-structure-visualizer.BuAhER3l.svg"},{id:"dotfiles",title:"dotfiles",direct_url:"https://github.com/caleb531/dotfiles",category:"programs",description:"Personal configuration files and setup scripts for my shell, editor, and more",content:"",iconUrl:"/_app/immutable/assets/dotfiles.Biib8x27.svg"},{id:"expressions",title:"Expressions",direct_url:"https://projects.calebevans.me/expressions/",category:"math",description:"Create beautiful math expressions using TeX",content:"",iconUrl:"/_app/immutable/assets/expressions.CukGDp_r.svg"},{id:"faith-dashboard",title:"Faith Dashboard",direct_url:"https://faithdashboard.com",category:"tools",description:"Your home for strength and encouragement every day.",content:"",iconUrl:"/_app/immutable/assets/faith-dashboard.ptRFNSTS.svg"},{id:"flashmath",title:"FlashMath",direct_url:"https://projects.calebevans.me/flashmath/",category:"math",description:"Quick! What&#39;s two plus two?",content:"",iconUrl:"/_app/immutable/assets/flashmath.HjZ32hwK.svg"},{id:"flip-book",title:"Flip Book",direct_url:"https://projects.calebevans.me/flip-book/",category:"fun",description:"Create flip book-style animations to share with friends!",content:"",iconUrl:"/_app/immutable/assets/flip-book.Bnu3WDkT.svg"},{id:"grapher",title:"Grapher",direct_url:"https://projects.calebevans.me/grapher/",category:"math",description:"Graph Cartesian and polar equations",content:"",iconUrl:"/_app/immutable/assets/grapher.BFrox1l-.svg"},{id:"html-selector",title:"HTML Selector",direct_url:"https://projects.calebevans.me/html-selector/",category:"tools",description:"Create your HTML using CSS selectors, Emmet
51-style",content:"",iconUrl:"/_app/immutable/assets/html-selector.CHG0qK-B.svg"},{id:"imessage-conversation-analyzer",title:"iMessage Conversation Analyzer",direct_url:"https://github.com/caleb531/imessage-conversation-analyzer",category:"programs",description:"Gathers metrics for the entire history of a macOS Messages conversation",content:"",iconUrl:"/_app/immutable/assets/imessage-conversation-analyzer.DnMshkT4.svg"},{id:"inflection-point",title:"Inflection Point",direct_url:"https://projects.calebevans.me/inflection-point/",category:"games",description:"A rhythmic maze game involving strategic timing and unexpected twists",content:"",iconUrl:"/_app/immutable/assets/inflection-point.DhuWKc3T.svg"},{id:"intervarsity-theme",title:"InterVarsity Theme",direct_url:"https://github.com/caleb531/intervarsity-theme",category:"wordpress",description:"A WordPress theme for InterVarsity Christian Fellowship chapters",content:"",iconUrl:"/_app/immutable/assets/intervarsity-theme.CRMDyxTB.svg"},{id:"jcanvas",title:"jCanvas",direct_url:"https://projects.calebevans.me/jcanvas/",category:"javascript-libraries",description:"Take control of the HTML5 canvas, jQuery-style",content:"",iconUrl:"/_app/immutable/assets/jcanvas.BZR4WdDg.svg"},{id:"jira-for-alfred",title:"Jira for Alfred",direct_url:"https://github.com/caleb531/jira-for-alfred",category:"alfred",description:"Quicky look up any Jira issue from Alfred by its key or summary",content:"",iconUrl:"/_app/immutable/assets/jira-for-alfred.B8pIxAOQ.svg"},{id:"js-console",title:"JS Console",direct_url:"https://projects.calebevans.me/js-console/",category:"tools",description:"A JavaScript command line",content:"",iconUrl:"/_app/immutable/assets/js-console.u4z4mHjA.svg"},{id:"matrices",title:"Matrices",direct_url:"https://projects.calebevans.me/matrices/",category:"math",description:"Have fun manipulating matrices",content:"",iconUrl:"/_app/immutable/assets/matrices.AdnxGHPK.svg"},{id:"multi-line-replacer",title:"Multi-Line Replacer",direct_url:"https://github.com/caleb531/multi-line-replacer",category:"programs",description:"Replace multi-line hunks of code without escaping or indentation hassles",content:"",iconUrl:"/_app/immutable/assets/multi-line-replacer.Bwx3PS4Y.svg"},{id:"open-conference-url",title:"Open Conference URL",direct_url:"https://alfred.app/workflows/caleb531/open-conference-url/",category:"alfred",description:"Open the Zoom/Meet/etc. URL for your next calendar event",content:"",iconUrl:"/_app/immutable/assets/open-conference-url.C_X51ZCV.svg"},{id:"painter",title:"Painter",direct_url:"https://projects.calebevans.me/painter/",category:"fun",description:"A simple painting app for expressing yourself",content:"",iconUrl:"/_app/immutable/assets/painter.BaZQNMUq.svg"},{id:"palomar-scheduler",title:"Palomar Scheduler",direct_url:"https://projects.calebevans.me/palomar-scheduler/",category:"tools",description:"Build your class schedule for Palomar College",content:"",iconUrl:"/_app/immutable/assets/palomar-scheduler.C9n6wLyE.svg"},{id:"pegjump",title:"PegJump",direct_url:"https://projects.calebevans.me/pegjump/",category:"games",description:"Jump the pegs until only one remains",content:"",iconUrl:"/_app/immutable/assets/pegjump.D8CPT94m.svg"},{id:"planning-center-alfred",title:"Planning Center for Alfred",direct_url:"https://github.com/caleb531/planning-center-alfred",category:"alfred",description:"Look up people in your church&#39;s Planning Center with Alfred",content:"",iconUrl:"/_app/immutable/assets/planning-center-alfred.CO1S0AZ5.svg"},{id:"planning-center-raycast",title:"Planning Center for Raycast",direct_url:"https://www.raycast.com/caleb531/planning-center",category:"raycast",description:"Look up people in your church&#39;s Planning Center with Raycast",content:"",iconUrl:"/_app/immutable/assets/planning-center-raycast.UmzQsSEl.svg"},{id:"play-song",title:"Play Song",direct_url:"https://alfred.app/workflows/caleb531/play-song/",category:"alfred",description:"Play songs, artists, and more in Apple Music with few keystrokes",content:"",iconUrl:"/_app/immutable/assets/play-song.9At5tmAq.svg"},{id:"pong",title:"Pong",direct_url:"https://projects.calebevans.me/pong/",category:"games",description:"Play an HTML5 remake of the classic game",content:"",iconUrl:"/_app/immutable/assets/pong.K4G34kwf.svg"},{id:"pswd-matcher",title:"Pswd Matcher",direct_url:"https://projects.calebevans.me/pswd-matcher/",category:"tools",description:"Need to learn a new password? Learn it here!",content:"",iconUrl:"/_app/immutable/assets/pswd-matcher.DyuwvbTq.svg"},{id:"quadratical",title:"Quadratical",direct_url:"https://projects.calebevans.me/quadratical/",category:"math",description:"Solve any quadratic equation without fear of radicals or imaginary numbers",content:"",iconUrl:"/_app/immutable/assets/quadratical.CDOapC93.svg"},{id:"regexper",title:"RegExper",direct_url:"https://projects.calebevans.me/regexper/",category:"tools",description:"Test a regular expression against any pattern",content:"",iconUrl:"/_app/immutable/assets/regexper.DwttQ_oM.svg"},{id:"repeat",title:"Repeat",direct_url:"https://projects.calebevans.me/repeat/",category:"games",description:"Repeat the pattern, whatever it may be",content:"",iconUrl:"/_app/immutable/assets/repeat.NYxurE2M.svg"},{id:"rgb-mixer",title:"RGB Mixer",direct_url:"https://projects.calebevans.me/rgb-mixer/",category:"tools",description:"Mix red, green, and blue to create colors",content:"",iconUrl:"/_app/immutable/assets/rgb-mixer.BIxJOwPg.svg"},{id:"rink",title:"Rink",direct_url:"https://projects.calebevans.me/rink/",category:"games",description:"Slide the puck as close as possible to the target",content:"",iconUrl:"/_app/immutable/assets/rink.D95fbyOt.svg"},{id:"rollup-plugin-peggy",title:"rollup-plugin-peggy",direct_url:"https://github.com/caleb531/rollup-plugin-peggy",category:"rollup-plugins",description:"A fork of \u003Ca href=\"https://www.npmjs.com/package/rollup-plugin-pegjs\">rollup-plugin-pegjs\u003C/a> that uses PEG.js&#39;s successor, Peggy",content:"",iconUrl:"/_app/immutable/assets/rollup-plugin-peggy.0gUBBCR5.svg"},{id:"rollup-plugin-watch-globs",title:"rollup-plugin-watch-globs",direct_url:"https://github.com/caleb531/rollup-plugin-watch-globs",category:"rollup-plugins",description:"Build your application when any arbitrary file changes",content:"",iconUrl:"/_app/immutable/assets/rollup-plugin-watch-globs.CHzJsshP.svg"},{id:"romnum",title:"Romnum",direct_url:"https://github.com/caleb531/romnum",category:"programs",description:"A bidirectional Roman Numeral converter, written in Python",content:"",iconUrl:"/_app/immutable/assets/romnum.Ct0RxoiO.svg"},{id:"sca-for-vscode",title:"SCA for VS Code",direct_url:"https://marketplace.visualstudio.com/items?itemName=caleb531.sca-for-vscode",category:"vscode",description:"Adds syntax highlighting for SuiteCommerce Advanced file types in Visual Studio Code",content:"",iconUrl:"/_app/immutable/assets/sca-for-vscode.C_RhRSZy.svg"},{id:"sensitive-data-masker",title:"Sensitive Data Masker",direct_url:"https://chromewebstore.google.com/detail/jknjckjoianbkgfpjifjebfjgnfdpmgb",category:"chrome",description:"Mask sensitive information like monetary amounts and credit card numbers",content:"",iconUrl:"/_app/immutable/assets/sensitive-data-masker.wFzi3SPQ.svg"},{id:"sequencer",title:"Sequencer",direct_url:"https://projects.calebevans.me/sequencer/",category:"math",description:"Create and examine sequences and series",content:"",iconUrl:"/_app/immutable/assets/sequencer.Cynb6XS9.svg"},{id:"showdown",title:"Showdown",direct_url:"https://projects.calebevans.me/showdown/",category:"tools",description:"Put two snippets of JS code to the test!",content:"",iconUrl:"/_app/immutable/assets/showdown.D_17rasU.svg"},{id:"smart-fake-form-fill",title:"Smart Fake Form Fill",direct_url:"https://chromewebstore.google.com/detail/smart-fake-form-fill/ljhoabhcjeffcmaafbhncljjmffpjmfi",category:"chrome",description:"Populate forms with relevant, AI-generated data for testing purposes",content:"",iconUrl:"/_app/immutable/assets/smart-fake-form-fill.Dwe2yHsI.svg"},{id:"speed-dots",title:"Speed Dots",direct_url:"https://projects.calebevans.me/speed-dots/",category:"games",description:"Race against the clock to click every dot",content:"",iconUrl:"/_app/immutable/assets/speed-dots.CAL2GMwX.svg"},{id:"ssh-wp-backup",title:"SSH WordPress Backup",direct_url:"https://github.com/caleb531/ssh-wp-backup",category:"wordpress",description:"Backup and restore any remote WordPress database",content:"",iconUrl:"/_app/immutable/assets/ssh-wp-backup.wTe1cuZc.svg"},{id:"sw-update-manager",title:"SW Update Manager",direct_url:"https://github.com/caleb531/sw-update-manager",category:"javascript-libraries",description:"Detect service worker updates and notify the user",content:"",iconUrl:"/_app/immutable/assets/sw-update-manager.JZqJ_BQi.svg"}
51,{id:"swatches",title:"Swatches",direct_url:"https://projects.calebevans.me/swatches/",category:"tools",description:"Create and organize collections of colors",content:"",iconUrl:"/_app/immutable/assets/swatches.C_h-HFE-.svg"},{id:"three-of-a-crime",title:"Three of a Crime",direct_url:"https://github.com/caleb531/three-of-a-crime",category:"programs",description:"Simulator programs for the card game, \u003Ca href=\"https://gamewright.com/product/Three-of-a-Crime\">Three of a Crime\u003C/a>",content:"",iconUrl:"/_app/immutable/assets/three-of-a-crime.ChMIgGsZ.svg"},{id:"truthy",title:"Truthy",direct_url:"https://projects.calebevans.me/truthy/",category:"math",description:"Construct truth tables without fatiguing your hand",content:"",iconUrl:"/_app/immutable/assets/truthy.BZ_MktsS.svg"},{id:"unscrambler",title:"Unscrambler",direct_url:"https://projects.calebevans.me/unscrambler/",category:"fun",description:"Unscramble any scrambled phrase or Boggle board into dictionary words",content:"",iconUrl:"/_app/immutable/assets/unscrambler.DYqbAOlv.svg"},{id:"until",title:"Until",direct_url:"https://projects.calebevans.me/until/",category:"fun",description:"Count down the years, weeks, and days until a particular date",content:"",iconUrl:"/_app/immutable/assets/until.Bxa_5kIy.svg"},{id:"web-libs",title:"Web Libs",direct_url:"https://projects.calebevans.me/web-libs/",category:"fun",description:"Create and share custom &#39;mad libs&#39;",content:"",iconUrl:"/_app/immutable/assets/web-libs.d83SY4qS.svg"},{id:"workday-time-calculator",title:"Workday Time Calculator",direct_url:"https://projects.calebevans.me/workday-time-calculator",category:"tools",description:"Track time throughout your workday without missing a beat",content:"",iconUrl:"/_app/immutable/assets/workday-time-calculator.BTpOo6hU.svg"},{id:"youversion-suggest-alfred",title:"YouVersion Suggest",direct_url:"https://alfred.app/workflows/caleb531/youversion-suggest/",category:"alfred",description:"Search the Bible from Alfred in just a few keystrokes",content:"",iconUrl:"/_app/immutable/assets/youversion-suggest-alfred.mahg-7NR.svg"},{id:"youversion-suggest-api",title:"YouVersion Suggest API",direct_url:"https://github.com/caleb531/youversion-suggest-api",category:"javascript-libraries",description:"A cross-runtime library for searching/fetching Bible content from YouVersion",content:"",iconUrl:"/_app/immutable/assets/youversion-suggest-api.D1U3094n.svg"},{id:"youversion-suggest-chrome",title:"YouVersion Bible Suggest",direct_url:"https://github.com/caleb531/youversion-suggest-chrome",category:"chrome",description:"Search the Bible from Chrome in just a few keystrokes",content:"",iconUrl:"/_app/immutable/assets/youversion-suggest-chrome.CFBkBgRe.svg"},{id:"youversion-suggest-raycast",title:"YouVersion Bible Suggest",direct_url:"https://www.raycast.com/caleb531/youversion-suggest",category:"raycast",description:"Search the Bible from Raycast in just a few keystrokes",content:"",iconUrl:"/_app/immutable/assets/youversion-suggest-raycast.SaoAPyX4.svg"}]},uses:{}}],
52							form: null,
53							error: null
54						});
55					});
56				}
57			</script>
57
58		</div>
59  </body>
60</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.