---
slug: unlimited-dock
client: unlimited.dock
category: ['Product', 'Design', 'Development']
date: '2026 — Present'
services: ['Product', 'Design', 'Development']
technologies:
    - Laravel
    - Vue.js
    - Inertia.js
    - TypeScript
    - Tailwind CSS
    - shadcn-vue
    - MySQL
    - TipTap
    - dompdf
    - Resend
    - Slack API
    - MCP
    - XRechnung
    - Figma
title: 'Our Studio Operating System: From First Inquiry to Paid Invoice'
story_preview: 'unlimited.dock is the operating system we built for our own studio, from the first inquiry to the paid invoice. Claude works in it too, through an MCP server and a REST API.'
fineprint: 'Our own product, designed and built in-house and in use for our five-person studio every working day. Clients, projects, tasks, amounts and hours in the screenshots are placeholders.'
---

> **Case study source:** https://staging.unlimited.studio/en/case-study/unlimited-dock

# Our studio ran on subscriptions. Now it runs on software we built.

For years our studio ran on rented software. Productive.io held tasks, time and budgets, Zoho Books wrote the invoices, and spreadsheets kept track of hosting and servers. Every tool billed each month, none of them knew the others, and one client lived in four places. Linear had the interaction model we wanted, but no idea what an agency budget is. So we built unlimited.dock: one system shaped around how our studio works, from the first inquiry to the paid invoice.

## Replacing Productive.io Outright

This wasn't a side-by-side experiment, it was a full cutover. We wrote an import pipeline that migrated our complete history out of Productive's API: tasks, projects, time entries, budgets and comments, plus an archive export of 51 resource types and several gigabytes of attachments. Then the first subscription lapsed for good. Today the platform carries around 8,000 tasks, 20,000 tracked hours and budgets for more than 90 clients.

## The Tech Stack

A **Laravel** backend with a **Vue 3** frontend via **Inertia.js**, one codebase for the app. Next to it sit a **REST API** and an **MCP server** for agents. **Tailwind CSS** and **shadcn-vue** drive a fast, minimal UI, **TipTap** handles rich text with markdown as the storage format, and **MySQL** holds the data.

- **Testing:** Nearly 2,300 PHPUnit tests run on every change. Accounting logic is not a place for surprises
- **PDF Engine:** Quotes, invoices and billing reports render server-side via dompdf with the studio's letterhead and typefaces
- **Integrations:** Transactional mail through Resend, digests and warnings into Slack, the invoice archive in Google Drive, the server inventory synced from our hosting

## Tasks, the Linear Way

The task system borrows the interaction model that makes Linear feel effortless and applies it to agency work:

- **Status Rings & Peek Panel:** Scan states at a glance, open any task in a side panel without losing the list
- **One Search for Everything:** Cmd+K finds tasks, clients, inquiries, quotes and invoices, whatever the role may open. Numbers like US-R-2026-011 match exactly, filter chips narrow the types, and all results sit on a search page
- **Client-Scoped Identifiers:** Tasks are numbered per client, so a reference like a ticket number means something in a conversation
- **Real Structure:** Subtasks with blocking, recurring tasks, milestones, priorities and private tasks that clients never see

## Built for Keyboard Speed

C creates a task, Cmd+K finds anything, T starts the timer. Every list is filterable, every action has a shortcut, and the interface is tuned to a tool used dozens of times a day: latency is a feature. No marketing pages, no onboarding flows, no settings for hypothetical companies. Software for five specific people, which is exactly why it's fast.

## Time, Capacity & Availability

Every hour lands on a project, optionally on a task and a budget line:

- **Timers & Timesheets:** Start a timer from any task or fill the week in a grid built for speed
- **Team Availability:** Working days and weekly capacity per member, so planning shows what's actually free
- **Fair Rounding:** Billable time rounds in 30-minute steps once per budget line and period. The rounding mode is frozen when a budget is created, so past periods never shift retroactively

## Budgets & Billing

The accounting core mirrors what we used Productive for, minus everything we never touched:

- **Budget Lines & Retainers:** Fixed budgets and recurring retainer periods, with worked and billable hours tracked separately
- **Plan Against Actual:** Every position, section and total carries a bar with its plan mark, so an overrun shows long before the invoice
- **Pool Positions:** Several quote lines can be booked through one collective position, so a fixed price stays one number
- **Always Computed, Never Cached:** Burn, profit and capacity are calculated on read. No denormalized numbers that drift out of sync
- **Period Reports:** Billing-ready PDF and CSV reports per period, with a digest and budget warnings posted to Slack
- **Privacy by Design:** Cost rates and profit never leave the server for non-admin roles, enforced by tests

## From Inquiry to Project

Selling work and doing it live in the same tool:

