Fairlance presentaion #
FairLance #
Introducing FairLance, an innovative platform that aims to provide fair opportunities to freelancers worldwide. Leveraging decentralized technologies, our website will transcend geographical boundaries, empowering freelancers to expand their reach without worrying about excessive fees, unlike other conventional freelancing platforms
The adoption of our new payment method brings a significant positive impact on users. It eliminates numerous limitations that currently exist in the industry, transforming the way freelancers and service providers operate. Unlike existing websites that impose restrictions based on specific locations and pay discrepancies based on nationalities, our platform fosters inclusivity and equal opportunities for all. Join us as we revolutionize the freelancing landscape, offering a borderless and equitable platform for talented individuals to thrive and get paid securely with cryptocurrencies.
For additional information, please reach out to me on Telegram at @AhmadAlhusein.
Week #1 #
Team Members #
Team Member | Telegram ID | Email Address |
---|---|---|
Ahmad Alhussin | AhmadAlhusein | a.alhussin@innopolis.university |
Ahmad Sarhan | Ahmad_Sarhan | a.sarhan@innopolis.university |
Ghadeer Akleh | Ghadeer_akleh | g.akleh@innopolis.university |
Vladislav Lopatovskii | vlad_sup | v.lopatovskii@innopolis.university |
Hamada Salhab | hamadasalhab | h.salhab@innopolis.university |
Yazan Kbaili | YazanKb | y.kbaili@innopolis.university |
Value Proposition #
The problem we are solving
Solution description
Our solution combines the advantages of peer-to-peer architecture with centralized control to effectively address the aforementioned problems. While peer-to-peer architecture helps mitigate many issues, it falls short in dealing with scammers and ensuring website content remains safe. To overcome these challenges, our platform adopts a centralized approach. We prioritize user privacy by not requiring or allowing the disclosure of nationalities. Additionally, we facilitate payments using cryptocurrencies for enhanced security and convenience.
To prevent fraud and disputes, we employ a unique approach. Initially, the platform securely holds the cryptocurrency within its wallet until both the freelancer and job owner reach an agreement on the project. In case of conflicts, our dedicated administrators step in to manually assess the project’s completion and determine the appropriate distribution of funds. This ensures fair resolution and minimizes the risk of financial loss for both parties involved.
Benefits to Users
Differentiation
User Impact
User Testimonials or Use Cases
Lean Startup Questionnaire #
What problem or need does your software project address?
This software project addresses the problem of connecting people in need of specific services with qualified service providers. It aims to simplify the process of finding and hiring freelancers by providing a platform where users can easily post their service requirements and receive applications from interested service providers. In addition, we are planning to address the need for secure and efficient payment solutions in the freelancing industry. By using cryptocurrency payments, we aim to reduce the risk of scams and provide a decentralized and transparent method for financial transactions.
Who are your target users or customers?
The target users or customers of the website are individuals or businesses seeking specific services, such as graphic design, web development, writing, marketing, etc. They could be entrepreneurs, small business owners, project managers, or individuals in need of specialized skills.
How will you validate and test your assumptions about the project?
Conduct market research to understand the demand for freelancing services in your target market.
Run surveys or interviews with potential users to gather their feedback and understand their points of view about missing technologies, features and functionalities in currently available freelanding platforms.
Create a minimum viable product (MVP) with basic functionality to test the initial response and collect user feedback.
What metrics will you use to measure the success of your project?
Feedback and ratings: Collect feedback from users and track their satisfaction levels through ratings and reviews.
User engagement: Track the frequency and duration of user interactions on the website.
Monitor the percentage of users who successfully hire a service provider through the platform.
Transaction volume: Measure the number and value of transactions conducted using cryptocurrencies on the platform.
How do you plan to iterate and pivot if necessary based on user feedback?
Implement changes or new features based on user feedback and iterate the product accordingly.
Continuously gather feedback through surveys, user interviews, and monitoring user behavior to identify further areas for improvement or potential pivots.
Remain flexible and open to making significant changes to the platform if user feedback indicates a need for a different approach or additional features.
Address any usability or security issues identified by users and make iterative improvements to the cryptocurrency payment functionality.
Leveraging AI, Open-Source, and Experts #
AI (Artificial Intelligence):
- Taking into account AI suggestion about functionalities and structure of the project
- For future deployment, we can use AI algorithms to help detect and prevent fraudulent activities by analyzing user behavior patterns, transaction history, and other relevant data.
- AI techniques such as NLP (Natural language processing) can be used to improve search functionalities and enable users to find the relevant services or posts more effectively. (also for future deployment)
Open-Source:
- Open-source frameworks and libraries provide a solid foundation for building web applications. By utilizing these resources, we can accelerate development, reduce costs, and benefit from the contributions and support of the open-source community.
- Analyze relevant open source existing-platforms functionalities and compare performance of our functionalities with them in order to enhance it.
Experts in relevant domains:
- We will try to make discussion with experts about testing and implementation, collect their feedback and advices.
- As stated in lectures one of the founders of Kazan Express will be a guest lecture, we will try to learn a lot of things from him, since both of our project is similar in some aspects.
Inviting Other Students #
- Since now we have few members, new members are welcome to discuss with us about the idea of the project and join our team.
- Also we might invite new members from front-end course to help us to design the front-end interface of our website.
Defining the Vision for Your Project #
FairLance platform: #
The project aims to create a comprehensive freelancing platform that connects individuals and businesses seeking specific services with qualified service providers globally. By leveraging advanced technologies and a user-friendly interface, the platform revolutionizes the way people find and hire freelancers while removing limitations imposed by geographic location or nationality.
Intended Benefits and Impact: #
- Service Seekers: Users seeking services can easily post their requirements, review the profiles and portfolios of service providers, and select the most suitable candidates. They benefit from a broader range of skilled professionals, faster response times, and access to a global talent pool.
- Service Providers: Freelancers gain increased exposure and opportunities to showcase their skills and expertise. They can connect with clients globally, expanding their client base and potentially earning more income.
- Efficiency and Convenience: The platform streamlines the entire process of finding, hiring, and collaborating with freelancers. Users can easily manage projects, track progress, and make secure payments, resulting in improved efficiency and convenience.
- Trust and Security: By incorporating cryptocurrency payments and implementing fraud detection measures, the platform ensures secure transactions and builds trust between users and service providers.
- Global Collaboration: The project fosters international collaboration by connecting individuals and businesses across different countries and cultures, facilitating the exchange of knowledge and expertise on a global scale.
Schematic Drawings: #
Tech Stack: #
Our platform will use many frameworks and technologies. They can not all be defined from the start, since our view will be developing and we might need different frameworks to do different tasks. However, we will mainly focus on the following technologies:
- Django: we will mainly use django for the backend part of our project to deal with customers, manage the database, and support mechanism.
- MySQL: will be our data base management system
- React: for the front-end part
- Brownie/hardhat: for intaracting with solidity
- Solidity: for writing smart contracts
- Moralis: for wallet managemnt (front-end part of intaracting with solidity)
Anticipating Future Problems: #
- Technical complexities: we need to develop a robust and scalable platform with features such as user management, job posting, payment processing, and messaging. Mitigation: break the whole project into smaller modules and develop them iteratively.
- Resource limitations: we may face server capacity, memory limitations. In addition, we may not have the necessary skill set for some parts of the project. Mitigation: upgrade the server and/or use optimized data structures/algorithms. Delegate some parts of the project to another team that specializes in that particular area.
- Time constraints: meet project deadlines and provide a functional platform within the specified time frame. Mitigation: we will make a project plan with milestones and deadlines. we will follow it and adjust it as needed.
- External dependencies: using third-party services or APIs for some functionality. Mitigation: choosing the most reliable services or developing your own.
Elaborate Explanations: #
We will divide into two teams. One for front-end and the other for backend. Howver, it is not strict We will collaborate on some issues arrise along the way.
Also, we will conduct regular team meating to discuss any issues.
User Management:
- Description: This component allows users to create accounts, log in and manage their profiles
- Functionality: It enables secure access to the platform and the ability to track user activities(job posting, bidding and payment history)
- Contribution: Building trust and maintaining professional environment
Job Posting and Bidding:
- Description: This component allows client to post job requirements, while freelancers can submit bids
- Functionality: Job posting and bidding facilitate the matching of clients with suitable freelancers. It provides a platform for clients to describe their project requirements and for freelancers to showcase their skills and propose their services.
- Contribution: This process enables efficient communication and collaboration between clients and freelancers.
Payment Processing
- Description: Payment processing is a crucial functionality that allows clients to pay freelancers securely and freelancers to receive their earnings.
- Functionality: By integrating crypto payment options, our platform can offer fast, secure, and transparent transactions. Cryptocurrencies can streamline cross-border payments, reduce fees, and provide an additional layer of privacy.
- Contribution: Implementing robust encryption and security measures ensures the protection of sensitive financial information.
Messaging:
- Description: A messaging system allows clients and freelancers to communicate and collaborate on project details, clarifications, and updates.
- Functionality: Effective messaging and communication features enable smooth collaboration, clarification of project requirements, and real-time feedback.
- Contribution: It helps to build trust and establish a productive working relationship between clients and freelancers.
Review and Rating System:
- Description: A review and rating system allows clients to provide feedback and rate the quality of work delivered by freelancers.
- Functionality: The review and rating system promotes accountability, transparency, and quality control.
- Contribution: It helps clients make informed decisions when selecting freelancers and assists freelancers in building their reputation and credibility.
Feedback
I think, your project is impressive! A fair freelance website that utilizes cryptocurrency and prioritizes user protection is an innovative concept, which surprisingly still doesn’t exist. Your team’s dedication and strong collaboration are evident, and it’s great to see that you have a clear vision for the project.Considering that our course aims to achieve a minimal viable product (MVP) by the end of the semester, I would suggest focusing on scaling down the project to create a web app that encompasses the core functionalities. This approach will allow you to build a solid foundation that can be expanded and enhanced in the future.
To ensure efficient execution within our limited timeframe of already six weeks, I recommend outlining the main features of your project and prioritizing their development. It’s essential to identify specific areas that can be streamlined or simplified without compromising the core functionality.
Week #2 #
FairLance: Introducing Fairlance, an innovative platform that aims to provide fair opportunities to freelancers worldwide. Leveraging decentralized technologies, our website will transcend geographical boundaries, empowering freelancers to expand their reach without worrying about excessive fees, unlike other conventional freelancing platforms
By the end of the second week in this project, we have gained a clearer vision and deeper insights. The upcoming report will provide comprehensive technical details related to the project, offering valuable additional information.
Choosing the Tech Stack, Designing the Architecture #
Tech Stack Selection #
Now, we have a more solid vision for our project, and we can identify the major parts in it and how are we going to set the tech stack.
Our team decided to split the teck stack to three major levels:
Frontend #
The frontend part of the project is actually huge, and we have many pages to handle.
React: The main framework for our project. It is the most common framework and it is suitable for teamwork.
We decided to adapt the following strucutre for our react project:
/public /svg icons index.html /src /assets /imgages /svg /styles /components [common-components].js /pages /Home /Login /Signup App.js Index.js package.json
Following this structure will greatly enhance teamwork for us. We have decided to allocate different team members to handle individual pages. Each team member will be responsible for adding their respective page to the designated folder, while leveraging the common components or creating new ones as necessary. This approach is designed to minimize conflicts within our remote repository, ensuring a smoother collaborative process for all involved.
CSS Frameworks/SASS: Currently, we are utilizing plain CSS. However, in the upcoming weeks, we plan to transition to SASS as we require consistent styling across all pages. Initially, we refrained from adopting SASS due to our limited familiarity with the framework.
useMoralis: a powerful React framework that will greatly assist us in interacting with our smart contract. This framework is specifically designed to enhance the user experience by allowing them to effortlessly link their preferred smart wallets, including popular options like Metamask, Coinbase, and Atomic Wallet. With useMoralis, we can easily handle payment requests sent to the backend.
Backend #
Django: We’ve chosen Django, the leading Python framework, for our backend development. Its popularity and team-friendly features make it an ideal choice. We’ve divided responsibilities within our backend team, assigning each member a specific feature.
PostgreSQL: PostgreSQL is vital for our project due to its extensive security features, which are crucial when dealing with real money. Additionally, its recent performance enhancements make it a fast and efficient choice for handling large amounts of data.
Smart contract #
We decided to make it as a seperate level because of its extra difficulty
Solidity: the main language for creating smart contracts. Our smart contract will have the following main features:
function startEmployment(sender, reciever) payable {} function endEmploymentSuccessfully(sender, reciever) payable {} function solveConflict(employer, freelancer) onlyOwner {}
startEmployment
function, a sender will start a new payment transaction to the reciever.endEmploymentSuccessfully
when an employer likes the job and complete the transaction.endEmployment
is only accessible to the admins to solve conflicts.
RedHat/Brownie: Two frameworks for interacting with the smart contract. We might consider only one of them in the future
Architecture Design #
Designing a robust and scalable architecture is crucial for the long-term success and maintainability of your software project. This week, focus on defining the architecture that will serve as the backbone of your application. Consider the following aspects:
Component Breakdown:
As described in the teck stack we have three main components (frontend, backend, smart contract).
A more detailed architecture:
Frontend: #
We will mainly have the following pages:
Landing Page: the entry point for our platform. Here all unauthorized users will see some examples of projects and have the oppurtunity to sign up or sign in
Sign up/Sign in: The quthorization page where users will have the option to sign in/sign up.
Profile page: users can view their profile,
Browse jobs: This page will be for authorized users. They can see all the related jobs and apply for the job.
Post infromation page: this page contains more details about the project, and freelancer can comment here (Apply for job).
Create post page: this page is for emplyers to post oppurtunities.
Messaging page: this page to agree on details between freelancer and employer.
Backend: #
We have many features for the backend
Authorization mechanism: We will have different kinds of privillages, like unauthorized, admin, and user.
Messaging system: One of the hardest parts in our projects. We need to set it to let the user communicate with the employer. Moreoevr, we will ban sending other contact methods to prevent users from leaving our platform.
Posts management: Including fetching, posting, and editing posts.
Applying for jobs: Comments mechanism to apply for posted jobs.
Uploading CV: to let the freelancer showcase their experience.
Smart contract: #
The payment system in general
Hiring: keep the money in the smart contract as a garantee to pay the freelancer
Release: upon successful complete
Conflict management: only for owners to decide what to do in case of conflict.
Data Management: Determine how data will be stored, accessed, and manipulated within your application. Select appropriate databases or data storage solutions based on the project’s requirements.
We decided to use PostgeSQL relational database system to store our data for several reasons
- Security: PostgreSQL prioritizes security and provides robust mechanisms for user authentication, data encryption, and access control.
- Reliability and Stability: PostgreSQL is known for its robustness and stability. It is widely used in production environments for both small and large-scale applications.
- Scalability: PostgreSQL can handle large amounts of data and can scale effectively as our project grows.
During the last meeting, we decided and agreed on our database structure
Skills table: Only admins can add skills to this table. Freelancers and project owners choose from this table.
Project Publication: Clients, acting as project owners, have the ability to publish projects. They provide essential details such as the project’s title, description, optional media attachments, deadline, and a set of required skills. All of the previous will be stored in projects table.
Freelancers: Each user who is a freelancers specifies his skill set.
Applications table: Freelancers on the platform can browse through the available projects and submit applications for those that align with their skillsets.
Selection Process (Employment table): Project owners review the received applications and carefully choose the freelancers they wish to hire for their projects. The selection process involves assessing the freelancers’ skills, experience, and overall suitability for the specific project requirements. Once a project owner selects a freelancer, both parties enter into negotiations to establish mutually agreed-upon terms, including the project price. They determine a reasonable price within the specified range.
Smart Contract and Payments: Upon reaching an agreement, the project owner and the hired freelancer proceed with the contractual arrangements. The agreed-upon price is transferred to a smart contract, where it remains securely held until the specified project deadline. If the project is successfully completed within the given timeframe, the agreed-upon amount is then transferred to the freelancer’s wallet as payment for their services.
Messages table: Stores messages between users on the website.
Using Django REST framework and PostgreSQL we can ensure secure access and manipulation of our data from the APIs side
User Interface (UI) Design
For design we are getting inspiration from e-commercial websites, and some public designs on figma community. We have already developed the landing page for our website. You can check our design here.
In the following section we will show you the general theme to our website.
Landing page first view: the user will be directed here once entered our website
Landing page recent posts: here the user will check recenlty posted/delivered projects to motivate him to enter our platform
NOTE: those pictures are only to show our initial design, and not the final version.
Integration and APIs: As a result of the discussion during the last meeting, we are going to implement the following API’s that will interact with the database
- APIs to login, logout, autheticate users to add projects to projects table.
- API to get user’s information by ID or username from users table.
- API to retrieve project’s information by ID.
- API to retrieve application for a specific project.
- API to retrieve relevant projects for a specific user.
- API to hire a specific user on some project.
- API to do crypto transactions.
- API to send messages between users.
We will use Django REST framework to implement these API’s because it provides a comprehensive set of tools and features specifically designed for building RESTful APIs, it offers functionalities such as serialization, authentication, permissions, and more, which significantly simplify API development.
Scalability and Performance: As our project is still in the early stages, it is a still a little vague whether will it be possible for us to have both horizontal and vertical scalabilities as the website experiences increased loads. However, from the current perspective it seems more suitable to focus on scaling up (vertical scalability). In this way during the future growth of our project, we are aiming to optimize the utilization of the available resources. In addition, the approach will be cost-effective for a small team like ours Performance: To maintain a good performance having increased loads, we are planning to keep optimizing the content, for the example images and assets to have faster page load times. We are also planning to focus on database optimization, where we’re planning to implement indexing and query optimization to ensure fast database operations.
Security and Privacy:
Security is our top priority at FairLance, especially considering the sensitive nature of handling customers’ funds. We take this responsibility seriously and are confident in our ability to ensure the highest level of security. With our website built on the Ethereum blockchain, we benefit from the inherent security measures provided by this decentralized network.
Furthermore, by utilizing cryptocurrency as the primary payment method, we offer an added layer of privacy for our users. Transactions conducted through our platform ensure anonymity, as payment details cannot be traced or linked to individuals’ identities.
However, to address potential conflicts between users, we have implemented some centralized technologies that facilitate dispute resolution. In such cases, only authorized administrators will have access to the relevant information. They will follow predetermined rules and guidelines outlined in our terms and conditions to resolve any conflicts promptly and fairly. Rest assured that user privacy remains a paramount consideration in all our processes.
Error Handling and Resilience:
In our project, if an error occurs, the employer has the authority to halt the transaction until an administrator resolves the current issue. This functionality aims to minimize the costs associated with errors. Furthermore, we have future plans to enable this feature to be directly accessible through interactions with the smart contract. This means that even if our servers experience downtime, the employer will still be able to postpone the payment until the website is operational again and all issues have been resolved.
Deployment and DevOps:
We have established our GitHub repository, which you can access and review here. To ensure code quality and collaboration, we have implemented protection rules for our main branch. Any changes or additions to the main branch will require thorough reviews through pull requests before merging.
Additionally, each team member will be responsible for creating their own branch to work on and represent their new feature within the project.
To maintain high standards of reliability and security, we will incorporate various testing procedures before merging pull requests. This includes utilizing code linters, conducting custom tests, and performing security tests. As we progress and prepare to host our website, we plan to automate these processes using GitHub Actions.
It’s important to note that our project is still in its early stages, and we remain open to adopting new technologies and approaches as we continue development.
Questionnaire: #
Tech Stack Resources: Are you utilizing any project-based books that specifically cover your tech stack and help you build your project?
Currently, We are not using any project-based books. However, We are heavily relying on the documentation and resources provided by the frameworks we are using.
Mentorship Support: Do you currently have a mentor actively involved in your project?
Currently, our project does not have a mentor. We haven’t considered having a mentor for the project as we are still in the early stage. However, we recognize the potential benefits of having a mentor, so we might consider seeking out a mentor in later stages or challenging points in the project.
Exploring Alternative Resources: In addition to project-based books, what other resources have you explored to expand your understanding of your tech stack?
As we said in the first question, our main resources are the documentations provided by the frameworks like Django, Django REST and React documentations.In addition to documentation, we sometimes go for popular video tutorials. Also, we always try to analyze how other popular platforms handle features and functionalities related to our platform. By thoroughly studying these resources, we are gaining in-depth knowledge about the features, functionalities, and best practices of our tech stack. This approach allows us to utilize them effectively in our project development in order to achieve security, scalability and performance.
Identifying Knowledge Gaps: Are there any specific areas within your tech stack where you or your team feel there are knowledge gaps or expertise is lacking?
The tech stack dicision based on our different knowledge gaps will be like following:
Frontend
Due to the diverse backgrounds of our frontend team members, each individual utilizes different frameworks and technologies. However, in order to enhance our teamwork efficiency, we have collectively chosen REACT as our primary framework.
To bridge the knowledge gap and ensure everyone is well-versed in REACT, we have devised a plan for the first two weeks. Each team member will be assigned a specific page based on their expertise, allowing them to practice and familiarize themselves with the framework. This approach aims to strengthen our skills and create a cohesive understanding of REACT within the team.
- Ahmad Alhussin Create main landing page, browsing jobs page.
- Ghadeer Akleh Create profile information page
- Hamada Salhab Create sign in/sign up, and posts pages
Backend
The backend team also faces various knowledge gaps, and we have adopted a similar approach as the frontend team to address this issue. Each team member will be given the opportunity to practice and enhance their skills by focusing on specific features.
In order to effectively utilize the first two weeks, we have divided the tasks as follows:
- Vladislav Lopatovskii Create the main hiring mechanism
- Ahmad Sarhan Design schemas, views and models for those scheams
- Yazan Kbaili Authentication mechanism
Smart contracts
We acknowledge that our team lacks experience in working with smart contracts. Nevertheless, since our smart contract implementation does not involve complex technologies, we have decided to assign this particular section to a team member who possesses background knowledge in solidity
- Ahmad Alhussin
Engaging with the Tech Community: Have you actively engaged with the broader tech community to seek guidance or learn from experienced professionals in your tech stack?
At present, we heavily rely on online resources for our work. By utilizing renowned frameworks in our projects, we can conveniently discover solutions to any inquiries on platforms like Stack Overflow. Take REACT as an example, with its public repository amassing over 200,0000 stars, it offers a wealth of valuable information covering various common issues.
Learning Objectives: What specific learning objectives have you set for yourself and your team in relation to your tech stack this week? How do you plan to achieve these objectives, and what strategies or resources will you employ to deepen your understanding?
Our objective for this week is developing a better understanding of security practices and vulnerabilities within our tech stack.We will review documentation, security guidelines, and best practices provided by the framework creators. Furthermore, we will explore security-related articles, blogs, and tutorials specific to our tech stack.
Sharing Knowledge with Peers: How have you been sharing your knowledge and expertise with your teammates? Have you organized any knowledge-sharing sessions or discussions to facilitate the exchange of insights and experiences related to your tech stack?
During our regular team meetings, we make sure to discuss any challenges or issues we have encountered. We also communicate any novel techniques or tools that we come across and think the group might find useful. We’ve also set up a Telegram group where we can communicate and schedule meetings if necessary. Although no formal knowledge-sharing meetings have been scheduled, we place a high value on teamwork and open communication to make sure that everyone is constantly learning new things.
How have you leveraged AI to compensate for any lacking expertise in your tech stack? Have you utilized AI-powered tools or platforms to expedite the process of acquiring knowledge and expertise in your tech stack?
We have not leveraged AI to compensate for any lacking expertise in our tech stack. For now, we are relaying on our team’s expertise and experience to develop and maintain the platform. However, we are open to explore AI tools to improve our processes and enhance the user experience.
Tech Stack and Team Allocation #
As mentioned in earlier sections, our approach involves assigning each team member a specific page or feature to work on. Our team is divided into parts, and during our regular meetings, we assign responsibilities for each week based on project requirements and individual strengths.
This dynamic structure allows us to adapt to changes efficiently. For instance, if a team member has dedicated more time and effort to a particular feature, we will balance their workload by assigning them a relatively easier task in the following week. This approach ensures fairness and enables us to optimize productivity while maintaining flexibility within our team.
For the first two weeks we assigned the following responsiblities to our team:
Team Member | Main task | Description |
---|---|---|
Ahmad Alhussin | Main Page frontend/ project structure setting | Created the general theme for our website, creating finding job page, and set the project structure |
Ahmad Sarhan | Create schemas | Designed the schemas and started creating view and models for them |
Ghadeer Akleh | Profile page | Started creating the profile page where the freelancer upload their resume. |
Vladislav Lopatovskii | Hiring mechanism | Started with creating the hiring feature in FairLance (mainly collecting job inforamtion from employer) |
Hamada Salhab | Log In/Sign Up, Post pages | Started working on the log in and sign up pages. Later will develop editing posts page |
Yazan Kbaili | Athentication | Started creating authentication mechanism with Django |
The genaral roles are divided like following (for the long term)
Frontend
- Ahmad Alhussin
- Ghadeer Akleh
- Hamada Salhab
Backend
- Vladislav Lopatovskii
- Ahmad Sarhan
- Yazan Kbaili
Smart contract
- Ahmad Alhussin
Week #3 #
Developing the first prototype, creating the priority list #
You can check our progress on FairLance github repo, and for the frontend part on fairlance frontend.
Throughout the week, significant advancements have been made in backend, frontend, and smart contract development. The following accomplishments are outlined in the report:
- Substantial progress has been made in implementing the backend.
- The user interface is nearly complete; a few additional pages need to be created and linked to the backend.
- The smart contract is almost finished; further discussions are required to determine additional features or the removal of unnecessary ones.
- We have implemented automated tests for our smart contract to ensure its functionality.
Progress report: #
Prototype Features: #
We have implemented the following features/functionalities so far:
- Applications: the API allows to create new applications, retrieve a list of applications for a particular project and application details, delete and update applications.
- Employments: it provides functions such as creating a new employment record, list all of employment records, getting a specific employment record, deleting and updating a record.
- Projects: users can create a new project, update a project, delete a project, get a range of projects based on indexes, get a specific project
- Users: it manages user-related functions such as signing up, signing in and etc.
Core interactions that are essential to our project’s goals are user registration/authentication, profile management, job posting, hiring a freelancer and payment processing(including crypto payments).
User flows:
- Freelancer registration and profile setup:
- User signs up on our platform
- User completes the profile by adding skills, cv/portfolio.
- Client registration and job posting:
- User signs up on our platform
- User creates a project by providing details/requirements
- User posts the project
- Freelancer job search and application process
- Freelancer signs in and searche for available projects
- Freelancer reads project details
- Freelancer submits proposal for selected projects
- Client project hiring
- Client reviews proposals for their project
- Client selects a freelancer and starts a price negotiation process that includes asking and answering questions
- Client approves the deal, freelancer takes the project
Data Management:
- Users: the platform stores user data, credentials and profiles.
- Applications: the platform stores application data such as project id and freelancer id.
- Employments: the platform stores employment data such as application id and payment id.
- Payments: the platform stores payment data such as payer and payee ids, amount and date.
- Projects: the platform stores projects details(id, owner, title and etc).
- Skills: the platform stores data about skills(required and available)
- Messages: the platform stores message data such as id, sender and recevier ids, date and content of the message.
Smart Contract:
- We have implemented the smart contract, created tests, which you can view in contract branch in our repository.
- Moreover, the contract is deployed on Seploia test network, and can be viewed here.
- Howver, the contract is not ready for production yet, since we need to create more tests and more features. We plan to deploy it on main net in the last steps only.
User Interface: #
You can check our design on fairlance.ru, we have made significant progress in frontend development.
Here you can find some explainations about the website:
Landing Page: This webpage is designed for first-time users visiting our website. Here, users can explore recent post examples, view completed projects, and find a brief introduction to our website.
In the initial view, users have the option to either post a job (by clicking on “Find a Freelancer”) or search for a job using the search bar. Additionally, the navigation bar provides links to various pages, including login, signup, home, and job listings.
Below, you will find a selection of recent job examples and completed projects.
Finally, you reach the footer, where you can find the FAQ page, home, and some pages that are not ready yet.
Finding jobs page: Here, you will be directed to find a matching job. You can use filters based on categories, budget, time to finish the project, and minimum rating for employers.
Search bar to find a matching job, some projects
Some extra filters and more posts
Signin, Signup pages: Here, the user can enter his details to signin or signup.
FAQ page: Here you can find some frequently asked questions.
Challenges and Solutions: #
- This week, we encountered some issues with a smart contract. As we explained in the previous reportes, the transaction process works according to the following: When a project owner hires a freelancer, the payment amount is transferred from the project owner’s wallet to a smart contract, where it remains until the deadline for project completion.
- We earn money by cutting a small ratio of the price from 5% to 10% depending on the total amount (we haven’t firmly decided on that yet).
- The issue we’re facing is that every interaction with the smart contract incurs an unpredictable cost, sometimes resulting in high expenses. Additionally, as we store more information in the smart contract, such as deadlines, senders, receivers, and other relevant details, we require additional interactions, which further increases the associated costs.
- If we store a large amount of information in the smart contract, the transaction costs may exceed the percentage we earn from the project price, resulting in financial losses, particularly in the initial stages of the website.
- In order to provide a solution, our decision was to design a minimalistic smart contract. This approach involves refraining from storing excessive project-related information in the contract, as we determined them to be unnecessary. Additionally, the contract will incorporate a whitelist functionality, enabling us to select the most stable and cost-effective stable coin (such as BUSD, USDT, etc.) for integration. All extra functionalities will be implemented in the backend.
Next Steps: #
- Our very next step is going to be deploying the backend and connecting it to the frontend and make sure that they are integrated properly. This should probably be achieved before the end of this week.
- Concurrently, the backend should also be connected to smart contract that’s deployed on the test network.
- Next, we are planning to add more features, such as: 1- Payment System. 2- Messaging system. 3- Search functionality & filtering (we might apply ML if we have enough time).
- As we are working without a designer, we are planning to reassess the design and solve the minor issues we are (and will be) encountering along the way.
- Finally, the smart contract needs to be deployed on the main network.
Feedback by Rustam
I’ve read through week 2 and week 3 progress reports and must say that project handling is ordered and thought out. It is nice to see that you and your team have accomplished a lot during this weeks and I am confident that backend integration will be finished soon. As I understand the smart contract payment optionality is essential for the original vision of the project, but keep in mind the limited time frame of the course - good plan today better than a perfect plan tomorrow. Therefore, I would suggest to spend some time on solving that issue, and if you can’t get it done fast, to pivot and get a common payment infrastructure for the time being (you also need it for the markets with constrained use of cryptocurrencies, so can start from there as a well). Make sure to keep the pace and move fast.Overall, good reports and progress. 5/5 for both weeks
Week #4 #
Introduction #
Throughout this week, we have achieved significant progress by successfully connecting the majority of our frontend to the backend. Moreover, we have prepared and tested the smart contract, and the website is now operational on our remote server. All updates will be reflected there. It is important to note that there are several pages yet to be implemented, which are currently on our to-do list.
Our objective for the upcoming week is to establish the connection between our smart contract and the backend. Subsequently, we plan to develop a messaging system that facilitates communication between employers and freelancers.
By incorporating these functionalities, we anticipate that our minimum viable product (MVP) will be near completion, requiring only some fine-tuning and further enhancements.
External Feedback #
During the past week, we made efforts to engage as many friends as possible to gather valuable feedback on our website. To streamline the process and save time for everyone involved, we used Google Forms. In this form, we included multiple rating options for different aspects of our website pages. Users were able to rate each page’s functionality on a scale of 1-5 and provide additional feedback through comments if they wished.
Thanks to the insightful responses we received, some friends brought to our attention critical issues that needed immediate attention. For instance, one user pointed out that “The username in the navigation bar doesn’t change after I update my profile name.” Upon receiving this feedback, we fixed the issue. Another concern that one friend brought up is that “If I press log out, the navigation bar doesn’t show that I logged out until I refresh the page”. This flaw had a notable impact on the user experience, and we immediately took action to fix it. Additionally, a reported issue regarding the functionality of adding new posts provided us with valuable information that allowed us to make improvements.
We also took careful note of the ratings on the website’s styling and functionality, and we’re committed to enhancing these aspects in the near future.
In conclusion, gathering first-hand feedback from users has proven to be immensely beneficial. It brought several issues to our attention and provided us with valuable insights for future improvements. We genuinely appreciate the feedback we received as it helps us better understand what attracts users and enables us to prioritize our focus on the right areas in the upcoming weeks.
Testing #
Before we integrated the backend and frontend components, we conducted thorough testing of every API endpoint using the features provided by Django REST Framework. These features allow us to test each API endpoint in our project using various types of requests such as GET, POST, UPDATE, and DELETE.
To simulate the communication process with the frontend, we utilized Python clients, enabling us to write test cases for our API endpoints. This approach allowed us to simulate different scenarios and validate the expected behavior of our API endpoints, ensuring that they functioned as intended.
By employing this comprehensive testing approach, we were able to identify and address issues and bugs that emerged in areas such as authentication, security, serialization, and modeling. Additionally, it helped us determine the precise structure of the requests transferred between the frontend and backend components.
Through rigorous testing, we gained valuable insights into the performance and reliability of our application, ensuring a seamless interaction between the frontend and backend components. This testing process significantly contributed to the overall quality and stability of our project, providing a robust and secure user experience.
After testing stage, we integrated backend and frontend componenets. We faced unexpected bugs because we are new to the integration of react and django process, but we managed to integrate them, check and validate the behavior of the backend APIs using the front-end component.
If you are interested to give our website a quick feedback, you are more than welcome, here is the link to the google form: https://forms.gle/BG1thkVwoPbfKfni7
Iteration and refinement #
During the development process, we faced many bugs while connecting the frontend to the backend. However, we managed to fix them and even deploy the project.
As we progressed, the frontenders provided the backenders with new requirements. These requirements required changes and refinements to the API(existing endpoints and new ones) and database.
In addition, we reviewed our goals and functionality and tweaked them a bit because we realized that not all of them could be accomplished for the MVP.
Feedback by Rustam
I’ve visited your website and read through the report. Overall, good report and progress. Keep it up! I am excited to see what you would be able to accomplish during our 7 weeks! 5/5 for the week.
Week #5 #
During this week, we were developing the last steps in our project. In our website now you can check your applications and offers (after getting hired). The balance is also shown in the front-end, but you can only top it up from the backend (not linked yet).
Feedback #
As freelancing is open to individuals from all backgrounds, anyone filling out this form can be considered a potential stakeholder. To better understand the user base, we have categorized them into two groups: those with prior IT experience and non-technical individuals. This division allows us to assess the ease of onboarding for non-technical users and determine the level of simplicity we need to achieve.
Our primary objective is to make our website as user-friendly and intuitive as possible. By prioritizing simplicity, we aim to distinguish ourselves from other crypto-based platforms where only crypto experts can navigate without the risk of scams. By providing a straightforward and secure environment, we hope to attract a wider audience and build trust among both technical and non-technical users.
Using the same google form from the last week, we got some reviews about the website. Mainly, we recieved some suggestions, difficulties, and bug reports.
Suggestions
We have received suggestions to enhance the website by ensuring its mobile responsiveness, implementing a dark mode, and adding multi-language support.
To address the mobile responsiveness, we have taken the decision to collaborate with a first-year student from the frontend course. We are optimistic that this implementation will be completed in time for the MVP.
On the other hand, enabling a dark mode and multi-language features is considered not a priority at the moment, we acknowledge its value and will consider implementing it in the future.
Moreover, we got some minor suggestions like:
- change “Add post” button to “Add job”. (done)
- Add icon to the website. (done)
Bugs
We added a report bugs button to our website, this button will direct you to a form to fill the difficulty that you have encountered. As a result we fixed the following bugs:
- when logging out and clicking return button you will be directed to empty page. (fixed)
- You don’t get any response after submitting an apllication. (fixed)
- filters do not work. (they are not implemented yet)
- You can’t upload photo. (it was not implemented, but now you can do it)
- You can’t upload CV. (it is not ready yet)
Difficulties
We have received feedback indicating that users without technical experience find it challenging to understand the process of crypto payments, leading to frustration.
Future work #
We have an extensive to-do list for our project, and we are determined to ensure that our website is fully functional by the MVP presentation. However, our development efforts will not stop there, as we have plans to continue enhancing the website and introducing additional features.
Here are some of the major features we have planned:
Simplifying the user experience for non-technical individuals: Our goal is to make the website more accessible to people without a technical background. To achieve this, we are working on enabling the purchase of cryptocurrencies directly from our website using regular payment systems. This means that users will not even need to have prior knowledge of cryptocurrencies to utilize our platform effectively.
Multiple language support: As FairLance, we are committed to removing language barriers. To accomplish this, we are dedicated to translating our website into different languages.
Embeded CV: We have a straightforward yet impactful plan to enhance the visual appeal of our website. Instead of a plain CV on the profile page, we intend to incorporate sections for achievements, previous experience, and education, creating a more engaging and aesthetically pleasing experience for our users.
Messaging system: We are working to develop a robust messaging system, and we are striving to have it completed in time for the presentation. This feature will enable seamless communication between users, and making deals.
Alright, you project and reports are mature, professional and to the point. Noted the final presentation on the top of the file. Need to say that it was a bliss to read your reports and see your project grow. I think you are determined engineers who can accomplish much more. Thus, keep the focus, iterate and ship.
5 the week! And good luck with the project and the final presentation! You have accomplished a lot! Cheers