Moves POC-files into PlanTempus

This commit is contained in:
Janus C. H. Knudsen 2026-02-03 19:12:45 +01:00
parent 51f3b92d69
commit ea3ecdfb68
91 changed files with 59868 additions and 0 deletions

View file

@ -0,0 +1,88 @@
{
"gridSettings": {
"hourHeight": 80,
"dayStartHour": 6,
"dayEndHour": 22,
"workStartHour": 8,
"workEndHour": 17,
"snapInterval": 15,
"gridStartThresholdMinutes": 30,
"showCurrentTime": true,
"showWorkHours": true,
"fitToWidth": false,
"scrollToHour": 8
},
"dateViewSettings": {
"period": "week",
"weekDays": 7,
"firstDayOfWeek": 1,
"showAllDay": true
},
"timeFormatConfig": {
"timezone": "Europe/Copenhagen",
"use24HourFormat": true,
"locale": "da-DK",
"dateFormat": "technical",
"showSeconds": false
},
"workWeekPresets": {
"standard": {
"id": "standard",
"workDays": [1, 2, 3, 4, 5],
"totalDays": 5,
"firstWorkDay": 1
},
"compressed": {
"id": "compressed",
"workDays": [1, 2, 3, 4],
"totalDays": 4,
"firstWorkDay": 1
},
"midweek": {
"id": "midweek",
"workDays": [3, 4, 5],
"totalDays": 3,
"firstWorkDay": 3
},
"weekend": {
"id": "weekend",
"workDays": [6, 7],
"totalDays": 2,
"firstWorkDay": 6
},
"fullweek": {
"id": "fullweek",
"workDays": [1, 2, 3, 4, 5, 6, 7],
"totalDays": 7,
"firstWorkDay": 1
}
},
"currentWorkWeek": "standard",
"currentView": "week",
"scrollbar": {
"width": 16,
"color": "#666",
"trackColor": "#f0f0f0",
"hoverColor": "#b53f7aff",
"borderRadius": 6
},
"interaction": {
"allowDrag": true,
"allowResize": true,
"allowCreate": true
},
"api": {
"endpoint": "/api/events",
"dateFormat": "YYYY-MM-DD",
"timeFormat": "HH:mm"
},
"features": {
"enableSearch": true,
"enableTouch": true
},
"eventDefaults": {
"defaultEventDuration": 60,
"minEventDuration": 15,
"maxEventDuration": 480
}
}

View file

@ -0,0 +1,67 @@
{
"categories": ["Uge 40", "Uge 41", "Uge 42", "Uge 43", "Uge 44", "Uge 45", "Uge 46", "Uge 47", "Uge 48", "Uge 49", "Uge 50", "Uge 51", "Uge 52", "Uge 1", "Uge 2", "Uge 3", "Uge 4", "Uge 5", "Uge 6", "Uge 7", "Uge 8", "Uge 9", "Uge 10", "Uge 11", "Uge 12"],
"nowCategory": "Uge 52",
"forecastStartCategory": "Uge 1",
"actual": {
"revenue": [
{ "x": "Uge 40", "y": 38500 },
{ "x": "Uge 41", "y": 42000 },
{ "x": "Uge 42", "y": 35200 },
{ "x": "Uge 43", "y": 44800 },
{ "x": "Uge 44", "y": 41500 },
{ "x": "Uge 45", "y": 39200 },
{ "x": "Uge 46", "y": 46100 },
{ "x": "Uge 47", "y": 43800 },
{ "x": "Uge 48", "y": 40500 },
{ "x": "Uge 49", "y": 45200 },
{ "x": "Uge 50", "y": 42800 },
{ "x": "Uge 51", "y": 44500 },
{ "x": "Uge 52", "y": 28450 }
],
"utilization": [
{ "x": "Uge 40", "y": 82 },
{ "x": "Uge 41", "y": 88 },
{ "x": "Uge 42", "y": 75 },
{ "x": "Uge 43", "y": 91 },
{ "x": "Uge 44", "y": 85 },
{ "x": "Uge 45", "y": 80 },
{ "x": "Uge 46", "y": 94 },
{ "x": "Uge 47", "y": 89 },
{ "x": "Uge 48", "y": 83 },
{ "x": "Uge 49", "y": 92 },
{ "x": "Uge 50", "y": 87 },
{ "x": "Uge 51", "y": 90 },
{ "x": "Uge 52", "y": 84 }
]
},
"forecast": {
"revenue": [
{ "x": "Uge 1", "y": 0 },
{ "x": "Uge 2", "y": 32500 },
{ "x": "Uge 3", "y": 28800 },
{ "x": "Uge 4", "y": 22400 },
{ "x": "Uge 5", "y": 15200 },
{ "x": "Uge 6", "y": 9800 },
{ "x": "Uge 7", "y": 6500 },
{ "x": "Uge 8", "y": 4200 },
{ "x": "Uge 9", "y": 2800 },
{ "x": "Uge 10", "y": 1500 },
{ "x": "Uge 11", "y": 800 },
{ "x": "Uge 12", "y": 0 }
],
"utilization": [
{ "x": "Uge 1", "y": 0 },
{ "x": "Uge 2", "y": 74 },
{ "x": "Uge 3", "y": 58 },
{ "x": "Uge 4", "y": 39 },
{ "x": "Uge 5", "y": 21 },
{ "x": "Uge 6", "y": 11 },
{ "x": "Uge 7", "y": 8 },
{ "x": "Uge 8", "y": 5 },
{ "x": "Uge 9", "y": 3 },
{ "x": "Uge 10", "y": 2 },
{ "x": "Uge 11", "y": 1 },
{ "x": "Uge 12", "y": 0 }
]
}
}

View file

