<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: lori shui</title>
    <description>The latest articles on DEV Community by lori shui (@loriwave).</description>
    <link>https://dev.to/loriwave</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3736707%2Fb992b3ff-fe11-4a83-a5fd-7fd93ac436e2.png</url>
      <title>DEV Community: lori shui</title>
      <link>https://dev.to/loriwave</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/loriwave"/>
    <language>en</language>
    <item>
      <title>Try Hair Color Online Before You Dye: A Practical AI Preview Tool</title>
      <dc:creator>lori shui</dc:creator>
      <pubDate>Wed, 06 May 2026 05:19:06 +0000</pubDate>
      <link>https://dev.to/loriwave/try-hair-color-online-before-you-dye-a-practical-ai-preview-tool-4npf</link>
      <guid>https://dev.to/loriwave/try-hair-color-online-before-you-dye-a-practical-ai-preview-tool-4npf</guid>
      <description>&lt;p&gt;Most hair color decisions still start with a tiny swatch, a Pinterest board, or a nervous conversation at the salon.&lt;/p&gt;

&lt;p&gt;That is a weird UX problem.&lt;/p&gt;

&lt;p&gt;Changing hair color is visual, personal, and sometimes expensive to reverse. A color that looks great on a model, a box dye photo, or a salon chart may look completely different with your own hair texture, base color, lighting, and skin tone.&lt;/p&gt;

&lt;p&gt;That is the problem &lt;a href="https://tryhaircolor.com" rel="noopener noreferrer"&gt;Try Hair Color&lt;/a&gt; is designed to solve: upload a photo, choose a shade, and preview the result before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Try Hair Color does
&lt;/h2&gt;

&lt;p&gt;Try Hair Color is a lightweight AI hair color preview tool. It lets you test different shades directly on your own photo, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;blonde tones&lt;/li&gt;
&lt;li&gt;brunette shades&lt;/li&gt;
&lt;li&gt;red and auburn colors&lt;/li&gt;
&lt;li&gt;silver and ash colors&lt;/li&gt;
&lt;li&gt;vivid fashion colors&lt;/li&gt;
&lt;li&gt;natural everyday looks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to replace a stylist. The goal is to make the first decision easier.&lt;/p&gt;

&lt;p&gt;Instead of asking “Will this color work on me?”, you get a fast visual reference that helps you compare options before you buy dye, book a salon appointment, or send a reference photo to a stylist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;p&gt;The product flow is intentionally simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload a clear photo.&lt;/li&gt;
&lt;li&gt;Pick a hair color shade.&lt;/li&gt;
&lt;li&gt;Generate a preview.&lt;/li&gt;
&lt;li&gt;Compare the result with your original photo.&lt;/li&gt;
&lt;li&gt;Save or use the preview as a reference.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No complicated prompt writing. No design software. No signup wall for the basic preview flow.&lt;/p&gt;

&lt;p&gt;That simplicity matters because the target user is not necessarily a designer, developer, or AI enthusiast. It is someone making a real-world appearance decision and wanting a quick sanity check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is useful
&lt;/h2&gt;

&lt;p&gt;Hair color tools are a good example of AI working best when it reduces uncertainty instead of trying to be magical.&lt;/p&gt;

&lt;p&gt;A preview cannot guarantee the exact outcome of a real dye job. Real results depend on hair history, current color, lighting, bleach level, product quality, and the person applying it.&lt;/p&gt;

&lt;p&gt;But a preview can still answer useful questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do warm browns look better than cool browns?&lt;/li&gt;
&lt;li&gt;Does silver wash me out?&lt;/li&gt;
&lt;li&gt;Is vivid red too intense?&lt;/li&gt;
&lt;li&gt;Would blonde work with my current base color?&lt;/li&gt;
&lt;li&gt;Should I bring this direction to my stylist?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is enough to turn a vague idea into a more informed choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design choices behind the product
&lt;/h2&gt;

&lt;p&gt;A few product decisions make the experience more practical:&lt;/p&gt;

&lt;h3&gt;
  
  
  Shade-first interaction
&lt;/h3&gt;

&lt;p&gt;Instead of forcing users to describe a color in text, the tool offers preset shade options. That makes the interaction faster and avoids prompt ambiguity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before-and-after comparison
&lt;/h3&gt;

