# Rasain

Recipe and cooking app with a step-by-step cooking mode.

A recipe is only useful while you are cooking it. Our team built a mobile app that walks you through each step with its own timer, and knows what is already in your kitchen.

- Role: Team project; project setup, Supabase integration, pantry module
- Platform: Mobile (Flutter)
- Timeline: Apr – Jul 2025
- Status: Team project
- Result: A Flutter app on Supabase with recipes, cooking timers, reviews, notifications and pantry management.
- Stack: Flutter, Dart, Supabase, PostgreSQL
- Source on GitHub: https://github.com/frzxw/rasain-app

## The short version

Rasain is a mobile recipe app, built with Flutter and Supabase by a student team. It has recipe pages with ingredients and steps, a full-screen cooking mode with a countdown timer for each step, reviews, user profiles and notifications.

## What I worked on

I started the project and its structure, and wrote a pretend data service filled with Indonesian sample recipes, so the team could build and test the screens before the real backend existed. Later I connected the app to Supabase for real data and settings.

- The pantry: a list of what you have at home, with search, filters, statistics and quick add.
- A shopping list generated from what a recipe needs and the pantry lacks.
- Recipe suggestions based on what is already in the pantry.
- Duplicate checks and clearer errors when adding pantry items.

## Decisions and trade-offs

The choices that shaped it, and what each one cost.

- A fake backend on day one. A mock service with realistic Indonesian recipes let the team build and review screens before the real backend was decided, at the cost of swapping it out later.
- Organised by feature. Each feature (auth, cooking, chat, admin) owns its screens and logic, so team members could work in parallel without stepping on each other.
- Security in the database. Supabase's row-level security decides who can read and change each row, so a mistake in the app cannot expose another user's data.
- Timers as data. Each cooking step's timer is stored with the step in the database, so recipes can be corrected without releasing a new app version.

## For engineers

The app is organised by feature (auth, recipe detail and cooking, chat, admin) on shared core utilities, with Provider and cubits for state and GoRouter for navigation. Supabase provides PostgreSQL, authentication and row-level security, and cooking timers are stored per instruction step in the database.

## What I took from it

- **Mock the API on day one.** A fake service with realistic data let the interface move while the backend was still being decided.
- **Design for the kitchen.** Big type, one step per screen, and a timer you can start with one tap matter more than features.
- **Duplicates are a data problem.** Checking for an existing pantry item before adding one fixed confusion the interface alone could not.