@ -0,0 +1,125 @@
{
"Klip dame, herre og børn": [
{ "name": "Dameklip", "duration": 60, "price": 725 },
{ "name": "Dameklip uden snak", "duration": 60, "price": 725 },
{ "name": "Dameklip spidser mellemlangt og langt hår", "duration": 40, "price": 575 },
{ "name": "Dameklip Luksus ekstra glans og pleje", "duration": 75, "price": 925 },
{ "name": "Herreklip", "duration": 60, "price": 645 },
{ "name": "Herreklip uden snak", "duration": 60, "price": 645 },
{ "name": "Skin fade", "duration": 60, "price": 645 },
{ "name": "Klip med maskine (herre klip)", "duration": 30, "price": 475 },
{ "name": "Børneklip 0-4 år", "duration": 45, "price": 475 },
{ "name": "Børneklip 4-8 år", "duration": 45, "price": 525 },
{ "name": "Touch up Dame", "duration": 10, "price": 0 },
{ "name": "Touch up Herre", "duration": 10, "price": 0 },
{ "name": "Pandehår helt nyt", "duration": 20, "price": 325 },
{ "name": "Konsultation uden behandling", "duration": 10, "price": 0 },
{ "name": "Herreklip", "duration": 60, "price": 550 },
{ "name": "Klip med maskine (herre klip)", "duration": 45, "price": 525 }
],
"Farvebehandlinger": [
{ "name": "Bundfarve almindelig udgroning maks 3 cm", "duration": 90, "price": 785 },
{ "name": "Helfarve kort hår", "duration": 105, "price": 950 },
{ "name": "Helfarve mellemlangt hår", "duration": 120, "price": 1450 },
{ "name": "Helfarve langt hår", "duration": 120, "price": 1550 },
{ "name": "Bundfarve/ Lysning", "duration": 105, "price": 975 },
{ "name": "Afblegning kort hår + gloss", "duration": 150, "price": 1895 }
],
"Striber/ Refleksbehandling": [
{ "name": "Striber kort hår", "duration": 120, "price": 1465 },
{ "name": "Striber mellemlangt hår", "duration": 150, "price": 1665 },
{ "name": "Striber langt hår", "duration": 180, "price": 1865 },
{ "name": "Striber på toppen/ overhår", "duration": 90, "price": 1065 },
{ "name": "Striber babylights tæt lysning mellemlangt hår", "duration": 180, "price": 2650 },
{ "name": "Striber babylights tæt lysning langt hår", "duration": 180, "price": 2850 },
{ "name": "Striber babylights tæt lysning på toppen", "duration": 120, "price": 1650 },
{ "name": "AirTouch skulderlangt hår", "duration": 210, "price": 3250 },
{ "name": "AirTouch langt hår", "duration": 240, "price": 3850 }
],
"Hårvask med styling eller uden styling": [
{ "name": "Hårvask uden styling", "duration": 30, "price": 265 },
{ "name": "Hårvask med styling (kun føn)", "duration": 40, "price": 450 },
{ "name": "Vask + Styling med varme glatning/krøller (mellemlangt/langt)", "duration": 60, "price": 650 }
],
"Henna naturlig hårfarver": [
{ "name": "Henna kort hår", "duration": 90, "price": 965 },
{ "name": "Henna mellemlangt/langt hår", "duration": 90, "price": 1265 },
{ "name": "Henna bundfarve", "duration": 90, "price": 750 }
],
"Kurbehandling": [
{ "name": "Olaplex Stand alone", "duration": 60, "price": 550 },
{ "name": "Kurbehandling fugt/protein", "duration": 40, "price": 365 }
],
"Bryn og vipper": [
{ "name": "Farvning vipper & bryn", "duration": 30, "price": 345 },
{ "name": "Farvning vipper", "duration": 20, "price": 185 },
{ "name": "Farvning og retning af bryn", "duration": 20, "price": 185 },
{ "name": "Retning af bryn", "duration": 10, "price": 100 }
],
"Balayage": [
{ "name": "Balayage maks til skulderen", "duration": 150, "price": 1850 },
{ "name": "Balayage maks skulder + gloss/toning", "duration": 180, "price": 2250 },
{ "name": "Balayage langt hår", "duration": 150, "price": 2150 },
{ "name": "Balayage langt hår + gloss/toning", "duration": 180, "price": 2550 }
],
"Skæg": [
{ "name": "Skægtrim", "duration": 20, "price": 300 }
],
"Gloss": [
{ "name": "Gloss ekstra langt/tykt hår", "duration": 75, "price": 900 },
{ "name": "Glossing kort hår", "duration": 60, "price": 685 },
{ "name": "Glossing mellemlangt/ langt hår", "duration": 60, "price": 745 },
{ "name": "Glossing mænd", "duration": 40, "price": 350 },
{ "name": "Gloss ifb. anden farvebehandling", "duration": 20, "price": 450 },
{ "name": "Gloss ifb. anden farvebehandling", "duration": 30, "price": 450 }
],
"Håropsætning": [
{ "name": "Håropsætning kort hår", "duration": 60, "price": 850 },
{ "name": "Håropsætning langt hår", "duration": 60, "price": 1450 },
{ "name": "Håropsætning Brud/brudepiger/Galla/Oscar", "duration": 90, "price": 1599 },
{ "name": "Make-up Special Brud/Galla mm", "duration": 90, "price": 3000 }
],
"Modeller": [
{ "name": "Dameklip Model", "duration": 60, "price": 0 },
{ "name": "Herreklip Model", "duration": 60, "price": 0 },
{ "name": "Balayage Model", "duration": 240, "price": 0 },
{ "name": "Striber Model", "duration": 180, "price": 0 },
{ "name": "Bryn & Vippe Model", "duration": 40, "price": 0 },
{ "name": "Bundfarve Model", "duration": 120, "price": 0 },
{ "name": "Gloss", "duration": 30, "price": 0 }
],
"Tristan farve modeller": [
{ "name": "Bundfarve med HP/HPF", "duration": 90, "price": 325 },
{ "name": "Striber Model", "duration": 240, "price": 400 }
],
"Uden kategori": [
{ "name": "P-afgift", "duration": 0, "price": -25 },
{ "name": "Børneklip 9-12 år", "duration": 60, "price": 450 }
],
"Tilvalg services": [
{ "name": "Touch up kur", "duration": 15, "price": 175 },
{ "name": "Root shading", "duration": 30, "price": 425 },
{ "name": "Styling med varme (efter behandling)", "duration": 60, "price": 475 },
{ "name": "Styling kort hår (efter farve)", "duration": 20, "price": 175 },
{ "name": "Olaplex efter afblegning", "duration": 10, "price": 325 },
{ "name": "Let afrensning af gloss/klor/kemi", "duration": 20, "price": 220 },
{ "name": "Forpigmentering", "duration": 20, "price": 300 },
{ "name": "Knække bund ifb. farvebehandling", "duration": 20, "price": 400 },
{ "name": "Olaplex i farve", "duration": 10, "price": 230 },
{ "name": "Metal DX intens kur redken gloss", "duration": 20, "price": 225 }
]
}

View file

