Welcome to Luxor's Application Engineer Coding Challenge.
- Simple, well written and commented code is preferred over over-engineered models. You should be able to explain all of the steps and decisions you've made.
- For the coding part of this challenge you are expected to use Typescript or Javascript.
# Base Schema (feel free to add more columns as you see fits):
collections {
id,
name,
descriptions,
stocks (qty),
price,
},
bids {
id,
collection_id,
price,
user_id,
status (pending, accepted, rejected),
}
user {
id,
name,
email
}
- Create a dataset base on schema above.
- atleast 100 collections
- atleast 10 bids per collection
- atleast 10 users
- you can use an orm like prisma or drizzle connected to a postgres db,
- or just use json file as mock data.
- Create an endpoint to fetch the following (can be Nextjs Api or RSC/Server Action)
- list of collections
- list of bids, params: collection_id
- create/update/delete collection
- create/update/delete bid
- accept bid (should reject other bids), params: collection_id, bid_id
- Create a nested table/section to display the list of collections, with
- list of bids under each collection
- if collection owner
- an icon/button to update/delete collection
- an icon/button to accept bid
- otherwise, an icon/button to add/edit/cancel bid
- Forms (modals or page): create/update collection, create/update bid
Design is just an example, you can do nested cards or nested table or others, totally up to you Feel free to utilize shadcn and other ui lib for the frontend part.
- Code Quality
- Code Structure
- UX
- Performance (how you render components and call api)
- Authentication is optional (feel free to mock users), bonus if you can implement it.
- The project itself with your code
- Document how to run the code (on the README)
- Answer the following questions (can be all in a README file):
- How would you monitor the application to ensure it is running smoothly?
- How would you address scalability and performance?
- Trade-offs you had to choose when doing this challenge (the things you would do different with more time and resources)
All of this should be delivered on a repository that you will create on github and share with: