• Compete
  • Learn
  • Community

    Sunshot - SLS - NodeJS Assembly Challenge






    The challenge is finished.
    Show Deadlines icon-arrow-up

    Challenge Overview

    Solar Land Solutions provides contract land services for solar and wind energy projects and more. The website connects landowners with developers, developers will have the ability to view list of possible sites and be able to identify a site for development, get on a lease agreement with the landowner and be able to send out a RFP (request for proposal) to utility companies.

    In this challenge you will integrate the provided AngularJS prototype with NodeJS REST API.

    The outcome of this website will be a fully functional application.

    Challenge Requirements

    Gitlab Repository

    The REST API and UI prototype are hosted in gitlab private repository, please check challenge forums for more information to get access.

    Integration Issues

    You are required to address any backend integration issues, specifically If there are any bugs or missing functionality in the backend REST API.

    API Postman

    We have Postman json file listing all API calls with samples under docs folder in the Gitlab repository.

    Pages Requirements

    Landing Page

    • - Page : Page

    • - This page will display static content as in the UI prototype and will be entry point to navigate to other areas in the website.

    • - Sign Up in header should be renamed to “Login”

      • - API Endpoint to use : POST /signin

    • - “Join Now” buttons

      • - The left button for signing up “Developer” account.

      • - The right button for signing up “LandOwner” account.

      • - In “Land Owner” popup hide Company Details and Promotional sections, they are only needed for ‘developers’ signup.

      • - API Endpoint to use for signup :

        • - POST /signup

        • - Pass the proper role for each user.

      • - On successful sign in/up it should take ‘developer’ to #/Home page, and ‘landowner’ to #/Sites page.

    • - Implement Logout in header for logged in user.

    LandOwner Sites Page

    • - Page : #/Sites

    • - My Sites Tab

      • - Use GET /sites endpoint to return users sites where site#status = Approved

        • - Update this endpoint to include site interests count

      • - Clicking on site title (MN-XCEL-01) or “2 new interests” button next to title should take user to Listing Details page.

      • - Add “load more” button top bottom of the page to enable pagination.

      • - The google map thumbnail will be rendered using the site address.

    • - Draft Sites Tab

      • - Use GET /sites endpoint to return users sites where site#status = Draft/rejected

      • - Clicking on Arrow will take user to Site Details page.

    • - Pending Sites Tab

      • - Use GET /sites endpoint to return users sites where site#status = Pending

      • - Clicking on Arrow will take user to Site Details page.

    LandOwner Add Site Page

    • - Page : Add_Site

    • - This page will use POST /sites endpoint to save draft or to submit the site. Refer to the Site model and postman for detailed information about the parameters, we are using same parameters name as in the UI fields, so it will be easy to map between these fields.

    • - The address inserted by user should be translated into a pin dropped in the location (if found) in the google map. The trash icon will reset the address fields.

    • - When user Save Draft the user should remain the page.

    • - On successful ‘Submit’ of site the user should be taken to Site Details page.

    • - Changes to UI and backend :

      • - Add new field “name” in Site model that will be used to populate site name, also there should be a UI field in Parcel Details step to provide this information.

      • - The name field is the “MN-XCEL-01” you will see across the website.

    LandOwner Pending/Draft Site Details Page

    • - Page : Pending, Rejected, and Draft

    • - This page will be used to display “Draft”, “Rejected”, or “Pending” Site details.

    • - Use GET /site/{id} to get site details.

    • - User can edit the information by clicking on “Edit” Button.

      • - Clicking on “Edit” on any section will take user to “Add Site” page on that section with data populated.

    • -  For Draft/Rejected Site, we have “Delete” and “Submit” actions :

      • - Use DELETE /site/{id} to delete the site, on successful delete take the user to Pending Site Details Page.

      • - Use PUT /site/{id} to submit the site. on successful submit, take user to Pending Site Details Page.

    LandOwner Listing Details Page

    • - Page : Listing_Details

    • - This page calls two endpoints to populate content :

      • - GET /site/{id}

      • - GET /site/{id}/interests

    • - Documents link should point to GET /file/{file-id} to allow user download it.

    • - Make the email and phone clickable. For email it should open the default mail client. for Phone number it should append tel: to phone in the href attribute to prompt user to make call.

    • - Clicking View Listing takes the user to Approved Site Details page.

    LandOwner Site Details Page

    • - Page : Site_listing

    • - Use GET /site{id} to render details.

    Developer Menu

    Developer Home Page

    • - Page : Home

    • - This page will retrieve “approved” sites where site#grade > 50.

    • - Use GET /sites endpoint to retrieve the data.

    • - Use Site Addresses to create markers in the google map.

    • - Pagination will be done server side.

    • - Sorting will be done server side

      • - Interconnection Quality is not in scope.

    • - Filtering will be server side.

      • - Size/quality of the interconnection is not in scope, keep it hardcoded but we will not use it in filtering

    • - Utilities drop down will be populated from “GET /utilityAreas” endpoint.

    • - Clicking on Site will take user to Site Details page.

    Developer Site Details Page

    • - Page : Site Details

    • - It is same page as Landowner Details page, with two actions not in landowner view :

      • - Add to Favorite :

        • - Use POST /sites/favorites to add site to user favorites

      • - Send Interest

        • - Opens up a popup and allow user to upload documents and fill details

        • - Use POST /sites/interest to send interest.

    • - Backend Changes :

      • - GET /site/{id} should be updated to include “isFavorite” field if the user is ‘developer’, it will be used to enable/disable the favorite star.

      • - POST /site/{id}/favorite : update this endpoint to unfavorite a site if the site already favorited for the caller user.

    Developer Site Favorites Page

    • - This page is same as Developer Home Page, with same functionality.

    • - Page : Favorites

    • - Use GET /sites/favorites to return information.

      • - Fix this endpoint to support pagination, sorting and filtering. It should be a clone of GET /sites endpoint with difference that it pulls favorites sites only for the logged in developer.

    • - Use POST /site/{id}/favorite to save ‘unfavorite’ action when clicking on the star icon.

    Developer Profile Page

    • - Page : Profile

    • - This allows developer to update their profile information.

    • - Use PUT /user/{id} to save the updated details.

    Admin Home Page

    • - We don’t have a UI prototype page for admin pages, so we will leave it for your best judgement to implement the UI.

    • - The page structure should be same as Landowner Sites Page, it should have two tabs :

      • -  Approved Sites  :

        • - This should list approved sites, use GET /sites endpoint.

        • - The columns to be displayed should be same as in Land Owner My Sites tab.

        • - Clicking on an approved site will take user to Landowner Listing Details Page.

      • - Pending Sites :

        • - This should list sites with status “pending” or “rejected”, use GET /sites endpoint.

        • - The columns to be displayed should be same as Landowner Pending Sites tab.

        • - Clicking on a pending site will take user to Admin Site Review Page

      • - Users :

        • - This page will list users in the website.

        • - Add action option for each record to allow admin to :

          • - Edit user : this will open up a popup with user information, where admin can update it. Use PUT /user/{id} endpoint to save changes.

          • - Ban user : This will deactivate user account, use DELETE /user/{id}

            • - Fix this endpoint to not remove the user, instead it should have a flag ‘active’ : false

        • - This should be link to Add New User

          • - It will open up a popup with same current pop ups in the UI prototype, to fill user informations, use POST /sites to create user.

      • - There should be option to Add New Site same as in Landowner view, it will take admin to same landowner Add New Site page.

    Admin Site Review Page

    • - This page is same as Landowner Pending Details page.

    • - It will show status : Pending

    • - There will be a “Submit Review” link in the page. Clicking on it will open up a popup with same styling as in the UI prototype with following fields :

      • - Reason (optional) : provide details about the review result.

      • - Grading (required if user click approve) : this will set the Site#grading field.

      • - Approve button.

      • - Reject button.

    • - Admin can edit the page as in landowner Pending/Rejectd Details page.

    • - Use POST /siteReviews to submit the review.

    • - Use PUT /site/{id} to save grading if provided.

    • - On successful Review submission, the status in the page should be updated with Reason displayed.

    Test Data

    • - Provide a script that insert default admin user. So we can login and add more users and admin users in the admin dashboard.

    • - Provide sample test data.


    Provide deployment steps for Heroku application is preferred.


    Provide a detailed README documentation for how to setup and configure the application.


    You are expected to use environment variables to store sensitive information and environment-specific configurations.    

    General Note

    • - Truncate any json field value that does not fit the target UI element.


    Final Submission Guidelines


    • - Git patch file of the updated solution.

    • - README in markup language.

    • - Verification document contains steps to verify your solution.

    Reliability Rating and Bonus

    For challenges that have a reliability bonus, the bonus depends on the reliability rating at the moment of registration for that project. A participant with no previous projects is considered to have no reliability rating, and therefore gets no bonus. Reliability bonus does not apply to Digital Run winnings. Since reliability rating is based on the past 15 projects, it can only have 15 discrete values.
    Read more.


    2016 TopCoder(R) Open


    Final Review:

    Community Review Board



    User Sign-Off



    Review Scorecard