|
| 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.0"><meta name="keywords" content="@Adam, Adam Jolicoeur, Adam J. Jolicoeur, AdamJ, Jolicoeur, adamjolicoeur.com, www.adamjolicoeur.com, mindreeper2420, Portfolio, Design, Product Designer, UXD, UX Designer, UX Developer, UX Engineer, Design Technologist, Product Mangement, CSS" /> |
| 6 | + <title>TaskStat | Adam Jolicoeur</title> |
| 7 | + <meta |
| 8 | + name="description" |
| 9 | + content="Privacy-first task management for iOS. Your tasks stay on your device—no accounts, no tracking, no cloud sync." |
| 10 | + /> |
| 11 | + <meta name="generator" content="Eleventy"> |
| 12 | + <meta property="og:title" content="Adam J. Jolicoeur" /> |
| 13 | + <meta property="og:url" content="" /> |
| 14 | + <meta property="og:description" content="Privacy-first task management for iOS. Your tasks stay on your device—no accounts, no tracking, no cloud sync."> |
| 15 | + <meta property="og:site_name" content="Adam J. Jolicoeur"> |
| 16 | + <meta property="og:type" content="website"> |
| 17 | + <link rel="apple-touch-icon" sizes="180x180" href="/icon-180.png"> |
| 18 | + <link rel="icon" type="image/png" size="16x16" href="/icon-16.png"> |
| 19 | + <link rel="icon" type="image/png" size="32x32" href="/icon-32.png"> |
| 20 | + <link rel="icon" type="image/png" size="192x192" href="/icon-192.png"> |
| 21 | + <link rel="icon" type="image/png" size="512x512" href="/icon-512.png"> |
| 22 | + <link rel="manifest" href="/manifest.json"> |
| 23 | + <link rel="preconnect" href="https://fonts.googleapis.com"> |
| 24 | + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
| 25 | + <link href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Pirata+One&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap" rel="stylesheet"> |
| 26 | + <link type="text/css" href="/css/prism.css" rel="stylesheet" /> |
| 27 | + <link type="text/css" href="/css/style.css" rel="stylesheet" /> |
| 28 | + <meta |
| 29 | + name="og:title" |
| 30 | + content="TaskStat | Adam Jolicoeur" |
| 31 | + /> |
| 32 | + <meta |
| 33 | + name="og:description" |
| 34 | + content="Privacy-first task management for iOS. Your tasks stay on your device—no accounts, no tracking, no cloud sync." |
| 35 | + /> |
| 36 | + <meta property="og:image" content="https://www.adamjolicoeur.com/assets/img/social_template.jpg" /> |
| 37 | + |
| 38 | + <link |
| 39 | + rel="alternate" |
| 40 | + type="application/rss+xml" |
| 41 | + title="RSS Feed for Adam Jolicoeur" |
| 42 | + href="/feed/" |
| 43 | + /> |
| 44 | + <script src="https://kit.fontawesome.com/0ea2a7621c.js" crossorigin="anonymous"></script> |
| 45 | + </head> |
| 46 | + <a rel="me" href="https://mastodon.world/@adamjol" aria-hidden="true" class="display-none">Mastodon</a> |
| 47 | + <body> |
| 48 | + <a href="#main-content" class="skip-link">Skip to main content</a> |
| 49 | + <nav role="navigation" aria-label="Main navigation" class="main-nav" style="bottom: 0 !important;"> |
| 50 | + <ul> |
| 51 | + <li> |
| 52 | + <a href="/" alt="Navigate to home page"> |
| 53 | + Home |
| 54 | + </a> |
| 55 | + </li> |
| 56 | + <li> |
| 57 | + <a href="/about/adam" alt="Navigate to about page"> |
| 58 | + About |
| 59 | + </a> |
| 60 | + </li> |
| 61 | + <li> |
| 62 | + <a href="/portfolio" alt="Navigate to portfolio page"> |
| 63 | + Portfolio |
| 64 | + </a> |
| 65 | + </li> |
| 66 | + <li> |
| 67 | + <a href="/about/resume" alt="Navigate to the resume page"> |
| 68 | + Resume |
| 69 | + </a> |
| 70 | + </li> |
| 71 | + </ul> |
| 72 | + </nav> |
| 73 | + <main id="main-content"> |
| 74 | + |
| 75 | +<link rel="stylesheet" href="/css/print.css" media="print" /> |
| 76 | +<link rel="stylesheet" href="/css/markdown.css" /> |
| 77 | + |
| 78 | +<section class="hero"> |
| 79 | + <h1>TaskStat</h1> |
| 80 | + <p class="text-lead mb-4">Privacy-first task management for iOS. Your tasks stay on your device—no accounts, no tracking, no cloud sync.</p></section> |
| 81 | + |
| 82 | + |
| 83 | + <section> |
| 84 | + <section> |
| 85 | +<h2 id="about-taskstat" tabindex="-1">About TaskStat <a class="anchor-link" href="#about-taskstat">#</a></h2> |
| 86 | +<p>TaskStat is a native iOS task management app built with privacy as a core principle. Unlike cloud-based task managers, TaskStat stores all your data locally on your device using SwiftData—ensuring complete privacy and offline functionality.</p> |
| 87 | +<h3 id="key-features" tabindex="-1">Key Features <a class="anchor-link" href="#key-features">#</a></h3> |
| 88 | +<ul> |
| 89 | +<li><strong>Complete Privacy</strong> - 100% local storage, zero data collection</li> |
| 90 | +<li><strong>Smart Organization</strong> - Filter and group tasks by project, status, or priority</li> |
| 91 | +<li><strong>Flexible Projects</strong> - Organize tasks into Personal, Work, or custom projects</li> |
| 92 | +<li><strong>Rich Task Details</strong> - Track status, priority, type, assignees, and notes</li> |
| 93 | +<li><strong>Multi-Select Operations</strong> - Efficiently manage multiple tasks at once</li> |
| 94 | +<li><strong>CSV Export</strong> - Export and backup your data anytime</li> |
| 95 | +<li><strong>Native iOS Design</strong> - Built with SwiftUI for iOS 18+</li> |
| 96 | +</ul> |
| 97 | +<h3 id="task-management-essentials" tabindex="-1">Task Management Essentials <a class="anchor-link" href="#task-management-essentials">#</a></h3> |
| 98 | +<p>TaskStat provides comprehensive task tracking with:</p> |
| 99 | +<ul> |
| 100 | +<li><strong>Task States:</strong> Open, Closed, or Archived</li> |
| 101 | +<li><strong>Status Levels:</strong> To Do, In Progress, Completed, or Blocked</li> |
| 102 | +<li><strong>Priority Flags:</strong> None, Low, Medium, High, or Urgent</li> |
| 103 | +<li><strong>Task Types:</strong> Personal, Work, Other, or Misc</li> |
| 104 | +<li><strong>Assignee Tracking:</strong> Assign tasks to team members or yourself</li> |
| 105 | +<li><strong>Detailed Notes:</strong> Add context and details to any task</li> |
| 106 | +</ul> |
| 107 | +<h3 id="privacy-first-design" tabindex="-1">Privacy-First Design <a class="anchor-link" href="#privacy-first-design">#</a></h3> |
| 108 | +<ul> |
| 109 | +<li>✅ All data stored locally on your device</li> |
| 110 | +<li>✅ No account creation or sign-in required</li> |
| 111 | +<li>✅ No data collection or analytics</li> |
| 112 | +<li>✅ No third-party services or tracking</li> |
| 113 | +<li>✅ Works completely offline</li> |
| 114 | +<li>✅ No cloud sync means no sync conflicts or data loss</li> |
| 115 | +</ul> |
| 116 | +<p>Read the full <a href="/apps/taskstat-privacy.html">Privacy Policy</a></p> |
| 117 | +<h2 id="screenshots" tabindex="-1">Screenshots <a class="anchor-link" href="#screenshots">#</a></h2> |
| 118 | +<div style="display: flex; flex-direction: row; flex-wrap: wrap; gap: 1rem;"> |
| 119 | +<figure> |
| 120 | + <img src="/assets/img/taskstat-screenshot-dashboard.webp" height="400" alt="Screenshot of TaskStat dashboard" /> |
| 121 | + <figcaption>Dashboard</figcaption> |
| 122 | +</figure> |
| 123 | +<figure> |
| 124 | + <img src="/assets/img/taskstat-screenshot-list.webp" height="400" alt="Screenshot of TaskStat task list" /> |
| 125 | + <figcaption>Task List</figcaption> |
| 126 | +</figure> |
| 127 | +<figure> |
| 128 | + <img src="/assets/img/taskstat-screenshot-details.webp" height="400" alt="Screenshot of TaskStat task details" /> |
| 129 | + <figcaption>Task Details</figcaption> |
| 130 | +</figure> |
| 131 | +<figure> |
| 132 | + <img src="/assets/img/taskstat-screenshot-settings.webp" height="400" alt="Screenshot of TaskStat settings" /> |
| 133 | + <figcaption>Settings</figcaption> |
| 134 | +</figure> |
| 135 | +</div> |
| 136 | +<h2 id="app-icon" tabindex="-1">App Icon <a class="anchor-link" href="#app-icon">#</a></h2> |
| 137 | +<table> |
| 138 | +<thead> |
| 139 | +<tr> |
| 140 | +<th>Light</th> |
| 141 | +<th>Dark</th> |
| 142 | +<th>Tinted</th> |
| 143 | +</tr> |
| 144 | +</thead> |
| 145 | +<tbody> |
| 146 | +<tr> |
| 147 | +<td><img src="/assets/img/TaskStat_Default.webp" width="144" height="144" alt="TaskStat light icon" /></td> |
| 148 | +<td><img src="/assets/img/TaskStat_Dark.webp" width="144" height="144" alt="TaskStat dark icon" /></td> |
| 149 | +<td><img src="/assets/img/TaskStat_Tinted.webp" width="144" height="144" alt="TaskStat tinted icon" /></td> |
| 150 | +</tr> |
| 151 | +</tbody> |
| 152 | +</table> |
| 153 | +<h2 id="download" tabindex="-1">Download <a class="anchor-link" href="#download">#</a></h2> |
| 154 | +<p><strong>Platform:</strong> iOS 18.0 or later</p> |
| 155 | +<p><strong>App Store:</strong> <em>Coming soon - Link will be added when published</em></p> |
| 156 | +<!-- [Download on the App Store](https://apps.apple.com/app/taskstat/idXXXXXXXXX) --> |
| 157 | +<h2 id="requirements" tabindex="-1">Requirements <a class="anchor-link" href="#requirements">#</a></h2> |
| 158 | +<ul> |
| 159 | +<li>iPhone running iOS 18 or later</li> |
| 160 | +<li>No internet connection required</li> |
| 161 | +<li>No account or registration needed</li> |
| 162 | +</ul> |
| 163 | +<h2 id="support" tabindex="-1">Support <a class="anchor-link" href="#support">#</a></h2> |
| 164 | +<p><strong>Questions or issues?</strong></p> |
| 165 | +<ul> |
| 166 | +<li><strong>Email: </strong> <a href=" mailto:[email protected]" >[email protected]</a></li> |
| 167 | +<li><strong>Privacy Policy:</strong> <a href="/apps/taskstat-privacy.html">View Privacy Policy</a></li> |
| 168 | +</ul> |
| 169 | +<h2 id="technical-details" tabindex="-1">Technical Details <a class="anchor-link" href="#technical-details">#</a></h2> |
| 170 | +<p>TaskStat is built using:</p> |
| 171 | +<ul> |
| 172 | +<li><strong>SwiftUI</strong> for native iOS interface</li> |
| 173 | +<li><strong>SwiftData</strong> for local persistence</li> |
| 174 | +<li><strong>No third-party dependencies</strong></li> |
| 175 | +</ul> |
| 176 | +<div class="text-callout">TaskStat: Simple tasks. Complete privacy.</div> |
| 177 | +</section> |
| 178 | + |
| 179 | + </section> |
| 180 | + |
| 181 | + |
| 182 | + </main> |
| 183 | + <footer id="contact"> |
| 184 | + <div class="footer-content"> |
| 185 | + <div class="footer-section"> |
| 186 | + <h3>ABOUT ME</h3> |
| 187 | + <p> |
| 188 | + I'm a Product Designer with 15+ years at AWS, Red Hat, and high-growth B2B companies. I specialize in design systems, enterprise applications, and complex data-intensive interfaces. |
| 189 | + </p> |
| 190 | + <p> |
| 191 | + Currently open to senior Product Designer and Design Systems roles at mission-driven companies building impactful products. |
| 192 | + </p> |
| 193 | + <p> |
| 194 | + This portfolio showcases my approach to solving complex design challenges through user research, systematic thinking, and collaboration with engineering teams. |
| 195 | + </p> |
| 196 | + </div> |
| 197 | + <div class="footer-section"> |
| 198 | + <h3>EXPLORE MORE</h3> |
| 199 | + <h4>Experiments & Side Projects</h4> |
| 200 | + <p>-> <a href="https://productdesigns.net" target="_blank" alt="Link to productdesigns.net">productdesigns.net</a></p> |
| 201 | + <h4>Technical Blog</h4> |
| 202 | + <p>-> <a href="https://blog.adamjolicoeur.com" target="_blank" alt="Link to my blog">blog.adamjolicoeur.com</a></p> |
| 203 | + <h4>Connect</h4> |
| 204 | + <p> |
| 205 | + <a href="https://www.linkedin.com/in/ajjolicoeur" class="link-brackets mr-4" target="_blank" alt="Linked to my LinkedIn profile">LinkedIn</a> |
| 206 | + <a href="https://www.github.com/AdamJ" class="link-brackets" target="_blank" alt="Link to my GitHub profile">GitHub</a> |
| 207 | + </p> |
| 208 | + </div> |
| 209 | + </div> |
| 210 | + <div class="footer-bottom"> |
| 211 | + <p>Copyright © 2008-2026 <a href="/about" alt="Link to an about page">Adam J. Jolicoeur</a>. All rights reserved. Designed & developed with <i class="fa-solid fa-brain"></i> <i class="fa-solid fa-robot"></i></p> |
| 212 | + <a href="/sitemap.xml" alt="Link to the sitemap"> |
| 213 | + Sitemap |
| 214 | + </a> |
| 215 | + <span class="small text-secondary px-2"><i class="fa-solid fa-diamond text-accent"></i></span> |
| 216 | + <a href="/credits" alt="Link to credits page"> |
| 217 | + Credits |
| 218 | + </a> |
| 219 | + </div> |
| 220 | +</footer> |
| 221 | + |
| 222 | + <script> |
| 223 | + if ('serviceWorker' in navigator) { |
| 224 | + window.onload = () => { |
| 225 | + navigator.serviceWorker.register( |
| 226 | + '/sw.js' |
| 227 | + ); |
| 228 | + } |
| 229 | + } |
| 230 | + </script> |
| 231 | + <!-- Go to Top Button --> |
| 232 | + <button id="goTopBtn" class="btn btn-outline circle hide hide-on-print" aria-label="Scroll to top" style="position: fixed; bottom: 1rem; right: 1rem;"> |
| 233 | + <span aria-hidden="true"> |
| 234 | + <i class="fa-solid fa-arrow-up" style="font-size: 1.5rem;"></i> |
| 235 | + </span> |
| 236 | + </button> |
| 237 | + <script> |
| 238 | + // Go to Top Button logic |
| 239 | + (function() { |
| 240 | + var btn = document.getElementById('goTopBtn'); |
| 241 | + window.addEventListener('scroll', function() { |
| 242 | + if (window.scrollY > 200) { |
| 243 | + btn.classList.remove('hide'); |
| 244 | + btn.classList.add('show'); |
| 245 | + } else { |
| 246 | + btn.classList.remove('show'); |
| 247 | + btn.classList.add('hide'); |
| 248 | + } |
| 249 | + }); |
| 250 | + btn.addEventListener('click', function() { |
| 251 | + window.scrollTo({ top: 0, behavior: 'smooth' }); |
| 252 | + }); |
| 253 | + })(); |
| 254 | + </script> |
| 255 | + <script src="/js/prism.js"></script> |
| 256 | + </body> |
| 257 | +</html> |
0 commit comments