[{"data":1,"prerenderedAt":640},["ShallowReactive",2],{"blog:index:en":3},[4,192,353,508],{"id":5,"title":6,"body":7,"cover":175,"description":176,"draft":177,"extension":178,"locale":179,"meta":180,"navigation":181,"path":182,"publishedAt":183,"seo":184,"stem":185,"tags":186,"__hash__":191},"blog\u002Fblog\u002Fdesign-mirror-for-figma.md","Achieve Pixel-Perfect Implementation with Design Mirror for Figma",{"type":8,"value":9,"toc":163},"minimark",[10,14,17,20,25,28,31,35,43,46,50,85,88,92,95,122,126,129,133,136,140,154],[11,12,13],"p",{},"I've lost count of how many times I've done this dance: write some CSS, refresh the browser, take a screenshot, paste it into Figma, overlay it on the design, spot the differences, go back to VS Code, adjust, repeat.",[11,15,16],{},"It's tedious. It's slow. And despite the effort, I'd still miss things—a padding that's 12px instead of 16px, a font weight that's slightly off.",[11,18,19],{},"I needed a better way.",[21,22,24],"h2",{"id":23},"the-workflow-problem","The Workflow Problem",[11,26,27],{},"When you're implementing a design, you're constantly context-switching. Figma in one window, your code editor in another, browser somewhere else. You're trying to hold the design in your head while you code, then visually comparing afterwards.",[11,29,30],{},"The mental overhead adds up. And the pixel-level details? They slip through.",[21,32,34],{"id":33},"what-if-the-design-could-float-on-top","What If the Design Could Float on Top?",[11,36,37,38,42],{},"The idea was simple: what if I could see the Figma design ",[39,40,41],"em",{},"directly on top"," of my implementation? A transparent overlay that I could position over my browser, letting me see exactly where things don't match.",[11,44,45],{},"That's Design Mirror for Figma.",[21,47,49],{"id":48},"how-it-works","How It Works",[51,52,53,61,67,73,79],"ol",{},[54,55,56,60],"li",{},[57,58,59],"strong",{},"Connect to Figma"," via secure OAuth—your actual Figma files, not screenshots",[54,62,63,66],{},[57,64,65],{},"Select any frame"," from your projects",[54,68,69,72],{},[57,70,71],{},"Position the overlay"," over your browser window",[54,74,75,78],{},[57,76,77],{},"Adjust opacity and scale"," to see both the design and your implementation",[54,80,81,84],{},[57,82,83],{},"Code with precision"," — differences become immediately obvious",[11,86,87],{},"No more switching between windows. No more \"does this look right?\" Just direct visual comparison.",[21,89,91],{"id":90},"features-born-from-real-development","Features Born from Real Development",[11,93,94],{},"Every feature came from my own front-end workflow:",[96,97,98,104,110,116],"ul",{},[54,99,100,103],{},[57,101,102],{},"Multi-display support"," because I code on one screen and preview in the browser on another",[54,105,106,109],{},[57,107,108],{},"Keyboard shortcuts"," because constantly reaching for the mouse breaks flow",[54,111,112,115],{},[57,113,114],{},"Precision controls"," because sometimes you need to nudge the overlay 1px at a time",[54,117,118,121],{},[57,119,120],{},"Auto-sizing"," — the overlay matches the exact dimensions of your Figma frame, so your browser preview is always the right size",[21,123,125],{"id":124},"privacy-respected","Privacy Respected",[11,127,128],{},"The app only accesses Figma files you explicitly select. No tracking, no analytics. Settings are stored locally and in your iCloud. I built this for my own design work—I'm not interested in knowing anything about yours.",[21,130,132],{"id":131},"the-result","The Result",[11,134,135],{},"I ship more polished websites now. Those subtle details that used to slip through—the margins, the spacing, the alignment—they're caught before I commit. The tool paid for itself the first time I caught a misaligned element before a client review.",[21,137,139],{"id":138},"requirements","Requirements",[96,141,142,145,148,151],{},[54,143,144],{},"macOS 15.5 or later",[54,146,147],{},"Figma account",[54,149,150],{},"Internet connection for Figma integration",[54,152,153],{},"Honestly, just an export of the design works too",[11,155,156],{},[157,158,162],"a",{"href":159,"rel":160},"https:\u002F\u002Flostendfound.com\u002Fdesign-mirror-for-figma",[161],"nofollow","Download on the Mac App Store →",{"title":164,"searchDepth":165,"depth":165,"links":166},"",3,[167,169,170,171,172,173,174],{"id":23,"depth":168,"text":24},2,{"id":33,"depth":168,"text":34},{"id":48,"depth":168,"text":49},{"id":90,"depth":168,"text":91},{"id":124,"depth":168,"text":125},{"id":131,"depth":168,"text":132},{"id":138,"depth":168,"text":139},null,"I've lost count of how many times I've done this dance: write some CSS, refresh the browser, take a screenshot, paste it into Figma. I needed a better way.",false,"md","en",{},true,"\u002Fblog\u002Fdesign-mirror-for-figma","2026-02-07",{"title":6,"description":176},"blog\u002Fdesign-mirror-for-figma",[187,188,189,190],"apple-apps","figma","web-development","design-mirror","adVp5caYthVRYWbKvVteoia2I_A1QcF6neSvii1A0RE",{"id":193,"title":194,"body":195,"cover":175,"description":343,"draft":177,"extension":178,"locale":179,"meta":344,"navigation":181,"path":345,"publishedAt":183,"seo":346,"stem":347,"tags":348,"__hash__":352},"blog\u002Fblog\u002Fdmarc-report-reader.md","Introducing DMARC Report Reader: Making Email Security Analysis Simple",{"type":8,"value":196,"toc":336},[197,200,203,207,210,226,229,232,236,239,259,262,266,269,295,299,302,306,309,320,323,326,332],[11,198,199],{},"I manage email for several domains—my own projects, client websites, the occasional freelance gig. And like any responsible domain owner, I set up DMARC records to monitor email authentication.",[11,201,202],{},"The problem? Reading the reports.",[21,204,206],{"id":205},"the-frustration-that-started-it-all","The Frustration That Started It All",[11,208,209],{},"Every week, I'd receive these DMARC aggregate reports from Google, Microsoft, and other mail providers. Important data about whether emails from my domains were passing authentication. But the format? Compressed XML files that looked like this when opened:",[211,212,216],"pre",{"className":213,"code":214,"language":215,"meta":164,"style":164},"language-xml shiki shiki-themes material-theme-lighter github-light github-dark","\u003Crecord>\u003Crow>\u003Csource_ip>185.250.239.6\u003C\u002Fsource_ip>\u003Ccount>2\u003C\u002Fcount>...\n","xml",[217,218,219],"code",{"__ignoreMap":164},[220,221,224],"span",{"class":222,"line":223},"line",1,[220,225,214],{},[11,227,228],{},"I'd paste them into online validators, squint at raw XML, or just... ignore them. None of those options felt right. I needed to monitor my email security, but the friction was too high.",[11,230,231],{},"So I built something better.",[21,233,235],{"id":234},"dmarc-report-reader","DMARC Report Reader",[11,237,238],{},"DMARC Report Reader transforms these complex reports into clear, actionable insights. Simply drag and drop your XML file (or ZIP\u002FGZ archive) into the app, and instantly see:",[96,240,241,247,253],{},[54,242,243,246],{},[57,244,245],{},"Compliance Summary"," — Visual indicators showing your DKIM and SPF alignment rates",[54,248,249,252],{},[57,250,251],{},"Policy Settings"," — Your domain's DMARC policy at a glance",[54,254,255,258],{},[57,256,257],{},"Message Records"," — Detailed breakdown of each source IP, pass\u002Ffail status, and disposition",[11,260,261],{},"I designed it with a clean dark interface because, let's be honest, checking email security often happens at odd hours. Your eyes will thank you.",[21,263,265],{"id":264},"built-for-how-i-actually-work","Built for How I Actually Work",[11,267,268],{},"The features came directly from my workflow frustrations:",[96,270,271,277,283,289],{},[54,272,273,276],{},[57,274,275],{},"Drag and drop"," because I didn't want to click through file dialogs",[54,278,279,282],{},[57,280,281],{},"Archive support"," because reports arrive as .zip or .gz files",[54,284,285,288],{},[57,286,287],{},"Report storage sidebar"," because I wanted to compare reports over time",[54,290,291,294],{},[57,292,293],{},"100% local processing"," because email security data shouldn't leave my machine",[21,296,298],{"id":297},"privacy-first","Privacy First",[11,300,301],{},"Everything happens locally on your Mac. No data is ever collected, stored, or transmitted anywhere. I built this for myself first—I wouldn't use an app that uploaded my domain's email data to some random server.",[21,303,305],{"id":304},"who-its-for","Who It's For",[11,307,308],{},"If you're like me—someone who:",[96,310,311,314,317],{},[54,312,313],{},"Manages email for your own domains or clients",[54,315,316],{},"Wants to actually understand your DMARC reports",[54,318,319],{},"Values privacy and local-first software",[11,321,322],{},"Then DMARC Report Reader might save you the same headaches it saved me.",[11,324,325],{},"Available on the Mac App Store for £4.99. Family Sharing supported, no subscription required.",[11,327,328],{},[157,329,162],{"href":330,"rel":331},"https:\u002F\u002Flostendfound.com\u002Fdmarc",[161],[333,334,335],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":164,"searchDepth":165,"depth":165,"links":337},[338,339,340,341,342],{"id":205,"depth":168,"text":206},{"id":234,"depth":168,"text":235},{"id":264,"depth":168,"text":265},{"id":297,"depth":168,"text":298},{"id":304,"depth":168,"text":305},"I manage email for several domains and set up DMARC records to monitor email authentication. The problem? Reading the reports. So I built something better.",{},"\u002Fblog\u002Fdmarc-report-reader",{"title":194,"description":343},"blog\u002Fdmarc-report-reader",[187,349,350,351],"dmarc","email-security","mac-app","AvakqH18B0YAGkeQJHu3v4Ano4qJ1B4KbIYR4zGaMZY",{"id":354,"title":355,"body":356,"cover":175,"description":498,"draft":177,"extension":178,"locale":179,"meta":499,"navigation":181,"path":500,"publishedAt":183,"seo":501,"stem":502,"tags":503,"__hash__":507},"blog\u002Fblog\u002Fobsidian-floating-notes.md","Your Obsidian Vault, Always Within Reach",{"type":8,"value":357,"toc":489},[358,361,364,368,371,374,377,381,384,387,391,394,397,401,404,436,440,466,470,473,477,480,483],[11,359,360],{},"I live in Obsidian. Project notes, meeting notes, code snippets, random 2am ideas—it all goes into my vault. Over time, it's become my second brain.",[11,362,363],{},"But there was always friction.",[21,365,367],{"id":366},"the-context-switch-tax","The Context-Switch Tax",[11,369,370],{},"I'd be deep in code, debugging something gnarly, and suddenly remember something I needed to capture. A decision I'd made. A snippet I wanted to save. A thought about a different project entirely.",[11,372,373],{},"So I'd Cmd+Tab to Obsidian. Navigate to the right folder. Create a new note. Write the thing. Then try to remember where I was in my code.",[11,375,376],{},"The idea was captured, but my flow was gone. The context-switch tax was too high.",[21,378,380],{"id":379},"what-i-actually-wanted","What I Actually Wanted",[11,382,383],{},"I wanted Obsidian at my fingertips—without leaving what I was doing. A keyboard shortcut that would pop up a note, let me capture the thought, and disappear. My vault, but floating.",[11,385,386],{},"So I built it.",[21,388,390],{"id":389},"obsidian-floating-notes","Obsidian Floating Notes",[11,392,393],{},"One keyboard shortcut. A floating window appears with your vault. Capture your thought. Dismiss it. You're back to your code, your flow intact.",[11,395,396],{},"This isn't a separate notes app—it works directly with your existing Obsidian vaults. All your links, tags, and folder structure are preserved. If you use iCloud Drive for your vault (like I do), that works seamlessly.",[21,398,400],{"id":399},"features-from-my-own-workflow","Features from My Own Workflow",[11,402,403],{},"Every feature came from how I actually use Obsidian:",[96,405,406,412,418,424,430],{},[54,407,408,411],{},[57,409,410],{},"Global shortcuts"," — Hit a key combination from anywhere, any app",[54,413,414,417],{},[57,415,416],{},"Multiple vault support"," — I have separate vaults for work and personal; switching is instant",[54,419,420,423],{},[57,421,422],{},"Full-text search"," — Find anything across your entire vault",[54,425,426,429],{},[57,427,428],{},"Clean markdown editor"," — Formatting toolbar for quick formatting, but keyboard-driven at heart",[54,431,432,435],{},[57,433,434],{},"iCloud Drive support"," — Because my vault syncs across devices",[21,437,439],{"id":438},"who-this-is-for","Who This Is For",[96,441,442,448,454,460,463],{},[54,443,444,447],{},[57,445,446],{},"Developers"," — Capture architecture decisions, debugging notes, code snippets without leaving your IDE",[54,449,450,453],{},[57,451,452],{},"Writers"," — Jot down inspiration without losing your creative flow",[54,455,456,459],{},[57,457,458],{},"Anyone who lives in Obsidian"," — And wishes it was always one shortcut away",[54,461,462],{},"If you like other floating notes apps, but need the Obsidian integration",[54,464,465],{},"Or want your notes to live locally on your computer instead of a cloud",[21,467,469],{"id":468},"_100-private","100% Private",[11,471,472],{},"All processing happens locally on your Mac. No data is collected, stored, or transmitted anywhere. This is your vault—it stays yours.",[21,474,476],{"id":475},"the-difference-it-made","The Difference It Made",[11,478,479],{},"I capture more now. Those fleeting thoughts that used to disappear? They make it into my vault. And my flow stays intact. The small friction I eliminated added up to a meaningfully better workflow.",[11,481,482],{},"Available for $4.99 on the Mac App Store. One-time purchase, Family Sharing supported, no subscription.",[11,484,485],{},[157,486,162],{"href":487,"rel":488},"https:\u002F\u002Flostendfound.com\u002Fobsidian-floating-notes",[161],{"title":164,"searchDepth":165,"depth":165,"links":490},[491,492,493,494,495,496,497],{"id":366,"depth":168,"text":367},{"id":379,"depth":168,"text":380},{"id":389,"depth":168,"text":390},{"id":399,"depth":168,"text":400},{"id":438,"depth":168,"text":439},{"id":468,"depth":168,"text":469},{"id":475,"depth":168,"text":476},"I live in Obsidian. Project notes, meeting notes, code snippets, random 2am ideas—it all goes into my vault. But there was always friction when capturing thoughts while deep in code. So I built a floating window solution.",{},"\u002Fblog\u002Fobsidian-floating-notes",{"title":355,"description":498},"blog\u002Fobsidian-floating-notes",[187,504,505,351,506],"obsidian","productivity","notes","7ZirdUUE8K-utpZMmyIP9aE09PqO6oIwsGmIy-ocidY",{"id":509,"title":510,"body":511,"cover":175,"description":628,"draft":177,"extension":178,"locale":179,"meta":629,"navigation":181,"path":630,"publishedAt":631,"seo":632,"stem":633,"tags":634,"__hash__":639},"blog\u002Fblog\u002Fdid-i-have-migraine-today.md","Track Your Migraines with a Simple Tap",{"type":8,"value":512,"toc":619},[513,516,519,522,526,529,532,535,539,542,545,549,552,555,559,585,589,592,596,599,603,606,609,612],[11,514,515],{},"I get migraines. If you're reading this, you probably do too.",[11,517,518],{},"You know the advice: track your migraines to identify patterns and triggers. Great advice. I tried. I downloaded tracking apps. They asked for headache location, pain level on a 10-point scale, potential triggers, medications taken, weather conditions, sleep quality, stress level, water intake...",[11,520,521],{},"By day three, I stopped tracking.",[21,523,525],{"id":524},"the-problem-with-migraine-apps","The Problem with Migraine Apps",[11,527,528],{},"Most migraine tracking apps are built like medical intake forms. Comprehensive? Sure. Usable for daily tracking? Not for me.",[11,530,531],{},"The irony is that consistency matters more than detail. Knowing that you had migraines on 8 of the last 30 days is more useful than having detailed data for 3 days before you gave up.",[11,533,534],{},"I needed something simpler.",[21,536,538],{"id":537},"one-question-one-tap","One Question. One Tap.",[11,540,541],{},"Did I Have Migraine Today? asks exactly what the name suggests. One question. Tap yes or no. If yes, optionally rate the severity. Done.",[11,543,544],{},"That's it. The entire interaction takes two seconds.",[21,546,548],{"id":547},"the-contribution-graph","The Contribution Graph",[11,550,551],{},"Here's what made this click for me: I wanted to see my migraine patterns the way I see my GitHub contributions. A grid of colored squares. Green for migraine-free days. Warmer colors for severity levels.",[11,553,554],{},"Months of data become immediately understandable. Patterns emerge visually. You can see at a glance if things are getting better or worse.",[21,556,558],{"id":557},"features-that-actually-help","Features That Actually Help",[96,560,561,567,573,579],{},[54,562,563,566],{},[57,564,565],{},"Apple Watch support"," — Log a migraine from your wrist. Haptic feedback confirms it's recorded. Phone stays in your pocket.",[54,568,569,572],{},[57,570,571],{},"Home screen widget"," — A 6-month overview right on your iPhone. Visual reminder and instant insight.",[54,574,575,578],{},[57,576,577],{},"iCloud sync"," — Log from any device. Everything stays in sync across iPhone, iPad, and Apple Watch.",[54,580,581,584],{},[57,582,583],{},"Detailed history"," — When you need to dig deeper, it's all there. Browse, edit, bulk delete.",[21,586,588],{"id":587},"perfect-for-doctor-visits","Perfect for Doctor Visits",[11,590,591],{},"This was a real use case for me. Sitting in a doctor's office, being asked \"how often do you get migraines?\" and trying to remember. Now I just show them the graph. Clear visual history. No guessing.",[21,593,595],{"id":594},"your-data-stays-yours","Your Data Stays Yours",[11,597,598],{},"No data is collected by us. Your migraine history is stored privately in your iCloud account and never leaves your devices. Health data is personal—I built this for myself first, and I wouldn't use an app that shared my health information.",[21,600,602],{"id":601},"simple-works","Simple Works",[11,604,605],{},"I've tracked consistently for months now—something I never managed with other apps. The secret was removing friction until tracking became effortless.",[11,607,608],{},"If you've struggled to maintain a migraine diary, maybe the problem wasn't motivation. Maybe it was the diary.",[11,610,611],{},"Available for $1.99 on the App Store. One-time purchase, no subscription, iCloud sync included.",[11,613,614],{},[157,615,618],{"href":616,"rel":617},"https:\u002F\u002Flostendfound.com\u002Fdid-i-have-migraine-today",[161],"Download on the App Store →",{"title":164,"searchDepth":165,"depth":165,"links":620},[621,622,623,624,625,626,627],{"id":524,"depth":168,"text":525},{"id":537,"depth":168,"text":538},{"id":547,"depth":168,"text":548},{"id":557,"depth":168,"text":558},{"id":587,"depth":168,"text":588},{"id":594,"depth":168,"text":595},{"id":601,"depth":168,"text":602},"I get migraines. You know the advice: track your migraines to identify patterns. I tried. I downloaded tracking apps with endless forms. By day three, I stopped tracking. I needed something simpler.",{},"\u002Fblog\u002Fdid-i-have-migraine-today","2026-01-14",{"title":510,"description":628},"blog\u002Fdid-i-have-migraine-today",[187,635,636,637,638],"health","migraine","ios-app","apple-watch","jyWXZaIgpH23mlRuhibzB3E3DRmrWZXVdqWeoecMrQU",1783603471763]