@ -0,0 +1,514 @@
[
{
"id": "BOOK001",
"customerId": "CUST001",
"status": "arrived",
"createdAt": "2025-08-05T08:00:00Z",
"services": [
{
"serviceId": "SRV001",
"serviceName": "Klipning og styling",
"baseDuration": 60,
"basePrice": 500,
"customPrice": 500,
"resourceId": "EMP001"
}
],
"totalPrice": 500,
"notes": "Kunde ønsker lidt kortere"
},
{
"id": "BOOK002",
"customerId": "CUST002",
"status": "paid",
"createdAt": "2025-08-05T09:00:00Z",
"services": [
{
"serviceId": "SRV002",
"serviceName": "Hårvask",
"baseDuration": 30,
"basePrice": 100,
"customPrice": 100,
"resourceId": "STUDENT001"
},
{
"serviceId": "SRV003",
"serviceName": "Bundfarve",
"baseDuration": 90,
"basePrice": 800,
"customPrice": 800,
"resourceId": "EMP001"
}
],
"totalPrice": 900,
"notes": "Split booking: Elev laver hårvask, master laver farve"
},
{
"id": "BOOK003",
"customerId": "CUST003",
"status": "created",
"createdAt": "2025-08-05T07:00:00Z",
"services": [
{
"serviceId": "SRV004A",
"serviceName": "Bryllupsfrisure - Del 1",
"baseDuration": 60,
"basePrice": 750,
"customPrice": 750,
"resourceId": "EMP001"
},
{
"serviceId": "SRV004B",
"serviceName": "Bryllupsfrisure - Del 2",
"baseDuration": 60,
"basePrice": 750,
"customPrice": 750,
"resourceId": "EMP002"
}
],
"totalPrice": 1500,
"notes": "Equal-split: To master stylister arbejder sammen"
},
{
"id": "BOOK004",
"customerId": "CUST004",
"status": "arrived",
"createdAt": "2025-08-05T10:00:00Z",
"services": [
{
"serviceId": "SRV005",
"serviceName": "Herreklipning",
"baseDuration": 30,
"basePrice": 350,
"customPrice": 350,
"resourceId": "EMP003"
}
],
"totalPrice": 350
},
{
"id": "BOOK005",
"customerId": "CUST005",
"status": "paid",
"createdAt": "2025-08-05T11:00:00Z",
"services": [
{
"serviceId": "SRV006",
"serviceName": "Balayage langt hår",
"baseDuration": 120,
"basePrice": 1200,
"customPrice": 1200,
"resourceId": "EMP002"
}
],
"totalPrice": 1200,
"notes": "Kunde ønsker naturlig blond tone"
},
{
"id": "BOOK006",
"customerId": "CUST006",
"status": "created",
"createdAt": "2025-08-06T08:00:00Z",
"services": [
{
"serviceId": "SRV007",
"serviceName": "Permanent",
"baseDuration": 90,
"basePrice": 900,
"customPrice": 900,
"resourceId": "EMP004"
}
],
"totalPrice": 900
},
{
"id": "BOOK007",
"customerId": "CUST007",
"status": "arrived",
"createdAt": "2025-08-06T09:00:00Z",
"services": [
{
"serviceId": "SRV008",
"serviceName": "Highlights",
"baseDuration": 90,
"basePrice": 850,
"customPrice": 850,
"resourceId": "EMP001"
},
{
"serviceId": "SRV009",
"serviceName": "Styling",
"baseDuration": 30,
"basePrice": 200,
"customPrice": 200,
"resourceId": "EMP001"
}
],
"totalPrice": 1050,
"notes": "Highlights + styling samme stylist"
},
{
"id": "BOOK008",
"customerId": "CUST008",
"status": "paid",
"createdAt": "2025-08-06T10:00:00Z",
"services": [
{
"serviceId": "SRV010",
"serviceName": "Klipning",
"baseDuration": 45,
"basePrice": 450,
"customPrice": 450,
"resourceId": "EMP004"
}
],
"totalPrice": 450
},
{
"id": "BOOK009",
"customerId": "CUST001",
"status": "created",
"createdAt": "2025-08-07T08:00:00Z",
"services": [
{
"serviceId": "SRV011",
"serviceName": "Farve behandling",
"baseDuration": 120,
"basePrice": 950,
"customPrice": 950,
"resourceId": "EMP002"
}
],
"totalPrice": 950
},
{
"id": "BOOK010",
"customerId": "CUST002",
"status": "arrived",
"createdAt": "2025-08-07T09:00:00Z",
"services": [
{
"serviceId": "SRV012",
"serviceName": "Skæg trimning",
"baseDuration": 20,
"basePrice": 200,
"customPrice": 200,
"resourceId": "EMP003"
}
],
"totalPrice": 200
},
{
"id": "BOOK011",
"customerId": "CUST003",
"status": "paid",
"createdAt": "2025-08-07T10:00:00Z",
"services": [
{
"serviceId": "SRV002",
"serviceName": "Hårvask",
"baseDuration": 30,
"basePrice": 100,
"customPrice": 100,
"resourceId": "STUDENT002"
},
{
"serviceId": "SRV013",
"serviceName": "Ombré",
"baseDuration": 100,
"basePrice": 1100,
"customPrice": 1100,
"resourceId": "EMP002"
}
],
"totalPrice": 1200,
"notes": "Split booking: Student hårvask, master ombré"
},
{
"id": "BOOK012",
"customerId": "CUST004",
"status": "created",
"createdAt": "2025-08-08T08:00:00Z",
"services": [
{
"serviceId": "SRV014",
"serviceName": "Føntørring",
"baseDuration": 30,
"basePrice": 250,
"customPrice": 250,
"resourceId": "STUDENT001"
}
],
"totalPrice": 250
},
{
"id": "BOOK013",
"customerId": "CUST005",
"status": "arrived",
"createdAt": "2025-08-08T09:00:00Z",
"services": [
{
"serviceId": "SRV015",
"serviceName": "Opsætning",
"baseDuration": 60,
"basePrice": 700,
"customPrice": 700,
"resourceId": "EMP004"
}
],
"totalPrice": 700,
"notes": "Fest opsætning"
},
{
"id": "BOOK014",
"customerId": "CUST006",
"status": "created",
"createdAt": "2025-08-09T08:00:00Z",
"services": [
{
"serviceId": "SRV016A",
"serviceName": "Ekstensions - Del 1",
"baseDuration": 90,
"basePrice": 1250,
"customPrice": 1250,
"resourceId": "EMP001"
},
{
"serviceId": "SRV016B",
"serviceName": "Ekstensions - Del 2",
"baseDuration": 90,
"basePrice": 1250,
"customPrice": 1250,
"resourceId": "EMP004"
}
],
"totalPrice": 2500,
"notes": "Equal-split: To stylister arbejder sammen om extensions"
},
{
"id": "BOOK015",
"customerId": "CUST007",
"status": "noshow",
"createdAt": "2025-08-09T09:00:00Z",
"services": [
{
"serviceId": "SRV001",
"serviceName": "Klipning og styling",
"baseDuration": 60,
"basePrice": 500,
"customPrice": 500,
"resourceId": "EMP002"
}
],
"totalPrice": 500,
"notes": "Kunde mødte ikke op"
},
{
"id": "BOOK-NOV22-001",
"customerId": "CUST001",
"status": "arrived",
"createdAt": "2025-11-20T10:00:00Z",
"services": [
{ "serviceId": "SRV-WASH", "serviceName": "Hårvask", "baseDuration": 30, "basePrice": 100, "resourceId": "STUDENT001" },
{ "serviceId": "SRV-BAL", "serviceName": "Balayage", "baseDuration": 90, "basePrice": 1200, "resourceId": "EMP001" }
],
"totalPrice": 1300,
"notes": "Split: Elev vasker, Camilla farver"
},
{
"id": "BOOK-NOV22-002",
"customerId": "CUST002",
"status": "arrived",
"createdAt": "2025-11-20T11:00:00Z",
"services": [
{ "serviceId": "SRV-HERREKLIP", "serviceName": "Herreklipning", "baseDuration": 30, "basePrice": 350, "resourceId": "EMP003" }
],
"totalPrice": 350
},
{
"id": "BOOK-NOV22-003",
"customerId": "CUST003",
"status": "created",
"createdAt": "2025-11-20T12:00:00Z",
"services": [
{ "serviceId": "SRV-FARVE", "serviceName": "Farvning", "baseDuration": 120, "basePrice": 900, "resourceId": "EMP002" }
],
"totalPrice": 900
},
{
"id": "BOOK-NOV22-004",
"customerId": "CUST004",
"status": "arrived",
"createdAt": "2025-11-20T13:00:00Z",
"services": [
{ "serviceId": "SRV-KLIP", "serviceName": "Dameklipning", "baseDuration": 60, "basePrice": 450, "resourceId": "EMP004" }
],
"totalPrice": 450
},
{
"id": "BOOK-NOV22-005",
"customerId": "CUST005",
"status": "created",
"createdAt": "2025-11-20T14:00:00Z",
"services": [
{ "serviceId": "SRV-STYLE", "serviceName": "Styling", "baseDuration": 60, "basePrice": 400, "resourceId": "EMP001" }
],
"totalPrice": 400
},
{
"id": "BOOK-NOV23-001",
"customerId": "CUST006",
"status": "created",
"createdAt": "2025-11-21T09:00:00Z",
"services": [
{ "serviceId": "SRV-PERM", "serviceName": "Permanent", "baseDuration": 150, "basePrice": 1100, "resourceId": "EMP002" }
],
"totalPrice": 1100
},
{
"id": "BOOK-NOV23-002",
"customerId": "CUST007",
"status": "created",
"createdAt": "2025-11-21T10:00:00Z",
"services": [
{ "serviceId": "SRV-SKAEG", "serviceName": "Skæg trimning", "baseDuration": 30, "basePrice": 200, "resourceId": "EMP003" }
],
"totalPrice": 200
},
{
"id": "BOOK-NOV23-003",
"customerId": "CUST008",
"status": "created",
"createdAt": "2025-11-21T11:00:00Z",
"services": [
{ "serviceId": "SRV-WASH", "serviceName": "Hårvask", "baseDuration": 30, "basePrice": 100, "resourceId": "STUDENT002" },
{ "serviceId": "SRV-HIGH", "serviceName": "Highlights", "baseDuration": 120, "basePrice": 1000, "resourceId": "EMP001" }
],
"totalPrice": 1100,
"notes": "Split: Elev vasker, Camilla laver highlights"
},
{
"id": "BOOK-NOV24-001",
"customerId": "CUST001",
"status": "created",
"createdAt": "2025-11-22T08:00:00Z",
"services": [
{ "serviceId": "SRV-BRYLLUP1", "serviceName": "Bryllupsfrisure Del 1", "baseDuration": 60, "basePrice": 750, "resourceId": "EMP001" },
{ "serviceId": "SRV-BRYLLUP2", "serviceName": "Bryllupsfrisure Del 2", "baseDuration": 60, "basePrice": 750, "resourceId": "EMP002" }
],
"totalPrice": 1500,
"notes": "Equal split: Camilla og Isabella arbejder sammen"
},
{
"id": "BOOK-NOV24-002",
"customerId": "CUST002",
"status": "created",
"createdAt": "2025-11-22T09:00:00Z",
"services": [
{ "serviceId": "SRV-FADE", "serviceName": "Fade klipning", "baseDuration": 45, "basePrice": 400, "resourceId": "EMP003" }
],
"totalPrice": 400
},
{
"id": "BOOK-NOV24-003",
"customerId": "CUST003",
"status": "created",
"createdAt": "2025-11-22T10:00:00Z",
"services": [
{ "serviceId": "SRV-KLIPVASK", "serviceName": "Klipning og vask", "baseDuration": 60, "basePrice": 500, "resourceId": "EMP004" }
],
"totalPrice": 500
},
{
"id": "BOOK-NOV25-001",
"customerId": "CUST004",
"status": "created",
"createdAt": "2025-11-23T08:00:00Z",
"services": [
{ "serviceId": "SRV-BALKORT", "serviceName": "Balayage kort hår", "baseDuration": 90, "basePrice": 900, "resourceId": "EMP001" }
],
"totalPrice": 900
},
{
"id": "BOOK-NOV25-002",
"customerId": "CUST005",
"status": "created",
"createdAt": "2025-11-23T09:00:00Z",
"services": [
{ "serviceId": "SRV-EXT", "serviceName": "Extensions", "baseDuration": 180, "basePrice": 2500, "resourceId": "EMP002" }
],
"totalPrice": 2500
},
{
"id": "BOOK-NOV25-003",
"customerId": "CUST006",
"status": "created",
"createdAt": "2025-11-23T10:00:00Z",
"services": [
{ "serviceId": "SRV-HERRESKAEG", "serviceName": "Herreklipning + skæg", "baseDuration": 60, "basePrice": 500, "resourceId": "EMP003" }
],
"totalPrice": 500
},
{
"id": "BOOK-NOV26-001",
"customerId": "CUST007",
"status": "created",
"createdAt": "2025-11-24T08:00:00Z",
"services": [
{ "serviceId": "SRV-FARVKOR", "serviceName": "Farvekorrektion", "baseDuration": 180, "basePrice": 1800, "resourceId": "EMP001" }
],
"totalPrice": 1800
},
{
"id": "BOOK-NOV26-002",
"customerId": "CUST008",
"status": "created",
"createdAt": "2025-11-24T09:00:00Z",
"services": [
{ "serviceId": "SRV-KERATIN", "serviceName": "Keratinbehandling", "baseDuration": 150, "basePrice": 1400, "resourceId": "EMP002" }
],
"totalPrice": 1400
},
{
"id": "BOOK-NOV26-003",
"customerId": "CUST001",
"status": "created",
"createdAt": "2025-11-24T10:00:00Z",
"services": [
{ "serviceId": "SRV-SKINFADE", "serviceName": "Skin fade", "baseDuration": 45, "basePrice": 450, "resourceId": "EMP003" }
],
"totalPrice": 450
},
{
"id": "BOOK-NOV27-001",
"customerId": "CUST002",
"status": "created",
"createdAt": "2025-11-25T08:00:00Z",
"services": [
{ "serviceId": "SRV-FULLCOLOR", "serviceName": "Full color", "baseDuration": 120, "basePrice": 1000, "resourceId": "EMP001" }
],
"totalPrice": 1000
},
{
"id": "BOOK-NOV27-002",
"customerId": "CUST003",
"status": "created",
"createdAt": "2025-11-25T09:00:00Z",
"services": [
{ "serviceId": "SRV-WASH", "serviceName": "Hårvask", "baseDuration": 30, "basePrice": 100, "resourceId": "STUDENT001" },
{ "serviceId": "SRV-BABY", "serviceName": "Babylights", "baseDuration": 180, "basePrice": 1500, "resourceId": "EMP002" }
],
"totalPrice": 1600,
"notes": "Split: Elev vasker, Isabella laver babylights"
},
{
"id": "BOOK-NOV27-003",
"customerId": "CUST004",
"status": "created",
"createdAt": "2025-11-25T10:00:00Z",
"services": [
{ "serviceId": "SRV-KLASSISK", "serviceName": "Klassisk herreklip", "baseDuration": 30, "basePrice": 300, "resourceId": "EMP003" }
],
"totalPrice": 300
}
]

