A comprehensive parking management system
Highly customizable solutions for various clients, including corporate, commercial, and residential, providing options for subscriptions, one-time parking, and detailed admin control over parking availability, pricing, and access.
Staff Augmentation, Software Re-engineering, IoT, SaaS, Web Development, Mobile Development, Automotive
4x faster
build time
100+
Lambda functions
5x faster
client onboarding
10+
clients onboarded
About our client
ParkHere is an ambitious team of innovators. They aim to revolutionize parking management. Their software - maximizes parking capacities, optimizes charging station use, eliminates unauthorized parking. ParkHere combines software and hardware. The software includes the admin dashboard and the mobile app.In the dashboard, parking owners can regulate who and how can use their parking. The mobile app is available on iOS and Android. It allows parking users to book services. When we joined the project, the ParkHere software already had some basic features. However, our team helped ParkHere to significantly evolve their platform.Company hardware includes ANPR cameras for reading license plates,bollards that can scan QR codes,automatic barriers and so on. Communicating with these IoT devices was an integral part of the project.
Country
Technology
Cooperation
From Hardware Setup to Parking Configuration
When a new client decides to join ParkHere, company experts set up their hardware. In the meantime, parking owners configure software settings. They specify who, when and how can use their parking space.
Flexible Options for Drivers
To use parking, drivers download the ParkHere app. They can choose between a one-time parking and a subscription. Users specify the date and time.
Parking Payment and Invoicing through Saferpay
Then, users pay for parking via Saferpay and receive the invoice.
Automated QR Code and License Plate Verification System
When a driver arrives at the parking location, the system scans their QR code or license plate number. No unauthorized vehicle can access parking. Drivers can see their name and reservation time on the screen near the parking place.
Improving the UI/UX design
Our team analyzed and improved ParkHere’s UI/UX design. First, we added the drag-and-drop feature. This simplified content management and improved visualization. Then, we evaluated and upgraded the software’s accessibility.
Subscriptions and one-time parking
ParkHere offers two parking options:
- subscriptions and
- one-time parking.
Subscriptions are ideal for corporate and residential needs. Drivers enjoy peace of mind, knowing they have guaranteed parking near their home or office. Other ParkHere clients, like shopping malls, prefer one-time parking. Drivers can also specify whether they will need to charge their vehicle.
Customisation for admins
As mentioned, ParkHere software is very customizable. Thus, admin dashboards allow parking owners to set up the following:
- Which parking spaces are available for which users.
Some example, companies can reserve certain parking areas for employees. Then, the remaining spots will be available for visitors.
- Times, days of the week or dates when parking is available.
Commercial parking owners often want to maximize occupancy. But corporate clients might need to restrict access at certain times for security reasons.
- Minimal and maximal parking time.
If necessary, admins could set lower and upper limits on parking duration.
- Prices, subscription options, discounts, etc.
Admins can easily manage all other software aspects important to their business. This includes pricing models, discounts, subscriptions and more.
Statistics and real-time data
The admin dashboard offers handy statistics. Thus parking owners can see:
- real-time occupancy,
- peak hours and
- occupancy rates for different periods.
Users can also export their data in CSV format.
Vouchers and discounts
Another important feature is the discount system. It allows parking owners to issue virtual vouchers to its users. Admins can easily target a specific user group. For example, they can engage people who haven’t used their services for a while. The discount system also supports QR code generation. This further improves marketing opportunities for parking owners.
The Saferpay payment system integration
Saferpay is a Swiss payment provider. It enables fast, convenient and safe payments. Saferpay supports all common payment methods and features. These include:
- Credit and debit card payments (Visa, Mastercard, Maestro, JCB, Bancontact, etc.),
- Apple and Google Pay,
- Payment systems (PayPal, Alipay, Giropay, iDEAL, etc.),
- Cryptocurrencies (Bitcoin and Ethereum),
- Payments via QR codes and links.
Saferpay is safe. ParkHere doesn’t have access to sensitive user data, like security codes.To integrate Saferpay in ParkHere, we used web-view and iframe technologies.
Invoice generation
When drivers pay for parking, they automatically receive an invoice. This is vital for many users. First, this simplifies personal finance management. Second, drivers often use parking for work-related reasons. They can provide employers with invoices and get cost compensation. And their employers use invoices to prove that parking was a business expense. This influences how much taxes they pay.
The invoices were in PDF format. To implement this solution, our experts used a handy Java library, called Apache PDFBox.
Implementing Single Sign-On (SSO)
SSO makes apps very convenient. Many ParkHere clients are large corporations. ParkHere helps them manage their parking spaces better. With SSO, employees of these companies can easily sign in to the app using their corporate credentials. No need to register.
Using SSO is simple. First, a user downloads the app. Then, they enter their company title in the “User Name” field and click “Log In.” The app redirects them to their corporate website, where they input their credentials. Voila! Now they are logged in to ParkHere and can book parking.
How did we do it?
Developers can implement SSO in different ways. SSO authentication procedures are called protocols. The two most popular protocols are:
- SAML and
- Open ID Connect.
SAML exchanges data in XML format between service and identity providers. A service provider is software that a user wants to access. For example, it can be Slack, Workday or Monday. An identity provider is the software that provides SSO service. Examples are Okta, AWS IAM, Keycloak and Microsoft Entra ID (formerly Azure Active Directory). We used the latter. SAML is very popular among corporate software providers.
Open ID Connect. (or OIDC) uses JSON Web Tokens instead of XML files. OIDC is easier to implement. It is faster and more lightweight. This makes it ideal for mobile and web apps. But compared to SAML, OIDC has fewer features. For example, there is no Single-Log-Out. The flexibility is also lower. So, SAML can specify more details on what a user can or cannot access.
AWS Cognito for simple SSO integration
To streamline SSO integration, our team used Amazon Cognito. It supports both SAML and OIDC protocols. Also, it is fully managed and integrates well with other AWS services.
Cross-platform mobile development
The mobile app is a crucial part of the ParkHere software ecosystem. It is available on both iOS and Android. Our team used the cross-platform development method. With traditional native development, we would have to create two separate apps – one for Android and one for IOS. But with cross-platform development, we used the same code for both platforms.
This approach has a number of advantages:
- Faster time-to-market, Creating one app instead of two takes fewer working hours. So, you can launch the app faster
- Lower costs, All costs associated with software development and further maintenance are lower.
- Automatic updates, With native apps, you must rely on users to press the “Update” button. This is inconvenient, especially if you have important security patches. But with cross-platform development, you can update the app yourself for all users.
- Consistent UX across platforms. Cross-platform development ensures that users of both platforms will have the same user experience. This can be difficult to achieve with native apps.
Technologies: React Native and Expo
To create the app, we used the following:
- the JavaScript programming language,
- the React Native open-source framework and
- the Expo library.
React Native is a popular choice for cross-platform development. This framework offers high performance and has many important features that streamline the development process. Well-known brands that also rely on React Native include Instagram, AirBnB, Pinterest and Skype.
The Expo library simplifies React Native development. Itprovides developers with useful tools to create popular app features. A particularly useful one is the Expo for Web. It allows developers to run and test Expo projects in a web browser. This makes development much easier.
IoT SaaS: software to hardware integration
Hardware is an integral part of the ParkHere system. Software and hardware must cooperate smoothly. Thus, cameras and lasers must know whether to admit a car. And the software must know whether the driver has arrived to use their spot.
Our team used AWS IoT Core to ensure stable communication between software and hardware components. This service is a message broker. It is highly scalable and secure. So, no matter how many new clients join, we will always provide high performance and good data protection. Another benefit is simple integration with other AWS services that we used for ParkHere. These included AWS Lambda, SQS and DynamoDB.
Technologies: React Native and Expo
AWS IoT Core supports several messaging protocols. We used MQTT. It has several advantages:
- Low energy consumption: IBM developed MQTT for harsh environments, like deserts. Access to the electricity grid there is limited. So, the protocol ensures the lowest energy consumption possible. This makes MQTT perfect for battery-powered devices.
- Efficient bandwidth use: MQTT messages have little meta-data. So, the protocol works well with limited bandwidth.
- Resilience: MQTT supports automatic reconnections in case of disruptions.
- Asynchronous communication: This means the request sender doesn’t need to wait for a response. This improves performance.
- Scalability: MQTT is highly scalable. The reasons for this include its architecture peculiarities, efficient bandwidth use and support of horizontal scaling.
Multitenancy
ParkHere is a SaaS product. And multitenancy is an important characteristic of every SaaS software. It means that each ParkHere client has their own exclusive space within the software. Thus, they can manage and view only their documents, settings and users. And they do not know what other ParkHere clients have uploaded into the system.
Logical segregation multitenancy
Our parking management platform uses the logical segregation multitenancy pattern. This means that the software database has information on which data belongs to which client (tenant). When a user logs in, the system knows to which organization they belong. And it knows what access level they have. So, they only show information available to them. With this approach, all clients share the same database. And all data runs on the same servers. An alternative is physical segregation. This means that the data of different companies runs on different servers. In the case of cloud infrastructure, these can be virtual servers (instances). The databases are also separate.
Each approach has certain benefits. Logical multitenancy is easier to implement and cheaper to maintain. It is also more scalable. On the other hand, physical multitenancy is more secure. It also offers better performance and customizability.
Streamlining client onboarding
Our team has onboarded 10+ large enterprise clients for the company. We also improved their onboarding process.
Previously, new clients had to fill in a huge, clunky Google Sheets document. It had several pages (sheets) and lots of columns. When the document was ready, ParkHere employees exported it in a CSV format. Then, they uploaded it into their system. This was time-consuming and inefficient. Also, any typo or mistake could lead to unexpected issues.
Instead, we used Strapi to create a simple quiz for new clients. Strapi is a content management system. It is free, open-source and fully customizable. Data from quizzes was standardized. So, users couldn’t make significant errors. And, if necessary, developers could easily amend any information.
Implementing data bulk loading
New clients must add all relevant information about their parking to the ParkHere system. This includes the list of their parking spots. And information about employees who will use parking. Often, companies have such data in separate documents.
Entering this data manually took a lot of time and resources. To streamline this process, we introduced the bulk loading feature. Here is how it works:
- First, ParkHere admins conduct data mapping. This means that they link fields in the clients’ documents to match fields in their system.
- Then, they transform the data and download it in a CSV format.
- The last step is uploading the CSV file into the system. Bulk loading is much faster than manual data entrance.
Automating Data Bulk Loading with Strapi CMS for Improved Workflow Efficiency
Over time, there will be additional improvements to this workflow. The plan is to route data bulk loading via Strapi CMS. This will fully automate the process, reducing errors associated with manual labor.
Full GDPR compliance
This parking management software is a German company's product that provides services to EU clients. So, strict GDPR compliance is crucial for their business. Our client's employees and our team made sure that all data of company clients remained in the EU. GDPR regulations have significantly influenced our decision-making process. For example, they were the reason why we chose Strapi. Many other content management systems run exclusively in the cloud. They pose a risk that data can be transferred outside the EU. But with Strapi we decide ourselves, where to host it.
Improving CI/CD
The company faced a challenge. The system needed a lot of memory (RAM) to compile and bundle the front-end code. Our client's employees kept adding more memory, but this was not sustainable. Our experts analyzed the issue. We discovered that the software lacked some key best practices. As a result, a lot of redundant and unused code was included in the final code bundles. To fix this, we implemented the Tree Shaking technique. It helped us to reduce the size of the code and significantly improve performance.
As a result, the app’s build time has decreased 4 times. Previously, it took around 30 minutes. Now, it is only 7 minutes. Another significant benefit is the reduction in the company's expenses.
Microservices and infrastructure
Parking software has a microservice architecture. This means that each function is performed by a small independent service. Such services can be created, deployed and scaled independently from one another. The main benefits of this approach are:
- Flexibility: It is easy to create new features or change existing ones. It is fast and doesn’t impact the whole system.
- Scalability: You can scale only those parts of your software that you need. This helps prevent bottlenecks.
- Easier maintenance: With microservices, software maintenance is much simpler. And it requires less resources.
- Resilience: Even if one service fails, others will keep working.
Simple infrastructure management with AWS Lambda
The software’s microservices run on AWS Lambda. The main benefit of this service is that AWS automatically handles the underlying infrastructure. This leads to:
- Fast and easy deployments: AWS Lambda simplifies deployments, making them faster and easier. For example, there is no need to worry about setting up load balancing or server scaling. AWS does it automatically. This also improves the company’s CI/CD and time-to-market.
- Less manual labour: With AWS managing Lambda's infrastructure, developers can focus on other software aspects. This saves time and resources.
To work with AWS Lambda, developers create functions. Lambda functions are pieces of code with a specific purpose.
Coders can use Java, Python, Go, Typescript, Rust and some other languages to set up AWS Lambda. Our experts used Java.
Terraform for a broader infrastructure setup
Terraform is an infrastructure-as-code software. With it, developers can set up infrastructure by defining it as code. AWS Lambda and Terraform work well together. AWS Lambda excels at managing infrastructure for its functions. Terraform has a much wider application area. Developers use it to set up the entire infrastructure lifecycle. Examples of how we used Terraform are:
- Setting up and managing AWS Lambda functions.
- Overseeing integration across various AWS services. This includes Lambda, DynamoDB, API Gateway and IoT Core.
- Streamlining deployment, etc.
Challenges and our solutions
Working with AWS Lambda presented us with several challenges. Here is how we addressed them:
Testing challenges
Developers cannot run AWS Lambda locally on their computers. This makes code testing difficult. Thus, we couldn’t run integration testing. This means checking how updates or a new component will work with other software elements.
Comprehensive unit testing
As a result, we focused on unit testing, using it to the fullest. This means that we were thoroughly testing each individual software component.
Moving forward: LocalStack and reusable Terraform modules
Our experts also created a detailed plan for ParkHere on how to further improve testing. Thus, we offered to integrate LocalStack. This software allows to test AWS services locally. The next step is to develop custom reusable Terraform modules. This approach has several benefits:
- consistency across all environments (e.g. testing, production);
- reusability, meaning less labor and more efficient testing.
Cold start latency challenge
If a Lambda function is not used, it becomes inactive. Usually, it takes around 15 minutes. Then, its response time becomes longer. It can take several seconds, affecting user experience. To address the issue, we used the AWS CloudWatch Events. We configured it to regularly trigger each Lambda function. So, they remain active. This is a pretty standard but elegant solution.
Reliable Public API for Corporate Software and ERP Systems
ParkHere has a public API. So, companies can access and integrate the platform's features and data into their own or third-party software. A common use case is integration with ERPs, accounting systems and other corporate software. The company is committed to
- providing fast API response time and
- ensuring that there are no system failures.
Public API Commitments
ParkHere specified its public API commitments in its SLA. The abbreviation stands for Service Level Agreement. The document describes API characteristics, like response time and error rate. One of our goals was to make sure that the API meets all SLA terms.
Enhancing System Stability and Data Integrity with AWS SQS for High-Demand Parking Bookings
We needed to improve data integrity and system stability. So, our experts routed all key software functions via Amazon Simple Queue Service. This is especially important for peak hours. For most corporate users, next week parking becomes available at 3 pm on Sundays. So, from 3 to 3:30 pm, they actively try to book spots. But, AWS does not allow more than 1000 simultaneous Lambda requests per account (all Lambda functions combined). Without AWS SQS, anything beyond this limit would be lost.
Queue System for 'Book Parking' Requests
When users press the “Book Parking” button, their request goes to a queue.
Dynamic Request Routing Using Metadata for Lambda Function Execution
The system sorts requests into different queues using message metadata. The choice depends on the tenant, parking location, function, etc. Then, the system sends the request to the relevant Lambda function.
Parking Availability Checker and Booking Confirmation via Lambda Function
The Lambda function checks whether the parking spots are available. Then, it confirms the booking or says that the chosen parking spots are not available.
Notification Process and Automation in Software Functions
The user receives a notification about the outcome. For other software functions, like automatic barrier control, the process is similar.
Preventing Concurrency Errors
This approach also prevents concurrency errors. Such errors can happen if several people simultaneously try to modify the same database field. For example, corporate users can simultaneously try to book the same parking spot. To avoid this, we used FIFO delivery logic and message group IDs. FIFO stands for “First In, First Out”. All requests that go to queues have metadata. It is additional information about the message. The metadata includes a group ID. It specifies the parking location. So, requests that have the same group ID belong to the same parking location. The system processes them one by one in a strict order. This makes concurrency errors impossible.
Databases and related tools
We were using two databases for this project:
- Amazon DynamoDB NoSQL database and
- MySQL relational database.
Both databases are scalable and secure. They offer high performance and availability.
We also used Flyway to simplify database management. It is a handy tool, designed for relational databases. Its main goal is to help developers make database changes.
AWS CodeArtifact for managing code bundles
AWS CodeArtifact is a handy tool for code bundle management. It provides a secure, centralized repository to store and manage software artifacts. Examples of such artifacts are:
- Kotlin and React Native codebase
- Terraform configuration files,
- AWS Lambda deployment packages, etc.
High-end clients
Thus, they attracted many high-end clients, including:
- Henkel,
- Telefonica,
- SAP,
- Zurich Insurance Group,
- Brandenburg Investment Bank (ILB)
- Giesecke+Devrient,
- Frequentis and so on.
Expanding to international markets
ParkHere is a German company. But they expanded their market reach to two more German-speaking, neighboring countries – Switzerland and Austria. A huge role in this played the integration of a Swiss payment system, SaferPay.
1 year
Of successful cooperation
3 months
to integrate Saferpay
16 professionals
Dedicated to the project development team