See how equipment requests, onboarding tasks, expense approvals and maintenance reports can become software shaped around your company's rules—and keep evolving as those rules change.
Illustrative applications you can build and adapt with Soda OS.
01 / Operations
View CanLangBack to app↻
EquipmentRequests.canExcerpt
Approval and recorded delivery
WhencrudEquipmentby=coordinatorfields=name,category,activedelete=nonecrudRequestby=membersfields=equipment,reasonwhen=row.requested_by==actor androw.status==requesteddelete=none# Review another teammate's request against the equipment catalogue.scenarioapprove(request:Request)by=reviewerrequirerequest.status==requested andrequest.requested_by!=actorrequirerequest.equipment.activedosetrequest{status=approved,approved_by=actor,approved_at=now}# Record the physical asset when approved equipment reaches the requester.scenariodeliver(request:Request,asset_tag:text)by=coordinatorrequirerequest.status==approved andtrim(asset_tag)!=""dosetrequest{status=delivered,asset_tag=trim(asset_tag),delivered_at=now}
Equipment · App preview
Equipment
ALAlexReviewer
EQ-1042 · Avery
Standing desk
Approved
✓Alex approved14 Oct · details locked
Asset tag · 15 OctDESK-001
Delivered
Illustrative application interface · sample records.
A reviewer can approve another person's request; self-approval is refused.
Equipment requests
Keep catalogue selection, requests, separate approval and recorded delivery connected.
Then the business changes
Add a separate Finance approval above an illustrative €1,000 threshold.
WhencrudStarterby=hrfields=name,employee,start_date,departmentdelete=nonecrudTaskby=hrfields=starter,title,responsible,due_datewhen=notrow.donedelete=none# The teammate responsible for a task records its completion.scenariocomplete(task:Task,note:text?)by=membersrequiretask.responsible==actor andnottask.donedosettask{done=true,completed_at=now,completion_note=note}# HR can hand unfinished work to another teammate.scenarioreassign(task:Task,responsible:user)by=hrrequirenottask.donedosettask{responsible}
Onboarding · App preview
Onboarding
JOJordanHR
S
Sam
Operations · Starts 8 Mar
1 / 3complete
Prepare equipmentAlex · 5 Mar · Unfinished
✓
Read safety handbookSam · 8 Mar · Completed
Welcome sessionTeam lead · 18 Mar · Unfinished
Illustrative application interface · sample records.
Only the current assignee completes their unfinished task.
Employee onboarding
Make each joining task's owner, deadline and completion visible.
Then the business changes
Align unfinished relative deadlines with the start date, protecting fixed dates and completed work.
WhencrudCostCentreby=financefields=code,name,activedelete=nonecrudExpenseby=membersfields=purpose,amount,cost_centreupdate=nonedelete=none# A reviewer approves someone else's positive expense claim.scenarioapprove(expense:Expense,note:text?)by=reviewerrequireexpense.status==submitted andexpense.submitted_by!=actorrequireexpense.cost_centre.activedosetexpense{status=approved,decision_note=note,approved_by=actor,approved_at=now}# Finance records a payment only after the claim is approved.scenariorecord_payment(expense:Expense,reference:text)by=financerequireexpense.status==approved andtrim(reference)!=""dosetexpense{status=paid,payment_reference=trim(reference),paid_at=now}
Expenses · App preview
Expenses
ALAlexReviewer
EXP-0085 · Sam
Client travel
€85
Cost centre
CLIENT
Review
Alex · Approved
External payment ref.TRAVEL-001
Paid
Payment recorded only; no money transferred.
Illustrative application interface · sample records.
Approval belongs to a separate reviewer; submitted claim details stay protected.
Expense approvals
Give submitted expenses a clear review decision and record of external payment.
Then the business changes
Return a mistaken claim with a reason and review one linked replacement while retaining the original.
WhencrudLocationby=technicianfields=name,building,floordelete=nonecrudTicketby=membersfields=location,issue,priorityupdate=nonedelete=none# Append a visit or diagnostic note while a ticket is open.scenariorecord_work(ticket:Ticket,note:text)by=technicianrequireticket.status==open andtrim(note)!=""docreateWorkNote{parent=ticket,note=trim(note)}aswork_note# Resolve the issue with a description of the repair.scenarioresolve(ticket:Ticket,resolution:text)by=technicianrequireticket.status==open andtrim(resolution)!=""dosetticket{status=resolved,resolution=trim(resolution),resolved_by=actor,resolved_at=now}
Maintenance · App preview
Maintenance
JOJordanTechnician
MT-042 · Sam · 6 MarOpen
Air conditioning is not cooling
Jordan · Work note
Supply air is warm. Checking cooling controls.
Illustrative application interface · sample records.
Employees see their own reports; technicians can read the maintenance queue.
Maintenance tickets
Turn reported issues into a queue technicians can investigate and resolve.
Then the business changes
Link a new occurrence to an earlier resolved ticket at the same location, preserving both histories and access.
Follow the people, rules and decisions behind a workflow. See what a useful first version does, how the factory develops a reviewed change, and how the same Project supports the next request.
01Agree the workPeople, records and rules
02Develop and reviewAn exact candidate, checked against the request
03Keep it fittingThe next rule, with existing work protected