View file

@ -0,0 +1,49 @@
[
{
"id": "CUST001",
"name": "Sofie Nielsen",
"phone": "+45 23 45 67 89",
"email": "sofie.nielsen@email.dk"
},
{
"id": "CUST002",
"name": "Emma Andersen",
"phone": "+45 31 24 56 78",
"email": "emma.andersen@email.dk"
},
{
"id": "CUST003",
"name": "Freja Christensen",
"phone": "+45 42 67 89 12",
"email": "freja.christensen@email.dk"
},
{
"id": "CUST004",
"name": "Laura Pedersen",
"phone": "+45 51 98 76 54"
},
{
"id": "CUST005",
"name": "Ida Larsen",
"phone": "+45 29 87 65 43",
"email": "ida.larsen@email.dk"
},
{
"id": "CUST006",
"name": "Caroline Jensen",
"phone": "+45 38 76 54 32",
"email": "caroline.jensen@email.dk"
},
{
"id": "CUST007",
"name": "Mathilde Hansen",
"phone": "+45 47 65 43 21",
"email": "mathilde.hansen@email.dk"
},
{
"id": "CUST008",
"name": "Olivia Sørensen",
"phone": "+45 56 54 32 10",
"email": "olivia.sorensen@email.dk"
}
]

View file

@ -0,0 +1,14 @@
[
{
"id": "dept-styling",
"name": "Styling",
"resourceIds": ["EMP001", "EMP002", "EMP003"],
"syncStatus": "synced"
},
{
"id": "dept-training",
"name": "Training",
"resourceIds": ["EMP004", "STUDENT001", "STUDENT002"],
"syncStatus": "synced"
}
]

