{"componentChunkName":"component---src-templates-blog-post-jsx","path":"/blog/tracking-email-for-educational-purposes/","result":{"data":{"site":{"siteMetadata":{"name":"Huzaifa Rasheed","title":"Huzaifa Rasheed","description":"Software Engineer","about":"\n      Hey, I'm Huzaifa.\n      <br/><br/>\n      Engineer by trade, builder by instinct - I believe in owning my stack, shipping fast, and occasionally running on chai (tea) and stubbornness. I work best in that sweet spot between deep focus and fast feedback - solo or in sync with a good team.\n      <br/><br/>\n      This site's my little corner of the internet - part portfolio, part lab - where I document what I build, break, or learn.\n      <br/><br/>\n      Outside work, I'm into long walks, pixel-perfect headshots in FPS games (eventually... maybe), plants I probably overwater, and the occasional \"classified\" hobby to stay curious.\n      <br/><br/>\n      Reach out anytime - my digital door's always open. 👋\n    ","twitter":"https://twitter.com/huzRasheed","github":"https://github.com/huzaifa-99","linkedin":"https://www.linkedin.com/in/huzaifa-rasheed/","devto":"https://dev.to/huzaifa99","stackoverflow":"https://stackoverflow.com/users/12579290/huzaifa","leetcode":"https://leetcode.com/rhuzaifa","discord":"https://discordapp.com/users/rhuzaifa","email":"dev@rhuzaifa.com","projects":[{"name":"FFMpeg Web","description":"An experimental browser-based terminal that runs FFmpeg using WebAssembly, enabling media processing directly in the browser.","link":"https://ffmpeg-web.rhuzaifa.com/","github":"https://github.com/huzaifa-99/ffmpeg-web"},{"name":"Feed base 2","description":"A mini browser game where players manipulate 4-bit binary blocks to match target BCD values - part puzzle, part binary logic trainer.","link":"https://feedbase2.rhuzaifa.com/","github":"https://github.com/huzaifa-99/feed-base-2"},{"name":"Fabric browser extension","description":"A Chrome extension that injects engineered Fabric prompts directly into the ChatGPT interface for enhanced workflow automation.","link":"https://github.com/huzaifa-99/fabric-browser-extension","github":"https://github.com/huzaifa-99/fabric-browser-extension"},{"name":"Pure Cinema","description":"An experimental, tongue-in-cheek text-to-video generator that stitches together footage, synthesized voiceovers, and background music with a Node.js + ffmpeg pipeline. Not quite Hollywood, but it renders.","link":"https://cinema.rhuzaifa.com","github":null},{"name":"Aria2c Packload","description":"A Bash script for bulk downloading magnet links or torrents using aria2c - optimized for series or list-based transfers.","link":"https://github.com/huzaifa-99/aria2c-packload","github":"https://github.com/huzaifa-99/aria2c-packload"},{"name":"RSS Watchdog","description":"A lightweight Bash script that watches RSS/Atom feeds and compiles a Markdown-based reading checklist for Unix systems.","link":"https://github.com/huzaifa-99/rss-watchdog","github":"https://github.com/huzaifa-99/rss-watchdog"},{"name":"QuoteGen","description":"A quote graphic generator that produces stylized quote images with random selection and a built-in editor for customization.","link":"https://quotegen.rhuzaifa.com/","github":null},{"name":"WebRTC Video Chat","description":"A basic WebRTC-powered app enabling peer-to-peer video and audio calls between two users.","link":"https://webrtc-video-chat.rhuzaifa.com/","github":null}],"experience":null,"skills":[{"name":"Languages & Frameworks","description":"JavaScript, TypeScript, Python, Bash - Frameworks include Node.js, React, Next.js, Vue, React Native, FastAPI."},{"name":"Databases & Storage","description":"PostgreSQL, MySQL, MongoDB - Experience with schema design, indexing, query optimization, and migrations."},{"name":"Cloud & Infrastructure","description":"AWS (EC2, RDS, S3, Lambda), Vercel, Netlify, Heroku - Comfortable with serverless, autoscaling, and cost optimization."},{"name":"DevOps & Tooling","description":"Docker, Git, CI/CD pipelines (GitHub Actions, GitLab CI) - Experience with observability, containerization, and release workflows."},{"name":"Testing & QA Automation","description":"Jest, Playwright, Puppeteer, Selenium - Focus on E2E testing, mocking APIs, and maintaining test coverage."}]}},"markdownRemark":{"id":"029eb87c-640a-5b42-866e-e8329275c2cc","excerpt":"Hey, I built a new toy!. It’s small and sneaky. It tells me when you open my emails. “For educational purposes, of course. 🤓” Why? Because I care. I care…","html":"<p>Hey, I built a new toy!.</p>\n<p>It’s small and sneaky. It tells me when you open my emails. “For educational purposes, of course. 🤓”</p>\n<p>Why? Because I care. I care deeply!!!. </p>\n<p>Also, I was bored and slightly power-hungry. You know how it is.</p>\n<hr>\n<p>Now, I won’t bore you with how I built it (or incriminate myself), but </p>\n<h3>Here’s the basic idea:</h3>\n<ul>\n<li>Emails can embed a tiny 1x1 pixel image (usually a gif for tracking).</li>\n<li>When your mail client loads that image, it pings my server.</li>\n<li>My server logs your IP, browser agent, time, location, star sign, mood, and whether you are a flat-Earther 🌎 or not.</li>\n</ul>\n<p>Okay okay, maybe not all of that, but… most of it.</p>\n<h3>Funny thing: it’s surprisingly easy.</h3>\n<span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; margin: 0 0 30px;\">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/7984de475457e0c4de4493220bb7e60e/2bef9/receipe.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 83.1081081081081%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAIAAABSJhvpAAAACXBIWXMAAAsTAAALEwEAmpwYAAADxUlEQVQ4yzVSiVNaRxjfd8ADgoiIYEBBVIIgFAwPRMGLgpDxwBSfPB5yiA9RDg9M7cR4Bp2IMVGTJibR0VC1jplJzLTT/n1dzXRnZ+fbb7/fsd8uoHfPQi/Pxg8vxt9c03vl0N5n+nWZ3i+Pvbqe3GZnNy25Yntu05bbsP8/SbjNwswmCei987GdE32PzxWdCb88ZQ4uQ7tX1M41ffiV3UnNFdsgOF+0ZdZIVbN4kNEVSg6IzG/Zc89JkPz0l3v6NwCAQm+een3CLPweyPzhT72j9r+mdtm555aFUsezt67krxZYQ3YrV4+6CqVbultwz0RW7+yDBz2TC+y7PzPLbz2JHaWxg37zjS2xhe220ZTJ1itzejXqBrXdqe8bavRTD27FizaAIsjw8IDFZvNlltbOb/Kn352xTFNH1/jHv1MlNr9u5gvxNjNpNJgiDK3Xt0AZDMPCGdP8CzuMgUajrlepFpYW3Y+p0Z0TdZv9YYAeP/43e5B2+aQUxbw/OohNDUprqm4N9vbodIZWm3Rx1wH4PB5M5Z88Wd8qqmprURznCQTe/HL0w/f4ekIsQa1WUvdAaySVEqlQ1VizsbXs9XoJAZJ+agVyhWIinS5/ue72+bqnl1zxLDkap16dMcc31pEhyIugKFxxHBNJhFKFmMfngrvh8jcAd7NhKc7GYuNGszWRX+mJTHcyaTcztby632m2SzioUFgBS4X3BHIepwZHJQiQ4WgNChQ8DviWLMx3euAxAcCy09OlVMMY3qT4cyBjtirEIgzHEQiuFPVb2zrvce18DsnDDQRu4aLgMprzaQ2cOye0pX13kFYKKwiAtNdpJm0dGI79MFkpEtHBoAbH9QC0YEgVhhoIDHygEhIe/0cFB0FKA6E1TwByCTDcIZeLBHwjzu8wmpITiWC/l37kZxz2VrVKwydIqHw4Ep72+xNeD9WkbamqdjfqLqMZo1QOuRo4qKm6SscV9JG2QjyaedSf6Hb5He1N2uZaDLFA5TKTutnc/rL99J94pDQQlBG8ZomUhyBcBFUCwDjIzZWVyVjMY7dlHwdYd/dYYIgKhbrMP1VC+nJs5nh+6WA+dJIMXsXTnXUafbXMcKdcjyI6afUoFY7Q0bp6Va/LOeLx3q+vNzVpPEp5LWzjaYS9mN+4LKQvFievcnNHweR1PL/qGYaNuo9jAgRBMUzbrJ2dm2VZNp+fe0i2KwlChYAWaPszw5YLz8qz2f1fhj/F0+Xw9Gk4fR6ZMckUMgRU3HWbw8HF4kr4TwiCqBAKFVxOK3wqAv8PuVcBRIBHUY4AAAAASUVORK5CYII='); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"Totally legitimate recipe for building trust\" title=\"Totally legitimate recipe for building trust\" src=\"/static/7984de475457e0c4de4493220bb7e60e/fcda8/receipe.png\" srcset=\"/static/7984de475457e0c4de4493220bb7e60e/12f09/receipe.png 148w,\n/static/7984de475457e0c4de4493220bb7e60e/e4a3f/receipe.png 295w,\n/static/7984de475457e0c4de4493220bb7e60e/fcda8/receipe.png 590w,\n/static/7984de475457e0c4de4493220bb7e60e/efc66/receipe.png 885w,\n/static/7984de475457e0c4de4493220bb7e60e/2bef9/receipe.png 1024w\" sizes=\"(max-width: 590px) 100vw, 590px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n<p>All you need is:</p>\n<ol>\n<li>A server that can log HTTP requests</li>\n<li>A tiny transparent image</li>\n<li><del>A dash of shamelessness</del> Willingness to embed the pixel in your emails (html one’s)</li>\n</ol>\n<p>Then just sit back and let the guilt data roll in. </p>\n<h3>What can you track?</h3>\n<ol>\n<li><strong>If</strong> someone opened your email (or at least loaded images)</li>\n<li><strong>When</strong> they opened it</li>\n<li><strong>How</strong> many times (hello, paranoia)</li>\n<li>Rough <strong>geographic location</strong> (thank you IP)</li>\n<li>Their <strong>device/browser</strong></li>\n</ol>\n<p>Thankfully 4 and 5 are pretty unreliable with gmail and some more (they use an internal proxy).</p>\n<h3>Why though?</h3>\n<p>I don’t know. Why do we check if our text has been read? Why do people obsess over blue ticks? Same energy.</p>\n<hr>\n<p><sub>✅ GDPR-ish Compliant (if you squint hard enough)</sub><br/></p>\n<hr>\n<p>For real, don’t actually do it. Unless, you know… you’re debugging. Or doing research. Strictly research. 🤨</p>","frontmatter":{"title":"Tracking emails \"for educational purposes\"","date":"May 12, 2025","description":"Built a tiny email tracker - which I totally don't use personally, promise. Just vibes, tech, and a pixel-sized amount of power."}}},"pageContext":{"slug":"/blog/tracking-email-for-educational-purposes/","previous":{"fields":{"slug":"/blog/docker-is-great-just-not-for-local-dev/"},"frontmatter":{"title":"Docker Is Great, Just Not for Local Dev"}},"next":{"fields":{"slug":"/blog/hosting-my-own-git-server-at-home-just-because-i-could/"},"frontmatter":{"title":"🛰️ Hosting My Own Git Server at Home - Just Because I Could"}}}},"staticQueryHashes":["2276319502"]}