DEV Community

Cover image for I Built an Offline-First Productivity App for Freelancers and Solo Developers
Manthan Bhatt
Manthan Bhatt

Posted on

I Built an Offline-First Productivity App for Freelancers and Solo Developers

Essential Dashboard

A lot of productivity tools look great in demos, but once real work starts, they begin to feel fragmented.

One app for tasks. Another for reminders. Another for invoices. Notes somewhere else. Passwords in a separate tool. And if your connection drops, half your workflow becomes unreliable.

I wanted something simpler.

So I built Essentials: an offline-first productivity app for freelancers, solo developers, and small teams who want one place to manage the day-to-day side of work.

Why I built it

The original idea was practical, not ambitious.

I wanted a workspace where I could:

  • manage clients and projects
  • track tasks and reminders
  • keep notes close to the work
  • log time and create invoices
  • store important credentials securely
  • keep using the app even when the network is unstable

Most tools I tried solved one part of the problem well, but not the whole flow.

I didn’t want a collection of disconnected tools. I wanted something that felt more like a personal operating system for client work.

What the app does

Essentials brings together a few core workflows in one app:

  • clients and project management
  • task tracking
  • notes and reminders
  • time entries and invoices
  • counters for simple repeated tracking
  • an AI assistant for workspace actions
  • a built-in password manager

It’s built with Ionic + Angular + Capacitor, so it works across web, Android, and iOS.

The part I cared about most: offline-first

This was one of the biggest reasons for building it.

A lot of tools assume you are always online. Real life doesn’t work like that.

Essentials writes data locally first, then syncs it later. That means the app still feels usable even when the connection is slow, unstable, or completely gone.

That local-first approach changed a lot of design decisions in the app. It affected storage, sync behavior, conflict handling, and even how I thought about the UI.

Security features I added

As the app grew, I started treating it less like a simple productivity project and more like something that could actually hold sensitive day-to-day data.

So I added a few protections:

  • 2FA for email/password login
  • App lock
    • 4-digit PIN on web
    • biometrics / face / device passcode on mobile
  • Password vault
    • passwords hidden by default
    • reveal/copy requires extra verification
  • Clipboard protection
    • copied passwords show a countdown
    • after 20 seconds, the clipboard is overwritten if it still contains that password

That last part may sound small, but I wanted the password manager to feel intentional rather than just “a text field that stores secrets.”

Notifications and real daily use

I also added local notifications for reminders and overdue work.

One feature I like a lot is the overdue digest at the start of the day. Instead of relying on memory or reopening every screen, the app can surface what is already late and needs attention.

That makes it feel less like a static database and more like an active workspace.

What I learned building it

A few things became clear while building this:

1. “Simple” apps stop being simple fast

Once you combine auth, sync, offline storage, notifications, and security, the complexity climbs quickly. Even small UX decisions start touching multiple layers.

2. Offline-first changes your architecture

You can’t just treat local storage as a cache. It becomes the primary working layer, and everything else has to support that.

3. Security UX matters

If security feels annoying, people avoid it. I spent time trying to make it feel natural: PIN pad on web, biometrics on mobile, hidden passwords by default, and short clipboard lifetimes.

What’s next

There’s still a lot I want to improve:

  • deeper native polish
  • stronger testing
  • better conflict handling in a few areas
  • possibly end-to-end encryption for the password vault

Right now, the password manager is protected by auth, row-level security, app lock, and gated reveal/copy behavior, but it is not zero-knowledge encrypted yet. That is one of the next major improvements I want to explore.

Final thought

I built Essentials because I wanted one tool that matched how real work actually happens: messy, mobile, sometimes offline, and spread across too many responsibilities.

I’m still improving it, but it already feels much closer to the kind of app I actually want to use every day.

If you’ve built anything similar, especially around offline-first architecture or security-heavy UX, I’d love to hear how you approached it.

This project is also open source if you want to explore the code, follow along, or contribute: github.com/ManthanBhatt/all-in-one

Top comments (0)