[{"data":1,"prerenderedAt":119},["ShallowReactive",2],{"work-en-fastvest":3},{"id":4,"title":5,"body":6,"category":83,"date":84,"description":85,"extension":86,"externalUrl":87,"featured":88,"locale":89,"meta":90,"navigation":91,"outcome":92,"path":97,"rank":98,"release":99,"role":100,"screenshot":101,"seo":102,"stack":103,"stem":114,"summary":115,"tier":116,"year":117,"__hash__":118},"projects\u002Fen\u002Fprojects\u002Ffastvest.md","Fastvest",{"type":7,"value":8,"toc":76},"minimark",[9,13,18,21,25,28,43,47],[10,11,12],"p",{},"Fastvest is a local-first portfolio tracker. You open the app, your portfolio value and unrealized P&L are on screen immediately, and you can refresh market prices without creating an account — and without sending your portfolio anywhere. It is monitoring software for your own holdings, not financial advice.",[14,15,17],"h2",{"id":16},"the-privacy-model","The privacy model",[10,19,20],{},"Portfolio configuration lives only in browser localStorage. It is never persisted server-side, never logged, and never sent to analytics. Clearing browser storage removes your local portfolio unless you exported a backup. The only thing that travels is a market-data request; the server acts as a data gateway, not a portfolio store.",[14,22,24],{"id":23},"how-it-works","How it works",[10,26,27],{},"Holdings are entered and edited client-side — position count and cost basis per symbol, with no cost to record — and the portfolio and price data can be imported and exported as JSON. The UI shows total value, cost basis, unrealized P&L, today's P&L, an allocation view, and a sortable holdings table. A 60-second refresh cycle runs quotes through a stale-while-refresh strategy: cached prices render instantly while stale data revalidates in the background instead of blocking the screen.",[10,29,30,31,35,36,35,39,42],{},"Market data flows through Nitro API routes (",[32,33,34],"code",{},"\u002Fapi\u002Fquotes",", ",[32,37,38],{},"\u002Fapi\u002Fsearch",[32,40,41],{},"\u002Fapi\u002Fchart","), which wrap Yahoo Finance with timeout handling, caching, and error normalization. Because the browser never talks to the data provider directly, quotes stay resilient to the flakiness of a third-party endpoint.",[14,44,46],{"id":45},"engineering-decisions","Engineering decisions",[48,49,50,58,64,70],"ul",{},[51,52,53,57],"li",{},[54,55,56],"strong",{},"Separating ownership from retrieval."," Portfolio data and market data are different trust domains; keeping one client-side and the other server-side makes each boundary small and testable.",[51,59,60,63],{},[54,61,62],{},"Shared validation."," Zod schemas are defined once and used on both sides, so client and server cannot drift on what a quote or search result looks like.",[51,65,66,69],{},[54,67,68],{},"Offline as default behavior."," PWA application-shell caching means the app shell loads offline and previously cached prices remain visible.",[51,71,72,75],{},[54,73,74],{},"Testing the surface."," Unit tests cover financial calculations and formatting; Playwright covers the flows that matter — launch, add a holding, refresh quotes.",{"title":77,"searchDepth":78,"depth":78,"links":79},"",2,[80,81,82],{"id":16,"depth":78,"text":17},{"id":23,"depth":78,"text":24},{"id":45,"depth":78,"text":46},"Open Source · FinTech · Privacy","2026-09-16","Local-first portfolio tracker — open the app, see portfolio value and P&L, refresh market prices — no account and no server-side portfolio database.","md","https:\u002F\u002Ffastvest.vercel.app",false,"en",{},true,[93,94,95,96],"Local-first portfolio model — holdings live in browser localStorage and are never persisted server-side, logged, or sent to analytics.","Server-side market-data gateway (Nitro API routes wrapping Yahoo Finance) with caching, timeout handling, and normalized errors.","Cached stale-while-refresh quotes plus an offline PWA application shell.","Zod schemas shared between client and server, with Vitest unit tests and Playwright end-to-end tests.","\u002Fen\u002Fprojects\u002Ffastvest","4","2026","Full-stack Developer",null,{"title":5,"description":85},[104,105,106,107,108,109,110,111,112,113],"Nuxt 4","Vue 3","TypeScript","Nitro","Tailwind CSS","shadcn-vue","Yahoo Finance","PWA","Vitest","Playwright","en\u002Fprojects\u002Ffastvest","Fast, local-first portfolio tracker built around privacy — holdings stay in browser storage, market data comes from a server-side gateway with cached, stale-while-refresh quotes and offline support.","standard",2026,"3ZYjkaRFwkuvmb0DxuqQqTcVhemjYEOrJk72cloE9ko",1789641311559]