&lt;p&gt;The preview is most useful when users can compare it against the original photo. A side-by-side mental model is easier than looking at the generated result alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Low-friction access
&lt;/h3&gt;

&lt;p&gt;For this kind of tool, asking people to create an account before they even know whether the preview is useful would be a conversion killer. The first experience should be fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical expectations
&lt;/h3&gt;

&lt;p&gt;The copy avoids pretending that AI can perfectly predict a salon result. The tool is positioned as a preview and decision aid, not a final guarantee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it is for
&lt;/h2&gt;

&lt;p&gt;Try Hair Color is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;people considering a new hair color&lt;/li&gt;
&lt;li&gt;salon clients preparing reference images&lt;/li&gt;
&lt;li&gt;stylists discussing possible shade directions&lt;/li&gt;
&lt;li&gt;beauty creators testing visual ideas&lt;/li&gt;
&lt;li&gt;anyone comparing natural and vivid colors before dyeing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially helpful when someone is stuck between a few color families and needs to see them on their own face and hair, not on someone else’s photo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;You can test the tool here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tryhaircolor.com" rel="noopener noreferrer"&gt;https://tryhaircolor.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, start with a bright, front-facing photo where your hair is clearly visible. Good lighting makes a big difference in preview quality.&lt;/p&gt;

&lt;p&gt;AI tools get much more useful when they are attached to one clear decision. In this case, the decision is simple: should I dye my hair this color, or keep looking?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>9 Privacy-First Mac Apps Built with SwiftUI &amp; CoreML — No Cloud Required</title>
      <dc:creator>lori shui</dc:creator>
      <pubDate>Wed, 04 Mar 2026 08:54:37 +0000</pubDate>
      <link>https://dev.to/loriwave/9-privacy-first-mac-apps-built-with-swiftui-coreml-no-cloud-required-4jlm</link>
      <guid>https://dev.to/loriwave/9-privacy-first-mac-apps-built-with-swiftui-coreml-no-cloud-required-4jlm</guid>
      <description>&lt;p&gt;I’ve been exploring a portfolio of indie Mac/iOS apps built by a solo developer — all sharing the same philosophy: &lt;strong&gt;your data stays on your device&lt;/strong&gt;. No accounts, no uploads, no cloud dependency. Just SwiftUI + CoreML doing the heavy lifting locally.&lt;/p&gt;

&lt;p&gt;Here’s a rundown of all 9 apps from &lt;a href="https://apps.h53d.xyz/" rel="noopener noreferrer"&gt;H53D&lt;/a&gt;, and what makes each one worth a look.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Shine3D — 3D Viewer That Actually Looks Good
&lt;/h2&gt;

&lt;p&gt;Most 3D viewers are functional but dull. Shine3D takes a different approach: it’s designed to make your models look &lt;em&gt;beautiful&lt;/em&gt;. Whether you’re showing off a design to a client or just exploring a model, the rendering quality stands out.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/shine3d-pro-3d-viewer/id6757391542?platform=mac" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. 3D Model Viewer — Lightweight Converter for Offline Use
&lt;/h2&gt;

&lt;p&gt;If you work with SAM 3D outputs or just need to convert between 3D formats without going online, this tool covers it. It handles a wide range of formats and works entirely offline — useful when you’re on a plane or in a restricted network environment.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/3d-model-viewer/id6748610196" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. DXF Assistant — View &amp;amp; Convert DXF on Mac, iPad, iPhone
&lt;/h2&gt;

&lt;p&gt;DXF files are everywhere in engineering and CAD workflows, but decent viewers are surprisingly rare on Apple platforms. DXF Assistant handles both 2D and 3D navigation smoothly, and lets you export to PDF, SVG, or PNG. Works across macOS, iPad, and iPhone.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/dxf-assistant/id6742348600" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. P2V Converter — Pixel to Vector, Instantly
&lt;/h2&gt;

&lt;p&gt;Converting raster images to vector graphics usually means wrestling with Illustrator or running a web service that keeps your files. P2V Converter does the conversion on-device in moments. Particularly handy for pixel art or logo cleanup work.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/p2v-converter/id6752116587" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. SheetCollector — Import Tables from Files and Images
&lt;/h2&gt;

