← Back to portfolio

Selected work

FinanCinno

A personal finance workspace that makes budgeting feel calm instead of chaotic.

Summary

FinanCinno is a lightweight finance app for tracking spending, reviewing habits, and making sense of monthly budgets from a single place.

Built for people who want structured financial visibility without the overhead of a full accounting tool.

Problem

Most budgeting tools are either too rigid or too noisy. Expense entry is repetitive, insights arrive late, and the experience rarely feels calm enough for daily use.

Solution

A friction-light flow: capture spending quickly, surface useful context in plain language, and keep the interface calm so it stays useful over time.

Features

Quick captureLog transactions in a few taps so spending tracking stays effortless.
Budget coachingFlags spending drift and surfaces practical nudges without overwhelming the user.
Readable summariesTurns raw activity into plain-English snapshots for the week or month.
Calm workspaceKeeps the surface focused on the next best action instead of dense dashboards.

Architecture

Stack: React · Node.js · Express · MongoDB · Clerk · Vercel

ReactReact
Node.jsNode.js
ExpressExpress
MongoDBMongoDB
ClerkClerk

React SPA sends requests through a thin Express API layer.

MongoDB stores transactions and budget state as flexible documents.

Clerk handles authentication so sign-in and access control stay simple.

MongoDB was chosen for flexible document shapes around spending records and budget snapshots.

Key code

routes/transactions.js
router.post("/api/transactions", requireAuth, async (req, res) => {
  const { amount, category, description, date } = req.body;

  const transaction = await db.transactions.create({
    userId: req.auth.userId,
    amount,
    category,
    description,
    date: new Date(date),
  });

  // Auto-update budget coaching
  const budget = await db.budgets.findByUserAndCategory(
    req.auth.userId, category
  );
  if (budget && budget.spent + amount > budget.limit) {
    transaction.coaching = {
      type: "warning",
      message: `You've used ${Math.round(((budget.spent + amount) / budget.limit) * 100)}% of your ${category} budget.`
    };
  }

  res.json({ transaction });
});

Results

Core flow is usable as a daily habit rather than a quarterly chore.

Taught me that a good finance experience depends on clarity and pacing, not features.