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 →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.
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 →".
| Role | What they see |
|---|
| consultant | Own assignments, own leave balance, CRA week with submit CTA, personal occupancy |
| freelance | Same as consultant + invoice KPI (draft/sent/paid count) and "new invoice →" CTA |
| manager | Team occupancy, pending validations with approve CTAs, team calendar with leave events |
| admin | Full KPIs, financial summary, all pending actions, calendar with holidays + deadlines |
| super_admin | Cross-tenant view via OrgSwitcher (all companies) |
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.
| Field | Employee | Freelance |
|---|
| Daily cost basis | Salary × (1 + charges%) ÷ days/yr | Billed Rate (or per-assignment override) |
| Paid Leave / Flex Days | ✓ tracked | — not applicable |
| Leave requests | Paid Leave, Flex Days, unpaid, auth. absence | Unpaid, auth. absence only |
| Profitability margin | Revenue − fully-loaded cost | Revenue − 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 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.
| Status | Description | Visible in financials |
|---|
| draft | Project created, not yet active. No assignments. | No |
| active | Ongoing — included in occupancy and financial views. | Yes |
| on_hold | Paused — consultants retained but not counted as assigned. | No |
| completed | Closed — historical data preserved. | No |
| archived | Hidden 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.
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.
| Role | Can enter | Can submit | Can approve |
|---|
| consultant | ✓ own | ✓ own | — |
| manager | ✓ team | ✓ team | ✓ team |
| admin | ✓ all | ✓ all | ✓ all |
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.
| Type | Available to | Duration |
|---|
| Paid leave | Employee only | Custom — calculated in working days |
| Flex days | Employee only | Custom — from flex days balance |
| Unpaid leave | All | Custom |
| Authorised absence | All | Fixed by legal motif (bereavement, marriage…) |
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.
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)
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.
| Status | Description | Actions |
|---|
| draft | Created but not sent — fully editable | Edit, Send, Delete |
| sent | Marked as sent to client | Mark as paid |
| paid | Payment received — paid_at date recorded | View only |
| overdue | Past due date — computed automatically | Mark as paid |
| cancelled | Voided invoice | View only |
Roles are stored in auth.users.app_metadata.user_role — not in a user-editable table. Set at invite time, changeable by admin only.
| Role | Scope | Key permissions |
|---|
| consultant | Own data only | View assignments, submit timesheets, request leave, view project list (read-only) |
| freelance | Own data only | All consultant + create/view own invoices. No PTO/flex days. Dashboard shows invoice KPIs. |
| manager | Team | View team, approve timesheets & leave, manage assignments, team-filtered planning views |
| admin | Company | Full CRUD, financial views, invoices, invite consultants, settings |
| super_admin | All tenants | Cross-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.
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.mode | Team section | Leave management | Timeline | Finance |
|---|
| team | Visible | Visible | Visible | Full (admin/manager) |
| solo | Hidden | Hidden | Hidden | Full (self only) |