&lt;p&gt;This one solves a specific but common pain: extracting tables from PDFs, images, or various file formats and getting them into a clean spreadsheet. You can organize, edit, and export as polished PDF or JPEG. No OCR service calls — it all runs locally.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/sheetcollector/id6733222153" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. STEP File Viewer — CAD on iPhone? Seriously.
&lt;/h2&gt;

&lt;p&gt;STEP files are the standard format for 3D CAD exchange, and this viewer lets you open them on macOS, iPad, &lt;em&gt;and&lt;/em&gt; iPhone. The impressive part: projected views, section views, and even exploded views on mobile. Lightweight and ad-free.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/step-file-viewer/id6755721056" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. pcAI Photo Retouch — Local AI Image Enhancement
&lt;/h2&gt;

&lt;p&gt;Want to restore an old blurry photo or apply an artistic style like oil painting or Van Gogh? The typical answer is “upload to some cloud API.” pcAI says no: all the AI processing runs on your device via CoreML. The privacy angle isn’t just a selling point — it’s the architecture.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/pcai-photo-retouch/id6751140211" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. CutoutCraft — Background Removal Without the Subscription
&lt;/h2&gt;

&lt;p&gt;Background removal, image restyling, layout creation — CutoutCraft handles all of it with on-device AI. No registration, no uploads, no monthly fee. Just tap, cut, style, export. The kind of tool that should have existed years ago.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/cutoutcraft/id6745748800" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. ShareGuard — Protect Sensitive Info Before You Share
&lt;/h2&gt;

&lt;p&gt;This one is quietly important. Before you share a screenshot or photo, ShareGuard lets you strip hidden EXIF metadata, mask faces, and blur or mosaic sensitive text — all on-device. In a world where people routinely leak private data in screenshots, this fills a real gap.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://apps.apple.com/us/app/shareguard/id6752704315" rel="noopener noreferrer"&gt;Mac App Store&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Common Thread
&lt;/h2&gt;

&lt;p&gt;What ties all these apps together is the &lt;strong&gt;local-first, privacy-first&lt;/strong&gt; approach. In an era where almost everything phones home, it’s refreshing to see a developer consistently choose to do the work on-device — whether that’s CoreML inference, file conversion, or metadata stripping.&lt;/p&gt;

&lt;p&gt;The full portfolio is at &lt;a href="https://apps.h53d.xyz/" rel="noopener noreferrer"&gt;apps.h53d.xyz&lt;/a&gt; if you want to browse the previews. Worth bookmarking if you work in design, engineering, or just care about keeping your files off other people’s servers.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I’m sharing this as a fan of the approach, not as the developer. The apps are built and maintained by a friend.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>swift</category>
      <category>macos</category>
      <category>ai</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Why I built a free TV wall in the browser — and what I learned</title>
      <dc:creator>lori shui</dc:creator>
      <pubDate>Fri, 27 Feb 2026 08:49:23 +0000</pubDate>
      <link>https://dev.to/loriwave/why-i-built-a-free-tv-wall-in-the-browser-and-what-i-learned-okh</link>
      <guid>https://dev.to/loriwave/why-i-built-a-free-tv-wall-in-the-browser-and-what-i-learned-okh</guid>
      <description>&lt;p&gt;It started with a simple moment.&lt;/p&gt;

&lt;p&gt;I was sitting at my desk during a major breaking news event, flipping between CNN, BBC, and Al Jazeera tabs. I wanted to see how different networks were covering the same story — at the same time, on the same screen.&lt;/p&gt;

&lt;p&gt;I Googled "watch multiple TV channels at once." Everything I found was either a paid app, required a download, or needed me to create yet another account. All I wanted was to open a browser tab and watch.&lt;/p&gt;

&lt;p&gt;So I built it myself.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is LiveGrid?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://livegrid.app/welcome" rel="noopener noreferrer"&gt;LiveGrid&lt;/a&gt;&lt;/strong&gt; is a free, browser-based TV wall. Open it, pick your channels, and watch them all at once on a single screen. No login. No install. No paywall.&lt;/p&gt;

&lt;p&gt;It currently has 5000+ live channels from around the world — news, sports, entertainment, music — organized by country and category. You can choose different layouts: a classic grid, a command center with one main channel and smaller side channels, or a hero layout that emphasizes one stream while keeping others visible.&lt;/p&gt;

