Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions docs/about/resume/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,16 @@
</nav>
<main id="main-content">

<link rel="stylesheet" href="/css/print.css" media="print">
<link rel="stylesheet" href="/css/print.css" media="print" />
<link rel="stylesheet" href="/css/markdown.css" />

<section class="hero">
<h1>Adam Jolicoeur</h1>
<p class="text-lead mb-4">
Lead Product Designer with 15+ years at AWS, Red Hat, and high-growth B2B companies
</p></section>
<p class="text-lead mb-4">Lead Product Designer with 15+ years at AWS, Red Hat, and high-growth B2B companies</p></section>


<section class="hide-on-screen print">
<section>
<section class="hide-on-screen print">
<h1>Adam Jolicoeur</h1>
<caption>[email protected]</caption>
</section>
Expand Down Expand Up @@ -128,6 +128,7 @@ <h3>Also available</h3>
<a href="https://www.github.com/AdamJ" class="btn btn-social" target="_blank" alt="Click to visit my GitHub profile"><i class="fa-brands fa-github"></i> GitHub</a>
</section>

</section>


</main>
Expand Down
409 changes: 409 additions & 0 deletions docs/apps/taskstat-privacy.html

Large diffs are not rendered by default.

257 changes: 257 additions & 0 deletions docs/apps/taskstat.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<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" />
<title>TaskStat | Adam Jolicoeur</title>
<meta
name="description"
content="Privacy-first task management for iOS. Your tasks stay on your device—no accounts, no tracking, no cloud sync."
/>
<meta name="generator" content="Eleventy">
<meta property="og:title" content="Adam J. Jolicoeur" />
<meta property="og:url" content="" />
<meta property="og:description" content="Privacy-first task management for iOS. Your tasks stay on your device—no accounts, no tracking, no cloud sync.">
<meta property="og:site_name" content="Adam J. Jolicoeur">
<meta property="og:type" content="website">
<link rel="apple-touch-icon" sizes="180x180" href="/icon-180.png">
<link rel="icon" type="image/png" size="16x16" href="/icon-16.png">
<link rel="icon" type="image/png" size="32x32" href="/icon-32.png">
<link rel="icon" type="image/png" size="192x192" href="/icon-192.png">
<link rel="icon" type="image/png" size="512x512" href="/icon-512.png">
<link rel="manifest" href="/manifest.json">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<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">
<link type="text/css" href="/css/prism.css" rel="stylesheet" />
<link type="text/css" href="/css/style.css" rel="stylesheet" />
<meta
name="og:title"
content="TaskStat | Adam Jolicoeur"
/>
<meta
name="og:description"
content="Privacy-first task management for iOS. Your tasks stay on your device—no accounts, no tracking, no cloud sync."
/>
<meta property="og:image" content="https://www.adamjolicoeur.com/assets/img/social_template.jpg" />

<link
rel="alternate"
type="application/rss+xml"
title="RSS Feed for Adam Jolicoeur"
href="/feed/"
/>
<script src="https://kit.fontawesome.com/0ea2a7621c.js" crossorigin="anonymous"></script>
</head>
<a rel="me" href="https://mastodon.world/@adamjol" aria-hidden="true" class="display-none">Mastodon</a>
<body>
<a href="#main-content" class="skip-link">Skip to main content</a>
<nav role="navigation" aria-label="Main navigation" class="main-nav" style="bottom: 0 !important;">
<ul>
<li>
<a href="/" alt="Navigate to home page">
Home
</a>
</li>
<li>
<a href="/about/adam" alt="Navigate to about page">
About
</a>
</li>
<li>
<a href="/portfolio" alt="Navigate to portfolio page">
Portfolio
</a>
</li>
<li>
<a href="/about/resume" alt="Navigate to the resume page">
Resume
</a>
</li>
</ul>
</nav>
<main id="main-content">

<link rel="stylesheet" href="/css/print.css" media="print" />
<link rel="stylesheet" href="/css/markdown.css" />

<section class="hero">
<h1>TaskStat</h1>
<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>


