├── README.md ├── .github └── pull_request_template.md ├── stories └── form_builder.md └── django.md /README.md: -------------------------------------------------------------------------------- 1 | # morpheus 2 | Helping find our Neo 3 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Your Name 2 | 3 | ## Submission checklist 4 | *Mark checks as explained on this [link](https://docs.github.com/en/free-pro-team@latest/github/managing-your-work-on-github/about-task-lists#creating-task-lists), and remove this instruction* 5 | 6 | - [ ] Your submission follows best practices for [commit messages](https://chris.beams.io/posts/git-commit/) AND for [pull requests](https://github.community/t/best-practices-for-pull-requests/10195) 7 | - [ ] `Steps to run the project` AND a `documentation` have been included in a README.md file at root of your project. 8 | - [ ] No `binaries/compressed` files have been added 9 | - [ ] All pre-existing files in the repository have been removed 10 | - [ ] `Screenshots` have been added to the screenshots folder (optional for backend code). 11 | - [ ] All italicesed instructions under each submission heading inline, have been removed. 12 | - [ ] You understand that a submission here is publicly visible. 13 | - [ ] You have not plagialised, or blatently copied work; and this submission is your original work. (Code of ethics) 14 | 15 | ## Briefly write about the project that you have submitted from the perspective of the user. 16 | *Replace this text to brief your project as a user story* 17 | 18 | ## Assumptions you have made for this project? 19 | *Mention ALL assumptions you have made for this project. If none, specify so.* 20 | 21 | ## Other information (like testing credentials) 22 | *If your project has some credentials necessary to explore, add them here, or mention None* 23 | 24 | ## Did you learn anything new while doing this assignment? Please explain. 25 | *Response to this is part of evaluating a submission* 26 | 27 | ## How much time did it take for you complete the project? 28 | *Response to this is part of evaluating a submission* 29 | 30 | ## If you had more time, what enhancements will you make? 31 | *Response to this is part of evaluating a submission* 32 | 33 | -------------------------------------------------------------------------------- /stories/form_builder.md: -------------------------------------------------------------------------------- 1 | # Hackathon PRD: Form Builder Application 2 | 3 | You are building a Form Builder like [Google Forms](https://forms.new). The application must allow **Admins** to create forms, **Users** to submit responses, and both parties to access analytics. Deliver the complete application in one submission. 4 | 5 | --- 6 | 7 | ## Functional Requirements 8 | 9 | ### **Admin User** 10 | Admins should be able to: 11 | 1. **Create Forms:** 12 | - Create unlimited forms. 13 | - Add a maximum of **100 questions** per form. 14 | - Select a [type](#question-types) for each question. 15 | - Order the questions in a form. 16 | - Configure every question type with relevant details (e.g., ordering options for checkbox/dropdown questions). 17 | 18 | 2. **View Forms:** 19 | - See a list of all forms they have created. 20 | 21 | --- 22 | 23 | ### **End User** 24 | End Users should be able to: 25 | 1. **Submit Responses:** 26 | - Respond to any form anonymously (no authentication required). 27 | - Submit responses an unlimited number of times. 28 | 29 | --- 30 | 31 | ### **Shared Features** 32 | All users (Admins and End Users) should be able to: 33 | 1. **View Analytics:** 34 | - Access analytics for every form at a **public URL**. 35 | - See total response count at the form level. 36 | - View question-specific analytics for the [**MVP question types**](#mvp-required-for-submission): 37 | - **Text Field:** Distribution of the top 5 most common words (≥5 characters). Aggregate the rest under "Others." 38 | - **Checkbox:** Distribution of the top 5 option combinations. Aggregate the rest under "Others." 39 | - **Dropdown:** Distribution of the top 5 selected options. Aggregate the rest under "Others." 40 | 41 | --- 42 | 43 | ## Question Types 44 | 45 | ### **MVP (Required for Submission):** 46 | 1. **Text**: Open-ended text input field. 47 | Example: "What is your name?" 48 | 2. **Dropdown**: Single-choice from a predefined list of options. 49 | Example: "What is your gender?" (Options: Male, Female, Other) 50 | 3. **Checkbox**: Multiple-choice from a predefined list of options. 51 | Example: "Which fruits do you like?" (Options: Apple, Banana, Cherry) 52 | 53 | ### **Future:** 54 | **Note: These are not required, but your solution should be modular to allow for adding these later.** 55 | 1. **Ranking**: Rank options in a specific order. 56 | Example: "Rank your favorite cuisines: Italian, Indian, Chinese." 57 | 2. **Linear Scale**: Respond with a value on a numerical scale. 58 | Example: "Rate our service on a scale of 1 to 10." 59 | 3. **Date Picker**: Select a date from a calendar interface. 60 | Example: "When is your birthdate?" 61 | 4. **Time Picker**: Select a time from a clock interface. 62 | Example: "What time do you usually wake up?" 63 | 5. **File Upload**: Upload a file as part of the response. 64 | Example: "Upload your resume." 65 | 6. **Matrix/Grid**: Respond to a grid of options with multiple rows and columns. 66 | Example: "Rate the following on satisfaction: Food, Cleanliness, Service." 67 | 7. **Image Choice**: Select one or more images from a set. 68 | Example: "Choose your preferred logo design." 69 | 8. **Slider**: Drag a slider to indicate a value. 70 | Example: "Set your monthly budget: $0 - $10,000." 71 | 9. **Signature Capture**: Capture a digital signature. 72 | Example: "Sign below to confirm your agreement." 73 | 10. **Color Picker**: Choose a color. 74 | Example: "Select your favorite color." 75 | 11. **Geolocation**: Submit location data. 76 | Example: "Share your current location." 77 | 12. **Percentage Allocation**: Allocate percentages across predefined categories. 78 | Example: "Allocate your budget: Food (30%), Entertainment (20%), Savings (50%)." 79 | 80 | --- 81 | 82 | ## Key Notes 83 | 84 | 1. **Code Structure:** 85 | - Follow **DRY** (Don’t Repeat Yourself) and **SRP** (Single Responsibility Principle). 86 | - Use modular design to enable easy addition of future question types. 87 | 88 | 2. **Technical Excellence:** 89 | - Apply Object-Oriented Programming (OOP) effectively for clean, extensible, and maintainable code. -------------------------------------------------------------------------------- /django.md: -------------------------------------------------------------------------------- 1 | ## Django challenge assignment for AtomicAds 2 | 3 | ### Introduction 4 | The goal of this challenge is to test your familiarity with concepts in Django. 5 | To read more about the recruitment process and open opportunities at AtomicAds, click [here](https://rtba.notion.site/Careers-at-RTBAnalytica-65dbc349de6b4b3e9ac9f63a9242f290) 6 | 7 | *Note: This is a public submission. Any work on this assignment does not bring AtomicAds or its employees any moat; and by design, is made to assess skills we need. Stories provided are unrelated to AtomicAds's core business.* 8 | 9 | ### Assignment 10 | 11 | * Unless a specific story is assigned to you, you can select any one of the stories mentioned in the [stories](/stories/) folder 12 | * Develop an API-driven application in Django that fulfills the requirements outlined in the story. 13 | * Follow [Instructions](#instructions) and [Submission Process](#submission-process) to ensure your submission is complete and adheres to expectations. 14 | * Expect evaluation within **5 working days** after submission. 15 | * Deliver the assignment as a **single submission**. 16 | * For success, ensure you get as many checks as in our [Assessment Criteria](#assessment-criteria) 17 | 18 | 19 | ### Instructions 20 | 21 | 1. **Model**: Design database schema and implement using Django ORM with validations 22 | - Design the database schema and implement it using Django ORM with appropriate validations. 23 | - Modular design is encouraged to ensure extensibility. 24 | 2. **View**: API Design 25 | - Develop the application with a strong emphasis on being API-driven. 26 | - Use [**Django Rest Framework (DRF)**](https://www.django-rest-framework.org/) for creating RESTful APIs. 27 | - Document APIs in a [**Postman collection**](https://www.postman.com/collection/). 28 | - All functionality described in the [story](../stories/) should be executable through the API. 29 | 3. **View**: Optional Frontend (Bonus Points) 30 | - Build a sample UI for Admins and End Users. 31 | - You can use any frontend framework or render views using Django templates. 32 | - More brownie points for an API-driven UI. 33 | 4. **Documentation**: 34 | - Include **docstrings** for all classes and functions. 35 | - Document a **list of assumptions** for any features or behaviors not explicitly defined in the story. 36 | 5. **Database**: 37 | - Use **SQLite**, **PostgreSQL**, or **MySQL** as the database for the prototype. 38 | 6. **Clean Code**: 39 | - Follow **DRY** (Don’t Repeat Yourself) and **SRP** (Single Responsibility Principle). 40 | - Ensure proper organization and maintainability of your code. 41 | 42 | ### Assessment Criteria 43 | 44 | Your submission will be evaluated on the following parameters: 45 | 46 | 1. Adherence to the [Instructions](#instructions). 47 | 2. **Code Quality**: 48 | - Maintainable and modular code. 49 | - Balance between speed and quality — document any trade-offs made. 50 | 3. **Ownership**: 51 | - Go beyond the story requirements (e.g., provide a sample UI interacting with the API). 52 | 4. **Version Control**: 53 | - Follow best practices for pull requests and commit message [guidelines](https://gist.github.com/turbo/efb8d57c145e00dc38907f9526b60f17). 54 | - Ability to demonstrate proficiency with Git. 55 | 5. **Documentation**: 56 | - Clear setup and usage instructions in the README file. 57 | - Comprehensive API documentation (Postman collection). 58 | 6. **Communication**: 59 | - Actively communicating with our team during the submission process for clarifications or updates. 60 | 61 | ### Submission Process 62 | 1. Fork this repository to your personal GitHub profile. 63 | 2. Delete all files and folders in the forked repository. Start your project from scratch within this repository. 64 | 3. Add a **README** at the root level with: 65 | - Setup instructions. 66 | - Detailed usage guide. 67 | 4. Raise a Pull Request to the original repository: 68 | - Use the provided [Pull Request template](https://github.com/AtomicAds/morpheus/blob/main/.github/pull_request_template.md). 69 | - Answer all questions and check relevant boxes in the template. 70 | 71 | ### Code of Ethics 72 | - Be original. Submissions are public via GitHub and will be reviewed thoroughly. In cases of plagiarism, the work will be deemed invalid and disregarded. 73 | - Cite any external code you use, including the source and its licensing terms. 74 | 75 | ### Learning Resources 76 | 1. [The Official Django Tutorial](https://docs.djangoproject.com/en/3.0/intro/tutorial01/) 77 | 2. [Version control with git](https://try.github.io/) 78 | 3. [Pull Request](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) 79 | 4. [Django Rest Framework Documentation](https://www.django-rest-framework.org/) 80 | --------------------------------------------------------------------------------