&lt;h3&gt;
  
  
  The moment I knew this was worth building
&lt;/h3&gt;

&lt;p&gt;The first time I had 6 news channels playing simultaneously on my screen, I felt something I didn't expect — &lt;strong&gt;a sense of connection to the world&lt;/strong&gt;. I could see BBC covering a story from one angle while Al Jazeera showed a completely different perspective. I could watch Japanese NHK news even though I don't speak Japanese, just to see what they were focusing on.&lt;/p&gt;

&lt;p&gt;It wasn't just about information. It was about &lt;strong&gt;seeing the world through multiple windows at the same time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's when I stopped thinking of this as a side project and started taking it seriously.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who actually uses this?
&lt;/h3&gt;

&lt;p&gt;I originally built it for myself, but after sharing it on Reddit, I found that people use it for very different reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;News junkies&lt;/strong&gt; — Journalists and news enthusiasts who want to compare how different networks cover the same event. During elections, natural disasters, or major geopolitical events, having multiple perspectives on one screen is incredibly valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sports fans&lt;/strong&gt; — When there are multiple games happening at the same time (think NFL Sunday, Champions League nights, or March Madness), you don't want to pick just one. You want to see them all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expats and digital nomads&lt;/strong&gt; — People living abroad who miss TV from home. A Brazilian in Tokyo watching Globo. An Indian in Berlin catching IPL matches. LiveGrid makes it easy to find and watch channels from your home country.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People who just think it's cool&lt;/strong&gt; — And honestly? That was me at the beginning. I just thought the idea of a TV wall in a browser was cool. Turns out, "cool" can be a valid reason to build something.&lt;/p&gt;

&lt;h3&gt;
  
  
  The challenges I didn't expect
&lt;/h3&gt;

&lt;p&gt;Building a multi-stream video player sounds straightforward. It's not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streams break. A lot.&lt;/strong&gt; Live IPTV streams are notoriously unreliable. They stall, buffer, drop out, and sometimes just die. I had to build automatic stall detection and recovery — if a stream freezes for too long, LiveGrid automatically tries to restart it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Devices have limits.&lt;/strong&gt; Playing 16 simultaneous video streams will melt a cheap laptop. I built a Performance Guard that monitors your device's FPS in real-time and automatically pauses excess streams when your device is under pressure. On a powerful desktop, you get all 16 streams. On a modest laptop, it gracefully drops to 4. The user doesn't have to think about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio is tricky.&lt;/strong&gt; When you have 9 channels playing, whose audio do you hear? I built a focus system — click any tile to hear its audio. You can also lock audio to a specific channel, adjust volume per tile, or mute everything. It sounds simple, but getting the UX right took several iterations.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I learned
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Start with "cool," iterate toward "useful."&lt;/strong&gt; I didn't have a product-market fit hypothesis. I didn't do user research. I just built something I thought was cool. But by sharing it and listening to feedback, I discovered real use cases I never imagined.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero-friction matters more than features.&lt;/strong&gt; The #1 thing people appreciate about LiveGrid isn't any specific feature — it's that they can open a link and immediately start watching. No signup flow. No onboarding. No "choose a plan." Just TV.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The world is more interesting when you see it from multiple angles.&lt;/strong&gt; This is the philosophical takeaway. We're used to consuming media one stream at a time — one article, one video, one channel. But when you put 6 different countries' news side by side, you realize how different the world looks depending on where you're standing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's next
&lt;/h3&gt;

&lt;p&gt;I'm actively working on LiveGrid and exploring ideas like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More layout options&lt;/strong&gt; — Custom arrangements beyond the current presets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better channel discovery&lt;/strong&gt; — Smarter recommendations based on what you're watching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community features&lt;/strong&gt; — Ways for users to share and discover interesting channel combinations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Try it
&lt;/h3&gt;

&lt;p&gt;If any of this resonates with you: &lt;strong&gt;&lt;a href="https://livegrid.app/welcome" rel="noopener noreferrer"&gt;livegrid.app/welcome&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No login. No install. Just open it and start watching. Pick a country you've never been to and see what's on their TV right now. You might be surprised by what you discover.&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback — what channels you found interesting, what features you'd want, or just what you think about the idea. Drop a comment below or reach out at &lt;a href="mailto:support@livegrid.app"&gt;support@livegrid.app&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
