Summer 2022 Entry Level Developer Candidate Project A
Edited 11/28/22
As part of the candidate evaluation process, you will complete a simple project in React that will be used to evaluate your skills.
Project Overview
The Lucit Application delivers advertising images in real-time to digital billboards. Each time one of the images is displayed on a digital billboard screen, that system delivers a “pingback” to our system notifying us that the image was displayed.
You may login to the Lucit App to get an idea of what some of these images look like. You have been given access to “Demo” accounts within Lucit that you are free to play around with.
Your project is to build an application that simply shows the last image that was played on a digital billboard, when and where it played. This application will be an internal application that we will run on screens / TV’s inside of our office so we can see, in real-time, the most recent image that we ran.
Evaluation Criteria
Your work will be evaluated based on
-
How well you followed the project requirements / instructions
-
What you did differently than other candidates
-
The quality of your code, your commits and the organization of your components, files, etc.
-
What you innovated / added / created beyond what was listed in the project requirements
Pre-Requisites
In order to build this project you will need
-
The Lucit App – You will receive an Invite to the App – Which can you can install from the App Store or Play Store (see here for help https://lucit.cc/help/#1631108430399-48f23e04-21ef OR, you can login to the application at https://layoutui.lucit.cc
-
An API Token – You must REQUEST an API Token, by submitting a HELP Request from within the Lucit App – Click on “Help” in the toolbar and then type the following into the Help Request box : “API Token Request for Entry Level Developer Project : {Your Name}”
-
A github account. You will push your project to your github account for us to review
Project Requirements
A successful project will
-
Be able to run on any windows / mac / linux machine in the browser
-
Must be able to launch from the cli (e.g. using something like npm start )
-
Look great on a variety of screen sizes (from a 60″ TV down to a small 13″ Screen)
-
Take into account a large range of billboard image sizes (some are 160px wide, some are 1800px wide, some are long rectangles, some are short and square)
-
Shows a new image every XXX seconds
-
Always shows (or attempts to show) a different image from a different campaign than the previous one that was displayed
-
Show the location and operator of the digital billboard that the image appeared on
Delivery
Your project should be
-
Pushed to a new repo in your personal github account.
-
Please call this repo lucit-dev-project-a-{your-first-name-and-last-initial}
-
Notify Lucit by sending an email to support@lucit.cc with the exact subject line Entry Level Developer Project A : Submission
Definitions
Pingback | A pingback object is created every time an image is displayed on a digital billboard. Typically a pingback will tell us where, when, and for how long an image appeared on the digital billboard |
Inventory Export | In our terminology an Inventory Export is equivilent to a Campaign. |
Digital Board | A digital billboard – a large digital screen normally mounted on a large pole or other structure that has a physical location |
Agency | Most commonly a Billboard Operator, this is the company that owns the physical billboard that the images running on |
Inventory Photo | This object represents the actual creative image |
API Endpoint
We have created a specific endpoint in our api that can be used to fetch the most recent image and associated details
endpoint: GET http://layout.lucit.cc/api/v1/analytics/pingbacks/get-last
returns: JSON array with an element called pingbacks which contains a single pingback representing the last image that ran
parameters:
Parameter | Type | Description | Example |
---|---|---|---|
api_token | required string | An api token will be provided to you and will be required to make the call to the api | ?api_token={yourtoken} |
exclude_export_ids | optional array | Each image is assigned to an “export” which is a group of images that will run on any given set of bilboards.
Use this option to exclude 1 or more export_id’s from being selected | ?exclude_export_ids=[67,98,105] |
exclude_photo_ids | optional array | Each image has a “photo_id” that uniquely identifies it.
Use this option to exclude 1 or more photo_ids from being selected | ?exclude_photo_ids=[1098,8768,9894] |
Objects
A description of some objects and fields
NOTE: Not all fields are described and not all fields will need to be used within your project
pingback
Represents the event of when and where this image played.
id | Unique Id of the pingback |
photo_id | The unique id of the image that played |
play_datetime | UTC datetime of when the image played on the billboard |
play_duration | How long the image was on the screen |
inventory_export_id | The export to which this image belongs |
object_id | Always the same as photo_id |
object_class | Always InventoryPhoto |
board_id | Unique ID of the Digital Billboard |
impressions | Sometimes zero, sometimes a number. This is an estimate of the number of People that saw this image |
impressions_calc_method | If 0 – no impressions. If 1 we have it calculated based on an avg daily total |
digital_board
This is the screen on which this advertisement was displayed. Typically these are large screens mounted atop a pole at a location
id | Unique Id of the digital board |
agency_id | Id of the operator that owns the board |
board_identifier | An id that is used by the board owner to identify their board. |
name | A name of the board – sometimes its location or address |
location_id | Id of the location object where this board is physically located at |
width | Width in pixels of this board |
height | Height in pixels of this board |
location
Location objects are physical locations used to identify where a board is.
id | Unique id for this location |
name | A name for this location |
address | Address of this location |
city | City |
state | State |
postal_code | Zip Code |
Country | Country |
latitude | Latitude |
longitude | Longitude |
agency
The “agency” represents the owner of the digital billboard. Called an Operator or a Billboard Operator
id | Unique id |
name | Name of the Billboard Operator |
options.primary_image_public_url | The logo or icon for the billboard operator |
inventory_photo
The inventory_photo object represents the image that was displayed
id | Unique photo_id for this image |
inventory_item_id | Images (1 or more) can be attached to a single inventory item which represents this specific creative in multiple sizes or styles |
options.public_url | The url to this image |
options.dimension_width | Width in pixels of this image |
options.dimension_height | Height in pixels of this image |
public_url | Same as options.public_url |
inventory_export
The “export” can be thought of like an “Advertising Campaign” This campaign contains multiple “inventory_photo” objects and is attached to multiple “digital_board” objects
id | Unique id |
name | Name of the campaign |
options.primary_image_public_url | If this exists, it is an icon for the campaign |