deskfuly

Build software around how your business actually works.

Shape your system on a board. Give it behavior in your own language.

Hail Roasters connects supplier, inventory, product and order records with visible properties. Jack moves a product and Emma moves an order. Emma opens Restock low inventory: a Moment sheet checks stock quantity and emails the linked supplier. She closes the sheet, and the collaborators return the cards for the loop.

Why Deskfuly

You shape the system.
We run the platform.

Your business is blocks on a canvas: the records, how they relate, and the Moments that make things happen. Underneath is a real system we keep running.

  • Your business as blocks on a canvas

    Put suppliers, inventory, products and orders on the map. Connect related records and keep the things they contain together, like the items in an order.

  • Moments that program the system

    Pin a Moment to a card—like Restock low inventory—and write what should happen. The rule stays with the record it belongs to, in words your whole team can read.

  • A real system underneath

    Give your team the right access, connect your other tools, and recover your data when you need to. We take care of keeping the system running.

    • Database

      Keep customers, orders and stock connected

    • APIs

      Generated for your systemREST · GraphQL · MCP

    • Hosting

      We keep your system running online

    • Permissions

      Choose who can view and change records

    • Backups

      Recover your data if something goes wrong

    • Audit log

      Every change recorded, with who and when

DeskScript

Program in your language.

Conditions, schedules and actions read like prose, and still have types, autocomplete and real control underneath.

Starting from an empty editor, the author types “when”, and a menu of triggers from connected apps opens; typing “canc” narrows it, and they pick Google Calendar’s “Event cancelled”. They type “for”, pick “for each”, name the item attendee and pick event › attendees from the event’s fields. Typing “send” offers email, Slack and WhatsApp; they pick Send Email, choose attendee › email as the recipient, and type the subject “{{event › title}} is cancelled today”, inserting the class’s title from the field menu. The body has a pen: clicking it opens a text editor under the line. They write “Hi {{attendee › first_name}}, we’re so sorry — today’s {{event › title}} is cancelled.”, inserting fields from the Insert menu and by typing @. From the same menu they add a conditional block: if attendee › pass is equal to Drop-in, “Your drop-in fee is on its way back to your card.”; else, “Your class credit is back in your account.” They sign off “See you on the mat!” and close the editor; the body shows its first words. On a new line, Shift-Tab takes them out of the loop, so the next step runs once per cancelled class, and “book” offers Google Calendar’s Book Meeting. They title it Make-up class, add Elliot from the studio’s people (his card shows Elliot Hayes, Instructor, and his email) and then event › attendees, set the room to Studio A, and click the calendar beside the time. A slot finder checks Elliot’s and Studio A’s calendars over the 7 days after the class; the attendees are invited without checking theirs. It skips Friday and picks the first time both are free: for last Thursday’s Vinyasa, Saturday 3 October, 10:00–11:00. Raising the length to 90 minutes runs into Elliot’s 11:00 class, so the pick moves to Sunday 4 October, 14:00–15:30. The time stays a rule, first free slot, so every cancelled class gets its own make-up.

Runs

See exactly what happened.

Every run replays on the automation you wrote. The values it saw, each check it passed or failed, the branch it took, all shown in place.

A wholesale check runs on order #2317 from Daniel Brooks. Down the left rail each line completes in turn. The customer's email daniel@lumacafe.com is defined but does not end with @partner.com, so that check is no; the order's second item, Ceramic mugs with quantity 24, is bigger than 10, so the any-item check and the whole condition are yes. Slack posts Review this bulk order to #wholesale in 180 ms and the else branch is not taken. The pointer then opens the ends with check to show why it was no, and steps the item switcher back to Paper filters, quantity 2, no match, and forward to Ceramic mugs again.

Built with an agent

Describe a scenario.
The agent builds it with you.

The agent works inside your system: it knows your cards, your rules and your connected apps. Describe what should happen and it writes the automation in front of you, in your language. Everything it builds you can read, and nothing runs until you say so.

On the Automations page the author types into the assistant's dock: Message me on WhatsApp when a Zid order is over 500 SAR. The assistant's column opens beside the window. It replies, finds the Zid trigger and the WhatsApp action, and writes the draft into the editor: when a Zid order is placed, if order › total is bigger than 500 SAR, send a WhatsApp message to the merchant's number with the customer's name, the total and the order link. It explains the draft and notes that nothing runs until it is turned on; the author accepts the draft. The author then asks: only for first-time customers, and email them a thank-you. The assistant reads the automation and proposes two changes in place: a new condition that also requires order › customer › orders_count to equal 1, shown above the old condition in red, and an added Send Email with the subject Thank you for your order. The author accepts the first change, then accepts all, and turns the automation on; it shows as Active.

Integrations

Your tools become building blocks.

The apps you already use show up inside DeskScript as typed triggers, data and actions. Adding a step to a flow is one sentence.

Gmail
Linear
Sheets
WhatsApp
Shopify
PayPal
Calendar
Slack
Stripe
Zid
Salla
Notion
Below a completed Salla order trigger, task searches type and erase in a loop: send, order, create, schedule, pay, and refund. The surrounding app badges light up as their tasks appear.

Durable by design

Built to keep going.

Transient failures retry on their own. Long waits pick up where they left off. Real problems stop with a reason you can act on.

  • Automatic retries are built in.
  • Waits resume without losing progress.
  • Permanent problems stop with a clear reason.
The same order run keeps its progress: Salla adds a Follow-up tag, a two-hour wait resumes, Gmail retries a temporary failure five minutes later, and Slack receives New order received. The left timeline advances as each step completes.

Early access

Build a system that
speaks your language.

Join the waitlist and be first in when Deskfuly opens.