Skip to content

~/projects / lean-track

LeanTrack

Calorie and macro tracker: set goals, log meals in a daily diary and monitor progress. Vue 3 frontend, Fastify API, PostgreSQL.

role
full stack: Fastify API, Vue frontend, database
time
May 2026
type
personal
stack
Vue 3 · Fastify · TypeORM · PostgreSQL · Docker
demo.mp4
[demo video: screen recording, 1–3 min]

01 / problem

Tracking nutrition without friction

Staying on track means seeing calories and macros against your goals every day, with as little effort as possible when logging a meal.

02 / solution

Goals, products and a daily diary

Users register and sign in, set nutrition goals, manage a list of products and add food diary entries. The API exposes auth, products, diary and goals endpoints, and the frontend is organised by the same features.

  • [screenshot 1]

    [caption]

  • [screenshot 2]

    [caption]

03 / architecture

How it works

A pnpm monorepo with a Fastify + TypeORM backend (feature modules for auth, diary, products and goals; config for environment, JWT and database; migrations) and a Vue 3 + Vite frontend split into features, shared code and the router. PostgreSQL runs in Docker Compose. Both apps use TypeScript strict mode, ESLint, Prettier and Vitest.

04 / results

Outcome

05 / lessons

What I learned

  • Mirroring the backend modules in frontend features keeps each feature easy to find on both sides.
  • A PRD, a tech spec and user-flow diagrams sit in docs/ next to the code, so the intent behind each module stays on record.

gallery

  • [photo]

    [caption]

  • [photo]

    [caption]

  • [photo]

    [caption]