Molochou
← All work

Pipeq

Task manager for small teams. A PWA designed and built solo, offline-first.

SaaSDesign & engineering2026pipeq.appCase study

The kanban board a team actually uses. A board with opinionated defaults, no configuration before first use and no seat pricing: create it, invite the team by link or QR, start moving cards.

Year
2026
Role
Everything: design, front-end, API, database, infrastructure
Stack
Next.js 15 · Bun + Hono · PostgreSQL · Docker
Status
Shipped, ~280 commits

Theproblem

Team trackers grow into CRMs. A team that wanted a board to move cards across ends up configuring workflows, custom fields and automation rules, and pays per seat for the privilege. The tool becomes a second job.

WhatIdid

01

Board and card, side by side

The signature desktop move: opening a card slides in a panel instead of covering the board. Owner, deadline, members, progress, checklist, tags and the whole comment thread, without losing sight of where the card sits.

02

Two layouts, one product

Mobile and desktop are not the same screen at different widths. The phone gets a bottom tab bar, pill column tabs with swipe and a floating action button, all reachable one-handed. The desktop gets a persistent rail and a side panel. Two component trees, two navigation models, chosen at the breakpoint, not one layout squeezed through media queries.

03

One toggle turns the board into a list

The same cards as a dense sortable list: status changes inline, a checkbox completes a card in place. For the days when you want to read the work rather than look at it.

04

The month, and what it is shaped like

Deadlines laid over a month grid, overdue in red. The view that answers “what does this week look like?” before anyone has to ask in chat.

05

Search that crosses teams but never tenants

A keyboard-first overlay that searches this board or every team you belong to and jumps straight to the card. Debounced, with a sequence guard so a slow early response cannot overwrite a newer one.

06

Many teams, one you

Belong to as many teams as you need and switch instantly. Each team paints the accent its own colour at runtime, invites go out as a QR or a link, and ownership transfers automatically when someone leaves, so there are no orphaned teams.

A hamster who earns his suit as you scroll
07

A hamster who earns his suit as you scroll

The landing had one job: explain the product without a single stock illustration. So the mascot does the explaining: he rides a pixel pipe down the page, free-falling between stations and landing with a squash. Five stations, five sprites, and the order is the argument: he starts with nothing and ends fully equipped. Scroll back up and he undresses.

Takehimforaride

The landing mechanic, rebuilt here and running. Scroll on.

Station 01 / 5Just a hamsterScroll back up and he undresses

Underthehood

Authorization lives in Postgres

Every table is scoped by workspace and isolation is enforced by row-level security, not by remembering a where clause. A dedicated database role, a reserved connection per request so tenant context cannot leak through the pool, and a boot self-test that verifies the policies deny cross-tenant reads before the process serves traffic.

Writes are ordered, not retried

Two quick moves of the same card could land out of order and leave the board wrong. The fix was serializing the writes. A retry would have hidden the race instead of removing it.

Deploy is one button

GitHub Actions rsyncs the repo and writes credentials from Secrets. Infrastructure secrets are generated at provisioning and never touched by a deploy. Editing keys on the server is not a workflow, because the next deploy overwrites them.

The landing is middleware, not a second site

Logged-out visitors get a static landing chosen by device; a live session falls straight through to the app. One deploy, one domain, and marketing that cannot drift out of sync with the product.

Outcome

One personBuilt by
~280Commits
NoneSeat pricing
Next projectKollabaPlatform