Getting Started
The FPM Client Portal is already live in production. This guide gets you oriented as a new data analyst on the team within an hour.
What is the FPM Client Portal?
Internally the codebase is called FPM Client Hub. Externally — what the client sees, what we link to in proposals — it is the FPM Client Portal. It is a multi-client marketing dashboard. Each client has a single page that aggregates live data from up to 11 platforms (Google Analytics, Search Console, GBP, Google Ads, Meta Ads, GoHighLevel, YouTube, PageSpeed, DataForSEO, Microsoft Clarity, n8n) into one unified view.
The end product replaces what we used to do with Looker Studio and a stack of spreadsheets. The goals:
- One pane of glass — every paid channel, organic channel, pipeline metric and KPI in a single client page.
- Pipeline-first — Pipeline Overview is the primary view. Leads, appointments, sales, ROAS, cost-per-X.
- Self-serve client portal — clients log in and see only their data, with admin-curated sections (snapshot, scorecard, game plan, deliverables).
- Monthly PDF report — exported on demand, mirrors the dashboard structure.
Hosting & deployment
- Production URL:
clients.flooringpros-marketing.com. - Hosting provider: Hostinger (Node.js hosting plan).
- Source repo: GitHub, under Aniello Infantini's account. Push access is currently limited to Aniello.
- Deployment: Pushes to
mainare deployed by Hostinger's GitHub integration. There is no manual build step — once a commit lands on main, the new version is live within a few minutes. - Database: Supabase (separate project for production).
- Environment variables: managed in the Hostinger panel. They are NOT in the GitHub repo. If you change a variable name in code, also update it in Hostinger or the next deploy will break.
Quick tour
Local setup (only if you need to change code)
Commands you will use
npm run dev # Local dev server (default port 3000)
npm run build # Production build (use to verify your changes compile)
npm run lint # ESLint flat config — run before committingHow to read these docs
The sidebar is grouped by concept, not by file. If you are trying to add a new metric, the relevant pages in order are:
- Variable → Source — does the metric already have a source?
- Integrations — how the source API is wired and authenticated.
- API Routes — where the metric is fetched server-side.
- Tab Reference — where it should appear in the UI.
- Where We Are — check if it is already in flight before you start.
live means the metric or feature is wired end-to-end and verified against a real client. partial means data exists but only for some sources. pending means the schema is in place but no live data flows yet. planned means it is on the roadmap but not started.