[{"data":1,"prerenderedAt":203},["ShallowReactive",2],{"projects-en":3},[4,136,168],{"id":5,"title":6,"body":7,"description":101,"detail":102,"extension":103,"highlights":104,"icon":108,"iconLight":109,"kind":110,"links":111,"meta":120,"navigation":102,"order":121,"path":122,"period":123,"role":124,"seo":125,"stack":126,"status":131,"stem":132,"summary":133,"tagline":134,"__hash__":135},"projects_en\u002Fprojects\u002Fwiser-locker.md","Wiser Locker",{"type":8,"value":9,"toc":92},"minimark",[10,15,19,23,46,50,53,57,77,81],[11,12,14],"h2",{"id":13},"the-problem","The problem",[16,17,18],"p",{},"Private photos and videos need protection, but they also need to be found again. The same photo often belongs to several themes at once — a trip, family, friends — while a folder hierarchy forces you to pick just one. Most \"vault\" apps solve privacy and leave organization behind.",[11,20,22],{"id":21},"what-wiser-locker-does","What Wiser Locker does",[24,25,26,34,40],"ul",{},[27,28,29,33],"li",{},[30,31,32],"strong",{},"Encrypted on your device."," Photos and videos are encrypted and stored locally, and the app unlocks with biometrics.",[27,35,36,39],{},[30,37,38],{},"Tags, not folders."," Give each item as many tags as you like and combine them in filters.",[27,41,42,45],{},[30,43,44],{},"Saved filters."," Keep frequent combinations and reopen them in one tap.",[11,47,49],{"id":48},"my-role","My role",[16,51,52],{},"I built Wiser Locker on my own: product planning, requirements, UI\u002FUX, the data design for tags and filters, encryption and key handling, implementation, performance work, the Google Play release, and improvements after launch.",[11,54,56],{"id":55},"engineering-decisions","Engineering decisions",[24,58,59,65,71],{},[27,60,61,64],{},[30,62,63],{},"Security built on proven standards."," Media encryption, an encrypted database, biometric authentication, and secure key storage are combined using established cryptography libraries rather than home-made algorithms. Screenshots are blocked inside the app.",[27,66,67,70],{},[30,68,69],{},"Smooth browsing of encrypted media."," Heavy work runs off the main UI thread, and the gallery uses thumbnails, pagination, and lazy loading so large libraries stay responsive.",[27,72,73,76],{},[30,74,75],{},"A data model for flexible organization."," Tags and saved filters live in an encrypted SQLite database, so any item can appear under any combination of themes.",[11,78,80],{"id":79},"status","Status",[16,82,83,84,91],{},"Published on Google Play for Android and actively maintained. Wiser Locker is an independent product; ",[85,86,90],"a",{"href":87,"rel":88},"https:\u002F\u002Fwww.forgerwise.com\u002F",[89],"nofollow","Forger Wise"," is the brand I use for my personal apps.",{"title":93,"searchDepth":94,"depth":94,"links":95},"",2,[96,97,98,99,100],{"id":13,"depth":94,"text":14},{"id":21,"depth":94,"text":22},{"id":48,"depth":94,"text":49},{"id":55,"depth":94,"text":56},{"id":79,"depth":94,"text":80},"Wiser Locker is an Android app that encrypts private photos and videos on-device and organizes them with multiple tags and saved filters. Designed, built, and published on Google Play by Ying Chieh Wang.",true,"md",[105,106,107],"Media is encrypted on the device, and access is protected by biometrics and secure key storage.","Multiple tags and saved filters replace a single folder tree, so one photo can belong to \"travel\", \"family\", and \"friends\" at once.","Published on Google Play and maintained under the Forger Wise brand.","\u002Fimages\u002Fapps\u002Fwiser-locker\u002Fmark-light.png","\u002Fimages\u002Fapps\u002Fwiser-locker\u002Fmark-dark.png","Product · Android",[112,115,118],{"label":113,"href":114},"Google Play","wiserLockerPlay",{"label":116,"href":117},"wiserlocker.com","wiserLockerSite",{"label":90,"href":119},"forgerwise",{},1,"\u002Fprojects\u002Fwiser-locker","Feb 2025 – Present","Solo developer — product, design, engineering, and release",{"title":6,"description":101},[127,128,129,130],"Flutter","Dart","SQLCipher","Android","Published on Google Play","projects\u002Fwiser-locker","An Android app for people who want to keep private media safe and still find it easily.","Private photos and videos, encrypted on your device and organized by tags instead of folders.","ZCT6QOPF2PKDHOpjmlCZEHfV0qi-JB08hPvqwnrbIvA",{"id":137,"title":138,"body":139,"description":143,"detail":144,"extension":103,"highlights":145,"icon":149,"iconLight":150,"kind":110,"links":151,"meta":157,"navigation":102,"order":94,"path":158,"period":159,"role":160,"seo":161,"stack":162,"status":131,"stem":164,"summary":165,"tagline":166,"__hash__":167},"projects_en\u002Fprojects\u002Ffoodlist.md","FoodList",{"type":8,"value":140,"toc":141},[],{"title":93,"searchDepth":94,"depth":94,"links":142},[],"FoodList is a household food-management app that helps reduce food waste by tracking ingredients and expiration dates. Built with Flutter and published on Google Play.",false,[146,147,148],"Problem: about 60% of global food waste happens in households (UNEP Food Waste Index Report 2024), often because people forget what they have and when it expires.","Solution: register ingredients once; green, yellow, and red status shows what is fine, what to use soon, and what has expired.","Background reminders before items expire, full offline use with local storage, and a multilingual UI.","\u002Fimages\u002Fapps\u002Ffoodlist\u002Ficon.png",null,[152,154],{"label":113,"href":153},"foodListPlay",{"label":155,"href":156},"GitHub","foodListGithub",{},"\u002Fprojects\u002Ffoodlist","Jul 2023 – Present","Solo developer — planning, design, implementation, release, and maintenance",{"title":138,"description":143},[127,128,163,130],"Hive","projects\u002Ffoodlist","Food at home often goes to waste simply because people forget what they have and when it expires. FoodList is a household food-management app that keeps track of both.","Less household food waste: know what you have and what to use first.","gJfJTNd_JcHF89yo1nynkO0ZqOpY_kVdeVEVVV27d9k",{"id":169,"title":170,"body":171,"description":175,"detail":144,"extension":103,"highlights":176,"icon":150,"iconLight":150,"kind":179,"links":180,"meta":187,"navigation":102,"order":188,"path":189,"period":190,"role":191,"seo":192,"stack":193,"status":198,"stem":199,"summary":200,"tagline":201,"__hash__":202},"projects_en\u002Fprojects\u002Fbattlesnake.md","Battlesnake AI",{"type":8,"value":172,"toc":173},[],{"title":93,"searchDepth":94,"depth":94,"links":174},[],"Game-playing AI for Battlesnake built in university PBL courses — A* search for solo play and reinforcement learning for head-to-head matches.",[177,178],"Solo: proposed and implemented an A* strategy in Python that switches between safety-first and food-first modes — 3rd place in class.","Duel: when our first Monte Carlo approach underperformed, the team moved to reinforcement learning. Building on existing open-source implementations, I trained and evaluated PPO \u002F A2C models with self-play and connected them to the game server — 1st place in class.","Course project · AI",[181,184],{"label":182,"href":183},"GitHub (Duel)","battlesnakeDuelGithub",{"label":185,"href":186},"GitHub (Solo)","battlesnakeSoloGithub",{},3,"\u002Fprojects\u002Fbattlesnake","Oct 2023 – Feb 2024","Main implementer (Solo); training, evaluation, and API integration (Duel)",{"title":170,"description":175},[194,195,196,197],"Python","PyTorch","Reinforcement learning","A*","1st place in class tournament","projects\u002Fbattlesnake","Two team projects in PBL courses at The University of Osaka. Our snakes played against classmates' snakes through the official Battlesnake API.","A* search for solo play and reinforcement learning for head-to-head matches.","BfeK_xd-Ih5ggc5HpcS5BC_65_Eg5WWfGvj6m8IINw0",1789832903535]