App Dev 1-13
App Dev 1-13
App Dev 1-13
Activity Steps:
The objective of CommunITask is to design and develop a student-friendly platform that provides an
environment for IT students to hone their technical, interpersonal and project management skills through
hands-on projects, gigs, and mentorship. Students not only learn and earn by doing and teaching, but also
build suitable portfolios showcasing their skills and experience enabling them to have a competitive edge
for job preparedness and career success.
● Installing React - For this project we will be using React as our main front-end tool. In
order to achieve this, we first must ensure that we have Node.js and npm (node package manager)
installed. To check if you have node installed, go to your terminal and input “node –version” and
if it displays a version similar to the image then you can proceed.
You can verify your installation of django by inputting “django-admin --version” in the terminal
as seen in the image:
● Installing Expo Go - For this project’s mobile application, we will be using React Native
(make sure that you’ve already installed Node.js and npm) and Expo Go is the go to sandbox for
mobile development. Expo Go also allows us to simulate our development towards our mobile
devices which is handy. To install Expo Go, proceed to playstore / appstore and install:
● Installing Visual Studio Code Extensions - Extensions are helpful in terms of making
the project’s development cleaner and more efficient. For this project, we will be installing the
following Extensions in VSCode
2.) Prettier - Code Formatter - Prettier helps cleaning up messy structure of coding by
automatically formatting code into a much more readable and easier to debugformat. Examples of
this include consistent indentation.
The diagram provides a simple layout for CommunITask, having two main entities namely:
Student(poster) and Student(tasker) with the system facilitates the exchange of data between
the student poster and student tasker.
Student Poster: initiates tasks and sends payments
Student Tasker: receives tasks, delivers finished tasks and receives payments.
Data Flow:
Student Poster - submits tasks and sends payments.
System - delivers tasks and sends payment to the student taker.
Student Taskers - receive tasks, deliver completed tasks.
System - delivers payments to the student takers.
Figure 8: DFD LVL 1 - Data Flow Diagram
The diagram depicts the process CommunITask at its core as it facilitates task exchange,
enables communication between students, maintains student records, managing tasks, communication,
user profiles, payments and handles secure payment processing.
Key Entities:
Student Posters - use the platform to create listings for tasks or projects they need to be completed.
Student Taskers - search the platform for available tasks posted by Student Posters and can earn
income by completing them.
Data Flow:
Student Poster to Communitask: Student Posters send task descriptions, submit finished work, and
provide ratings for Student Takers.
Communitask to Student Poster: Communitask provides Student Posters with task listings from
Student Taskers, a history of communication, profiles of potential collaborators, and records of
payments made.
Student Taker to Communitask: Student Takers submit finished tasks and provide ratings for
Student Posters.
Communitask to Student Taker: Communitask offers Student Takers a list of available tasks, their
own profile information, a log of communication, and records of their earnings.
Data Stores
Communication Records: store all interactions and messages between users of the platform.
User Profiles: hold detailed information about each student, including their experience, skills, and
reputation.
Task Details: provides a comprehensive list of tasks, their descriptions, and requirements.
Payments Details: manages all payment-related data and transaction records.
3. Ideation and Project Planning:
Phase 2.2 Test: The development team performs internal testing using unit testing,
integration testing, and UI testing to identify bugs, usability issues, and ensure core
functionalities function as intended.
Phase 2.3 Refine: Gather feedback from users on the initial prototype and use the feedback to
spark some ideas on changes, additions or maybe some things getting rid off.
Phase 4: Cutover
- Implementation: After gathering user feedback, conducting beta tests and system refinements,
we will finally do the implementation of these ideas into a workable and usable system for users.
- Bug Fixes & Performance Optimization: Continuously address any bugs reported by users
and optimize app performance as much as possible. There would not be perfection and we of
course cannot cater everyone’s desires, but the goal is to try to keep it as refined as we possibly
can.
- New Feature Development: Based on user feedback and market trends, develop new features
to enhance the platform's value and not fall-off to the competition.
- User Engagement & Marketing: Implement strategies to keep users engaged, feel connected
and attract new users to the platform.
Project Requirements
The initial design and evaluation of CommunITask will be mobile-based with the
programming languages React Native for the front-end, Django and/or NodeJS for the back-end
and MySQL / MongoDB for database management. CommunITask will also be making use of
integrative technologies such as Stripe for payment options and Clerk for Authentication and User
Management. Key Features of CommunITask include:
● Task Platform: Offering micro-tasks, projects, and gigs for students to complete and earn
income
● Integrated Payments: CommunITask will be integrating online payment solutions with the
usage of software such as Stripe
● Rating System: Post-task rating (1-5 stars) and optional feedback for completed tasks. This
Builds user trust and helps others choose reliable collaborators.
● User Profile: Transparent record of a student’s IT journey. Showcase skills, accomplishments
and develop a richer portfolio.
● User Authentication: Developing efficient login and sign-up authentication with the use of
Clerk to enable user login using Google Accounts.
● Security: Implementing security measures with the use of Clerk allowing users to enable 2FA
for added security
We started the interface for web and mobile with a wireframe and gave it more colors through a prototype
using Figma. It shows a user-friendly interface that is easy to navigate especially for beginners.
Website Prototype:
We rely on Visual Studio Code (VSCode) to shape the code that powers our website. It offers a
tidy and effective environment where our developers can effortlessly write and refine code. With
its wide range of add-ons and adaptable features, VSCode simplifies the development process,
ensuring efficiency and accuracy in coding tasks.
React JS:
We've chosen to implement our project using React.js for several key reasons. Firstly, React's
component-based architecture allows us to break down our user interface into reusable and modular
components. This not only enhances code organization but also facilitates scalability as our project
grows. React's virtual DOM also enables efficient rendering of UI updates, ensuring a smooth and
responsive user experience. With React's declarative syntax, we can easily define how our UI should
look based on the underlying data, making our code more readable and maintainable. Furthermore,
React's one-way data binding simplifies data management and reduces the risk of unexpected side
effects. Lastly, React's extensive ecosystem and active community provide us with a wealth of resources
and support to accelerate our development process and address any challenges we encounter along the
way. Overall, choosing React.js for our web implementation empowers us to build a robust, scalable,
and user-friendly project.
Tailwind CSS:
We've chosen Tailwind CSS for our project's web implementation because it offers a streamlined,
utility-first approach to styling. With its extensive set of pre-defined utility classes, Tailwind CSS
allows us to rapidly build and customize our user interface while promoting code maintainability and
scalability. Its seamless integration with modern front-end workflows and extensive customization
options make it the ideal choice for creating a polished and responsive design that aligns with our
project's goals.
We rely on Visual Studio Code (VSCode) to shape the code that powers our website. It offers a
tidy and effective environment where our developers can effortlessly write and refine code. With
its wide range of add-ons and adaptable features, VSCode simplifies the development process,
ensuring efficiency and accuracy in coding tasks.
React Native
We're using React Native for our mobile implementation because it enables cross-platform
development with JavaScript, streamlining the process and saving time. With access to native
components and APIs, React Native ensures a native-like experience and smooth performance. Its
hot reloading feature speeds up development and enhances productivity, allowing us to create
high-quality apps for both iOS and Android platforms efficiently.
We've opted for Expo Go for our mobile implementation because it allows us to develop and
preview React Native apps directly on our devices with ease. Its simplicity, real-time updates, and
access to pre-built components streamline development and enhance productivity, enabling us to
focus on delivering a great user experience efficiently.
Clerk Auth
We've chosen Clerk Auth for our project's mobile implementation because it offers a seamless and
secure authentication solution. Clerk Auth provides ready-to-use authentication flows, including
login, registration, and password reset, reducing the development time and effort required to
implement these features. With Clerk Auth, we can easily integrate authentication into our mobile
app with just a few lines of code, saving us valuable development resources. Additionally, Clerk
Auth offers advanced security features such as multi-factor authentication and passwordless login,
ensuring the protection of our users' accounts and data. Its intuitive dashboard allows us to
manage users and permissions effectively, providing us with greater control and visibility over our
app's authentication system. Overall, by using Clerk Auth for our mobile implementation, we can
provide a smooth and secure authentication experience for our users while minimizing
development overhead.
HyGraph Database:
We've opted to utilize Hygraph Database for our mobile implementation due to its efficiency and
scalability. Hygraph Database offers a flexible and high-performance graph database solution, which
is well-suited for managing complex relationships and interconnected data in our mobile app. Its
ability to handle large volumes of data and complex queries ensures that our app can efficiently
retrieve and manipulate data in real-time, providing a responsive user experience. Additionally,
Hygraph Database provides robust support for data modeling and schema evolution, allowing us to
adapt our data structure to evolving requirements without disrupting our app's functionality. Its
built-in security features, such as encryption and access controls, ensure the protection of sensitive
user data. Overall, by using Hygraph Database for our mobile implementation, we can build a
powerful and scalable app that meets the demands of modern data-driven applications.
Class Diagram
as 1 user can book 1 or many bookings and these bookings can only be to 1 specific user.
- 1 booking instance is associated with exactly 1 business listing, and each business listing is
associated with exactly one booking instance.
- 1 Service list can have multiple Services and these multiple services are categorized hence these
services can only be in 1 Service List.
In the login process, users begin by inputting their credentials, such as username and password, into the
app's designated login interface. Subsequently, the application undertakes the task of validating these
credentials by cross-referencing them with stored data, which could reside in a database or
authentication service. Should the provided credentials match those on record, the app grants the user
access to their account and proceeds with the subsequent steps. Conversely, if the credentials prove
invalid, the app delivers a failure message, indicating the unsuccessful login attempt. Upon successful
authentication, the app may engage in further actions as dictated by the user's session or workflow. This
could include tasks such as initiating a search for a specific service, which may involve querying a
service database, interfacing with external APIs, or executing any necessary logic to fulfill the user's
request or navigate to the desired functionality within the app.
The process begins with the application retrieving and presenting a list of service categories or options
to the user, typically displayed in a structured format within the app interface. Users then have the
opportunity to navigate through these categories and select a specific service that aligns with their needs
or preferences. Once a service has been chosen, the app proceeds to the next step, which involves
booking the selected service. During this stage, the app attempts to secure the desired service for the
user. If successful, the booking is confirmed, and the user receives a notification or confirmation
message indicating the successful reservation. However, if the selected service is unavailable or cannot
be booked for any reason, the app informs the user accordingly, presenting a message indicating the
unavailability of the service. In either case, the user is promptly notified of the outcome of the booking
attempt, ensuring transparency and clarity throughout the process.
In this process, the user begins by selecting a preferred date and time for the service they wish to book.
Once the user has made their selection, the application proceeds to check the availability of the chosen
date and time slot. If the selected date and time are available, the user is prompted to confirm their
booking. Upon confirmation, the booking is successfully created, and the user receives a confirmation
message indicating the successful reservation. However, if the chosen date and time slot are
unavailable, the application informs the user of this limitation. In response, the user is given the option
to select a new date and time, thus looping back to step three of the process. This iterative process
continues until the user selects an available date and time slot or decides to cancel the booking
altogether. Through this method, the application ensures that users are able to secure their desired
service at a suitable date and time, thereby facilitating a smooth and convenient booking experience.
Activity Diagram (Web)
In browsing categories, users can select a category, which will display businesses by category. Then,
users can view the business list and select the type of business they desire. After choosing, the
business detail screen will display, where there is a decision point to determine if that specific
business is bookable or not. If it's not, only information will be displayed, allowing the user to select
another business. If a business is bookable, the user can then make an appointment on the user
booking page, where they can select a service and date. If the slot is not available, the user can
choose a new date/slot on the booking page. If the slot is available, the user will be directed to
confirmation and booking to finish the appointment. And that concludes our website Activity
Diagram.
Activity Diagram (Mobile)
In order to use Communitask one must Login. If a user is successfully logged in, it will proceed to the
application's home screen. Otherwise it will be redirected back to the Login Screen. In the Home Screen
of the app, a user has the option to select by category or instantly select a service that is trending a lot.
Both options have the same endpoint which is displayed towards the Service Details Screen of the
Selected Service.
Service Details Screen will display the Service Name, Contact Person, Address and About me in order
to ensure that the user gets the service he wants. In the bottom of this screen there will be 2 bottoms
namely: Message and Book Now which is shown in the Decision.
Message route will lead to redirection towards the gmail of the service provider's email. Here you can
compose an email and then send this email for communication.
Book route will then display the Service Booking Screen which displays a Calendar and Time options
wherein you select both.
If date and time is available and valid, you can (Optionally) input a Note then confirm and book.
Otherwise if date and time isn't available, the application rejects these dates and makes user input
another date/time.
To integrate our mobile and web components of an application to ensure seamless data
synchronization and user experience, it involves several steps and considerations.
1. Unified Backend
Figure 17.1 CommunITask Hygraph Schema
We've opted to utilize Hygraph Database for our mobile and web implementation due to its efficiency
and scalability. Hygraph Database offers a flexible and high-performance graph database solution,
which is well-suited for managing complex relationships and interconnected data in our mobile app. Its
ability to handle large volumes of data and complex queries ensures that our app and website can
efficiently retrieve and manipulate data in real-time, providing a responsive user experience.
Additionally, Hygraph Database provides robust support for data modeling and schema evolution,
allowing us to adapt our data structure to evolving requirements without disrupting our app and
website's functionality. Its built-in security features, such as encryption and access controls, ensure the
protection of sensitive user data. Overall, by using Hygraph Database for our mobile and web
implementation, we can build a powerful and scalable app that meets the demands of modern
data-driven applications.
Figure 17.3 Clerk Authentication Dashboard
For Authentication and Authorization, we've chosen Clerk Auth for our project's mobile and web
implementation because it offers a seamless and secure authentication solution. Clerk Auth provides
ready-to-use authentication flows, including login, registration, and password reset, reducing the
development time and effort required to implement these features. With Clerk Auth, we can easily
integrate authentication into our mobile app and website with just a few lines of code, saving us
valuable development resources. Clerk also provides admin a dashboard that displays logistic
regarding the application’s total users, active users, sign-ups and other user related details.
We use Figma for crafting our prototypes because it is a collaborative design tool that allows real-time
collaboration among team members, which fosters teamwork and ensures that everyone—from
designers to stakeholders—can provide input and feedback promptly. Its cloud-based accessibility
enables remote teams to work seamlessly, ensuring the latest versions of prototypes are always
available, eliminating file sharing and version control issues. Figma's capabilities for creating
interactive and high-fidelity prototypes simulate the final user experience, allowing for clickable
elements, transitions, and animations that provide a realistic preview of the application’s functionality.
This is essential for user testing and gathering early feedback, refining the design before development
begins.
For our project’s styling, we use TailwindCSS due to its utility-first approach, which provides a wide
range of utility classes for styling elements directly in the HTML. This makes the code more readable and
maintainable by keeping styles close to the markup and avoiding the complexities of traditional CSS
frameworks. TailwindCSS enables rapid development and prototyping, offering a comprehensive set of
predefined utility classes that speed up the styling process and allow developers to quickly build and
adjust the UI. The framework ensures a consistent design language across the application with a standard
set of spacing, color, typography, and layout utilities. Its built-in responsive design utilities make it
straightforward to create a mobile-first design that looks great on all devices.
Figure 17.6 React JS and React Native
3. Codebase
We chose React Native for mobile development and React.js for our website to maintain a consistent
technology stack and streamline our development process. React Native allows us to build
cross-platform mobile apps for both iOS and Android using a single codebase, ensuring feature parity
and reducing development time. React.js, with its component-based architecture, enables us to create
dynamic, responsive web interfaces that mirror the mobile app’s user experience, ensuring brand
consistency. Using both frameworks allows our team to share components, business logic, and best
practices, enhancing efficiency and simplifying maintenance. This unified approach ensures a seamless
user experience across mobile and web platforms, providing high-quality applications for our users on
any device.
10. Testing, Debugging, and Optimization:
Debugging:
To ensure the smooth operation of our project, we are adopting a comprehensive set of debugging
techniques. Firstly, we employ logging and monitoring mechanisms, utilizing console.log,
console.warn, and console.error statements to track the flow of execution and capture errors or
warnings within our code. We also make use of browser developer tools like Chrome DevTools
and integrated development environments (IDEs) with built-in debuggers to inspect the state of
our application and analyze its performance.
We will also utilize breakpoints and step execution techniques to delve deeper into our code. By
setting breakpoints, we can pause execution at specific points to inspect variables and application
state, while stepping through code line-by-line gives us a granular understanding of the logic
flow. In terms of error handling, we implement try-catch blocks to gracefully handle exceptions
and provide informative error messages, aiding in rapid debugging and issue resolution. And for
enhanced debugging capabilities in React applications, we leverage tools like React Developer
Tools and Redux DevTools. These tools allow us to inspect the component hierarchy, props, and
state in our React applications, as well as trace actions and state changes over time, facilitating
efficient debugging of complex state management scenarios.
By implementing these debugging techniques, we ensure a robust and reliable application that
meets the highest standards of quality and performance.
Performance Optimization:
Figure 18.4 CommunITask Implementing DRY Software Principles (Don’t Repeat Yourself)
To optimize performance in our project, we're implementing a comprehensive set of techniques tailored to
enhance efficiency and user experience. In order to optimize performance and reduce code redundancy,
communITask makes use of the DRY(Don’t Repeat Yourself) Software Principle by categorizing code
into Screens and Components eliminating redundant code that consumes memory upon usage. Memory
profilers like Chrome DevTools' Memory tab help us monitor memory usage and detect and address
memory leaks, ensuring optimal performance.. To minimize network requests, we utilize debouncing and
throttling to control the rate of function execution and implement caching strategies to optimize API
response retrieval. Image optimization techniques such as using responsive images and compression tools
ensure appropriately sized images are served for different screen sizes, reducing load times. We will also
minimize JavaScript and CSS file sizes through minification and tree shaking, reducing bundle sizes and
improving load times. Also, we leverage server-side rendering (SSR) and static site generation (SSG) to
improve load times and enhance search engine optimization (SEO), and we optimize script loading by
asynchronously loading JavaScript files or deferring their execution until the page has loaded. By
implementing these techniques, we ensure our project operates efficiently, delivering optimal performance
and a superior user experience.
11. Deployment and Distribution
In this project, we leverage Vercel for our deployment needs. Vercel is a highly regarded platform designed
specifically for hosting modern web applications and APIs. It excels in both ease of use and performance
optimization. Vercel integrates seamlessly with popular Git providers like GitHub, enabling streamlined
deployments triggered by code pushes. This simplifies the deployment process and automates much of the
heavy lifting. Furthermore, Vercel's serverless architecture ensures exceptional scalability and performance,
allowing our application to deliver a fast and responsive user experience.
Following deployment, our focus will shift to post-deployment activities, encompassing ongoing monitoring,
maintenance, and user engagement. Proactive monitoring of the deployed application for performance and
security issues will ensure a seamless user experience. Meanwhile, providing robust user support and engaging
with our audience through various channels will enable us to gather valuable feedback for continuous
improvement.
By meticulously implementing these deployment steps into our project, we're poised to achieve a smooth and
successful deployment process for our cross-platform application, ultimately delivering exceptional value to
our users.
Login
Profile Screen
Sign In page:
Login In page:
HomePage:
Account Page:
In our system architecture, we have two actors: the client and the tasker. Both the client and the tasker
have the same interface, but they have different tasks. The client may choose categories and businesses
they want, and they can hire the tasker to complete the task requested by the client. We have a server
that handles every user request, and the server's job is to display data on both the client and tasker visual
interfaces on any device. We use a Hygraph database as our data storage, where we generate and store
our data.
13. Reflection and Discussion:
Our experiences were diverse and enriching. We learned a lot about practical usage of
collaboration tools, specifically Github and Bitbucket. Collaborating with a multidisciplinary
team brought together individuals with varying expertise, perspectives, and ideas, fostering
creativity and innovation. Through hands-on experimentation and exploration of mobile, web, and
emerging technologies, we gained valuable insights into the intricacies of cross-platform
application development. Engaging in real-world projects and case studies allowed us to apply
theoretical knowledge to practical scenarios, honing our skills and deepening our understanding
of industry best practices.
Additionally, we explored Clerk authentication, a user authentication solution that prioritizes ease
of use and developer experience. By staying abreast of these emerging trends, we believe we have
equipped ourselves with a valuable skill set that will prepare us for the evolving landscape of
software development.
We faced some challenges. Putting different technologies together was tricky and caused technical
problems. It needed careful planning and fixing issues. Managing time, resources, and tasks while
dealing with changing technology was tough. Also, keeping up with new tech trends meant we
had to keep learning all the time.
Activity No : #2
Activity Name : Comprehensive Cross-Platform Application Development Laboratory:
Exploring Mobile, Web, and Emerging Technologies with DFD and UML
Documentation
Student Name and ID : Acero, Neil Coleen - 2021300562
Baul, Kate Danica - 2021304888
Rocales, James Heinrich - 2021303331
Terec, Jie Clark - 2021302070
Course & Year BSIT – 3th Year Section : BSIT - 3R9