DEV Community

Prisca Chidimma Maduka
Prisca Chidimma Maduka

Posted on

DevLine: Facilitating Collaborative Mastery of Coding Concepts Through Peer-to-Peer Learning.

DevLine

Recently, as part of the requirement for ALX software engineering Foundations, I and two other software engineers, Samuel Bassey and Israel Udofia embarked on our portfolio project we've named Devline.

Devline is a platform designed to connect students with mentors for personalized learning. With DevLine, students can easily find mentors who know about any specific topic they want to learn about and request mentorship sessions at no cost at all. Conversely, mentors can showcase their expertise and help students grow in their chosen fields as a way of giving back to the community. Mentors can also be students depending on the subject matter.

The project took place over 5 weeks, 3 weeks for planning 2 weeks for development, and 1 week for finishing touches. Bassey worked on the frontend, Israel helped with the backend while I worked on both frontend and backend.

WHAT INSPIRED US TO CHOOSE TO WORK ON THIS PROJECT
As aspiring software engineers, we recognize the challenges and frustrations of understanding complex coding concepts. Sometimes, there may be issues that our usual academic resources might not be enough to offer the kind of personal guidance that is needed at a particular point in time, leaving us feeling stuck, discouraged, or with only partial knowledge.
In response to these obstacles, we decided to create a solution that seeks to improve the learning experience not just us but also many other people like us. Devline is putting into practice our vision: a peer-to-peer platform whose goal is to provide an environment for students collaboration in learning different coding concepts. Our motivation comes from our own experiences and where we've encountered challenges in our own learning journeys.

Architecture:
Architecture

Technologies Used
- Frontend:
We utilized React.js for the frontend development. React's component-based architecture and virtual DOM allowed us to create interactive and dynamic user interfaces efficiently.
- Backend:
For the backend, we used Flask, a lightweight and flexible micro-framework for Python. With Flask, we were able to quickly develop RESTful APIs and handle server-side logic effectively, ensuring smooth communication between the frontend and backend components of Devline.
- Database:
We utilized PostgreSQL as our database management system.

These technologies were carefully chosen to provide a solid foundation for the development of Devline, enabling us to create a robust and scalable platform that meets the needs of our users effectively.

Features:

  • Signing Up:
    Students and mentors can sign up for accounts on the platform.

  • Browsing Mentors:
    Students can browse through a list of available mentors and their subjects of expertise.

  • Requesting Mentorship:
    Students can select a mentor and send a mentorship request.

  • Accepting Requests:
    Mentors can view and accept/reject mentorship requests from students.

  • Pairing:
    Once a mentorship request is accepted, the mentor and student are paired up for sessions.

  • Review:
    The student can optionally review the mentor after each session.

MOST DIFFICULT TECHNICAL CHALLENGES I EXPERIENCED

By Prisca:

Working on this project has been both exciting and challenging. I've discovered gaps in my knowledge and learned alot along the way. A significant challenge I had was encountered with Flask-Login and Blueprints. I wasn’t aware that an application should only have one login manager, even with multiple blueprints. Initially, everything worked smoothly when I focused solely on student routes and Israel handled some of the mentor routes. However, upon integration, we encountered an unexpected error. Logging in as a student worked fine, but upon logging out and attempting to log in as a mentor, the application incorrectly utilized the student table. The reverse occurred if I first logged in as a mentor. Through research, including a helpful Stack Overflow thread , I resolved the issue by managing sessions (saving the session type upon login and loading the appropriate user model accordingly).
On the frontend, the challenge was particularly daunting because of my lack of prior experience with React.js. Nevertheless, this project made me to dive into frontend development and contribute meaningfully. I managed routing and API requests to the backend, frequently using useState, useEffect, useNavigate, and useContext. Interestingly, I discovered that useContext does not persist data upon page refresh. Unfortunately, time constraints prevented me from fully investigating this issue. As a workaround, I utilized useParams to retrieve certain data (such as student ID), which, most of the time, led to an additional API call to the backend to retrieve what could have been passed from one component to the other. While effective, I acknowledge this may not be the most efficient approach and intend to learn alternative solutions.

A little about me:
I am a software engineer with a preference for backend and DevOps roles. I am passionate about creating quality software to make the world a better place.
LinkedIn profile

By Bassey:

Being on the portfolio project has exposed me to a lot of tools outside ALX, of course, every new project comes with a different experience and approach. We are always learning, as a frontend developer this project has helped me see better ways I could tackle responsiveness and redundancies. Since it was a collaboration project we had issues with merge since we had to wait for approvals, since I was using react I had to learn and implement within two weeks. Also, I had a Network services issue that spanned more than 5 days and it really slowed down my work.

A little about me:
Hi there, I'm a young web developer with a great passion for creating a clean, engaging, and effective online presence that will improve client's experience.
LinkedIn profile

Links:
Deployed app
Project repository

Thank you for reading.

Top comments (0)