back to projects

Arco — habits with progression

.NET 10 · React 19 PWA · MCP server · 83 tests

Habit PWA with leveled habits, goals in 6-week cycles, XP and achievements. Works offline and exposes a REST API and an MCP server.

  • .NET 10
  • EF Core
  • SQLite
  • React 19
  • TypeScript
  • TanStack Query
  • Tailwind CSS 4
  • Azure

The second generation of Arco. The first one (an open source check-in app with scoring, built with .NET 9 and Next.js) became the base for a bigger idea: habits that grow. The new version’s code is private and it is in personal use, on its way to becoming multi-user.

What it does

  • Leveled habits: each level has a dose and a minimum version, and the ladder can be planned ahead. The app suggests moving up or down a step based on consistency, but the user always decides.
  • Cycles and goals: 6-week cycles (configurable from 1 to 12), with numeric or milestone goals and a guided review at the end.
  • Progress: done, minimum or skipped check-ins, a streak that forgives one isolated miss per week, XP, 16 achievements and stats for the last 12 weeks.

Engineering

  • One API, one process: .NET 10 with Minimal APIs organized by feature. The API serves the React 19 + Vite front end from the same process.
  • XP as a ledger: every XP gain is written in the same transaction as the action that earned it. Undoing a cycle or goal also undoes its XP and achievements.
  • MCP server with 17 tools, so AI assistants can read and log habits. The tools go through the app’s own REST API, never straight to the database.
  • Real offline support: the cache lives in IndexedDB, and check-ins made offline go into a queue and are replayed in order when the network comes back.
  • Web Push built from scratch (VAPID and aes128gcm encryption, no library), with reminders sent by a background service.
  • API keys of 256 bits stored only as hashes, and a daily SQLite backup kept for 14 days.
  • Azure deploy through GitHub Actions with OIDC login, no long-lived secret in the repository. 83 domain and integration tests.

// cv.pdf

Download resume

Before the download, tell me who you are, so I know who to follow up with.

Your data is never shared and can be deleted whenever you ask.