View file

@ -0,0 +1,669 @@
[
{
"id": "EVT-NOV24-001",
"title": "Herreklipning",
"start": "2025-11-24T09:00:00",
"end": "2025-11-24T09:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N01",
"resourceId": "EMP001",
"customerId": "CUST001",
"syncStatus": "synced",
"metadata": { "color": "blue" }
},
{
"id": "EVT-NOV24-002",
"title": "Balayage",
"start": "2025-11-24T10:00:00",
"end": "2025-11-24T12:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N02",
"resourceId": "EMP002",
"customerId": "CUST002",
"syncStatus": "synced",
"metadata": { "color": "purple" }
},
{
"id": "EVT-NOV24-003",
"title": "Klipning dame",
"start": "2025-11-24T14:00:00",
"end": "2025-11-24T15:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N03",
"resourceId": "EMP003",
"customerId": "CUST003",
"syncStatus": "synced",
"metadata": { "color": "teal" }
},
{
"id": "EVT-NOV25-001",
"title": "Farve behandling",
"start": "2025-11-25T09:00:00",
"end": "2025-11-25T11:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N04",
"resourceId": "EMP001",
"customerId": "CUST004",
"syncStatus": "synced",
"metadata": { "color": "orange" }
},
{
"id": "EVT-NOV25-002",
"title": "Permanent",
"start": "2025-11-25T12:00:00",
"end": "2025-11-25T14:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N05",
"resourceId": "EMP004",
"customerId": "CUST005",
"syncStatus": "synced",
"metadata": { "color": "indigo" }
},
{
"id": "EVT-NOV26-001",
"title": "Highlights",
"start": "2025-11-26T10:00:00",
"end": "2025-11-26T12:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N06",
"resourceId": "EMP002",
"customerId": "CUST006",
"syncStatus": "synced",
"metadata": { "color": "lime" }
},
{
"id": "EVT-NOV26-002",
"title": "Børneklip",
"start": "2025-11-26T14:00:00",
"end": "2025-11-26T14:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N07",
"resourceId": "EMP003",
"customerId": "CUST007",
"syncStatus": "synced",
"metadata": { "color": "cyan" }
},
{
"id": "EVT-NOV27-001",
"title": "Olaplex behandling",
"start": "2025-11-27T09:00:00",
"end": "2025-11-27T10:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N08",
"resourceId": "EMP005",
"customerId": "CUST008",
"syncStatus": "synced",
"metadata": { "color": "pink" }
},
{
"id": "EVT-NOV27-002",
"title": "Skæg trim",
"start": "2025-11-27T11:00:00",
"end": "2025-11-27T11:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N09",
"resourceId": "EMP001",
"customerId": "CUST009",
"syncStatus": "synced",
"metadata": { "color": "teal" }
},
{
"id": "EVT-NOV28-001",
"title": "Extensions",
"start": "2025-11-28T09:00:00",
"end": "2025-11-28T12:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N10",
"resourceId": "EMP002",
"customerId": "CUST010",
"syncStatus": "synced",
"metadata": { "color": "deep-purple" }
},
{
"id": "EVT-DEC01-001",
"title": "Klipning og føn",
"start": "2025-12-01T10:00:00",
"end": "2025-12-01T11:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N11",
"resourceId": "EMP001",
"customerId": "CUST011",
"syncStatus": "synced",
"metadata": { "color": "blue" }
},
{
"id": "EVT-DEC01-002",
"title": "Farve korrektion",
"start": "2025-12-01T13:00:00",
"end": "2025-12-01T16:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N12",
"resourceId": "EMP004",
"customerId": "CUST012",
"syncStatus": "synced",
"metadata": { "color": "magenta" }
},
{
"id": "EVT-DEC02-001",
"title": "Bryllupsfrisure prøve",
"start": "2025-12-02T09:00:00",
"end": "2025-12-02T11:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N13",
"resourceId": "EMP002",
"customerId": "CUST013",
"syncStatus": "synced",
"metadata": { "color": "green" }
},
{
"id": "EVT-DEC02-002",
"title": "Herreklip express",
"start": "2025-12-02T14:00:00",
"end": "2025-12-02T14:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N14",
"resourceId": "EMP003",
"customerId": "CUST014",
"syncStatus": "synced",
"metadata": { "color": "amber" }
},
{
"id": "EVT-DEC03-001",
"title": "Keratin behandling",
"start": "2025-12-03T10:00:00",
"end": "2025-12-03T13:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N15",
"resourceId": "EMP005",
"customerId": "CUST001",
"syncStatus": "synced",
"metadata": { "color": "violet" }
},
{
"id": "EVT-DEC03-002",
"title": "Vask og styling",
"start": "2025-12-03T15:00:00",
"end": "2025-12-03T15:45:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N16",
"resourceId": "EMP001",
"customerId": "CUST002",
"syncStatus": "synced",
"metadata": { "color": "light-green" }
},
{
"id": "EVT-DEC04-001",
"title": "Balayage kort hår",
"start": "2025-12-04T09:00:00",
"end": "2025-12-04T10:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N17",
"resourceId": "EMP002",
"customerId": "CUST003",
"syncStatus": "synced",
"metadata": { "color": "purple" }
},
{
"id": "EVT-DEC04-002",
"title": "Ferie",
"start": "2025-12-04T00:00:00",
"end": "2025-12-05T23:59:59",
"type": "vacation",
"allDay": true,
"resourceId": "EMP004",
"syncStatus": "synced",
"metadata": { "color": "red" }
},
{
"id": "EVT-DEC05-001",
"title": "Dameklip langt hår",
"start": "2025-12-05T11:00:00",
"end": "2025-12-05T12:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N18",
"resourceId": "EMP003",
"customerId": "CUST004",
"syncStatus": "synced",
"metadata": { "color": "pink" }
},
{
"id": "EVT-DEC05-002",
"title": "Highlights delvis",
"start": "2025-12-05T14:00:00",
"end": "2025-12-05T15:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-N19",
"resourceId": "EMP005",
"customerId": "CUST005",
"syncStatus": "synced",
"metadata": { "color": "lime" }
},
{
"id": "EVT-DEC08-001",
"title": "Balayage langt hår",
"description": "Fuld balayage behandling",
"start": "2025-12-08T10:00:00",
"end": "2025-12-08T11:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-001",
"resourceId": "EMP001",
"customerId": "CUST001",
"syncStatus": "synced",
"metadata": { "color": "purple" }
},
{
"id": "EVT-DEC08-002",
"title": "Klipning og styling",
"description": "Dameklipning med føn",
"start": "2025-12-08T14:00:00",
"end": "2025-12-08T15:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-002",
"resourceId": "EMP001",
"customerId": "CUST002",
"syncStatus": "synced",
"metadata": { "color": "pink" }
},
{
"id": "EVT-DEC08-003",
"title": "Permanent",
"description": "Permanent med curler",
"start": "2025-12-08T09:00:00",
"end": "2025-12-08T11:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-003",
"resourceId": "EMP002",
"customerId": "CUST003",
"syncStatus": "synced",
"metadata": { "color": "indigo" }
},
{
"id": "EVT-DEC08-004",
"title": "Farve behandling",
"description": "Farve og pleje",
"start": "2025-12-08T13:00:00",
"end": "2025-12-08T15:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-004",
"resourceId": "EMP002",
"customerId": "CUST004",
"syncStatus": "synced",
"metadata": { "color": "orange" }
},
{
"id": "EVT-DEC09-001",
"title": "Herreklipning",
"description": "Klassisk herreklip",
"start": "2025-12-09T11:00:00",
"end": "2025-12-09T11:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-005",
"resourceId": "EMP003",
"customerId": "CUST005",
"syncStatus": "synced",
"metadata": { "color": "teal" }
},
{
"id": "EVT-DEC09-002",
"title": "Kursus",
"description": "Ekstern kursusdag",
"start": "2025-12-09T00:00:00",
"end": "2025-12-10T23:59:59",
"type": "blocked",
"allDay": true,
"resourceId": "EMP003",
"syncStatus": "synced",
"metadata": { "color": "cyan" }
},
{
"id": "EVT-DEC09-003",
"title": "Bryllupsfrisure",
"description": "Bryllupsfrisure med prøve",
"start": "2025-12-09T08:00:00",
"end": "2025-12-09T10:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-007",
"resourceId": "EMP004",
"customerId": "CUST007",
"syncStatus": "synced",
"metadata": { "color": "green" }
},
{
"id": "EVT-DEC10-001",
"title": "Highlights",
"description": "Highlights med folie",
"start": "2025-12-10T12:00:00",
"end": "2025-12-10T14:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-008",
"resourceId": "EMP005",
"customerId": "CUST008",
"syncStatus": "synced",
"metadata": { "color": "lime" }
},
{
"id": "EVT-DEC10-002",
"title": "Styling konsultation",
"description": "Rådgivning om ny stil",
"start": "2025-12-10T15:00:00",
"end": "2025-12-10T15:30:00",
"type": "meeting",
"allDay": false,
"resourceId": "EMP005",
"syncStatus": "synced",
"metadata": { "color": "amber" }
},
{
"id": "EVT-DEC10-003",
"title": "Olaplex behandling",
"description": "Fuld Olaplex kur",
"start": "2025-12-10T09:00:00",
"end": "2025-12-10T10:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-009",
"resourceId": "EMP001",
"customerId": "CUST009",
"syncStatus": "synced",
"metadata": { "color": "blue" }
},
{
"id": "EVT-DEC11-001",
"title": "Extensions",
"description": "Hair extensions påsætning",
"start": "2025-12-11T09:00:00",
"end": "2025-12-11T12:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-010",
"resourceId": "EMP002",
"customerId": "CUST010",
"syncStatus": "synced",
"metadata": { "color": "deep-purple" }
},
{
"id": "EVT-DEC11-002",
"title": "Børneklip",
"description": "Klipning af barn",
"start": "2025-12-11T14:00:00",
"end": "2025-12-11T14:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-011",
"resourceId": "EMP003",
"customerId": "CUST011",
"syncStatus": "synced",
"metadata": { "color": "light-blue" }
},
{
"id": "EVT-DEC11-003",
"title": "Team møde",
"description": "Morgen briefing",
"start": "2025-12-11T08:00:00",
"end": "2025-12-11T08:30:00",
"type": "meeting",
"allDay": false,
"resourceId": "EMP001",
"syncStatus": "synced",
"metadata": { "color": "red" }
},
{
"id": "EVT-DEC12-001",
"title": "Keratin behandling",
"description": "Brasiliansk keratin",
"start": "2025-12-12T10:00:00",
"end": "2025-12-12T13:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-012",
"resourceId": "EMP004",
"customerId": "CUST012",
"syncStatus": "synced",
"metadata": { "color": "violet" }
},
{
"id": "EVT-DEC12-002",
"title": "Vask og føn",
"description": "Express service",
"start": "2025-12-12T15:00:00",
"end": "2025-12-12T15:45:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-013",
"resourceId": "EMP005",
"customerId": "CUST013",
"syncStatus": "synced",
"metadata": { "color": "light-green" }
},
{
"id": "EVT-DEC12-003",
"title": "Farvekorrektion",
"description": "Korrektion af tidligere farve",
"start": "2025-12-12T09:00:00",
"end": "2025-12-12T12:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-014",
"resourceId": "EMP001",
"customerId": "CUST014",
"syncStatus": "synced",
"metadata": { "color": "magenta" }
},
{
"id": "EVT-DEC15-001",
"title": "Juleklipning",
"start": "2025-12-15T09:00:00",
"end": "2025-12-15T10:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F01",
"resourceId": "EMP001",
"customerId": "CUST001",
"syncStatus": "synced",
"metadata": { "color": "red" }
},
{
"id": "EVT-DEC15-002",
"title": "Balayage jul",
"start": "2025-12-15T11:00:00",
"end": "2025-12-15T13:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F02",
"resourceId": "EMP002",
"customerId": "CUST002",
"syncStatus": "synced",
"metadata": { "color": "purple" }
},
{
"id": "EVT-DEC15-003",
"title": "Herreklip",
"start": "2025-12-15T14:00:00",
"end": "2025-12-15T14:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F03",
"resourceId": "EMP003",
"customerId": "CUST003",
"syncStatus": "synced",
"metadata": { "color": "blue" }
},
{
"id": "EVT-DEC16-001",
"title": "Farve og klip",
"start": "2025-12-16T10:00:00",
"end": "2025-12-16T12:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F04",
"resourceId": "EMP004",
"customerId": "CUST004",
"syncStatus": "synced",
"metadata": { "color": "orange" }
},
{
"id": "EVT-DEC16-002",
"title": "Permanent",
"start": "2025-12-16T13:00:00",
"end": "2025-12-16T15:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F05",
"resourceId": "EMP005",
"customerId": "CUST005",
"syncStatus": "synced",
"metadata": { "color": "indigo" }
},
{
"id": "EVT-DEC17-001",
"title": "Julefrokost",
"start": "2025-12-17T12:00:00",
"end": "2025-12-17T14:00:00",
"type": "meeting",
"allDay": false,
"resourceId": "EMP001",
"syncStatus": "synced",
"metadata": { "color": "green" }
},
{
"id": "EVT-DEC17-002",
"title": "Extensions fjernelse",
"start": "2025-12-17T09:00:00",
"end": "2025-12-17T11:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F06",
"resourceId": "EMP002",
"customerId": "CUST006",
"syncStatus": "synced",
"metadata": { "color": "deep-purple" }
},
{
"id": "EVT-DEC18-001",
"title": "Highlights jul",
"start": "2025-12-18T10:00:00",
"end": "2025-12-18T12:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F07",
"resourceId": "EMP001",
"customerId": "CUST007",
"syncStatus": "synced",
"metadata": { "color": "lime" }
},
{
"id": "EVT-DEC18-002",
"title": "Børneklip jul",
"start": "2025-12-18T14:00:00",
"end": "2025-12-18T14:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F08",
"resourceId": "EMP003",
"customerId": "CUST008",
"syncStatus": "synced",
"metadata": { "color": "cyan" }
},
{
"id": "EVT-DEC19-001",
"title": "Festfrisure",
"start": "2025-12-19T09:00:00",
"end": "2025-12-19T10:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F09",
"resourceId": "EMP004",
"customerId": "CUST009",
"syncStatus": "synced",
"metadata": { "color": "pink" }
},
{
"id": "EVT-DEC19-002",
"title": "Julestyling",
"start": "2025-12-19T11:00:00",
"end": "2025-12-19T12:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F10",
"resourceId": "EMP005",
"customerId": "CUST010",
"syncStatus": "synced",
"metadata": { "color": "amber" }
},
{
"id": "EVT-DEC19-003",
"title": "Klipning og farve",
"start": "2025-12-19T14:00:00",
"end": "2025-12-19T16:30:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F11",
"resourceId": "EMP001",
"customerId": "CUST011",
"syncStatus": "synced",
"metadata": { "color": "violet" }
},
{
"id": "EVT-DEC22-001",
"title": "Sidste jul klip",
"start": "2025-12-22T09:00:00",
"end": "2025-12-22T10:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F12",
"resourceId": "EMP002",
"customerId": "CUST012",
"syncStatus": "synced",
"metadata": { "color": "red" }
},
{
"id": "EVT-DEC22-002",
"title": "Juleaften forberedelse",
"start": "2025-12-22T11:00:00",
"end": "2025-12-22T13:00:00",
"type": "customer",
"allDay": false,
"bookingId": "BOOK-F13",
"resourceId": "EMP003",
"customerId": "CUST013",
"syncStatus": "synced",
"metadata": { "color": "green" }
},
{
"id": "EVT-DEC22-003",
"title": "Juleferie start",
"start": "2025-12-22T00:00:00",
"end": "2025-12-27T23:59:59",
"type": "vacation",
"allDay": true,
"resourceId": "EMP004",
"syncStatus": "synced",
"metadata": { "color": "light-blue" }
}
]

