[{"data":1,"prerenderedAt":236},["ShallowReactive",2],{"work-en-ph-portaal":3,"work-order-en":145},{"id":4,"title":5,"body":6,"categories":88,"client":90,"coverLabel":91,"description":92,"extension":93,"featured":94,"highlights":95,"integrations":105,"meta":108,"navigation":94,"order":77,"outcome":109,"path":110,"problem":111,"role":112,"screens":113,"seo":130,"stack":131,"status":138,"stem":139,"summary":140,"type":141,"url":142,"video":142,"year":143,"__hash__":144},"work\u002Fen\u002Fwork\u002Fph-portaal.md","P.H. Portaal",{"type":7,"value":8,"toc":75},"minimark",[9,14,18,22,25,30,35,38,43,46,50,53,57,61,65,68,72],[10,11,13],"h2",{"id":12},"the-challenge","The challenge",[15,16,17],"p",{},"P.H. Schoonmaak is a Dutch cleaning company with crews working at client locations across the region. Their administration had grown the way it does at most growing companies. Hours were clocked in a separate paid app and copied into an Excel sheet by hand every month for the payroll office. Jobs and work orders lived on paper or in loose messages, and office to-dos travelled by e-mail and WhatsApp. Every hand-off between the office and the field was a chance for hours, details or invoices to slip through the cracks.",[10,19,21],{"id":20},"what-we-built","What we built",[15,23,24],{},"Not one app, but two portals on one system, in the company's own house style. The office works in a backoffice dashboard on a laptop, and field staff use an employee hub on their phone, installed like any other app. Everyone logs in at the same address and lands in the right portal automatically, based on their role.",[26,27],"portal-split",{":portals":28,"link":29},"[{\"icon\":\"i-lucide-layout-dashboard\",\"name\":\"Backoffice dashboard\",\"audience\":\"For the office and management, on a laptop\",\"text\":\"Where work is prepared, followed and finished. The overview shows per part of the business what needs attention today.\",\"items\":[\"Jobs prepared for an employee, with client, address, what to do, a planned time and the client's PO number\",\"Work orders to check, mark as PO requested or invoiced, and download as a branded PDF\",\"Kanban task boards per department or project\",\"Hours, corrections, leave, holidays and the monthly payroll report\",\"Employees, clients and roles with 14 permissions, managed by the owner\"]},{\"icon\":\"i-lucide-smartphone\",\"name\":\"Employee hub\",\"audience\":\"For field staff, on their phone\",\"text\":\"Everything an employee needs on site, one tap away, in an app that installs on the home screen.\",\"items\":[\"Clock in and out, checked against the client's location where the role requires it\",\"Jobs waiting for you, with directions to the address\",\"Work orders with hours, photos, materials and the client's signature\",\"Your own work orders and hours per day and week, with correction requests\",\"Manuals for the work, readable and downloadable on the spot\"]}]","One system: what the office prepares shows up in the hub, and what employees submit lands in the backoffice.",[31,32,34],"h3",{"id":33},"how-a-job-moves-between-the-two-portals","How a job moves between the two portals",[15,36,37],{},"The heart of the system is the hand-off between the office and the field. A job never travels by e-mail or WhatsApp again.",[39,40],"flow-steps",{":lanes":41,":steps":42},"[{\"name\":\"Backoffice\",\"icon\":\"i-lucide-layout-dashboard\"},{\"name\":\"Employee hub\",\"icon\":\"i-lucide-smartphone\"}]","[{\"lane\":0,\"title\":\"The office prepares a job\",\"text\":\"A new job with the client, address, contact person, what needs doing, a planned time and, when the client works with them, a PO number. It is assigned to one employee.\"},{\"lane\":1,\"title\":\"The employee sees it waiting\",\"text\":\"The job appears in their hub, with a counter on the home screen. One tap shows the address with directions, the contact person and the planned time.\"},{\"lane\":1,\"title\":\"They take it on and do the work\",\"text\":\"Complete job opens a work order that is already filled in with everything the office entered. The employee adds hours per person, photos, materials and, when the client wants it, a signature on screen.\"},{\"lane\":1,\"title\":\"The work order is submitted\",\"text\":\"Drafts save as they type. On submit, the job is marked completed by itself and the work order lands in the backoffice.\"},{\"lane\":0,\"title\":\"The office finishes it\",\"text\":\"The office checks the hours, marks the work order as PO requested while it waits for the client's PO, then as invoiced with the invoice number, and downloads a branded PDF for the client.\"}]",[15,44,45],{},"Statuses keep both sides in step. The office always sees which jobs are still to do, in draft or completed, and which work orders are waiting to be processed, for a PO or for an invoice.",[31,47,49],{"id":48},"task-boards-per-department","Task boards per department",[15,51,52],{},"Office work that used to travel by e-mail and WhatsApp now sits on kanban boards, one for every department or project. Tasks move from To do to In progress to Done by dragging. Each card can carry a priority with a coloured stripe for anything urgent, a countdown to its deadline, checklists, photos and a link to the client. Anyone can pick a task up with one tap, so it is always clear who is on it, and a private column holds notes from a meeting until they are ready to share.",[31,54,56],{"id":55},"hours-and-payroll-without-spreadsheets","Hours and payroll without spreadsheets",[58,59],"feature-grid",{":items":60},"[{\"icon\":\"i-lucide-map-pin\",\"title\":\"Clocking in at the client's site\",\"text\":\"Employees clock in and out on their phone. Depending on their role, the app checks they are really at the client's location, and only at that moment, never in between.\"},{\"icon\":\"i-lucide-coffee\",\"title\":\"Breaks and long shifts handled\",\"text\":\"Breaks are deducted automatically by a rule the company sets to match its collective labour agreement, and a forgotten clock-out is closed and flagged after 14 hours.\"},{\"icon\":\"i-lucide-history\",\"title\":\"Corrections with a record\",\"text\":\"Employees request a correction with a reason, the office handles it, and every manual change records who made it and why.\"},{\"icon\":\"i-lucide-file-spreadsheet\",\"title\":\"Payroll in one click\",\"text\":\"Contract hours, public holidays, leave, sick days, breaks and overtime turn into a monthly report for the payroll office. Rules are kept per month, so a report that has been sent never changes.\"}]",[31,62,64],{"id":63},"built-for-the-whole-team","Built for the whole team",[15,66,67],{},"Around those modules sit the things a team needs every day: manuals written in the portal itself with a PDF download per guide, a client list where every address is located automatically through PDOK, the Dutch government's public address service, and roles the owner manages without calling a developer. When someone is deactivated, they are logged out everywhere at once. The whole portal is multilingual, so every employee can use it in the language they read best.",[10,69,71],{"id":70},"the-result","The result",[15,73,74],{},"The first version went live on the company's own domain within days. Three weeks later the backoffice and the employee hub covered jobs, work orders, task boards, clocking in, payroll and manuals, replacing a paid clock-in app, a monthly spreadsheet routine and a stream of loose messages. SolwareX keeps developing it as the company grows, and that is the kind of software we like to build most: made for one business, with a portal for every part of the team, and used every working day.",{"title":76,"searchDepth":77,"depth":77,"links":78},"",2,[79,80,87],{"id":12,"depth":77,"text":13},{"id":20,"depth":77,"text":21,"children":81},[82,84,85,86],{"id":33,"depth":83,"text":34},3,{"id":48,"depth":83,"text":49},{"id":55,"depth":83,"text":56},{"id":63,"depth":83,"text":64},{"id":70,"depth":77,"text":71},[89],"web-applications","P.H. Schoonmaak","Backoffice","A backoffice dashboard and an employee hub for a Dutch cleaning company, one system behind one login. The office prepares jobs and finishes work orders, employees clock in, take on jobs and submit work orders from their phone.","md",true,[96,99,102],{"value":97,"label":98},"2","portals behind one login",{"value":100,"label":101},"3 weeks","from first version to the full system",{"value":103,"label":104},"1 click","to a payroll-ready monthly report",[106,107],"PDOK","Resend",{},"Live on the company's own domain within days of the first version. Three weeks later the backoffice and the employee hub ran jobs, work orders, task boards, hours and payroll in one place.","\u002Fen\u002Fwork\u002Fph-portaal","Hours were clocked in a separate app and copied into Excel by hand every month, while jobs, work orders and office tasks were spread over paper, e-mail and WhatsApp.","SolwareX: design, build, launch and ongoing development",[114,118,122,126],{"src":115,"alt":116,"label":117},"\u002Fimg\u002Fcases\u002Fscreens\u002Fph-portaal-hub","The employee hub on a phone: clocked in at a client, a job with directions and a work order in draft","Employee hub",{"src":119,"alt":120,"label":121},"\u002Fimg\u002Fcases\u002Fscreens\u002Fph-portaal-tasks","A kanban task board for the office, with priorities, deadlines and checklists","Task boards",{"src":123,"alt":124,"label":125},"\u002Fimg\u002Fcases\u002Fscreens\u002Fph-portaal-workorder","A submitted work order in the backoffice, with its status, PO number and the job it belongs to","Work order",{"src":127,"alt":128,"label":129},"\u002Fimg\u002Fcases\u002Fscreens\u002Fph-portaal-hours","The hours overview: who is clocked in now, the company rules and every clocked session","Hours",{"title":5,"description":92},[132,133,134,135,136,137],"Nuxt","Nuxt UI","TypeScript","Supabase","PWA","Vercel","live","en\u002Fwork\u002Fph-portaal","Backoffice dashboard + employee hub for a cleaning company","Web Application",null,"2026","ywscmbmXKG1iNITrjTQjPVh5hbUUMXJWJ3qgfGEVSVI",[146,151,152,156,161,166,172,178,185,191,197,202,208,214,220,226,231],{"stem":147,"title":148,"summary":149,"type":141,"year":143,"order":150},"en\u002Fwork\u002Fpostrooster","Postrooster","AI content and automated publishing to 13 social networks",1,{"stem":139,"title":5,"summary":140,"type":141,"year":143,"order":77},{"stem":153,"title":154,"summary":155,"type":141,"year":143,"order":83},"en\u002Fwork\u002Fhyblance","Hyblance","Hybrid work planning for growing companies",{"stem":157,"title":158,"summary":159,"type":141,"year":143,"order":160},"en\u002Fwork\u002Fmychar","MyChar","The link-in-bio page you design live",4,{"stem":162,"title":163,"summary":164,"type":141,"year":143,"order":165},"en\u002Fwork\u002Fvoiceme","voiceme","Voice chat rooms that start with one link",5,{"stem":167,"title":168,"summary":169,"type":141,"year":170,"order":171},"en\u002Fwork\u002Fgetgiven","GetGiven","Giveaways with draws anyone can verify","2024",6,{"stem":173,"title":174,"summary":175,"type":141,"year":176,"order":177},"en\u002Fwork\u002Fachmea","Achmea Bank","Six weeks of work brought back to one day","2025",7,{"stem":179,"title":180,"summary":181,"type":182,"year":183,"order":184},"en\u002Fwork\u002Frxscripts","RX Scripts","150+ FiveM Scripts and the store that sells them","FiveM Scripts & Webstore","2023",8,{"stem":186,"title":187,"summary":188,"type":189,"year":143,"order":190},"en\u002Fwork\u002Fonestudios","One Studios","Premium store with the docs built right in","Webstore",9,{"stem":192,"title":193,"summary":194,"type":195,"year":176,"order":196},"en\u002Fwork\u002Frxscripts-docs","RX Scripts Docs","Answers before customers have to ask","Documentation Site",10,{"stem":198,"title":199,"summary":200,"type":195,"year":143,"order":201},"en\u002Fwork\u002Fonestudios-docs","One Studios Docs","Docs and changelog, built into the store",11,{"stem":203,"title":204,"summary":205,"type":206,"year":143,"order":207},"en\u002Fwork\u002Fone-inventory","One Inventory","The FiveM inventory you set up in-game","FiveM Script",12,{"stem":209,"title":210,"summary":211,"type":212,"year":183,"order":213},"en\u002Fwork\u002Ffmlib","fmLib","Free toolkit: one script, every FiveM framework","Open Source Library",13,{"stem":215,"title":216,"summary":217,"type":218,"year":142,"order":219},"en\u002Fwork\u002Ffiverr","Fiverr (rejoxdev)","Where it started: freelance FiveM work","Freelance",14,{"stem":221,"title":222,"summary":223,"type":224,"year":170,"order":225},"en\u002Fwork\u002Frxscripts-bot","RX Scripts Discord Bot","Sales and support for a 10,000+ member community","Discord Bot",15,{"stem":227,"title":228,"summary":229,"type":224,"year":143,"order":230},"en\u002Fwork\u002Fonestudios-bot","One Studios Discord Bot","AI support that answers from the docs",16,{"stem":232,"title":233,"summary":234,"type":224,"year":143,"order":235},"en\u002Fwork\u002Fmychar-bot","MyChar Discord Bot","A product community that runs itself",17,1791484339437]