โ๏ธ Development Tools: Unit testing, CI/CD pipelines
โ๏ธ Cloud Services: AWS, Heroku
โญ Certified by Code Institute as a Full Stack Software Developer, I have a strong passion for learning new technologies and building web applications. I am self-motivated, hard-working, and responsible, with the ability to work both independently and as a team player.
What I Do:
Full-Cycle Web development: planning, designing, developing, testing, deploying, and maintaining applications
Building and integrating RESTful APIs
Bot development
Script automation
Web scraping/crawling
On my GitHub profile, you'll find a variety of projects showcasing my abilities in software development. I'm always open to new challenges and opportunities, and I welcome collaborations and contributions to my projects.
Thank you for visiting my profile! If you have any questions or suggestions, please feel free to contact me.
CycleBay is a B2C e-commerce platform that allows customers to buy bicycles online. This is Django-based full stack web application that uses PostgreSQL database to store and manage data. The app is deployed on Heroku cloud platform and uses AWS S3 cloud service to store static and media files. The payment system powered by Stripe.
Job Platform that helps Jobseekers find desired jobs and helps Employers connect with the right candidates. It's a Full Stack Django-based web application. It uses PostgreSQL as a database and Bootstrap and jQuery for Frontend.
The Educational JavaScript game that challenges users to test their vocabulary skills by guessing words based on the provided definitions. The game based on a single interactive page with a fully responsive design and intuitive user interface. The app uses the Free Dictionary API to get the definitions of the words.
Python CLI application designed to manage a library's book inventory using a Google Spreadsheet API. The app allows users to perform CRUD operations on the books stock in the library, as well as to check overdue books and view borrowed books.
HTML/CSS Static Barbershop Website for Successful Barbershop Business. The website is designed in such a way as to interest the user, give useful information about the services and increase the chances of visiting the Barbershop. The appearance and UI design is quite user-friendly, stylish and responsive.
DateTime Calculator is a Telegram Bot developed in Python using Aiogram 2.x Framework, Datetime and Dateutil libraries.
DateCalcBot can calculate the difference between two dates in different units of time and their combinations.
As a Shopper, I want to be able to quickly identify deals, clearance items and special offers so that I can take advantage of special savings on products I'd like to purchas
As a Site User, I want to be able to sort the list of available products so that I can easily identify the best-priced, categorically, color, and brand sorted bikes.
As a Shopper, I want to be able to sort a specific category of products so that I can find the best-priced product in a specific category or sort the products in that category by name
As a Store Owner, I want to be able to edit/update a product, so that I can change the price, description, image or any other attribute of the product.
As a Shopper, I want to be able to easily select the size and quantity of a bike when purchasing it, so that I can ensure I don't accidentally select the wrong bike, size or quantity
INSTALLED_APPS = [
...
# 'django.contrib.messages',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
# Specify the context processors as follows:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Already defined Django-related contexts here
# `allauth` needs this from django
'django.template.context_processors.request',
],
},
},
]
MIDDLEWARE = (
# ...
"django.contrib.messages.middleware.MessageMiddleware",
# Add the account middleware:
"allauth.account.middleware.AccountMiddleware",
)
# ___Allauth settings___
AUTHENTICATION_BACKENDS = [
# Needed to login by username in Django admin, regardless of allauth
'django.contrib.auth.backends.ModelBackend',
# allauth specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
]
# The SITE_ID setting specifies the database ID of the Site object associated with that particular settings file. So now the django app handle multiple sites from one database.
SITE_ID = 1
# Specifies the URL that the user will be redirected
# to after a successful login or logout.
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
LOGIN_URL = 'accounts/login/'
# Removes the username field from the signup form.
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
# Requires the user to enter a unique e-mail address during signup.
ACCOUNT_EMAIL_REQUIRED = True
# Removes the username field from the signup form.
ACCOUNT_USERNAME_REQUIRED = False
# Allows the user to log in using their e-mail address and password.
ACCOUNT_AUTHENTICATION_METHOD = 'email'
# Prevents multiple signups with the same e-mail address.
ACCOUNT_UNIQUE_EMAIL = True
# asks the user to Remember Me at login to keep the user logged in
# even after closing the browser.
ACCOUNT_SESSION_REMEMBER = None
# User gets blocked from logging back in until a timeout.
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = 5
# email confirmation
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
# Logs the user in after confirming the email address.
# Works only when user signs up
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
# Allows avoiding the need to confirm the email address
# on page form and can be done only by clicking the link
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
Run migrations
Configure Email SMTP to send verification:
# Email SMTP settings
if DEVELOPMENT:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
DEFAULT_FROM_EMAIL = '[email protected]'
else:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com' # for gmail
EMAIL_PORT = 587
EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
# password must be generated from gmail account,
# called App Passwords, not the same as account password
EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
DEFAULT_FROM_EMAIL = os.environ.get('EMAIL_HOST_USER')
EMAIL_USE_TLS = True
As a Shopper, I want to be able to receive an email confirmation after checking out, so that I can keep the confirmation of what I've purchased for my records
As a Shopper, I want to be able to have a personalized user profile so that I can view my personal order history and order confirmations, and save my payment information
As a Shopper, I want to be able to view bikes in my bag to be purchased, so that I can identify the total cost of my purchase and all items I will receive
As a Shopper, I want to be able to easily see what I've searched for and the number of results so that I can quickly decide whether the product I want is available
As a Shopper, I want to be able to feel my personal and payment information is safe and secure so that I can confidently provide the needed information to make a purchase