View file

@ -0,0 +1,135 @@
{
"date": "2025-08-05",
"resources": [
{
"name": "karina.knudsen",
"displayName": "Karina Knudsen",
"avatarUrl": "/avatars/karina.jpg",
"employeeId": "EMP001",
"events": [
{
"id": "1",
"title": "Balayage langt hår",
"start": "2025-08-05T10:00:00",
"end": "2025-08-05T11:00:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 60, "color": "#9c27b0" }
},
{
"id": "2",
"title": "Klipning og styling",
"start": "2025-08-05T14:00:00",
"end": "2025-08-05T15:30:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 90, "color": "#e91e63" }
}
]
},
{
"name": "maria.hansen",
"displayName": "Maria Hansen",
"avatarUrl": "/avatars/maria.jpg",
"employeeId": "EMP002",
"events": [
{
"id": "3",
"title": "Permanent",
"start": "2025-08-05T09:00:00",
"end": "2025-08-05T11:00:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 120, "color": "#3f51b5" }
},
{
"id": "4",
"title": "Farve behandling",
"start": "2025-08-05T13:00:00",
"end": "2025-08-05T15:00:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 120, "color": "#ff9800" }
}
]
},
{
"name": "lars.nielsen",
"displayName": "Lars Nielsen",
"avatarUrl": "/avatars/lars.jpg",
"employeeId": "EMP003",
"events": [
{
"id": "5",
"title": "Herreklipning",
"start": "2025-08-05T11:00:00",
"end": "2025-08-05T11:30:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 30, "color": "#795548" }
},
{
"id": "6",
"title": "Skæg trimning",
"start": "2025-08-05T16:00:00",
"end": "2025-08-05T16:30:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 30, "color": "#607d8b" }
}
]
},
{
"name": "anna.petersen",
"displayName": "Anna Petersen",
"avatarUrl": "/avatars/anna.jpg",
"employeeId": "EMP004",
"events": [
{
"id": "7",
"title": "Bryllupsfrisure",
"start": "2025-08-05T08:00:00",
"end": "2025-08-05T10:00:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 120, "color": "#009688" }
}
]
},
{
"name": "thomas.olsen",
"displayName": "Thomas Olsen",
"avatarUrl": "/avatars/thomas.jpg",
"employeeId": "EMP005",
"events": [
{
"id": "8",
"title": "Highlights",
"start": "2025-08-05T12:00:00",
"end": "2025-08-05T14:00:00",
"type": "work",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 120, "color": "#8bc34a" }
},
{
"id": "9",
"title": "Styling konsultation",
"start": "2025-08-05T15:00:00",
"end": "2025-08-05T15:30:00",
"type": "meeting",
"allDay": false,
"syncStatus": "synced",
"metadata": { "duration": 30, "color": "#cddc39" }
}
]
}
]
}

