create: new folder
93
README.md
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# frontend-landing-page
|
||||
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
||||
|
||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
||||
|
||||
## Add your files
|
||||
|
||||
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
|
||||
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
|
||||
|
||||
```
|
||||
cd existing_repo
|
||||
git remote add origin https://gitlab.com/profile-image/kedaireka/polinema-roadreport/frontend-landing-page.git
|
||||
git branch -M main
|
||||
git push -uf origin main
|
||||
```
|
||||
|
||||
## Integrate with your tools
|
||||
|
||||
- [ ] [Set up project integrations](https://gitlab.com/profile-image/kedaireka/polinema-roadreport/frontend-landing-page/-/settings/integrations)
|
||||
|
||||
## Collaborate with your team
|
||||
|
||||
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
|
||||
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
||||
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
||||
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
||||
- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
|
||||
|
||||
## Test and Deploy
|
||||
|
||||
Use the built-in continuous integration in GitLab.
|
||||
|
||||
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
|
||||
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
|
||||
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
||||
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
|
||||
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
||||
|
||||
***
|
||||
|
||||
# Editing this README
|
||||
|
||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
|
||||
|
||||
## Suggestions for a good README
|
||||
|
||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
||||
|
||||
## Name
|
||||
Choose a self-explaining name for your project.
|
||||
|
||||
## Description
|
||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
||||
|
||||
## Badges
|
||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
||||
|
||||
## Visuals
|
||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
||||
|
||||
## Installation
|
||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
||||
|
||||
## Usage
|
||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
||||
|
||||
## Support
|
||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
||||
|
||||
## Roadmap
|
||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
||||
|
||||
## Contributing
|
||||
State if you are open to contributions and what your requirements are for accepting them.
|
||||
|
||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
||||
|
||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
||||
|
||||
## Authors and acknowledgment
|
||||
Show your appreciation to those who have contributed to the project.
|
||||
|
||||
## License
|
||||
For open source projects, say how it is licensed.
|
||||
|
||||
## Project status
|
||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
||||
BIN
assets/.DS_Store
vendored
Normal file
710
assets/css/styles.css
Normal file
|
|
@ -0,0 +1,710 @@
|
|||
:root {
|
||||
--primary: #586af5;
|
||||
--primary-dark: #4c5ae8;
|
||||
--danger: #f35625;
|
||||
--neutral: #1b1d21;
|
||||
--muted: #4f4f4f;
|
||||
--white: #ffffff;
|
||||
}
|
||||
|
||||
/* reset browser styles */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
/* global styles */
|
||||
body {
|
||||
font-family: "DM Sans", sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.5;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
body.no-scroll {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
button:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
aside {
|
||||
position: fixed;
|
||||
z-index: 3;
|
||||
top: 0;
|
||||
right: -100%;
|
||||
width: 100%;
|
||||
min-height: 100vh;
|
||||
background-color: var(--white);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: right 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
aside.show {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
aside button {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
padding: 0;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
background-color: var(--white);
|
||||
border: 1px solid var(--muted);
|
||||
border-radius: 0.25rem;
|
||||
transition: all 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
aside button:hover,
|
||||
aside button:focus,
|
||||
aside button:active {
|
||||
background-color: var(--muted);
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
aside nav {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 1.5rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
aside nav a {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: var(--neutral);
|
||||
transition: color 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
aside nav a:hover,
|
||||
aside nav a:focus,
|
||||
aside nav a:active {
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1280px;
|
||||
margin-inline: auto;
|
||||
padding-inline: 1rem;
|
||||
}
|
||||
|
||||
.button {
|
||||
display: inline-block;
|
||||
font-weight: 600;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding: 0.5rem 1.25rem;
|
||||
border-radius: 0.5rem;
|
||||
background-color: var(--primary);
|
||||
color: var(--white);
|
||||
text-decoration: none;
|
||||
transition: background-color 0.15s ease-in-out;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.button:hover,
|
||||
.button:focus,
|
||||
.button:active {
|
||||
background-color: var(--primary-dark);
|
||||
}
|
||||
|
||||
.button.disabled,
|
||||
.button:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.title {
|
||||
/* calculate font size base on vw, desktop size is 3rem */
|
||||
font-size: calc(1.5rem + 1.5vw);
|
||||
color: var(--neutral);
|
||||
}
|
||||
|
||||
.section {
|
||||
padding-block: 3.75rem;
|
||||
}
|
||||
|
||||
.scroll-to-top {
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
bottom: -100%;
|
||||
right: 2rem;
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border-radius: 50%;
|
||||
padding: 0;
|
||||
transition: bottom 0.4s ease-in-out, background-color 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.scroll-to-top.show {
|
||||
bottom: 2rem;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
--navbar-height: 6rem;
|
||||
background-color: rgba(255, 255, 255, 0.75);
|
||||
height: var(--navbar-height);
|
||||
backdrop-filter: blur(10px);
|
||||
border-bottom: 1px solid var(--white);
|
||||
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.navbar.scrolled {
|
||||
border-bottom-color: rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.navbar .container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
column-gap: 1rem;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
flex-shrink: 0;
|
||||
width: 124px;
|
||||
}
|
||||
|
||||
.navbar-toggle {
|
||||
margin-left: auto;
|
||||
padding-inline: 0.75rem;
|
||||
}
|
||||
|
||||
.navbar-menu {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar-menu-list {
|
||||
margin-left: auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
list-style: none;
|
||||
column-gap: 4rem;
|
||||
}
|
||||
|
||||
.navbar-menu-list li a {
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.navbar-menu-list li a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.navbar-menu-list li a:hover,
|
||||
.navbar-menu-list li a:focus .navbar-menu-list li a:active {
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.navbar-menu-action {
|
||||
width: 124px;
|
||||
display: flex;
|
||||
justify-content: end;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.hero {
|
||||
padding-top: 7.5rem;
|
||||
}
|
||||
|
||||
.hero > .container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
column-gap: 1rem;
|
||||
}
|
||||
|
||||
.hero-text {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.hero-title span {
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.hero-desc {
|
||||
width: min(100%, 50rem);
|
||||
font-size: 1.25rem;
|
||||
margin-bottom: 1.5rem;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.hero-cta {
|
||||
padding-block: 0.75rem;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
column-gap: 0.75rem;
|
||||
}
|
||||
|
||||
.hero-illustration {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.hero-illustration img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.feature-title,
|
||||
.feature-subtitle,
|
||||
.feature-desc {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.feature-title {
|
||||
font-size: 1.125rem;
|
||||
font-weight: 600;
|
||||
/* margin-bottom: 0.75rem; */
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.feature-subtitle {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.feature-desc {
|
||||
width: min(100%, 50rem);
|
||||
font-size: 1.25rem;
|
||||
margin-bottom: 1.5rem;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.feature-map {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 480px;
|
||||
margin-bottom: 7.5rem;
|
||||
}
|
||||
|
||||
.feature-map-legend {
|
||||
--proses: var(--primary);
|
||||
--tindak-lanjut: #ffab00;
|
||||
--perbaikan: var(--danger);
|
||||
list-style: none;
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
left: 1rem;
|
||||
z-index: 1;
|
||||
background-color: rgba(255, 255, 255, 0.75);
|
||||
padding: 1rem;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 500;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 0.5rem;
|
||||
}
|
||||
|
||||
.feature-map-legend li {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
column-gap: 0.5rem;
|
||||
}
|
||||
|
||||
.feature-map-legend li::before {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 0.5rem;
|
||||
height: 0.5rem;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.feature-map-legend li:nth-child(1)::before {
|
||||
background-color: var(--proses);
|
||||
}
|
||||
|
||||
.feature-map-legend li:nth-child(2)::before {
|
||||
background-color: var(--tindak-lanjut);
|
||||
}
|
||||
|
||||
.feature-map-legend li:nth-child(3)::before {
|
||||
background-color: var(--perbaikan);
|
||||
}
|
||||
|
||||
.feature-map-canvas {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
border-radius: 0.75rem;
|
||||
}
|
||||
|
||||
.feature-list {
|
||||
list-style: none;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
.feature-list li {
|
||||
padding: 1.5rem 1.5rem 0 1.5rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.feature-list li img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
transition: transform 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.feature-list li h6 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.feature-list li p {
|
||||
width: min(100%, 20rem);
|
||||
}
|
||||
|
||||
.feature-list li:hover img {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.app-title {
|
||||
text-align: center;
|
||||
margin-bottom: 4.5rem;
|
||||
}
|
||||
|
||||
.app-content {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 3rem;
|
||||
}
|
||||
|
||||
.app-illustration img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.app-features {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 2.5rem;
|
||||
}
|
||||
.app-features li {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
column-gap: 1rem;
|
||||
}
|
||||
|
||||
.app-features li h6 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.dashboard-title {
|
||||
text-align: center;
|
||||
margin-bottom: 2.5rem;
|
||||
}
|
||||
|
||||
.dashboard-silder {
|
||||
position: relative;
|
||||
/* overflow: hidden; */
|
||||
}
|
||||
|
||||
.dashboard-item {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 1rem;
|
||||
transition: opacity 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
.dashboard-item:not(.active) {
|
||||
opacity: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dashboard-item-text {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
row-gap: 0.875rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.dashboard-item-text h6 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.dashboard-item img {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.dashboard-nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
column-gap: 1rem;
|
||||
}
|
||||
|
||||
.dashboard-nav button {
|
||||
padding: 0;
|
||||
display: block;
|
||||
width: 0.75rem;
|
||||
height: 0.75rem;
|
||||
border-radius: 50%;
|
||||
background-color: var(--muted);
|
||||
transition: background-color 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.dashboard-nav button.active {
|
||||
background-color: var(--primary);
|
||||
}
|
||||
|
||||
.cta-content {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
border-radius: 1rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.cta-text {
|
||||
background-color: var(--primary);
|
||||
color: var(--white);
|
||||
padding: 2.5rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 1.5rem;
|
||||
}
|
||||
|
||||
.cta-text h1 {
|
||||
color: inherit;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.cta-text a {
|
||||
margin-top: auto;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
column-gap: 0.75rem;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.cta-illustration {
|
||||
position: relative;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cta-illustration img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.cta-illustration p {
|
||||
position: absolute;
|
||||
bottom: 0.5rem;
|
||||
right: 0.5rem;
|
||||
font-size: 0.5rem;
|
||||
color: var(--white);
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
padding: 0.15rem 0.25rem;
|
||||
}
|
||||
|
||||
.cta-illustration p a {
|
||||
color: inherit;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding-top: 5rem;
|
||||
}
|
||||
|
||||
.footer-content {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 2.5rem;
|
||||
margin-bottom: 2.75rem;
|
||||
}
|
||||
|
||||
.footer-about,
|
||||
.footer-collab,
|
||||
.footer-contact {
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.footer-about > a {
|
||||
display: inline-block;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.footer-about p {
|
||||
width: min(100%, 280px);
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.footer-about ul {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.footer-collab h6,
|
||||
.footer-contact h6 {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.footer-collab ul {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.footer-contact > p:not(:last-child) {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.footer-copy {
|
||||
text-align: center;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 576px) {
|
||||
.feature-list {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
.feature-list li {
|
||||
display: block;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
.navbar-menu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-grow: 1;
|
||||
column-gap: 1rem;
|
||||
}
|
||||
|
||||
.navbar-toggle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
aside {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app-content {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.dashboard-item-text {
|
||||
text-align: left;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.dashboard-item {
|
||||
grid-template-columns: auto 60%;
|
||||
}
|
||||
|
||||
.cta-content {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.cta-illustration {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.footer-content {
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
}
|
||||
|
||||
.footer-about,
|
||||
.footer-collab,
|
||||
.footer-contact {
|
||||
text-align: left;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
.hero > .container {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
|
||||
.hero-text {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.hero-desc {
|
||||
width: min(100%, 35rem);
|
||||
margin-inline: 0;
|
||||
}
|
||||
|
||||
.hero-illustration {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.feature-list {
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
}
|
||||
|
||||
.app-content {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.dashboard-item {
|
||||
grid-template-columns: auto 65%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px) {
|
||||
.title {
|
||||
font-size: 3rem;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.cta-text h1 {
|
||||
font-size: 2.55rem;
|
||||
}
|
||||
}
|
||||
BIN
assets/images/.DS_Store
vendored
Normal file
BIN
assets/images/Vector.png
Normal file
|
After Width: | Height: | Size: 259 KiB |
BIN
assets/images/cta.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
assets/images/facebook_icon.webp
Normal file
|
After Width: | Height: | Size: 460 B |
BIN
assets/images/favicon.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
assets/images/gplay.webp
Normal file
|
After Width: | Height: | Size: 780 B |
BIN
assets/images/hero.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/images/instagram_icon.webp
Normal file
|
After Width: | Height: | Size: 654 B |
BIN
assets/images/jadwal.webp
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/images/kedaireka_logo.webp
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
assets/images/keputusan.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
assets/images/location.png
Normal file
|
After Width: | Height: | Size: 619 B |
BIN
assets/images/location_perbaikan.png
Normal file
|
After Width: | Height: | Size: 647 B |
BIN
assets/images/location_tindak.png
Normal file
|
After Width: | Height: | Size: 538 B |
BIN
assets/images/logo.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/images/machine_learning.webp
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/images/marker-icon.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/images/marker-shadow.png
Normal file
|
After Width: | Height: | Size: 618 B |
BIN
assets/images/mobile_app.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
assets/images/mobile_app_dashboard.webp
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/images/mobile_app_laporan.webp
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/images/mobile_app_riwayat.webp
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/images/monitoring_dashboard.webp
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
assets/images/monitoring_dashboard_icon.webp
Normal file
|
After Width: | Height: | Size: 772 B |
BIN
assets/images/monitoring_detail.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/images/monitoring_detail_icon.webp
Normal file
|
After Width: | Height: | Size: 594 B |
BIN
assets/images/monitoring_laporan.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
assets/images/monitoring_laporan_icon.webp
Normal file
|
After Width: | Height: | Size: 642 B |
BIN
assets/images/nicolas-j-leclercq.webp
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
assets/images/pelaporan.webp
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
assets/images/pemantauan.webp
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
assets/images/peta.webp
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/images/pis_logo.webp
Normal file
|
After Width: | Height: | Size: 792 B |
BIN
assets/images/polinema_logo.webp
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/images/twitter_icon.webp
Normal file
|
After Width: | Height: | Size: 640 B |
175
assets/js/script.js
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
const menuToggle = document.querySelector(".navbar-toggle");
|
||||
const nav = document.querySelector("aside");
|
||||
const navLinks = document.querySelectorAll("aside nav a");
|
||||
const body = document.querySelector("body");
|
||||
const closeMenu = document.querySelector("aside button");
|
||||
|
||||
// toggle menu
|
||||
menuToggle.addEventListener("click", () => {
|
||||
nav.classList.toggle("show");
|
||||
body.classList.toggle("no-scroll");
|
||||
});
|
||||
|
||||
// close menu when click on the link, check if aside has class show
|
||||
navLinks.forEach((link) => {
|
||||
link.addEventListener("click", () => {
|
||||
if (nav.classList.contains("show")) {
|
||||
nav.classList.remove("show");
|
||||
body.classList.remove("no-scroll");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// close menu when click on the button
|
||||
closeMenu.addEventListener("click", () => {
|
||||
if (nav.classList.contains("show")) {
|
||||
nav.classList.remove("show");
|
||||
body.classList.remove("no-scroll");
|
||||
}
|
||||
});
|
||||
|
||||
const scrollBtn = document.querySelector(".scroll-to-top");
|
||||
// check if window scroll is more than 100px
|
||||
window.addEventListener("scroll", () => {
|
||||
if (window.scrollY > 300) {
|
||||
scrollBtn.classList.add("show");
|
||||
} else {
|
||||
scrollBtn.classList.remove("show");
|
||||
}
|
||||
});
|
||||
|
||||
// scroll to top when click the button
|
||||
scrollBtn.addEventListener("click", () => {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
});
|
||||
});
|
||||
|
||||
const endpoint =
|
||||
"https://api-roadreport.pisdev.my.id/api/landing/street-segmens/report?embed=report.report";
|
||||
const apiKeyHeader = "rrkr-8d99f820-zwhl-6306-9dxg-75da636f85a2";
|
||||
const apiBody = {
|
||||
latitude: -7.8701358,
|
||||
longitude: 112.5258656,
|
||||
radius: 100000,
|
||||
};
|
||||
|
||||
const map = L.map("map", {
|
||||
center: [apiBody.latitude, apiBody.longitude],
|
||||
zoom: 13,
|
||||
});
|
||||
|
||||
const prosesIcon = "assets/images/location.png";
|
||||
const tindakIcon = "assets/images/location_tindak.png";
|
||||
const perbaikanIcon = "assets/images/location_perbaikan.png";
|
||||
|
||||
L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
|
||||
attribution: "Profile Image Studio",
|
||||
}).addTo(map);
|
||||
|
||||
// change zoom control position
|
||||
map.zoomControl.setPosition("bottomright");
|
||||
|
||||
// fetch data from API
|
||||
fetch(endpoint, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"X-API-KEY": apiKeyHeader,
|
||||
},
|
||||
body: JSON.stringify(apiBody),
|
||||
})
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
// console.log(data);
|
||||
showData(data);
|
||||
});
|
||||
|
||||
// show data to the map
|
||||
function showData(data) {
|
||||
data.data.forEach((item) => {
|
||||
const center = JSON.parse(item.center_point);
|
||||
const latitude = center.coordinates[1];
|
||||
const longitude = center.coordinates[0];
|
||||
const marker = L.marker([latitude, longitude], {
|
||||
icon: L.icon({
|
||||
iconUrl:
|
||||
item.report.report.status_id === "FOLUP"
|
||||
? tindakIcon
|
||||
: item.report.report.status_id === "RPR"
|
||||
? perbaikanIcon
|
||||
: prosesIcon,
|
||||
iconSize: [24, 24],
|
||||
iconAnchor: [12, 24],
|
||||
}),
|
||||
}).addTo(map);
|
||||
const type = item.report.user_type;
|
||||
const level = item.report.user_level;
|
||||
let typeContainer = "";
|
||||
|
||||
if (type && level !== "-") {
|
||||
typeContainer = `<span style="color: var(--danger)">${type} ${level}</span>`;
|
||||
} else {
|
||||
typeContainer = "";
|
||||
}
|
||||
|
||||
marker.bindPopup(
|
||||
`${typeContainer}<p style="font-size: 1rem; margin-top: 0; margin-bottom: 0.5rem">${
|
||||
item.name
|
||||
}</p><strong>Status: </strong>${
|
||||
item.report.report.status_id === "FOLUP"
|
||||
? "Tindak Lanjut"
|
||||
: item.report.report.status_id === "RPR"
|
||||
? "Perbaikan"
|
||||
: "Dalam Proses"
|
||||
}`
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// let currentSlide = 0;
|
||||
// const slides = document.querySelectorAll(".dashboard-item");
|
||||
// const maxSlide = slides.length;
|
||||
|
||||
// // add class active to the first slide
|
||||
// slides[0].classList.add("active");
|
||||
|
||||
// const nav = document.querySelector(".dashboard-nav");
|
||||
// const buttons = nav.querySelectorAll("button");
|
||||
|
||||
// // add class active to the first button
|
||||
// buttons[0].classList.add("active");
|
||||
|
||||
// // function to change the slide
|
||||
// function goToSlide(slide) {
|
||||
// slides[currentSlide].classList.remove("active");
|
||||
// buttons[currentSlide].classList.remove("active");
|
||||
// currentSlide = (slide + maxSlide) % maxSlide;
|
||||
// slides[currentSlide].classList.add("active");
|
||||
// buttons[currentSlide].classList.add("active");
|
||||
// }
|
||||
|
||||
// // function to go to the next slide
|
||||
// function nextSlide() {
|
||||
// goToSlide(currentSlide + 1);
|
||||
// }
|
||||
|
||||
// // function to go to the previous slide
|
||||
// function prevSlide() {
|
||||
// goToSlide(currentSlide - 1);
|
||||
// }
|
||||
|
||||
// // add event listener to the buttons
|
||||
// buttons.forEach((button, index) => {
|
||||
// button.addEventListener("click", () => goToSlide(index));
|
||||
// });
|
||||
|
||||
// // auto slide
|
||||
// setInterval(nextSlide, 5000);
|
||||
|
||||
// // reset interval when user click on the button
|
||||
// buttons.forEach((button) => {
|
||||
// button.addEventListener("click", () => {
|
||||
// clearInterval(nextSlide);
|
||||
// });
|
||||
// });
|
||||
509
index.html
Normal file
|
|
@ -0,0 +1,509 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="description"
|
||||
content="
|
||||
RoadReport merupakan aplikasi yang digunakan untuk melaporkan dan
|
||||
memantau proses perbaikan jalan rusak. Cukup ketuk layar ponsel Anda,
|
||||
beri tahu kami tentang masalah jalan, dan kami akan segera mengatasinya.
|
||||
Bergabunglah dalam perjalanan kami untuk membuat jalan lebih baik dengan
|
||||
RoadReport!
|
||||
"
|
||||
/>
|
||||
<meta
|
||||
name="keywords"
|
||||
content="
|
||||
roadreport, road report, road, report, jalan, rusak, jalan rusak, aplikasi, mobile, android, ios, web, website, dashboard, monitoring, pemantauan, pemantauan jalan, pemantauan jalan rusak, pemantauan jalan rusak berbasis web, pemantauan jalan rusak berbasis mobile, pemantauan jalan rusak berbasis android, pemantauan jalan rusak berbasis ios, pemantauan jalan rusak berbasis website, pemantauan jalan rusak berbasis dashboard, pemantauan jalan rusak berbasis monitoring, pemantauan jalan rusak berbasis pemantauan, pemantauan jalan rusak berbasis pemantauan jalan, pemantauan jalan rusak berbasis pemantauan jalan rusak, pemantauan jalan rusak berbasis pemantauan jalan rusak berbasis web, pemantauan jalan rusak berbasis pemantauan jalan rusak berbasis mobile, pemantauan jalan rusak berbasis pemantauan jalan rusak berbasis android, pemantauan jalan rusak berbasis pemantauan jalan rusak berbasis ios, pemantauan jalan rusak berbasis pemantauan jalan rusak berbasis website, pemantauan jalan rusak berbasis pemantauan jalan rusak berbasis dashboard, pemantauan jalan rusak berbasis pemantauan jalan rusak berbasis monitoring
|
||||
"
|
||||
/>
|
||||
<title>RoadReport</title>
|
||||
<link rel="icon" href="assets/images/favicon.png" />
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,400;9..40,500;9..40,600;9..40,700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
||||
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
||||
crossorigin=""
|
||||
/>
|
||||
<link rel="stylesheet" href="/assets/css/styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<nav class="navbar">
|
||||
<div class="container">
|
||||
<a href="#" class="navbar-brand">
|
||||
<img
|
||||
src="assets/images/logo.webp"
|
||||
alt="RoadReport"
|
||||
width="112"
|
||||
height="38"
|
||||
/>
|
||||
</a>
|
||||
<button class="button navbar-toggle" type="button">menu</button>
|
||||
<nav class="navbar-menu">
|
||||
<ul class="navbar-menu-list">
|
||||
<li>
|
||||
<a href="#">Beranda</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#feature">Fitur Unggulan</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#app">Mobile Apps</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="navbar-menu-action">
|
||||
<!-- <a href="#" class="button">Login</a> -->
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<aside>
|
||||
<button type="button">X</button>
|
||||
<nav>
|
||||
<a href="#">Beranda</a>
|
||||
<a href="#feature">Fitur Unggulan</a>
|
||||
<a href="#app">Mobile Apps</a>
|
||||
</nav>
|
||||
</aside>
|
||||
<main>
|
||||
<section id="hero" class="section hero">
|
||||
<div class="container">
|
||||
<div class="hero-text">
|
||||
<h1 class="title hero-title">
|
||||
Jalan Rusak? Laporkan secara <span>real-time</span> dengan
|
||||
RoadReport!
|
||||
</h1>
|
||||
<p class="hero-desc">
|
||||
RoadReport merupakan aplikasi yang digunakan untuk melaporkan dan
|
||||
memantau proses perbaikan jalan rusak. Cukup ketuk layar ponsel
|
||||
Anda, beri tahu kami tentang masalah jalan, dan kami akan segera
|
||||
mengatasinya. Bergabunglah dalam perjalanan kami untuk membuat
|
||||
jalan lebih baik dengan RoadReport!
|
||||
</p>
|
||||
<a href="#" class="button hero-cta">
|
||||
<img
|
||||
src="assets/images/gplay.webp"
|
||||
width="32"
|
||||
height="32"
|
||||
alt="Google Play"
|
||||
/>
|
||||
Download Sekarang
|
||||
</a>
|
||||
</div>
|
||||
<div class="hero-illustration">
|
||||
<img src="assets/images/hero.webp" alt="Road Report" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="feature" class="section">
|
||||
<div class="container">
|
||||
<h1 class="feature-title">Fitur Unggulan</h1>
|
||||
<h2 class="title feature-subtitle">Pantau Proses Jalan</h2>
|
||||
<p class="feature-desc">
|
||||
Fitur Pemantauan Proses Jalan memungkinkan Anda untuk melihat
|
||||
perkembangan perbaikan jalan secara real-time.
|
||||
</p>
|
||||
<div class="feature-map">
|
||||
<ul class="feature-map-legend">
|
||||
<li>Dalam Proses</li>
|
||||
<li>Tindak Lanjut</li>
|
||||
<li>Perbaikan</li>
|
||||
</ul>
|
||||
<div id="map" class="feature-map-canvas"></div>
|
||||
</div>
|
||||
|
||||
<ul class="feature-list">
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/machine_learning.webp"
|
||||
width="120"
|
||||
height="120"
|
||||
alt="Machine Learning"
|
||||
/>
|
||||
<h6>Machine Learning</h6>
|
||||
<p>
|
||||
Teknologi Machine Learning untuk mengidentifikasi prioritas
|
||||
perbaikan jalan.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/pemantauan.webp"
|
||||
width="120"
|
||||
height="120"
|
||||
alt="Pemantauan"
|
||||
/>
|
||||
<h6>Pemantauan</h6>
|
||||
<p>
|
||||
Fitur pemantauan memungkinkan pengguna untuk melihat kondisi
|
||||
jalan dengan pembaruan real-time.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/peta.webp"
|
||||
width="120"
|
||||
height="120"
|
||||
alt="Peta Interaktif"
|
||||
/>
|
||||
<h6>Peta Interaktif</h6>
|
||||
<p>
|
||||
Peta interaktif membantu pengguna untuk mendapatkan informasi
|
||||
kondisi jalan yang up-to-date.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/pelaporan.webp"
|
||||
width="120"
|
||||
height="120"
|
||||
alt="Pelaporan"
|
||||
/>
|
||||
<h6>Pelaporan</h6>
|
||||
<p>
|
||||
Melaporkan kerusakan jalan dengan mudah melalui fitur pelaporan
|
||||
lengkap.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/jadwal.webp"
|
||||
width="120"
|
||||
height="120"
|
||||
alt="Jadwal Perbaikan"
|
||||
/>
|
||||
<h6>Jadwal Perbaikan</h6>
|
||||
<p>
|
||||
Jadwal perbaikan jalan membantu pengguna untuk mengetahui kapan
|
||||
perbaikan jalan akan dilakukan.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/keputusan.webp"
|
||||
width="120"
|
||||
height="120"
|
||||
alt="Keputusan Terinformasi"
|
||||
/>
|
||||
<h6>Jadwal Perbaikan</h6>
|
||||
<p>
|
||||
RoadReport memberikan data dan rekomendasi terkini untuk
|
||||
mendukung keputusan terinformasi dalam perbaikan jalan.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="app" class="section">
|
||||
<div class="container">
|
||||
<h1 class="title app-title">Mobile Apps</h1>
|
||||
<div class="app-content">
|
||||
<div class="app-illustration">
|
||||
<img src="assets/images/mobile_app.webp" alt="Mobile Apps" />
|
||||
</div>
|
||||
<ul class="app-features">
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/mobile_app_dashboard.webp"
|
||||
width="72"
|
||||
height="72"
|
||||
alt="Dashboard"
|
||||
/>
|
||||
<div>
|
||||
<h6>Dashboard</h6>
|
||||
<p>
|
||||
Dashboard merupakan fitur roadreport untuk menampilkan
|
||||
kebutuhan umum bagi user seperti current map, faq, dan
|
||||
foto-foto draft yang ada pada user tersebut.
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/mobile_app_laporan.webp"
|
||||
width="72"
|
||||
height="72"
|
||||
alt="Laporan"
|
||||
/>
|
||||
<div>
|
||||
<h6>Laporan</h6>
|
||||
<p>
|
||||
Laporan merupakan fitur utama dari roadreport yang dapat
|
||||
melaporkan kondisi jalan kepada pihak yang berwenang untuk
|
||||
memperbaiki jalan.
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<img
|
||||
src="assets/images/mobile_app_riwayat.webp"
|
||||
width="72"
|
||||
height="72"
|
||||
alt="Riwayat"
|
||||
/>
|
||||
<div>
|
||||
<h6>Riwayat</h6>
|
||||
<p>
|
||||
Riwayat merupakan fitur dari aplikasi roadreport agar
|
||||
pengguna dapat memantau proses atau status dari laporan yang
|
||||
telah dikirimkan kepada pihak berwenang.
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- <section id="dashboard" class="section">
|
||||
<div class="container">
|
||||
<h1 class="title dashboard-title">Dashboard Monitoring</h1>
|
||||
<div class="dashboard-silder">
|
||||
<div id="slide-1" class="dashboard-item">
|
||||
<div class="dashboard-item-text">
|
||||
<img
|
||||
src="assets/images/monitoring_dashboard_icon.webp"
|
||||
width="56"
|
||||
height="56"
|
||||
alt=""
|
||||
/>
|
||||
<h6>Dashboard</h6>
|
||||
<p>
|
||||
Pada halaman dashboard, admin mendapatkan informasi dasar dari
|
||||
laporan-laporan yang masuk seperti jumlah laporan dan map
|
||||
interaktif untuk memantau jalan yang rusak.
|
||||
</p>
|
||||
</div>
|
||||
<img
|
||||
src="assets/images/monitoring_dashboard.webp"
|
||||
width="100%"
|
||||
height="100%"
|
||||
alt="Dashboard Monitoring"
|
||||
/>
|
||||
</div>
|
||||
<div id="slide-2" class="dashboard-item">
|
||||
<div class="dashboard-item-text">
|
||||
<img
|
||||
src="assets/images/monitoring_laporan_icon.webp"
|
||||
width="56"
|
||||
height="56"
|
||||
alt=""
|
||||
/>
|
||||
<h6>Daftar Laporan</h6>
|
||||
<p>
|
||||
Pada halaman list laporan, admin dapat memproses laporan yang
|
||||
dikirimkan oleh user dari aplikasi mobile. Pada fitur ini juga
|
||||
dapat berkolaborasi dengan pihak pengelola jalan untuk
|
||||
memproses laporan.
|
||||
</p>
|
||||
</div>
|
||||
<img
|
||||
src="assets/images/monitoring_laporan.webp"
|
||||
width="100%"
|
||||
height="100%"
|
||||
alt="Daftar Laporan"
|
||||
/>
|
||||
</div>
|
||||
<div id="slide-3" class="dashboard-item">
|
||||
<div class="dashboard-item-text">
|
||||
<img
|
||||
src="assets/images/monitoring_detail_icon.webp"
|
||||
width="56"
|
||||
height="56"
|
||||
alt=""
|
||||
/>
|
||||
<h6>Detail Laporan</h6>
|
||||
<p>
|
||||
Pada halaman detail laporan, admin dapat melihat proses dari
|
||||
laporan yang dikirimkan seingga dapat memantau status terkini
|
||||
dari leporan yang dikrimkan.
|
||||
</p>
|
||||
</div>
|
||||
<img
|
||||
src="assets/images/monitoring_detail.webp"
|
||||
width="100%"
|
||||
height="100%"
|
||||
alt="Detail Laporan"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dashboard-nav">
|
||||
<button data-slide="slide-1"></button>
|
||||
<button data-slide="slide-2"></button>
|
||||
<button data-slide="slide-3"></button>
|
||||
</div>
|
||||
</div>
|
||||
</section> -->
|
||||
|
||||
<section id="cta" class="section">
|
||||
<div class="container">
|
||||
<div class="cta-content">
|
||||
<div class="cta-text">
|
||||
<h1 class="title">
|
||||
Ada jalan rusak? laporkan di <strong>RoadReport!</strong>
|
||||
</h1>
|
||||
<p>
|
||||
Jangan biarkan jalan rusak mengganggu perjalanan Anda. Laporkan
|
||||
dengan cepat melalui RoadReport, aplikasi andalan untuk
|
||||
melaporkan kondisi jalan!
|
||||
</p>
|
||||
<a href="#">
|
||||
<img src="assets/images/gplay.webp" alt="Google Play" />
|
||||
Download Sekarang
|
||||
</a>
|
||||
</div>
|
||||
<div class="cta-illustration">
|
||||
<img
|
||||
src="assets/images/nicolas-j-leclercq.webp"
|
||||
width="100%"
|
||||
height="100%"
|
||||
alt=""
|
||||
/>
|
||||
<p>
|
||||
Photo by
|
||||
<a
|
||||
href="https://unsplash.com/@nicolasjleclercq?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash"
|
||||
>Nicolas J Leclercq</a
|
||||
>
|
||||
on
|
||||
<a
|
||||
href="https://unsplash.com/photos/construction-worker-on-street-WJg2bynUWOk?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash"
|
||||
>Unsplash</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<footer class="section">
|
||||
<div class="container">
|
||||
<div class="footer-content">
|
||||
<div class="footer-about">
|
||||
<a href="#">
|
||||
<img
|
||||
src="assets/images/logo.webp"
|
||||
width="112"
|
||||
height="38"
|
||||
alt="Road Report"
|
||||
/>
|
||||
</a>
|
||||
<p>
|
||||
Aplikasi untuk melaporkan dan memantau proses perbaikan jalan
|
||||
rusak.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://facebook.com/" target="_blank">
|
||||
<img
|
||||
src="assets/images/facebook_icon.webp"
|
||||
width="32"
|
||||
height="32"
|
||||
alt="Facebook"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://instagram.com/" target="_blank">
|
||||
<img
|
||||
src="assets/images/instagram_icon.webp"
|
||||
width="32"
|
||||
height="32"
|
||||
alt="Instagram"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://x.com/" target="_blank">
|
||||
<img
|
||||
src="assets/images/twitter_icon.webp"
|
||||
width="32"
|
||||
height="32"
|
||||
alt="Twitter"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-collab">
|
||||
<h6>Collaborations</h6>
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
href="https://profileimage.studio/"
|
||||
target="_blank"
|
||||
title="Profiel Image Studio"
|
||||
>
|
||||
<img
|
||||
src="assets/images/pis_logo.webp"
|
||||
width="32"
|
||||
height="48"
|
||||
alt="PIS"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://www.polinema.ac.id/"
|
||||
target="_blank"
|
||||
title="Polinema"
|
||||
>
|
||||
<img
|
||||
src="assets/images/polinema_logo.webp"
|
||||
width="48"
|
||||
height="48"
|
||||
alt="Polinema"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://kedaireka.id/"
|
||||
target="_blank"
|
||||
title="kedaireka"
|
||||
>
|
||||
<img
|
||||
src="assets/images/kedaireka_logo.webp"
|
||||
width="180"
|
||||
height="40"
|
||||
alt="kedaireka"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-contact">
|
||||
<h6>Meet Us</h6>
|
||||
<p>contact@profileimage.studio</p>
|
||||
<p>Perum. Bumi Tunggulwulung Indah G/8 Lowokwaru Malang 65143</p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="footer-copy">
|
||||
© 2023 All rights reserved - Profile Image Studio
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<button class="button scroll-to-top">up</button>
|
||||
|
||||
<script
|
||||
src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
||||
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
||||
crossorigin=""
|
||||
></script>
|
||||
<script type="text/javascript" src="assets/js/script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||