<section>
<section>
<h2 id="about-taskstat" tabindex="-1">About TaskStat <a class="anchor-link" href="#about-taskstat">#</a></h2>
<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>
<h3 id="key-features" tabindex="-1">Key Features <a class="anchor-link" href="#key-features">#</a></h3>
<ul>
<li><strong>Complete Privacy</strong> - 100% local storage, zero data collection</li>
<li><strong>Smart Organization</strong> - Filter and group tasks by project, status, or priority</li>
<li><strong>Flexible Projects</strong> - Organize tasks into Personal, Work, or custom projects</li>
<li><strong>Rich Task Details</strong> - Track status, priority, type, assignees, and notes</li>
<li><strong>Multi-Select Operations</strong> - Efficiently manage multiple tasks at once</li>
<li><strong>CSV Export</strong> - Export and backup your data anytime</li>
<li><strong>Native iOS Design</strong> - Built with SwiftUI for iOS 18+</li>
</ul>
<h3 id="task-management-essentials" tabindex="-1">Task Management Essentials <a class="anchor-link" href="#task-management-essentials">#</a></h3>
<p>TaskStat provides comprehensive task tracking with:</p>
<ul>
<li><strong>Task States:</strong> Open, Closed, or Archived</li>
<li><strong>Status Levels:</strong> To Do, In Progress, Completed, or Blocked</li>
<li><strong>Priority Flags:</strong> None, Low, Medium, High, or Urgent</li>
<li><strong>Task Types:</strong> Personal, Work, Other, or Misc</li>
<li><strong>Assignee Tracking:</strong> Assign tasks to team members or yourself</li>
<li><strong>Detailed Notes:</strong> Add context and details to any task</li>
</ul>
<h3 id="privacy-first-design" tabindex="-1">Privacy-First Design <a class="anchor-link" href="#privacy-first-design">#</a></h3>
<ul>
<li>✅ All data stored locally on your device</li>
<li>✅ No account creation or sign-in required</li>
<li>✅ No data collection or analytics</li>
<li>✅ No third-party services or tracking</li>
<li>✅ Works completely offline</li>
<li>✅ No cloud sync means no sync conflicts or data loss</li>
</ul>
<p>Read the full <a href="/apps/taskstat-privacy.html">Privacy Policy</a></p>
<h2 id="screenshots" tabindex="-1">Screenshots <a class="anchor-link" href="#screenshots">#</a></h2>
<div style="display: flex; flex-direction: row; flex-wrap: wrap; gap: 1rem;">
<figure>
<img src="/assets/img/taskstat-screenshot-dashboard.webp" height="400" alt="Screenshot of TaskStat dashboard" />
<figcaption>Dashboard</figcaption>
</figure>
<figure>
<img src="/assets/img/taskstat-screenshot-list.webp" height="400" alt="Screenshot of TaskStat task list" />
<figcaption>Task List</figcaption>
</figure>
<figure>
<img src="/assets/img/taskstat-screenshot-details.webp" height="400" alt="Screenshot of TaskStat task details" />
<figcaption>Task Details</figcaption>
</figure>
<figure>
<img src="/assets/img/taskstat-screenshot-settings.webp" height="400" alt="Screenshot of TaskStat settings" />
<figcaption>Settings</figcaption>
</figure>
</div>
<h2 id="app-icon" tabindex="-1">App Icon <a class="anchor-link" href="#app-icon">#</a></h2>
<table>
<thead>
<tr>
<th>Light</th>
<th>Dark</th>
<th>Tinted</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="/assets/img/TaskStat_Default.webp" width="144" height="144" alt="TaskStat light icon" /></td>
<td><img src="/assets/img/TaskStat_Dark.webp" width="144" height="144" alt="TaskStat dark icon" /></td>
<td><img src="/assets/img/TaskStat_Tinted.webp" width="144" height="144" alt="TaskStat tinted icon" /></td>
</tr>
</tbody>
</table>
<h2 id="download" tabindex="-1">Download <a class="anchor-link" href="#download">#</a></h2>
<p><strong>Platform:</strong> iOS 18.0 or later</p>
<p><strong>App Store:</strong> <em>Coming soon - Link will be added when published</em></p>
<!-- [Download on the App Store](https://apps.apple.com/app/taskstat/idXXXXXXXXX) -->
<h2 id="requirements" tabindex="-1">Requirements <a class="anchor-link" href="#requirements">#</a></h2>
<ul>
<li>iPhone running iOS 18 or later</li>
<li>No internet connection required</li>
<li>No account or registration needed</li>
</ul>
<h2 id="support" tabindex="-1">Support <a class="anchor-link" href="#support">#</a></h2>
<p><strong>Questions or issues?</strong></p>
<ul>
<li><strong>Email:</strong> <a href="mailto:[email protected]">[email protected]</a></li>
<li><strong>Privacy Policy:</strong> <a href="/apps/taskstat-privacy.html">View Privacy Policy</a></li>
</ul>
<h2 id="technical-details" tabindex="-1">Technical Details <a class="anchor-link" href="#technical-details">#</a></h2>
<p>TaskStat is built using:</p>
<ul>
<li><strong>SwiftUI</strong> for native iOS interface</li>
<li><strong>SwiftData</strong> for local persistence</li>
<li><strong>No third-party dependencies</strong></li>
</ul>
<div class="text-callout">TaskStat: Simple tasks. Complete privacy.</div>
</section>

</section>


</main>
<footer id="contact">
<div class="footer-content">
<div class="footer-section">
<h3>ABOUT ME</h3>
<p>
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.
</p>
<p>
Currently open to senior Product Designer and Design Systems roles at mission-driven companies building impactful products.
</p>
<p>
This portfolio showcases my approach to solving complex design challenges through user research, systematic thinking, and collaboration with engineering teams.
</p>
</div>
<div class="footer-section">
<h3>EXPLORE MORE</h3>
<h4>Experiments &amp; Side Projects</h4>
<p>-> <a href="https://productdesigns.net" target="_blank" alt="Link to productdesigns.net">productdesigns.net</a></p>
<h4>Technical Blog</h4>
<p>-> <a href="https://blog.adamjolicoeur.com" target="_blank" alt="Link to my blog">blog.adamjolicoeur.com</a></p>
<h4>Connect</h4>
<p>
<a href="https://www.linkedin.com/in/ajjolicoeur" class="link-brackets mr-4" target="_blank" alt="Linked to my LinkedIn profile">LinkedIn</a>
<a href="https://www.github.com/AdamJ" class="link-brackets" target="_blank" alt="Link to my GitHub profile">GitHub</a>
</p>
</div>
</div>
<div class="footer-bottom">
<p>Copyright &copy; 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>
<a href="/sitemap.xml" alt="Link to the sitemap">
Sitemap
</a>
<span class="small text-secondary px-2"><i class="fa-solid fa-diamond text-accent"></i></span>
<a href="/credits" alt="Link to credits page">
Credits
</a>
</div>
</footer>

<script>
if ('serviceWorker' in navigator) {
window.onload = () => {
navigator.serviceWorker.register(
'/sw.js'
);
}
}
</script>
<!-- Go to Top Button -->
<button id="goTopBtn" class="btn btn-outline circle hide hide-on-print" aria-label="Scroll to top" style="position: fixed; bottom: 1rem; right: 1rem;">
<span aria-hidden="true">
<i class="fa-solid fa-arrow-up" style="font-size: 1.5rem;"></i>
</span>
</button>
<script>
// Go to Top Button logic
(function() {
var btn = document.getElementById('goTopBtn');
window.addEventListener('scroll', function() {
if (window.scrollY > 200) {
btn.classList.remove('hide');
btn.classList.add('show');
} else {
btn.classList.remove('show');
btn.classList.add('hide');
}
});
btn.addEventListener('click', function() {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
})();
</script>
<script src="/js/prism.js"></script>
</body>
</html>
Binary file added docs/assets/img/TaskStat_Dark-thumb.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Dark-thumb.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Dark.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Dark.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Default-thumb.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Default-thumb.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Default.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Default.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Tinted-thumb.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Tinted-thumb.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Tinted.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/TaskStat_Tinted.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/taskstat-screenshot-details.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/taskstat-screenshot-details.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/taskstat-screenshot-list.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/taskstat-screenshot-list.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/img/taskstat-screenshot-settings.jpg
Binary file added docs/assets/img/taskstat-screenshot-settings.webp
7 changes: 3 additions & 4 deletions docs/credits/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,12 @@
</nav>
<main id="main-content">

<link rel="stylesheet" href="/css/print.css" media="print">
<link rel="stylesheet" href="/css/print.css" media="print" />
<link rel="stylesheet" href="/css/markdown.css" />

<section class="hero">
<h1>Credits</h1>
<p class="text-lead mb-4">

</p></section>
<p class="text-lead mb-4"></p></section>


<section>
Expand Down
18 changes: 18 additions & 0 deletions docs/css/markdown.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
pre {
background-color: var(--earth-cream);
padding: var(--space-md, 1rem);
border-radius: var(--radius-md, 12px);
}

section h2 {
margin-top: var(--space-lg, 2rem) !important;
}

section h3 {
margin-bottom: var(--space-md, 1rem) !important;
}

section ul,
section ol {
margin-bottom: var(--space-md, 1rem) !important;
}
6 changes: 0 additions & 6 deletions docs/css/style.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading