Try staff7 live — explore the platform with pre-loaded demo data. Switch between admin, manager, freelance, consultant or solo views.
Request admin account
open demo →
// overview

Platform overview

staff7 is a multi-tenant SaaS platform built for ESNs, consulting agencies, and independent firms. It centralises the full operational stack — from consultant availability to project profitability — in a single, role-aware interface.

Consultant management
Profiles, skills, status, occupancy, contract type (employee/freelance), and financial costs.
Project & client tracking
External and internal projects, client CRM, assignment management, and budget tracking.
Timesheets (CRA)
Weekly time entry with draft/submit/approve workflow, per project, per consultant.
Leave management
Paid Leaves, flex days, unpaid, authorised absence — request, approve, and balance tracking.
Planning & timeline
Weekly availability grid and monthly Gantt-style view across the team.
Financial tracking
Daily Rate sold vs actual, gross margin per project, profitability per consultant.
All data is multi-tenant and RLS-enforced. Each company's data is isolated at the database level — no query can cross tenant boundaries.
// dashboard

Dashboard

The dashboard is the entry point for all roles. It aggregates key metrics in real time and surfaces pending actions without navigating away.

KPI cards
Active consultants, active projects, occupancy rate, and pending leave requests — updated on every load.
Live calendar
Weekly calendar with real events: public holidays (per country), approved leaves, and project deadlines.
Activity feed
Recent team actions — assignments, leave approvals, new projects — in reverse chronological order.
Actionable panels
Managers see "approve →" CTAs on pending timesheets and leave requests. Consultants see "submit CRA →".
RoleWhat they see
consultantOwn assignments, own leave balance, CRA week with submit CTA, personal occupancy
freelanceSame as consultant + invoice KPI (draft/sent/paid count) and "new invoice →" CTA
managerTeam occupancy, pending validations with approve CTAs, team calendar with leave events
adminFull KPIs, financial summary, all pending actions, calendar with holidays + deadlines
super_adminCross-tenant view via OrgSwitcher (all companies)
// consultants

Consultants

The consultant directory is the operational core of the platform. Each profile tracks availability, assignments, financial cost, and leave entitlements.

Employee profile
Gross salary, employer charges (%), working days/year → actual daily cost calculated automatically.
Freelance profile
Billed daily rate with per-assignment override. No paid leave or flex-day entitlements.
Target rate
Admin sets a target daily rate — the platform tracks the gap vs actual cost to flag margin risk.
Occupancy tracking
Real-time occupancy % derived from active assignments, updated across planning views.
FieldEmployeeFreelance
Daily cost basisSalary × (1 + charges%) ÷ days/yrBilled Rate (or per-assignment override)
Paid Leave / Flex Days✓ tracked— not applicable
Leave requestsPaid Leave, Flex Days, unpaid, auth. absenceUnpaid, auth. absence only
Profitability marginRevenue − fully-loaded costRevenue − billed rate
Consultant accounts are linked via user_id. An admin can send an email invitation directly from the consultant drawer — the platform creates a Supabase auth account and sets the role in app_metadata. Consultants and freelancers can view the team directory (read-only) but cannot edit profiles or see financial data.
// projects

Projects & clients

Projects are the financial and operational unit of the platform. Each project links a client, a team, and a financial envelope.

Client CRM
Client directory with sector, contact info, and linked projects. Revenue and active project counts per client.
Project lifecycle
Draft → Active → On hold → Completed → Archived. Each status gates what actions are available.
Team assignments
Assign consultants with start/end dates and allocation %. Freelancers can have a per-assignment daily rate override.
Financial envelope
Rate sold, days sold, total budget — visible to admins only. Used to calculate gross margin.
StatusDescriptionVisible in financials
draftProject created, not yet active. No assignments.No
activeOngoing — included in occupancy and financial views.Yes
on_holdPaused — consultants retained but not counted as assigned.No
completedClosed — historical data preserved.No
archivedHidden from main views.No
Consultants and freelancers can view their assigned projects (read-only) but cannot edit, archive, or delete. Financial data (Daily Rate, budget, days sold) is hidden for non-admin roles.
// timesheets

Timesheets

The timesheet module provides weekly time tracking with a structured validation workflow. Each day entry can be 0, 0.5, or 1 day — and moves through draft → submitted → approved.

Weekly grid
Each consultant sees their week with day cells. Click to toggle empty → half → full day.
Submit workflow
Consultant submits the week → manager/admin reviews and approves per consultant.
Manager view
Managers see all team members for the selected week. Can approve all submitted entries in one click.
Public holidays
Holidays displayed per consultant country (via date.nager.at). Excluded from working day calculations.
RoleCan enterCan submitCan approve
consultant✓ own✓ own
manager✓ team✓ team✓ team
admin✓ all✓ all✓ all
// leaves

Leave management

The leave module handles request submission, manager approval, and balance tracking. Freelancers are redirected — Paid leaves and flex days are not available.

Leave request
Consultant selects type, dates, and submits. Working days calculated automatically (weekends + holidays excluded).
Approval workflow
Manager/admin sees pending requests with impact warnings. One-click approve or refuse.
Balance tracking
Paid leaves and flex days balances displayed per consultant with a visual bar. Depletes automatically on approval.
Impact warning
System flags if an approved leave overlaps with an active project assignment.
TypeAvailable toDuration
Paid leave Employee onlyCustom — calculated in working days
Flex days Employee onlyCustom — from flex days balance
Unpaid leaveAllCustom
Authorised absenceAllFixed by legal motif (bereavement, marriage…)
// planning

Planning

Two complementary views give a spatial sense of team availability and workload. Both are restricted to admin, manager, and super_admin roles.

Monthly availability
Row per consultant, column per day. Colour cells: free / on assignment / partial / leave / weekend. Hatch patterns distinguish leave from projects.
Monthly timeline
Gantt-style view. Assignment bars span across days. Leave blocks appear as a separate layer. Manager sees only their team.
+
Quick assign
Click any free cell to open the assignment drawer — pre-filled with the consultant and date.
Live status
Views derive status from assignments and leave_requests in real time — no manual sync needed.
// finance

Finance & profitability

Financial data is admin-only. Two views expose different angles: project-level margins in Finances, and consultant-level profitability in Profitability.

Project margins
Sold rate vs actual daily cost per project. Gross margin in € and %. Colour-coded by health threshold.
Consultant profitability
Revenue generated, gross margin, occupancy rate — per consultant, sorted by any metric.
Target vs actual
Admin sets a target daily rate per consultant. Platform shows the gap % — red if margin < 10%.
Alert system
Banner surfaces consultants whose target rate leaves less than 10% margin over actual cost.
// Gross margin per consultant
revenue      = SUM(sold_rate × days) on active assignments
cost         = actual_daily_cost × billed_days
gross_margin = revenue - cost
margin_pct   = gross_margin / revenue × 100

// Margin health thresholds
≥ 25%  →  Excellent  (green)
15–25% →  Correct    (gold)
< 15%  →  Watch      (pink)
// invoices

Invoices

The invoice module lets admins, managers, and freelancers generate client invoices. Freelancers access via their dashboard CTA and can only see their own invoices.

Timesheet import
Select a month — pulls approved entries, groups by consultant × project, pre-fills line items.
Live preview
Split-screen — form on the left, PDF-style preview on the right, updating on every keystroke.
Mark as paid
One-click "✓ paid" on sent/overdue invoices. Optimistic UI update with Supabase sync.
Auto-numbering
Invoice numbers follow a configurable prefix + sequential counter. Thread-safe via atomic SQL.
StatusDescriptionActions
draftCreated but not sent — fully editableEdit, Send, Delete
sentMarked as sent to clientMark as paid
paidPayment received — paid_at date recordedView only
overduePast due date — computed automaticallyMark as paid
cancelledVoided invoiceView only
// roles

Roles & access

Roles are stored in auth.users.app_metadata.user_role — not in a user-editable table. Set at invite time, changeable by admin only.

RoleScopeKey permissions
consultantOwn data onlyView assignments, submit timesheets, request leave, view project list (read-only)
freelanceOwn data onlyAll consultant + create/view own invoices. No PTO/flex days. Dashboard shows invoice KPIs.
managerTeamView team, approve timesheets & leave, manage assignments, team-filtered planning views
adminCompanyFull CRUD, financial views, invoices, invite consultants, settings
super_adminAll tenantsCross-tenant access via OrgSwitcher, company management
Server-side guards via getPageAuth() enforce access on every page. Guards are doubled by Supabase RLS — no client-side bypass is possible.
// multitenancy

Multi-tenancy

Every table has a company_id column. Supabase RLS policies enforce tenant isolation at the database level.

Database-level isolation
RLS policies on every table. Even direct API calls cannot cross tenant boundaries.
Tenant badge
Each user sees their company name in the topbar. Super admin sees the OrgSwitcher dropdown.
AI agent isolation
The AI route uses the user's JWT — RLS applies to all agent queries.
Solo mode
companies.mode = 'solo' — simplified sidebar for independent freelancers. Same architecture, UI-only difference.
companies.modeTeam sectionLeave managementTimelineFinance
teamVisibleVisibleVisibleFull (admin/manager)
soloHiddenHiddenHiddenFull (self only)