View file

@ -0,0 +1,134 @@
[
{
"id": "EMP001",
"name": "camilla.jensen",
"displayName": "Camilla Jensen",
"type": "person",
"avatarUrl": "/avatars/camilla.jpg",
"color": "#9c27b0",
"isActive": true,
"defaultSchedule": {
"1": { "start": "09:00", "end": "17:00" },
"2": { "start": "09:00", "end": "17:00" },
"3": { "start": "09:00", "end": "15:00" },
"4": { "start": "09:00", "end": "17:00" },
"5": { "start": "09:00", "end": "14:00" },
"6": null,
"7": null
},
"metadata": {
"role": "master stylist",
"specialties": ["balayage", "color", "bridal"]
}
},
{
"id": "EMP002",
"name": "isabella.hansen",
"displayName": "Isabella Hansen",
"type": "person",
"avatarUrl": "/avatars/isabella.jpg",
"color": "#e91e63",
"isActive": true,
"defaultSchedule": {
"1": { "start": "10:00", "end": "18:00" },
"2": { "start": "10:00", "end": "18:00" },
"3": { "start": "10:00", "end": "18:00" },
"4": { "start": "10:00", "end": "18:00" },
"5": { "start": "10:00", "end": "16:00" },
"6": null,
"7": null
},
"metadata": {
"role": "master stylist",
"specialties": ["highlights", "ombre", "styling"]
}
},
{
"id": "EMP003",
"name": "alexander.nielsen",
"displayName": "Alexander Nielsen",
"type": "person",
"avatarUrl": "/avatars/alexander.jpg",
"color": "#3f51b5",
"isActive": true,
"defaultSchedule": {
"1": { "start": "08:00", "end": "16:00" },
"2": { "start": "08:00", "end": "16:00" },
"3": { "start": "08:00", "end": "16:00" },
"4": { "start": "08:00", "end": "16:00" },
"5": { "start": "08:00", "end": "14:00" },
"6": null,
"7": null
},
"metadata": {
"role": "master stylist",
"specialties": ["men's cuts", "beard", "fade"]
}
},
{
"id": "EMP004",
"name": "viktor.andersen",
"displayName": "Viktor Andersen",
"type": "person",
"avatarUrl": "/avatars/viktor.jpg",
"color": "#009688",
"isActive": true,
"defaultSchedule": {
"1": { "start": "09:00", "end": "17:00" },
"2": null,
"3": { "start": "09:00", "end": "17:00" },
"4": { "start": "09:00", "end": "17:00" },
"5": { "start": "09:00", "end": "17:00" },
"6": { "start": "10:00", "end": "14:00" },
"7": null
},
"metadata": {
"role": "stylist",
"specialties": ["cuts", "styling", "perms"]
}
},
{
"id": "STUDENT001",
"name": "line.pedersen",
"displayName": "Line Pedersen (Elev)",
"type": "person",
"avatarUrl": "/avatars/line.jpg",
"color": "#8bc34a",
"isActive": true,
"defaultSchedule": {
"1": { "start": "09:00", "end": "15:00" },
"2": { "start": "09:00", "end": "15:00" },
"3": { "start": "09:00", "end": "15:00" },
"4": null,
"5": { "start": "09:00", "end": "15:00" },
"6": null,
"7": null
},
"metadata": {
"role": "student",
"specialties": ["wash", "blow-dry", "basic cuts"]
}
},
{
"id": "STUDENT002",
"name": "mads.larsen",
"displayName": "Mads Larsen (Elev)",
"type": "person",
"avatarUrl": "/avatars/mads.jpg",
"color": "#ff9800",
"isActive": true,
"defaultSchedule": {
"1": null,
"2": { "start": "10:00", "end": "16:00" },
"3": { "start": "10:00", "end": "16:00" },
"4": { "start": "10:00", "end": "16:00" },
"5": null,
"6": null,
"7": null
},
"metadata": {
"role": "student",
"specialties": ["wash", "styling assistance"]
}
}
]

