Full Stack Developer Test Project: Task Management System with Deployment, User Roles, and Analytics
Objective:
Develop a task management system that incorporates user authentication. Regular users should exclusively manage their tasks, while admins have oversight capabilities for all tasks. Admins should also have access to an analytics dashboard, harnessing Elasticsearch aggregation to review task statistics.
Functional Requirements:
- User Authentication:
- Registration & Login: Users must have the capability to register and subsequently log in (no need to confirm the email).
- Authentication Method: Utilize JWT (JSON Web Tokens) or sessions to authenticate users.
- Password Security: Hash and securely store passwords, preferably using libraries such as bcrypt.
- Frontend (ReactJS):
- Login/Register Page:
- Contains standard fields: email and password.
- Home Page (For Regular Users):
- Display tasks solely created by the authenticated user.
- Feature a button to initiate new task creation.
- Button to mark task as completed.
- Home Page (For Admins):
- Present tasks from all users, each accompanied by a user identifier.
- Incorporate a user analytics segment displaying task metrics.
- Add/Edit Task Page:
- Similar functionality as earlier defined, but tasks should be linked to the authenticated user.
- Backend (Python with Django):
- Authentication Middleware: Integrate middleware to validate incoming requests based on user roles.
- Routes and Controllers:
- Design for CRUD operations; ensure users solely interact with their tasks, while admins have unrestricted access.
- Implement an analytics endpoint dedicated for admins that employs Elasticsearch aggregation (e.g., task counts per user, completion averages).
- Database (Elasticsearch):
- Task Schema: Define the schema for tasks.
- User Schema: Define the schema for users.
Deployment:
- AWS or DigitalOcean:
- Hosting: Deploy the application on a Droplet or EC2.
- Database: Utilize Elasticsearch hosted on AWS or DigitalOcean.
Non-Functional Requirements:
- Responsive Design: Guarantee adaptability across both desktop and mobile platforms.
- Coding Standards: Uphold coding best practices including proper indentation, suitable naming conventions, and code modularity.
- Error Handling: Efficiently manage and report potential system errors.
- Documentation: Deliver a comprehensive README detailing aspects of setup, execution, and any associated nuances.
Bonus Points:
- SSL Implementation: Ensure application security with SSL through AWS Certificate Manager or Let's Encrypt with DigitalOcean.
- Admin Dashboard: Design a detailed analytics dashboard for admins, possibly leveraging Chart.js.
- Security Measures: Introduce rate limiting and defenses against brute-force attempts, particularly on login routes.
Submission Guidelines:
- Source Code: Provide a link on platforms such as GitHub or Bitbucket.