A community-driven open-source REST API built with FastAPI to help developers learn backend development, Git/GitHub collaboration, and real-world software engineering practices.
This project is part of the Fata Open Source Project, where participants contribute to a shared codebase while learning how professional teams build and maintain software. Main aim is promote learning through Fata while actually practicing learnt concepts, into a real project.
The purpose of this project is to help developers:
- Learn FastAPI and modern backend development.
- Learn Python programming concepts
- Understand REST API design.
- Practice Git and GitHub workflows.
- Learn how to collaborate on an open-source project.
- Gain experience working on an existing codebase.
- Build a portfolio through meaningful contributions.
- FastAPI
- SQLAlchemy
- SQLite (Development)
- PostgreSQL (Future)
- Alembic
- Pydantic
- Pytest
The API will include:
- User Authentication
- Job Listings
- Companies
- Job Applications
- Search & Filtering
- API Documentation
- Unit Tests
Click Fork at the top-right of this repository.
git clone https://github.com/FATAschool/JobAPI.gitto avoid push authentication everytime i recommend this method 1. Generate a fine grained ssh token key 2. include it in you clone url like so httsp://graintoken@github.com...., this automatically authenticates you to work on the repo.
git clone https://graintoken@github.com/FATAschool/JobAPI.gitcd JobAPIWindows
python -m venv venv
venv\Scripts\activateLinux/macOS
python3 -m venv venv
source venv/bin/activatepip install -r requirements.dev.txtuvicorn app.api.v1.application:app --reload --host 0.0.0.0 --port 8001or
python3 run.pyWe welcome contributions from everyone.
Please follow the workflow below.
- Fork the repository.
- Pull from remote, git pull.
- Branch names are present on the feature branch, a branch name presents the app/module you are working on e.g(feature/FATA01-emails), that branch is for emails workflow for the jobApi.
- Complete one assigned issue. Issues will be assigned to individuals
- Commit your changes with a meaningful commit message.
- Push your branch.
- Open a Pull Request.
- Wait for review before merging.
Use descriptive branch names, use the prefix FATA01-"branch name".
Examples
dev/FATA01-user-authentication
dev/FATA01-jobs
feature/FATA01-companies
fix/login-validation
docs/update-readme
test/job-endpoints
Good examples
feat: add job creation endpoint
fix: validate email during registration
docs: update installation guide
test: add authentication tests
Avoid
update
changes
fixed
work
Every Pull Request should:
- Solve one issue.
- Be focused on a single feature or fix.
- Include a clear description of what changed.
- Pass all tests (where applicable).
Every dataflow diagrams will be on the folder docs/dfd Based on the flow chart please make sure to include the name e.g authentciatflow.extennsion name
-
Currently by default we are using mermaid js, since it's light weight and easy to code along your diagram, the files associated with mermaid js have the extension named .mmd, To run such file simple install the extension on vscode mermaidjs preview
-
Draw.io is another alternative for flow charts, easy to use with drag and drop features, main goal is not the tool being used but a clear detailed visual representation of what is being implemented.
No contributor is allowed to push directly to the main (or master) branch.
All changes must go through a Pull Request and be reviewed by a project maintainer before being merged.
Please work only on issues assigned to you. Tasks will be available on trello board
If you want to work on a new feature, open an issue first or ask a maintainer to assign it to you.
Small Pull Requests are easier to review and merge.
Avoid combining multiple unrelated features into one Pull Request.
Before creating new folders or changing the architecture, discuss the change with the maintainers.
Consistency helps everyone contribute more effectively.
Please follow these principles:
- Write readable code.
- Use meaningful variable names.
- Keep functions small.
- Remove unused code.
- Follow Python style guidelines (PEP 8).
Code reviews are part of the learning process.
Feedback is meant to improve the project and help everyone grow.
If you're stuck:
- Ask questions in the community, whatsapp or discord server
- Open a discussion.
- Reach out to a project maintainer.
There are no bad questions—we're all here to learn.
We are committed to providing a welcoming and respectful environment for everyone.
Please:
- Be respectful.
- Be patient.
- Help others learn.
- Give constructive feedback.
- Respect different experience levels.
Harassment, discrimination, or disrespectful behavior will not be tolerated.
This project is released under the MIT License.
Thank you to every contributor who takes the time to learn, collaborate, and improve this project.
Every issue solved, bug fixed, documentation update, and line of code helps make this project better.
Happy coding! 🚀