View file

@ -0,0 +1,14 @@
[
{
"id": "team1",
"name": "Team Alpha",
"resourceIds": ["EMP001", "EMP002"],
"syncStatus": "synced"
},
{
"id": "team2",
"name": "Team Beta",
"resourceIds": ["EMP003", "EMP004"],
"syncStatus": "synced"
}
]

View file

@ -0,0 +1,69 @@
[
{
"id": "workweek",
"syncStatus": "synced",
"presets": {
"standard": {
"id": "standard",
"workDays": [1, 2, 3, 4, 5],
"label": "Man-Fre",
"periodDays": 7
},
"compressed": {
"id": "compressed",
"workDays": [1, 2, 3],
"label": "Man-Ons",
"periodDays": 7
},
"midweek": {
"id": "midweek",
"workDays": [4, 5],
"label": "Tors-Fre",
"periodDays": 7
},
"weekend": {
"id": "weekend",
"workDays": [6, 7],
"label": "Weekend",
"periodDays": 7
},
"fullweek": {
"id": "fullweek",
"workDays": [1, 2, 3, 4, 5, 6, 7],
"label": "Alle dage",
"periodDays": 7
},
"day": {
"id": "day",
"workDays": [1],
"label": "Dag",
"periodDays": 1
}
},
"defaultPreset": "standard",
"firstDayOfWeek": 1
},
{
"id": "grid",
"syncStatus": "synced",
"dayStartHour": 6,
"dayEndHour": 22,
"workStartHour": 8,
"workEndHour": 17,
"hourHeight": 80,
"snapInterval": 15
},
{
"id": "timeFormat",
"syncStatus": "synced",
"timezone": "Europe/Copenhagen",
"locale": "da-DK",
"use24HourFormat": true
},
{
"id": "views",
"syncStatus": "synced",
"availableViews": ["simple", "resource", "team", "department"],
"defaultView": "simple"
}
]

View file

@ -0,0 +1,45 @@
[
{
"id": "day",
"groupings": [
{ "type": "resource", "values": ["EMP001", "EMP002"], "idProperty": "resourceId" },
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start", "hideHeader": true }
]
},
{
"id": "simple",
"groupings": [
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
]
},
{
"id": "resource",
"groupings": [
{ "type": "resource", "values": ["EMP001", "EMP002"], "idProperty": "resourceId" },
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
]
},
{
"id": "team",
"groupings": [
{ "type": "team", "values": ["team1", "team2"] },
{ "type": "resource", "values": ["EMP001", "EMP002", "EMP003", "EMP004"], "idProperty": "resourceId", "belongsTo": "team.resourceIds" },
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
]
},
{
"id": "department",
"groupings": [
{ "type": "department", "values": ["dept-styling", "dept-training"] },
{ "type": "resource", "values": ["EMP001", "EMP002", "EMP003", "EMP004", "STUDENT001", "STUDENT002"], "idProperty": "resourceId", "belongsTo": "department.resourceIds" },
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
]
},
{
"id": "picker",
"groupings": [
{ "type": "resource", "values": ["EMP001", "EMP002", "EMP003", "EMP004"], "idProperty": "resourceId" },
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
]
}
]