Team Name: [URCC] - Undergraduate Research Coordinator Coordinators
Team members: Calvin Tu, Khoi Tran, Ping Cheng Chung
Date: November, 2020
Course: CS 4540, University of Utah, School of Computing
Copyright: CS 4540 and Calvin Tu, Khoi Minh Tran, Ping Cheng Chung - This work may not be copied for use in Academic Coursework.
Deployed URL: Calvin: http://ec2-75-101-242-168.compute-1.amazonaws.com/
Khoi: http://ec2-52-200-31-207.compute-1.amazonaws.com/
Ping: http://ec2-34-204-51-81.compute-1.amazonaws.com/
jQuery, Bootstrap, Sweetalert2, Google Chart
ASP.NET, Microsoft Identity Manager, Microsoft SQL Server, AntiForgeryToken, Hub
Please see final_report.pdf
- Resume upload works correctly. Resume is viewable online if pdf. Uploads are restricted to only .pdf, .doc, and .docx file types.
- File upload names are random GUIDs instead of trusting the user
- Many-to-Many tables are implemented for courses, interests, and skills
- Student search has search-as-you-type functionality (may be slow on ec2)
- Student search results have random profile pictures, but the data is still the same
- Spinners on image and resume upload
- Search, sort, and filter on Opportunities page are currently non-functional placeholders
- Image upload is under Opportunities/Edit
- GPA must be 0 - 4.0
- Degree plan can be up to 10 characters
- uID must match regex
- Availability must be 0 - 168 hours (because there are 168 hours in a week, even though ~80 would be normal max, 168 gives more flexibility in assignments)
- Personal statement must be 10 - 1000 characters
Authentication is ensuring users only see what they are allowed to whereas authorization is verifying who they claim to be. We made the "concise opportunities" view show professors only the opportunities which they own and so they do not see the create or delete options. Admins can bypass this restriction. Perhaps our best feature is that when creating a new opportunity, a dropdown menu shows all available professors and allows an administrator to create opportunities only for existing URC professors.
When creating an opportunity, there is a dropdown to show administrators all registered URC professors to make assigning a research opportunity to a professor much easier. The admin role management dashboard uses Sweet Alerts to improve the UI design.
We cleaned up various text and styling issues and other miscellaneous technical debt. We created a separate HTML layout for the home page since the styles on that page are full viewport-width whereas every other page is centered within a div.
We did implement skills and tags as a many-to-many relations. Skills is implemented specially, it has two many-to-many relationships between the Skills and Opportunities tables. This allows opportunities to distinguish between required and preferred skills without requiring two separate skills tables that would need to be synced.
Image upload was implemented, it can be found under Opportunities/Edit but not Opportunities/Create.
Bootstrap has helped us implement some basic interactive elements easily, and without JavaScript. Most prominently are the various dropdowns and the "Featured Research" image carousel on the main page. Its formatting and normalization CSS rules have made positioning things more consistent, including across browsers. Since we had prior experience with flexbox and grid however, custom CSS was as effective for layout and styles. Bootstrap helped the most for interactive elements that would otherwise require JavaScript.
Components used
- Carousel
- Dropdown
- .container, .container-fluid
- .d-flex, .align-items-*, .justify-content-*
- Various form elements (.form-group)
- Navbar
- .btn, .btn-primary, .btn-outline-primary
Our user interface makes the site more usable by considering user flows; what a user would do when the land on the site. First they are greeted by an attention-grabbing hero and are provided only two choices: log in if they know that they are going to look for research, or jump to featured research projects and testimonials if they are still unsure of the site. The opportunities and details page are designed to make information easily skimmable (e.g. the tags on each opportunity) to help users quickly find an opportunity they are interested in.
We have decided to create separate views of the site for students, professors, and admins since they have different concerns which, when mixed on a single page, would create friction for each user class. As such, the Opportunities page does not have any area to create a listing; instead we have (currently nonfunctioning) sort and filter controls that students can use to quickly find positions that they want. We plan to eventually have a login page that will redirect a user to the appropriate page. We modeled the site after Handshake and LinkedIn, since those sites serve a similar purpose of connecting people with employers.
N/A
N/A
- Bootstrap
- ASP.NET Core 3.1
- JSFiddle
- Stylelint
- System Font Stack - Geoff Graham - https://css-tricks.com/snippets/css/system-font-stack/
- LinkedIn - https://www.linkedin.com/
- Handshake - https://utah.joinhandshake.com/
- "Stop chrome from auto styling input type=search" - https://stackoverflow.com/questions/11538192/stop-chrome-from-auto-styling-input-type-search
- "How to Write a Perfect Website Hero Message" - https://www.trajectorywebdesign.com/blog/website-hero-message/
- btwnexhibits - https://www.btwnexhibits.com/
- background - https://developer.mozilla.org/en-US/docs/Web/CSS/background#%3Cbg-size%3E
- filter - https://developer.mozilla.org/en-US/docs/Web/CSS/filter
- Unicode Character 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK' (U+00BB) - http://www.fileformat.info/info/unicode/char/bb/index.htm
- Bootstrap Documentation (various pages) - https://getbootstrap.com/docs/4.0/getting-started/introduction/
- select - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select
- Forms - https://getbootstrap.com/docs/4.5/components/forms/
- How TO - Animated Search Form - https://www.w3schools.com/howto/howto_css_animated_search.asp
- textarea - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea
- Creating a help icon using CSS - https://stackoverflow.com/questions/29102646/creating-a-help-icon-using-css/29104375
- Tooltips - https://getbootstrap.com/docs/4.5/components/tooltips/
- What is the purpose of the
name
attribute in a checkbox input element? - https://stackoverflow.com/questions/3626883/what-is-the-purpose-of-the-name-attribute-in-a-checkbox-input-element - Razor Pages with Entity Framework Core in ASP.NET Core - Tutorial 1 of 8 - https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/intro?tabs=visual-studio&view=aspnetcore-3.1#startupcs-1
- Relationships (Many-to-Many) - https://docs.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key#other-relationship-patterns
- How to specify a composite primary key using EFCore Code First Migrations - https://stackoverflow.com/questions/51993903/how-to-specify-a-composite-primary-key-using-efcore-code-first-migrations
- Entity Properties - https://docs.microsoft.com/en-us/ef/core/modeling/entity-properties?tabs=data-annotations%2Cwithout-nrt
- System.ComponentModel.DataAnnotations Namespace - https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations?view=netcore-3.1
- Example of array.map() in C#? - https://stackoverflow.com/questions/32959468/example-of-array-map-in-c
- String.Join Method - https://docs.microsoft.com/en-us/dotnet/api/system.string.join?view=netcore-3.1
- [SOLVED] - Display only Date in @Html.DisplayFor() in MVC - https://entityframework.net/knowledge-base/26464319/display-only-date-in--html-displayfor---in-mvc
- GUID - how to generate GUID in C# - https://stackoverflow.com/questions/8477664/how-can-i-generate-uuid-in-c-sharp
- How to use data attributes - https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
- Configure ASP.NET Core Identity - https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-3.1
- Seed Users & Roles in ASP.NET Core with Entity Framework (EF) Core - https://deanilvincent.github.io/2019/11/22/seed-users-and-roles-in-asp-net-core-with-entity-framework-core/
- ASP.NET Core 3.x Authorize attribute not working - https://forums.asp.net/t/2162033.aspx?ASP+NET+Core+3+x+Authorize+attribute+not+working
- How do I specify different Layouts in the ASP.NET MVC 3 razor ViewStart file? - https://stackoverflow.com/questions/5161380/how-do-i-specify-different-layouts-in-the-asp-net-mvc-3-razor-viewstart-file/5161384
- Data Tables Full Getting Started Guide - https://datatables.net/manual/installation
- How to redraw DataTable with new data - https://stackoverflow.com/questions/25929347/how-to-redraw-datatable-with-new-data/25929434
- Get current user - https://stackoverflow.com/questions/38751616/asp-net-core-identity-get-current-user
- Escaping Razor View @ Symbol in MVC project - http://www.technicaloverload.com/escaping-razor-view-symbol-in-mvc-project/
- Sweet Alerts - https://sweetalert.js.org/guides/
- How generate a unique file name at upload files in webserver (MVC) - https://stackoverflow.com/questions/24625078/how-generate-a-unique-file-name-at-upload-files-in-webserver-mvc
- Redirect to Action in Another Controller - https://stackoverflow.com/questions/10785245/redirect-to-action-in-another-controller
- Relationships - https://docs.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key#required-and-optional-relationships
- Cards - https://getbootstrap.com/docs/4.0/components/card/
- Configuring One To Many Relationships in Entity Framework Core - https://www.learnentityframeworkcore.com/configuration/one-to-many-relationship-configuration
- How to properly exit a C# application - https://stackoverflow.com/questions/12977924/how-to-properly-exit-a-c-sharp-application
- Send __RequestVerificationToken with Fetch API and recieve with an [ValidateAntiForgeryToken] action - https://stackoverflow.com/questions/57727595/send-requestverificationtoken-with-fetch-api-and-recieve-with-an-validateanti
- jQuery.ajax() - https://api.jquery.com/jQuery.ajax/
- Open API v3 Specification - http://spec.openapis.org/oas/v3.0.3
- How to return a specific status code and no contents from Controller? - https://stackoverflow.com/questions/37690114/how-to-return-a-specific-status-code-and-no-contents-from-controller
- How do you detect the clearing of a search html5 input - https://stackoverflow.com/questions/2977023/how-do-you-detect-the-clearing-of-a-search-html5-input
- Spinners - https://getbootstrap.com/docs/4.4/components/spinners/
- Add custom user data to the Identity DB - https://docs.microsoft.com/en-us/aspnet/core/security/authentication/add-user-data?view=aspnetcore-3.1&tabs=visual-studio#add-custom-user-data-to-the-identity-db
- Customize the model - https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-3.1#customize-the-model
- How to enumerate an enum - https://stackoverflow.com/questions/105372/how-to-enumerate-an-enum
- Route name - https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0#route-name
- Asp.net Identity 2.0 - Unique Email - https://stackoverflow.com/questions/27515561/asp-net-identity-2-0-unique-email
- How can I force entity framework to insert identity columns? - https://stackoverflow.com/questions/13086006/how-can-i-force-entity-framework-to-insert-identity-columns
- Long string interpolation lines in C#6 - https://stackoverflow.com/questions/31764898/long-string-interpolation-lines-in-c6
- Entity Framework code-first date field creation - https://stackoverflow.com/questions/5658216/entity-framework-code-first-date-field-creation
- How to read values from the querystring with ASP.NET Core? - https://stackoverflow.com/questions/41577376/how-to-read-values-from-the-querystring-with-asp-net-core
- datetime2 (Transact-SQL) - https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetime2-transact-sql?view=sql-server-ver15
- Custom date and time format strings - https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
A web application built to connect students to faculty to make finding research work frictionless. Professors can post available research opportunities along with any required skills, pictures, related tags, etc. Students can quickly find and sort through these opportunities and find the best one they can apply their skills to. There will also be an admin section to allow admins to visualize URC usage as well as other monitoring/maintenance tasks.
Built on an ASP.NET Core 3.1 (MVC) backend and a vanilla frontend, styled with Bootstrap, and deployed on AWS.