Architecture - OmarAbdelmotaleb/Jobber GitHub Wiki

Overview

The Job applications tracking system enables user to organize their applications in much more efficient way and providing them a central hub for all of their application details, resume and cover letter attachments. This application will input job details from the user through forms and store them in the database. The backend application will then provide resume and job description parsing functionality. whose output will be displayed to the user through the front end alongside dashboard with few job application status metrics.

  • Application type -> Web-Application, Single Page Application (SPA)
  • Hosting:
    • Front-End -> Local Dev Server
    • Back-End -> Local Dev Server
    • Database -> AWS RDS free tier service
  • User Types -> Any individual who is seeking a Job, single user role.

Technology Stack

Languages

  • Python
  • SQL
  • TypeScript
  • JavaScript
  • HTML
  • SCSS

Tools

  • Front-End: Angular, Bootstrap/Angular Material UI
  • Back-End: Django, PostgreSQL
  • Testing: Jasmine+Karma(Frontend testing), Pytest(Backend testing)
  • Project Management: GitHub Issues/Projects
  • Version Control: Git
  • Codebase: GitHub Repositories

Infrastructure

  • Cloud Hosting Service: AWS RDS
  • CI/CD Pipeline: GitHub Actions

Solution Design

C4 Solution Model Design

High-level Context view

Level 1-Context View

Container view

Level 2-Container View

Non-functional requirements

Performance Requirements:

The system should be able to handle a specific number of concurrent users without performance issues. Response time for fetching data and displaying on the dashboard should be valid.

Scalability:

The system should be scalable to accommodate increasing numbers of users and data over time. It should support scaling of resources (both horizontally and vertically) without significant downtime.

Reliability and Availability:

The system should have an uptime of at least 99.9%. It should have mechanisms for data backup and recovery in case of system failure.

Security:

Secure handling of sensitive data such as personal details, resumes, and cover letters. Implement secure authentication and authorization mechanisms. Regular security audits and compliance with data protection regulations (like GDPR).

Usability:

The user interface should be intuitive and user-friendly. Support for multiple browsers and devices. Minimal training requirement for users.

Maintainability:

The system should be easy to maintain and update. Use of modular architecture to facilitate updates and maintenance. Comprehensive documentation for future maintenance and upgrades.

Data Integrity:

Ensure accuracy and consistency of data throughout its lifecycle. Implement input validation to prevent data corruption.

Compatibility:

Compatibility with various file formats for resumes and cover letters. Ensure integration capabilities with external APIs or services if required.

Legal and Compliance:

Compliance with employment and privacy laws in the regions of operation. Regular updates to the system in response to changes in legal requirements

Assumptions

User Behavior:

Users will enter accurate and complete information in the application forms. Users have an understanding of job application processes.

Technical Environment:

Users have access to devices with internet connectivity. Browsers used by users are updated to support modern web tech

Data Sources:

Job descriptions and requirements are standardized to some extent for effective parsing.

Third-Party Services:

Dependence on third-party services for features like email notifications, if any, are reliable and have SLAs in place.

Market and User Base:

The system is designed for a specific target market (e.g., professionals, students) and assumptions about user needs and behaviors are based on this market.