- **Sales Pipeline:** Every inquiry from first contact to won or lost, as board or list, with owner, next step and due date. Tender deadlines sit on the card
- **Weekly Digest:** Due follow-ups land in one morning message per person, and on Mondays Slack gets the overview: what is due, what is overdue, what moved
- **Quote Editor:** Line items from a reusable article library, per-line tax rates, discounts and licensing calculated from four usage parameters
- **Public Quote Page:** Clients accept or decline on a tokenized page. No login, no PDF ping-pong, with view tracking that filters out mail-scanner bots
- **The Automated Part:** An accepted quote turns into a project with budgets created from its line items. The handover from sales to delivery is a single click

## Invoicing Without Zoho

Zoho Books wrote our invoices for years, on its own annual plan, while the Dock already knew every budget, every hour and every accepted quote. The invoice was the last document still written somewhere else. So the Dock writes it now too, and Zoho Books goes in November:

- **Drafts From What Exists:** An invoice starts from a client, a closed budget period or an accepted quote, including deposit, partial and final invoices
- **Numbers That Never Repeat:** Issuing assigns a gapless number and locks the document. Corrections go through a cancellation or a credit note, and irreversible steps only fire while you hold the button
- **Client Page:** Every invoice has a page for the client with the open amount and a GiroCode for the banking app, which the PDF carries too
- **XRechnung:** Every invoice ships as PDF in German or English and as XRechnung 3.0, checked against the official KoSIT validator
- **Early Payment Discount:** Skonto from the client file lands on the PDF, the client page, the XRechnung and in the GiroCode. The bank import knows the reduced amount, and revenue and VAT follow the payment
- **SEPA & Dunning:** The Dock fills out the direct debit mandate itself, as a one-page PDF form that goes out with the invoice to clients without one. A collection list per debit day, two automatic payment reminders and a formal notice after approval
- **Bank Matching:** The bank statement comes in as CSV. Payments with an invoice number or from a known payer book themselves
- **Recurring Profiles:** Hosting, licences and retainers run as profiles with a daily run, as a draft or sent straight away
- **Audit Trail:** Every change to finance and master data lands in an append-only log with who, when, old and new value, as GoBD asks for it

## The Client File

Every client on one page: revenue of the last twelve months against the twelve before, open and overdue items, the average days to payment, recurring invoices with their next run, the direct debit mandate, the dunning state and the hours of the past year. While you scroll, the header folds into a slim bar with anchors to each part.

## Numbers at a Glance

- **Dashboard:** One card with tabs for revenue, recurring share, billable ratio and hours, a range from one month to two years, the prior-year line and a CSV export
- **Revenue Since 2018:** KPI cards, a monthly chart with a time window and a treemap per client
- **Reports:** Nine finance reports, from receivables by age to revenue per client, VAT, payments and hosting, each as a PDF in the studio's look and as CSV. Saved reports file themselves in Drive and Slack on the first of the month, the year report on 1 January
- **Hours Heatmap:** Tracked hours per person and day over twelve weeks, right in the capacity view

## Claude Works in the Dock

The Dock has a second door, built for AI agents: a REST API and an MCP server with 29 tools. The same door serves Claude Code in the terminal, the Claude app on the phone and on the Mac, and jobs that run on a schedule.

- **On the Go:** After a client meeting, two sentences in the Claude app become a task with checklist, due date and the right project
- **In the Terminal:** Claude Code turns call notes into tasks, comments on them, works through the inbox, starts the timer and moves inquiries along the pipeline, without a browser tab
- **The Person's Rights, Never More:** Every token works for one person. Claude sees exactly what that person may see: no amounts for members, no private tasks of others
- **Every Change Signed:** Entries read "Claude (for Daniel)", and the Agents page lists every run with job, channel and each single write
- **One Code Path:** API and MCP tools run through the same services and validation as the web app. A task feature without its agent counterpart does not ship
- **Out of Reach on Purpose:** No deleting, no settings, no budgets, no credentials

The model gets its context from the same payloads the interface reads. Claude and the team look at the same data, and the history shows who did what.

## Hosting in View

Servers and sites used to live in a spreadsheet, kept by hand and out of date a week later. Now the Dock syncs them with our servers every hour, each site assigned to its client, each server with its monthly cost and the end of its system support. Every five minutes it checks each site itself: whether it answers, how fast, how long its certificate holds. An outage reaches the team within minutes, the incidents of the last 30 days stay on the page, and every site shows which version is live, in red if a deploy failed.

## A Cockpit Instead of Client Logins

Clients don't get accounts, a deliberate decision. They get a tokenized cockpit link per project: a roadmap grouped by topic, a capacity bar showing what's used and what's left, and a feature board where suggestions can be promoted into real tasks by the team.

## Deliberate Omissions

unlimited.dock has no resource planner, no multi-currency and no client logins, and a roadmap file lists every omission on purpose. Building less is what made it possible to replace several platforms at once. Productive.io is gone, Zoho Books follows, and the spreadsheets for hosting and servers go with it. Each of them was a recurring bill for software made for thousands of other companies. What is left does everything our studio needs, and nothing anyone else's does. We build the same for companies whose work is spread across five tools: one system that fits the process, instead of five subscriptions that each fit a little.
