UI's are built with web technologies and are locally served in a locked down version of Chromium.
Using our chrome extension you can emulate being connected to a real machine and make decisions on the outcomes you want to test. For example, forcing a vend to fail.
You can customise the deployment pipeline to fit your required level of QA. We support up to 5 stages and unlimited machines assigned to those stages.
After QA you can easily move your application to the production stage to instantly deploy to all live machines.
Vending and all other hardware functions are fully abstracted into our easy to use JS package.
1 import { useCurrentUser, useEntity, useTransact }
2 start from 'vendOS-react'
3
4 // Create
5 const [currentUser] = useCurrentUser()
6 const [project] = useEntity({ project: { name: 'Build the thing' }})
7 const [transact, errors, syncing] = useTransact()
8 const [ids, dbAfter, dbBefore] = transact([{
9 todo: {
10 title: 'Write more code',
11 assignedTo: currentUser,
12 project
13 }
14})
Campaign data is sent directly to our servers and can be viewed in realtime on our dashboard. We also have an on machine cache to avoid issues with offline machines.
1 import { useCurrentUser, useEntity, useTransact } from 'vendos.js'
2
3 // Create
4 const [currentUser] = useCurrentUser()
5 const [project] = useEntity({ project: { name: 'Build the thing' }})
6 const [transact, errors, syncing] = useTransact()
7 const [ids, dbAfter, dbBefore] = transact([{
8 todo: {
9 title: 'Write more code',
10 assignedTo: currentUser,
11 project
12 }
13}])
Easily integrate with terminals. We have written, tested and continually maintain 6 different types.
1 OS.Payment.charge.hold({
2 amount: 21.00,
3 reference: 'Some reference'
4 }).then(res => {
5 // Successful hold placed
6 console.log(res)
7 }).catch(err => {
8 // Payment declined or the user canceled
9 console.error(err)
10})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1 import { useCurrentUser, useEntity, useTransact } from 'vendos.js'
2
3 // Create
4 const [currentUser] = useCurrentUser()
5 const [project] = useEntity({ project: { name: 'Build the thing' }})
6 const [transact, errors, syncing] = useTransact()
7 const [ids, dbAfter, dbBefore] = transact([{
8 todo: {
9 title: 'Write more code',
10 assignedTo: currentUser,
11 project
12 }
13}])
1 OS.Payment.charge.hold({
2 amount: 21.00,
3 reference: 'Some reference'
4 }).then(res => {
5 // Successful hold placed
6 console.log(res)
7 }).catch(err => {
8 // Payment declined or the user canceled
9 console.error(err)
10})
Drag and drop upload to see all your machines update over the air with no manual configuration necessary.
Your dashboard shows you realtime data feeds and charts, securely sent directly from machine to our cloud servers.
SMS and desktop notifications allow you to send technicians on site the instant that they are required. A troubleshooting walkthrough is also displayed on the machine screen to show them exactly how to solve the error.
The data you capture from your fleet of machines is securely fed up to our servers in realtime. This gives you the ability to monitor exactly how well they are performing and make changes to your storefront or campaign as and when its needed.
Move machines between different campaigns, view their stock levels and get notified on errors.
We have an easy to use product repository and templating system built-in. This allows you to easily change products on the fly for instant updates across your fleet.
We would love to hear from you, fire across any and all questions.