1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <title>Marc Cawood</title> 7 <meta 8 name="description" 9 content="Personal projects by Marc Cawood â local-first browser apps, wikis, and games." 10 /> 11 <link rel="icon" href="favicon.svg" type="image/svg+xml" /> 12 <link rel="alternate icon" href="favicon.ico" /> 13 <link rel="stylesheet" href="css/style.css" /> 14 </head> 15 <body> 16 <header class="site-header"> 17 <div class="wrap"> 18 <a class="brand" href="/">Marc <span>Cawood</span></a> 19 <nav> 20 <a href="//github.com/cawoodm" title="GitHub" aria-label="GitHub"> 21 <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> 22 <path 23 d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z" 24 /> 25 </svg> 26 <span class="sr-only">GitHub</span> 27 </a> 28 <a 29 href="//www.linkedin.com/in/marc-cawood-83923283/" 30 title="LinkedIn" 31 aria-label="LinkedIn" 32 > 33 <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"> 34 <path 35 d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.446-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zM7.119 20.452H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" 36 /> 37 </svg> 38 <span class="sr-only">LinkedIn</span> 39 </a> 40 </nav> 41 </div> 42 </header> 43 44 <main class="wrap"> 45 <section class="hero"> 46 <p class="eyebrow">Full-stack developer & tinkerer</p> 47 <h1>I build small tools that run entirely in your browser.</h1> 48 <p class="lead"> 49 No servers, no signup, no lock-in â local-first apps, wikis, and the 50 occasional game. 51 </p> 52 </section> 53 54 <section class="projects"> 55 <div class="section-heading"> 56 <h2>Recent projects</h2> 57 </div> 58 59 <div class="grid"> 60 <article class="card" style="--accent: #4fd1a3"> 61 <div class="card-icon"><img src="icons/twikki.svg" alt="" /></div> 62 <h3><a href="twikki/">TWikki</a></h3> 63 <p class="tag">Offline-first wiki</p> 64 <p class="desc"> 65 A cloud-native, extensible wiki inspired by TiddlyWiki â 66 auto-saves to your browser and syncs across devices via GitHub. 67 </p> 68 <a class="card-link" href="twikki/">Demo â</a> 69 <a 70 class="card-github" 71 href="//github.com/cawoodm/twikki" 72 target="_blank" 73 rel="noopener" 74 title="View source on GitHub" 75 aria-label="View source on GitHub" 76 ></a> 77 </article> 78 79 <article class="card" style="--accent: #f0a13a"> 80 <div class="card-icon"><img src="icons/cmsfree.svg" alt="" /></div> 81 <h3><a href="cmsfree-example/">CMSFree</a></h3> 82 <p class="tag">Backend-less CMS</p> 83 <p class="desc"> 84 Edit a static site right in the browser and publish plain HTML â 85 no server, no database. This is a live example site built with it. 86 </p> 87 <a class="card-link" href="cmsfree-example/">Demo â</a> 88 <a 89 class="card-github" 90 href="//github.com/cawoodm/cmsfree" 91 target="_blank" 92 rel="noopener" 93 title="View source on GitHub" 94 aria-label="View source on GitHub" 95 ></a> 96 </article> 97 98 <article class="card" style="--accent: #3bc274"> 99 <div class="card-icon"><img src="icons/fintool.svg" alt="" /></div> 100 <h3><a href="fintool/">FinTool</a></h3> 101 <p class="tag">Personal finance</p> 102 <p class="desc"> 103 Drop in CSVs of income, categories and payments to get charts, 104 tables, and a chat tab that talks to your own data via Claude. 105 </p> 106 <a class="card-link" href="fintool/">Demo â</a> 107 <a 108 class="card-github" 109 href="//github.com/cawoodm/fintool" 110 target="_blank" 111 rel="noopener" 112 title="View source on GitHub" 113 aria-label="View source on GitHub" 114 ></a> 115 </article> 116 117 <article class="card" style="--accent: #3ba3d6"> 118 <div class="card-icon"> 119 <img src="icons/easydbaccess.svg" alt="" /> 120 </div> 121 <h3><a href="easydbaccess/">easyDBAccess</a></h3> 122 <p class="tag">In-browser database</p> 123 <p class="desc"> 124 Drag in a CSV or JSON file and get a real, sortable, filterable 125 table â windowed, plugin-extensible, and synced via a Gist or your 126 own tiny server. 127 </p> 128 <a class="card-link" href="easydbaccess/">Demo â</a> 129 <a 130 class="card-github" 131 href="//github.com/cawoodm/easydbaccess" 132 target="_blank" 133 rel="noopener" 134 title="View source on GitHub" 135 aria-label="View source on GitHub" 136 ></a> 137 </article> 138 139 <article class="card" style="--accent: #9a7ae0"> 140 <div class="card-icon"> 141 <img src="icons/minnidbmax.svg" alt="" /> 142 </div> 143 <h3><a href="minnidbmax/">MinniDBMax</a></h3> 144 <p class="tag">In-browser database</p> 145 <p class="desc"> 146 The original windowed in-browser database with CSV/JSON import and 147 export â now succeeded by easyDBAccess. 148 </p> 149 <a class="card-link" href="minnidbmax/">Demo â</a> 150 <a 151 class="card-github" 152 href="//github.com/cawoodm/minnidbmax" 153 target="_blank" 154 rel="noopener" 155 title="View source on GitHub" 156 aria-label="View source on GitHub" 157 ></a> 158 </article> 159 160 <article class="card" style="--accent: #e8536f"> 161 <div class="card-icon">
161<img src="icons/expenses.svg" alt="" /></div> 162 <h3><a href="expenses/">Goal Tracker</a></h3> 163 <p class="tag">Finance goals</p> 164 <p class="desc"> 165 An Ionic app for tracking savings goals alongside everyday 166 expenses, side by side. 167 </p> 168 <a class="card-link" href="expenses/">Demo â</a> 169 <a 170 class="card-github" 171 href="//github.com/cawoodm/goal-tracker" 172 target="_blank" 173 rel="noopener" 174 title="View source on GitHub" 175 aria-label="View source on GitHub" 176 ></a> 177 </article> 178 </div> 179 </section> 180 181 <section class="archive"> 182 <div class="section-heading"> 183 <h2>Games</h2> 184 </div> 185 <ul class="archive-list"> 186 <li><a href="//github.com/cawoodm/mineblast">Mineblast</a></li> 187 <li><a href="rockdodger/">Rock Dodger</a></li> 188 <li><a href="applebees/">Apple-Beeezz</a></li> 189 <li><a href="tie-flighter/">Tie Flighter</a></li> 190 <li><a href="get-lost/">Get LOST Hombre!</a></li> 191 <li><a href="tennis/">Pong Tennis</a></li> 192 <li><a href="solitaire/">Solitaire</a></li> 193 <li><a href="js13k2018/">JS13K 2018 â Offline Pizza</a></li> 194 </ul> 195 </section> 196 197 <section class="archive"> 198 <div class="section-heading"> 199 <h2>Archived & legacy</h2> 200 </div> 201 <ul class="archive-list"> 202 <li><a href="//github.com/cawoodm/powowshell">PowowShell</a></li> 203 <li><a href="tiddlywiki.html">TiddlyWiki demo</a></li> 204 <li><a href="fish-reader/">Fish Reader</a></li> 205 <li><a href="canvas-particles/">Canvas Particles</a></li> 206 </ul> 207 </section> 208 </main> 209 210 <footer class="site-footer wrap"> 211 <span>© 2026 Marc Cawood</span> 212 <a href="//github.com/cawoodm">github.com/cawoodm</a> 213 </footer> 214 </body> 215</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.