[{"data":1,"prerenderedAt":432},["ShallowReactive",2],{"footer-vacatures-en":3,"case-parkmybike-software-en-hardware-en":4,"content-by-keys-useCases-en-ai-koppelen-aan-bestaande-systemen,tools-vervangen-door-maatwerkflow,ai-prototype-naar-productie":186},[],{"id":5,"title":6,"approach":7,"body":22,"build":29,"card":42,"connections":46,"cta":47,"dataExamples":46,"description":26,"extension":53,"facts":54,"featured":69,"guardrails":46,"hero":70,"integrations":75,"key":88,"meta":89,"navigation":90,"offers":91,"order":101,"path":102,"proof":103,"relations":116,"result":136,"seo":148,"situation":151,"stem":164,"summary":165,"usecases":166,"visuals":178,"__hash__":185},"cases_en\u002Fcases\u002Fparkmybike-software-en-hardware.md","ParkMyBike: software that has to work beyond the browser",{"title":8,"steps":9},"How did we approach it?",[10,13,16,19],{"title":11,"text":12},"One domain for different hardware","In the backend we model locations, lockers, locks, ports and IoT devices independently of the specific brand. That way the same reservation and user logic keeps working on top of different technical solutions.\n",{"title":14,"text":15},"The backend decides what has to happen","The mobile app does not need to know all protocols and lock logic on its own. In BLE flows, the backend coordinates the session and issues commands for, among other things, connect, read, write and disconnect. The phone does the local Bluetooth work and sends the results back.\n",{"title":17,"text":18},"Connect existing hardware where that is smarter","We do not automatically build our own solution for everything. ParkMyBike integrates with, among others, Particle, EVVA, SAS and iLOQ, and we also built an integration through which Epsilon Cities hardware communicates with our backend via a messaging infrastructure.\n",{"title":20,"text":21},"Build our own hardware where needed","For use cases where existing hardware does not fit well enough, we also develop our own BLE controller firmware. That way software, protocol and physical control can be designed as one system instead of as separate parts.\n",{"type":23,"value":24,"toc":25},"minimark",[],{"title":26,"searchDepth":27,"depth":27,"links":28},"",2,[],{"title":30,"intro":31,"points":32},"What did we build?","ParkMyBike is a chain of software and hardware that together deliver a physical service.\n",[33,36,39],{"title":34,"text":35},"Apps that operate real locks","The iOS and Android apps support reservations, subscriptions and opening bike lockers. For BLE, the phone connects locally to the device, while the backend coordinates the workflow, authorisation and protocol steps.\n",{"title":37,"text":38},"A backend for both software and physical infrastructure","The Elixir backend manages users, locations, reservations, subscriptions, payments, lockers, locks, IoT devices and ports. It also processes real-time updates, hardware events, maintenance tasks and integrations with external systems.\n",{"title":40,"text":41},"Controller and manufacturer integrations","We have supported several hardware paths, from Particle devices and BLE controllers to external lock platforms. For Epsilon Cities, for example, we built two-way communication in which devices report their status and the backend can send actions to specific ports.\n",{"tag":43,"title":6,"summary":44,"metric":45},"Software + hardware","Mobile apps, backend, dashboard, payments, BLE, IoT and physical locks come together in one production-ready system.","2025: 23 new locations · 122 parking spaces · 900 new users.",null,{"title":48,"body":49,"primaryCta":50,"secondaryCta":51,"local":52},"Does your software also have to make something happen in the real world?","Show us which hardware, suppliers and existing systems you have to work with. We help design and build the complete chain, including the tricky parts between API, app and physical device.\n","Book a call","View offer","Senior AI and software engineering from Delft, for organisations in Delft, The Hague, Rotterdam and the surrounding area.\n","md",{"title":55,"items":56},"The case in brief",[57,60,63,66],{"label":58,"value":59},"Product","App, dashboard, backend and hardware",{"label":61,"value":62},"Hardware","BLE, IoT and different lock systems",{"label":64,"value":65},"Expansion in 2025","23 new locations and 122 parking spaces",{"label":67,"value":68},"In practice","900 new users in that same expansion",false,{"headline":71,"intro":72,"primaryCta":73,"secondaryCta":74},"The software is only done when the lock actually opens.","In many software projects, responsibility ends at an API or screen. At ParkMyBike, that is exactly where an important part of the problem begins. A cyclist reserves a spot in the app, then stands physically in front of a locker and expects exactly the right lock to open. For that, app, backend, permissions, reservation, network connection, controller and hardware all have to tell the same story.\n","See how the system works","Tell us what you want to build",{"title":76,"intro":77,"points":78},"One platform, several kinds of hardware","We do not try to force reality into one technical model. Different installations sometimes call for different forms of communication, as long as the product flow on top stays consistent.\n",[79,82,85],{"title":80,"text":81},"Cloud-connected controllers","Particle hardware can send events to the backend and receive commands from the platform. Incoming events are first queued durably before further processing takes place.\n",{"title":83,"text":84},"Bluetooth close to the user","With BLE, the phone is physically close to the lock. The app handles scanning and GATT communication, while the server decides which actions are allowed and which protocol step comes next.\n",{"title":86,"text":87},"External ecosystems","For systems such as iLOQ and other hardware partners, we integrate with their own access technology and infrastructure instead of reinventing it. ParkMyBike remains the product layer for the user, reservation and management.\n","parkmybike-software-en-hardware",{},true,{"eyebrow":92,"primary":93},"Matching offer",{"key":94,"title":95,"text":96,"price":97,"result":98,"duration":99,"nextStep":100},"build-integrate","Build & Integrate","We build the software layer around existing systems and hardware, including backend, integrations, apps, protocols, monitoring and the error handling needed to make it work reliably in practice.\n","Fixed price after scoping","Production-ready integration between software and the real world","Depends on scope","First we map systems, hardware, protocols and critical failure modes",5,"\u002Fcases\u002Fparkmybike-software-en-hardware",{"title":104,"intro":105,"points":106},"The integration does not stop at an API call","What makes ParkMyBike interesting is that errors do not stay abstract. If an integration is wrong, someone is standing in front of a locker that does not open. That is why reliability, retries, state management and observability are at the core of the product.\n",[107,110,113],{"title":108,"text":109},"Bluetooth with timeouts and retries","The mobile BLE flows have explicit timeouts for, among other things, scanning, connecting and commands. For recoverable errors, sessions can be rebuilt, while old callbacks must not disturb a new connection.\n",{"title":111,"text":112},"The physical action is part of the business flow","A successful open action can move a reservation from 'reserved' to 'rented' and start real-time updates. Hardware behaviour is therefore part of the product logic itself and not a separate technical integration.\n",{"title":114,"text":115},"Hardware is monitored operationally","IoT devices have, among others, online, offline and low-battery statuses. Hardware events are processed and actions are stored, so problems can be investigated and maintenance carried out in a targeted way.\n",{"buyerTriggerKeys":117,"useCaseKeys":119,"offerKeys":123,"solutionKey":124,"capabilityKeys":125},[118],"ai-laten-bouwen",[120,121,122],"ai-koppelen-aan-bestaande-systemen","tools-vervangen-door-maatwerkflow","ai-prototype-naar-productie",[94],"parkmybike",[126,127,128,129,130,131,132,133,134,135],"software-engineering","backend-engineering","mobile-development","integrations","iot","bluetooth","embedded-software","realtime-systems","production-engineering","monitoring",{"title":137,"items":138},"What does that deliver?",[139,142,145],{"title":140,"text":141},"The same software can work with different physical solutions","A provider does not always have to replace its entire hardware fleet to use ParkMyBike. By putting the hardware behind a clear integration layer, different lockers, controllers and access technologies can coexist within the same platform.\n",{"title":143,"text":144},"Hardware problems become manageable in software","Status, last-seen information, battery warnings, lock events and maintenance flows make visible what happens outdoors. This lets support determine much more precisely whether a problem lies in the account, reservation, app, network, controller or physical lock.\n",{"title":146,"text":147},"The system works at real locations","In 2025, ParkMyBike expanded with 23 locations and 122 new parking spaces, including in the United Kingdom and Belgium. In the same period, about 900 new users joined. So the technology does not just run in a lab, but in real bicycle parking infrastructure.\n",{"title":149,"description":150},"ParkMyBike: integrating software and hardware | 9to5 software","Case: how 9to5 software brings together mobile apps, backend, BLE, IoT, smart locks, payments and hardware integrations for ParkMyBike into one production-ready platform for smart bicycle parking.\n",{"title":152,"intro":153,"points":154},"Why is software + hardware hard?","In an ideal world, the app sends a command and a lock opens. In the real world there are Bluetooth permissions, poor connections, different controllers, batteries, external suppliers, timeouts, outdated status information and users literally standing in front of a closed door.\n",[155,158,161],{"title":156,"text":157},"Not every location uses the same hardware","ParkMyBike supports different types of locks, controllers and IoT setups. Some locks are controlled through a cloud connection, others directly via Bluetooth or an external access solution. The software has to absorb those differences without becoming a new product for every installation.\n",{"title":159,"text":160},"Digital status and physical reality can diverge","A backend thinking a command was sent successfully does not automatically mean a mechanical lock actually moved. That is why we record actions, hardware status, connections and lock events and handle errors explicitly throughout the chain.\n",{"title":162,"text":163},"Problems happen outdoors","Poor coverage, Bluetooth switched off, a flat battery, a wrong port configuration or a controller that does not respond: these are production problems you do not encounter in a tidy local development environment.\n","cases\u002Fparkmybike-software-en-hardware","ParkMyBike is a smart bicycle parking platform in which mobile apps, backend, dashboard, payments and physical locks form one product. A reservation only succeeds when the cyclist is actually standing in front of a locker and the right lock opens. So we did not only build the software, but also the integration layer to BLE controllers, IoT devices, external lock systems and hardware from different manufacturers.\n",{"title":167,"items":168},"Where is this relevant?",[169,172,175],{"title":170,"text":171},"Our software has to communicate with physical devices","An app or backend must not only process data, but also reliably operate a device, machine, sensor or access solution.\n",{"title":173,"text":174},"We have existing hardware that needs to be connected","The business logic must be able to work on top of suppliers' equipment without replacing the entire existing system.\n",{"title":176,"text":177},"A prototype works, but now it has to be reliable outdoors","The happy flow already works, but timeouts, poor connections, state differences, monitoring and maintenance make production much more complicated than the demo.\n",{"hero":179,"situation":180,"approach":181,"build":182,"proof":183,"teaser":184},"\u002Fmedia\u002Fproducts\u002Fparkmybike-hero.webm","\u002Fmedia\u002Fproducts\u002Fparkmybike-situation.webp","ls-system-connect","\u002Fmedia\u002Fscreenshots\u002Fparkmybike-build.webp","\u002Fmedia\u002Fscreenshots\u002Fparkmybike-controller.webp","\u002Fmedia\u002Fproducts\u002Fparkmybike-teaser.webm","tV5Ym6hwcucWR6m2dxoQbKtcWEs9rc-UrAo5RGNLokk",[187,269,350],{"id":188,"title":189,"body":190,"description":26,"desiredOutcome":194,"extension":53,"hero":206,"key":120,"meta":208,"navigation":90,"path":209,"problem":210,"proof":222,"recognition":234,"recommendedApproach":249,"relations":251,"seo":260,"stem":263,"summary":264,"visuals":265,"__hash__":268},"useCases_en\u002Fuse-cases\u002Fai-koppelen-aan-bestaande-systemen.md","We can't get the solution connected to existing systems",{"type":23,"value":191,"toc":192},[],{"title":26,"searchDepth":27,"depth":27,"links":193},[],{"intro":195,"items":196},"The AI shouldn't stay an isolated island. It should become a reliable part of the systems and processes that already exist.\n",[197,200,203],{"title":198,"text":199},"Reliable data exchange","Data arrives at the right moment, in the right format and at the right system.\n",{"title":201,"text":202},"Errors are manageable","Timeouts, duplicates and temporary outages don't immediately lead to unpredictable behaviour.\n",{"title":204,"text":205},"Permissions stay correct","The integration respects existing users, roles and access rules.\n",{"intro":207},"The AI demo works. It just still needs to fetch data from system A, change something in system B and respect permissions from system C. That is where an AI project often becomes a serious software engineering project.\n",{},"\u002Fuse-cases\u002Fai-koppelen-aan-bestaande-systemen",{"intro":211,"causes":212},"An integration is more than a line between two boxes in an architecture diagram. It also has to cope with real-world conditions.\n",[213,216,219],{"title":214,"text":215},"Systems speak different languages","Data models, statuses and responsibilities rarely map one-to-one.\n",{"title":217,"text":218},"External systems are not always available","Retries, queues and error handling become important as soon as the integration reaches production.\n",{"title":220,"text":221},"AI actions have real consequences","When an agent is allowed to change something, it must be clear who is responsible and what happens when something goes wrong.\n",{"intro":223,"points":224},"Building integrations is at the core of how 9to5 software works. AI only becomes useful when it can work safely with real data, software and people.\n",[225,228,231],{"title":226,"text":227},"Existing software is the starting point","The organisation doesn't have to adapt to the AI solution first.\n",{"title":229,"text":230},"Engineering around the API","We also design retries, error handling, logging and permissions.\n",{"title":232,"text":233},"No demo integrations","The integration has to stay usable under real conditions.\n",{"intro":235,"signals":236},"Often the AI part has already been proven and the real technical blocker lies in everything around it.\n",[237,240,243,246],{"title":238,"text":239},"The API doesn't quite do what you need","Documentation is limited or outdated, or the desired flow doesn't map neatly onto the available endpoints.\n",{"title":241,"text":242},"Authentication between systems gets stuck","Tokens, service accounts or user delegation make the integration more complicated.\n",{"title":244,"text":245},"Data drifts apart","Different systems use different identifiers, statuses or data models.\n",{"title":247,"text":248},"The happy flow works, errors don't","As soon as an external system is temporarily unavailable, the workflow loses track.\n",{"intro":250},"If the desired integration is clear, we tackle it directly in a Rescue Sprint. If the intake shows that a completely new integrated component is actually needed, Build & Integrate is a better fit.\n",{"buyerTriggerKeys":252,"primaryOfferKey":254,"offerKeys":255,"caseKeys":256,"relatedUseCaseKeys":257},[253],"vastgelopen-met-ai","rescue-sprint",[254,94],[],[258,259],"vast-op-auth-database-of-rechten","ai-project-overnemen-van-andere-leverancier",{"title":261,"description":262},"Connect ChatGPT or Claude to your software | 9to5 software","Connect ChatGPT, Claude or OpenAI to your software? 9to5 connects AI to existing APIs, databases and business processes.\n","use-cases\u002Fai-koppelen-aan-bestaande-systemen","The AI works on its own, but the real value sits behind APIs, databases and business software where the integration gets stuck.\n",{"hero":266,"problem":267,"proof":181},"sq-connect-nodes","sq-tangle-knot","4sCin98vwNyw5GXs3xalBs9ncmpDvENKXA0rH4xhya4",{"id":270,"title":271,"body":272,"description":26,"desiredOutcome":276,"extension":53,"hero":288,"key":121,"meta":290,"navigation":90,"path":291,"problem":292,"proof":304,"recognition":316,"recommendedApproach":331,"relations":333,"seo":341,"stem":344,"summary":345,"visuals":346,"__hash__":349},"useCases_en\u002Fuse-cases\u002Ftools-vervangen-door-maatwerkflow.md","Replace several existing tools with one smart custom workflow",{"type":23,"value":273,"toc":274},[],{"title":26,"searchDepth":27,"depth":27,"links":275},[],{"intro":277,"items":278},"You want to simplify the process without blindly rebuilding all existing systems.\n",[279,282,285],{"title":280,"text":281},"One clear workflow","Users no longer have to stitch different tools and intermediate steps together themselves.\n",{"title":283,"text":284},"Automation where it helps","Manual copying, checking and routing is removed as much as possible.\n",{"title":286,"text":287},"Keep what works well","Systems that add value can stay part of the new flow through integrations.\n",{"intro":289},"Sometimes the problem isn't too little software, but too much. Employees jump between tools, copy information and keep track of how it all fits together themselves. Then one targeted custom workflow can be simpler than yet another SaaS subscription.\n",{},"\u002Fuse-cases\u002Ftools-vervangen-door-maatwerkflow",{"intro":293,"causes":294},"Separate tools each optimise their own part of the process. As a result, the complexity often arises precisely between those tools.\n",[295,298,301],{"title":296,"text":297},"Integration is missing","Data and status have to be moved by hand from one system to another.\n",{"title":299,"text":300},"The process has adapted to the software","Employees follow extra steps because separate tools don't fit together well.\n",{"title":302,"text":303},"Otherwise AI becomes yet another tool","A standalone chatbot on top of the existing pile doesn't reduce fragmentation.\n",{"intro":305,"points":306},"We don't replace standard SaaS with custom software by default. Because we both build software and connect systems, we can choose per part what is technically and commercially wise.\n",[307,310,313],{"title":308,"text":309},"Build and integrate","A good existing system doesn't need to be rebuilt.\n",{"title":311,"text":312},"The process leads","The new flow is designed around how the work ideally runs.\n",{"title":314,"text":315},"AI only where it fits","Smart interpretation is combined with regular automation and integrations.\n",{"intro":317,"signals":318},"This question often arises after a process has been extended bit by bit with new tools over the years.\n",[319,322,325,328],{"title":320,"text":321},"Employees work in many systems for one task","The process keeps jumping between SaaS tools, spreadsheets, email and internal software.\n",{"title":323,"text":324},"Information is entered twice","The same data is kept or copied in several places.\n",{"title":326,"text":327},"Nobody has an overview of the whole flow","Each tool solves one part, but the employee manually keeps it all together.\n",{"title":329,"text":330},"Another new tool doesn't feel like the solution","The pile of software has by now become part of the problem itself.\n",{"intro":332},"With Build & Integrate we design and build the custom workflow around the actual process. We only replace what makes sense and connect the systems that are better kept. If scope and process are still not sharp enough, an AI Reality Check is the more logical first step.\n",{"buyerTriggerKeys":334,"primaryOfferKey":94,"offerKeys":335,"caseKeys":337,"relatedUseCaseKeys":338},[118],[94,336],"ai-reality-check",[],[339,340],"bedrijfsproces-automatiseren-met-ai","agentic-workflows-bestaande-software",{"title":342,"description":343},"Replace existing tools with a smart custom workflow | 9to5 software","Too many separate tools for one business process? 9to5 builds integrated custom workflows with automation, AI and connections to what should stay.\n","use-cases\u002Ftools-vervangen-door-maatwerkflow","The process has become fragmented across several tools, spreadsheets and manual handoffs. You want to bring it back to one coherent workflow.\n",{"hero":347,"problem":266,"proof":348},"sq-process-steps","ls-workflow-flow","mgSW-1h2BBXZlMWEViIVrX1-qaoPuBUr_YQ6D9XnX9A",{"id":351,"title":352,"body":353,"description":26,"desiredOutcome":357,"extension":53,"hero":369,"key":122,"meta":371,"navigation":90,"path":372,"problem":373,"proof":385,"recognition":397,"recommendedApproach":412,"relations":414,"seo":422,"stem":425,"summary":426,"visuals":427,"__hash__":431},"useCases_en\u002Fuse-cases\u002Fai-prototype-naar-productie.md","Our AI prototype has to go to production",{"type":23,"value":354,"toc":355},[],{"title":26,"searchDepth":27,"depth":27,"links":356},[],{"intro":358,"items":359},"You want to keep what the prototype has proven, but reduce the technical risks before the system is used seriously.\n",[360,363,366],{"title":361,"text":362},"Reliable under real conditions","The solution can deal with errors, unexpected input and external systems that don't always cooperate.\n",{"title":364,"text":365},"Measurable behaviour","You can track whether quality, latency, costs and error rates stay within acceptable limits.\n",{"title":367,"text":368},"Manageable in production","Deployment, logging, security and human oversight are part of the system instead of separate aftercare.\n",{"intro":370},"A demo may act strangely now and then, production software may not. As soon as an AI prototype touches real users, data and business processes, the requirements change. We help determine what still lies between a successful experiment and a reliable production solution.\n",{},"\u002Fuse-cases\u002Fai-prototype-naar-productie",{"intro":374,"causes":375},"A prototype is built to prove an assumption. Production software has to deal with uncertainty, errors and real users for a long time.\n",[376,379,382],{"title":377,"text":378},"Reliability was not yet a main goal","During an experiment, speed of learning is usually more important than complete error handling.\n",{"title":380,"text":381},"AI does not behave deterministically","Good behaviour has to be measured and bounded instead of only being judged during a demo.\n",{"title":383,"text":384},"The rest of the software now counts","Data, permissions, integrations, deployment and monitoring become just as important as the AI functionality itself.\n",{"intro":386,"points":387},"For us, taking AI to production is mainly software engineering around a non-deterministic component. That calls for regular production-grade principles and AI-specific evaluation.\n",[388,391,394],{"title":389,"text":390},"Beyond the demo","We look at errors, edge cases, integrations and operational behaviour.\n",{"title":392,"text":393},"Human-in-the-loop where needed","Not every risk is solved with more AI.\n",{"title":395,"text":396},"Built for handover","Architecture and choices are recorded so that your own team can continue afterwards.\n",{"intro":398,"signals":399},"The prototype does what it should, but you notice there is still a big gap between demonstrating and going live responsibly.\n",[400,403,406,409],{"title":401,"text":402},"The happy flow works","Demos go well, but edge cases and errors have hardly been worked out.\n",{"title":404,"text":405},"You don't know what good enough is","There are no clear quality thresholds, evals or acceptance criteria yet.\n",{"title":407,"text":408},"Production questions pile up","Security, monitoring, costs, retries, permissions and support suddenly become important.\n",{"title":410,"text":411},"The first real users are coming","You want to prevent them from discovering the technical weak spots for you.\n",{"intro":413},"With a Vibe Code Rescue Audit we first map what stands between the prototype and production. If the route is then large and clear, Build & Integrate can deliver the production version in a controlled way.\n",{"buyerTriggerKeys":415,"primaryOfferKey":416,"offerKeys":417,"caseKeys":418,"relatedUseCaseKeys":419},[253],"vibe-code-rescue-audit",[416,94],[],[420,421],"ai-experiment-heeft-echte-gebruikers","tests-evals-monitoring-voor-ai",{"title":423,"description":424},"Take an AI prototype to production | 9to5 software","From a working AI prototype to production-ready software. 9to5 helps with architecture, reliability, security, integrations, monitoring and deployment.\n","use-cases\u002Fai-prototype-naar-productie","The prototype proves the idea works. Now it has to become reliable, secure and manageable enough for real users and real business processes.\n",{"hero":428,"problem":429,"proof":430},"sq-foundation-build","sq-guardrails-check","ls-prototype-to-production","jSQ8HzLPrDfgmJ9vRmp8QviUxczEzNXGhTdx2Q7mSaU",1792049913512]