diff --git a/Portfolio.Domain/Features/Portfolio/ProjectEntry.cs b/Portfolio.Domain/Features/Portfolio/ProjectEntry.cs new file mode 100644 index 0000000..1c58b40 --- /dev/null +++ b/Portfolio.Domain/Features/Portfolio/ProjectEntry.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Portfolio.Domain.Features.Portfolio +{ + public class ProjectEntry + { + public string Title { get; set; } + public List Descriptions { get; set; } + public List Links { get; set; } + } +} diff --git a/Portfolio.Domain/Features/Portfolio/ProjectLink.cs b/Portfolio.Domain/Features/Portfolio/ProjectLink.cs new file mode 100644 index 0000000..6654a62 --- /dev/null +++ b/Portfolio.Domain/Features/Portfolio/ProjectLink.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Portfolio.Domain.Features.Portfolio +{ + public class ProjectLink + { + public string Type { get; set; } + public string Url { get; set; } + public string Label { get; set; } + } +} diff --git a/Portfolio.WebUI.Server/Components/Component/Crochet Components/TemperatureBlanketVisualizer.razor b/Portfolio.WebUI.Server/Components/Component/Crochet Components/TemperatureBlanketVisualizer.razor index c4af1e8..7ff48a2 100644 --- a/Portfolio.WebUI.Server/Components/Component/Crochet Components/TemperatureBlanketVisualizer.razor +++ b/Portfolio.WebUI.Server/Components/Component/Crochet Components/TemperatureBlanketVisualizer.razor @@ -1,7 +1,7 @@ @attribute [StreamRendering] @rendermode InteractiveServer -
+
@if (TemperatureDays is null || TemperatureRanges is null) { @@ -9,7 +9,7 @@ else { -

Temperature Blanket Visualizer

+

Temperature Blanket Visualizer

diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor index 82cb01e..293109c 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonTable.razor @@ -6,11 +6,11 @@ @rendermode InteractiveServer -
+
-
+
-
+
@@ -22,8 +22,8 @@
-
- +
+
@@ -113,6 +113,7 @@ + } } diff --git a/Portfolio.WebUI.Server/Components/Pages/Crochet Pages/CrochetHome.razor b/Portfolio.WebUI.Server/Components/Pages/Crochet Pages/CrochetHome.razor index 335b6f9..9ade692 100644 --- a/Portfolio.WebUI.Server/Components/Pages/Crochet Pages/CrochetHome.razor +++ b/Portfolio.WebUI.Server/Components/Pages/Crochet Pages/CrochetHome.razor @@ -6,7 +6,7 @@ Crochet Tools -

Crochet

+@*

Crochet

*@
diff --git a/Portfolio.WebUI.Server/Components/Pages/Home.razor b/Portfolio.WebUI.Server/Components/Pages/Home.razor index b658b23..28c87d6 100644 --- a/Portfolio.WebUI.Server/Components/Pages/Home.razor +++ b/Portfolio.WebUI.Server/Components/Pages/Home.razor @@ -12,12 +12,13 @@
+
- +
-
+
I am a full-stack web developer with additional experience in Data Analysis and Visualization, as well as Simulation/VR development, and AI/ML programming. @@ -28,7 +29,7 @@
-
+

September 2018 – March 2022

B.S. in Computer Science

@@ -37,6 +38,7 @@

Dean’s List: Fall 2020, Fall 2021

Final GPA: 3.33

