Статья

Я создал TinyDebt: простой трекер долгов без backend

Разбор технических решений TinyDebt: локальное хранение данных, отсутствие backend и спокойный интерфейс, который не мешает.

Я создал TinyDebt: простой трекер долгов без backend

Последние несколько недель я разрабатывал TinyDebt — крошечное приложение для учёта долгов, займов и погашений. Хочу поделиться некоторыми техническими решениями, стоящими за ним: вдруг это пригодится тем, кто создаёт небольшие целенаправленные приложения.

🧩 Зачем я его создал

Я постоянно забывал о мелких долгах между друзьями, а существующие приложения казались тяжёлыми: регистрация, реклама повсюду, сложные финансовые функции.

Мне хотелось что-то, что:

  • открывается мгновенно
  • позволяет добавить долг за 3–5 секунд
  • работает офлайн
  • навсегда останется простым

Так появился TinyDebt.

⚙️ Технологический стек

TinyDebt намеренно сделан лёгким:

  • React Native (Expo) для мобильной версии
  • Подход local-first с AsyncStorage
  • Без backend — данные хранятся на устройстве (Firebase только для резервных копий)
  • TypeScript везде
  • Минималистичный интерфейс на собственных компонентах вместо UI-библиотек
  • Сборка для App Store и Google Play через EAS build

Без учётных записей, без аналитики, без внешних зависимостей, кроме самых необходимых.

🗂️ Модель данных

Каждая запись о долге выглядит так:

type Debt = {
  id: string;
  name: string;
  amount: number;
  type: "owed" | "borrowed";
  createdAt: number;
  history: Repayment[];
};

type Repayment = {
  amount: number;
  date: number;
};

Сериализуемость всех данных делает хранение и миграции лёгкими.

🧠 Local-first UX

TinyDebt не зависит от сервера, поэтому:

  • действия применяются мгновенно
  • нет состояний загрузки или «синхронизации»
  • приложение работает быстро даже на старых телефонах

Для небольшой личной утилиты это идеальный вариант.

🎨 Философия интерфейса

Я хотел, чтобы приложение ощущалось «спокойным»:

  • простые нейтральные цвета
  • без графиков и дашбордов
  • без лишнего — один экран выполняет 90% работы
  • удобные области нажатия для быстрого ввода

Небольшим приложениям не нужны сложные визуальные эффекты, чтобы быть полезными.

📦 Публикация

Но я хочу сохранить минимальный объём функций — в этом и смысл.

🙌 Буду рад отзывам

Если вы разрабатываете мобильные приложения или у вас есть мысли о local-first утилитах, буду рад отзывам. Я всегда улучшаю приложение.