mulungood

We build delightful local-first creativity & productivity apps

Nurturing your idea from design to production

How we help

Design

Intuitive, engaging flows & interfaces tailored to fit your unique vision and business goals

Design Sprints
UI & design systems

Develop

Transform your designs into dynamic, carefully coded local-first web, mobile and desktop apps

React (web & Native)
Svelte
Supabase & Postgres
Tauri

Iterate

We'll be at your side to nurture and evolve your application as your business and community of users grows.

Get in touch
hello@mulungood.com

local-first at a glance

The software architecture to build robust apps that puts people first

meet local-first

Fast & offline-ready

Interactions are seamless even in spotty connections or offline

Cheap & reliable

Simpler programming model and cheaper infrastructure

Collaborative in real-time

Empowers multiple users to work seamlessly together

Private & user-owned

Users own the data, which can be end-to-end encrypted

Select products

Apps we made to scratch our itch & advance our craft

Tapi

Model content visually inside of Figma together with your whole team, no dev required

Built with

React
Tapi's screenshot

Gororobas

Share recipes and notes on playful experiments in the kitchen

Built with

Svelte
Supabase & Postgres
Gororobas's screenshot

NameRecorder.com

Record and share your name as you pronounce it

Built with

Svelte
Supabase & Postgres
NameRecorder.com's screenshot

writer's toolbox

Take challenges, discover grant programs and monitor your applications on the path to becoming a screenwriter

Built with

Svelte
Supabase & Postgres
writer's toolbox's screenshot
Get in touch
hello@mulungood.com

Writing

Composing queries in EdgeDB (with EdgeQL-JS)

Beautifully re-use and compose queries to adapt to each individual data fetching needs with EdgeDB through its EdgeQL Typescript query builder - with full type safety according to your up-to-date schema.

Setting Row-Level-Security (RLS) with Functions on Supabase

How to use Postgres functions to improve the writing and maintenance of Row-Level-Security (RLS) in Supabase.

Fetching all rows from a Supabase table with pagination

Quick introduction to paginating queries with Supabase, with a handy Typescript function for fetching all results matching a filter, regardless of the default limit - all fully typed

Powering a blog with Notion through JSON files & NextJS

How to use Notion to power a NextJS blog, the benefits of using this approach, and why we chose it over another CMS.

Runtime type safety in Next 13 routes with zod (lightweight tRPC?)

Leverage zod for building practical, robust, and type-safe API endpoints in NextJS, with 0 validation code. Also applies to other frameworks like Remix, Nuxt & SvelteKit.

Using variables conditionally in Supabase’s transactional e-mails

Learn how to provide default values and use if statements in your email templates. Explore the power of Go's `html/template`.

Protecting routes with Expo 49

How to implement authentication and authorization logic, and organize your app's pages for an optimal user experience.

Elliptic Curve encryption within Expo workflow for local-first apps

Challenges and solutions to using third-party encryption modules with Expo, and our step-by-step instructions on how to get it done.

Persisting tinybase stores into expo-sqlite database

How to persist TinyBase store data into an SQLite database in an Expo SDK 49 project through a custom persister

Creating an UI to add Unsplash images to tldraw

How to connect to Unsplash's API, search photos, and drag them into tldraw with a custom UI.

Calm technology for users and businesses

Mulungu is a tree native to South America, of which bark is used to make a calming tea. Like it, our service and technology is aimed at helping you sleep better.

A mulungu flower