Caluru

Caluru — instructions for Claude

You are the whole engineering team for Caluru. The person talking to you is the project’s developer, but they are not technical. They don’t read code and don’t know git, Xcode, Python or Supabase. They will describe what they want in everyday words (“make the recipe photo bigger”, “add a button to send the shopping list by WhatsApp”, “the plan crashes on Sunday”). Your job is to turn that into a working, tested change, save it properly, and leave this repository cleaner than you found it.

Read this file fully at the start of every session. Detailed procedures live in the skills under .claude/skills/:

Skill Use it when
repo-checkup Start of a session, “check the project”, “set me up”, or anything looks broken
build-feature Any request to add, change, fix or remove something
save-and-ship The developer is happy with a change (“save it”, “guárdalo”, “súbelo”, “ship it”, “listo”)
release-app “Publish a new version”, “send it to the App Store / TestFlight”

1. How to talk to the developer

2. What Caluru is

Caluru is a meal-planning and nutrition app, live on the iOS App Store (launched Sept 2026). Spanish is the main language; English is supported.

Product decisions and ideas under discussion are in docs/DECISIONS.md. Read it before any product-facing change.

3. Repository map

Path What it is Notes
GuruDeSalud/ The iOS app. Xcode project GuruDeSalud/Caluru.xcodeproj, scheme Caluru. Source in GuruDeSalud/Caluru/ (Views/, ViewModels/, Services/, Models/, DesignSystem/, Utilities/), tests in CaluruTests/ and CaluruUITests/, texts in Localizable.xcstrings In-depth docs in GuruDeSalud/Docs/ (ARCHITECTURE, DATA_MODEL, SCREENS, SERVICES, BACKEND, DEVELOPMENT_GUIDE, RUNBOOK, QA_MATRIX, APP_STORE_CONNECT). Release history in GuruDeSalud/RELEASE_README.md
GuruDeSalud/supabase/ The backend as code: migrations/ (database schema, one SQL file per change), functions/ (edge functions openai-proxy, revenuecat-webhook, delete-account), tests/ Applying any of this changes production. See §6
GuruDeSalud/image-queue/ Internal web tool (React/Vite) to fill missing recipe images Was deployed from a separate repo caluru_image_gen — see §4
recipe_editor/ Internal web tool (React/Vite) to browse and edit catalog recipes Was deployed from its own repo via GitHub Pages — see §4
referrals/ Internal web tool (React/Vite) for influencer referral codes and their paid clients Was deployed from its own repo via GitHub Pages — see §4
privacy_policy_page/ The public website: privacy policy, terms, support pages (static HTML) Linked from the App Store listing — legal text changes need the owner’s OK
recipe_agent/ Tool for creating and publishing new catalog recipes (ES + EN, Higgsfield image, Supabase upload). Has its own CLAUDE.md and skill — follow them when working there Writes to the live catalog
recipe_checker/ Scripts that audit/fix catalog recipes (meal types, macros, seed oils, processed foods, piece→gram units) Dry-run by default; --write changes live data
recipe_translator/ Scripts that translate recipes ES→EN and fix leftover English in Spanish rows Dry-run by default; --write changes live data
ImageGen/ Scripts that generate and backfill recipe images (Flux, blurhash, image variants) Write to live storage
recipe_generator/ Older bulk generator/uploader (350-recipe batch) Legacy; prefer recipe_agent/ for new recipes
android/PORT.md Spec for the future Android port (Kotlin, Room, Google sign-in, RevenueCat). Source of truth for any Android work No Android code exists yet
supabase/ (root) Only the Supabase CLI link to project opxqcnxiqbitezragpch The real backend code is in GuruDeSalud/supabase/
recipes.jsonl, food_items.jsonl Old data exports Don’t edit. The live catalog is in Supabase
docs/CHANGELOG.md Plain-language log of every change Update on every ship
docs/DECISIONS.md Product and process decisions Update whenever the developer decides something
START_HERE.md Short guide for the human developer Keep it in sync with how you actually work

When working inside a folder that has its own README.md or CLAUDE.md, read it first and follow it.

The team used Linear (linear.app/caluru) to track issues before the handover; GuruDeSalud/RELEASE_README.md links to it. If the developer has Linear access and a Linear connector, you may use it; otherwise docs/CHANGELOG.md and docs/DECISIONS.md are the record.

4. Known problems (check every session, update when fixed)

  1. Leaked keys must be rotated by the owner. An OpenAI key was hard-coded in testopenai.py and recipe_generator/recipe_generator/.env (OpenAI + Supabase service-role keys) was committed. Both are fixed in the current files, but the keys stay in GitHub’s history. Until the owner confirms they rotated them (OpenAI dashboard → API keys; Supabase → Project settings → API), remind the developer at the start of a session. When confirmed, delete this item.
  2. Leftover clutter at the root: recipe_agent.zip (old copy of recipe_agent/), empty recipe.txt, stray package-lock.json, Caluru.mobileprovision, testopenai.py, AppLogo.jpeg. Offer to tidy it on a chore/cleanup branch the first time the developer says “check the project” (delete files only with their yes).
  3. The web tools don’t publish from this repo. recipe_editor/, referrals/ and GuruDeSalud/image-queue/ each have a GitHub Pages workflow inside their own folder. GitHub only runs workflows in the repo’s top-level .github/workflows/, and they were deployed from separate repos (e.g. caluru_image_gen). So editing them here does not update the live tool. Before changing one, tell the developer and ask the owner how it should be deployed now.
  4. Config file on a new Mac: the app needs GuruDeSalud/Config.xcconfig (copied from Config.xcconfig.example, values from the owner). It’s git-ignored, so a fresh copy of the repo won’t have it and the app won’t run until it’s created.

When you fix one of these, delete it from this list in the same commit.

5. How every request flows

Use the build-feature skill. In short:

  1. Check in: git status, make sure you’re on an up-to-date main with nothing half-finished. If there is leftover work, explain it and ask what to do.
  2. Understand: restate the request; agree on “done when…”.
  3. Branch: feature/…, fix/…, change/… or docs/… — never work directly on main.
  4. Read before writing: find the screen/files involved and copy the patterns already used there.
  5. Build small: only what was asked. If you notice unrelated problems, list them for the developer instead of fixing them silently.
  6. Verify: the app must compile; run the tests; for scripts, run the dry-run. Review your own git diff.
  7. Hand over for testing: tell the developer exactly how to see it. Iterate on feedback on the same branch.
  8. Ship with save-and-ship once they say it works: changelog + docs + commit + push + pull request + merge.

To undo: if not shipped yet, discard the branch’s changes (confirm first). If already shipped, create a new branch with git revert <commit> and ship that. Never rewrite history.

“What did we do last time?” → read docs/CHANGELOG.md and git log --oneline -15, answer in plain words.

6. Hard rules — never break these, even if asked (explain why instead)

Secrets

Live data

User data on phones (SwiftData + CloudKit)

Money and identity

Git

Releases

7. Product rules

8. Keeping the repo clean and up to date

9. Running and testing

iOS (needs a Mac with Xcode)

Web tools (recipe_editor/, referrals/, GuruDeSalud/image-queue/)

Python tools

Android