A unified dashboard that stitches together a project management tool, an accounting platform, and a forecasting system into a single live view of how the business is actually performing. Built so leadership stops waiting for reports and starts making decisions.
Project hours lived in the project management platform. Financials lived in the accounting system. Revenue forecasts lived in spreadsheets that someone updated manually every week. To answer a simple question like "are we profitable on this project?" required pulling numbers from three different tools, cross-referencing them, and hoping nothing was stale. The people who needed the answers most were the last to get them.
I built a Flask backend and React/Vite frontend that connects to all three platforms through OAuth and pulls everything into one coherent picture. The tricky part was not the integration itself but making it fast enough to feel live without hammering rate-limited APIs.
What used to be a weekly scramble of spreadsheet assembly became something anyone on the leadership team could check in thirty seconds. Project profitability, team utilization, upcoming receivables, all in one place, always current. The AI layer started surfacing things nobody was looking for, like projects quietly drifting over budget before they became a problem.
Caching strategy is where this project really lived. It is easy to hit an API and display data. It is much harder to keep that data feeling fresh while respecting rate limits and not burning through quotas. The incremental sync approach, where you track what changed and only fetch the delta, taught me more about system design than any textbook pattern. I also learned that the moment you show people data they could not easily see before, they immediately want to see it sliced a different way. The first version is never the last version.