+ @**@
@@ -71,13 +73,13 @@
-
+
-
+
@if (skills == null) {
Loading...
@@ -96,14 +98,14 @@
-
+
-
+
@if (tools == null) {
Loading...
@@ -125,6 +127,7 @@
+
@@ -164,94 +167,58 @@ {
Projects
-
-
-

Temperature Blanket Visualizer

-

Useful tool to help visualize and refine blanket planning for crochet temperature blankets. -

-

A personal project, but a fun one. -

- - - - - - -
-
+ @if (projects == null) + { +

Loading projects...

+ } + else + { + @foreach (var project in projects) + { +
+
+ +

@project.Title

-
-
-

PokemonSleep Toolset

-

A webpage constructed for the purposes of assisting players in the mobile game, Pokemon Sleep. Featuring a Pokemon Rater that derives ratings utilizing this publically available spreadsheet constructed by other fans of the game. -

-

A personal project, but a fun one. -

- - - - - - -
-
+ @foreach (var desc in project.Descriptions) + { +

@((MarkupString)FormatDescription(desc))

+ } -
-
-

AI-Driven D&D 5E Character Generator with React, Next.js, and OpenAI GPT-3 Engine

-

Creates a credible D&D 5E character sheet, including backstory, based on user input. Ex."I would like to play a magical elf." Or "I want to smash things with a big hammer." Would result in the AI choosing the best character to play with given the limitations and rules of the game (class, race, etc). The user would still be able to customize their character afterwards, and be prompted if they happen to “break” the rules of character generation; i.e. too many skill points assigned. -

-

Lead development in core functionality, including front and back-end development. Developed all JavaScript components and pages including the deterministic logic depending on decisions made by the AI, and the styling using the emotion library. -

- CS 494 Hall of Fame recipient. - - - - - -
-
+ @if (project.Links?.Any() == true) + { +
+ @foreach (var link in project.Links) + { + @switch (link.Type) + { + case "external": + @link.Label + break; + case "internal": + + + + + + + break; + case "github": + + + + + + break; -
-
-

iOS Gesture Alphabet with Swift and CoreML

-

iOS keyboard extension that translates movements made by the user’s phone to corresponding letters. The model used has been trained with Apple’s CoreML to follow the user’s movements as though they were writing them in the air, through the detection of the device’s sensors, primarily through roll/pitch/yaw. Developed as a means of accessibility for users who may not be able to use a traditional phone keyboard effectively. -

-

SCRUM team lead and lead developer during each phase of project lifecycle. Collected, cleaned, trained and tested model with data personally collected and collected by other users. Developed core functionality, including keyboard extension interface and translation of motion to letter. -

- - - - - -
-
- -
-
-

Android Mobile App with Backend PokeAPI and Java

-

Using the PokeAPI, created the app “UltimateDex”, which acts as a complete Pokedex from the series Pokemon. Accesses all possible Pokemon, allows the user to search, filter their searches, and save entries to their personal repository for easy retrieval. Each entry when selected comes with its own page which displays all relevant information regarding the entry, including the image associated with the Pokemon, and styled similarly to that of the series. -

- - - - - -
-
- -
-
-

NodeJS WebApp with MYSQL Database and Handlebars

-

Fantasy task-assignment system. Utilizes MYSQL to organize and contain guilds, “quests” posted to the forum/board, and guild members whose accounts are associated with the webapp. Handlebars template to display contents, NodeJS to serve. -

- - - - - -
-
+ } + } +
+ } +
+
+ } + } }
@@ -263,9 +230,12 @@
-

Hello, World!

+
+

Hello, World!

+ +
-
+
@@ -362,145 +332,108 @@
-
+
- -
-
+ +
+
-
- -
-
- - +
+ +
+
+ + +
-
-
-
- @if (isExperience) - { -
- Experience -
- @if (experiences == null) +
+
+ @if (isExperience) { -
Loading...
+
+ Experience +
+ @if (experiences == null) + { +
Loading...
+ } + else + { + @foreach (var experience in experiences) + { +
+
+

@experience.StartYear – @experience.EndYear

+

@experience.Title - @experience.Company

+

@experience.Details

+
+
+ } + } + + } + else if (isProjects) + { +
Projects
+ + @if (projects == null) + { +

Loading projects...

} else { - @foreach (var experience in experiences) + @foreach (var project in projects) {
-

@experience.StartYear – @experience.EndYear

-

@experience.Title - @experience.Company

-

@experience.Details

+ +

@project.Title

+ + @foreach (var desc in project.Descriptions) + { +

@((MarkupString)FormatDescription(desc))

+ } + + @if (project.Links?.Any() == true) + { +
+ @foreach (var link in project.Links) + { + @switch (link.Type) + { + case "external": + @link.Label + break; + case "internal": + + + + + + + break; + case "github": + + + + + + break; + + } + } +
+ }
} } - - } - else if (isProjects) - { -
Projects
- -
-
-

Temperature Blanket Visualizer

-

Useful tool to help visualize and refine blanket planning for crochet temperature blankets. -

-

A personal project, but a fun one. -

- - - - - - -
+ }
- -
-
-

PokemonSleep Toolset

-

A webpage constructed for the purposes of assisting players in the mobile game, Pokemon Sleep. Featuring a Pokemon Rater that derives ratings utilizing this publically available spreadsheet constructed by other fans of the game. -

-

A personal project, but a fun one. -

- - - - - - -
-
- -
-
-

AI-Driven D&D 5E Character Generator with React, Next.js, and OpenAI GPT-3 Engine

-

Creates a credible D&D 5E character sheet, including backstory, based on user input. Ex."I would like to play a magical elf." Or "I want to smash things with a big hammer." Would result in the AI choosing the best character to play with given the limitations and rules of the game (class, race, etc). The user would still be able to customize their character afterwards, and be prompted if they happen to “break” the rules of character generation; i.e. too many skill points assigned. -

-

Lead development in core functionality, including front and back-end development. Developed all JavaScript components and pages including the deterministic logic depending on decisions made by the AI, and the styling using the emotion library. -

- CS 494 Hall of Fame recipient. - - - - - -
-
- -
-
-

iOS Gesture Alphabet with Swift and CoreML

-

iOS keyboard extension that translates movements made by the user’s phone to corresponding letters. The model used has been trained with Apple’s CoreML to follow the user’s movements as though they were writing them in the air, through the detection of the device’s sensors, primarily through roll/pitch/yaw. Developed as a means of accessibility for users who may not be able to use a traditional phone keyboard effectively. -

-

SCRUM team lead and lead developer during each phase of project lifecycle. Collected, cleaned, trained and tested model with data personally collected and collected by other users. Developed core functionality, including keyboard extension interface and translation of motion to letter. -

- - - - - -
-
- -
-
-

Android Mobile App with Backend PokeAPI and Java

-

Using the PokeAPI, created the app “UltimateDex”, which acts as a complete Pokedex from the series Pokemon. Accesses all possible Pokemon, allows the user to search, filter their searches, and save entries to their personal repository for easy retrieval. Each entry when selected comes with its own page which displays all relevant information regarding the entry, including the image associated with the Pokemon, and styled similarly to that of the series. -

- - - - - -
-
- -
-
-

NodeJS WebApp with MYSQL Database and Handlebars

-

Fantasy task-assignment system. Utilizes MYSQL to organize and contain guilds, “quests” posted to the forum/board, and guild members whose accounts are associated with the webapp. Handlebars template to display contents, NodeJS to serve. -

- - - - - -
-
- - }
-
-
+
@@ -652,96 +585,60 @@ } else if (isProjects) { -
Projects
+
Projects
-
-
-

Temperature Blanket Visualizer

-

Useful tool to help visualize and refine blanket planning for crochet temperature blankets. -

-

A personal project, but a fun one. -

- - - - - - -
-
+ @if (projects == null) + { +

Loading projects...

+ } + else + { + @foreach (var project in projects) + { +
+
+ +

@project.Title

-
-
-

PokemonSleep Toolset

-

A webpage constructed for the purposes of assisting players in the mobile game, Pokemon Sleep. Featuring a Pokemon Rater that derives ratings utilizing this publically available spreadsheet constructed by other fans of the game. -

-

A personal project, but a fun one. -

- - - - - - -
-
+ @foreach (var desc in project.Descriptions) + { +

@((MarkupString)FormatDescription(desc))

+ } -
-
-

AI-Driven D&D 5E Character Generator with React, Next.js, and OpenAI GPT-3 Engine

-

Creates a credible D&D 5E character sheet, including backstory, based on user input. Ex."I would like to play a magical elf." Or "I want to smash things with a big hammer." Would result in the AI choosing the best character to play with given the limitations and rules of the game (class, race, etc). The user would still be able to customize their character afterwards, and be prompted if they happen to “break” the rules of character generation; i.e. too many skill points assigned. -

-

Lead development in core functionality, including front and back-end development. Developed all JavaScript components and pages including the deterministic logic depending on decisions made by the AI, and the styling using the emotion library. -

- CS 494 Hall of Fame recipient. - - - - - -
-
+ @if (project.Links?.Any() == true) + { +
+ @foreach (var link in project.Links) + { + @switch (link.Type) + { + case "external": + @link.Label + break; + case "internal": + + + + + + + break; + case "github": + + + + + + break; -
-
-

iOS Gesture Alphabet with Swift and CoreML

-

iOS keyboard extension that translates movements made by the user’s phone to corresponding letters. The model used has been trained with Apple’s CoreML to follow the user’s movements as though they were writing them in the air, through the detection of the device’s sensors, primarily through roll/pitch/yaw. Developed as a means of accessibility for users who may not be able to use a traditional phone keyboard effectively. -

-

SCRUM team lead and lead developer during each phase of project lifecycle. Collected, cleaned, trained and tested model with data personally collected and collected by other users. Developed core functionality, including keyboard extension interface and translation of motion to letter. -

- - - - - -
-
- -
-
-

Android Mobile App with Backend PokeAPI and Java

-

Using the PokeAPI, created the app “UltimateDex”, which acts as a complete Pokedex from the series Pokemon. Accesses all possible Pokemon, allows the user to search, filter their searches, and save entries to their personal repository for easy retrieval. Each entry when selected comes with its own page which displays all relevant information regarding the entry, including the image associated with the Pokemon, and styled similarly to that of the series. -

- - - - - -
-
- -
-
-

NodeJS WebApp with MYSQL Database and Handlebars

-

Fantasy task-assignment system. Utilizes MYSQL to organize and contain guilds, “quests” posted to the forum/board, and guild members whose accounts are associated with the webapp. Handlebars template to display contents, NodeJS to serve. -

- - - - - -
-
+ } + } +
+ } +
+
+ } + } }
@@ -752,7 +649,7 @@
-
+

Hello, World!

@@ -781,7 +678,7 @@
-
+

September 2018 – March 2022

B.S. in Computer Science

Oregon State University

@@ -879,106 +776,63 @@ } else if (isProjects) - { -
Projects
+ { +
Projects
-
+
-
    +
      + @foreach (var project in projects) + { +
      +
      + +

      @project.Title

      + @foreach (var desc in project.Descriptions) + { +

      @((MarkupString)FormatDescription(desc))

      + } -
      -
      -

      Temperature Blanket Visualizer

      -

      Useful tool to help visualize and refine blanket planning for crochet temperature blankets. -

      -

      A personal project, but a fun one. -

      - - - - - - -
      -
      + @if (project.Links?.Any() == true) + { +
      + @foreach (var link in project.Links) + { + @switch (link.Type) + { + case "external": + @link.Label + break; + case "internal": + + + + + + + break; + case "github": + + + + + + break; -
      -
      -

      PokemonSleep Toolset

      -

      A webpage constructed for the purposes of assisting players in the mobile game, Pokemon Sleep. Featuring a Pokemon Rater that derives ratings utilizing this publically available spreadsheet constructed by other fans of the game. -

      -

      A personal project, but a fun one. -

      - - - - - - -
      -
      - -
      -
      -

      AI-Driven D&D 5E Character Generator with React, Next.js, and OpenAI GPT-3 Engine

      -

      Creates a credible D&D 5E character sheet, including backstory, based on user input. Ex."I would like to play a magical elf." Or "I want to smash things with a big hammer." Would result in the AI choosing the best character to play with given the limitations and rules of the game (class, race, etc). The user would still be able to customize their character afterwards, and be prompted if they happen to “break” the rules of character generation; i.e. too many skill points assigned. -

      -

      Lead development in core functionality, including front and back-end development. Developed all JavaScript components and pages including the deterministic logic depending on decisions made by the AI, and the styling using the emotion library. -

      - CS 494 Hall of Fame recipient. - - - - - -
      -
      - -
      -
      -

      iOS Gesture Alphabet with Swift and CoreML

      -

      iOS keyboard extension that translates movements made by the user’s phone to corresponding letters. The model used has been trained with Apple’s CoreML to follow the user’s movements as though they were writing them in the air, through the detection of the device’s sensors, primarily through roll/pitch/yaw. Developed as a means of accessibility for users who may not be able to use a traditional phone keyboard effectively. -

      -

      SCRUM team lead and lead developer during each phase of project lifecycle. Collected, cleaned, trained and tested model with data personally collected and collected by other users. Developed core functionality, including keyboard extension interface and translation of motion to letter. -

      - - - - - -
      -
      - -
      -
      -

      Android Mobile App with Backend PokeAPI and Java

      -

      Using the PokeAPI, created the app “UltimateDex”, which acts as a complete Pokedex from the series Pokemon. Accesses all possible Pokemon, allows the user to search, filter their searches, and save entries to their personal repository for easy retrieval. Each entry when selected comes with its own page which displays all relevant information regarding the entry, including the image associated with the Pokemon, and styled similarly to that of the series. -

      - - - - - -
      -
      - -
      -
      -

      NodeJS WebApp with MYSQL Database and Handlebars

      -

      Fantasy task-assignment system. Utilizes MYSQL to organize and contain guilds, “quests” posted to the forum/board, and guild members whose accounts are associated with the webapp. Handlebars template to display contents, NodeJS to serve. -

      - - - - - -
      -
      + } + } +
      + } +
      +
      + } + +
    -
+
- } + }
diff --git a/Portfolio.WebUI.Server/Components/Pages/Home.razor.cs b/Portfolio.WebUI.Server/Components/Pages/Home.razor.cs index 853b289..a0c8ae4 100644 --- a/Portfolio.WebUI.Server/Components/Pages/Home.razor.cs +++ b/Portfolio.WebUI.Server/Components/Pages/Home.razor.cs @@ -1,4 +1,5 @@ using Portfolio.Domain.Features.Portfolio; +using static System.Net.WebRequestMethods; namespace Portfolio.WebUI.Server.Components.Pages { @@ -8,6 +9,7 @@ namespace Portfolio.WebUI.Server.Components.Pages private List tools; private List courses; private List experiences; + private List projects; private bool isExperience = true; private bool isProjects = false; @@ -19,6 +21,7 @@ namespace Portfolio.WebUI.Server.Components.Pages tools = await http.GetFromJsonAsync>("data/tools.json"); courses = await http.GetFromJsonAsync>("data/courses.json"); experiences = await http.GetFromJsonAsync>("data/workexperiences.json"); + projects = await http.GetFromJsonAsync>("data/projects.json"); } private void ToggleExperience() @@ -40,5 +43,11 @@ namespace Portfolio.WebUI.Server.Components.Pages StateHasChanged(); } } + + private string FormatDescription(string desc) + { + // Simple replacement for [text](url) markdown-style links + return System.Text.RegularExpressions.Regex.Replace(desc, @"\[(.+?)\]\((.+?)\)", "$1"); + } } } diff --git a/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor b/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor index ca8b40b..2ee6201 100644 --- a/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor +++ b/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor @@ -17,24 +17,22 @@ } else { -
+
-
-
-
-

Add New Pokémon

-
+
+
+

Add New Pokémon

-
- +
+ - +
-
+
# @@ -44,9 +42,9 @@ else
-
+
-
+
@@ -71,7 +69,7 @@ else
-
+
@@ -80,7 +78,7 @@ else
-
+
@@ -91,22 +89,23 @@ else
- -
-
+ +
+
-
- - Variation? +
+ + Variation?
-
+
+
@@ -125,9 +124,9 @@ else
-
- - +
+ +
diff --git a/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.css b/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.css index cd2085d..c52defd 100644 --- a/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.css +++ b/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.css @@ -4,6 +4,3 @@ border-radius: 15px; } -.checkbox-styling { - border: 1px solid black; -} diff --git a/Portfolio.WebUI.Server/wwwroot/data/projects.json b/Portfolio.WebUI.Server/wwwroot/data/projects.json index 017e533..9214087 100644 --- a/Portfolio.WebUI.Server/wwwroot/data/projects.json +++ b/Portfolio.WebUI.Server/wwwroot/data/projects.json @@ -1,7 +1,87 @@ [ { - "title": "AI-Driven D&D 5E Character Generator with React, Next.js, and OpenAI GPT-3 Engine", - "description": "Creates a credible D&D 5E character sheet, including backstory, based on user input. Ex.I would like to play a magical elf. Or I want to smash things with a big hammer. Would result in the AI choosing the best character to play with given the limitations and rules of the game (class, race, etc). The user would still be able to customize their character afterwards, and be prompted if they happen to break the rules of character generation; i.e. too many skill points assigned.", - "responsibilities": "Lead development in core functionality, including front and back-end development. Developed all JavaScript components and pages including the deterministic logic depending on decisions made by the AI, and the styling using the emotion library." + "title": "Temperature Blanket Visualizer", + "descriptions": [ + "Useful tool to help visualize and refine blanket planning for crochet temperature blankets.", + "A personal project, but a fun one." + ], + "links": [ + { + "type": "internal", + "url": "/pokemonsleep", + "icon": "code" + } + ] }, -] \ No newline at end of file + { + "title": "PokemonSleep Toolset", + "descriptions": [ + "A webpage constructed for assisting players in the mobile game Pokemon Sleep. Featuring a Pokemon Rater that derives ratings utilizing [this public spreadsheet](https://docs.google.com/spreadsheets/d/14nzQ--k4XhpFHI0qhgNRQlpWswh6WAxBCfq_QvIVZyI/edit?gid=339317073#gid=339317073).", + "A personal project, but a fun one." + ], + "links": [ + { + "type": "internal", + "url": "/pokemonsleep", + "icon": "code" + } + ] + }, + { + "title": "AI-Driven D&D 5E Character Generator with React, Next.js, and OpenAI GPT-3 Engine", + "descriptions": [ + "Creates a credible D&D 5E character sheet, including backstory, based on user input. Ex. 'I would like to play a magical elf.' or 'I want to smash things with a big hammer.' The AI chooses the best-fitting character while ensuring rules compliance.", + "Lead development in core functionality, including front and back-end logic and deterministic decision flows styled with Emotion." + ], + "links": [ + { + "type": "external", + "url": "https://web.engr.oregonstate.edu/~hessro/teaching/hof/cs494#w22", + "label": "CS 494 Hall of Fame" + }, + { + "type": "github", + "url": "https://github.com/tylertitsworth/ai-character-generator" + } + ] + }, + { + "title": "iOS Gesture Alphabet with Swift and CoreML", + "descriptions": [ + "iOS keyboard extension that translates movements made by the user’s phone to corresponding letters using CoreML. Developed as an accessibility solution for users who struggle with traditional keyboards.", + "SCRUM team lead. Collected, cleaned, trained, and tested the model. Developed core translation logic and interface." + ], + "links": [ + { + "type": "github", + "url": "https://github.com/kjiroux/iOS-Gesture-Alphabet" + } + ] + }, + { + "title": "Android Mobile App with Backend PokeAPI and Java", + "descriptions": [ + "Created 'UltimateDex', a complete Pokedex app accessing the PokeAPI. Users can search, filter, and save entries, with each entry displaying comprehensive information styled to match the series." + ], + "links": [ + { + "type": "github", + "url": "https://github.com/osu-cs492-w20/final-project-tamagucci/" + } + ] + }, + { + "title": "NodeJS WebApp with MYSQL Database and Handlebars", + "descriptions": [ + "Fantasy task-assignment system utilizing MYSQL to manage guilds, 'quests', and members. NodeJS for backend, Handlebars for templating." + ], + "links": [ + { + "type": "github", + "url": "https://github.com/yanyan2019/cs340_project/" + } + ] + } +] + +