Chapter V
Chapter V
Summary
The researchers have finished gathering all the data needed. We came to the
conclusion that the respondents are satisfied with the overall performance of the
system. The researchers compared the existing manual process of releasing credentials
to the new system that will be implemented in Barangay Esperanza. It is found that the
system achieves its purpose to be the medium of requesting credentials made online.
The system allows for more efficient and convenient access to credentials, as users are
no longer required to engage in time-consuming manual processes or wait in line for
their results. Additionally, the system also addresses potential emergencies as users
only need to come to the barangay to obtain their finished credentials.
Recommendation
The researchers acknowledge that there is always room for improvement in the
system they have developed. As a newly built website, it is natural for users to have
doubts about its security and privacy. To address this, the researchers suggest bringing
in IT experts to improve the system's security and privacy features. This will not only
increase the trust of users but also protect the system from potential security breaches.
At present, the barangay has restrictions on the types of credentials that can be
requested through the online system. However, if the system can establish a strong
reputation for reliability and credibility, it is feasible to expand the types of credentials
offered, in order to optimize the overall functionality of the web application.
Additional features, such as tutorials, can be included for elderly users who may
have difficulty navigating the newly developed web app, particularly if it is their first time
using it.
References
Gabilla, J. R., Calpito, G. V., Perez, R. N. & Ferrera, F. C.. (2015). IHELP: AN
INTRANET-BASED JOB REQUEST SERVICE FOR ITS TECHNICAL UNIT OF
MANAGEMENT INFORMATION SYSTEMS DEPARTMENT OF COLEGIO DE SAN
JUAN DE LETRAN CALAMBA. Ani: Letran Calamba Research Report, 2(1). Retrieved
from http://ejournals.ph/form/cite.php?id=10922
Basney, J., Humphrey, M., & Welch, V. (2005). The MyProxy online credential
repository. Software: Practice and Experience, 35(9), 801–
816. https://doi.org/10.1002/spe.688
// Main Function
const Activity = () => {
let navigate = useNavigate()
return (
<div className="relative w-full">
</div>
</div> <button></button>
return (
{date.date()}
</h1>
</div>
)
})}
</div>
</div>
</div>
</div>
</div>
)
}
</div>
<div className="h-[85px] w-[130px] z-0 rounded-full bg-primary
flex items-center">
<a href='https://www.instagram.com/'
className="h-20 w-20 rounded-full border-[9px]
border-fontColor
relative flex overflow-hidden
hover:border-instaBorder hover:scale-110
hover:-translate-x-5 transition-all
duration-300 ease-in-out">
</div>
</div>
<a href='https://www.facebook.com/'
className="h-20 w-20 rounded-full border-[9px]
border-fontColor
relative flex overflow-hidden
hover:border-blue-900 hover:scale-110
hover:-translate-x-5 transition-all
duration-300 ease-in-out">
</div>
<a href='https://twitter.com/'
className="h-20 w-20 rounded-full border-[9px]
border-fontColor
relative flex overflow-hidden
hover:border-twitter hover:scale-110
hover:-translate-x-5 transition-all
duration-300 ease-in-out">
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" viewBox="0 0 24 24"
className="absolute w-full h-full stroke-
fontColor scale-90 fill-primary
hover:fill-twitter hover:stroke-
white hover:scale-100
transition-all duration-300 ease-
in-out">
<path d="M24 4.557c-.883.392-1.832.656-
2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127
1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-
4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-
1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-
2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179
1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-
1.562 2.457-2.549z"/>
</svg>
</a>
</div>
</div>
</div>
</div>
)
}
const db = getFirestore()
const [activities, setActivities] = useState()
useEffect(() => {
getDoc(docRef).then(function(doc) {
if (doc.exists) {
} else {
// doc.data() will be undefined in this case
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
},[])
return (
<div className="relative flex md:flex-row flex-col w-full h-full bg-primary">
<div className="w-full">
<div className="sm:mt-20 flex flex-col gap-10 ">
<div className="w-full">
<h1 className="font-poppins
text-4xl font-bold text-fontColor">
Day
</h1>
<h1 className="font-poppins
text-5xl font-bold text-fontColor">
{act.day}
</h1>
</div>
</div>
</div>
</li>
))}
</ul>
</div>
</div>
</div>
)
}
return (
<div className="flex">
<img src={logo} alt="logo"
className="h-20 w-22 mt-14 hover:scale-125 transition-all
duration-300 ease-in-out"/>
</div>
</div>
<ul className="flex flex-col gap-16 cursor-pointer">
<li className="navbar-text">
<a onClick={() => navigate("/")}
onPointerEnter={() => setHover (true)}
onPointerLeave={() => setHover (false)}
>Home</ a>
</li>
<li className="navbar-text">
<a onClick={() => navigate("/landingactivities")}
onPointerEnter={() => setAct (true)}
onPointerLeave={() => setAct (false)}
>Activities</a>
</li>
<li className="navbar-text">
<a onClick={() => navigate("/landingtour")}
onPointerEnter={() => setTour (true)}
onPointerLeave={() => setTour (false)}
>Tour</a>
</li>
</ul>
</div>
</div>
)
}
export default LandingNavbar
import React from 'react'
import { tour1, tour2, tour3, tour } from '../assets'
import { LandingNavbar, LandingWelcomePage } from '../components'
<div className="w-full">
</div>
</div>
<img src={tour2}
className="flex w-full h-full
hover:scale-125
transition-all duration-500 ease-in-
out
cursor-pointer"/>
</div>
</div>
</div>
<img src={tour3}
className="flex w-full h-full
hover:scale-125
transition-all duration-500 ease-in-
out
cursor-pointer"/>
</div>
</div>
</div>
<div className="relative sm:h-[300px] sm:w-[500px] w-80
h-48 bg-slate-700 gap-2
bg-opacity-25 rounded-xl flex flex-row
items-center">
<img src={tour}
className="flex w-full h-full
hover:scale-125
transition-all duration-500 ease-in-
out
cursor-pointer"/>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
try {
setLoading(true)
setError("")
await login(emailRef.current.value, passRef.current.value)
navigate("/home")
}
catch{
setError('Failed to sign in')
}
setLoading(false)
}
try {
setMessage("")
setResetLoading(true)
setError("")
await resetPassword(emailResetRef.current.value)
setMessage("Check your email to complete this proccess")
}
catch(err){
setResetError('Failed to Reset')
console.log(err)
}
setResetLoading(false)
}
return (
</ul>
<svg xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
className="rounded-full md:h-14 md:w-14 h-
10 w-10 border-2 border-slate-700
-translate-y-3 scale-110
stroke-fontColor relative top-10 bg-slate-900">
<path stroke-linecap="round" stroke-
linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25
2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25
2.25v6.75a2.25 2.25 0 002.25 2.25z" />
</svg>
<label>
Enter your email here:
</label>
<input className="sign-up-input"
type="email" ref={emailResetRef} required />
</div>
<h1 className="text-red-600">
{resetError}
</h1>
</div>
<h1 className="text-white">
{message}
</h1>
</div>
<button onClick={handleResetSubmit}
disabled= {resetLaoding}
className="font-poppins text-white
font-semibold rounded-xl
text-lg hover:font-
semibold bg-fontColor w-20 h-8
transition-all duration-
300 ease-in-out">
Confirm
</button>
</div>
</div>
<svg xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
className="rounded-full md:h-14 md:w-14 h-10
w-10 border-2 border-slate-700
-translate-y-3 scale-110 stroke-fontColor
relative top-10 bg-slate-900">
<div className="sign-up-text">
<label>
Email
</label>
</div>
<label>
Password
</label>
</div>
</div>
<div className="flex gap-11 flex-col">
<input className="md:sign-up-input
sign-up-input-sm" type="email" ref={emailRef} required />
<input className="md:sign-up-input
sign-up-input-sm" type="password" ref={passRef} required />
</div>
</div>
</div>
<button onClick={handleSubmit}
disabled= {laoding}
className="font-poppins text-white
font-semibold
md:text-lg text-sm
hover:font-semibold
transition-all duration-
300 ease-in-out">
Confirm
</button>
</div>
<span className="text-white">Forgot
password?</span>
<h1 className="text-fontColor cursor-pointer
hover:scale-110 hover:-translate-y-1
transition-all duration-
300 ease-in-out"
onClick={() =>
{setResetTab(true)}}>Click here!</h1>
<span className="text-white">to
reset.</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
try {
await logout()
navigate("/")
}catch {
}
}
return (
<div className="flex">
<img src={logo} alt="logo"
className="h-20 w-22 mt-14 hover:scale-125 transition-
all
duration-300 ease-in-out cursor-pointer"/>
</div>
</div>
<ul className="flex flex-col gap-16 cursor-pointer">
<li className="navbar-text">
<a onClick={() => navigate("/home")}
onPointerEnter={() => setHover (true)}
onPointerLeave={() => setHover (false)}
>Home</ a>
</li>
<li className="navbar-text">
<a onClick={() => navigate("/request")}
onPointerEnter={() => setReq (true)}
onPointerLeave={() => setReq (false)}
>Request</a>
</li>
<li className="navbar-text">
<a onClick={() => navigate("/activity")}
onPointerEnter={() => setAct (true)}
onPointerLeave={() => setAct (false)}
>Activities</a>
</li>
<li className="navbar-text">
<a onClick={() => navigate("/tour")}
onPointerEnter={() => setTour (true)}
onPointerLeave={() => setTour (false)}
>Tour</a>
</li>
</ul>
</div>
</div>
)
}
export default Navbar
return (
</div>
</div>
</div>
<div className="flex flex-row xs:absolute bottom-8
md:bottom-2">
</div>
</div>
</div>
</div>
</div>
</div>
)
}
let navigate = useNavigate()
const db = getFirestore()
const colRef = collection(db, 'users')
async function handleSubmit(e) {
e.preventDefault()
setLoading(true)
setError("")
await auth.createUserWithEmailAndPassword(emailRef.current.value,
passRef.current.value).then(cred => {
return addDoc(colRef, {
userId: cred.user.uid,
userName: userName,
userEmail: email,
userStatus: upperCaseUserStatus,
userCotactNum: userContact,
userAddress: address,
userRequest: ''
})
})
}
catch{
setError('Failed to create an account')
}
setPage(true)
setLoading(false)
}
useEffect(() => {
if(page == true){
navigate('/home')
}
})
const purokNames = [
"Purok Maki-angayon",
"Purok Pag-asa",
"Purok Luzviminda",
"Purok Paraiso",
"Purok New Society",
"Purok Matamis",
]
return (
<div className="relative h-screen flex items-center justify-center">
<div className="absolute flex w-screen h-full overflow-hidden z-10">
</div>
</div>
</div>
<div className=" flex flex-row gap-4 w-full items-center
rounded-2xl justify-center bg-primary bg-opacity-95 sm:bg-transparent h-[420px]">
<div className="sign-up-text relative top-2">
<label>
Name
</label>
</div>
<label>
Email
</label>
</div>
<div className="sign-up-text relative top-4">
<label>
Password
</label>
</div>
<label>
Confirm
<br></br>
Password
</label>
</div>
<div className="sign-up-text">
<label>
Status
</label>
</div>
<label>
Contact #
</label>
</div>
<div className="sign-up-text">
<label>
Purok
<br></br>
Address
</label>
</div>
</div>
<h1>{address}</h1>
<h1 className={`${dropDownAdd ? "absolute" :
"hidden"} sidebar flex flex-col bottom-9 bg-navbar
border-2 border-
fontColor rounded-xl bg-opacity-80 w-full`}>
{purokNames.map((names, index) => {
</label>
</div>
</div>
</div>
<button onClick={handleSubmit}
disabled= {laoding}
className="font-poppins text-white font-semibold
text-lg">
Confirm
</button>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
return (
<div className="relative sm:w-[55vw] w-screen">
</div>
<div className="flex flex-col m-3 gap-3">
</div>
</div>
</div>
</div>
<div className="flex flex-col m-3 gap-3">
</div>
</div>
</div>
</div>
<div className="flex flex-col m-3 gap-3">
</div>
</div>
</div>
</div>
</div>
</div>
)
}
const db = getFirestore()
useEffect(() => {
const colRef = collection(db, 'users')
const q = query(colRef, where("userId", "==", currentUserId))
users.map((user) => {
setUserFound(true)
})
})
})
})
useEffect(() => {
if (userFound == true) {
if (doc.exists) {
const user_name = doc.data().userName
const fisrtLetter = Array.from(user_name)[0]
const upperCase = fisrtLetter.toUpperCase()
setProfile(upperCase)
})
}
setUserFound(false)
})
try {
await logout()
navigate("/")
}catch {
}
}
return (
<div className="text-opacity-90 font-poppins grid grid-flow-
row gap-5 text-center overflow-auto
xs:scrollbar">
{requestDoc ?.map((req, index) => {
return <li className="border-t-2 md:border-t-fontColor
border-slate-700 bg-slate-900 bg-opacity-60 rounded-lg flex flex-col items-center
cursor-pointer gap-1"
key={index}>
<span className="text-
fontColor">Date:</span>
<span className="text-
white">{req.date}</span>
</h1>
<span className="text-
fontColor">Time:</span>
<span className="text-
white">{req.time}</span>
</h1>
</div>
<span className="text-fontColor
text-sm">You have requested:</span>
<span className="text-white rounded-
lg md:rounded-none border-b-2 md:border-fontColor border-slate-700 md:text-xl
text-lg">{req.document}</span>
</h1>
</li>
})}
</div>
</div>
</div>
<svg xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
className="hover:scale-125 text-[50px]
hover:text-fontColor text-lg
transition-all duration-500
ease-in-out font-bold
cursor-pointer">
<path stroke-linecap="round" d="M16.5 12a4.5
4.5 0 11-9 0 4.5 4.5 0 019 0zm0 0c0 1.657 1.007 3 2.25 3S21 13.657 21 12a9 9 0
10-2.636 6.364M16.5 12V8.25" />
</svg>
</button>
<svg xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
className={`${toggle ? 'stroke-fontColor' :
''} navbar-icon transition-all duration-300 ease-linear m-2`}>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
)
}
return useContext(AuthContext)
}
function logout() {
return auth.signOut()
}
function resetPassword(email) {
return auth.sendPasswordResetEmail(email)
}
useEffect(() => {
const unsubscribe = auth.onAuthStateChanged(user => {
setCurrentUser(user)
// setUserId(user.uid)
setLoading(false)
})
return unsubscribe
}, [])
auth.onAuthStateChanged((user) => {
if (user) {
// User logged in already or has just logged in.
setUserId(user.uid)
} else {
// User not logged in or has just logged out.
}
});
const value = {
currentUserId,
currentUser,
login,
logout,
resetPassword
}
return (
<AuthContext.Provider value={value}>
{!loading && children}
</AuthContext.Provider>
)
}
const db = getFirestore()
const [activities, setActivities] = useState()
useEffect(() => {
getDoc(docRef).then(function(doc) {
if (doc.exists) {
} else {
// doc.data() will be undefined in this case
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
},[])
return (
<div className="relative flex md:flex-row flex-col w-full h-full bg-primary">
<div className="w-full">
<div className="sm:mt-20 flex flex-col gap-10 ">
<div className="w-full">
</div>
</div>
</li>
))}
</ul>
</div>
</div>
</div>
)
}
setSubmitEmail(true)
}, (error) => {
console.log(error.text);
});
e.target.reset()
};
return (
</div>
</div>
<div className="w-full h-full overflow-hidden absolute z-0 flex items-
center justify-center">
<img src={email_bg} alt=""
className=""/>
</div>
<div className="mt-10">
<img src={email_bg_1} alt=""
className="w-[280px] h-[200px]"/>
</div>
<div className="w-full">
</div>
</form>
</div>
)
}
// Main Function
const LandingActivitiesTab = () => {
return (
</div>
</div> <button></button>
return (
{date.date()}
</h1>
</div>
)
})}
</div>
</div>
</div>
</div>
</div>
)
}
return (
<div className="relative w-full">
<div className="relative">
</div>
</div>
</div>
<div className="flex flex-row xs:absolute bottom-8
md:bottom-2">
<button className="text-white bg-fontColor font-
poppins rounded-xl
hover:bg-slate-700 hover:text-
fontColor transition-all relative sm:left-5
duration-300 ease-in-out lg:w-52
sm:w-44 w-24 sm:text-xl text-sm"
onClick={() => setToggle((prev) => !prev)}
>View detail
</button>
<svg xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
class="xs:flex hidden w-10 h-10 mx-8 cursor-pointer
hover:bg-slate-700 rounded-lg hover:scale-110
hover:stroke-fontColor transition-all
duration-500 ease-linear">
<path stroke-linecap="round" stroke-linejoin="round"
d="M17.593 3.322c1.1.128 1.907 1.077 1.907 2.185V21L12 17.25 4.5 21V5.507c0-
1.108.806-2.057 1.907-2.185a48.507 48.507 0 0111.186 0z" />
</svg>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
</div>
<div className="flex flex-col m-3 gap-3">
</div>
</div>
</div>
</div>
<div className="flex flex-col m-3 gap-3">
</div>
</div>
</div>
</div>
<div className="flex flex-col m-3 gap-3">
</div>
</div>
</div>
</div>
</div>
</div>
)
}
const db = getFirestore()
users.map((user) => {
setUserID(user.id)
})
if (userFound === true) {
userData()
}
console.log(requestDoc)
})
})
function userData(){
getDoc(docRef).then(function(doc) {
if (doc.exists) {
return (
<div>
<div className="font-bold font-poppins text-4xl m-20 text-
fontColor">
Notifications
</div>
<div>
<ul className="text-fontColor font-poppins text-xl">
{requestDoc ?.map((req, index) => {
return <li key = {index}>
{req}
</li>
})}
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
const db = getFirestore()
users.map((user) => {
})
})
useEffect(() => {
if (userFound == true) {
const docRef = doc(db, 'users', userId)
getDoc(docRef).then(function(doc) {
if (doc.exists) {
const user_name = doc.data().userName
setUserName(user_name)
const fisrtLetter = Array.from(userName)[0]
const upperCase = fisrtLetter.toUpperCase()
setProfile(upperCase)
const user_email = doc.data().userEmail
setUserEmail(user_email)
const user_status = doc.data().userStatus
setUserStatus(user_status)
const user_contact_num = doc.data().userCotactNum
setUserContactNum(user_contact_num)
const user_address = doc.data().userAddress
setUserAddress(user_address)
const user_request = doc.data("Barangay Cedula")
setUserRequest(user_request)
} else {
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error)
})
}
setUserFound(false)
})
return (
</div>
</div>
<h1 className="relative font-poppins sm:text-4xl text-2xl
font-bold text-fontColor mt-5 cursor-pointer">
Profile
</h1>
{/*
Name###########################################################################
*/}
</div>
{/*
Email###########################################################################
*/}
</div>
{/*
Role###########################################################################
*/}
</div>
{/*
Contact#########################################################################
## */}
</div>
{/* Purok
Address#########################################################################
## */}
</div>
</div>
</div>
</div>
</div>
)
}
//Access Database
const db = getFirestore()
const colRef = collection(db, 'users')
const q = query(colRef, where("userId", "==", currentUserId))
})
//Send Email
const sendEmail = (e) => {
e.preventDefault();
}, (error) => {
console.log(error.text);
});
e.target.reset()
};
//Request Date
const dateToday = () => {
setCredType("Barangay Clearance")
setTime(time)
setDate(date)
}
getDoc(docRef).then(function(doc) {
if (doc.exists) {
// setDoc(docRef, {
// [date] : credType
// },{merge:true}
updateDoc(docRef, {
userRequest: arrayUnion({
time: time,
date: date,
document: credType
})
})
console.log("Success")
} else {
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
}
// getDoc(docRef).then(function(doc) {
// if (doc.exists) {
// // setDoc(docRef, {
// // [date] : credType
// // },{merge:true}
// updateDoc(docRef, {
// barangay_activities: arrayUnion(
// {
// title: 'Title',
// date: 'Dec 10',
// day: '1',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 11',
// day: '2',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 12',
// day: '3',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 13',
// day: '4',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 14',
// day: '5',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 15',
// day: '6',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 16',
// day: '7',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 17',
// day: '8',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 18',
// day: '9',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 19',
// day: '10',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 20',
// day: '11',
// content: 'Content of todays event.'
// },
// {
// title: 'Title',
// date: 'Dec 21',
// day: '12',
// content: 'Content of todays event.'
// },
// )
// })
// console.log("Success")
// } else {
// console.log("No such document!");
// }
// }).catch(function(error) {
// console.log("Error getting document:", error);
// });
// }
//Array of Months
const months = [
"January",
"Febuary",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
return (
<div className="relative flex md:flex-row flex-col w-full h-full bg-primary">
</div>
</div>
<div className="relative flex w-screen">
<label className="request-text"
htmlFor="">Name</label>
<label className="request-text relative top-2"
htmlFor="">Email</label>
<label className="request-text"
htmlFor="">Purok<br></br>Address</label>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</button>
</div>
</div>
<div className="relative flex flex-col gap-8 items-center
sm:items-start">
</div>
</button>
</div>
</div>
<div className="relative flex flex-col gap-8 items-center
sm:items-start">
</div>
</button>
</div>
</div>
<div className="relative flex flex-col gap-8 items-center
sm:items-start">
</div>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
<div className="w-full">
<h1 className="text-fontColor sm:text-4xl text-xl font-
poppins sm:font-semibold
transition-all duration-300
cursor-pointer xs:text-center xs:m-0 ml-10
hover:text-slate-300 ease-in-out">
Barangay Halloween Activity
</h1>
</div>
<img src={tour1}
className="flex w-full h-full
hover:scale-125
transition-all duration-500 ease-in-
out
cursor-pointer"/>
</div>
</div>
</div>
<div className="relative sm:h-[300px] sm:w-[500px] w-80
h-48 bg-slate-700 gap-2
bg-opacity-25 rounded-xl flex flex-row
items-center">
<img src={tour2}
className="flex w-full h-full
hover:scale-125
transition-all duration-500 ease-in-
out
cursor-pointer"/>
</div>
</div>
</div>
<img src={tour3}
className="flex w-full h-full
hover:scale-125
transition-all duration-500 ease-in-
out
cursor-pointer"/>
</div>
</div>
</div>
<img src={tour}
className="flex w-full h-full
hover:scale-125
transition-all duration-500 ease-in-
out
cursor-pointer"/>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
</div>
</div>
)
}
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.navbar-text {
@apply font-poppins text-white hover:text-fontColor transition-all duration-
300 ease-linear
}
.navbar-icon{
@apply h-10 w-10 mr-4 text-slate-300 transition-all ease-linear duration-300
}
.hover-text{
@apply stroke-fontColor rounded-lg h-10 w-10 bg-gray-700
transition-all duration-300 ease-linear scale-125
}
.calendar-num-style {
@apply h-7 w-12 font-poppins sm:text-lg flex justify-center text-fontColor
cursor-pointer
}
.calendar-num-style-today{
@apply bg-fontColor border-2 border-primary text-white rounded-xl text-lg
flex justify-center w-full font-poppins
hover:scale-110 hover:bg-opacity-60 hover:text-white transition-all
scale-110 font-semibold
duration-100 ease-in-out
}
.calendar-hover-glow{
@apply hover:bg-slate-800 rounded-t-xl hover:text-fontColor hover:scale-110
hover:rounded-xl transition-all duration-300 ease-in-out cursor-
pointer
}
.sign-up-text {
@apply font-poppins text-fontColor font-medium
}
.request-text {
@apply font-poppins text-fontColor sm:text-xl font-medium
}
.sign-up-input {
@apply font-poppins w-[260px] h-9 sm:bg-fontColor bg-slate-700 text-white
rounded-md outline-fontColor focus:bg-slate-500
hover:bg-slate-500 hover:text-white hover:bg-opacity-40
focus:text-white transition-all duration-300 ease-in-out
focus:bg-opacity-5
}
.sign-up-input-sm {
@apply font-poppins w-40 bg-slate-700 text-white
rounded-md outline-fontColor focus:bg-slate-500
hover:bg-slate-500 hover:text-white hover:bg-opacity-40
focus:text-white transition-all duration-300 ease-in-out
focus:bg-opacity-5
}
.sign-up-input-tab {
@apply font-poppins sm:w-[260px] h-9 bg-fontColor bg-opacity-20 text-white
rounded-md outline-fontColor focus:bg-slate-500
hover:bg-slate-500 hover:text-white hover:bg-opacity-40
focus:text-white transition-all duration-300 ease-in-out
focus:bg-opacity-5
}
.request-input-tab {
@apply font-poppins sm:w-[460px] w-[250px] h-9 bg-fontColor bg-opacity-20
text-white
rounded-md outline-fontColor focus:bg-slate-500
hover:bg-slate-500 hover:text-white hover:bg-opacity-40
focus:text-white transition-all duration-300 ease-in-out
focus:bg-opacity-5
}
.sign-up-input-tab-1 {
@apply font-poppins sm:w-[260px] h-9 bg-fontColor bg-opacity-40 text-white
rounded-md outline-fontColor focus:bg-slate-500
hover:bg-slate-500 hover:text-white hover:bg-opacity-40
focus:text-white transition-all duration-300 ease-in-out
focus:bg-opacity-5
}
.hover-text-landing{
@apply text-fontColor text-2xl font-poppins rounded-xl
bg-gray-700 -translate-y-3 scale-110
transition-all ease-in-out duration-300
}
.normal-text-landing{
@apply text-white text-2xl font-poppins
transition-all duration-300 ease-linear
}
.hover-icon-landing{
@apply rounded-full h-14 w-14 bg-gray-700
-translate-y-3 scale-110 stroke-fontColor
transition-all duration-300 ease-linear
}
.normal-icon-landing{
@apply bg-navbar rounded-full h-14 w-14 stroke-slate-300
transition-all duration-300 ease-linear
}
.toggleOn{
@apply flex transition-all duration-300 ease-linear
}
.toggleOff{
@apply hidden transition-all duration-300 ease-linear
}
.margin{
@apply ml-20 mr-20 mb-20
}
.sidebar {
-webkit-animation: slide-top 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
animation: slide-top 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
}
@-webkit-keyframes slide-top {
0% {
-webkit-transform: translateY(100px);
transform: translateY(100px);
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
}
}
@keyframes slide-top {
0% {
-webkit-transform: translateY(100px);
transform: translateY(100px);
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
}
}
.scrollbar::-webkit-scrollbar {
width: 15px;
height: 15px;
}
.scrollbar::-webkit-scrollbar-track {
border-radius: 100vh;
background: #121212;
}
.scrollbar::-webkit-scrollbar-thumb {
background: #0A0A0A;
border-radius: 100vh;
border: 3px solid #00CCCB;
}
.scrollbar::-webkit-scrollbar-thumb:hover {
background: #334155;
}
}
.textOver {
overflow: hidden;
font-size: 0px;
}
.grid-rows-7 {
grid-template-rows: repeat(7, minmax(0, 1fr));
}
.grid-col-7 {
grid-template-rows: repeat(7, minmax(0, 1fr));
}
.over-flow{
overflow-y: scroll;
overflow-x: hidden;
}
return (
<div className="relative flex w-full bg-primary">
</div>
</div>
</div>
)
}
try {
setLoading(true)
setError("")
await login(emailRef.current.value, passRef.current.value)
navigate("/")
}
catch{
setError('Failed to sign in')
}
setLoading(false)
}
return (
<div className="relative h-screen flex items-center justify-center">
<div className="absolute flex w-screen h-full overflow-hidden z-10">
</div>
<div
className="w-[500px] h-full flex justify-center items-center">
</div>
<div className=" flex flex-row gap-4 w-full justify-center">
<div className="sign-up-text">
<label>
Email
</label>
</div>
<div className="sign-up-text">
<label>
Password
</label>
</div>
<div className= "text-black font-poppins">
{error}
</div>
</div>
<div className="flex gap-5 flex-col">
</div>
</div>
</div>
<button onClick={handleSubmit}
disabled= {laoding}
className="font-poppins text-white font-semibold
text-lg hover:font-bold
transition-all duration-300 ease-in-
out">
Confirm
</button>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<Router>
<AuthProvider>
<Switch>
</AuthProvider>
</Router>
</React.StrictMode>
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Capstone Web</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>
{
"homepage": "https://malon0825.github.io/DeploymentCapstoneApp/",
"name": "capstone_app_deploy",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d dist",
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@emailjs/browser": "^3.10.0",
"dayjs": "^1.11.7",
"firebase": "^9.14.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.4.5"
},
"devDependencies": {
"@types/react": "^18.0.24",
"@types/react-dom": "^18.0.8",
"@vitejs/plugin-react": "^2.2.0",
"autoprefixer": "^10.4.13",
"gh-pages": "^4.0.0",
"postcss": "^8.4.19",
"tailwindcss": "^3.2.4",
"vite": "^3.2.3"
}
}
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
build: {
chunkSizeWarningLimit: 1600,
},
})
Appendix B – User’s Manual
User Manual
Here is the process for how to request your barangay credentials through our website.
Step 1. Open your browser on the device you use. Examples are Google Chrome, Opera Browser, or
your device’s default browser.
Step 2. Click the search bar on the top left of your screen.
Step 3. Type the following domain name of the website. “barangayesperanza.com”
Step 4. Navigate to the landing page and click login on the top right of your screen.
Step 7. On the upper right of your screen, click “Login here!” once again and type your user name and
password then click the “Confirm” button.
Step 8. On the home page click the “Request” button at the upper left of the screen located at the
navigation bar.
Step 9. Choose the document you want to request and click the “Request” button.
Step 10. Fill up the necessary details and click “Submit”.
Step 11. A small message box will appear indicating that your request is received by the barangay
secretary and is being processed.
Step 12. If your request is ready, you will receive an email from the barangay indicating that your
request is complete and that you will be able to claim it in your barangay hall.
Curriculum Vitae