what's next.
Our working roadmap, kept honest. Things close to now are specific and dated. Things further out are named but fuzzy — and that's the point: pretending to certainty would be worse than the fog.
how to read it
- nowshipped recently, or in flight this month
- nextcommitted for this quarter, named, roughly dated
- laterthis year, named, fuzzy on when
- consideringon the table, not committed — open to argument
- parkedexplicitly not doing, with the reason
now.
This month. In flight. Movement week to week.
Roadmap page on the portal
This page. Lifts the markdown roadmap onto the design system so the team can see where the portal is going, and the open questions get a public surface.
Brief C — clean slate and staff invites
Wipe the test rows, invite the first wave of staff for real, exercise the audit log under live activity. Gets the portal genuinely live for the team.
CLAUDE.md refresh
Bring the technical reference up to date after Phase 2b-pre B and Stage 1. So Claude Code sessions start with the current shape of the portal, not last month's.
Steve and Josh — staff role grant
Give the admins the staff bundle alongside their admin roles, so admin permissions don't have to mirror every staff permission. One-line migration.
Margin-impact tool — permission fix
Re-gate from finance.view_detailed to finance.view_topline. The tool is educational, not private finance — over-gating defeats the point. One click in pages admin.
next.
This quarter. Committed. Named owners, loose dates.
Stage 2 — portal → CurrentRMS push
When an admin invites a freelancer, the portal also creates the CRMS member and stores the returned id. Closes the source-of-truth loop. Identity edits push too; failures surface for retry.
Phase 2c — RLS policies across every table
Defence in depth. Today access control is enforced at the Edge Function layer; Postgres RLS adds a second floor. Twenty tables, one at a time, smoke-tested as we go.
Defensive DB housekeeping
Unique index on lower(email), drop the legacy cf_email column, retire the old {role}_visible booleans, fix the portal_users.role drift. Tech debt that will rot otherwise.
Storage manager (replaces Stillage)
Stillages, crates, loose items — one tool, one shape. Item type, "what's in it", "where's it going" with a managed location list. Matches how Andy and Joe actually work.
Company info page
One reference page for registration, VAT, EORI, bank details (per currency), wifi, software licences, T&Cs PDF. Replaces the Teams wiki nobody can find.
Projects dashboard tune-up
Phase filtering on the dashboard, plus a headline summary — "X in Discovery, Y in Development, Z in Pre-production". Lets Woody and the PMs see the pipeline at a glance.
Label maker — creator pill and modified date
Small pill on each label set showing who made it and when it last moved. Easy way to find "the one Jake did" or "the latest version".
Apple Sign-In
Fourth auth method alongside Microsoft, Google and magic link. Cheap to add via Supabase. Same rules as Google — does not auto-provision.
later.
This year. Named, fuzzy, will shift as we learn.
Updates page (replaces homepage What's New)
One feed for "what's new at Zeal" — the existing portal feed plus the Teams News & Updates channel, in chronological order. Fragmentation gone.
Notify button on projects
Project page action that emails everyone associated — crew, PMs, optionally the client — with a custom message and a Dropbox link. Replaces the manual email scramble.
RAMS builder
Pick from a managed risk-assessment library, fill in project-specific bits, produce a branded PDF pack. Same render pattern as Label Maker.
Crew sheet generator
Auto-populated contact sheets per project from job assignments and portal profiles. Branded PDF, sent or downloaded. Depends on Phase 3 profile data being real.
Phase 3 — freelancer self-service profile
Nineteen profile fields go from placeholder to real. Users edit their own; admins see others; updates push to CRMS. Replaces the Typeform → Monday onboarding mess.
Financial dashboard
Income, gross and net margin, debtors, creditors, DSCR. Pulled from Xero — monthly approved snapshots for authority, optional live for the curious. Visible to all staff.
Operations dashboard
"What's happening today?" — subhires in and out, transport movements, overdue collections and returns. Replaces the patchwork of Monday boards Andy keeps in his head.
Warehouse dashboard
Quarantine items, planned servicing, due PAT and LOLER tests — surfaced in the portal so Joe doesn't have to context-switch into CRMS to see them.
CRM dashboard
Client list with relationship strength, account-manager ownership, last contact, upcoming renewals. Supports the "touch base every 6 months" goal in the 2026 strategy.
Subhire return alerts
Catch overdue subhire returns automatically — email, Teams ping or portal banner. Stops paying for kit longer than we use it.
Studio booking → Monday tasks
When a studio booking has unconfirmed hardware, drop a task on the ops Monday board automatically. Removes "did anyone see this?" entirely.
Additional label types
Soca, network, dolly, truss. Each follows the same recipe — renderer, endpoint, row schema, asset category. The pattern is in place from PAL and fixture.
Calendar — who's in, who's out
Filterable company calendar — people, jobs, leave, birthdays. Pulls from CRMS for jobs and (probably) BambooHR for absence. Replaces three places we currently look.
considering.
On the table. Not committed. Open to argument — drop a note to Steve if you have one.
AI assistant — "Ask Zeal"
Always-accessible chat that answers "where do I find…" and "how do we do…" against the OS and playbooks. Surfaces links, doesn't replace pages.
Delete the six legacy HTML pages
Six pages still live on the pre-rebuild class system. Deleting them unlocks another portal.css shrink — about forty rule blocks of dead weight.
People / HR section
Handbook, grievance, disciplinary, holiday — somewhere consistent. Three options: custom HTML, deeper BambooHR integration, or different HR software entirely.
Recurring data-cleanup cadence
Sarah's wave is the first. Drift is ongoing — emails change, CRMS goes stale, orphans accumulate. Need a cadence, an owner, and possibly a "data health" view.
parked.
Explicitly not doing. Written down so the next person doesn't re-propose it cold.
Replacing CurrentRMS
The portal-as-source-of-truth pivot was a deliberate move toward CRMS-replaceable, but the migration cost outweighs the benefit today. Status quo holds.