Software studio
Synergy at its zenith.
Websites, web tools, business systems and apps, designed and engineered by one team.
Most products are built by five teams that never meet. Design hands off to engineering, engineering hands off to operations, and something gets lost every time. We are one team, from the first pixel to the last packet.
What we build
From a single website to a company-wide system.
Start with what you need now and grow into the rest.
-
Websites
Fast, accessible company sites that load instantly, rank well and turn visitors into enquiries.
Next.jsReactSEO
-
Web apps and tools
Customer portals, dashboards, booking and quoting tools: software people use every day in the browser.
ReactTypeScriptPostgres
-
Business systems
CRMs, job tracking, inventory and workflow tools shaped around how your business runs. We launch a focused first version, then grow it in phases.
SupabaseAuthReporting
-
Mobile apps
iPhone and Android apps for when your product needs to live in a pocket, sharing one backend with the web.
React NativeExpoSwift
-
APIs and integrations
Connecting the tools you already pay for, from payments to accounting, with documented APIs and webhooks.
RESTWebhooksStripe
-
Cloud and hosting
Hosting, deployment and monitoring close to every user, with a live preview of every change before it ships.
CloudflareCIMonitoring
Engineering
Code you'd be proud to inherit.
Typed end to end, tested before it merges, and documented so your team can take over on any day of the week.
- Types
- Strict TypeScript from the database to the browser.
- Review
- Automated tests and CI on every pull request.
- Infra
- Environments defined in code and reproducible from scratch.
- Handover
- Documented repositories, built from day one to be handed over.
export function LeadBoard({ leads }: { leads: Lead[] }) {
const byStage = groupBy(leads, (lead) => lead.stage);
return (
<Board>
{PIPELINE.map((stage) => (
<Column key={stage} title={stage}>
{byStage[stage]?.map((lead) => (
<LeadCard key={lead.id} lead={lead} />
))}
</Column>
))}
</Board>
);
}
export default {
async fetch(req: Request, env: Env) {
const { project } = await req.json<Deploy>();
const id = await env.QUEUE.send({ project });
return Response.json(
{ id, status: "queued" },
{ status: 202 }
);
},
} satisfies ExportedHandler<Env>;
create policy "staff see their company's leads"
on leads for select
using (
exists (
select 1 from staff s
where s.company_id = leads.company_id
and s.user_id = auth.uid()
)
);
Process
From idea to production.
-
01
Discover
We map the problem, the people and the constraints, then agree on a focused first phase and a plan for growing it.
Scope, architecture, milestones
-
02
Design
Interactive prototypes in days, not weeks. You hold it in your hand before a line of production code exists.
Prototype, design system, test plan
-
03
Build
Weekly releases to a live preview. You watch progress in the product itself, not in a status report.
Weekly releases, preview links, CI
-
04
Ship
Launch to your customers or your team, then monitor, measure and grow it in phases alongside you.
Launch, monitoring, iteration
The stack behind everything we ship
- TypeScript
- React
- Next.js
- Node.js
- Tailwind CSS
- Supabase
- PostgreSQL
- Cloudflare
- Stripe
- Expo
- Swift
- Figma
- GitHub
Start a project
Let's build something exceptional.
Tell us what you're building. We read every brief and reply by email.