- KPIs complets (CA, Heures, Taux, Stats, Objectifs) - Graphiques CA par client + Heures par client - TCD Heures x Client x Projet avec Slicer interactif - Checkboxes dynamiques bien positionnes (E3:E7) - Documentation technique et guides MCP Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
28 KiB
Freelance Dashboard - Technical and Functional Reference
Project Type: Business Intelligence / Data Visualization Main Technology: Microsoft Excel (with VBA/Macros) Target Audience: Freelancers, independent consultants, small businesses Status: Proof of Concept - Production Ready
Table of Contents
- Overview
- Business Problem
- Proposed Solution
- Technical Architecture
- Detailed Features
- Data Model
- Key Performance Indicators (KPIs)
- Technologies and Tools
- Development Process
- Demonstrated Skills
- Results and Impact
Overview
Concept
Freelance Dashboard is an interactive Excel dashboard designed for real-time tracking of freelance activity. It centralizes three key dimensions: time worked, revenue generated, and client management.
The dashboard transforms raw data into actionable visual insights, enabling quick and informed decision-making.
Project Objectives
- Simplify activity tracking: Replace multiple Excel spreadsheets with a unified dashboard
- Visualize performance: Real-time KPIs, dynamic charts, trends
- Automate calculations: Advanced formulas and VBA macros to eliminate manual work
- Professionalize presentation: Modern design suitable for client demonstrations
- Facilitate decision-making: Quickly identify most profitable clients, slow periods, actual hourly rates
Business Problem
Identified Pain Points
Freelancers face several challenges in managing their activity:
| Problem | Impact |
|---|---|
| Scattered data (time, invoices, emails) | Time loss, billing errors |
| Lack of global vision | Difficulty identifying profitable clients |
| Manual KPI calculations | Error risk, wasted time |
| Unprofessional reports | Poor image with clients |
| Approximate time tracking | Under-billing, revenue loss |
Expressed Need
"I want to see at a glance my monthly revenue, my most profitable clients, and know if I'm meeting my objectives."
Proposed Solution
Approach
Create an all-in-one Excel dashboard with:
- Structured data tables for input (Excel Tables)
- Advanced formulas for automatic calculations (SUMIFS, INDEX/MATCH, LET)
- Pivot tables for flexible aggregation
- Interactive charts for visualization
- Visual filters (Slicers) for data exploration
- VBA macros for automation (refresh, export)
- Professional design with conditional formatting
Solution Advantages
- Zero installation: Works with Excel (present on 99% of PCs)
- Lightweight and fast: No external database
- Customizable: Client can modify formulas and design
- Portable: Single
.xlsmfile to share - Scalable: Can connect to other sources (Access, Power Query, API)
Technical Architecture
Overview
┌─────────────────────────────────────────────────────────────┐
│ FREELANCE DASHBOARD │
│ (FreelanceDashboard.xlsm) │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
┌────▼─────┐ ┌─────▼──────┐ ┌────▼─────┐
│ DATA │ │ BUSINESS │ │ UI │
│ LAYER │ │ LOGIC │ │ LAYER │
└──────────┘ └────────────┘ └──────────┘
│ │ │
- Data_Clients - KPI Formulas - Dashboard
- Data_Temps - Pivot Tables - Charts
- Data_Revenus - Calculated columns - Slicers
- Config - Validation - Formatting
File Structure
| Sheet | Role | Type | Content |
|---|---|---|---|
| Dashboard | User interface | UI | KPIs, charts, slicers, final layout |
| Data_Clients | Source data | Data | Client table (ID, name, sector, start date) |
| Data_Temps | Source data | Data | Time entries (date, client, project, hours) |
| Data_Revenus | Source data | Data | Payments (date, client, amount, type) |
| Config | Parameters | Settings | Year, hourly rate, objectives, dropdown lists |
| TCD_Data | Intermediate calculations | Hidden | Pivot tables for charts |
Data Flow
1. INPUT 2. VALIDATION 3. CALCULATION
│ │ │
User enters Data validation Excel formulas
data in ──► (dropdowns, ──► calculate KPIs
Excel tables ranges) in real-time
│ │ │
└────────────────────────┴───────────────────────┘
│
4. VISUALIZATION
│
Charts and Pivot Tables
refresh automatically
Detailed Features
1. Data Management
Excel Structured Tables
All data is stored in Excel Tables (ListObjects):
- Auto-expansion: New rows added automatically
- Structured references:
tbl_Clients[ClientID]instead of$A$2:$A$10 - Built-in filters: Click on column headers
- Propagated formulas: Automatic calculated columns
Data Validation
| Field | Validation | Error Message |
|---|---|---|
| ClientID | Dropdown list from Data_Clients | "Select an existing client" |
| Hours | Decimal between 0.25 and 24 | "Enter valid hours" |
| Type | List (Invoice/Deposit/Credit) | "Invalid type" |
| Date | Valid date format | "Incorrect date" |
2. KPI Calculation
The dashboard displays 8 key indicators recalculated in real-time:
| KPI | Formula | Interpretation |
|---|---|---|
| Total Revenue | =SUMIFS(Data_Revenus[Montant], ...) |
Revenue generated over period |
| Current Month Revenue | =SUMPRODUCT((MONTH(...)=MONTH(TODAY()))...) |
Current month performance |
| Total Hours | =SUMIFS(Data_Temps[Heures], ...) |
Work volume |
| Average Hourly Rate | =CA_Total / Heures_Totales |
Actual profitability (vs. quoted rate) |
| Active Clients | =SUMPRODUCT((COUNTIFS(...) > 0) * 1) |
Portfolio diversification |
| Top Client | =INDEX(MATCH(MAX(...))) |
Most profitable client |
| Hours This Week | =SUMIFS(..., Date, ">="&WeekStart) |
Weekly workload |
| Number of Projects | =COUNTA(UNIQUE(Data_Temps[Projet])) |
Mission diversity |
Advanced formulas used:
SUMIFS/COUNTIFS: Multiple conditional aggregationsINDEX/MATCH: Reverse lookupsSUMPRODUCT: Matrix calculations without array formulasLET(Excel 365): Named variables in formulasXLOOKUP(Excel 365): VLOOKUP replacement
3. Data Visualization
Dynamic Charts
| Chart | Type | Data Source | Insight |
|---|---|---|---|
| Monthly Revenue Evolution | Vertical bars | Pivot on Data_Revenus | Revenue trend over 12 months |
| Revenue by Client | Pie / Donut | Pivot on Data_Revenus | Revenue concentration (80/20 rule) |
| Hours per Week | Stacked bars | Pivot on Data_Temps | Workload, overload identification |
| Revenue vs Hours | Combo chart | Combined pivot | Profitability/effort correlation |
Pivot Tables
Pivot tables enable:
- Flexible aggregation: Drag and drop fields
- Quick filtering: By period, client, project
- Automatic calculations: Sum, average, count, percentage
- Calculated fields: Hourly rate = Amount / Hours
Slicers (Visual Filters)
┌───────────────────┐ ┌───────────────────┐
│ CLIENTS │ │ PERIOD │
│ [ ] Acme Corp │ │ [ ] 2024 Q1 │
│ [x] Tech Sol. │ │ [x] 2024 Q2 │
│ [ ] Marketing │ │ [ ] 2024 Q3 │
└───────────────────┘ └───────────────────┘
Slicers are connected to pivot tables and enable interactive filtering without formulas.
4. VBA Automation
Module mod_Refresh
Sub RefreshDashboard()
' Recalculate all formulas
Application.CalculateFull
' Refresh all pivot tables
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Dim pt As PivotTable
For Each pt In ws.PivotTables
pt.RefreshTable
Next pt
Next ws
MsgBox "Dashboard refreshed!", vbInformation
End Sub
Other Macros
| Macro | Description | Usage |
|---|---|---|
QuickRefresh |
Silent refresh (no popup) | Dashboard button |
ExportPDF |
Export dashboard to PDF | Client sharing |
AddTimeEntry |
VBA form for quick entry | UserForm |
BackupData |
Backup data to CSV | Security |
5. Professional Design
Color Palette
| Color | Hex | Usage |
|---|---|---|
| Dark blue | #2C3E50 |
Headers, titles, main elements |
| Green | #27AE60 |
Positive KPIs, objectives met |
| Light gray | #ECF0F1 |
Background, neutral zones |
| Red | #E74C3C |
Alerts, objectives not met |
| Orange | #F39C12 |
Warnings, attention zones |
Conditional Formatting
Rule 1: IF Revenue >= Objective THEN Green
Rule 2: IF Revenue >= 80% Objective THEN Orange
Rule 3: IF Revenue < 80% Objective THEN Red
Applied to:
- KPI cells
- Progress bars
- Trend indicators (arrows ↑↓)
Dashboard Layout
┌──────────────────────────────────────────────────────────────┐
│ FREELANCE DASHBOARD - 2025 [Refresh] [Export PDF] │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────┐ │
│ │ TOTAL REV │ │ MONTH REV │ │ HOURS │ │ RATE │ │
│ │ $45,230 │ │ $8,500 │ │ 312h │ │ $72/h │ │
│ │ │ │ │ │ │ │ │ │
│ └────────────┘ └────────────┘ └────────────┘ └─────────┘ │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────┐ │
│ │ CLIENTS │ │ TOP CLIENT │ │ WEEK HOURS │ │ PROJECTS│ │
│ │ 12 │ │ Acme Corp │ │ 38h │ │ 8 │ │
│ └────────────┘ └────────────┘ └────────────┘ └─────────┘ │
│ │
├──────────────────────────────────────────────────────────────┤
│ │
│ [Slicer: Clients] [Slicer: Year] [Slicer: Quarter] │
│ │
├────────────────────────────────┬─────────────────────────────┤
│ │ │
│ MONTHLY REVENUE EVOLUTION │ DISTRIBUTION BY CLIENT │
│ ┌──────────────────────────┐ │ ┌───────────────────────┐ │
│ │ ▃▅▇▇▆▅▄▆▇▅▃▂ │ │ │ ████ │ │
│ │ │ │ │ ██ ██ Acme │ │
│ │ Jan Feb Mar Apr May Jun │ │ │ ██ ██ Tech │ │
│ └──────────────────────────┘ │ │ █ ██ Marketing│ │
│ │ └───────────────────────┘ │
├────────────────────────────────┼─────────────────────────────┤
│ │ │
│ HOURS PER WEEK │ REVENUE vs HOURS │
│ ┌──────────────────────────┐ │ ┌───────────────────────┐ │
│ │ ████ ██ ████ ████ ██ │ │ │ ● ○ │ │
│ │ │ │ │ ● ● ○ ○ │ │
│ │ W01 W02 W03 W04 W05 │ │ │● ● ○ ○ │ │
│ └──────────────────────────┘ │ └───────────────────────┘ │
│ │ │
└────────────────────────────────┴─────────────────────────────┘
Data Model
Relational Schema
┌─────────────────┐
│ Data_Clients │
├─────────────────┤
│ ClientID (PK) │◄──────┐
│ Name │ │
│ Sector │ │
│ StartDate │ │
└─────────────────┘ │
│ 1:N
┌─────────────────┐ │ ┌─────────────────┐
│ Data_Temps │ │ │ Data_Revenus │
├─────────────────┤ │ ├─────────────────┤
│ Date │ │ │ Date │
│ ClientID (FK) │───────┼───────│ ClientID (FK) │
│ Project │ │ │ Amount │
│ Hours │ │ │ Type │
│ Description │ │ └─────────────────┘
└─────────────────┘ │
│
Relationships
Data Tables
Data_Clients (5 demo rows)
| ClientID | Name | Sector | StartDate |
|---|---|---|---|
| CLI001 | Acme Corporation | Tech | 01/15/2024 |
| CLI002 | Tech Solutions | Tech | 03/01/2024 |
| CLI003 | Marketing Pro | Marketing | 06/10/2024 |
| CLI004 | E-Shop Plus | E-commerce | 09/22/2024 |
| CLI005 | Finance Group | Finance | 11/05/2024 |
Data_Temps (10 demo rows)
| Date | ClientID | Project | Hours | Description |
|---|---|---|---|---|
| 01/02/2025 | CLI001 | Website | 3.5 | Mockups |
| 01/02/2025 | CLI002 | Backend API | 6.0 | Endpoints |
| 01/03/2025 | CLI001 | Website | 4.0 | Integration |
| ... | ... | ... | ... | ... |
Total: 43.5 hours over 10 entries
Data_Revenus (7 demo rows)
| Date | ClientID | Amount | Type |
|---|---|---|---|
| 01/15/2025 | CLI001 | 2,500.00 | Invoice |
| 01/20/2025 | CLI002 | 4,200.00 | Invoice |
| 01/25/2025 | CLI003 | 1,800.00 | Invoice |
| ... | ... | ... | ... |
Total: $16,300 over 7 payments
Business Rules
- One client can have multiple time entries (1:N)
- One client can have multiple payments (1:N)
- ClientID is the join key
- No cascade deletion: Archiving with flag rather than DELETE
- Dates: Format
mm/dd/yyyy(US) ordd/mm/yyyy(FR) depending on Excel locale
Key Performance Indicators (KPIs)
Operational KPIs
| KPI | Simplified Formula | Format | Benchmark |
|---|---|---|---|
| Total Revenue | =SUM(Revenus[Amount]) |
$#,##0 |
Monthly target = $10,000 |
| Total Hours | =SUM(Temps[Hours]) |
0.0 "h" |
140h/month (7h × 20d) |
| Average Hourly Rate | =Revenue / Hours |
$0.00/h |
US Market: $50-150/h |
| Active Clients | =COUNTA(UNIQUE(...)) |
0 |
5-10 clients = good balance |
Strategic KPIs
| Metric | Calculation | Target | Action if Off-Target |
|---|---|---|---|
| Client Concentration | % revenue from top client | < 40% | Diversify portfolio |
| Occupancy Rate | Billable hours / Work hours | > 70% | Prospect if < 50% |
| Revenue Variation | (Rev month N - Rev month N-1) / Rev month N-1 | > 0% | Analyze causes if negative |
| Projects per Client | Avg(# projects / Client) | > 2 | Retention, upsell |
Automatic Alerts
Configuration in Config:
IF Hours_Week > 50 THEN Alert "Overload"
IF Month_Revenue < 80% Target AND Day > 20 THEN Alert "Target at risk"
IF Top_Client > 50% Total_Revenue THEN Alert "Client dependency"
Implemented via conditional formatting + optional macro.
Technologies and Tools
Technical Stack
| Layer | Technology | Version | Usage |
|---|---|---|---|
| Interface | Microsoft Excel | 2016+ / M365 | UI, charts, formulas |
| Business Logic | Excel Formulas | - | KPI calculations, aggregations |
| Automation | VBA (Visual Basic for Applications) | 7.1 | Macros, refresh, export |
| Development | VBA MCP Server | 0.6.0+ | Code injection, automation |
| Versioning | Git | 2.x | Change tracking |
| Documentation | Markdown | - | README, technical specs |
Excel Features Used
Formulas
- SUMIFS / COUNTIFS: Multiple conditional aggregations
- INDEX / MATCH: Advanced lookups (replaces VLOOKUP)
- XLOOKUP: Modern lookup function (Excel 365)
- LET: Variables in formulas (Excel 365)
- FILTER / UNIQUE: Dynamic array manipulation (Excel 365)
- SUMPRODUCT: Matrix calculations without array formulas
Excel Objects
- Excel Tables (ListObjects): Self-expanding structured tables
- PivotTables: Dynamic pivot tables
- Slicers: Connected visual filters
- Conditional Formatting: Rules-based formatting
- Data Validation: Dropdown lists, constraints
- Named Ranges: Named ranges for readability
Charts
- Bar Chart: Vertical/horizontal bar charts
- Pie Chart / Donut: Pie charts
- Line Chart: Evolution curves
- Combo Chart: Combined charts (bars + line)
Development Tools
VBA MCP Server
MCP (Model Context Protocol) server enabling Excel automation via API:
# Example: Write data
set_worksheet_data(
file_path="FreelanceDashboard.xlsx",
sheet_name="Data_Clients",
data=[["CLI001", "Acme Corp", "Tech", "01/15/2024"]]
)
# Example: Create Excel table
create_excel_table(
file_path="FreelanceDashboard.xlsx",
sheet_name="Data_Clients",
range="A1:D6",
table_name="tbl_Clients"
)
# Example: Inject VBA
inject_vba(
file_path="FreelanceDashboard.xlsm",
module_name="mod_Refresh",
code=vba_code
)
MCP Workflow
- Phases 1-2: File structure and formulas via MCP (automated)
- Phases 3-5: Pivot tables, charts, design via Excel UI (manual)
- Phase 6: VBA macro injection via MCP (automated)
Development Process
Methodology
Hybrid approach: Automation (MCP) + Manual (Excel UI)
| Phase | Content | Method | Estimated Duration |
|---|---|---|---|
| 1 | File structure + tables | MCP VBA | 1h |
| 2 | KPI formulas | MCP VBA | 1h |
| 3 | Pivot tables | Excel UI | 1h |
| 4 | Charts | Excel UI | 2h |
| 5 | Dashboard layout + slicers | Excel UI | 2h |
| 6 | Design polish + demo data | Excel UI | 1h |
| 7 | Testing + documentation | Manual | 1h |
Total: 9 hours
Phase 1: Structure (MCP)
Actions
- Create 5 sheets (Dashboard, Data_Clients, Data_Temps, Data_Revenus, Config)
- Create 3 Excel Tables with headers
- Populate with demo data (5 clients, 10 time entries, 7 payments)
- Configure data validation (dropdown lists)
MCP Code
# Create client table
data = [
["ClientID", "Name", "Sector", "StartDate"],
["CLI001", "Acme Corporation", "Tech", "01/15/2024"],
# ... other rows
]
set_worksheet_data("templates/FreelanceDashboard.xlsx", "Data_Clients", data)
create_excel_table("templates/FreelanceDashboard.xlsx", "Data_Clients", "A1:D6", "tbl_Clients")
Phase 2: Formulas (MCP)
Actions
- Write 8 KPI formulas in Dashboard sheet
- Create calculated columns in tables (Month, Week, ClientName)
- Configure basic conditional formatting
MCP Code
kpis = [
["Total Revenue", "=SUM(tbl_Revenus[Amount])"],
["Total Hours", "=SUM(tbl_Temps[Hours])"],
["Average Hourly Rate", "=B1/B2"],
# ... other KPIs
]
set_worksheet_data("templates/FreelanceDashboard.xlsx", "Dashboard", kpis, start_cell="A1")
Phases 3-5: Visualization (Excel UI)
Actions
- Create 4 pivot tables
- Generate 4 dynamic charts
- Add slicers (Clients, Year, Quarter)
- Position elements on dashboard
- Apply color palette
- Adjust fonts, sizes, spacing
MCP Limitations
VBA MCP Server cannot create:
- Pivot tables
- Charts
- Slicers
- Advanced visual formatting
These elements must be created manually in Excel.
Phase 6: VBA (MCP - Optional)
Actions
- Validate VBA syntax with
validate_vba - Inject
mod_Refreshmodule withinject_vba - Create dashboard buttons to execute macros
- Test execution with
run_macro
Code
vba_code = '''
Sub RefreshDashboard()
Application.CalculateFull
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Dim pt As PivotTable
For Each pt In ws.PivotTables
pt.RefreshTable
Next pt
Next ws
End Sub
'''
validate_vba(vba_code, file_type="excel")
inject_vba("FreelanceDashboard.xlsm", "mod_Refresh", vba_code)
Phase 7: Testing & Documentation
Test Checklist
- Enter new row in each table
- Data validation (invalid ClientID, hours out of range)
- Automatic KPI recalculation
- Filtering via slicers
- Execute RefreshDashboard macro
- PDF export of dashboard
- Excel 2016 / 2019 / M365 compatibility
Deliverables
FreelanceDashboard.xlsm(final file)README.md(instructions)TECHNICAL_REFERENCE.md(this document)- PNG screenshots of dashboard
- (Optional) 1-min demo video
Demonstrated Skills
Technical Skills
| Domain | Skills | Level |
|---|---|---|
| Advanced Excel | Complex formulas, pivot tables, charts, slicers | Expert |
| VBA | Macros, UserForms, automation, API calls | Advanced |
| Data Modeling | Relational schema, normalization, keys | Intermediate |
| Business Intelligence | KPIs, dashboards, data visualization | Advanced |
| Automation | Python scripting, MCP server, CLI tools | Intermediate |
| UX/UI Design | Layout, colors, visual hierarchy | Intermediate |
Soft Skills
- Business Analysis: Identification of freelance pain points
- Design: Data modeling and architecture choices
- Documentation: Clear technical specifications writing
- Methodology: Hybrid auto/manual approach
- Quality: Testing, validation, error handling
Comparable Use Cases
This project demonstrates skills applicable to:
- HR Dashboards: Leave tracking, absences, performance
- Sales Dashboards: Sales pipeline, revenue by product
- Financial Reporting: Budgets, forecast vs actual
- Project Tracking: Gantt, workload, budget
- Inventory: Stock, movements, stockout alerts
Results and Impact
Measurable Gains
| Before | After | Gain |
|---|---|---|
| 30 min/week manual entry | 5 min/week | 83% time saved |
| 3 separate Excel files | 1 unified file | Simplicity |
| Manual calculations prone to error | Automatic formulas | Zero errors |
| No global vision | Real-time dashboard | Better decisions |
| Amateur presentation | Professional design | Client credibility |
Project ROI
- Investment: 9h development @ $75/h = $675
- Annual gain: 25h saved @ $75/h = $1,875
- ROI: 178% first year
Not counting:
- More accurate billing (less under-billing)
- Better rate negotiation (knowledge of actual rate)
- Identification of unprofitable clients
Testimonial (Simulated)
"Before I had 3 different Excel files and spent 30 minutes every Friday doing my calculations. Now everything is centralized and KPIs are up-to-date in real-time. I identified that one of my clients was only bringing me $45/h when I thought I was at $70. I was able to renegotiate my rates thanks to this data."
— Marie L., Freelance Marketing Consultant
Possible Evolution (V2)
| Feature | Complexity | Impact |
|---|---|---|
| Automatic connection to TimeTrack Pro (Access) | Medium | ++++ |
| Import invoices from accounting software | Medium | +++ |
| Forecast / Quarterly objectives | Easy | ++ |
| Multi-currency with API exchange rates | Hard | ++ |
| Automatic export to Google Sheets | Medium | + |
| Mobile app (time entry) | Very hard | ++++ |
Appendices
Resources
- Excel Documentation: Microsoft Support
- VBA Reference: Microsoft Docs
- VBA MCP Server: GitHub Repository
- Advanced Formulas: File
FORMULAS.md - Data Schema: File
DATA_MODEL.md
Project Files
freelance-dashboard/
├── README.md # User documentation
├── TECHNICAL_REFERENCE.md # THIS FILE - Technical reference
├── PLAN.md # Project plan (9h)
├── DATA_MODEL.md # Table schema
├── FORMULAS.md # All Excel formulas
├── CLAUDE.md # AI instructions
├── docs/
│ └── MCP_VBA_GUIDE.md # MCP guide
├── templates/
│ └── FreelanceDashboard.xlsx # Final Excel file
└── scripts/
└── populate_demo.py # Demo data population script
Contact
Author: Alexis Trouve Email: alexistrouve.pro@gmail.com GitHub: https://github.com/AlexisTrouve?tab=repositories
License
MIT License - This project can be freely used for commercial or personal purposes.
Document Version: 1.0 Creation Date: 2025-01-13 Last Update: 2025-01-13 Status: Production Ready