[{"data":1,"prerenderedAt":109},["ShallowReactive",2],{"project-\u002Fen\u002Fproyectos\u002Frevenew":3},{"id":4,"title":5,"backendRepo":6,"body":7,"cover":90,"demo":91,"description":84,"extension":92,"meta":93,"navigation":94,"order":95,"path":96,"repo":97,"seo":98,"stack":99,"stem":106,"summary":107,"__hash__":108},"projects_en\u002Fen\u002Fproyectos\u002Frevenew.md","Revenew","https:\u002F\u002Fgithub.com\u002FKevin-Curruchich\u002Fai-sales-assistant",{"type":8,"value":9,"toc":83},"minimark",[10,15,19,23,26,76,80],[11,12,14],"h2",{"id":13},"the-problem","The problem",[16,17,18],"p",{},"A business with recurring sales needs to know at a glance when each customer last bought, when they're likely to come back, and who to call this week. That information usually lives in spreadsheets that never warn you about anything.",[11,20,22],{"id":21},"the-solution","The solution",[16,24,25],{},"A React and TypeScript SPA backed by a custom API (FastAPI and PostgreSQL, with the agent built on LangGraph and Claude) that computes next-purchase estimates. Key decisions:",[27,28,29,37,43,49,60,66],"ul",{},[30,31,32,36],"li",{},[33,34,35],"strong",{},"Feature-based modules"," (customers, products, purchases, sales, cash, follow-ups, calendar, dashboard and agent), each with its own domain, actions, hooks and pages.",[30,38,39,42],{},[33,40,41],{},"TanStack Query for server state:"," recording a sale changes stock and estimates, so products, customers, dashboard, follow-ups and calendar all refresh together.",[30,44,45,48],{},[33,46,47],{},"Filters, pagination and dates live in the URL",", so any view can be shared.",[30,50,51,54,55,59],{},[33,52,53],{},"AI sales agent:"," every change it proposes (sales, purchases, cash movements, payments) arrives as a card the user approves, edits or cancels before it runs. Responses stream over SSE (via ",[56,57,58],"code",{},"fetch",", since the request is a POST with a body), and the parser and chat state are pure functions with tests.",[30,61,62,65],{},[33,63,64],{},"Dates in the local time zone:"," converting to UTC pushed sales made after 6 p.m. in Guatemala into the next day.",[30,67,68,71,72,75],{},[33,69,70],{},"CI on every PR"," (lint, typecheck, tests) and automatic deploys to Firebase Hosting on merge to ",[56,73,74],{},"main",".",[11,77,79],{"id":78},"the-outcome","The outcome",[16,81,82],{},"In active development, with versioned releases and a CHANGELOG (v0.14.0). The full flow works: customers, inventory, multi-item sales, cash register, follow-ups with filters (7\u002F14\u002F30 days and overdue), calendar, dashboard and an agent with confirmations.",{"title":84,"searchDepth":85,"depth":85,"links":86},"",2,[87,88,89],{"id":13,"depth":85,"text":14},{"id":21,"depth":85,"text":22},{"id":78,"depth":85,"text":79},null,"https:\u002F\u002Frevenew-95e3a.web.app\u002F","md",{},true,1,"\u002Fen\u002Fproyectos\u002Frevenew","https:\u002F\u002Fgithub.com\u002FKevin-Curruchich\u002Frevenew",{"title":5,"description":84},[100,101,102,103,104,105],"React","TypeScript","TanStack Query","Tailwind CSS","Zod","Firebase","en\u002Fproyectos\u002Frevenew","A dashboard for businesses with recurring sales: it predicts when each customer will buy again and who to follow up with, no spreadsheets needed.","bGOeWMo71hlMyFHNgPVdzRSiQTBHIgNDa2BynrmmXdY",1791866600905]