diff --git a/.gitignore b/.gitignore
index 31c7257..b299ff1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
.tasks/
.agile/
+**/bin/
+**/obj/
diff --git a/BuildingBlock.OperationsConfig.slnx b/BuildingBlock.OperationsConfig.slnx
new file mode 100644
index 0000000..a24c744
--- /dev/null
+++ b/BuildingBlock.OperationsConfig.slnx
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..4206439
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+ AgileWebs
+ AgileWebs
+ git
+ http://192.168.68.156:3000/AgileWebs/building-block-operations-config
+ http://192.168.68.156:3000/AgileWebs/building-block-operations-config
+ false
+
+
diff --git a/src/BuildingBlock.OperationsConfig.Contracts/Abstractions/IOperationsConfigCapabilityContract.cs b/src/BuildingBlock.OperationsConfig.Contracts/Abstractions/IOperationsConfigCapabilityContract.cs
new file mode 100644
index 0000000..3939708
--- /dev/null
+++ b/src/BuildingBlock.OperationsConfig.Contracts/Abstractions/IOperationsConfigCapabilityContract.cs
@@ -0,0 +1,11 @@
+using BuildingBlock.OperationsConfig.Contracts.Requests;
+using BuildingBlock.OperationsConfig.Contracts.Responses;
+
+namespace BuildingBlock.OperationsConfig.Contracts.Abstractions;
+
+public interface IOperationsConfigCapabilityContract
+{
+ Task GetEffectiveConfigAsync(
+ GetEffectiveOperationsConfigRequest request,
+ CancellationToken cancellationToken);
+}
diff --git a/src/BuildingBlock.OperationsConfig.Contracts/BuildingBlock.OperationsConfig.Contracts.csproj b/src/BuildingBlock.OperationsConfig.Contracts/BuildingBlock.OperationsConfig.Contracts.csproj
new file mode 100644
index 0000000..b760144
--- /dev/null
+++ b/src/BuildingBlock.OperationsConfig.Contracts/BuildingBlock.OperationsConfig.Contracts.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net10.0
+ enable
+ enable
+
+
+
diff --git a/src/BuildingBlock.OperationsConfig.Contracts/Contracts/FeatureFlagContract.cs b/src/BuildingBlock.OperationsConfig.Contracts/Contracts/FeatureFlagContract.cs
new file mode 100644
index 0000000..28d7473
--- /dev/null
+++ b/src/BuildingBlock.OperationsConfig.Contracts/Contracts/FeatureFlagContract.cs
@@ -0,0 +1,3 @@
+namespace BuildingBlock.OperationsConfig.Contracts.Contracts;
+
+public sealed record FeatureFlagContract(string Key, bool Enabled);
diff --git a/src/BuildingBlock.OperationsConfig.Contracts/Contracts/ServiceWindowContract.cs b/src/BuildingBlock.OperationsConfig.Contracts/Contracts/ServiceWindowContract.cs
new file mode 100644
index 0000000..8b3b32a
--- /dev/null
+++ b/src/BuildingBlock.OperationsConfig.Contracts/Contracts/ServiceWindowContract.cs
@@ -0,0 +1,6 @@
+namespace BuildingBlock.OperationsConfig.Contracts.Contracts;
+
+public sealed record ServiceWindowContract(
+ DayOfWeek Day,
+ TimeOnly OpenAt,
+ TimeOnly CloseAt);
diff --git a/src/BuildingBlock.OperationsConfig.Contracts/Requests/GetEffectiveOperationsConfigRequest.cs b/src/BuildingBlock.OperationsConfig.Contracts/Requests/GetEffectiveOperationsConfigRequest.cs
new file mode 100644
index 0000000..e360c60
--- /dev/null
+++ b/src/BuildingBlock.OperationsConfig.Contracts/Requests/GetEffectiveOperationsConfigRequest.cs
@@ -0,0 +1,5 @@
+namespace BuildingBlock.OperationsConfig.Contracts.Requests;
+
+public sealed record GetEffectiveOperationsConfigRequest(
+ string LocationId,
+ DateTime EffectiveAtUtc);
diff --git a/src/BuildingBlock.OperationsConfig.Contracts/Responses/GetEffectiveOperationsConfigResponse.cs b/src/BuildingBlock.OperationsConfig.Contracts/Responses/GetEffectiveOperationsConfigResponse.cs
new file mode 100644
index 0000000..ca49c71
--- /dev/null
+++ b/src/BuildingBlock.OperationsConfig.Contracts/Responses/GetEffectiveOperationsConfigResponse.cs
@@ -0,0 +1,8 @@
+using BuildingBlock.OperationsConfig.Contracts.Contracts;
+
+namespace BuildingBlock.OperationsConfig.Contracts.Responses;
+
+public sealed record GetEffectiveOperationsConfigResponse(
+ string Version,
+ IReadOnlyCollection ServiceWindows,
+ IReadOnlyCollection FeatureFlags);