Repository navigation
Expand file tree
/
Copy pathprojects.html
More file actions
1 lines (1 loc) · 39.6 KB
/
Copy pathprojects.html
File metadata and controls
1 lines (1 loc) · 39.6 KB
1
<!DOCTYPE html><!--_aBPcUQZLr_JY9K0Z21sP--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/images/logo-small.png"/><link rel="stylesheet" href="/_next/static/chunks/438fe2dbbbfd829d.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/52764dc80ef0a61c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/c368a98b406a687c.js"/><script src="/_next/static/chunks/9a513a8c4dabec14.js" async=""></script><script src="/_next/static/chunks/713fc8ad9ceac69a.js" async=""></script><script src="/_next/static/chunks/19e94e7551cef099.js" async=""></script><script src="/_next/static/chunks/turbopack-c1da388a8cd61ce4.js" async=""></script><script src="/_next/static/chunks/dd5ced4c32edaa19.js" async=""></script><script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/_next/static/chunks/708205fa81a1891d.js" async=""></script><link rel="preload" href="/_next/static/chunks/578ca6ed020117e9.css" as="style"/><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-Y039CLFJME" as="script"/><title>Projects | FAESEL.COM</title><meta name="description" content="Explore my latest projects and work"/><link rel="author" href="https://www.faesel.com/about"/><meta name="author" content="Faesel Saeed"/><meta name="keywords" content="blog,technology,web development,programming,software engineering"/><link rel="alternate" type="application/rss+xml" href="https://www.faesel.com/feed.xml"/><meta property="og:title" content="FAESEL.COM"/><meta property="og:description" content="A modern tech blog exploring technology, coding, and digital innovation"/><meta property="og:url" content="https://www.faesel.com"/><meta property="og:site_name" content="FAESEL.COM"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@faeselsaeed"/><meta name="twitter:creator" content="@faeselsaeed"/><meta name="twitter:title" content="FAESEL.COM"/><meta name="twitter:description" content="A modern tech blog exploring technology, coding, and digital innovation"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="icon" href="/favicon.ico"/><link rel="apple-touch-icon" href="/favicon.ico"/><script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Faesel Saeed","url":"https://www.faesel.com","logo":{"@type":"ImageObject","url":"https://www.faesel.com/images/logo.png"},"sameAs":["https://github.com/faesel","https://www.linkedin.com/in/faesel-saeed-a97b1614"]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"FAESEL.COM","url":"https://www.faesel.com","description":"A modern tech blog exploring technology, coding, and digital innovation","publisher":{"@type":"Organization","name":"Faesel Saeed","url":"https://www.faesel.com"}}</script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><a href="#main-content" class="skip-to-content">Skip to content</a><header class="Header-module__hBw1pG__header"><div class="Header-module__hBw1pG__container"><a class="Header-module__hBw1pG__logo" aria-label="Home" href="/"><img alt="Logo" width="40" height="40" decoding="async" data-nimg="1" class="Header-module__hBw1pG__logoImage" style="color:transparent" src="/images/logo-small.png"/></a><button class="Header-module__hBw1pG__mobileMenuButton" aria-label="Toggle menu" aria-expanded="false">☰</button><nav class="Header-module__hBw1pG__nav " role="navigation" aria-label="Main navigation"><a class="Header-module__hBw1pG__navLink " href="/">Home</a><a class="Header-module__hBw1pG__navLink " href="/blog">Blog</a><a class="Header-module__hBw1pG__navLink Header-module__hBw1pG__active" href="/projects">Projects</a><a class="Header-module__hBw1pG__navLink " href="/company">Company</a><a class="Header-module__hBw1pG__navLink " href="/about">About</a><a class="Header-module__hBw1pG__navLink " href="/contact">Contact</a><a href="/feed.xml" class="Header-module__hBw1pG__rssLink" aria-label="RSS Feed" title="RSS Feed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" fill="currentColor" class="RssIcon-module__Zq2JtW__icon " aria-hidden="true"><circle cx="6.18" cy="17.82" r="2.18"></circle><path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z"></path></svg></a></nav></div></header><main id="main-content" style="min-height:70vh"><div class="page-module__q81_BW__container"><h1 class="page-module__q81_BW__title">Projects</h1><p class="page-module__q81_BW__subtitle">A showcase of my recent work and side projects</p><div class="page-module__q81_BW__grid"><article class="page-module__q81_BW__projectCard"><div class="page-module__q81_BW__projectImageWrapper"><img alt="Spinely - Bookshelf Organiser" loading="lazy" width="600" height="400" decoding="async" data-nimg="1" class="page-module__q81_BW__projectImage" style="color:transparent" src="/images/spinely.png"/></div><div class="page-module__q81_BW__projectContent"><h3 class="page-module__q81_BW__projectTitle">Spinely - Bookshelf Organiser</h3><p class="page-module__q81_BW__projectDescription">An Android-first bookshelf organiser built with Expo and React Native. Scan book spines, log titles by ISBN barcode with automatic metadata lookup, photograph and crop each spine, then choose how to organise your collection and get an interactive visual shelf. When a shelf overflows, drag the pin inward to set its cut-off. Local-only — your library stays on your device.</p><div class="page-module__q81_BW__projectTags"><span class="page-module__q81_BW__projectTag">React Native</span><span class="page-module__q81_BW__projectTag">Expo</span><span class="page-module__q81_BW__projectTag">TypeScript</span><span class="page-module__q81_BW__projectTag">TanStack Query</span></div><div class="page-module__q81_BW__projectLinks"><a href="https://www.binarymeadow.com/apps/spinely/" class="page-module__q81_BW__projectLink" target="_blank" rel="noopener noreferrer">See More →</a></div></div></article><article class="page-module__q81_BW__projectCard"><div class="page-module__q81_BW__projectImageWrapper"><img alt="Opdsy - OPDS Comics & Book Reader" loading="lazy" width="600" height="400" decoding="async" data-nimg="1" class="page-module__q81_BW__projectImage" style="color:transparent" src="/images/opdsy.png?v=2"/></div><div class="page-module__q81_BW__projectContent"><h3 class="page-module__q81_BW__projectTitle">Opdsy - OPDS Comics & Book Reader</h3><p class="page-module__q81_BW__projectDescription">A modern, cross-platform reader for self-hosted OPDS libraries. Browse and stream comics and books from multiple servers at once in a single unified library, with page-by-page OPDS-PSE streaming. Works with Ubooquity, Komga, Kavita and Calibre-Web, designed to be server-agnostic and resilient.</p><div class="page-module__q81_BW__projectTags"><span class="page-module__q81_BW__projectTag">React Native</span><span class="page-module__q81_BW__projectTag">Expo</span><span class="page-module__q81_BW__projectTag">TypeScript</span><span class="page-module__q81_BW__projectTag">TanStack Query</span><span class="page-module__q81_BW__projectTag">OPDS</span></div><div class="page-module__q81_BW__projectLinks"><a href="https://play.google.com/store/apps/details?id=com.opdsy" class="page-module__q81_BW__playBadgeLink" target="_blank" rel="noopener noreferrer" aria-label="Get it on Google Play"><img alt="Get it on Google Play" loading="lazy" width="186" height="72" decoding="async" data-nimg="1" class="page-module__q81_BW__playBadge" style="color:transparent" src="/badges/google-play-badge.png"/></a><a href="https://www.binarymeadow.com/apps/opdsy/" class="page-module__q81_BW__projectLink" target="_blank" rel="noopener noreferrer">See More →</a></div></div></article><article class="page-module__q81_BW__projectCard"><div class="page-module__q81_BW__projectImageWrapper"><img alt="Jannah Builder - Islamic Prayer Garden" loading="lazy" width="600" height="400" decoding="async" data-nimg="1" class="page-module__q81_BW__projectImage" style="color:transparent" src="/images/jannah-builder.png?v=3"/></div><div class="page-module__q81_BW__projectContent"><h3 class="page-module__q81_BW__projectTitle">Jannah Builder - Islamic Prayer Garden</h3><p class="page-module__q81_BW__projectDescription">A calm, spiritually-sensitive prayer tracking app built with React Native and Expo. Log your five daily prayers and watch a peaceful pixel-art garden grow with trees, flowers, buildings, and wildlife. Features gentle decay, Qur'an and dhikr visual effects, and animated animals — designed to inspire without pressure.</p><div class="page-module__q81_BW__projectTags"><span class="page-module__q81_BW__projectTag">React Native</span><span class="page-module__q81_BW__projectTag">Expo</span><span class="page-module__q81_BW__projectTag">TypeScript</span><span class="page-module__q81_BW__projectTag">Shopify Skia</span><span class="page-module__q81_BW__projectTag">Pixel Art</span></div><div class="page-module__q81_BW__projectLinks"><a href="https://play.google.com/store/apps/details?id=com.jannahbuilder" class="page-module__q81_BW__playBadgeLink" target="_blank" rel="noopener noreferrer" aria-label="Get it on Google Play"><img alt="Get it on Google Play" loading="lazy" width="186" height="72" decoding="async" data-nimg="1" class="page-module__q81_BW__playBadge" style="color:transparent" src="/badges/google-play-badge.png"/></a><a href="https://github.com/binarymeadow/jannah-builder" class="page-module__q81_BW__projectLink" target="_blank" rel="noopener noreferrer">See More →</a></div></div></article><article class="page-module__q81_BW__projectCard"><div class="page-module__q81_BW__projectImageWrapper"><img alt="iCare - Desktop Blink Reminder" loading="lazy" width="600" height="400" decoding="async" data-nimg="1" class="page-module__q81_BW__projectImage" style="color:transparent" src="/images/icare.png"/></div><div class="page-module__q81_BW__projectContent"><h3 class="page-module__q81_BW__projectTitle">iCare - Desktop Blink Reminder</h3><p class="page-module__q81_BW__projectDescription">A dead-simple, no-frills desktop blink reminder. No accounts, no cloud sync, no analytics — just a tiny always-on-top widget with a retro seven-segment countdown that tells you to blink and rest your eyes.</p><div class="page-module__q81_BW__projectTags"><span class="page-module__q81_BW__projectTag">Electron</span><span class="page-module__q81_BW__projectTag">TypeScript</span><span class="page-module__q81_BW__projectTag">Desktop App</span><span class="page-module__q81_BW__projectTag">Eye Care</span></div><div class="page-module__q81_BW__projectLinks"><a href="https://github.com/faesel/icare" class="page-module__q81_BW__projectLink" target="_blank" rel="noopener noreferrer">See More →</a></div></div></article><article class="page-module__q81_BW__projectCard"><div class="page-module__q81_BW__projectImageWrapper"><img alt="GridWatch - Copilot CLI Dashboard" loading="lazy" width="600" height="400" decoding="async" data-nimg="1" class="page-module__q81_BW__projectImage" style="color:transparent" src="/images/gridwatch.png?v=2"/></div><div class="page-module__q81_BW__projectContent"><h3 class="page-module__q81_BW__projectTitle">GridWatch - Copilot CLI Dashboard</h3><p class="page-module__q81_BW__projectDescription">A cross-platform Electron desktop app that reads GitHub Copilot CLI session data and presents it as a real-time dashboard. Features a retro Tron-inspired design with session management, token usage charts, activity heatmaps, and AI-powered insights.</p><div class="page-module__q81_BW__projectTags"><span class="page-module__q81_BW__projectTag">Electron</span><span class="page-module__q81_BW__projectTag">React</span><span class="page-module__q81_BW__projectTag">TypeScript</span><span class="page-module__q81_BW__projectTag">Recharts</span></div><div class="page-module__q81_BW__projectLinks"><a href="https://github.com/binarymeadow/gridwatch" class="page-module__q81_BW__projectLink" target="_blank" rel="noopener noreferrer">See More →</a></div></div></article><article class="page-module__q81_BW__projectCard"><div class="page-module__q81_BW__projectImageWrapper"><img alt="Az-Lazy - The go-to CLI for Azure storage" loading="lazy" width="600" height="400" decoding="async" data-nimg="1" class="page-module__q81_BW__projectImage" style="color:transparent" src="/images/azlazy.png"/></div><div class="page-module__q81_BW__projectContent"><h3 class="page-module__q81_BW__projectTitle">Az-Lazy - The go-to CLI for Azure storage</h3><p class="page-module__q81_BW__projectDescription">Check out my CLI tool Az-Lazy, it provides a command line interface to quickly manage and make changes to azure storage queues, blobs and tables. The inspiration for this project was to move away from using Azure Storage Manager and provide a faster CLI experience for developers.</p><div class="page-module__q81_BW__projectTags"><span class="page-module__q81_BW__projectTag">c#</span><span class="page-module__q81_BW__projectTag">Azure</span><span class="page-module__q81_BW__projectTag">CLI</span></div><div class="page-module__q81_BW__projectLinks"><a href="https://github.com/faesel/az-lazy" class="page-module__q81_BW__projectLink" target="_blank" rel="noopener noreferrer">See More →</a></div></div></article><article class="page-module__q81_BW__projectCard"><div class="page-module__q81_BW__projectImageWrapper"><img alt="Gatsby tech blog starter template" loading="lazy" width="600" height="400" decoding="async" data-nimg="1" class="page-module__q81_BW__projectImage" style="color:transparent" src="/images/gatsby-blog-starter.png"/></div><div class="page-module__q81_BW__projectContent"><h3 class="page-module__q81_BW__projectTitle">Gatsby tech blog starter template</h3><p class="page-module__q81_BW__projectDescription">Checkout my tech blog template built with Gatsby, Contentful and Disqus. Its free to use for anyone this includes all costs aside from a custom domain (which is optional), and really easy to configure.</p><div class="page-module__q81_BW__projectTags"><span class="page-module__q81_BW__projectTag">Node.js</span><span class="page-module__q81_BW__projectTag">Gatsby</span><span class="page-module__q81_BW__projectTag">Contentful</span><span class="page-module__q81_BW__projectTag">Disqus</span></div><div class="page-module__q81_BW__projectLinks"><a href="#" class="page-module__q81_BW__projectLink" target="_blank" rel="noopener noreferrer">See More →</a></div></div></article></div></div><!--$--><!--/$--></main><footer class="Footer-module__S6Hkya__footer"><div class="Footer-module__S6Hkya__container"><div class="Footer-module__S6Hkya__content"><nav class="Footer-module__S6Hkya__links" aria-label="Footer navigation"><a class="Footer-module__S6Hkya__link" href="/blog">Blog</a><a class="Footer-module__S6Hkya__link" href="/projects">Projects</a><a class="Footer-module__S6Hkya__link" href="/company">Company</a><a class="Footer-module__S6Hkya__link" href="/about">About</a><a class="Footer-module__S6Hkya__link" href="/contact">Contact</a><a href="/feed.xml" class="Footer-module__S6Hkya__rssLink" aria-label="RSS Feed" title="RSS Feed"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="RssIcon-module__Zq2JtW__icon " aria-hidden="true"><circle cx="6.18" cy="17.82" r="2.18"></circle><path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z"></path></svg><span>RSS</span></a></nav><p class="Footer-module__S6Hkya__copyright">© <!-- -->2026<!-- --> Faesel Saeed. All rights reserved. Code snippets are MIT licensed unless stated otherwise.</p></div></div></footer><script src="/_next/static/chunks/c368a98b406a687c.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[31362,[\"/_next/static/chunks/dd5ced4c32edaa19.js\"],\"default\"]\n3:I[2971,[\"/_next/static/chunks/dd5ced4c32edaa19.js\"],\"default\"]\n4:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/708205fa81a1891d.js\"],\"default\"]\n5:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/708205fa81a1891d.js\"],\"default\"]\n6:I[22016,[\"/_next/static/chunks/dd5ced4c32edaa19.js\"],\"\"]\nc:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/708205fa81a1891d.js\"],\"default\"]\n:HL[\"/_next/static/chunks/438fe2dbbbfd829d.css\",\"style\"]\n:HL[\"/_next/static/chunks/52764dc80ef0a61c.css\",\"style\"]\n:HL[\"/_next/static/chunks/578ca6ed020117e9.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"-aBPcUQZLr_JY9K0Z21sP\",\"c\":[\"\",\"projects\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"projects\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/438fe2dbbbfd829d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/dd5ced4c32edaa19.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"Faesel Saeed\\\",\\\"url\\\":\\\"https://www.faesel.com\\\",\\\"logo\\\":{\\\"@type\\\":\\\"ImageObject\\\",\\\"url\\\":\\\"https://www.faesel.com/images/logo.png\\\"},\\\"sameAs\\\":[\\\"https://github.com/faesel\\\",\\\"https://www.linkedin.com/in/faesel-saeed-a97b1614\\\"]}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebSite\\\",\\\"name\\\":\\\"FAESEL.COM\\\",\\\"url\\\":\\\"https://www.faesel.com\\\",\\\"description\\\":\\\"A modern tech blog exploring technology, coding, and digital innovation\\\",\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"Faesel Saeed\\\",\\\"url\\\":\\\"https://www.faesel.com\\\"}}\"}}]]}],[\"$\",\"body\",null,{\"children\":[[\"$\",\"$L2\",null,{\"gaId\":\"G-Y039CLFJME\"}],[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"skip-to-content\",\"children\":\"Skip to content\"}],[\"$\",\"$L3\",null,{}],[\"$\",\"main\",null,{\"id\":\"main-content\",\"style\":{\"minHeight\":\"70vh\"},\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"not-found-module__HS70Aa__container\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"not-found-module__HS70Aa__title\",\"children\":\"404\"}],[\"$\",\"h2\",null,{\"className\":\"not-found-module__HS70Aa__subtitle\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"not-found-module__HS70Aa__message\",\"children\":\"Sorry, the page you're looking for doesn't exist.\"}],[\"$\",\"$L6\",null,{\"href\":\"/\",\"className\":\"not-found-module__HS70Aa__homeLink\",\"children\":\"Go Home\"}]]}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/578ca6ed020117e9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"footer\",null,{\"className\":\"Footer-module__S6Hkya__footer\",\"children\":[\"$\",\"div\",null,{\"className\":\"Footer-module__S6Hkya__container\",\"children\":[\"$\",\"div\",null,{\"className\":\"Footer-module__S6Hkya__content\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"Footer-module__S6Hkya__links\",\"aria-label\":\"Footer navigation\",\"children\":[[\"$\",\"$L6\",null,{\"href\":\"/blog\",\"className\":\"Footer-module__S6Hkya__link\",\"children\":\"Blog\"}],[\"$\",\"$L6\",null,{\"href\":\"/projects\",\"className\":\"Footer-module__S6Hkya__link\",\"children\":\"Projects\"}],[\"$\",\"$L6\",null,{\"href\":\"/company\",\"className\":\"Footer-module__S6Hkya__link\",\"children\":\"Company\"}],[\"$\",\"$L6\",null,{\"href\":\"/about\",\"className\":\"Footer-module__S6Hkya__link\",\"children\":\"About\"}],[\"$\",\"$L6\",null,{\"href\":\"/contact\",\"className\":\"Footer-module__S6Hkya__link\",\"children\":\"Contact\"}],[\"$\",\"a\",null,{\"href\":\"/feed.xml\",\"className\":\"Footer-module__S6Hkya__rssLink\",\"aria-label\":\"RSS Feed\",\"title\":\"RSS Feed\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"width\":16,\"height\":16,\"fill\":\"currentColor\",\"className\":\"RssIcon-module__Zq2JtW__icon \",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"circle\",null,{\"cx\":\"6.18\",\"cy\":\"17.82\",\"r\":\"2.18\"}],[\"$\",\"path\",null,{\"d\":\"M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z\"}]]}],[\"$\",\"span\",null,{\"children\":\"RSS\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"Footer-module__S6Hkya__copyright\",\"children\":[\"© \",2026,\" Faesel Saeed. All rights reserved. Code snippets are MIT licensed unless stated otherwise.\"]}]]}]}]}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__container\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"page-module__q81_BW__title\",\"children\":\"Projects\"}],\"$L7\",\"$L8\"]}],[\"$L9\"],\"$La\"]}],{},null,false,false]},null,false,false]},null,false,false],\"$Lb\",false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"d:I[5500,[\"/_next/static/chunks/dd5ced4c32edaa19.js\"],\"Image\"]\n13:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/708205fa81a1891d.js\"],\"OutletBoundary\"]\n14:\"$Sreact.suspense\"\n16:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/708205fa81a1891d.js\"],\"ViewportBoundary\"]\n18:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/708205fa81a1891d.js\"],\"MetadataBoundary\"]\n7:[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__subtitle\",\"children\":\"A showcase of my recent work and side projects\"}]\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__grid\",\"children\":[[\"$\",\"article\",\"7\",{\"className\":\"page-module__q81_BW__projectCard\",\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectImageWrapper\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/images/spinely.png\",\"alt\":\"Spinely - Bookshelf Organiser\",\"width\":600,\"height\":400,\"className\":\"page-module__q81_BW__projectImage\"}]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectContent\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"page-module__q81_BW__projectTitle\",\"children\":\"Spinely - Bookshelf Organiser\"}],[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__projectDescription\",\"children\":\"An Android-first bookshelf organiser built with Expo and React Native. Scan book spines, log titles by ISBN barcode with automatic metadata lookup, photograph and crop each spine, then choose how to organise your collection and get an interactive visual shelf. When a shelf overflows, drag the pin inward to set its cut-off. Local-only — your library stays on your device.\"}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectTags\",\"children\":[[\"$\",\"span\",\"React Native\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"React Native\"}],[\"$\",\"span\",\"Expo\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Expo\"}],[\"$\",\"span\",\"TypeScript\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"TypeScript\"}],[\"$\",\"span\",\"TanStack Query\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"TanStack Query\"}]]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectLinks\",\"children\":[[\"$\",\"a\",\"https://www.binarymeadow.com/apps/spinely/\",{\"href\":\"https://www.binarymeadow.com/apps/spinely/\",\"className\":\"page-module__q81_BW__projectLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See More →\"}]]}]]}]]}],[\"$\",\"article\",\"6\",{\"className\":\"page-module__q81_BW__projectCard\",\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectImageWrapper\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/images/opdsy.png?v=2\",\"alt\":\"Opdsy - OPDS Comics \u0026 Book Reader\",\"width\":600,\"height\":400,\"className\":\"page-module__q81_BW__projectImage\"}]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectContent\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"page-module__q81_BW__projectTitle\",\"children\":\"Opdsy - OPDS Comics \u0026 Book Reader\"}],[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__projectDescription\",\"children\":\"A modern, cross-platform reader for self-hosted OPDS libraries. Browse and stream comics and books from multiple servers at once in a single unified library, with page-by-page OPDS-PSE streaming. Works with Ubooquity, Komga, Kavita and Calibre-Web, designed to be server-agnostic and resilient.\"}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectTags\",\"children\":[[\"$\",\"span\",\"React Native\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"React Native\"}],[\"$\",\"span\",\"Expo\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Expo\"}],[\"$\",\"span\",\"TypeScript\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"TypeScript\"}],[\"$\",\"span\",\"TanStack Query\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"TanStack Query\"}],[\"$\",\"span\",\"OPDS\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"OPDS\"}]]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectLinks\",\"children\":[[\"$\",\"a\",\"https://play.google.com/store/apps/details?id=com.opdsy\",{\"href\":\"https://play.google.com/store/apps/details?id=com.opdsy\",\"className\":\"page-module__q81_BW__playBadgeLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"aria-label\":\"Get it on Google Play\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/badges/google-play-badge.png\",\"alt\":\"Get it on Google Play\",\"width\":186,\"height\":72,\"className\":\"page-module__q81_BW__playBadge\"}]}],[\"$\",\"a\",\"https://www.binarymeadow.com/apps/opdsy/\",{\"href\":\"https://www.binarymeadow.com/apps/opdsy/\",\"className\":\"page-module__q81_BW__projectLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See More →\"}]]}]]}]]}],\"$Le\",\"$Lf\",\"$L10\",\"$L11\",\"$L12\"]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/52764dc80ef0a61c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\na:[\"$\",\"$L13\",null,{\"children\":[\"$\",\"$14\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@15\"}]}]\nb:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L16\",null,{\"children\":\"$L17\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L18\",null,{\"children\":[\"$\",\"$14\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L19\"}]}]}],null]}]\n"])</script><script>self.__next_f.push([1,"e:[\"$\",\"article\",\"5\",{\"className\":\"page-module__q81_BW__projectCard\",\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectImageWrapper\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/images/jannah-builder.png?v=3\",\"alt\":\"Jannah Builder - Islamic Prayer Garden\",\"width\":600,\"height\":400,\"className\":\"page-module__q81_BW__projectImage\"}]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectContent\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"page-module__q81_BW__projectTitle\",\"children\":\"Jannah Builder - Islamic Prayer Garden\"}],[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__projectDescription\",\"children\":\"A calm, spiritually-sensitive prayer tracking app built with React Native and Expo. Log your five daily prayers and watch a peaceful pixel-art garden grow with trees, flowers, buildings, and wildlife. Features gentle decay, Qur'an and dhikr visual effects, and animated animals — designed to inspire without pressure.\"}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectTags\",\"children\":[[\"$\",\"span\",\"React Native\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"React Native\"}],[\"$\",\"span\",\"Expo\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Expo\"}],[\"$\",\"span\",\"TypeScript\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"TypeScript\"}],[\"$\",\"span\",\"Shopify Skia\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Shopify Skia\"}],[\"$\",\"span\",\"Pixel Art\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Pixel Art\"}]]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectLinks\",\"children\":[[\"$\",\"a\",\"https://play.google.com/store/apps/details?id=com.jannahbuilder\",{\"href\":\"https://play.google.com/store/apps/details?id=com.jannahbuilder\",\"className\":\"page-module__q81_BW__playBadgeLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"aria-label\":\"Get it on Google Play\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/badges/google-play-badge.png\",\"alt\":\"Get it on Google Play\",\"width\":186,\"height\":72,\"className\":\"page-module__q81_BW__playBadge\"}]}],[\"$\",\"a\",\"https://github.com/binarymeadow/jannah-builder\",{\"href\":\"https://github.com/binarymeadow/jannah-builder\",\"className\":\"page-module__q81_BW__projectLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See More →\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"f:[\"$\",\"article\",\"1\",{\"className\":\"page-module__q81_BW__projectCard\",\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectImageWrapper\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/images/icare.png\",\"alt\":\"iCare - Desktop Blink Reminder\",\"width\":600,\"height\":400,\"className\":\"page-module__q81_BW__projectImage\"}]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectContent\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"page-module__q81_BW__projectTitle\",\"children\":\"iCare - Desktop Blink Reminder\"}],[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__projectDescription\",\"children\":\"A dead-simple, no-frills desktop blink reminder. No accounts, no cloud sync, no analytics — just a tiny always-on-top widget with a retro seven-segment countdown that tells you to blink and rest your eyes.\"}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectTags\",\"children\":[[\"$\",\"span\",\"Electron\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Electron\"}],[\"$\",\"span\",\"TypeScript\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"TypeScript\"}],[\"$\",\"span\",\"Desktop App\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Desktop App\"}],[\"$\",\"span\",\"Eye Care\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Eye Care\"}]]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectLinks\",\"children\":[[\"$\",\"a\",\"https://github.com/faesel/icare\",{\"href\":\"https://github.com/faesel/icare\",\"className\":\"page-module__q81_BW__projectLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See More →\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"10:[\"$\",\"article\",\"2\",{\"className\":\"page-module__q81_BW__projectCard\",\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectImageWrapper\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/images/gridwatch.png?v=2\",\"alt\":\"GridWatch - Copilot CLI Dashboard\",\"width\":600,\"height\":400,\"className\":\"page-module__q81_BW__projectImage\"}]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectContent\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"page-module__q81_BW__projectTitle\",\"children\":\"GridWatch - Copilot CLI Dashboard\"}],[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__projectDescription\",\"children\":\"A cross-platform Electron desktop app that reads GitHub Copilot CLI session data and presents it as a real-time dashboard. Features a retro Tron-inspired design with session management, token usage charts, activity heatmaps, and AI-powered insights.\"}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectTags\",\"children\":[[\"$\",\"span\",\"Electron\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Electron\"}],[\"$\",\"span\",\"React\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"React\"}],[\"$\",\"span\",\"TypeScript\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"TypeScript\"}],[\"$\",\"span\",\"Recharts\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Recharts\"}]]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectLinks\",\"children\":[[\"$\",\"a\",\"https://github.com/binarymeadow/gridwatch\",{\"href\":\"https://github.com/binarymeadow/gridwatch\",\"className\":\"page-module__q81_BW__projectLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See More →\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"article\",\"3\",{\"className\":\"page-module__q81_BW__projectCard\",\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectImageWrapper\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/images/azlazy.png\",\"alt\":\"Az-Lazy - The go-to CLI for Azure storage\",\"width\":600,\"height\":400,\"className\":\"page-module__q81_BW__projectImage\"}]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectContent\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"page-module__q81_BW__projectTitle\",\"children\":\"Az-Lazy - The go-to CLI for Azure storage\"}],[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__projectDescription\",\"children\":\"Check out my CLI tool Az-Lazy, it provides a command line interface to quickly manage and make changes to azure storage queues, blobs and tables. The inspiration for this project was to move away from using Azure Storage Manager and provide a faster CLI experience for developers.\"}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectTags\",\"children\":[[\"$\",\"span\",\"c#\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"c#\"}],[\"$\",\"span\",\"Azure\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Azure\"}],[\"$\",\"span\",\"CLI\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"CLI\"}]]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectLinks\",\"children\":[[\"$\",\"a\",\"https://github.com/faesel/az-lazy\",{\"href\":\"https://github.com/faesel/az-lazy\",\"className\":\"page-module__q81_BW__projectLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See More →\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"12:[\"$\",\"article\",\"4\",{\"className\":\"page-module__q81_BW__projectCard\",\"children\":[[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectImageWrapper\",\"children\":[\"$\",\"$Ld\",null,{\"src\":\"/images/gatsby-blog-starter.png\",\"alt\":\"Gatsby tech blog starter template\",\"width\":600,\"height\":400,\"className\":\"page-module__q81_BW__projectImage\"}]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectContent\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"page-module__q81_BW__projectTitle\",\"children\":\"Gatsby tech blog starter template\"}],[\"$\",\"p\",null,{\"className\":\"page-module__q81_BW__projectDescription\",\"children\":\"Checkout my tech blog template built with Gatsby, Contentful and Disqus. Its free to use for anyone this includes all costs aside from a custom domain (which is optional), and really easy to configure.\"}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectTags\",\"children\":[[\"$\",\"span\",\"Node.js\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Node.js\"}],[\"$\",\"span\",\"Gatsby\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Gatsby\"}],[\"$\",\"span\",\"Contentful\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Contentful\"}],[\"$\",\"span\",\"Disqus\",{\"className\":\"page-module__q81_BW__projectTag\",\"children\":\"Disqus\"}]]}],[\"$\",\"div\",null,{\"className\":\"page-module__q81_BW__projectLinks\",\"children\":[[\"$\",\"a\",\"#\",{\"href\":\"#\",\"className\":\"page-module__q81_BW__projectLink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"See More →\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"17:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1a:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/708205fa81a1891d.js\"],\"IconMark\"]\n15:null\n"])</script><script>self.__next_f.push([1,"19:[[\"$\",\"title\",\"0\",{\"children\":\"Projects | FAESEL.COM\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Explore my latest projects and work\"}],[\"$\",\"link\",\"2\",{\"rel\":\"author\",\"href\":\"https://www.faesel.com/about\"}],[\"$\",\"meta\",\"3\",{\"name\":\"author\",\"content\":\"Faesel Saeed\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"blog,technology,web development,programming,software engineering\"}],[\"$\",\"link\",\"5\",{\"rel\":\"alternate\",\"type\":\"application/rss+xml\",\"href\":\"https://www.faesel.com/feed.xml\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"FAESEL.COM\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"A modern tech blog exploring technology, coding, and digital innovation\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:url\",\"content\":\"https://www.faesel.com\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:site_name\",\"content\":\"FAESEL.COM\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:site\",\"content\":\"@faeselsaeed\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:creator\",\"content\":\"@faeselsaeed\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:title\",\"content\":\"FAESEL.COM\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:description\",\"content\":\"A modern tech blog exploring technology, coding, and digital innovation\"}],[\"$\",\"link\",\"17\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"18\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"19\",{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"$L1a\",\"20\",{}]]\n"])</script></body></html>