diff --git a/integrations/opentelemetry/.env.example b/integrations/opentelemetry/.env.example new file mode 100644 index 0000000..67e50ec --- /dev/null +++ b/integrations/opentelemetry/.env.example @@ -0,0 +1,17 @@ +## This is an example of a .env file +## This file should be renamed to .env and filled with the appropriate values + +## This file is used to store environment variables for the project +## This file should not be committed to the repository + +## OpenAI API Key +OPENAI_API_KEY= + +## OpenAI API URL Override (Optional) +OPENAI_API_URL= + +## OpenTelemetry endpoin (Optional) +OTEL_EXPORTER_OTLP_ENDPOINT= + +## Anthropic API Key (Optional) +ANTHROPIC_API_KEY= diff --git a/integrations/opentelemetry/conftest.py b/integrations/opentelemetry/conftest.py new file mode 100644 index 0000000..465c7a3 --- /dev/null +++ b/integrations/opentelemetry/conftest.py @@ -0,0 +1,14 @@ +import sys +from pathlib import Path + +from dotenv import load_dotenv + +# Load environment variables from .env file +load_dotenv() + +root_path = (Path(__file__)).parent +subfolders = ["src", "tests"] +for subfolder in subfolders: + directory = str((root_path / subfolder).resolve()) + print(f"appending folder: {subfolder}, as directory: {directory}") + sys.path.append(directory) diff --git a/integrations/opentelemetry/readme.md b/integrations/opentelemetry/readme.md new file mode 100644 index 0000000..48594b8 --- /dev/null +++ b/integrations/opentelemetry/readme.md @@ -0,0 +1,40 @@ +# Purpose +> To provide an example of validating LLM responses through observability. This example does **not** actually use _any_ of the CAT python library functionality. It's more of an example of how one _might_ do continuous alignment through observability. Perhaps we could call that CAO, Continuous Alignment in Observability. +# Overview +> This example uses [OpenLIT](https://github.com/openlit/openlit) to auto instrument calls to an LLMs api, providing **[OpenTelemetry](https://opentelemetry.io)-native** observability. [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector-contrib) is used to process the traces and attach validations on the fly to the traces, ready for downstream visualization. + +> This is a simple, hardcoded example to prove out the possiblity. There is a number of places for automation and further development that _might_ be quite time consuming. +# Running the example +## Setup (if needed) +> Clone this repo locally +```shell +git clone https://github.com/thisisartium/continuous-alignment-testing +``` +> Install dependencies +#### Install package manager +* install [uv](https://docs.astral.sh/uv/getting-started/installation) - Python package manager + * `brew install uv` +#### Install dependencies +```shell +uv pip install openlit +uv sync +``` +#### Setup environment +> populate your new `.env` file with required values +```shell +cp .env.example .env +``` + +> Setup environment +## Running OpenTelemetry Collector +> Run the following command +```shell +docker run -p 4317:4317 -p 4318:4318 -v $(pwd)/integrations/opentelemetry/src/config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector-contrib:latest --config /etc/otelcol/config.yaml +``` +## Executing LLM calls using a test +> Run one of the tests found in `/integrations/opentelemetry/tests/test_responses_available_in_opentelemetry.py +## See the results +> Look at the logs from the OpenTelemetry Collector. At the end you'll see a line similar to the following. +```shell +validations: Map({"correct_developer_suggested":true,"no_developer_name_is_hallucinated":true,"not_empty_response":true}) +``` diff --git a/integrations/opentelemetry/src/config.yaml b/integrations/opentelemetry/src/config.yaml new file mode 100644 index 0000000..c9213a0 --- /dev/null +++ b/integrations/opentelemetry/src/config.yaml @@ -0,0 +1,91 @@ +receivers: + otlp: + protocols: + grpc: + endpoint: "0.0.0.0:4317" + http: + endpoint: "0.0.0.0:4318" + +processors: + transform: + error_mode: ignore + trace_statements: + - context: spanevent + statements: + # useful variables + - set(cache["response"], ParseJSON(attributes["gen_ai.completion"])) + - set(cache["developers"], cache["response"]["developers"]) + - set(cache["count"], Len(cache["developers"])) + + # validation variables + - set(cache["not_empty_response"], false) + - set(cache["correct_developer_suggested"], false) + - set(cache["no_developer_name_is_hallucinated"], false) + + # not empty response + - set(cache["not_empty_response"], true) where cache["count"] > 0 + + # validate developers + - set(cache["0_name"], cache["developers"][0]["name"]) where cache["count"] > 0 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["0_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["0_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["0_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["0_name"] != nil + + - set(cache["1_name"], cache["developers"][1]["name"]) where cache["count"] > 1 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["1_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["1_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["1_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["1_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["2_name"], cache["developers"][2]["name"]) where cache["count"] > 2 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["2_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["2_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["2_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["2_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["3_name"], cache["developers"][3]["name"]) where cache["count"] > 3 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["3_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["3_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["3_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["3_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["4_name"], cache["developers"][4]["name"]) where cache["count"] > 4 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["4_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["4_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["4_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["4_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["5_name"], cache["developers"][5]["name"]) where cache["count"] > 5 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["5_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["5_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["5_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["5_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["6_name"], cache["developers"][6]["name"]) where cache["count"] > 6 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["6_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["6_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["6_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["6_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["7_name"], cache["developers"][7]["name"]) where cache["count"] > 7 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["7_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["7_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["7_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["7_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["8_name"], cache["developers"][8]["name"]) where cache["count"] > 8 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["8_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["8_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["8_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["8_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + - set(cache["9_name"], cache["developers"][9]["name"]) where cache["count"] > 9 + - set(cache["correct_developer_suggested"], true) where IsMatch(cache["9_name"], "Sam\\sThomas|Drew\\sAnderson|Alex\\sWilson|Alex\\sJohnson") and cache["9_name"] != nil + - set(cache["no_developer_name_is_hallucinated"], true) where IsMatch(cache["9_name"], "Alex\\sAnderson|Alex\\sJohnson|Alex\\sWilson|Blake\\sDavis|Blake\\sJohnson|Blake\\sWilson|Casey\\sMoore|Casey\\sThomas|Casey\\sWilson|Drew\\sAnderson|Jamie\\sJohnson|Jamie\\sMiller|Jamie\\sMoore|Morgan\\sBrown|Sam\\sJohnson|Sam\\sMiller|Sam\\sThomas|Sam\\sWilson|Taylor\\sAnderson|Taylor\\sBrown|Taylor\\sJohnson|Taylor\\sWilson") and cache["9_name"] != nil and cache["no_developer_name_is_hallucinated"] == true + + # save results + - set(attributes["validations"]["correct_developer_suggested"], cache["correct_developer_suggested"]) + - set(attributes["validations"]["no_developer_name_is_hallucinated"], cache["no_developer_name_is_hallucinated"]) + - set(attributes["validations"]["not_empty_response"], cache["not_empty_response"]) + + # cleanup + - set(cache, {}) + +exporters: + debug: + verbosity: detailed + +service: + telemetry: + logs: + level: debug + + pipelines: + traces: + receivers: [otlp] + processors: [transform] + exporters: [debug] + diff --git a/integrations/opentelemetry/tests/example_1_opentelemetry_integration/test_responses_available_in_opentelemetry.py b/integrations/opentelemetry/tests/example_1_opentelemetry_integration/test_responses_available_in_opentelemetry.py new file mode 100644 index 0000000..6d7aa37 --- /dev/null +++ b/integrations/opentelemetry/tests/example_1_opentelemetry_integration/test_responses_available_in_opentelemetry.py @@ -0,0 +1,93 @@ +import json + +import anthropic +import openlit +from helpers import load_json_fixture +from openai import OpenAI + +openlit.init() + + +def test_anthropic_to_opentelemetry(): + client = anthropic.Anthropic() + assert client is not None + + responses = ( + client.messages.create( + max_tokens=8192, + model="claude-3-7-sonnet-20250219", + system=system_prompt(), + messages=[ + {"role": "user", "content": user_prompt()}, + ], + ) + .content[0] + .text + ) + + not_empty_response = True + + try: + json_object = json.loads(responses) + print(json_object) + developer_names = {developer["name"] for developer in json_object["developers"]} + not_empty_response = len(developer_names) != 0 + except json.JSONDecodeError as e: + print(f"JSON Exception: {e}") + + assert not_empty_response + + +def test_openai_to_opentelemetry(): + client = OpenAI() + assert client is not None + + responses = ( + client.chat.completions.create( + model="gpt-4-1106-preview", + messages=[ + {"role": "system", "content": system_prompt()}, + {"role": "user", "content": user_prompt()}, + ], + response_format={"type": "json_object"}, + ) + .choices[0] + .message.content + ) + + not_empty_response = True + + try: + json_object = json.loads(responses) + developer_names = {developer["name"] for developer in json_object["developers"]} + not_empty_response = len(developer_names) != 0 + except json.JSONDecodeError as e: + print(f"JSON Exception: {e}") + + assert not_empty_response + + +def system_prompt(): + skills_data = load_json_fixture("skills.json") + example_output = load_json_fixture("example_output.json") + + system_prompt = f""" + You will get a description of a project, and your task is + to tell me the best developers from the given list for the project based on their skills. + Today's date is April 15th, 2025. + Pick only developers who are available after the project start date. + Pick people with higher skill levels first. + Respond in json with this structure: + {example_output} + + Here is the skills data: + """ + + return system_prompt + str(skills_data) + + +def user_prompt(): + return """ + This is a mobile project for telecommunication company. The project starts June 3rd. + It will find exciting moments from sports highlights videos. + """ diff --git a/integrations/opentelemetry/tests/fixtures/example_output.json b/integrations/opentelemetry/tests/fixtures/example_output.json new file mode 100644 index 0000000..09d45cc --- /dev/null +++ b/integrations/opentelemetry/tests/fixtures/example_output.json @@ -0,0 +1,24 @@ +{ + "developers": [ + { + "name": "Bob", + "availableStartDate": "2025-05-19T00:00:00Z", + "relevantSkills": [ + { + "skill": "Javascript", + "level": "3" + } + ] + }, + { + "name": "Alice", + "availableStartDate": "2025-05-19T00:00:00Z", + "relevantSkills": [ + { + "skill": "Python", + "level": "4" + } + ] + } + ] +} \ No newline at end of file diff --git a/integrations/opentelemetry/tests/fixtures/output_schema.json b/integrations/opentelemetry/tests/fixtures/output_schema.json new file mode 100644 index 0000000..098572c --- /dev/null +++ b/integrations/opentelemetry/tests/fixtures/output_schema.json @@ -0,0 +1,50 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "developers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "availableStartDate": { + "type": "string", + "format": "date-time" + }, + "relevantSkills": { + "type": "array", + "items": { + "type": "object", + "properties": { + "skill": { + "type": "string" + }, + "level": { + "type": "string" + } + }, + "required": [ + "skill", + "level" + ], + "additionalProperties": false + } + } + }, + "required": [ + "name", + "availableStartDate", + "relevantSkills" + ], + "additionalProperties": false + } + } + }, + "required": [ + "developers" + ], + "additionalProperties": false +} diff --git a/integrations/opentelemetry/tests/fixtures/skills.json b/integrations/opentelemetry/tests/fixtures/skills.json new file mode 100644 index 0000000..821da25 --- /dev/null +++ b/integrations/opentelemetry/tests/fixtures/skills.json @@ -0,0 +1,8580 @@ +{ + "skills": [ + { + "id": 1, + "name": "Python", + "developerSkills": [ + { + "developerId": 23, + "skillId": 1, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-15T00:00:00Z", + "endDate": "2025-04-15T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 1, + "skillLevel": 5, + "comment": "Worked for years in Python environment - personal favorite language", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-24T00:00:00Z", + "endDate": "2025-12-08T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 1, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-17T00:00:00Z", + "endDate": "2025-04-27T00:00:00Z" + } + }, + { + "developerId": 25, + "skillId": 1, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 25, + "email": "caseymoore@artium.ai", + "name": "Casey Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-05T00:00:00Z", + "endDate": "2025-07-29T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 1, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-14T00:00:00Z", + "endDate": "2025-09-27T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 1, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-19T00:00:00Z", + "endDate": "2025-08-06T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 1, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-03T00:00:00Z", + "endDate": "2025-04-26T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 1, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-31T00:00:00Z", + "endDate": "2025-07-23T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 1, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-13T00:00:00Z", + "endDate": "2025-07-16T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 1, + "skillLevel": 4, + "comment": "print(\"Know a thing or two about a thing or two.\")", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-28T00:00:00Z", + "endDate": "2025-02-28T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 1, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-25T00:00:00Z", + "endDate": "2025-03-02T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 1, + "skillLevel": 3, + "comment": "Was the primary language during the medical services engagement. Used the language to build a multi agent AI tool. ", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-13T00:00:00Z", + "endDate": "2025-02-28T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 1, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-28T00:00:00Z", + "endDate": "2025-04-22T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 1, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-19T00:00:00Z", + "endDate": "2025-11-01T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 1, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-14T00:00:00Z", + "endDate": "2025-10-31T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 1, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-11T00:00:00Z", + "endDate": "2025-02-22T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 1, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-18T00:00:00Z", + "endDate": "2025-07-24T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 1, + "skillLevel": 2, + "comment": "used professionally at video streaming company 2011-2012, but not much since", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-05T00:00:00Z", + "endDate": "2025-08-12T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 1, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-08T00:00:00Z", + "endDate": "2025-06-27T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 1, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-09-09T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 1, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-25T00:00:00Z", + "endDate": "2025-09-10T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 1, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-03T00:00:00Z", + "endDate": "2025-03-26T00:00:00Z" + } + }, + { + "developerId": 21, + "skillId": 1, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 21, + "email": "caseywilson@artium.ai", + "name": "Casey Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-07-05T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 1, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-27T00:00:00Z", + "endDate": "2025-08-28T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 1, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-26T00:00:00Z", + "endDate": "2025-08-28T00:00:00Z" + } + } + ] + }, + { + "id": 2, + "name": "Java", + "developerSkills": [ + { + "developerId": 14, + "skillId": 2, + "skillLevel": 5, + "comment": "Classically trained in Java through school, plus years of full-time experience\n\nPast projects:\n- banking project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-05T00:00:00Z", + "endDate": "2025-09-03T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 2, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-13T00:00:00Z", + "endDate": "2025-07-03T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 2, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-07T00:00:00Z", + "endDate": "2025-10-06T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 2, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-22T00:00:00Z", + "endDate": "2025-07-07T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 2, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-20T00:00:00Z", + "endDate": "2025-06-17T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 2, + "skillLevel": 4, + "comment": "~4 years of experience using it and used it on numerous engagements at a contracting company.", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-23T00:00:00Z", + "endDate": "2025-07-17T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 2, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-19T00:00:00Z", + "endDate": "2025-04-20T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 2, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-18T00:00:00Z", + "endDate": "2025-05-12T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 2, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-12T00:00:00Z", + "endDate": "2025-07-09T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 2, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-28T00:00:00Z", + "endDate": "2025-06-09T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 2, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-05T00:00:00Z", + "endDate": "2025-08-18T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 2, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-10-06T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 2, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-28T00:00:00Z", + "endDate": "2025-10-25T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 2, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-28T00:00:00Z", + "endDate": "2025-05-26T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 2, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-23T00:00:00Z", + "endDate": "2025-05-26T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 2, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-20T00:00:00Z", + "endDate": "2025-05-14T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 2, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-18T00:00:00Z", + "endDate": "2025-07-06T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 2, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-12T00:00:00Z", + "endDate": "2025-03-06T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 2, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-13T00:00:00Z", + "endDate": "2025-06-11T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 2, + "skillLevel": 2, + "comment": "Have written Java many moons ago.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-03T00:00:00Z", + "endDate": "2025-09-18T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 2, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-04T00:00:00Z", + "endDate": "2025-05-08T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 2, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-08T00:00:00Z", + "endDate": "2025-05-28T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 2, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-29T00:00:00Z", + "endDate": "2025-06-25T00:00:00Z" + } + } + ] + }, + { + "id": 3, + "name": "React", + "developerSkills": [ + { + "developerId": 19, + "skillId": 3, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-02T00:00:00Z", + "endDate": "2025-08-12T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 3, + "skillLevel": 5, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-17T00:00:00Z", + "endDate": "2025-06-04T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 3, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-28T00:00:00Z", + "endDate": "2025-07-04T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 3, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-03T00:00:00Z", + "endDate": "2025-09-20T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 3, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-14T00:00:00Z", + "endDate": "2025-09-12T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 3, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-07T00:00:00Z", + "endDate": "2025-10-17T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 3, + "skillLevel": 4, + "comment": "I want to see more of this in the wild", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-14T00:00:00Z", + "endDate": "2025-06-15T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 3, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-16T00:00:00Z", + "endDate": "2025-08-26T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 3, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-23T00:00:00Z", + "endDate": "2025-05-24T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 3, + "skillLevel": 4, + "comment": "Multiple engagements with React. ~6 years of experience using it. ", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-25T00:00:00Z", + "endDate": "2025-06-11T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 3, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-19T00:00:00Z", + "endDate": "2025-05-07T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 3, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-02T00:00:00Z", + "endDate": "2025-06-17T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 3, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-02T00:00:00Z", + "endDate": "2025-05-14T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 3, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-24T00:00:00Z", + "endDate": "2025-10-01T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 3, + "skillLevel": 3, + "comment": "Past projects: healthcare project, finance project, ai chatbot project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-07T00:00:00Z", + "endDate": "2025-08-28T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 3, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-27T00:00:00Z", + "endDate": "2025-03-15T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 3, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-04T00:00:00Z", + "endDate": "2025-05-12T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 3, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-04-10T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 3, + "skillLevel": 3, + "comment": "Developed React Apps for a government project. Would have trouble spinning up a new react app from scratch for a Production-worthy application.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-08T00:00:00Z", + "endDate": "2025-04-10T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 3, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-26T00:00:00Z", + "endDate": "2025-06-16T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 3, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-25T00:00:00Z", + "endDate": "2025-03-23T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 3, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-26T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 3, + "skillLevel": 2, + "comment": "in professional project but only few weeks", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-02T00:00:00Z", + "endDate": "2025-06-21T00:00:00Z" + } + } + ] + }, + { + "id": 4, + "name": "Rails", + "developerSkills": [ + { + "developerId": 22, + "skillId": 4, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-24T00:00:00Z", + "endDate": "2025-06-01T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 4, + "skillLevel": 4, + "comment": "Learned in during a government project. ", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-30T00:00:00Z", + "endDate": "2025-05-18T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 4, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-13T00:00:00Z", + "endDate": "2025-04-22T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 4, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-11-08T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 4, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-17T00:00:00Z", + "endDate": "2025-06-18T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 4, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-30T00:00:00Z", + "endDate": "2025-10-08T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 4, + "skillLevel": 3, + "comment": "I'd prefer to avoid Rails where possible", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-06T00:00:00Z", + "endDate": "2025-07-18T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 4, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-09T00:00:00Z", + "endDate": "2025-06-20T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 4, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-12T00:00:00Z", + "endDate": "2025-08-03T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 4, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-14T00:00:00Z", + "endDate": "2025-02-13T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 4, + "skillLevel": 2, + "comment": "used professionally, but years ago, much older verison that what's current", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-08T00:00:00Z", + "endDate": "2025-09-04T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 4, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-17T00:00:00Z", + "endDate": "2025-04-07T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 4, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-26T00:00:00Z", + "endDate": "2025-10-02T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 4, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-24T00:00:00Z", + "endDate": "2025-08-22T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 4, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-27T00:00:00Z", + "endDate": "2025-06-02T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 4, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-13T00:00:00Z", + "endDate": "2025-07-10T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 4, + "skillLevel": 2, + "comment": "Worked in Rails on a government project.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-14T00:00:00Z", + "endDate": "2025-06-02T00:00:00Z" + } + } + ] + }, + { + "id": 6, + "name": "Elixir", + "developerSkills": [ + { + "developerId": 4, + "skillId": 6, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-15T00:00:00Z", + "endDate": "2025-07-09T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 6, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-05T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 6, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-28T00:00:00Z", + "endDate": "2025-11-24T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 6, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-07T00:00:00Z", + "endDate": "2025-09-22T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 6, + "skillLevel": 2, + "comment": "have opinions when it should be used", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-09T00:00:00Z", + "endDate": "2025-09-17T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 6, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-25T00:00:00Z", + "endDate": "2025-07-22T00:00:00Z" + } + } + ] + }, + { + "id": 7, + "name": "Digital Accessibility", + "developerSkills": [ + { + "developerId": 19, + "skillId": 7, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-09T00:00:00Z", + "endDate": "2025-04-30T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 7, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-02T00:00:00Z", + "endDate": "2025-06-04T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 7, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-14T00:00:00Z", + "endDate": "2025-07-16T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 7, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-04T00:00:00Z", + "endDate": "2025-08-30T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 7, + "skillLevel": 2, + "comment": "I have more experience & interest in accessibility than most other devs I've worked with, but the bar is *very* low, so I'd only rate myself at an intermediate level.", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-04T00:00:00Z", + "endDate": "2025-10-28T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 7, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-28T00:00:00Z", + "endDate": "2025-10-30T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 7, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-12T00:00:00Z", + "endDate": "2025-09-03T00:00:00Z" + } + } + ] + }, + { + "id": 8, + "name": "Vector Databases", + "developerSkills": [ + { + "developerId": 26, + "skillId": 8, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-24T00:00:00Z", + "endDate": "2025-06-20T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 8, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-26T00:00:00Z", + "endDate": "2025-07-31T00:00:00Z" + } + }, + { + "developerId": 25, + "skillId": 8, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 25, + "email": "caseymoore@artium.ai", + "name": "Casey Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-08T00:00:00Z", + "endDate": "2025-08-09T00:00:00Z" + } + }, + { + "developerId": 21, + "skillId": 8, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 21, + "email": "caseywilson@artium.ai", + "name": "Casey Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-14T00:00:00Z", + "endDate": "2025-02-17T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 8, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-16T00:00:00Z", + "endDate": "2025-08-08T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 8, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-13T00:00:00Z", + "endDate": "2025-03-27T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 8, + "skillLevel": 3, + "comment": "Past projects:\n- ai chatbot", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-02T00:00:00Z", + "endDate": "2025-07-16T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 8, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-14T00:00:00Z", + "endDate": "2025-08-25T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 8, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-08T00:00:00Z", + "endDate": "2025-11-27T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 8, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-05-09T00:00:00Z" + } + } + ] + }, + { + "id": 9, + "name": "LLM APIs", + "developerSkills": [ + { + "developerId": 26, + "skillId": 9, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-24T00:00:00Z", + "endDate": "2025-09-13T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 9, + "skillLevel": 5, + "comment": "and can make them work reliably", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-19T00:00:00Z", + "endDate": "2025-08-26T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 9, + "skillLevel": 4, + "comment": "Been deep in the weeds in this", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-04T00:00:00Z", + "endDate": "2025-06-07T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 9, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-07T00:00:00Z", + "endDate": "2025-08-25T00:00:00Z" + } + }, + { + "developerId": 25, + "skillId": 9, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 25, + "email": "caseymoore@artium.ai", + "name": "Casey Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-10T00:00:00Z", + "endDate": "2025-06-22T00:00:00Z" + } + }, + { + "developerId": 21, + "skillId": 9, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 21, + "email": "caseywilson@artium.ai", + "name": "Casey Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-02T00:00:00Z", + "endDate": "2025-05-06T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 9, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-14T00:00:00Z", + "endDate": "2025-04-26T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 9, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-13T00:00:00Z", + "endDate": "2025-06-18T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 9, + "skillLevel": 3, + "comment": "Past projects:\n- ai chatbot", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-07-21T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 9, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-01T00:00:00Z", + "endDate": "2025-08-24T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 9, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-15T00:00:00Z", + "endDate": "2025-05-24T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 9, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-26T00:00:00Z", + "endDate": "2025-09-07T00:00:00Z" + } + } + ] + }, + { + "id": 10, + "name": "Remix", + "developerSkills": [ + { + "developerId": 24, + "skillId": 10, + "skillLevel": 4, + "comment": "I'd love to build out a large scale application using Remix", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-03T00:00:00Z", + "endDate": "2025-09-20T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 10, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-11T00:00:00Z", + "endDate": "2025-08-19T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 10, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-25T00:00:00Z", + "endDate": "2025-08-24T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 10, + "skillLevel": 1, + "comment": "Looked into hello world app on the beach", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-09T00:00:00Z", + "endDate": "2025-06-05T00:00:00Z" + } + } + ] + }, + { + "id": 11, + "name": "React Native", + "developerSkills": [ + { + "developerId": 24, + "skillId": 11, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-15T00:00:00Z", + "endDate": "2025-10-21T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 11, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-04T00:00:00Z", + "endDate": "2025-09-16T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 11, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-15T00:00:00Z", + "endDate": "2025-10-20T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 11, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-08T00:00:00Z", + "endDate": "2025-05-28T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 11, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-07T00:00:00Z", + "endDate": "2025-06-08T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 11, + "skillLevel": 2, + "comment": "Minor usage in the past", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-07T00:00:00Z", + "endDate": "2025-09-27T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 11, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-03T00:00:00Z", + "endDate": "2025-08-28T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 11, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-18T00:00:00Z", + "endDate": "2025-05-02T00:00:00Z" + } + } + ] + }, + { + "id": 12, + "name": "C++", + "developerSkills": [ + { + "developerId": 18, + "skillId": 12, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-20T00:00:00Z", + "endDate": "2025-05-28T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 12, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-16T00:00:00Z", + "endDate": "2025-09-27T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 12, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-19T00:00:00Z", + "endDate": "2025-10-13T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 12, + "skillLevel": 3, + "comment": "I haven't used it since 2004. I still know the basics but lots has changed in the landscape for the language.", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-26T00:00:00Z", + "endDate": "2025-08-18T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 12, + "skillLevel": 2, + "comment": "used professionally (including TDD!) but only one one client engagement at a software consultancy; otherwise, my experience is in college classes", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-22T00:00:00Z", + "endDate": "2025-09-08T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 12, + "skillLevel": 2, + "comment": "Used this during my college days, along with C.", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-18T00:00:00Z", + "endDate": "2025-08-19T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 12, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-14T00:00:00Z", + "endDate": "2025-06-08T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 12, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-10T00:00:00Z", + "endDate": "2025-09-25T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 12, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-26T00:00:00Z", + "endDate": "2025-09-20T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 12, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-21T00:00:00Z", + "endDate": "2025-03-20T00:00:00Z" + } + } + ] + }, + { + "id": 13, + "name": "NoSQL", + "developerSkills": [ + { + "developerId": 26, + "skillId": 13, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-03T00:00:00Z", + "endDate": "2025-05-28T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 13, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-31T00:00:00Z", + "endDate": "2025-09-30T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 13, + "skillLevel": 4, + "comment": "MongoDB", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-09T00:00:00Z", + "endDate": "2025-11-14T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 13, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-08T00:00:00Z", + "endDate": "2025-07-18T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 13, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-01T00:00:00Z", + "endDate": "2025-07-21T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 13, + "skillLevel": 4, + "comment": "Have quite a bit of experience with NoSQL databases such as DynamoDB, Cassandra, Mongo, etc.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-21T00:00:00Z", + "endDate": "2025-10-09T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 13, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-31T00:00:00Z", + "endDate": "2025-09-06T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 13, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-27T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 13, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-07T00:00:00Z", + "endDate": "2025-06-09T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 13, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-11T00:00:00Z", + "endDate": "2025-09-08T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 13, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-20T00:00:00Z", + "endDate": "2025-04-03T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 13, + "skillLevel": 3, + "comment": "I have used as an independent contractor, and on Past projects\n\nPast projects:\n- bank project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-29T00:00:00Z", + "endDate": "2025-05-01T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 13, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-15T00:00:00Z", + "endDate": "2025-07-19T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 13, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-20T00:00:00Z", + "endDate": "2025-07-18T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 13, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-04T00:00:00Z", + "endDate": "2025-05-26T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 13, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-14T00:00:00Z", + "endDate": "2025-05-13T00:00:00Z" + } + } + ] + }, + { + "id": 14, + "name": "SQL", + "developerSkills": [ + { + "developerId": 4, + "skillId": 14, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-22T00:00:00Z", + "endDate": "2025-07-13T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 14, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-01T00:00:00Z", + "endDate": "2025-06-13T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 14, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-07T00:00:00Z", + "endDate": "2025-07-07T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 14, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-31T00:00:00Z", + "endDate": "2025-07-28T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 14, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-05T00:00:00Z", + "endDate": "2025-05-04T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 14, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-26T00:00:00Z", + "endDate": "2025-07-27T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 14, + "skillLevel": 4, + "comment": "Used SQL technologies in various forms throughout career\n\nPast projects:\n- healthcare project, bank project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-27T00:00:00Z", + "endDate": "2025-09-09T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 14, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-17T00:00:00Z", + "endDate": "2025-09-05T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 14, + "skillLevel": 4, + "comment": "SELECT * FROM know_things;", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-13T00:00:00Z", + "endDate": "2025-06-04T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-24T00:00:00Z", + "endDate": "2025-04-04T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-08-20T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-17T00:00:00Z", + "endDate": "2025-11-07T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 14, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-17T00:00:00Z", + "endDate": "2025-05-18T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-18T00:00:00Z", + "endDate": "2025-07-21T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-27T00:00:00Z", + "endDate": "2025-04-14T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-29T00:00:00Z", + "endDate": "2025-07-05T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-10T00:00:00Z", + "endDate": "2025-04-23T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 14, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-05T00:00:00Z", + "endDate": "2025-07-20T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-06T00:00:00Z", + "endDate": "2025-08-11T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-22T00:00:00Z", + "endDate": "2025-05-31T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 14, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-25T00:00:00Z", + "endDate": "2025-11-18T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 14, + "skillLevel": 2, + "comment": "I'm no DBA, but I get queries done", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-24T00:00:00Z", + "endDate": "2025-07-27T00:00:00Z" + } + } + ] + }, + { + "id": 15, + "name": "Apache Spark", + "developerSkills": [ + { + "developerId": 13, + "skillId": 15, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-06T00:00:00Z", + "endDate": "2025-06-15T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 15, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-25T00:00:00Z", + "endDate": "2025-04-13T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 15, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 15, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-04T00:00:00Z", + "endDate": "2025-06-06T00:00:00Z" + } + } + ] + }, + { + "id": 16, + "name": ".NET", + "developerSkills": [ + { + "developerId": 19, + "skillId": 16, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-20T00:00:00Z", + "endDate": "2025-03-07T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 16, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-05T00:00:00Z", + "endDate": "2025-10-03T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 16, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-18T00:00:00Z", + "endDate": "2025-04-03T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 16, + "skillLevel": 3, + "comment": "C# on an construction managment engagement in 2023-2024", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-22T00:00:00Z", + "endDate": "2025-07-30T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 16, + "skillLevel": 3, + "comment": "Used it on a couple client engagements in the past. Used it on a construction managment. ", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-30T00:00:00Z", + "endDate": "2025-07-28T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 16, + "skillLevel": 3, + "comment": "Not my favorite language, but have used it professionally.\n\nPast projects: resale project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-17T00:00:00Z", + "endDate": "2025-09-15T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 16, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-05T00:00:00Z", + "endDate": "2025-06-13T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 16, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-04T00:00:00Z", + "endDate": "2025-09-29T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 16, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-10T00:00:00Z", + "endDate": "2025-09-30T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 16, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-12T00:00:00Z", + "endDate": "2025-04-15T00:00:00Z" + } + } + ] + }, + { + "id": 17, + "name": "Node", + "developerSkills": [ + { + "developerId": 24, + "skillId": 17, + "skillLevel": 5, + "comment": "I want to do more work using node.js", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-04T00:00:00Z", + "endDate": "2025-04-05T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 17, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-15T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-14T00:00:00Z", + "endDate": "2025-07-31T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-24T00:00:00Z", + "endDate": "2025-11-15T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-24T00:00:00Z", + "endDate": "2025-04-02T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 17, + "skillLevel": 4, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-19T00:00:00Z", + "endDate": "2025-08-05T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-05T00:00:00Z", + "endDate": "2025-09-08T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-01T00:00:00Z", + "endDate": "2025-06-09T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 17, + "skillLevel": 4, + "comment": "Previous experience outside of Artium.\n\nPast projects: a resale platform - a financial project\n- an ai chatpot", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-02T00:00:00Z", + "endDate": "2025-07-21T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-19T00:00:00Z", + "endDate": "2025-08-21T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-26T00:00:00Z", + "endDate": "2025-08-15T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 17, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-23T00:00:00Z", + "endDate": "2025-07-24T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 17, + "skillLevel": 4, + "comment": "Have worked with many node apps in different run times.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-25T00:00:00Z", + "endDate": "2025-10-09T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 17, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-08T00:00:00Z", + "endDate": "2025-05-11T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 17, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-25T00:00:00Z", + "endDate": "2025-07-22T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 17, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-04T00:00:00Z", + "endDate": "2025-04-11T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 17, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-20T00:00:00Z", + "endDate": "2025-11-14T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 17, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-03T00:00:00Z", + "endDate": "2025-05-08T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 17, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-07-01T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 17, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-28T00:00:00Z", + "endDate": "2025-12-19T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 17, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-08T00:00:00Z", + "endDate": "2025-07-18T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 17, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-19T00:00:00Z", + "endDate": "2025-04-02T00:00:00Z" + } + } + ] + }, + { + "id": 18, + "name": "Kubernetes", + "developerSkills": [ + { + "developerId": 26, + "skillId": 18, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-27T00:00:00Z", + "endDate": "2025-06-24T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 18, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-01T00:00:00Z", + "endDate": "2025-05-11T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 18, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-25T00:00:00Z", + "endDate": "2025-06-19T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 18, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-26T00:00:00Z", + "endDate": "2025-07-09T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 18, + "skillLevel": 3, + "comment": "low side of competent", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-02T00:00:00Z", + "endDate": "2025-07-31T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 18, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-04T00:00:00Z", + "endDate": "2025-09-10T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 18, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-04T00:00:00Z", + "endDate": "2025-07-03T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 18, + "skillLevel": 3, + "comment": "Know the bits and bobs and how the fit together. Would prefer to use anything else (joke).", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-02T00:00:00Z", + "endDate": "2025-09-20T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 18, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-12T00:00:00Z", + "endDate": "2025-09-05T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 18, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-11T00:00:00Z", + "endDate": "2025-06-30T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 18, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-05T00:00:00Z", + "endDate": "2025-07-03T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 18, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-02T00:00:00Z", + "endDate": "2025-10-23T00:00:00Z" + } + } + ] + }, + { + "id": 19, + "name": "GraphQL", + "developerSkills": [ + { + "developerId": 18, + "skillId": 19, + "skillLevel": 5, + "comment": "with sub schemas, validation and serialization and Appollo ", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-13T00:00:00Z", + "endDate": "2025-11-04T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 19, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-14T00:00:00Z", + "endDate": "2025-08-21T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 19, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-27T00:00:00Z", + "endDate": "2025-07-24T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 19, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-17T00:00:00Z", + "endDate": "2025-04-22T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 19, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-05T00:00:00Z", + "endDate": "2025-06-14T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 19, + "skillLevel": 4, + "comment": "Have worked with GraphQL APIs in several professional contexts.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-03T00:00:00Z", + "endDate": "2025-05-15T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 19, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-08T00:00:00Z", + "endDate": "2025-11-19T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 19, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-02T00:00:00Z", + "endDate": "2025-03-11T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 19, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-23T00:00:00Z", + "endDate": "2025-11-29T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 19, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-03T00:00:00Z", + "endDate": "2025-08-24T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 19, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-20T00:00:00Z", + "endDate": "2025-08-09T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 19, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-02T00:00:00Z", + "endDate": "2025-09-15T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 19, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-18T00:00:00Z", + "endDate": "2025-09-10T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 19, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-06T00:00:00Z", + "endDate": "2025-02-15T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 19, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-01T00:00:00Z", + "endDate": "2025-08-09T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 19, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-21T00:00:00Z", + "endDate": "2025-08-12T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 19, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-29T00:00:00Z", + "endDate": "2025-07-17T00:00:00Z" + } + } + ] + }, + { + "id": 20, + "name": "TypeScript", + "developerSkills": [ + { + "developerId": 24, + "skillId": 20, + "skillLevel": 5, + "comment": "This is my best language", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-12T00:00:00Z", + "endDate": "2025-09-18T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 20, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-07T00:00:00Z", + "endDate": "2025-05-16T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 20, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-31T00:00:00Z", + "endDate": "2025-06-18T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 20, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-07T00:00:00Z", + "endDate": "2025-04-12T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 20, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-27T00:00:00Z", + "endDate": "2025-07-04T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 20, + "skillLevel": 4, + "comment": "Typescript is probably my favorite language right now, actually! Used on 3 engagements at a software consultancy, 3 years at other companies, and 1 engagement at Artium", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-25T00:00:00Z", + "endDate": "2025-07-08T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 20, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-28T00:00:00Z", + "endDate": "2025-10-30T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 20, + "skillLevel": 4, + "comment": "Multiple engagements with React. ~6 years of experience using it. Used it for both backend and frontend.", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-14T00:00:00Z", + "endDate": "2025-08-22T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 20, + "skillLevel": 4, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-28T00:00:00Z", + "endDate": "2025-07-11T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 20, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-11T00:00:00Z", + "endDate": "2025-06-05T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 20, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-25T00:00:00Z", + "endDate": "2025-10-19T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 20, + "skillLevel": 4, + "comment": "Past projects:\n- healthcare\n- sales\n- financial\n- banking\n- ai chatbot", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-18T00:00:00Z", + "endDate": "2025-07-22T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 20, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-05T00:00:00Z", + "endDate": "2025-06-03T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 20, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-13T00:00:00Z", + "endDate": "2025-08-04T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 20, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-25T00:00:00Z", + "endDate": "2025-09-21T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 20, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-12T00:00:00Z", + "endDate": "2025-03-20T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 20, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-10-11T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 20, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-22T00:00:00Z", + "endDate": "2025-11-30T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 20, + "skillLevel": 3, + "comment": "new Skill competency since Dec 2023", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-29T00:00:00Z", + "endDate": "2025-08-02T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 20, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-15T00:00:00Z", + "endDate": "2025-11-04T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 20, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-20T00:00:00Z", + "endDate": "2025-05-06T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 20, + "skillLevel": 3, + "comment": "Can write typescript apps just fine, have more to learn about tool chain and environment.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-24T00:00:00Z", + "endDate": "2025-05-17T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 20, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-30T00:00:00Z", + "endDate": "2025-07-13T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 20, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-24T00:00:00Z", + "endDate": "2025-08-05T00:00:00Z" + } + } + ] + }, + { + "id": 21, + "name": "Angular", + "developerSkills": [ + { + "developerId": 17, + "skillId": 21, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-16T00:00:00Z", + "endDate": "2025-07-11T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 21, + "skillLevel": 3, + "comment": "I don't like angular and would prefer not to work with it", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-30T00:00:00Z", + "endDate": "2025-06-07T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 21, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-19T00:00:00Z", + "endDate": "2025-05-07T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 21, + "skillLevel": 3, + "comment": "angular is awful, don't use it. ", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-23T00:00:00Z", + "endDate": "2025-05-04T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 21, + "skillLevel": 3, + "comment": "Past projects:\n- bank project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-22T00:00:00Z", + "endDate": "2025-08-12T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 21, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-13T00:00:00Z", + "endDate": "2025-05-15T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 21, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-21T00:00:00Z", + "endDate": "2025-08-03T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 21, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-06T00:00:00Z", + "endDate": "2025-09-01T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 21, + "skillLevel": 2, + "comment": "1-2 client engagements using Angular. Not the biggest fan. ", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-21T00:00:00Z", + "endDate": "2025-10-05T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 21, + "skillLevel": 2, + "comment": "Used Angular 2/4 in professional setting a LONG time ago.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-03T00:00:00Z", + "endDate": "2025-03-27T00:00:00Z" + } + } + ] + }, + { + "id": 22, + "name": "Docker", + "developerSkills": [ + { + "developerId": 8, + "skillId": 22, + "skillLevel": 5, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-03T00:00:00Z", + "endDate": "2025-07-03T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 22, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-19T00:00:00Z", + "endDate": "2025-07-04T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-24T00:00:00Z", + "endDate": "2025-09-16T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-11T00:00:00Z", + "endDate": "2025-06-29T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-21T00:00:00Z", + "endDate": "2025-03-27T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-02T00:00:00Z", + "endDate": "2025-09-14T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-06T00:00:00Z", + "endDate": "2025-06-12T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-10T00:00:00Z", + "endDate": "2025-11-02T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-29T00:00:00Z", + "endDate": "2025-07-14T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 22, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-15T00:00:00Z", + "endDate": "2025-04-20T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 22, + "skillLevel": 4, + "comment": "Used to working on Docker-ized apps, can build multi-target dockerfiles. etc.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-07T00:00:00Z", + "endDate": "2025-05-18T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-22T00:00:00Z", + "endDate": "2025-09-27T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-25T00:00:00Z", + "endDate": "2025-04-27T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-30T00:00:00Z", + "endDate": "2025-06-19T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-25T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-27T00:00:00Z", + "endDate": "2025-09-15T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-28T00:00:00Z", + "endDate": "2025-09-12T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-21T00:00:00Z", + "endDate": "2025-05-26T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 22, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-20T00:00:00Z", + "endDate": "2025-07-11T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 22, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-17T00:00:00Z", + "endDate": "2025-06-09T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 22, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-01T00:00:00Z", + "endDate": "2025-07-17T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 22, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-26T00:00:00Z", + "endDate": "2025-09-11T00:00:00Z" + } + } + ] + }, + { + "id": 23, + "name": "Terraform", + "developerSkills": [ + { + "developerId": 7, + "skillId": 23, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-04T00:00:00Z", + "endDate": "2025-07-03T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 23, + "skillLevel": 4, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-26T00:00:00Z", + "endDate": "2025-03-09T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 23, + "skillLevel": 4, + "comment": "Am not Terra-fied of Terraform.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-16T00:00:00Z", + "endDate": "2025-07-03T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-19T00:00:00Z", + "endDate": "2025-10-04T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-10T00:00:00Z", + "endDate": "2025-03-22T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-11T00:00:00Z", + "endDate": "2025-07-14T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-29T00:00:00Z", + "endDate": "2025-07-12T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-10T00:00:00Z", + "endDate": "2025-08-23T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-26T00:00:00Z", + "endDate": "2025-12-08T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-15T00:00:00Z", + "endDate": "2025-05-06T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-31T00:00:00Z", + "endDate": "2025-05-30T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 23, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-02T00:00:00Z", + "endDate": "2025-04-06T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 23, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-18T00:00:00Z", + "endDate": "2025-10-18T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 23, + "skillLevel": 2, + "comment": "Created a couple of services via Terraform. Would love to get more experience with Terraform. ", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-26T00:00:00Z", + "endDate": "2025-04-25T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 23, + "skillLevel": 2, + "comment": "used professionally, but not as \"lead\" dev", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-11T00:00:00Z", + "endDate": "2025-07-27T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 23, + "skillLevel": 2, + "comment": "Past projects:\n- healthcare", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-08T00:00:00Z", + "endDate": "2025-04-28T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 23, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-08T00:00:00Z", + "endDate": "2025-08-31T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 23, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-16T00:00:00Z", + "endDate": "2025-08-08T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 23, + "skillLevel": 1, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-19T00:00:00Z", + "endDate": "2025-05-12T00:00:00Z" + } + } + ] + }, + { + "id": 24, + "name": "Machine Learning", + "developerSkills": [ + { + "developerId": 21, + "skillId": 24, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 21, + "email": "caseywilson@artium.ai", + "name": "Casey Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-18T00:00:00Z", + "endDate": "2025-06-12T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 24, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-19T00:00:00Z", + "endDate": "2025-07-21T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 24, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-08T00:00:00Z", + "endDate": "2025-09-20T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 24, + "skillLevel": 3, + "comment": "CoreML on macOS and iOS, Hugging Face models hosted and standalone", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-19T00:00:00Z", + "endDate": "2025-07-18T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 24, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-24T00:00:00Z", + "endDate": "2025-06-12T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 24, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-08T00:00:00Z", + "endDate": "2025-02-19T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 24, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-30T00:00:00Z", + "endDate": "2025-05-25T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 24, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-06-22T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 24, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-07T00:00:00Z", + "endDate": "2025-08-11T00:00:00Z" + } + } + ] + }, + { + "id": 25, + "name": "CI/CD", + "developerSkills": [ + { + "developerId": 8, + "skillId": 25, + "skillLevel": 5, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-24T00:00:00Z", + "endDate": "2025-08-11T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 25, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-19T00:00:00Z", + "endDate": "2025-10-06T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 25, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-23T00:00:00Z", + "endDate": "2025-09-08T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 25, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-09T00:00:00Z", + "endDate": "2025-05-22T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 25, + "skillLevel": 5, + "comment": "including reliability tests, and deflaking", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-02T00:00:00Z", + "endDate": "2025-06-25T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 25, + "skillLevel": 4, + "comment": "I do it on every project", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-14T00:00:00Z", + "endDate": "2025-08-10T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 25, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-28T00:00:00Z", + "endDate": "2025-09-05T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 25, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-25T00:00:00Z", + "endDate": "2025-07-22T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 25, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-16T00:00:00Z", + "endDate": "2025-09-05T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 25, + "skillLevel": 4, + "comment": "Github Actions, Gitlab, Jenkins, Concourse", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-04T00:00:00Z", + "endDate": "2025-06-04T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 25, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-19T00:00:00Z", + "endDate": "2025-08-28T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 25, + "skillLevel": 4, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-01T00:00:00Z", + "endDate": "2025-06-11T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 25, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-10T00:00:00Z", + "endDate": "2025-04-16T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 25, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-20T00:00:00Z", + "endDate": "2025-05-30T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 25, + "skillLevel": 4, + "comment": "Plumbing for development speed.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-05T00:00:00Z", + "endDate": "2025-10-18T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 25, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-02T00:00:00Z", + "endDate": "2025-08-12T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 25, + "skillLevel": 3, + "comment": "mostly GitHub Actions, some amount of Azure DevOps", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-01T00:00:00Z", + "endDate": "2025-10-11T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 25, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-21T00:00:00Z", + "endDate": "2025-08-06T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 25, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-16T00:00:00Z", + "endDate": "2025-06-20T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 25, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-23T00:00:00Z", + "endDate": "2025-06-22T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 25, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-11T00:00:00Z", + "endDate": "2025-06-08T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 25, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-07T00:00:00Z", + "endDate": "2025-08-13T00:00:00Z" + } + } + ] + }, + { + "id": 26, + "name": "Clojure", + "developerSkills": [ + { + "developerId": 15, + "skillId": 26, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-09T00:00:00Z", + "endDate": "2025-07-11T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 26, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-16T00:00:00Z", + "endDate": "2025-03-18T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 26, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-10T00:00:00Z", + "endDate": "2025-07-11T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 26, + "skillLevel": 2, + "comment": "Briefly worked in Clojure in professional setting. Would prefer to write anything but.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-16T00:00:00Z", + "endDate": "2025-10-08T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 26, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-20T00:00:00Z", + "endDate": "2025-07-26T00:00:00Z" + } + } + ] + }, + { + "id": 27, + "name": "Rust", + "developerSkills": [ + { + "developerId": 24, + "skillId": 27, + "skillLevel": 3, + "comment": "If I could do an engagement with Rust I would love you forever", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-12T00:00:00Z", + "endDate": "2025-10-08T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 27, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-26T00:00:00Z", + "endDate": "2025-08-13T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 27, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-06T00:00:00Z", + "endDate": "2025-08-23T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 27, + "skillLevel": 2, + "comment": "I've done side projects in rust, but I'm not good at it!", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-16T00:00:00Z", + "endDate": "2025-08-30T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 27, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-27T00:00:00Z", + "endDate": "2025-10-11T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 27, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-19T00:00:00Z", + "endDate": "2025-06-23T00:00:00Z" + } + } + ] + }, + { + "id": 28, + "name": "Kotlin", + "developerSkills": [ + { + "developerId": 30, + "skillId": 28, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-30T00:00:00Z", + "endDate": "2025-07-23T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 28, + "skillLevel": 4, + "comment": "Only used Kotlin for building backend services, never for mobile development. Have roughly 4 years of experience with it. Used it on numerous engagement during my time at software consultancy. ", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-20T00:00:00Z", + "endDate": "2025-09-16T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 28, + "skillLevel": 4, + "comment": "Mostly used with Android (mobile), but also useful for backend and for cross-platform mobile development (KMP).", + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-20T00:00:00Z", + "endDate": "2025-07-12T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 28, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-09T00:00:00Z", + "endDate": "2025-10-02T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 28, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-18T00:00:00Z", + "endDate": "2025-07-05T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 28, + "skillLevel": 3, + "comment": "on a government mobile engagement in 2023", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-06T00:00:00Z", + "endDate": "2025-06-01T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 28, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-18T00:00:00Z", + "endDate": "2025-04-04T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 28, + "skillLevel": 3, + "comment": "Past projects:\n- healthcare", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-09T00:00:00Z", + "endDate": "2025-09-20T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 28, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-19T00:00:00Z", + "endDate": "2025-09-13T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 28, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-05T00:00:00Z", + "endDate": "2025-05-28T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 28, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-11T00:00:00Z", + "endDate": "2025-09-02T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 28, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-27T00:00:00Z", + "endDate": "2025-09-04T00:00:00Z" + } + } + ] + }, + { + "id": 29, + "name": "AWS", + "developerSkills": [ + { + "developerId": 2, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-03T00:00:00Z", + "endDate": "2025-09-22T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-16T00:00:00Z", + "endDate": "2025-05-28T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-08T00:00:00Z", + "endDate": "2025-05-11T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 29, + "skillLevel": 4, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-02T00:00:00Z", + "endDate": "2025-06-30T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-08T00:00:00Z", + "endDate": "2025-08-05T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-29T00:00:00Z", + "endDate": "2025-12-24T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-12T00:00:00Z", + "endDate": "2025-05-09T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 29, + "skillLevel": 4, + "comment": "comfortable, but not expert", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-11T00:00:00Z", + "endDate": "2025-05-11T00:00:00Z" + } + }, + { + "developerId": 25, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 25, + "email": "caseymoore@artium.ai", + "name": "Casey Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-08T00:00:00Z", + "endDate": "2025-09-09T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-17T00:00:00Z", + "endDate": "2025-08-08T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 29, + "skillLevel": 4, + "comment": "Largely understand all of the pieces and how the fit together for developing various applications and architectures. Would struggle to set up and manage a new account for enterprise-level clients.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-22T00:00:00Z", + "endDate": "2025-05-24T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 29, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-09T00:00:00Z", + "endDate": "2025-08-29T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-25T00:00:00Z", + "endDate": "2025-09-25T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-27T00:00:00Z", + "endDate": "2025-05-04T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-05T00:00:00Z", + "endDate": "2025-06-23T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-19T00:00:00Z", + "endDate": "2025-06-06T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-05-18T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 29, + "skillLevel": 3, + "comment": "Past projects:\n- healthcare\n- ai chatbot", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-09T00:00:00Z", + "endDate": "2025-03-12T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-22T00:00:00Z", + "endDate": "2025-08-02T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 29, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-25T00:00:00Z", + "endDate": "2025-05-19T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-29T00:00:00Z", + "endDate": "2025-10-24T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 29, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-12T00:00:00Z", + "endDate": "2025-08-05T00:00:00Z" + } + }, + { + "developerId": 19, + "skillId": 29, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 19, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-06T00:00:00Z", + "endDate": "2025-08-30T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 29, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-14T00:00:00Z", + "endDate": "2025-09-11T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 29, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-05T00:00:00Z", + "endDate": "2025-07-04T00:00:00Z" + } + } + ] + }, + { + "id": 30, + "name": "Go", + "developerSkills": [ + { + "developerId": 30, + "skillId": 30, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-07T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 30, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-07-19T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 30, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-16T00:00:00Z", + "endDate": "2025-11-11T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 30, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-03T00:00:00Z", + "endDate": "2025-06-04T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 30, + "skillLevel": 2, + "comment": "Used professionally in a few settings but only a little bit of experience total.", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-03T00:00:00Z", + "endDate": "2025-08-15T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 30, + "skillLevel": 2, + "comment": "Worked in Go once long a-Go.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-30T00:00:00Z", + "endDate": "2025-11-15T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 30, + "skillLevel": 1, + "comment": "I disliked the one small PR I made to an open source project using Go. I'm not especially excited to do more with it.", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-15T00:00:00Z", + "endDate": "2025-07-21T00:00:00Z" + } + } + ] + }, + { + "id": 31, + "name": "iOS", + "developerSkills": [ + { + "developerId": 18, + "skillId": 31, + "skillLevel": 5, + "comment": "macOS, VisionPro, watchOS, iPadOS", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-08T00:00:00Z", + "endDate": "2025-09-09T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 31, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-07T00:00:00Z", + "endDate": "2025-05-22T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 31, + "skillLevel": 3, + "comment": "I have done iOS (mostly Swift) development as an independent contractor\n\nPast projects:\n- educational project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-17T00:00:00Z", + "endDate": "2025-08-12T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 31, + "skillLevel": 2, + "comment": "Objective-C, *not* Swift; used professionally for a few months on a client engagement in 2016", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-23T00:00:00Z", + "endDate": "2025-05-31T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 31, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-23T00:00:00Z", + "endDate": "2025-10-12T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 31, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-24T00:00:00Z", + "endDate": "2025-05-30T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 31, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-11T00:00:00Z", + "endDate": "2025-07-30T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 31, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-28T00:00:00Z", + "endDate": "2025-09-08T00:00:00Z" + } + } + ] + }, + { + "id": 32, + "name": "GCP", + "developerSkills": [ + { + "developerId": 26, + "skillId": 32, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-04T00:00:00Z", + "endDate": "2025-04-15T00:00:00Z" + } + }, + { + "developerId": 25, + "skillId": 32, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 25, + "email": "caseymoore@artium.ai", + "name": "Casey Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-25T00:00:00Z", + "endDate": "2025-09-17T00:00:00Z" + } + }, + { + "developerId": 12, + "skillId": 32, + "skillLevel": 4, + "comment": "Am a Certified Professional Google Cloud Developer (pats self on back)", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-13T00:00:00Z", + "endDate": "2025-09-20T00:00:00Z" + } + }, + { + "developerId": 7, + "skillId": 32, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 7, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-04T00:00:00Z", + "endDate": "2025-09-16T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 32, + "skillLevel": 3, + "comment": "Was the primary platform on a healthcare project. Leveraged Terraform to create the GCP infrastructure to run a full stack app", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-21T00:00:00Z", + "endDate": "2025-09-01T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 32, + "skillLevel": 3, + "comment": null, + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-10T00:00:00Z", + "endDate": "2025-08-18T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 32, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-22T00:00:00Z", + "endDate": "2025-07-30T00:00:00Z" + } + }, + { + "developerId": 13, + "skillId": 32, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-15T00:00:00Z", + "endDate": "2025-07-13T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 32, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-10T00:00:00Z", + "endDate": "2025-07-04T00:00:00Z" + } + }, + { + "developerId": 2, + "skillId": 32, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 2, + "email": "taylorwilson@artium.ai", + "name": "Taylor Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-11T00:00:00Z", + "endDate": "2025-02-17T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 32, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-30T00:00:00Z", + "endDate": "2025-06-30T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 32, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-12T00:00:00Z", + "endDate": "2025-04-09T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 32, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-24T00:00:00Z", + "endDate": "2025-05-31T00:00:00Z" + } + } + ] + }, + { + "id": 33, + "name": "Swift", + "developerSkills": [ + { + "developerId": 18, + "skillId": 33, + "skillLevel": 5, + "comment": "macOS, VisionPro, watchOS, iPadOS, iOS", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-23T00:00:00Z", + "endDate": "2025-08-24T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 33, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-09T00:00:00Z", + "endDate": "2025-05-09T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 33, + "skillLevel": 3, + "comment": "I have done iOS Swift development as an independent contractor", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-15T00:00:00Z", + "endDate": "2025-06-25T00:00:00Z" + } + }, + { + "developerId": 6, + "skillId": 33, + "skillLevel": 2, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-22T00:00:00Z", + "endDate": "2025-06-03T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 33, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-17T00:00:00Z", + "endDate": "2025-07-23T00:00:00Z" + } + }, + { + "developerId": 10, + "skillId": 33, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 10, + "email": "jamiejohnson@artium.ai", + "name": "Jamie Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-10T00:00:00Z", + "endDate": "2025-07-27T00:00:00Z" + } + } + ] + }, + { + "id": 34, + "name": "Android", + "developerSkills": [ + { + "developerId": 6, + "skillId": 34, + "skillLevel": 5, + "comment": null, + "developer": { + "id": 6, + "email": "drewanderson@artium.ai", + "name": "Drew Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-26T00:00:00Z", + "endDate": "2025-08-11T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 34, + "skillLevel": 3, + "comment": "Kotlin on the a government mobile engagement in 2023", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-09-30T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 34, + "skillLevel": 3, + "comment": "I have done Android development (Java) as an independent contractor\n\nPast projects:\n- educational project", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-27T00:00:00Z", + "endDate": "2025-06-13T00:00:00Z" + } + }, + { + "developerId": 11, + "skillId": 34, + "skillLevel": 3, + "comment": "Haven't used it in production since 20015ish. It was around android 5. I can navigate with the android studio ide, simulator, material design, etc. Not sure how system/UI libs have changed", + "developer": { + "id": 11, + "email": "sammiller@artium.ai", + "name": "Sam Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-16T00:00:00Z", + "endDate": "2025-08-06T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 34, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-23T00:00:00Z", + "endDate": "2025-09-19T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 34, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-26T00:00:00Z", + "endDate": "2025-03-03T00:00:00Z" + } + } + ] + }, + { + "id": 35, + "name": "Azure", + "developerSkills": [ + { + "developerId": 13, + "skillId": 35, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 13, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-03T00:00:00Z", + "endDate": "2025-06-22T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 35, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-14T00:00:00Z", + "endDate": "2025-05-04T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 35, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-01T00:00:00Z", + "endDate": "2025-09-12T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 35, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-27T00:00:00Z", + "endDate": "2025-09-18T00:00:00Z" + } + }, + { + "developerId": 16, + "skillId": 35, + "skillLevel": 2, + "comment": "used professionally on a construction managemnt project in 2023-2024, but only at an intermediate level", + "developer": { + "id": 16, + "email": "morganbrown@artium.ai", + "name": "Morgan Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-07T00:00:00Z", + "endDate": "2025-08-18T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 35, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-10T00:00:00Z", + "endDate": "2025-11-02T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 35, + "skillLevel": 2, + "comment": "Past projects:\n- financial services", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-16T00:00:00Z", + "endDate": "2025-04-22T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 35, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-13T00:00:00Z", + "endDate": "2025-11-03T00:00:00Z" + } + } + ] + }, + { + "id": 36, + "name": "Serverless Architectures", + "developerSkills": [ + { + "developerId": 12, + "skillId": 36, + "skillLevel": 4, + "comment": "Have quite a bit of experience building API, ETL, and Event-based systems with Serverless technologies.", + "developer": { + "id": 12, + "email": "taylorjohnson@artium.ai", + "name": "Taylor Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-23T00:00:00Z", + "endDate": "2025-08-16T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 36, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-16T00:00:00Z", + "endDate": "2025-06-14T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 36, + "skillLevel": 3, + "comment": "I have done Serverless as an independent contractor (AWS Lambda)\n\nPast projects:\n- consumer sales (AWS)\n- financial services (Azure)", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-13T00:00:00Z", + "endDate": "2025-05-21T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 36, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-10T00:00:00Z", + "endDate": "2025-02-13T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 36, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-21T00:00:00Z", + "endDate": "2025-07-10T00:00:00Z" + } + }, + { + "developerId": 15, + "skillId": 36, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 15, + "email": "caseythomas@artium.ai", + "name": "Casey Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-05T00:00:00Z", + "endDate": "2025-07-01T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 36, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-12T00:00:00Z", + "endDate": "2025-11-14T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 36, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-23T00:00:00Z", + "endDate": "2025-08-11T00:00:00Z" + } + } + ] + }, + { + "id": 37, + "name": "Prompt engineering", + "developerSkills": [ + { + "developerId": 21, + "skillId": 37, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 21, + "email": "caseywilson@artium.ai", + "name": "Casey Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-10T00:00:00Z", + "endDate": "2025-06-27T00:00:00Z" + } + }, + { + "developerId": 18, + "skillId": 37, + "skillLevel": 5, + "comment": "with tests", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-05T00:00:00Z", + "endDate": "2025-08-01T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 37, + "skillLevel": 4, + "comment": "I've built a plethora of AI applications at this point", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-28T00:00:00Z", + "endDate": "2025-09-13T00:00:00Z" + } + }, + { + "developerId": 4, + "skillId": 37, + "skillLevel": 4, + "comment": "Assuming this is prompt engineering in the app-dev sense, vs the ML sense, as these are different things.", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-14T00:00:00Z", + "endDate": "2025-08-11T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 37, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-14T00:00:00Z", + "endDate": "2025-08-04T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 37, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-05T00:00:00Z", + "endDate": "2025-10-31T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 37, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-02T00:00:00Z", + "endDate": "2025-06-26T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 37, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-18T00:00:00Z", + "endDate": "2025-06-27T00:00:00Z" + } + }, + { + "developerId": 8, + "skillId": 37, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 8, + "email": "alexwilson@artium.ai", + "name": "Alex Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-27T00:00:00Z", + "endDate": "2025-03-19T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 37, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-21T00:00:00Z", + "endDate": "2025-10-25T00:00:00Z" + } + } + ] + }, + { + "id": 38, + "name": "Spring Boot", + "developerSkills": [ + { + "developerId": 26, + "skillId": 38, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-06T00:00:00Z", + "endDate": "2025-06-11T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 38, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-19T00:00:00Z", + "endDate": "2025-08-07T00:00:00Z" + } + }, + { + "developerId": 9, + "skillId": 38, + "skillLevel": 4, + "comment": "Used on numerous consultancy engagements. ~6 years of experience with it. Used both using both Java and Kotlin. But its been a couple years since I last used it, a bit rusty.", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-14T00:00:00Z", + "endDate": "2025-05-08T00:00:00Z" + } + }, + { + "developerId": 23, + "skillId": 38, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-24T00:00:00Z", + "endDate": "2025-09-08T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 38, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-23T00:00:00Z", + "endDate": "2025-09-27T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 38, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-08T00:00:00Z", + "endDate": "2025-02-25T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 38, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-06T00:00:00Z", + "endDate": "2025-06-20T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 38, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-19T00:00:00Z", + "endDate": "2025-06-18T00:00:00Z" + } + }, + { + "developerId": 24, + "skillId": 38, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-16T00:00:00Z", + "endDate": "2025-08-05T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 38, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-13T00:00:00Z", + "endDate": "2025-08-09T00:00:00Z" + } + } + ] + }, + { + "id": 39, + "name": "Ktor", + "developerSkills": [ + { + "developerId": 9, + "skillId": 39, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 9, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-29T00:00:00Z", + "endDate": "2025-06-01T00:00:00Z" + } + } + ] + }, + { + "id": 40, + "name": "Kafka", + "developerSkills": [ + { + "developerId": 4, + "skillId": 40, + "skillLevel": 5, + "comment": "Prior to working at Artium, I spent most of the last 5 years working on a large, event-driven system using Kafka. I did not do most of the cluster maintenance, but I'm conversant on that end of it, and I managed to run into a *lot* of the gotchas around using Kafka in applications during that time.", + "developer": { + "id": 4, + "email": "samjohnson@artium.ai", + "name": "Sam Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-02T00:00:00Z", + "endDate": "2025-03-22T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 40, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-21T00:00:00Z", + "endDate": "2025-06-12T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 40, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-05T00:00:00Z", + "endDate": "2025-07-24T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 40, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-27T00:00:00Z", + "endDate": "2025-06-22T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 40, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-28T00:00:00Z", + "endDate": "2025-11-03T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 40, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-13T00:00:00Z", + "endDate": "2025-05-14T00:00:00Z" + } + } + ] + }, + { + "id": 41, + "name": "CSS", + "developerSkills": [ + { + "developerId": 24, + "skillId": 41, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-10T00:00:00Z", + "endDate": "2025-06-19T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 41, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-27T00:00:00Z", + "endDate": "2025-09-06T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 41, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-06T00:00:00Z", + "endDate": "2025-06-01T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 41, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-17T00:00:00Z", + "endDate": "2025-10-11T00:00:00Z" + } + }, + { + "developerId": 14, + "skillId": 41, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 14, + "email": "blakewilson@artium.ai", + "name": "Blake Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-22T00:00:00Z", + "endDate": "2025-06-04T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 41, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-04T00:00:00Z", + "endDate": "2025-03-12T00:00:00Z" + } + }, + { + "developerId": 29, + "skillId": 41, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 29, + "email": "tayloranderson@artium.ai", + "name": "Taylor Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-20T00:00:00Z", + "endDate": "2025-05-02T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 41, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-17T00:00:00Z", + "endDate": "2025-05-06T00:00:00Z" + } + } + ] + }, + { + "id": 42, + "name": "Svelte", + "developerSkills": [ + { + "developerId": 22, + "skillId": 42, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-18T00:00:00Z", + "endDate": "2025-07-19T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 42, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-28T00:00:00Z", + "endDate": "2025-08-17T00:00:00Z" + } + } + ] + }, + { + "id": 43, + "name": "Information Security", + "developerSkills": [ + { + "developerId": 23, + "skillId": 43, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-21T00:00:00Z", + "endDate": "2025-08-18T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 43, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-15T00:00:00Z", + "endDate": "2025-06-11T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 43, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-09T00:00:00Z", + "endDate": "2025-06-01T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 43, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-12T00:00:00Z", + "endDate": "2025-05-09T00:00:00Z" + } + }, + { + "developerId": 27, + "skillId": 43, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 27, + "email": "taylorbrown@artium.ai", + "name": "Taylor Brown", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-11T00:00:00Z", + "endDate": "2025-10-06T00:00:00Z" + } + }, + { + "developerId": 17, + "skillId": 43, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 17, + "email": "jamiemiller@artium.ai", + "name": "Jamie Miller", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-12T00:00:00Z", + "endDate": "2025-08-02T00:00:00Z" + } + } + ] + }, + { + "id": 44, + "name": "Application Security", + "developerSkills": [ + { + "developerId": 23, + "skillId": 44, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 23, + "email": "jamiemoore@artium.ai", + "name": "Jamie Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-02T00:00:00Z", + "endDate": "2025-07-12T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 44, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-14T00:00:00Z", + "endDate": "2025-05-21T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 44, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-19T00:00:00Z", + "endDate": "2025-05-24T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 44, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-11T00:00:00Z", + "endDate": "2025-09-06T00:00:00Z" + } + } + ] + }, + { + "id": 45, + "name": "Elm", + "developerSkills": [ + { + "developerId": 24, + "skillId": 45, + "skillLevel": 2, + "comment": "I would love to write more Elm code!", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-01T00:00:00Z", + "endDate": "2025-05-15T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 45, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-16T00:00:00Z", + "endDate": "2025-08-19T00:00:00Z" + } + } + ] + }, + { + "id": 46, + "name": "Solidity", + "developerSkills": [ + { + "developerId": 26, + "skillId": 46, + "skillLevel": 4, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-26T00:00:00Z", + "endDate": "2025-03-29T00:00:00Z" + } + }, + { + "developerId": 22, + "skillId": 46, + "skillLevel": 3, + "comment": "", + "developer": { + "id": 22, + "email": "samwilson@artium.ai", + "name": "Sam Wilson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-04-05T00:00:00Z", + "endDate": "2025-05-14T00:00:00Z" + } + } + ] + }, + { + "id": 47, + "name": "Rust", + "developerSkills": [ + { + "developerId": 24, + "skillId": 47, + "skillLevel": 3, + "comment": "If I could do an engagement with Rust I would love you forever", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-01T00:00:00Z", + "endDate": "2025-06-23T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 47, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-19T00:00:00Z", + "endDate": "2025-10-10T00:00:00Z" + } + } + ] + }, + { + "id": 48, + "name": "Lua", + "developerSkills": [ + { + "developerId": 24, + "skillId": 48, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 24, + "email": "blakejohnson@artium.ai", + "name": "Blake Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-03-18T00:00:00Z", + "endDate": "2025-05-23T00:00:00Z" + } + }, + { + "developerId": 26, + "skillId": 48, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 26, + "email": "blakedavis@artium.ai", + "name": "Blake Davis", + "archivedDate": null + }, + "availability": { + "startDate": "2025-06-02T00:00:00Z", + "endDate": "2025-08-13T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 48, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-28T00:00:00Z", + "endDate": "2025-03-23T00:00:00Z" + } + } + ] + }, + { + "id": 49, + "name": "CAT Testing", + "developerSkills": [ + { + "developerId": 18, + "skillId": 49, + "skillLevel": 5, + "comment": "across multiple projects", + "developer": { + "id": 18, + "email": "samthomas@artium.ai", + "name": "Sam Thomas", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-09T00:00:00Z", + "endDate": "2025-06-01T00:00:00Z" + } + }, + { + "developerId": 25, + "skillId": 49, + "skillLevel": 5, + "comment": "", + "developer": { + "id": 25, + "email": "caseymoore@artium.ai", + "name": "Casey Moore", + "archivedDate": null + }, + "availability": { + "startDate": "2025-01-13T00:00:00Z", + "endDate": "2025-03-31T00:00:00Z" + } + }, + { + "developerId": 20, + "skillId": 49, + "skillLevel": 2, + "comment": "", + "developer": { + "id": 20, + "email": "alexanderson@artium.ai", + "name": "Alex Anderson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-02-24T00:00:00Z", + "endDate": "2025-04-06T00:00:00Z" + } + }, + { + "developerId": 30, + "skillId": 49, + "skillLevel": 1, + "comment": "", + "developer": { + "id": 30, + "email": "alexjohnson@artium.ai", + "name": "Alex Johnson", + "archivedDate": null + }, + "availability": { + "startDate": "2025-05-24T00:00:00Z", + "endDate": "2025-07-19T00:00:00Z" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/integrations/opentelemetry/tests/helpers.py b/integrations/opentelemetry/tests/helpers.py new file mode 100644 index 0000000..5b6e9c0 --- /dev/null +++ b/integrations/opentelemetry/tests/helpers.py @@ -0,0 +1,19 @@ +import json +from pathlib import Path + + +def root_path() -> Path: + """Returns the absolute path to the root of the project.""" + return Path(__file__).parent.parent.resolve() + + +def load_json_fixture(file_name: str) -> dict: + """ + Utility function to load a JSON fixture file. + + :param file_name: Name of the JSON file to load. + :return: Parsed JSON data as a dictionary. + """ + json_path = root_path() / "tests" / "fixtures" / file_name + with open(json_path, "r") as file: + return json.load(file) diff --git a/pyproject.toml b/pyproject.toml index f5d8b86..60a1dd3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ default-groups = ["test", "examples", "dev"] asyncio_mode = "auto" pythonpath = [".", "src"] testpaths = ["tests"] -faulthandler_timeout = "100" +faulthandler_timeout = 100 addopts = "-xvs --showlocals" #log_cli = true log_cli_level = "DEBUG"